@baklavue/ui 1.0.0 → 1.0.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 +2404 -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 +181 -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
package/src/tag/tag.types.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { BaklavaIcon } from "@trendyol/baklava-icons";
|
|
2
|
-
|
|
3
|
-
/** Tag variant: selectable (default) or removable (closable) */
|
|
4
|
-
export type TagVariant = "selectable" | "removable";
|
|
5
|
-
|
|
6
|
-
/** Tag size */
|
|
7
|
-
export type TagSize = "small" | "medium" | "large";
|
|
8
|
-
|
|
9
|
-
export interface TagProps {
|
|
10
|
-
/** Tag variant: selectable or removable */
|
|
11
|
-
variant?: TagVariant;
|
|
12
|
-
/** Tag size */
|
|
13
|
-
size?: TagSize;
|
|
14
|
-
/** When true, shows close button (uses variant="removable" under the hood) */
|
|
15
|
-
closable?: boolean;
|
|
16
|
-
/** Icon name from Baklava icons */
|
|
17
|
-
icon?: BaklavaIcon;
|
|
18
|
-
/** Selected state (for selectable variant) */
|
|
19
|
-
selected?: boolean;
|
|
20
|
-
/** Disabled state */
|
|
21
|
-
disabled?: boolean;
|
|
22
|
-
/** Value for form/selection */
|
|
23
|
-
value?: string | null;
|
|
24
|
-
}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { mount } from "@vue/test-utils";
|
|
2
|
-
import { describe, expect, it } from "vitest";
|
|
3
|
-
import BvTextarea from "./Textarea.vue";
|
|
4
|
-
|
|
5
|
-
describe("BvTextarea", () => {
|
|
6
|
-
it("renders with default props", () => {
|
|
7
|
-
const wrapper = mount(BvTextarea);
|
|
8
|
-
expect(wrapper.find("bl-textarea").exists()).toBe(true);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
it("passes label and placeholder to bl-textarea", () => {
|
|
12
|
-
const wrapper = mount(BvTextarea, {
|
|
13
|
-
props: { label: "Message", placeholder: "Enter text" },
|
|
14
|
-
});
|
|
15
|
-
const el = wrapper.find("bl-textarea").element;
|
|
16
|
-
expect(el.getAttribute("label")).toBe("Message");
|
|
17
|
-
expect(el.getAttribute("placeholder")).toBe("Enter text");
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
it("emits update:modelValue when bl-textarea fires bl-input", async () => {
|
|
21
|
-
const wrapper = mount(BvTextarea);
|
|
22
|
-
const el = wrapper.find("bl-textarea").element as HTMLTextAreaElement & {
|
|
23
|
-
value: string;
|
|
24
|
-
};
|
|
25
|
-
el.value = "new text";
|
|
26
|
-
el.dispatchEvent(
|
|
27
|
-
new CustomEvent("bl-input", { bubbles: true, detail: { target: el } }),
|
|
28
|
-
);
|
|
29
|
-
await wrapper.vm.$nextTick();
|
|
30
|
-
expect(wrapper.emitted("update:modelValue")).toEqual([["new text"]]);
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it("binds modelValue to value attribute", () => {
|
|
34
|
-
const wrapper = mount(BvTextarea, {
|
|
35
|
-
props: { modelValue: "initial" },
|
|
36
|
-
});
|
|
37
|
-
expect(wrapper.find("bl-textarea").element.getAttribute("value")).toBe(
|
|
38
|
-
"initial",
|
|
39
|
-
);
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it("passes disabled=true to bl-textarea", () => {
|
|
43
|
-
const wrapper = mount(BvTextarea, { props: { disabled: true } });
|
|
44
|
-
const el = wrapper.find("bl-textarea").element;
|
|
45
|
-
expect(el.getAttribute("disabled")).toBe("true");
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
it("passes required=true to bl-textarea", () => {
|
|
49
|
-
const wrapper = mount(BvTextarea, { props: { required: true } });
|
|
50
|
-
const el = wrapper.find("bl-textarea").element;
|
|
51
|
-
expect(el.getAttribute("required")).toBe("true");
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it("emits update:modelValue with null when target value is empty", async () => {
|
|
55
|
-
const wrapper = mount(BvTextarea);
|
|
56
|
-
const el = wrapper.find("bl-textarea").element as HTMLTextAreaElement & {
|
|
57
|
-
value: string;
|
|
58
|
-
};
|
|
59
|
-
el.value = "";
|
|
60
|
-
el.dispatchEvent(
|
|
61
|
-
new CustomEvent("bl-input", { bubbles: true, detail: { target: el } }),
|
|
62
|
-
);
|
|
63
|
-
await wrapper.vm.$nextTick();
|
|
64
|
-
expect(wrapper.emitted("update:modelValue")).toEqual([[null]]);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
it("emits input event on bl-input", async () => {
|
|
68
|
-
const wrapper = mount(BvTextarea);
|
|
69
|
-
const el = wrapper.find("bl-textarea").element as HTMLTextAreaElement & {
|
|
70
|
-
value: string;
|
|
71
|
-
};
|
|
72
|
-
el.value = "text";
|
|
73
|
-
el.dispatchEvent(
|
|
74
|
-
new CustomEvent("bl-input", { bubbles: true }),
|
|
75
|
-
);
|
|
76
|
-
await wrapper.vm.$nextTick();
|
|
77
|
-
expect(wrapper.emitted("input")).toHaveLength(1);
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it("emits change event on bl-change", async () => {
|
|
81
|
-
const wrapper = mount(BvTextarea);
|
|
82
|
-
const el = wrapper.find("bl-textarea").element;
|
|
83
|
-
el.dispatchEvent(new CustomEvent("bl-change", { bubbles: true }));
|
|
84
|
-
await wrapper.vm.$nextTick();
|
|
85
|
-
expect(wrapper.emitted("change")).toHaveLength(1);
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
it("renders slot content", () => {
|
|
89
|
-
const wrapper = mount(BvTextarea, {
|
|
90
|
-
slots: { default: "<span class=\"helper\">Help</span>" },
|
|
91
|
-
});
|
|
92
|
-
expect(wrapper.find(".helper").exists()).toBe(true);
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
it("passes additional props (rows, maxlength, name, size) to bl-textarea", () => {
|
|
96
|
-
const wrapper = mount(BvTextarea, {
|
|
97
|
-
props: { rows: 5, maxlength: 200, name: "comment", size: "large" as const },
|
|
98
|
-
});
|
|
99
|
-
const el = wrapper.find("bl-textarea").element;
|
|
100
|
-
expect(el.getAttribute("rows")).toBe("5");
|
|
101
|
-
expect(el.getAttribute("maxlength")).toBe("200");
|
|
102
|
-
expect(el.getAttribute("name")).toBe("comment");
|
|
103
|
-
expect(el.getAttribute("size")).toBe("large");
|
|
104
|
-
});
|
|
105
|
-
});
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
/**
|
|
3
|
-
* Textarea Component
|
|
4
|
-
*
|
|
5
|
-
* A Vue UI kit component for Baklava's `bl-textarea` web component with v-model support.
|
|
6
|
-
* Supports label, placeholder, validation, character counter, and help text.
|
|
7
|
-
*
|
|
8
|
-
* @component
|
|
9
|
-
* @example
|
|
10
|
-
* ```vue
|
|
11
|
-
* <!-- Basic usage with v-model -->
|
|
12
|
-
* <template>
|
|
13
|
-
* <BvTextarea v-model="message" label="Message" placeholder="Enter your message" />
|
|
14
|
-
* </template>
|
|
15
|
-
* ```
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```vue
|
|
19
|
-
* <!-- With validation -->
|
|
20
|
-
* <template>
|
|
21
|
-
* <BvTextarea
|
|
22
|
-
* v-model="comment"
|
|
23
|
-
* label="Comment"
|
|
24
|
-
* :maxlength="500"
|
|
25
|
-
* help-text="Max 500 characters"
|
|
26
|
-
* invalid-text="Please enter a valid comment"
|
|
27
|
-
* />
|
|
28
|
-
* </template>
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
import { onMounted } from "vue";
|
|
32
|
-
import { loadBaklavaResources } from "../utils/loadBaklavaResources";
|
|
33
|
-
import type { TextareaProps } from "./textarea.types";
|
|
34
|
-
|
|
35
|
-
const props = withDefaults(defineProps<TextareaProps>(), {
|
|
36
|
-
modelValue: undefined,
|
|
37
|
-
label: undefined,
|
|
38
|
-
placeholder: undefined,
|
|
39
|
-
rows: undefined,
|
|
40
|
-
maxlength: undefined,
|
|
41
|
-
disabled: undefined,
|
|
42
|
-
required: undefined,
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
const emit = defineEmits<{
|
|
46
|
-
/**
|
|
47
|
-
* Emitted when the value changes (use with v-model).
|
|
48
|
-
* @param {string | null} value - The new textarea value.
|
|
49
|
-
*/
|
|
50
|
-
"update:modelValue": [value: string | null];
|
|
51
|
-
/**
|
|
52
|
-
* Emitted on user input (mirrors native bl-input).
|
|
53
|
-
* @param {CustomEvent} event - The bl-input event.
|
|
54
|
-
*/
|
|
55
|
-
input: [event: CustomEvent];
|
|
56
|
-
/**
|
|
57
|
-
* Emitted when the value changes (blur or commit).
|
|
58
|
-
* @param {CustomEvent} event - The bl-change event.
|
|
59
|
-
*/
|
|
60
|
-
change: [event: CustomEvent];
|
|
61
|
-
}>();
|
|
62
|
-
|
|
63
|
-
onMounted(() => {
|
|
64
|
-
loadBaklavaResources();
|
|
65
|
-
});
|
|
66
|
-
</script>
|
|
67
|
-
|
|
68
|
-
<template>
|
|
69
|
-
<bl-textarea
|
|
70
|
-
v-bind="{
|
|
71
|
-
...props,
|
|
72
|
-
disabled: props.disabled === true ? true : undefined,
|
|
73
|
-
required: props.required === true ? true : undefined,
|
|
74
|
-
}"
|
|
75
|
-
:value="props.modelValue"
|
|
76
|
-
@bl-input="
|
|
77
|
-
emit('input', $event);
|
|
78
|
-
emit('update:modelValue', ($event.target as HTMLTextAreaElement)?.value || null);
|
|
79
|
-
"
|
|
80
|
-
@bl-change="emit('change', $event)"
|
|
81
|
-
>
|
|
82
|
-
<slot />
|
|
83
|
-
</bl-textarea>
|
|
84
|
-
</template>
|
package/src/textarea/index.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/** Textarea size */
|
|
2
|
-
export type TextareaSize = "small" | "medium" | "large";
|
|
3
|
-
|
|
4
|
-
export interface TextareaProps {
|
|
5
|
-
/** Textarea value (use with v-model) */
|
|
6
|
-
modelValue?: string | null;
|
|
7
|
-
/** Label text */
|
|
8
|
-
label?: string;
|
|
9
|
-
/** Placeholder text */
|
|
10
|
-
placeholder?: string;
|
|
11
|
-
/** Number of visible rows */
|
|
12
|
-
rows?: number;
|
|
13
|
-
/** Maximum character length */
|
|
14
|
-
maxlength?: number;
|
|
15
|
-
/** Minimum character length */
|
|
16
|
-
minlength?: number;
|
|
17
|
-
/** Disabled state */
|
|
18
|
-
disabled?: boolean;
|
|
19
|
-
/** Required field */
|
|
20
|
-
required?: boolean;
|
|
21
|
-
/** Readonly state */
|
|
22
|
-
readonly?: boolean;
|
|
23
|
-
/** Help text below the textarea */
|
|
24
|
-
helpText?: string;
|
|
25
|
-
/** Custom error/invalid message */
|
|
26
|
-
invalidText?: string;
|
|
27
|
-
/** Enable character counter */
|
|
28
|
-
characterCounter?: boolean;
|
|
29
|
-
/** Enable auto-expand up to maxRows */
|
|
30
|
-
expand?: boolean;
|
|
31
|
-
/** Max rows when expand is true */
|
|
32
|
-
maxRows?: number;
|
|
33
|
-
/** Textarea size */
|
|
34
|
-
size?: TextareaSize;
|
|
35
|
-
/** Name attribute for forms */
|
|
36
|
-
name?: string;
|
|
37
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { mount } from "@vue/test-utils";
|
|
2
|
-
import { describe, expect, it } from "vitest";
|
|
3
|
-
import BvTooltip from "./Tooltip.vue";
|
|
4
|
-
|
|
5
|
-
describe("BvTooltip", () => {
|
|
6
|
-
it("renders with content prop", () => {
|
|
7
|
-
const wrapper = mount(BvTooltip, {
|
|
8
|
-
props: { content: "Tooltip text" },
|
|
9
|
-
slots: { default: "Trigger" },
|
|
10
|
-
});
|
|
11
|
-
expect(wrapper.find("bl-tooltip").exists()).toBe(true);
|
|
12
|
-
expect(wrapper.text()).toContain("Tooltip text");
|
|
13
|
-
expect(wrapper.text()).toContain("Trigger");
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it("passes placement to bl-tooltip", () => {
|
|
17
|
-
const wrapper = mount(BvTooltip, {
|
|
18
|
-
props: { content: "Tip", placement: "bottom" },
|
|
19
|
-
slots: { default: "Hover" },
|
|
20
|
-
});
|
|
21
|
-
expect(wrapper.find("bl-tooltip").element.getAttribute("placement")).toBe(
|
|
22
|
-
"bottom",
|
|
23
|
-
);
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
it("emits show when bl-tooltip fires bl-tooltip-show", async () => {
|
|
27
|
-
const wrapper = mount(BvTooltip, {
|
|
28
|
-
props: { content: "Tip" },
|
|
29
|
-
slots: { default: "Hover" },
|
|
30
|
-
});
|
|
31
|
-
wrapper.find("bl-tooltip").element.dispatchEvent(
|
|
32
|
-
new CustomEvent("bl-tooltip-show", { bubbles: true }),
|
|
33
|
-
);
|
|
34
|
-
await wrapper.vm.$nextTick();
|
|
35
|
-
expect(wrapper.emitted("show")).toHaveLength(1);
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it("renders slot when disabled", () => {
|
|
39
|
-
const wrapper = mount(BvTooltip, {
|
|
40
|
-
props: { content: "Tip", disabled: true },
|
|
41
|
-
slots: { default: "Disabled trigger" },
|
|
42
|
-
});
|
|
43
|
-
expect(wrapper.find("bl-tooltip").exists()).toBe(false);
|
|
44
|
-
expect(wrapper.text()).toContain("Disabled trigger");
|
|
45
|
-
});
|
|
46
|
-
});
|
package/src/tooltip/Tooltip.vue
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
/**
|
|
3
|
-
* Tooltip Component
|
|
4
|
-
*
|
|
5
|
-
* A Vue UI kit component for Baklava's `bl-tooltip` web component for displaying contextual
|
|
6
|
-
* information on hover or focus. The trigger is provided via the default slot;
|
|
7
|
-
* content can be set via the `content` prop or the `#content` slot.
|
|
8
|
-
*
|
|
9
|
-
* @component
|
|
10
|
-
* @example
|
|
11
|
-
* ```vue
|
|
12
|
-
* <!-- Basic usage -->
|
|
13
|
-
* <template>
|
|
14
|
-
* <BvTooltip content="This is a tooltip">
|
|
15
|
-
* <BvButton>Hover me</BvButton>
|
|
16
|
-
* </BvTooltip>
|
|
17
|
-
* </template>
|
|
18
|
-
* ```
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```vue
|
|
22
|
-
* <!-- With placement -->
|
|
23
|
-
* <template>
|
|
24
|
-
* <BvTooltip content="Tooltip" placement="bottom">
|
|
25
|
-
* <span>Trigger</span>
|
|
26
|
-
* </BvTooltip>
|
|
27
|
-
* </template>
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
import { computed, onMounted } from "vue";
|
|
31
|
-
import { loadBaklavaResources } from "../utils/loadBaklavaResources";
|
|
32
|
-
import type { TooltipProps } from "./tooltip.types";
|
|
33
|
-
|
|
34
|
-
const props = withDefaults(defineProps<TooltipProps>(), {
|
|
35
|
-
content: undefined,
|
|
36
|
-
placement: undefined,
|
|
37
|
-
trigger: undefined,
|
|
38
|
-
disabled: undefined,
|
|
39
|
-
delay: undefined,
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
const emit = defineEmits<{
|
|
43
|
-
/**
|
|
44
|
-
* Emitted when the tooltip is shown.
|
|
45
|
-
*/
|
|
46
|
-
show: [];
|
|
47
|
-
/**
|
|
48
|
-
* Emitted when the tooltip is hidden.
|
|
49
|
-
*/
|
|
50
|
-
hide: [];
|
|
51
|
-
}>();
|
|
52
|
-
|
|
53
|
-
// bl-tooltip only supports placement and target. Do not pass trigger (read-only),
|
|
54
|
-
// content, disabled, or delay as they are not supported and cause errors.
|
|
55
|
-
const tooltipProps = computed(() => {
|
|
56
|
-
const bind: Record<string, unknown> = {};
|
|
57
|
-
if (props.placement !== undefined) bind.placement = props.placement;
|
|
58
|
-
if (props.target !== undefined) bind.target = props.target;
|
|
59
|
-
return bind;
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
onMounted(() => {
|
|
63
|
-
loadBaklavaResources();
|
|
64
|
-
});
|
|
65
|
-
</script>
|
|
66
|
-
|
|
67
|
-
<template>
|
|
68
|
-
<bl-tooltip
|
|
69
|
-
v-if="!props.disabled"
|
|
70
|
-
v-bind="tooltipProps"
|
|
71
|
-
@bl-tooltip-show="emit('show')"
|
|
72
|
-
@bl-tooltip-hide="emit('hide')"
|
|
73
|
-
>
|
|
74
|
-
<div slot="tooltip-trigger">
|
|
75
|
-
<slot />
|
|
76
|
-
</div>
|
|
77
|
-
<slot v-if="$slots['content']" name="content" />
|
|
78
|
-
<span v-else-if="content">{{ content }}</span>
|
|
79
|
-
</bl-tooltip>
|
|
80
|
-
<slot v-else />
|
|
81
|
-
</template>
|
package/src/tooltip/index.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/** Tooltip placement relative to trigger */
|
|
2
|
-
export type TooltipPlacement =
|
|
3
|
-
| "top"
|
|
4
|
-
| "top-start"
|
|
5
|
-
| "top-end"
|
|
6
|
-
| "bottom"
|
|
7
|
-
| "bottom-start"
|
|
8
|
-
| "bottom-end"
|
|
9
|
-
| "left"
|
|
10
|
-
| "left-start"
|
|
11
|
-
| "left-end"
|
|
12
|
-
| "right"
|
|
13
|
-
| "right-start"
|
|
14
|
-
| "right-end";
|
|
15
|
-
|
|
16
|
-
export interface TooltipProps {
|
|
17
|
-
/** Tooltip content text */
|
|
18
|
-
content?: string;
|
|
19
|
-
/** Placement of tooltip relative to trigger (default: 'top') */
|
|
20
|
-
placement?: TooltipPlacement;
|
|
21
|
-
/** Target element (selector or Element) when using external trigger */
|
|
22
|
-
target?: string | Element;
|
|
23
|
-
/** Trigger type: 'hover' | 'click' etc. (passed to bl-tooltip) */
|
|
24
|
-
trigger?: string;
|
|
25
|
-
/** Disabled state */
|
|
26
|
-
disabled?: boolean;
|
|
27
|
-
/** Delay before showing tooltip (ms) */
|
|
28
|
-
delay?: number;
|
|
29
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
const BAKLAVA_VERSION = "3.4.2";
|
|
2
|
-
|
|
3
|
-
export const loadBaklavaResources = () => {
|
|
4
|
-
const loadScript = () => {
|
|
5
|
-
if (!document.querySelector('script[src*="baklava.js"]')) {
|
|
6
|
-
const script = document.createElement("script");
|
|
7
|
-
script.type = "module";
|
|
8
|
-
script.src = `https://cdn.jsdelivr.net/npm/@trendyol/baklava@${BAKLAVA_VERSION}/dist/baklava.js`;
|
|
9
|
-
document.head.appendChild(script);
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
const loadStyles = () => {
|
|
14
|
-
if (!document.querySelector('link[href*="default.css"]')) {
|
|
15
|
-
const link = document.createElement("link");
|
|
16
|
-
link.rel = "stylesheet";
|
|
17
|
-
link.href = `https://cdn.jsdelivr.net/npm/@trendyol/baklava@${BAKLAVA_VERSION}/dist/themes/default.css`;
|
|
18
|
-
document.head.appendChild(link);
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
loadScript();
|
|
23
|
-
loadStyles();
|
|
24
|
-
};
|