@weni/unnnic-system 3.9.0 → 3.9.1-alpha.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/CHANGELOG.md +1 -1
- package/dist/assets/tokens/colors.json.d.ts +376 -0
- package/dist/components/Accordion/Accordion.vue.d.ts +1 -1
- package/dist/components/Alert/Alert.vue.d.ts +17 -116
- package/dist/components/Alert/Alert.vue.d.ts.map +1 -1
- package/dist/components/Alert/Version1dot1.vue.d.ts +2 -38
- package/dist/components/Alert/Version1dot1.vue.d.ts.map +1 -1
- package/dist/components/AudioRecorder/AudioHandler.vue.d.ts +2 -2
- package/dist/components/AudioRecorder/AudioPlayer.vue.d.ts +1 -1
- package/dist/components/AudioRecorder/AudioRecorder.vue.d.ts +5 -5
- package/dist/components/AvatarIcon/AvatarIcon.vue.d.ts +3 -3
- package/dist/components/Banner/Banner.vue.d.ts +1 -1
- package/dist/components/Banner/InfoBanner.vue.d.ts +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.vue.d.ts +1 -1
- package/dist/components/Button/Button.vue.d.ts +1 -1
- package/dist/components/Button/Button.vue.d.ts.map +1 -1
- package/dist/components/Button/ButtonIcon.vue.d.ts +1 -1
- package/dist/components/Button/types.d.ts +1 -1
- package/dist/components/Button/types.d.ts.map +1 -1
- package/dist/components/Card/AccountCard.vue.d.ts +5 -5
- package/dist/components/Card/BlankCard.vue.d.ts +1 -1
- package/dist/components/Card/Card.vue.d.ts +27 -27
- package/dist/components/Card/CardCompany.vue.d.ts +11 -414
- package/dist/components/Card/CardData.vue.d.ts +1 -1
- package/dist/components/Card/CardStatusesContainer.vue.d.ts +5 -5
- package/dist/components/Card/ContentCard.vue.d.ts +3 -3
- package/dist/components/Card/DashCard.vue.d.ts +5 -5
- package/dist/components/Card/DefaultCard.vue.d.ts +1 -1
- package/dist/components/Card/MarketplaceCard.vue.d.ts +2 -2
- package/dist/components/Card/SimpleCard.vue.d.ts +3 -3
- package/dist/components/Card/StatusCard.vue.d.ts +2 -2
- package/dist/components/Card/TitleCard.vue.d.ts +3 -3
- package/dist/components/CardImage/CardImage.vue.d.ts +24 -31
- package/dist/components/CardInformation/CardInformation.vue.d.ts +5 -5
- package/dist/components/CardProject/CardProject.vue.d.ts +3 -3
- package/dist/components/Carousel/Carousel.vue.d.ts +13 -416
- package/dist/components/Carousel/TagCarousel.vue.d.ts +12 -415
- package/dist/components/ChartBar/ChartBar.vue.d.ts +5 -5
- package/dist/components/ChartLine/ChartLine.vue.d.ts +1 -1
- package/dist/components/ChatText/ChatText.vue.d.ts +2 -2
- package/dist/components/ChatsContact/ChatsContact.vue.d.ts +21 -446
- package/dist/components/ChatsDashboardTagLive/ChatsDashboardTagLive.vue.d.ts +1 -1
- package/dist/components/ChatsHeader/ChatsHeader.vue.d.ts +1 -1
- package/dist/components/ChatsHeader/ChatsHeader.vue.d.ts.map +1 -1
- package/dist/components/ChatsMessage/ChatsMessage.vue.d.ts +5 -5
- package/dist/components/ChatsMessage/ChatsMessageStatusBackdrop.vue.d.ts +2 -2
- package/dist/components/ChatsNavbar/ChatsNavbar.vue.d.ts +1 -1
- package/dist/components/ChatsUserAvatar/ChatsUserAvatar.vue.d.ts +2 -2
- package/dist/components/Checkbox/Checkbox.vue.d.ts +19 -26
- package/dist/components/Checkbox/Checkbox.vue.d.ts.map +1 -1
- package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts +28 -0
- package/dist/components/CheckboxGroup/CheckboxGroup.vue.d.ts.map +1 -0
- package/dist/components/Comment/Comment.vue.d.ts +1 -1
- package/dist/components/DataArea/DataArea.vue.d.ts +2 -2
- 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 +251 -41
- package/dist/components/DatePicker/DatePicker.vue.d.ts +4 -4
- package/dist/components/Drawer/Drawer.vue.d.ts +4 -4
- package/dist/components/Dropdown/Dropdown.vue.d.ts +1 -1
- package/dist/components/Dropdown/LanguageSelect.vue.d.ts +3 -3
- package/dist/components/Flag.vue.d.ts +2 -2
- package/dist/components/FormElement/FormElement.vue.d.ts +51 -28
- package/dist/components/FormElement/FormElement.vue.d.ts.map +1 -1
- package/dist/components/Icon.vue.d.ts +1 -1
- package/dist/components/Icon.vue.d.ts.map +1 -1
- package/dist/components/IconLoading/IconLoading.vue.d.ts +1 -1
- package/dist/components/ImportCard/ImportCard.vue.d.ts +4 -4
- package/dist/components/Input/BaseInput.vue.d.ts +33 -2
- package/dist/components/Input/BaseInput.vue.d.ts.map +1 -1
- package/dist/components/Input/Input.vue.d.ts +251 -41
- package/dist/components/Input/Input.vue.d.ts.map +1 -1
- package/dist/components/Input/TextInput.vue.d.ts +85 -25
- package/dist/components/Input/TextInput.vue.d.ts.map +1 -1
- package/dist/components/InputDatePicker/InputDatePicker.vue.d.ts +257 -47
- package/dist/components/InputNext/InputNext.vue.d.ts +5 -5
- package/dist/components/Label/Label.vue.d.ts +9 -15
- package/dist/components/Label/Label.vue.d.ts.map +1 -1
- package/dist/components/Modal/Modal.vue.d.ts +2 -2
- package/dist/components/ModalDialog/ModalDialog.vue.d.ts +199 -34
- package/dist/components/ModalDialog/ModalDialog.vue.d.ts.map +1 -1
- package/dist/components/ModalNext/ModalNext.vue.d.ts +256 -46
- package/dist/components/ModalUpload/ModalUpload.vue.d.ts +9 -9
- package/dist/components/MoodRating/MoodRating.vue.d.ts +1 -1
- package/dist/components/MultiSelect/MultiSelect.vue.d.ts +26 -14
- package/dist/components/PageHeader/PageHeader.vue.d.ts +28 -0
- package/dist/components/PageHeader/PageHeader.vue.d.ts.map +1 -0
- package/dist/components/PageHeader/index.d.ts +3 -0
- package/dist/components/PageHeader/index.d.ts.map +1 -0
- package/dist/components/PageHeader/types.d.ts +9 -0
- package/dist/components/PageHeader/types.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.vue.d.ts +3 -3
- package/dist/components/ProgressBar/ProgressBar.vue.d.ts +1 -1
- package/dist/components/Radio/Radio.vue.d.ts +10 -6
- package/dist/components/Radio/Radio.vue.d.ts.map +1 -1
- package/dist/components/SelectSmart/SelectSmart.vue.d.ts +120 -470
- package/dist/components/SelectSmart/SelectSmartMultipleHeader.vue.d.ts +11 -414
- package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts +21 -28
- package/dist/components/SelectSmart/SelectSmartOption.vue.d.ts.map +1 -1
- package/dist/components/SelectTime/index.vue.d.ts +85 -25
- package/dist/components/SkeletonLoading/skeletonTheme.vue.d.ts +1 -1
- package/dist/components/Slider/Slider.vue.d.ts +2 -2
- package/dist/components/StarRating/StarRating.vue.d.ts +1 -1
- package/dist/components/Switch/Switch.vue.d.ts +55 -21
- package/dist/components/Switch/Switch.vue.d.ts.map +1 -1
- package/dist/components/Tab/Tab.vue.d.ts +13 -2
- package/dist/components/TableNext/TableBodyCell.vue.d.ts +2 -2
- package/dist/components/TableNext/TablePagination.vue.d.ts +3 -3
- package/dist/components/TabsExpanded/TabsExpanded.vue.d.ts +1 -1
- package/dist/components/Tag/DefaultTag.vue.d.ts +4 -83
- package/dist/components/Tag/DefaultTag.vue.d.ts.map +1 -1
- package/dist/components/Tag/Tag.vue.d.ts +12 -414
- package/dist/components/Tag/Tag.vue.d.ts.map +1 -1
- package/dist/components/Tag/types.d.ts +18 -0
- package/dist/components/Tag/types.d.ts.map +1 -0
- package/dist/components/TextArea/TextArea.vue.d.ts +75 -30
- package/dist/components/TextArea/TextArea.vue.d.ts.map +1 -1
- package/dist/components/Toast/Toast.vue.d.ts +16 -0
- package/dist/components/Toast/Toast.vue.d.ts.map +1 -0
- package/dist/components/Toast/ToastManager.d.ts +14 -0
- package/dist/components/Toast/ToastManager.d.ts.map +1 -0
- package/dist/components/Toast/types.d.ts +35 -0
- package/dist/components/Toast/types.d.ts.map +1 -0
- package/dist/components/ToolTip/ToolTip.vue.d.ts +1 -1
- package/dist/components/Tour/Tour.vue.d.ts +3 -3
- package/dist/components/Tour/TourPopover.vue.d.ts +3 -3
- package/dist/components/UploadArea/UploadArea.vue.d.ts +4 -4
- package/dist/components/index.d.ts +13127 -13782
- 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 +40 -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/popover/PopoverContent.vue.d.ts +1 -1
- package/dist/components/ui/popover/PopoverContent.vue.d.ts.map +1 -1
- package/dist/{es-4b7090cd.mjs → es-ed9b7d22.mjs} +1 -1
- package/dist/{index-65c23d9a.mjs → index-bbfce723.mjs} +12443 -11221
- package/dist/locales/en.json.d.ts +2 -1
- package/dist/locales/es.json.d.ts +2 -1
- package/dist/locales/pt_br.json.d.ts +2 -1
- package/dist/{pt-br-6324858c.mjs → pt-br-8c45d7e7.mjs} +1 -1
- package/dist/style.css +1 -1
- package/dist/unnnic.mjs +200 -179
- package/dist/unnnic.umd.js +42 -39
- package/dist/utils/call.d.ts +2 -1
- package/dist/utils/call.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/assets/icons/checkbox-checked-disabled.svg +3 -0
- package/src/assets/icons/checkbox-checked.svg +3 -0
- package/src/assets/icons/checkbox-less-disabled.svg +3 -0
- package/src/assets/icons/checkbox-less.svg +3 -0
- package/src/assets/icons/radio-checked.svg +3 -0
- package/src/assets/icons/switch-checked-disabled.svg +3 -0
- package/src/assets/icons/switch-checked.svg +3 -0
- package/src/assets/scss/tailwind.scss +8 -0
- package/src/components/Alert/Alert.vue +26 -135
- package/src/components/Alert/SIMPLE_MIGRATION_GUIDE.md +152 -0
- package/src/components/Alert/Version1dot1.vue +0 -36
- package/src/components/Alert/__tests__/Alert.spec.js +2 -45
- package/src/components/Alert/__tests__/Version1dot1.spec.js +0 -21
- package/src/components/Alert/__tests__/__snapshots__/Alert.spec.js.snap +11 -7
- package/src/components/Alert/__tests__/__snapshots__/AlertBanner.spec.js.snap +2 -2
- package/src/components/Alert/__tests__/__snapshots__/Version1dot1.spec.js.snap +2 -2
- package/src/components/Button/Button.vue +68 -117
- package/src/components/Button/types.ts +0 -1
- package/src/components/ChatsContact/ChatsContact.vue +10 -6
- package/src/components/Checkbox/Checkbox.vue +117 -65
- package/src/components/Checkbox/__tests__/Checkbox.spec.js +6 -21
- package/src/components/CheckboxGroup/CheckboxGroup.vue +96 -0
- package/src/components/FormElement/FormElement.vue +63 -93
- package/src/components/Icon.vue +2 -0
- package/src/components/Input/BaseInput.vue +33 -14
- package/src/components/Input/Input.scss +20 -21
- package/src/components/Input/Input.vue +79 -56
- package/src/components/Input/TextInput.vue +80 -68
- package/src/components/Input/__test__/Input.spec.js +13 -33
- package/src/components/Input/__test__/TextInput.spec.js +6 -8
- package/src/components/Input/__test__/__snapshots__/Input.spec.js.snap +14 -5
- package/src/components/Input/__test__/__snapshots__/TextInput.spec.js.snap +1 -1
- package/src/components/Label/Label.vue +52 -21
- package/src/components/Label/__tests__/Label.spec.js +1 -1
- package/src/components/Label/__tests__/__snapshots__/Label.spec.js.snap +1 -1
- package/src/components/ModalDialog/ModalDialog.vue +60 -146
- package/src/components/ModalDialog/__tests__/__snapshots__/ModalDialog.spec.js.snap +1 -22
- package/src/components/PageHeader/PageHeader.vue +154 -0
- package/src/components/PageHeader/index.ts +2 -0
- package/src/components/PageHeader/types.ts +10 -0
- package/src/components/Popover/__tests__/Popover.spec.js +147 -0
- package/src/components/Popover/__tests__/__snapshots__/Popover.spec.js.snap +8 -0
- package/src/components/Popover/index.vue +146 -0
- package/src/components/Radio/Radio.vue +118 -66
- package/src/components/Radio/__test__/Radio.spec.js +14 -20
- package/src/components/Radio/__test__/__snapshots__/Radio.spec.js.snap +3 -3
- package/src/components/RadioGroup/RadioGroup.vue +142 -0
- package/src/components/Select/SelectOption.vue +65 -0
- package/src/components/Select/__tests__/Select.spec.js +412 -0
- package/src/components/Select/__tests__/SelectItem.spec.js +330 -0
- package/src/components/Select/__tests__/SelectOption.spec.js +174 -0
- package/src/components/Select/__tests__/__snapshots__/Select.spec.js.snap +97 -0
- package/src/components/Select/__tests__/__snapshots__/SelectItem.spec.js.snap +15 -0
- package/src/components/Select/__tests__/__snapshots__/SelectOption.spec.js.snap +25 -0
- package/src/components/Select/index.vue +245 -0
- package/src/components/SelectSmart/SelectSmart.vue +4 -3
- package/src/components/Switch/Switch.vue +132 -91
- package/src/components/Switch/__tests__/Switch.spec.js +8 -75
- package/src/components/Switch/__tests__/__snapshots__/Switch.spec.js.snap +5 -6
- package/src/components/Tab/Tab.vue +37 -23
- package/src/components/Tab/__test__/__snapshots__/Tab.spec.js.snap +1 -1
- package/src/components/TableNext/__test__/__snapshots__/TableNext.spec.js.snap +2 -2
- package/src/components/TableNext/__test__/__snapshots__/TablePagination.spec.js.snap +2 -2
- package/src/components/Tag/DefaultTag.vue +51 -107
- package/src/components/Tag/Tag.vue +32 -79
- package/src/components/Tag/types.ts +19 -0
- package/src/components/TextArea/TextArea.vue +40 -11
- package/src/components/TextArea/__test__/__snapshots__/TextArea.spec.js.snap +11 -3
- package/src/components/Toast/Toast.vue +246 -0
- package/src/components/Toast/ToastManager.ts +110 -0
- package/src/components/Toast/__tests__/Toast.spec.js +291 -0
- package/src/components/Toast/__tests__/ToastManager.spec.js +294 -0
- package/src/components/Toast/types.ts +57 -0
- package/src/components/index.ts +69 -26
- 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 +114 -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/locales/en.json +2 -1
- package/src/locales/es.json +2 -1
- package/src/locales/pt_br.json +2 -1
- package/src/stories/Alert.stories.js +6 -67
- package/src/stories/Button.stories.js +29 -39
- package/src/stories/Checkbox.stories.js +11 -4
- package/src/stories/CheckboxGroup.stories.js +105 -0
- package/src/stories/Dialog.stories.js +832 -0
- package/src/stories/Input.stories.js +71 -76
- package/src/stories/Label.stories.js +7 -0
- package/src/stories/ModalDialog.mdx +3 -0
- package/src/stories/ModalDialog.stories.js +1 -1
- package/src/stories/PageHeader.stories.js +330 -0
- package/src/stories/Radio.stories.js +28 -1
- package/src/stories/RadioGroup.stories.js +144 -0
- package/src/stories/Select.stories.js +158 -0
- package/src/stories/Switch.stories.js +10 -5
- package/src/stories/Tab.stories.js +11 -4
- package/src/stories/Tag.stories.js +24 -43
- package/src/stories/TextArea.stories.js +14 -2
- package/src/stories/Toast.mdx +123 -0
- package/src/stories/Toast.stories.js +126 -0
- package/src/types/scheme-colors.d.ts +1 -0
- package/src/utils/call.js +46 -18
- package/dist/components/Tag/BrandTag.vue.d.ts +0 -51
- package/dist/components/Tag/BrandTag.vue.d.ts.map +0 -1
- package/dist/components/Tag/IndicatorTag.vue.d.ts +0 -151
- package/dist/components/Tag/IndicatorTag.vue.d.ts.map +0 -1
- package/dist/components/Tag/TagNext.vue.d.ts +0 -24
- package/dist/components/Tag/TagNext.vue.d.ts.map +0 -1
- package/src/components/Alert/AlertBanner.vue +0 -182
- package/src/components/Alert/AlertCaller.vue +0 -49
- package/src/components/Alert/__tests__/AlertBanner.spec.js +0 -89
- package/src/components/Alert/__tests__/AlertCaller.spec.js +0 -98
- package/src/components/Tag/BrandTag.vue +0 -96
- package/src/components/Tag/IndicatorTag.vue +0 -107
- package/src/components/Tag/TagNext.vue +0 -60
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, afterEach, test, vi } from 'vitest';
|
|
2
|
+
|
|
3
|
+
vi.mock('vue', () => ({
|
|
4
|
+
createApp: vi.fn(() => ({
|
|
5
|
+
mount: vi.fn(),
|
|
6
|
+
unmount: vi.fn(),
|
|
7
|
+
})),
|
|
8
|
+
}));
|
|
9
|
+
|
|
10
|
+
vi.mock('../Toast.vue', () => ({
|
|
11
|
+
default: {
|
|
12
|
+
name: 'Toast',
|
|
13
|
+
template: '<div data-testid="toast">Mock Toast</div>',
|
|
14
|
+
},
|
|
15
|
+
}));
|
|
16
|
+
|
|
17
|
+
import toastManager, { toast } from '../ToastManager';
|
|
18
|
+
import Toast from '../Toast.vue';
|
|
19
|
+
|
|
20
|
+
describe('ToastManager', () => {
|
|
21
|
+
let mockCreateApp;
|
|
22
|
+
let mockMount;
|
|
23
|
+
let mockUnmount;
|
|
24
|
+
|
|
25
|
+
beforeEach(async () => {
|
|
26
|
+
vi.clearAllMocks();
|
|
27
|
+
|
|
28
|
+
document.body.innerHTML = '';
|
|
29
|
+
|
|
30
|
+
const { createApp } = await import('vue');
|
|
31
|
+
mockCreateApp = createApp;
|
|
32
|
+
mockMount = vi.fn();
|
|
33
|
+
mockUnmount = vi.fn();
|
|
34
|
+
|
|
35
|
+
mockCreateApp.mockReturnValue({
|
|
36
|
+
mount: mockMount,
|
|
37
|
+
unmount: mockUnmount,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
Object.defineProperty(globalThis, 'document', {
|
|
41
|
+
value: {
|
|
42
|
+
...document,
|
|
43
|
+
createElement: vi.fn((tagName) => {
|
|
44
|
+
const element = {
|
|
45
|
+
tagName: tagName.toUpperCase(),
|
|
46
|
+
setAttribute: vi.fn(),
|
|
47
|
+
appendChild: vi.fn(),
|
|
48
|
+
remove: vi.fn(),
|
|
49
|
+
children: [],
|
|
50
|
+
parentNode: null,
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
if (tagName === 'div') {
|
|
54
|
+
element.appendChild = vi.fn((child) => {
|
|
55
|
+
child.parentNode = element;
|
|
56
|
+
element.children.push(child);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return element;
|
|
61
|
+
}),
|
|
62
|
+
body: {
|
|
63
|
+
...document.body,
|
|
64
|
+
appendChild: vi.fn(),
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
writable: true,
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
afterEach(() => {
|
|
72
|
+
if (toastManager.toasts) {
|
|
73
|
+
toastManager.toasts.clear();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
document.body.innerHTML = '';
|
|
77
|
+
|
|
78
|
+
vi.clearAllMocks();
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
describe('Container Management', () => {
|
|
82
|
+
test('creates container on first toast', () => {
|
|
83
|
+
const createElementSpy = vi.spyOn(document, 'createElement');
|
|
84
|
+
const appendChildSpy = vi.spyOn(document.body, 'appendChild');
|
|
85
|
+
|
|
86
|
+
toastManager.show({ title: 'Test Toast' });
|
|
87
|
+
|
|
88
|
+
expect(createElementSpy).toHaveBeenCalledWith('div');
|
|
89
|
+
expect(appendChildSpy).toHaveBeenCalled();
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
test('reuses existing container', () => {
|
|
93
|
+
const createElementSpy = vi.spyOn(document, 'createElement');
|
|
94
|
+
|
|
95
|
+
toastManager.show({ title: 'First Toast' });
|
|
96
|
+
const firstCallCount = createElementSpy.mock.calls.length;
|
|
97
|
+
|
|
98
|
+
toastManager.show({ title: 'Second Toast' });
|
|
99
|
+
const secondCallCount = createElementSpy.mock.calls.length;
|
|
100
|
+
|
|
101
|
+
// First toast: container div + wrapper div = 2 calls
|
|
102
|
+
// Second toast: only wrapper div = 1 more call
|
|
103
|
+
// Total: 3 calls (1 container + 2 wrappers)
|
|
104
|
+
expect(secondCallCount).toBe(firstCallCount + 1);
|
|
105
|
+
|
|
106
|
+
expect(createElementSpy).toHaveBeenCalledWith('div');
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
describe('Toast Instance Management', () => {
|
|
111
|
+
test('generates unique IDs for toasts', () => {
|
|
112
|
+
const toast1 = toastManager.show({ title: 'First Toast' });
|
|
113
|
+
const toast2 = toastManager.show({ title: 'Second Toast' });
|
|
114
|
+
|
|
115
|
+
expect(toast1.id).not.toBe(toast2.id);
|
|
116
|
+
expect(toast1.id).toMatch(/^toast-\d+$/);
|
|
117
|
+
expect(toast2.id).toMatch(/^toast-\d+$/);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
test('stores toast instances in map', () => {
|
|
121
|
+
const toast1 = toastManager.show({ title: 'First Toast' });
|
|
122
|
+
const toast2 = toastManager.show({ title: 'Second Toast' });
|
|
123
|
+
|
|
124
|
+
expect(toastManager.toasts.has(toast1.id)).toBe(true);
|
|
125
|
+
expect(toastManager.toasts.has(toast2.id)).toBe(true);
|
|
126
|
+
expect(toastManager.toasts.size).toBe(2);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test('creates toast with correct props', () => {
|
|
130
|
+
const props = {
|
|
131
|
+
title: 'Test Toast',
|
|
132
|
+
description: 'Test Description',
|
|
133
|
+
type: 'success',
|
|
134
|
+
timeout: 3000,
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
toastManager.show(props);
|
|
138
|
+
|
|
139
|
+
expect(mockCreateApp).toHaveBeenCalledWith(
|
|
140
|
+
Toast,
|
|
141
|
+
expect.objectContaining({
|
|
142
|
+
title: 'Test Toast',
|
|
143
|
+
description: 'Test Description',
|
|
144
|
+
type: 'success',
|
|
145
|
+
timeout: 3000,
|
|
146
|
+
onClose: expect.any(Function),
|
|
147
|
+
onDestroy: expect.any(Function),
|
|
148
|
+
}),
|
|
149
|
+
);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
test('mounts toast app to wrapper element', () => {
|
|
153
|
+
toastManager.show({ title: 'Test Toast' });
|
|
154
|
+
|
|
155
|
+
expect(mockMount).toHaveBeenCalled();
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
describe('Toast Close Functionality', () => {
|
|
160
|
+
test('removes toast from map when closed', () => {
|
|
161
|
+
const toastInstance = toastManager.show({ title: 'Test Toast' });
|
|
162
|
+
|
|
163
|
+
expect(toastManager.toasts.has(toastInstance.id)).toBe(true);
|
|
164
|
+
|
|
165
|
+
toastManager.close(toastInstance.id);
|
|
166
|
+
|
|
167
|
+
expect(toastManager.toasts.has(toastInstance.id)).toBe(false);
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
test('handles closing non-existent toast gracefully', () => {
|
|
171
|
+
expect(() => {
|
|
172
|
+
toastManager.close('non-existent-id');
|
|
173
|
+
}).not.toThrow();
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
test('calls close when onClose is triggered', () => {
|
|
177
|
+
const closeSpy = vi.spyOn(toastManager, 'close');
|
|
178
|
+
|
|
179
|
+
toastManager.show({ title: 'Test Toast' });
|
|
180
|
+
|
|
181
|
+
const createAppCall = mockCreateApp.mock.calls[0];
|
|
182
|
+
const props = createAppCall[1];
|
|
183
|
+
const onCloseCallback = props.onClose;
|
|
184
|
+
|
|
185
|
+
onCloseCallback();
|
|
186
|
+
|
|
187
|
+
expect(closeSpy).toHaveBeenCalled();
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
describe('Toast Destroy Functionality', () => {
|
|
192
|
+
test('unmounts app and removes wrapper on destroy', () => {
|
|
193
|
+
toastManager.show({ title: 'Test Toast' });
|
|
194
|
+
|
|
195
|
+
const createAppCall = mockCreateApp.mock.calls[0];
|
|
196
|
+
const props = createAppCall[1];
|
|
197
|
+
const onDestroyCallback = props.onDestroy;
|
|
198
|
+
|
|
199
|
+
onDestroyCallback();
|
|
200
|
+
|
|
201
|
+
expect(mockUnmount).toHaveBeenCalled();
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
test('resolves promise when toast is destroyed', async () => {
|
|
205
|
+
const toastInstance = toastManager.show({ title: 'Test Toast' });
|
|
206
|
+
|
|
207
|
+
const createAppCall = mockCreateApp.mock.calls[0];
|
|
208
|
+
const props = createAppCall[1];
|
|
209
|
+
const onDestroyCallback = props.onDestroy;
|
|
210
|
+
|
|
211
|
+
const promiseResolved = vi.fn();
|
|
212
|
+
toastInstance.promise.then(promiseResolved);
|
|
213
|
+
|
|
214
|
+
onDestroyCallback();
|
|
215
|
+
|
|
216
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
217
|
+
|
|
218
|
+
expect(promiseResolved).toHaveBeenCalled();
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
describe('Toast API', () => {
|
|
223
|
+
beforeEach(() => {
|
|
224
|
+
vi.spyOn(toastManager, 'show').mockReturnValue({
|
|
225
|
+
id: 'mock-id',
|
|
226
|
+
props: {},
|
|
227
|
+
close: vi.fn(),
|
|
228
|
+
promise: Promise.resolve(),
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
test('toast.info creates informational toast', () => {
|
|
233
|
+
toast.info('Info Title', 'Info Description', { timeout: 1000 });
|
|
234
|
+
|
|
235
|
+
expect(toastManager.show).toHaveBeenCalledWith({
|
|
236
|
+
title: 'Info Title',
|
|
237
|
+
description: 'Info Description',
|
|
238
|
+
timeout: 1000,
|
|
239
|
+
type: 'informational',
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
test('toast.success creates success toast', () => {
|
|
244
|
+
toast.success('Success Title', 'Success Description');
|
|
245
|
+
|
|
246
|
+
expect(toastManager.show).toHaveBeenCalledWith({
|
|
247
|
+
title: 'Success Title',
|
|
248
|
+
description: 'Success Description',
|
|
249
|
+
type: 'success',
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
test('toast.attention creates attention toast', () => {
|
|
254
|
+
toast.attention('Attention Title');
|
|
255
|
+
|
|
256
|
+
expect(toastManager.show).toHaveBeenCalledWith({
|
|
257
|
+
title: 'Attention Title',
|
|
258
|
+
type: 'attention',
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
test('toast.error creates error toast', () => {
|
|
263
|
+
toast.error('Error Title', 'Error Description', {
|
|
264
|
+
button: { text: 'Retry', action: vi.fn() },
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
expect(toastManager.show).toHaveBeenCalledWith({
|
|
268
|
+
title: 'Error Title',
|
|
269
|
+
description: 'Error Description',
|
|
270
|
+
button: { text: 'Retry', action: expect.any(Function) },
|
|
271
|
+
type: 'error',
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
test('toast methods return promises', async () => {
|
|
276
|
+
const infoPromise = toast.info('Test');
|
|
277
|
+
const successPromise = toast.success('Test');
|
|
278
|
+
const attentionPromise = toast.attention('Test');
|
|
279
|
+
const errorPromise = toast.error('Test');
|
|
280
|
+
|
|
281
|
+
expect(infoPromise).toBeInstanceOf(Promise);
|
|
282
|
+
expect(successPromise).toBeInstanceOf(Promise);
|
|
283
|
+
expect(attentionPromise).toBeInstanceOf(Promise);
|
|
284
|
+
expect(errorPromise).toBeInstanceOf(Promise);
|
|
285
|
+
|
|
286
|
+
await Promise.all([
|
|
287
|
+
infoPromise,
|
|
288
|
+
successPromise,
|
|
289
|
+
attentionPromise,
|
|
290
|
+
errorPromise,
|
|
291
|
+
]);
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
});
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export interface ToastManager {
|
|
2
|
+
show: (props: ToastProps) => ToastInstance;
|
|
3
|
+
close: (id: string) => void;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface ToastButton {
|
|
7
|
+
text: string;
|
|
8
|
+
action: () => void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type ToastType = 'informational' | 'attention' | 'success' | 'error';
|
|
12
|
+
|
|
13
|
+
export interface ToastProps extends ToastOptions {
|
|
14
|
+
title: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface ToastOptions {
|
|
19
|
+
type?: ToastType;
|
|
20
|
+
button?: ToastButton;
|
|
21
|
+
timeout?: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface ToastEmits {
|
|
25
|
+
close: [];
|
|
26
|
+
destroy: [];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface ToastInstance {
|
|
30
|
+
id: string;
|
|
31
|
+
props: ToastProps;
|
|
32
|
+
close: () => void;
|
|
33
|
+
promise: Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface ToastCall {
|
|
37
|
+
info: (
|
|
38
|
+
title: string,
|
|
39
|
+
description?: string,
|
|
40
|
+
options?: ToastOptions,
|
|
41
|
+
) => Promise<void>;
|
|
42
|
+
success: (
|
|
43
|
+
title: string,
|
|
44
|
+
description?: string,
|
|
45
|
+
options?: ToastOptions,
|
|
46
|
+
) => Promise<void>;
|
|
47
|
+
attention: (
|
|
48
|
+
title: string,
|
|
49
|
+
description?: string,
|
|
50
|
+
options?: ToastOptions,
|
|
51
|
+
) => Promise<void>;
|
|
52
|
+
error: (
|
|
53
|
+
title: string,
|
|
54
|
+
description?: string,
|
|
55
|
+
options?: ToastOptions,
|
|
56
|
+
) => Promise<void>;
|
|
57
|
+
}
|
package/src/components/index.ts
CHANGED
|
@@ -25,6 +25,7 @@ import cardImage from './CardImage/CardImage.vue';
|
|
|
25
25
|
import cardProject from './CardProject/CardProject.vue';
|
|
26
26
|
import cardInformation from './CardInformation/CardInformation.vue';
|
|
27
27
|
import checkbox from './Checkbox/Checkbox.vue';
|
|
28
|
+
import checkboxGroup from './CheckboxGroup/CheckboxGroup.vue';
|
|
28
29
|
import collapse from './Collapse/Collapse.vue';
|
|
29
30
|
import radio from './Radio/Radio.vue';
|
|
30
31
|
import languageSelect from './Dropdown/LanguageSelect.vue';
|
|
@@ -88,18 +89,28 @@ import ModalDialog from './ModalDialog/ModalDialog.vue';
|
|
|
88
89
|
import Tour from './Tour/Tour.vue';
|
|
89
90
|
import Navigator from './Navigator/index.vue';
|
|
90
91
|
import SelectTime from './SelectTime/index.vue';
|
|
92
|
+
import TemplatePreview from './TemplatePreview/TemplatePreview.vue';
|
|
93
|
+
import TemplatePreviewModal from './TemplatePreview/TemplatePreviewModal.vue';
|
|
91
94
|
import DataTable from './DataTable/index.vue';
|
|
92
95
|
import Chip from './Chip/Chip.vue';
|
|
93
|
-
import
|
|
94
|
-
import
|
|
95
|
-
import TabsTrigger from './ui/tabs/TabsTrigger.vue';
|
|
96
|
-
import TabsContent from './ui/tabs/TabsContent.vue';
|
|
96
|
+
import Toast from './Toast/Toast.vue';
|
|
97
|
+
import { toast } from './Toast/ToastManager';
|
|
97
98
|
import Popover from './ui/popover/Popover.vue';
|
|
98
99
|
import PopoverContent from './ui/popover/PopoverContent.vue';
|
|
99
100
|
import PopoverTrigger from './ui/popover/PopoverTrigger.vue';
|
|
100
101
|
import PopoverFooter from './ui/popover/PopoverFooter.vue';
|
|
101
|
-
import
|
|
102
|
-
import
|
|
102
|
+
import Dialog from './ui/dialog/Dialog.vue';
|
|
103
|
+
import DialogContent from './ui/dialog/DialogContent.vue';
|
|
104
|
+
import DialogFooter from './ui/dialog/DialogFooter.vue';
|
|
105
|
+
import DialogHeader from './ui/dialog/DialogHeader.vue';
|
|
106
|
+
import DialogTitle from './ui/dialog/DialogTitle.vue';
|
|
107
|
+
import DialogTrigger from './ui/dialog/DialogTrigger.vue';
|
|
108
|
+
import DialogClose from './ui/dialog/DialogClose.vue';
|
|
109
|
+
import Tabs from './ui/tabs/Tabs.vue';
|
|
110
|
+
import TabsList from './ui/tabs/TabsList.vue';
|
|
111
|
+
import TabsTrigger from './ui/tabs/TabsTrigger.vue';
|
|
112
|
+
import TabsContent from './ui/tabs/TabsContent.vue';
|
|
113
|
+
import PageHeader from './PageHeader/PageHeader.vue';
|
|
103
114
|
|
|
104
115
|
type VueComponent = Component;
|
|
105
116
|
|
|
@@ -134,6 +145,7 @@ export const components: ComponentsMap = {
|
|
|
134
145
|
unnnicCardProject: cardProject,
|
|
135
146
|
unnnicCardInformation: cardInformation,
|
|
136
147
|
unnnicCheckbox: checkbox,
|
|
148
|
+
unnnicCheckboxGroup: checkboxGroup,
|
|
137
149
|
unnnicCollapse: collapse,
|
|
138
150
|
unnnicRadio: radio,
|
|
139
151
|
unnnicLanguageSelect: languageSelect,
|
|
@@ -202,13 +214,23 @@ export const components: ComponentsMap = {
|
|
|
202
214
|
unnnicTemplatePreviewModal: TemplatePreviewModal,
|
|
203
215
|
unnnicDataTable: DataTable,
|
|
204
216
|
unnnicChip: Chip,
|
|
217
|
+
unnnicToast: Toast,
|
|
218
|
+
unnnicToastManager: toast,
|
|
219
|
+
unnnicPopover: Popover,
|
|
220
|
+
unnnicPopoverContent: PopoverContent,
|
|
221
|
+
unnnicPopoverTrigger: PopoverTrigger,
|
|
222
|
+
unnnicDialog: Dialog,
|
|
223
|
+
unnnicDialogContent: DialogContent,
|
|
224
|
+
unnnicDialogFooter: DialogFooter,
|
|
225
|
+
unnnicDialogHeader: DialogHeader,
|
|
226
|
+
unnnicDialogTitle: DialogTitle,
|
|
227
|
+
unnnicDialogTrigger: DialogTrigger,
|
|
228
|
+
unnnicDialogClose: DialogClose,
|
|
205
229
|
unnnicTabs: Tabs,
|
|
206
230
|
unnnicTabsList: TabsList,
|
|
207
231
|
unnnicTabsTrigger: TabsTrigger,
|
|
208
232
|
unnnicTabsContent: TabsContent,
|
|
209
|
-
|
|
210
|
-
unnnicPopoverContent: PopoverContent,
|
|
211
|
-
unnnicPopoverTrigger: PopoverTrigger,
|
|
233
|
+
unnnicPageHeader: PageHeader,
|
|
212
234
|
};
|
|
213
235
|
|
|
214
236
|
export const unnnicFontSize = fontSize;
|
|
@@ -238,6 +260,7 @@ export const unnnicCardImage = cardImage as VueComponent;
|
|
|
238
260
|
export const unnnicCardProject = cardProject as VueComponent;
|
|
239
261
|
export const unnnicCardInformation = cardInformation;
|
|
240
262
|
export const unnnicCheckbox = checkbox;
|
|
263
|
+
export const unnnicCheckboxGroup = checkboxGroup;
|
|
241
264
|
export const unnnicCollapse = collapse;
|
|
242
265
|
export const unnnicRadio = radio;
|
|
243
266
|
export const unnniclanguageSelect = languageSelect as VueComponent;
|
|
@@ -260,7 +283,7 @@ export const unnnicAccordion = accordion;
|
|
|
260
283
|
export const unnnicIndicator = indicator;
|
|
261
284
|
export const unnnicSkeletonLoading = skeletonLoading;
|
|
262
285
|
export const unnnicCarousel = carousel;
|
|
263
|
-
export const unnnicLabel = label;
|
|
286
|
+
export const unnnicLabel = label as VueComponent;
|
|
264
287
|
export const unnnicTab = tab;
|
|
265
288
|
export const unnnicTabsExpanded = tabsExpanded;
|
|
266
289
|
export const unnnicBanner = banner;
|
|
@@ -301,22 +324,31 @@ export const unnnicDrawer = Drawer;
|
|
|
301
324
|
export const unnnicTableNext = TableNext;
|
|
302
325
|
export const unnnicTour = Tour;
|
|
303
326
|
export const unnnicNavigator = Navigator;
|
|
304
|
-
export const unnnicDataTable = DataTable as VueComponent;
|
|
305
327
|
export const unnnicSelectTime = SelectTime as VueComponent;
|
|
328
|
+
export const unnnicTemplatePreview = TemplatePreview as VueComponent;
|
|
329
|
+
export const unnnicTemplatePreviewModal = TemplatePreviewModal as VueComponent;
|
|
330
|
+
export const unnnicDataTable = DataTable as VueComponent;
|
|
306
331
|
export const unnnicChip = Chip;
|
|
307
|
-
export const
|
|
308
|
-
export const
|
|
309
|
-
export const unnnicTabsTrigger = TabsTrigger;
|
|
310
|
-
export const unnnicTabsContent = TabsContent;
|
|
332
|
+
export const unnnicToast = Toast;
|
|
333
|
+
export const unnnicToastManager = toast;
|
|
311
334
|
export const unnnicPopover = Popover;
|
|
312
335
|
export const unnnicPopoverContent = PopoverContent;
|
|
313
336
|
export const unnnicPopoverTrigger = PopoverTrigger;
|
|
314
337
|
export const unnnicPopoverFooter = PopoverFooter;
|
|
315
|
-
export const
|
|
316
|
-
export const
|
|
338
|
+
export const unnnicDialog = Dialog;
|
|
339
|
+
export const unnnicDialogContent = DialogContent;
|
|
340
|
+
export const unnnicDialogFooter = DialogFooter;
|
|
341
|
+
export const unnnicDialogHeader = DialogHeader;
|
|
342
|
+
export const unnnicDialogTitle = DialogTitle;
|
|
343
|
+
export const unnnicDialogTrigger = DialogTrigger;
|
|
344
|
+
export const unnnicDialogClose = DialogClose;
|
|
345
|
+
export const unnnicTabs = Tabs;
|
|
346
|
+
export const unnnicTabsList = TabsList;
|
|
347
|
+
export const unnnicTabsTrigger = TabsTrigger;
|
|
348
|
+
export const unnnicTabsContent = TabsContent;
|
|
349
|
+
export const unnnicPageHeader = PageHeader;
|
|
317
350
|
|
|
318
351
|
export const UnnnicFontSize = fontSize;
|
|
319
|
-
export const UnnnicFormElement = formElement;
|
|
320
352
|
export const UnnnicInput = input;
|
|
321
353
|
export const UnnnicInputNext = inputNext;
|
|
322
354
|
export const UnnnicInputDatePicker = inputDatePicker;
|
|
@@ -342,6 +374,7 @@ export const UnnnicCardImage = cardImage as VueComponent;
|
|
|
342
374
|
export const UnnnicCardProject = cardProject as VueComponent;
|
|
343
375
|
export const UnnnicCardInformation = cardInformation;
|
|
344
376
|
export const UnnnicCheckbox = checkbox;
|
|
377
|
+
export const UnnnicCheckboxGroup = checkboxGroup;
|
|
345
378
|
export const UnnnicCollapse = collapse;
|
|
346
379
|
export const UnnnicRadio = radio;
|
|
347
380
|
export const UnnniclanguageSelect = languageSelect as VueComponent;
|
|
@@ -364,7 +397,7 @@ export const UnnnicAccordion = accordion;
|
|
|
364
397
|
export const UnnnicIndicator = indicator;
|
|
365
398
|
export const UnnnicSkeletonLoading = skeletonLoading;
|
|
366
399
|
export const UnnnicCarousel = carousel;
|
|
367
|
-
export const UnnnicLabel = label;
|
|
400
|
+
export const UnnnicLabel = label as VueComponent;
|
|
368
401
|
export const UnnnicTab = tab;
|
|
369
402
|
export const UnnnicTabsExpanded = tabsExpanded;
|
|
370
403
|
export const UnnnicBanner = banner;
|
|
@@ -405,16 +438,26 @@ export const UnnnicDrawer = Drawer;
|
|
|
405
438
|
export const UnnnicTableNext = TableNext;
|
|
406
439
|
export const UnnnicTour = Tour;
|
|
407
440
|
export const UnnnicNavigator = Navigator;
|
|
408
|
-
export const UnnnicDataTable = DataTable as VueComponent;
|
|
409
441
|
export const UnnnicSelectTime = SelectTime as VueComponent;
|
|
442
|
+
export const UnnnicTemplatePreview = TemplatePreview as VueComponent;
|
|
443
|
+
export const UnnnicTemplatePreviewModal = TemplatePreviewModal as VueComponent;
|
|
444
|
+
export const UnnnicDataTable = DataTable as VueComponent;
|
|
410
445
|
export const UnnnicChip = Chip;
|
|
411
|
-
export const
|
|
412
|
-
export const
|
|
413
|
-
export const UnnnicTabsTrigger = TabsTrigger;
|
|
414
|
-
export const UnnnicTabsContent = TabsContent;
|
|
446
|
+
export const UnnnicToast = Toast;
|
|
447
|
+
export const UnnnicToastManager = toast;
|
|
415
448
|
export const UnnnicPopover = Popover;
|
|
416
449
|
export const UnnnicPopoverContent = PopoverContent;
|
|
417
450
|
export const UnnnicPopoverTrigger = PopoverTrigger;
|
|
418
451
|
export const UnnnicPopoverFooter = PopoverFooter;
|
|
419
|
-
export const
|
|
420
|
-
export const
|
|
452
|
+
export const UnnnicDialog = Dialog;
|
|
453
|
+
export const UnnnicDialogContent = DialogContent;
|
|
454
|
+
export const UnnnicDialogFooter = DialogFooter;
|
|
455
|
+
export const UnnnicDialogHeader = DialogHeader;
|
|
456
|
+
export const UnnnicDialogTitle = DialogTitle;
|
|
457
|
+
export const UnnnicDialogTrigger = DialogTrigger;
|
|
458
|
+
export const UnnnicDialogClose = DialogClose;
|
|
459
|
+
export const UnnnicTabs = Tabs;
|
|
460
|
+
export const UnnnicTabsList = TabsList;
|
|
461
|
+
export const UnnnicTabsTrigger = TabsTrigger;
|
|
462
|
+
export const UnnnicTabsContent = TabsContent;
|
|
463
|
+
export const UnnnicPageHeader = PageHeader;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { DialogRootEmits, DialogRootProps } from 'reka-ui';
|
|
3
|
+
import { DialogRoot, useForwardPropsEmits } from 'reka-ui';
|
|
4
|
+
|
|
5
|
+
const props = defineProps<DialogRootProps>();
|
|
6
|
+
const emits = defineEmits<DialogRootEmits>();
|
|
7
|
+
|
|
8
|
+
const forwarded = useForwardPropsEmits(props, emits);
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<DialogRoot v-bind="forwarded">
|
|
13
|
+
<slot />
|
|
14
|
+
</DialogRoot>
|
|
15
|
+
</template>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { DialogCloseProps } from 'reka-ui';
|
|
3
|
+
import { DialogClose } from 'reka-ui';
|
|
4
|
+
|
|
5
|
+
const props = defineProps<DialogCloseProps>();
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<template>
|
|
9
|
+
<DialogClose
|
|
10
|
+
class="unnnic-dialog-close"
|
|
11
|
+
v-bind="props"
|
|
12
|
+
>
|
|
13
|
+
<slot />
|
|
14
|
+
</DialogClose>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
<style lang="scss" scoped>
|
|
18
|
+
@use '@/assets/scss/unnnic' as *;
|
|
19
|
+
|
|
20
|
+
.unnnic-dialog-close {
|
|
21
|
+
> * {
|
|
22
|
+
width: 100%;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
</style>
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { DialogContentEmits, DialogContentProps } from 'reka-ui';
|
|
3
|
+
import type { HTMLAttributes } from 'vue';
|
|
4
|
+
import { reactiveOmit } from '@vueuse/core';
|
|
5
|
+
import {
|
|
6
|
+
DialogContent,
|
|
7
|
+
DialogOverlay,
|
|
8
|
+
DialogPortal,
|
|
9
|
+
useForwardPropsEmits,
|
|
10
|
+
} from 'reka-ui';
|
|
11
|
+
import { cn } from '@/lib/utils';
|
|
12
|
+
|
|
13
|
+
const props = withDefaults(
|
|
14
|
+
defineProps<
|
|
15
|
+
DialogContentProps & {
|
|
16
|
+
class?: HTMLAttributes['class'];
|
|
17
|
+
size?: 'small' | 'medium' | 'large';
|
|
18
|
+
}
|
|
19
|
+
>(),
|
|
20
|
+
{
|
|
21
|
+
size: 'medium',
|
|
22
|
+
},
|
|
23
|
+
);
|
|
24
|
+
const emits = defineEmits<DialogContentEmits>();
|
|
25
|
+
|
|
26
|
+
const delegatedProps = reactiveOmit(props, 'class');
|
|
27
|
+
|
|
28
|
+
const forwarded = useForwardPropsEmits(delegatedProps, emits);
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<template>
|
|
32
|
+
<DialogPortal>
|
|
33
|
+
<DialogOverlay
|
|
34
|
+
class="unnnic-dialog-overlay data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"
|
|
35
|
+
/>
|
|
36
|
+
<DialogContent
|
|
37
|
+
v-bind="forwarded"
|
|
38
|
+
:class="
|
|
39
|
+
cn(
|
|
40
|
+
'unnnic-dialog-content',
|
|
41
|
+
`unnnic-dialog-content--size-${props.size}`,
|
|
42
|
+
'duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',
|
|
43
|
+
|
|
44
|
+
props.class,
|
|
45
|
+
)
|
|
46
|
+
"
|
|
47
|
+
>
|
|
48
|
+
<slot />
|
|
49
|
+
</DialogContent>
|
|
50
|
+
</DialogPortal>
|
|
51
|
+
</template>
|
|
52
|
+
|
|
53
|
+
<style lang="scss" scoped>
|
|
54
|
+
@use '@/assets/scss/unnnic' as *;
|
|
55
|
+
|
|
56
|
+
.unnnic-dialog-overlay {
|
|
57
|
+
position: fixed;
|
|
58
|
+
top: 0;
|
|
59
|
+
left: 0;
|
|
60
|
+
z-index: 9999;
|
|
61
|
+
|
|
62
|
+
width: 100vw;
|
|
63
|
+
height: 100vh;
|
|
64
|
+
background: rgba(53, 57, 69, 0.5);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.unnnic-dialog-content {
|
|
68
|
+
z-index: 10000;
|
|
69
|
+
|
|
70
|
+
position: fixed;
|
|
71
|
+
top: 50%;
|
|
72
|
+
left: 50%;
|
|
73
|
+
|
|
74
|
+
transform: translate(-50%, -50%);
|
|
75
|
+
|
|
76
|
+
width: 100%;
|
|
77
|
+
max-height: calc(100% - $unnnic-space-20);
|
|
78
|
+
|
|
79
|
+
display: flex;
|
|
80
|
+
flex-direction: column;
|
|
81
|
+
|
|
82
|
+
box-shadow: $unnnic-shadow-2;
|
|
83
|
+
border-radius: $unnnic-radius-4;
|
|
84
|
+
background-color: $unnnic-color-bg-base;
|
|
85
|
+
|
|
86
|
+
&--size-small {
|
|
87
|
+
max-width: 360px;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
&--size-medium {
|
|
91
|
+
max-width: 560px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
&--size-large {
|
|
95
|
+
max-width: 800px;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
> * {
|
|
99
|
+
&::-webkit-scrollbar {
|
|
100
|
+
width: $unnnic-spacing-inline-nano;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
&::-webkit-scrollbar-thumb {
|
|
104
|
+
background: $unnnic-color-neutral-cleanest;
|
|
105
|
+
border-radius: $unnnic-border-radius-pill;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
&::-webkit-scrollbar-track {
|
|
109
|
+
background: $unnnic-color-neutral-soft;
|
|
110
|
+
border-radius: $unnnic-border-radius-pill;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
</style>
|