@baklavue/ui 1.0.0 → 1.0.2-preview.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/accordion/Accordion.vue.d.ts +51 -0
- package/dist/accordion/Accordion.vue.d.ts.map +1 -0
- package/dist/accordion/accordion.types.d.ts +97 -0
- package/dist/accordion/accordion.types.d.ts.map +1 -0
- package/dist/accordion/index.d.ts +3 -0
- package/dist/accordion/index.d.ts.map +1 -0
- package/dist/alert/Alert.vue.d.ts +49 -0
- package/dist/alert/Alert.vue.d.ts.map +1 -0
- package/dist/alert/alert.types.d.ts +52 -0
- package/dist/alert/alert.types.d.ts.map +1 -0
- package/dist/alert/index.d.ts +3 -0
- package/dist/alert/index.d.ts.map +1 -0
- package/dist/badge/Badge.vue.d.ts +22 -0
- package/dist/badge/Badge.vue.d.ts.map +1 -0
- package/dist/badge/badge.types.d.ts +7 -0
- package/dist/badge/badge.types.d.ts.map +1 -0
- package/dist/badge/index.d.ts +3 -0
- package/dist/badge/index.d.ts.map +1 -0
- package/dist/banner/Banner.vue.d.ts +36 -0
- package/dist/banner/Banner.vue.d.ts.map +1 -0
- package/dist/banner/banner.types.d.ts +70 -0
- package/dist/banner/banner.types.d.ts.map +1 -0
- package/dist/banner/index.d.ts +3 -0
- package/dist/banner/index.d.ts.map +1 -0
- package/dist/button/Button.vue.d.ts +36 -0
- package/dist/button/Button.vue.d.ts.map +1 -0
- package/dist/button/button.types.d.ts +24 -0
- package/dist/button/button.types.d.ts.map +1 -0
- package/dist/button/index.d.ts +3 -0
- package/dist/button/index.d.ts.map +1 -0
- package/dist/checkbox/Checkbox.vue.d.ts +39 -0
- package/dist/checkbox/Checkbox.vue.d.ts.map +1 -0
- package/dist/checkbox/checkbox.types.d.ts +95 -0
- package/dist/checkbox/checkbox.types.d.ts.map +1 -0
- package/dist/checkbox/index.d.ts +3 -0
- package/dist/checkbox/index.d.ts.map +1 -0
- package/dist/chip/Chip.vue.d.ts +29 -0
- package/dist/chip/Chip.vue.d.ts.map +1 -0
- package/dist/chip/chip.types.d.ts +59 -0
- package/dist/chip/chip.types.d.ts.map +1 -0
- package/dist/chip/index.d.ts +3 -0
- package/dist/chip/index.d.ts.map +1 -0
- package/dist/datepicker/Datepicker.vue.d.ts +41 -0
- package/dist/datepicker/Datepicker.vue.d.ts.map +1 -0
- package/dist/datepicker/datepicker.types.d.ts +38 -0
- package/dist/datepicker/datepicker.types.d.ts.map +1 -0
- package/dist/datepicker/index.d.ts +3 -0
- package/dist/datepicker/index.d.ts.map +1 -0
- package/dist/dialog/Dialog.vue.d.ts +44 -0
- package/dist/dialog/Dialog.vue.d.ts.map +1 -0
- package/dist/dialog/dialog.types.d.ts +18 -0
- package/dist/dialog/dialog.types.d.ts.map +1 -0
- package/dist/dialog/index.d.ts +3 -0
- package/dist/dialog/index.d.ts.map +1 -0
- package/dist/drawer/Drawer.vue.d.ts +42 -0
- package/dist/drawer/Drawer.vue.d.ts.map +1 -0
- package/dist/drawer/drawer.types.d.ts +18 -0
- package/dist/drawer/drawer.types.d.ts.map +1 -0
- package/dist/drawer/index.d.ts +3 -0
- package/dist/drawer/index.d.ts.map +1 -0
- package/dist/dropdown/Dropdown.vue.d.ts +59 -0
- package/dist/dropdown/Dropdown.vue.d.ts.map +1 -0
- package/dist/dropdown/dropdown.types.d.ts +92 -0
- package/dist/dropdown/dropdown.types.d.ts.map +1 -0
- package/dist/dropdown/index.d.ts +3 -0
- package/dist/dropdown/index.d.ts.map +1 -0
- package/dist/file-upload/FileUpload.vue.d.ts +44 -0
- package/dist/file-upload/FileUpload.vue.d.ts.map +1 -0
- package/dist/file-upload/file-upload.types.d.ts +76 -0
- package/dist/file-upload/file-upload.types.d.ts.map +1 -0
- package/dist/file-upload/index.d.ts +3 -0
- package/dist/file-upload/index.d.ts.map +1 -0
- package/dist/icon/Icon.vue.d.ts +29 -0
- package/dist/icon/Icon.vue.d.ts.map +1 -0
- package/dist/icon/icon.types.d.ts +23 -0
- package/dist/icon/icon.types.d.ts.map +1 -0
- package/dist/icon/index.d.ts +3 -0
- package/dist/icon/index.d.ts.map +1 -0
- package/dist/image/Image.vue.d.ts +30 -0
- package/dist/image/Image.vue.d.ts.map +1 -0
- package/dist/image/image.types.d.ts +48 -0
- package/dist/image/image.types.d.ts.map +1 -0
- package/dist/image/index.d.ts +3 -0
- package/dist/image/index.d.ts.map +1 -0
- package/dist/index.css +474 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2424 -0
- package/dist/index.js.map +1 -0
- package/dist/input/Input.vue.d.ts +39 -0
- package/dist/input/Input.vue.d.ts.map +1 -0
- package/dist/input/index.d.ts +3 -0
- package/dist/input/index.d.ts.map +1 -0
- package/dist/input/input.types.d.ts +122 -0
- package/dist/input/input.types.d.ts.map +1 -0
- package/dist/link/Link.vue.d.ts +38 -0
- package/dist/link/Link.vue.d.ts.map +1 -0
- package/dist/link/index.d.ts +3 -0
- package/dist/link/index.d.ts.map +1 -0
- package/dist/link/link.types.d.ts +40 -0
- package/dist/link/link.types.d.ts.map +1 -0
- package/dist/notification/Notification.vue.d.ts +7 -0
- package/dist/notification/Notification.vue.d.ts.map +1 -0
- package/dist/notification/index.d.ts +3 -0
- package/dist/notification/index.d.ts.map +1 -0
- package/dist/notification/notification.types.d.ts +25 -0
- package/dist/notification/notification.types.d.ts.map +1 -0
- package/dist/pagination/Pagination.vue.d.ts +34 -0
- package/dist/pagination/Pagination.vue.d.ts.map +1 -0
- package/dist/pagination/index.d.ts +3 -0
- package/dist/pagination/index.d.ts.map +1 -0
- package/dist/pagination/pagination.types.d.ts +54 -0
- package/dist/pagination/pagination.types.d.ts.map +1 -0
- package/dist/radio/Radio.vue.d.ts +42 -0
- package/dist/radio/Radio.vue.d.ts.map +1 -0
- package/dist/radio/index.d.ts +3 -0
- package/dist/radio/index.d.ts.map +1 -0
- package/dist/radio/radio.types.d.ts +84 -0
- package/dist/radio/radio.types.d.ts.map +1 -0
- package/dist/scroll-to-top/ScrollToTop.vue.d.ts +14 -0
- package/dist/scroll-to-top/ScrollToTop.vue.d.ts.map +1 -0
- package/dist/scroll-to-top/index.d.ts +3 -0
- package/dist/scroll-to-top/index.d.ts.map +1 -0
- package/dist/scroll-to-top/scroll-to-top.types.d.ts +33 -0
- package/dist/scroll-to-top/scroll-to-top.types.d.ts.map +1 -0
- package/dist/select/Select.vue.d.ts +42 -0
- package/dist/select/Select.vue.d.ts.map +1 -0
- package/dist/select/index.d.ts +3 -0
- package/dist/select/index.d.ts.map +1 -0
- package/dist/select/select.types.d.ts +52 -0
- package/dist/select/select.types.d.ts.map +1 -0
- package/dist/skeleton/Skeleton.vue.d.ts +9 -0
- package/dist/skeleton/Skeleton.vue.d.ts.map +1 -0
- package/dist/skeleton/index.d.ts +3 -0
- package/dist/skeleton/index.d.ts.map +1 -0
- package/dist/skeleton/skeleton.types.d.ts +30 -0
- package/dist/skeleton/skeleton.types.d.ts.map +1 -0
- package/dist/spinner/Spinner.vue.d.ts +8 -0
- package/dist/spinner/Spinner.vue.d.ts.map +1 -0
- package/dist/spinner/index.d.ts +3 -0
- package/dist/spinner/index.d.ts.map +1 -0
- package/dist/spinner/spinner.types.d.ts +12 -0
- package/dist/spinner/spinner.types.d.ts.map +1 -0
- package/dist/split-button/SplitButton.vue.d.ts +25 -0
- package/dist/split-button/SplitButton.vue.d.ts.map +1 -0
- package/dist/split-button/index.d.ts +3 -0
- package/dist/split-button/index.d.ts.map +1 -0
- package/dist/split-button/split-button.types.d.ts +19 -0
- package/dist/split-button/split-button.types.d.ts.map +1 -0
- package/dist/stepper/Stepper.vue.d.ts +30 -0
- package/dist/stepper/Stepper.vue.d.ts.map +1 -0
- package/dist/stepper/index.d.ts +3 -0
- package/dist/stepper/index.d.ts.map +1 -0
- package/dist/stepper/stepper.types.d.ts +29 -0
- package/dist/stepper/stepper.types.d.ts.map +1 -0
- package/dist/switch/Switch.vue.d.ts +32 -0
- package/dist/switch/Switch.vue.d.ts.map +1 -0
- package/dist/switch/index.d.ts +3 -0
- package/dist/switch/index.d.ts.map +1 -0
- package/dist/switch/switch.types.d.ts +14 -0
- package/dist/switch/switch.types.d.ts.map +1 -0
- package/dist/tab/Tab.vue.d.ts +31 -0
- package/dist/tab/Tab.vue.d.ts.map +1 -0
- package/dist/tab/index.d.ts +3 -0
- package/dist/tab/index.d.ts.map +1 -0
- package/dist/tab/tab.types.d.ts +17 -0
- package/dist/tab/tab.types.d.ts.map +1 -0
- package/dist/table/Table.vue.d.ts +185 -0
- package/dist/table/Table.vue.d.ts.map +1 -0
- package/dist/table/index.d.ts +3 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/table/table.types.d.ts +61 -0
- package/dist/table/table.types.d.ts.map +1 -0
- package/dist/tag/Tag.vue.d.ts +31 -0
- package/dist/tag/Tag.vue.d.ts.map +1 -0
- package/dist/tag/index.d.ts +3 -0
- package/dist/tag/index.d.ts.map +1 -0
- package/dist/tag/tag.types.d.ts +22 -0
- package/dist/tag/tag.types.d.ts.map +1 -0
- package/dist/textarea/Textarea.vue.d.ts +35 -0
- package/dist/textarea/Textarea.vue.d.ts.map +1 -0
- package/dist/textarea/index.d.ts +3 -0
- package/dist/textarea/index.d.ts.map +1 -0
- package/dist/textarea/textarea.types.d.ts +37 -0
- package/dist/textarea/textarea.types.d.ts.map +1 -0
- package/dist/tooltip/Tooltip.vue.d.ts +33 -0
- package/dist/tooltip/Tooltip.vue.d.ts.map +1 -0
- package/dist/tooltip/index.d.ts +3 -0
- package/dist/tooltip/index.d.ts.map +1 -0
- package/dist/tooltip/tooltip.types.d.ts +17 -0
- package/dist/tooltip/tooltip.types.d.ts.map +1 -0
- package/dist/utils/loadBaklavaResources.d.ts +2 -0
- package/dist/utils/loadBaklavaResources.d.ts.map +1 -0
- package/package.json +18 -2
- package/.releaserc.json +0 -14
- package/CHANGELOG.md +0 -88
- package/env.d.ts +0 -5
- package/index.ts +0 -1
- package/src/accordion/Accordion.spec.ts +0 -75
- package/src/accordion/Accordion.vue +0 -206
- package/src/accordion/accordion.types.ts +0 -109
- package/src/accordion/index.ts +0 -3
- package/src/alert/Alert.spec.ts +0 -38
- package/src/alert/Alert.vue +0 -199
- package/src/alert/alert.types.ts +0 -58
- package/src/alert/index.ts +0 -2
- package/src/badge/Badge.spec.ts +0 -28
- package/src/badge/Badge.vue +0 -20
- package/src/badge/badge.types.ts +0 -7
- package/src/badge/index.ts +0 -2
- package/src/banner/Banner.spec.ts +0 -111
- package/src/banner/Banner.vue +0 -265
- package/src/banner/banner.types.ts +0 -86
- package/src/banner/index.ts +0 -2
- package/src/button/Button.spec.ts +0 -51
- package/src/button/Button.vue +0 -45
- package/src/button/button.types.ts +0 -30
- package/src/button/index.ts +0 -3
- package/src/checkbox/Checkbox.spec.ts +0 -216
- package/src/checkbox/Checkbox.vue +0 -148
- package/src/checkbox/checkbox.types.ts +0 -108
- package/src/checkbox/index.ts +0 -2
- package/src/chip/Chip.spec.ts +0 -49
- package/src/chip/Chip.vue +0 -237
- package/src/chip/chip.types.ts +0 -77
- package/src/chip/index.ts +0 -2
- package/src/datepicker/Datepicker.spec.ts +0 -129
- package/src/datepicker/Datepicker.vue +0 -172
- package/src/datepicker/datepicker.types.ts +0 -39
- package/src/datepicker/index.ts +0 -2
- package/src/dialog/Dialog.spec.ts +0 -111
- package/src/dialog/Dialog.vue +0 -178
- package/src/dialog/dialog.types.ts +0 -17
- package/src/dialog/index.ts +0 -2
- package/src/drawer/Drawer.spec.ts +0 -102
- package/src/drawer/Drawer.vue +0 -162
- package/src/drawer/drawer.types.ts +0 -17
- package/src/drawer/index.ts +0 -2
- package/src/dropdown/Dropdown.spec.ts +0 -207
- package/src/dropdown/Dropdown.vue +0 -231
- package/src/dropdown/dropdown.types.ts +0 -110
- package/src/dropdown/index.ts +0 -2
- package/src/file-upload/FileUpload.spec.ts +0 -359
- package/src/file-upload/FileUpload.vue +0 -440
- package/src/file-upload/file-upload.types.ts +0 -89
- package/src/file-upload/index.ts +0 -7
- package/src/icon/Icon.spec.ts +0 -40
- package/src/icon/Icon.vue +0 -102
- package/src/icon/icon.types.ts +0 -25
- package/src/icon/index.ts +0 -2
- package/src/image/Image.spec.ts +0 -23
- package/src/image/Image.vue +0 -144
- package/src/image/image.types.ts +0 -57
- package/src/image/index.ts +0 -3
- package/src/index.ts +0 -43
- package/src/input/Input.spec.ts +0 -69
- package/src/input/Input.vue +0 -148
- package/src/input/index.ts +0 -3
- package/src/input/input.types.ts +0 -156
- package/src/link/Link.spec.ts +0 -69
- package/src/link/Link.vue +0 -133
- package/src/link/index.ts +0 -2
- package/src/link/link.types.ts +0 -42
- package/src/notification/Notification.spec.ts +0 -18
- package/src/notification/Notification.vue +0 -57
- package/src/notification/index.ts +0 -2
- package/src/notification/notification.types.ts +0 -25
- package/src/pagination/Pagination.spec.ts +0 -39
- package/src/pagination/Pagination.vue +0 -137
- package/src/pagination/index.ts +0 -2
- package/src/pagination/pagination.types.ts +0 -61
- package/src/radio/Radio.spec.ts +0 -149
- package/src/radio/Radio.vue +0 -205
- package/src/radio/index.ts +0 -2
- package/src/radio/radio.types.ts +0 -95
- package/src/scroll-to-top/ScrollToTop.spec.ts +0 -119
- package/src/scroll-to-top/ScrollToTop.vue +0 -130
- package/src/scroll-to-top/index.ts +0 -2
- package/src/scroll-to-top/scroll-to-top.types.ts +0 -42
- package/src/select/Select.spec.ts +0 -47
- package/src/select/Select.vue +0 -147
- package/src/select/index.ts +0 -2
- package/src/select/select.types.ts +0 -53
- package/src/skeleton/Skeleton.spec.ts +0 -28
- package/src/skeleton/Skeleton.vue +0 -115
- package/src/skeleton/index.ts +0 -2
- package/src/skeleton/skeleton.types.ts +0 -33
- package/src/spinner/Spinner.spec.ts +0 -28
- package/src/spinner/Spinner.vue +0 -49
- package/src/spinner/index.ts +0 -2
- package/src/spinner/spinner.types.ts +0 -11
- package/src/split-button/SplitButton.spec.ts +0 -24
- package/src/split-button/SplitButton.vue +0 -73
- package/src/split-button/index.ts +0 -2
- package/src/split-button/split-button.types.ts +0 -19
- package/src/stepper/Stepper.spec.ts +0 -37
- package/src/stepper/Stepper.vue +0 -100
- package/src/stepper/index.ts +0 -2
- package/src/stepper/stepper.types.ts +0 -29
- package/src/switch/Switch.spec.ts +0 -30
- package/src/switch/Switch.vue +0 -80
- package/src/switch/index.ts +0 -2
- package/src/switch/switch.types.ts +0 -13
- package/src/tab/Tab.spec.ts +0 -87
- package/src/tab/Tab.vue +0 -99
- package/src/tab/index.ts +0 -2
- package/src/tab/tab.types.ts +0 -17
- package/src/table/Table.spec.ts +0 -185
- package/src/table/Table.vue +0 -264
- package/src/table/index.ts +0 -7
- package/src/table/table.types.ts +0 -62
- package/src/tag/Tag.spec.ts +0 -84
- package/src/tag/Tag.vue +0 -83
- package/src/tag/index.ts +0 -2
- package/src/tag/tag.types.ts +0 -24
- package/src/textarea/Textarea.spec.ts +0 -105
- package/src/textarea/Textarea.vue +0 -84
- package/src/textarea/index.ts +0 -2
- package/src/textarea/textarea.types.ts +0 -37
- package/src/tooltip/Tooltip.spec.ts +0 -46
- package/src/tooltip/Tooltip.vue +0 -81
- package/src/tooltip/index.ts +0 -3
- package/src/tooltip/tooltip.types.ts +0 -29
- package/src/utils/loadBaklavaResources.ts +0 -24
- package/tests/setup.ts +0 -352
- package/tsconfig.json +0 -29
- package/vitest.config.ts +0 -32
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { mount } from "@vue/test-utils";
|
|
2
|
-
import { describe, expect, it } from "vitest";
|
|
3
|
-
import BvDrawer from "./Drawer.vue";
|
|
4
|
-
|
|
5
|
-
describe("BvDrawer", () => {
|
|
6
|
-
it("renders with default props", () => {
|
|
7
|
-
const wrapper = mount(BvDrawer);
|
|
8
|
-
expect(wrapper.find("bl-drawer").exists()).toBe(true);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it("passes caption and open to bl-drawer", () => {
|
|
12
|
-
const wrapper = mount(BvDrawer, {
|
|
13
|
-
props: { caption: "Title", open: true },
|
|
14
|
-
slots: { default: "Content" },
|
|
15
|
-
});
|
|
16
|
-
const el = wrapper.find("bl-drawer").element;
|
|
17
|
-
expect(el.getAttribute("caption")).toBe("Title");
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
it("emits update:open and open when bl-drawer fires bl-drawer-open", async () => {
|
|
21
|
-
const wrapper = mount(BvDrawer, { slots: { default: "Content" } });
|
|
22
|
-
wrapper.find("bl-drawer").element.dispatchEvent(
|
|
23
|
-
new CustomEvent("bl-drawer-open", { bubbles: true }),
|
|
24
|
-
);
|
|
25
|
-
await wrapper.vm.$nextTick();
|
|
26
|
-
expect(wrapper.emitted("update:open")).toEqual([[true]]);
|
|
27
|
-
expect(wrapper.emitted("open")).toHaveLength(1);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it("emits update:open and close when bl-drawer fires bl-drawer-close", async () => {
|
|
31
|
-
const wrapper = mount(BvDrawer, {
|
|
32
|
-
props: { open: true },
|
|
33
|
-
slots: { default: "Content" },
|
|
34
|
-
});
|
|
35
|
-
wrapper.find("bl-drawer").element.dispatchEvent(
|
|
36
|
-
new CustomEvent("bl-drawer-close", { bubbles: true }),
|
|
37
|
-
);
|
|
38
|
-
await wrapper.vm.$nextTick();
|
|
39
|
-
expect(wrapper.emitted("update:open")).toEqual([[false]]);
|
|
40
|
-
expect(wrapper.emitted("close")).toHaveLength(1);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it("passes width for size preset", () => {
|
|
44
|
-
const wrapper = mount(BvDrawer, { props: { width: "small" } });
|
|
45
|
-
const el = wrapper.find("bl-drawer").element;
|
|
46
|
-
expect(el.getAttribute("width")).toBe("320px");
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it("maps medium width preset to 424px", () => {
|
|
50
|
-
const wrapper = mount(BvDrawer, { props: { width: "medium" } });
|
|
51
|
-
expect(wrapper.find("bl-drawer").element.getAttribute("width")).toBe("424px");
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it("maps large width preset to 560px", () => {
|
|
55
|
-
const wrapper = mount(BvDrawer, { props: { width: "large" } });
|
|
56
|
-
expect(wrapper.find("bl-drawer").element.getAttribute("width")).toBe("560px");
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it("passes custom CSS width through unchanged", () => {
|
|
60
|
-
const wrapper = mount(BvDrawer, { props: { width: "500px" } });
|
|
61
|
-
expect(wrapper.find("bl-drawer").element.getAttribute("width")).toBe("500px");
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it("passes embedUrl and externalLink to bl-drawer", () => {
|
|
65
|
-
const wrapper = mount(BvDrawer, {
|
|
66
|
-
props: { embedUrl: "https://example.com", externalLink: "https://link.com" },
|
|
67
|
-
});
|
|
68
|
-
const el = wrapper.find("bl-drawer").element;
|
|
69
|
-
expect(el.getAttribute("embed-url")).toBe("https://example.com");
|
|
70
|
-
expect(el.getAttribute("external-link")).toBe("https://link.com");
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it("exposes open and close methods", () => {
|
|
74
|
-
const wrapper = mount(BvDrawer);
|
|
75
|
-
const vm = wrapper.vm as unknown as { open: () => void; close: () => void };
|
|
76
|
-
expect(typeof vm.open).toBe("function");
|
|
77
|
-
expect(typeof vm.close).toBe("function");
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it("open() exposed method sets open property on the element", () => {
|
|
81
|
-
const wrapper = mount(BvDrawer);
|
|
82
|
-
const vm = wrapper.vm as unknown as { open: () => void };
|
|
83
|
-
vm.open();
|
|
84
|
-
const el = wrapper.find("bl-drawer").element as unknown as { open: boolean };
|
|
85
|
-
expect(el.open).toBe(true);
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
it("close() exposed method sets open property to false on the element", () => {
|
|
89
|
-
const wrapper = mount(BvDrawer, { props: { open: true } });
|
|
90
|
-
const vm = wrapper.vm as unknown as { close: () => void };
|
|
91
|
-
vm.close();
|
|
92
|
-
const el = wrapper.find("bl-drawer").element as unknown as { open: boolean };
|
|
93
|
-
expect(el.open).toBe(false);
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it("syncs open prop change to the underlying element", async () => {
|
|
97
|
-
const wrapper = mount(BvDrawer, { props: { open: false } });
|
|
98
|
-
await wrapper.setProps({ open: true });
|
|
99
|
-
const el = wrapper.find("bl-drawer").element as unknown as { open: boolean };
|
|
100
|
-
expect(el.open).toBe(true);
|
|
101
|
-
});
|
|
102
|
-
});
|
package/src/drawer/Drawer.vue
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
/**
|
|
3
|
-
* Drawer Component
|
|
4
|
-
*
|
|
5
|
-
* A Vue UI kit component for Baklava's `bl-drawer` web component.
|
|
6
|
-
* Provides a side drawer for supplemental content with support for caption,
|
|
7
|
-
* embedded iframe content, external link, and programmable width.
|
|
8
|
-
*
|
|
9
|
-
* @component
|
|
10
|
-
* @example
|
|
11
|
-
* ```vue
|
|
12
|
-
* <!-- Basic usage -->
|
|
13
|
-
* <template>
|
|
14
|
-
* <BvButton @click="showDrawer = true">Open Drawer</BvButton>
|
|
15
|
-
* <BvDrawer v-model:open="showDrawer">
|
|
16
|
-
* <p>Drawer content goes here.</p>
|
|
17
|
-
* </BvDrawer>
|
|
18
|
-
* </template>
|
|
19
|
-
* ```
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* ```vue
|
|
23
|
-
* <!-- With caption -->
|
|
24
|
-
* <template>
|
|
25
|
-
* <BvDrawer v-model:open="showDrawer" caption="Drawer Title">
|
|
26
|
-
* <p>Content with title.</p>
|
|
27
|
-
* </BvDrawer>
|
|
28
|
-
* </template>
|
|
29
|
-
* ```
|
|
30
|
-
*
|
|
31
|
-
* @example
|
|
32
|
-
* ```vue
|
|
33
|
-
* <!-- With embed URL (iframe) -->
|
|
34
|
-
* <template>
|
|
35
|
-
* <BvDrawer v-model:open="showDrawer" embed-url="https://example.com" />
|
|
36
|
-
* </template>
|
|
37
|
-
* ```
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* ```vue
|
|
41
|
-
* <!-- With width -->
|
|
42
|
-
* <template>
|
|
43
|
-
* <BvDrawer v-model:open="showDrawer" width="large" caption="Wide Drawer">
|
|
44
|
-
* <p>Wider drawer content.</p>
|
|
45
|
-
* </BvDrawer>
|
|
46
|
-
* </template>
|
|
47
|
-
* ```
|
|
48
|
-
*
|
|
49
|
-
* @example
|
|
50
|
-
* ```vue
|
|
51
|
-
* <!-- Programmatic control via ref -->
|
|
52
|
-
* <template>
|
|
53
|
-
* <BvButton @click="drawerRef?.open()">Open</BvButton>
|
|
54
|
-
* <BvButton @click="drawerRef?.close()">Close</BvButton>
|
|
55
|
-
* <BvDrawer ref="drawerRef" caption="Programmatic">
|
|
56
|
-
* <p>Opened and closed via ref methods.</p>
|
|
57
|
-
* </BvDrawer>
|
|
58
|
-
* </template>
|
|
59
|
-
* ```
|
|
60
|
-
*/
|
|
61
|
-
import { computed, onMounted, ref, watch } from "vue";
|
|
62
|
-
import { loadBaklavaResources } from "../utils/loadBaklavaResources";
|
|
63
|
-
import type { DrawerProps } from "./drawer.types";
|
|
64
|
-
|
|
65
|
-
const WIDTH_TO_PX: Record<string, string> = {
|
|
66
|
-
small: "320px",
|
|
67
|
-
medium: "424px",
|
|
68
|
-
large: "560px",
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
const props = withDefaults(defineProps<DrawerProps>(), {
|
|
72
|
-
open: false,
|
|
73
|
-
caption: undefined,
|
|
74
|
-
embedUrl: undefined,
|
|
75
|
-
externalLink: undefined,
|
|
76
|
-
width: undefined,
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
const emit = defineEmits<{
|
|
80
|
-
/** Emitted when visibility changes. Use for two-way binding. */
|
|
81
|
-
"update:open": [open: boolean];
|
|
82
|
-
/** Emitted when the drawer is opened. */
|
|
83
|
-
open: [];
|
|
84
|
-
/** Emitted when the drawer is closed. */
|
|
85
|
-
close: [];
|
|
86
|
-
}>();
|
|
87
|
-
|
|
88
|
-
/** Reference to the underlying bl-drawer element. */
|
|
89
|
-
const drawerRef = ref<HTMLElement | null>(null);
|
|
90
|
-
|
|
91
|
-
/** Computed width for bl-drawer. Maps small/medium/large to px or passes CSS value. */
|
|
92
|
-
const drawerWidth = computed(() => {
|
|
93
|
-
if (!props.width) return undefined;
|
|
94
|
-
const key = props.width.toLowerCase();
|
|
95
|
-
return WIDTH_TO_PX[key] ?? props.width;
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
/** Handles bl-drawer-open event. Syncs state and emits. */
|
|
99
|
-
const handleOpen = () => {
|
|
100
|
-
emit("update:open", true);
|
|
101
|
-
emit("open");
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
/** Handles bl-drawer-close event. Syncs state and emits. */
|
|
105
|
-
const handleClose = () => {
|
|
106
|
-
emit("update:open", false);
|
|
107
|
-
emit("close");
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
/** Syncs props.open to the bl-drawer element's open property. */
|
|
111
|
-
function getBlDrawer(el: HTMLElement | null): { open: boolean } | null {
|
|
112
|
-
return el as unknown as { open: boolean } | null;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
watch(
|
|
116
|
-
() => props.open,
|
|
117
|
-
(newValue) => {
|
|
118
|
-
const blDrawer = getBlDrawer(drawerRef.value);
|
|
119
|
-
if (blDrawer && blDrawer.open !== newValue) {
|
|
120
|
-
blDrawer.open = newValue;
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
{ immediate: true },
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
onMounted(() => {
|
|
127
|
-
loadBaklavaResources();
|
|
128
|
-
|
|
129
|
-
const blDrawer = getBlDrawer(drawerRef.value);
|
|
130
|
-
if (blDrawer && blDrawer.open !== props.open) {
|
|
131
|
-
blDrawer.open = props.open;
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
defineExpose({
|
|
136
|
-
/** Opens the drawer programmatically. */
|
|
137
|
-
open: () => {
|
|
138
|
-
const blDrawer = getBlDrawer(drawerRef.value);
|
|
139
|
-
if (blDrawer) blDrawer.open = true;
|
|
140
|
-
},
|
|
141
|
-
/** Closes the drawer programmatically. */
|
|
142
|
-
close: () => {
|
|
143
|
-
const blDrawer = getBlDrawer(drawerRef.value);
|
|
144
|
-
if (blDrawer) blDrawer.open = false;
|
|
145
|
-
},
|
|
146
|
-
});
|
|
147
|
-
</script>
|
|
148
|
-
|
|
149
|
-
<template>
|
|
150
|
-
<bl-drawer
|
|
151
|
-
ref="drawerRef"
|
|
152
|
-
:open="open"
|
|
153
|
-
:caption="caption"
|
|
154
|
-
:embed-url="embedUrl"
|
|
155
|
-
:external-link="externalLink"
|
|
156
|
-
:width="drawerWidth"
|
|
157
|
-
@bl-drawer-open="handleOpen"
|
|
158
|
-
@bl-drawer-close="handleClose"
|
|
159
|
-
>
|
|
160
|
-
<slot />
|
|
161
|
-
</bl-drawer>
|
|
162
|
-
</template>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Props for the Drawer component.
|
|
3
|
-
*
|
|
4
|
-
* @interface DrawerProps
|
|
5
|
-
*/
|
|
6
|
-
export interface DrawerProps {
|
|
7
|
-
/** Whether the drawer is visible. */
|
|
8
|
-
open?: boolean;
|
|
9
|
-
/** Drawer title. Maps to bl-drawer's caption attribute. */
|
|
10
|
-
caption?: string;
|
|
11
|
-
/** Iframe URL for embedded content. When set, drawer shows iframe instead of slot. */
|
|
12
|
-
embedUrl?: string;
|
|
13
|
-
/** External link URL - adds a button in the header. */
|
|
14
|
-
externalLink?: string;
|
|
15
|
-
/** Drawer width. Accepts "small", "medium", "large" or CSS value (e.g. "424px"). */
|
|
16
|
-
width?: string;
|
|
17
|
-
}
|
package/src/drawer/index.ts
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { mount } from "@vue/test-utils";
|
|
2
|
-
import { nextTick } from "vue";
|
|
3
|
-
import { describe, expect, it } from "vitest";
|
|
4
|
-
import BvDropdown from "./Dropdown.vue";
|
|
5
|
-
|
|
6
|
-
describe("BvDropdown", () => {
|
|
7
|
-
it("renders with label and items", () => {
|
|
8
|
-
const wrapper = mount(BvDropdown, {
|
|
9
|
-
props: {
|
|
10
|
-
label: "Menu",
|
|
11
|
-
items: [
|
|
12
|
-
{ value: "a", caption: "Option A" },
|
|
13
|
-
{ value: "b", caption: "Option B" },
|
|
14
|
-
],
|
|
15
|
-
},
|
|
16
|
-
slots: { item: ({ item }: { item: { caption: string } }) => item.caption },
|
|
17
|
-
});
|
|
18
|
-
expect(wrapper.find("bl-dropdown").exists()).toBe(true);
|
|
19
|
-
expect(wrapper.text()).toContain("Option A");
|
|
20
|
-
expect(wrapper.text()).toContain("Option B");
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it("passes disabled to bl-dropdown", () => {
|
|
24
|
-
const wrapper = mount(BvDropdown, {
|
|
25
|
-
props: { label: "Menu", disabled: true, items: [] },
|
|
26
|
-
});
|
|
27
|
-
expect(wrapper.find("bl-dropdown").element.hasAttribute("disabled")).toBe(
|
|
28
|
-
true,
|
|
29
|
-
);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it("emits update:open and open when bl-dropdown fires bl-dropdown-open", async () => {
|
|
33
|
-
const wrapper = mount(BvDropdown, {
|
|
34
|
-
props: { label: "Menu", items: [] },
|
|
35
|
-
});
|
|
36
|
-
wrapper.find("bl-dropdown").element.dispatchEvent(
|
|
37
|
-
new CustomEvent("bl-dropdown-open", { bubbles: true }),
|
|
38
|
-
);
|
|
39
|
-
await wrapper.vm.$nextTick();
|
|
40
|
-
expect(wrapper.emitted("update:open")).toEqual([[true]]);
|
|
41
|
-
expect(wrapper.emitted("open")).toHaveLength(1);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it("emits update:open and close when bl-dropdown fires bl-dropdown-close", async () => {
|
|
45
|
-
const wrapper = mount(BvDropdown, {
|
|
46
|
-
props: { label: "Menu", items: [], open: true },
|
|
47
|
-
});
|
|
48
|
-
wrapper.find("bl-dropdown").element.dispatchEvent(
|
|
49
|
-
new CustomEvent("bl-dropdown-close", { bubbles: true }),
|
|
50
|
-
);
|
|
51
|
-
await wrapper.vm.$nextTick();
|
|
52
|
-
expect(wrapper.emitted("update:open")).toEqual([[false]]);
|
|
53
|
-
expect(wrapper.emitted("close")).toHaveLength(1);
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
it("emits select when dropdown item is clicked", async () => {
|
|
57
|
-
const wrapper = mount(BvDropdown, {
|
|
58
|
-
props: {
|
|
59
|
-
label: "Menu",
|
|
60
|
-
items: [{ value: "a", caption: "Option A" }],
|
|
61
|
-
},
|
|
62
|
-
slots: { item: ({ item }: { item: { caption: string } }) => item.caption },
|
|
63
|
-
});
|
|
64
|
-
const item = wrapper.find("bl-dropdown-item");
|
|
65
|
-
const event = new CustomEvent("bl-dropdown-item-click", { bubbles: true });
|
|
66
|
-
item.element.dispatchEvent(event);
|
|
67
|
-
await wrapper.vm.$nextTick();
|
|
68
|
-
expect(wrapper.emitted("select")).toHaveLength(1);
|
|
69
|
-
expect(wrapper.emitted("select")![0][0]).toBe(event);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it("renders items with groups when groupCaption is set", () => {
|
|
73
|
-
const wrapper = mount(BvDropdown, {
|
|
74
|
-
props: {
|
|
75
|
-
label: "Menu",
|
|
76
|
-
items: [
|
|
77
|
-
{ value: "a", caption: "Option A", groupCaption: "Group 1" },
|
|
78
|
-
{ value: "b", caption: "Option B", groupCaption: "Group 1" },
|
|
79
|
-
],
|
|
80
|
-
},
|
|
81
|
-
slots: { item: ({ item }: { item: { caption: string } }) => item.caption },
|
|
82
|
-
});
|
|
83
|
-
const group = wrapper.find("bl-dropdown-group");
|
|
84
|
-
expect(group.exists()).toBe(true);
|
|
85
|
-
expect(group.attributes("caption")).toBe("Group 1");
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
it("exposes open, close, and toggle methods", () => {
|
|
89
|
-
const wrapper = mount(BvDropdown, {
|
|
90
|
-
props: { label: "Menu", items: [] },
|
|
91
|
-
});
|
|
92
|
-
const vm = wrapper.vm as unknown as {
|
|
93
|
-
open: () => void;
|
|
94
|
-
close: () => void;
|
|
95
|
-
toggle: () => void;
|
|
96
|
-
};
|
|
97
|
-
expect(typeof vm.open).toBe("function");
|
|
98
|
-
expect(typeof vm.close).toBe("function");
|
|
99
|
-
expect(typeof vm.toggle).toBe("function");
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
it("calls open on bl-dropdown when exposed open is invoked", () => {
|
|
103
|
-
const wrapper = mount(BvDropdown, {
|
|
104
|
-
props: { label: "Menu", items: [] },
|
|
105
|
-
});
|
|
106
|
-
const vm = wrapper.vm as unknown as { open: () => void };
|
|
107
|
-
const blDropdown = wrapper.find("bl-dropdown").element as unknown as {
|
|
108
|
-
opened?: boolean;
|
|
109
|
-
open: () => void;
|
|
110
|
-
};
|
|
111
|
-
vm.open();
|
|
112
|
-
expect(blDropdown.opened).toBe(true);
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
it("calls close on bl-dropdown when exposed close is invoked", () => {
|
|
116
|
-
const wrapper = mount(BvDropdown, {
|
|
117
|
-
props: { label: "Menu", items: [], open: true },
|
|
118
|
-
});
|
|
119
|
-
const vm = wrapper.vm as unknown as { close: () => void };
|
|
120
|
-
const blDropdown = wrapper.find("bl-dropdown").element as unknown as {
|
|
121
|
-
opened?: boolean;
|
|
122
|
-
close: () => void;
|
|
123
|
-
};
|
|
124
|
-
vm.close();
|
|
125
|
-
expect(blDropdown.opened).toBe(false);
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
it("syncs open state via watch when prop changes from false to true", async () => {
|
|
129
|
-
const wrapper = mount(BvDropdown, {
|
|
130
|
-
props: { label: "Menu", items: [], open: false },
|
|
131
|
-
});
|
|
132
|
-
const blDropdown = wrapper.find("bl-dropdown").element as unknown as {
|
|
133
|
-
opened?: boolean;
|
|
134
|
-
};
|
|
135
|
-
expect(blDropdown.opened).toBe(false);
|
|
136
|
-
await wrapper.setProps({ open: true });
|
|
137
|
-
expect(blDropdown.opened).toBe(true);
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it("syncs open state via watch when prop changes from true to false", async () => {
|
|
141
|
-
const wrapper = mount(BvDropdown, {
|
|
142
|
-
props: { label: "Menu", items: [], open: false },
|
|
143
|
-
});
|
|
144
|
-
const blDropdown = wrapper.find("bl-dropdown").element as unknown as {
|
|
145
|
-
opened?: boolean;
|
|
146
|
-
};
|
|
147
|
-
// First open it
|
|
148
|
-
await wrapper.setProps({ open: true });
|
|
149
|
-
expect(blDropdown.opened).toBe(true);
|
|
150
|
-
// Then close it
|
|
151
|
-
await wrapper.setProps({ open: false });
|
|
152
|
-
expect(blDropdown.opened).toBe(false);
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
it("toggle closes when dropdown is opened", () => {
|
|
156
|
-
const wrapper = mount(BvDropdown, {
|
|
157
|
-
props: { label: "Menu", items: [] },
|
|
158
|
-
});
|
|
159
|
-
const vm = wrapper.vm as unknown as {
|
|
160
|
-
open: () => void;
|
|
161
|
-
toggle: () => void;
|
|
162
|
-
};
|
|
163
|
-
const blDropdown = wrapper.find("bl-dropdown").element as unknown as {
|
|
164
|
-
opened?: boolean;
|
|
165
|
-
};
|
|
166
|
-
// Open first
|
|
167
|
-
vm.open();
|
|
168
|
-
expect(blDropdown.opened).toBe(true);
|
|
169
|
-
// Toggle should close
|
|
170
|
-
vm.toggle();
|
|
171
|
-
expect(blDropdown.opened).toBe(false);
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
it("toggle opens when dropdown is closed", () => {
|
|
175
|
-
const wrapper = mount(BvDropdown, {
|
|
176
|
-
props: { label: "Menu", items: [] },
|
|
177
|
-
});
|
|
178
|
-
const vm = wrapper.vm as unknown as { toggle: () => void };
|
|
179
|
-
const blDropdown = wrapper.find("bl-dropdown").element as unknown as {
|
|
180
|
-
opened?: boolean;
|
|
181
|
-
};
|
|
182
|
-
expect(blDropdown.opened).toBe(false);
|
|
183
|
-
vm.toggle();
|
|
184
|
-
expect(blDropdown.opened).toBe(true);
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it("renders item captions via default fallback when no item slot provided", () => {
|
|
188
|
-
const wrapper = mount(BvDropdown, {
|
|
189
|
-
props: {
|
|
190
|
-
label: "Menu",
|
|
191
|
-
items: [
|
|
192
|
-
{ value: "x", caption: "Fallback Caption" },
|
|
193
|
-
],
|
|
194
|
-
},
|
|
195
|
-
});
|
|
196
|
-
expect(wrapper.text()).toContain("Fallback Caption");
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
it("renders slot mode content when no items provided", () => {
|
|
200
|
-
const wrapper = mount(BvDropdown, {
|
|
201
|
-
props: { label: "Menu" },
|
|
202
|
-
slots: { default: '<div class="custom-content">Custom</div>' },
|
|
203
|
-
});
|
|
204
|
-
expect(wrapper.find(".custom-content").exists()).toBe(true);
|
|
205
|
-
expect(wrapper.text()).toContain("Custom");
|
|
206
|
-
});
|
|
207
|
-
});
|