@baklavue/ui 1.0.0-preview.4 → 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 +28 -4
- package/.releaserc.json +0 -14
- package/CHANGELOG.md +0 -56
- package/index.ts +0 -1
- 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.vue +0 -199
- package/src/alert/alert.types.ts +0 -58
- package/src/alert/index.ts +0 -2
- package/src/badge/Badge.vue +0 -20
- package/src/badge/badge.types.ts +0 -7
- package/src/badge/index.ts +0 -2
- 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.vue +0 -148
- package/src/checkbox/checkbox.types.ts +0 -108
- package/src/checkbox/index.ts +0 -2
- 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.vue +0 -178
- package/src/dialog/dialog.types.ts +0 -17
- package/src/dialog/index.ts +0 -2
- 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.vue +0 -231
- package/src/dropdown/dropdown.types.ts +0 -110
- package/src/dropdown/index.ts +0 -2
- 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.vue +0 -102
- package/src/icon/icon.types.ts +0 -25
- package/src/icon/index.ts +0 -2
- 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 -41
- 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.vue +0 -133
- package/src/link/index.ts +0 -2
- package/src/link/link.types.ts +0 -42
- 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.vue +0 -137
- package/src/pagination/index.ts +0 -2
- package/src/pagination/pagination.types.ts +0 -61
- 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.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.vue +0 -147
- package/src/select/index.ts +0 -2
- package/src/select/select.types.ts +0 -53
- 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.vue +0 -49
- package/src/spinner/index.ts +0 -2
- package/src/spinner/spinner.types.ts +0 -11
- 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.vue +0 -100
- package/src/stepper/index.ts +0 -2
- package/src/stepper/stepper.types.ts +0 -29
- 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.vue +0 -99
- package/src/tab/index.ts +0 -2
- package/src/tab/tab.types.ts +0 -17
- 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.vue +0 -83
- package/src/tag/index.ts +0 -2
- package/src/tag/tag.types.ts +0 -24
- 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.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/tsconfig.json +0 -28
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
/**
|
|
3
|
-
* Dropdown Component
|
|
4
|
-
*
|
|
5
|
-
* A Vue UI kit component for Baklava's `bl-dropdown`, `bl-dropdown-group`, and `bl-dropdown-item`
|
|
6
|
-
* web components. Can be used in two modes: slot mode (custom content via slots) or items
|
|
7
|
-
* mode (declarative menu items with optional grouping).
|
|
8
|
-
*
|
|
9
|
-
* @component
|
|
10
|
-
* @example
|
|
11
|
-
* ```vue
|
|
12
|
-
* <!-- Basic usage with label and items -->
|
|
13
|
-
* <template>
|
|
14
|
-
* <BvDropdown label="Actions" :items="menuItems">
|
|
15
|
-
* <template #item="{ item }">
|
|
16
|
-
* {{ item.caption }}
|
|
17
|
-
* </template>
|
|
18
|
-
* </BvDropdown>
|
|
19
|
-
* </template>
|
|
20
|
-
* ```
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```vue
|
|
24
|
-
* <!-- Items mode with groups -->
|
|
25
|
-
* <template>
|
|
26
|
-
* <BvDropdown label="Menu" :items="groupedItems">
|
|
27
|
-
* <template #item="{ item }">
|
|
28
|
-
* {{ item.caption }}
|
|
29
|
-
* </template>
|
|
30
|
-
* </BvDropdown>
|
|
31
|
-
* </template>
|
|
32
|
-
* ```
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```vue
|
|
36
|
-
* <!-- Programmatic control via ref -->
|
|
37
|
-
* <template>
|
|
38
|
-
* <BvButton @click="dropdownRef?.open()">Open</BvButton>
|
|
39
|
-
* <BvButton @click="dropdownRef?.close()">Close</BvButton>
|
|
40
|
-
* <BvDropdown ref="dropdownRef" label="Menu" :items="items">
|
|
41
|
-
* <template #item="{ item }">{{ item.caption }}</template>
|
|
42
|
-
* </BvDropdown>
|
|
43
|
-
* </template>
|
|
44
|
-
* ```
|
|
45
|
-
*/
|
|
46
|
-
import { computed, onMounted, ref, watch } from "vue";
|
|
47
|
-
import { loadBaklavaResources } from "../utils/loadBaklavaResources";
|
|
48
|
-
import type { DropdownItem, DropdownProps } from "./dropdown.types";
|
|
49
|
-
|
|
50
|
-
const props = withDefaults(defineProps<DropdownProps>(), {
|
|
51
|
-
open: false,
|
|
52
|
-
placement: undefined,
|
|
53
|
-
disabled: false,
|
|
54
|
-
trigger: undefined,
|
|
55
|
-
label: "Menu",
|
|
56
|
-
variant: undefined,
|
|
57
|
-
kind: undefined,
|
|
58
|
-
size: undefined,
|
|
59
|
-
icon: undefined,
|
|
60
|
-
items: undefined,
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
const emit = defineEmits<{
|
|
64
|
-
/** Emitted when visibility changes. Use for two-way binding. */
|
|
65
|
-
"update:open": [open: boolean];
|
|
66
|
-
/** Emitted when the dropdown is opened. */
|
|
67
|
-
open: [];
|
|
68
|
-
/** Emitted when the dropdown is closed. */
|
|
69
|
-
close: [];
|
|
70
|
-
/** Emitted when a dropdown item is clicked (from bl-dropdown-item-click). */
|
|
71
|
-
select: [event: CustomEvent];
|
|
72
|
-
}>();
|
|
73
|
-
|
|
74
|
-
/** Reference to the underlying bl-dropdown element. */
|
|
75
|
-
const dropdownRef = ref<HTMLElement | null>(null);
|
|
76
|
-
|
|
77
|
-
/** Determines if the component is in items mode (using items prop). */
|
|
78
|
-
const isItemsMode = computed(
|
|
79
|
-
() => Array.isArray(props.items) && props.items.length > 0,
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
/** Groups items by groupCaption for rendering bl-dropdown-group. */
|
|
83
|
-
const groupedItems = computed(() => {
|
|
84
|
-
if (!props.items) return [];
|
|
85
|
-
const groups = new Map<
|
|
86
|
-
string | undefined,
|
|
87
|
-
{ item: DropdownItem; index: number }[]
|
|
88
|
-
>();
|
|
89
|
-
props.items.forEach((item, index) => {
|
|
90
|
-
const key = item.groupCaption ?? undefined;
|
|
91
|
-
const list = groups.get(key) ?? [];
|
|
92
|
-
list.push({ item, index });
|
|
93
|
-
groups.set(key, list);
|
|
94
|
-
});
|
|
95
|
-
return Array.from(groups.entries()).map(([groupCaption, entries]) => ({
|
|
96
|
-
groupCaption: groupCaption || undefined,
|
|
97
|
-
entries,
|
|
98
|
-
}));
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
/** Handles bl-dropdown-open event. Syncs state and emits. */
|
|
102
|
-
const handleOpen = () => {
|
|
103
|
-
emit("update:open", true);
|
|
104
|
-
emit("open");
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
/** Handles bl-dropdown-close event. Syncs state and emits. */
|
|
108
|
-
const handleClose = () => {
|
|
109
|
-
emit("update:open", false);
|
|
110
|
-
emit("close");
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
/** Handles bl-dropdown-item-click from items. Bubbles as select event. */
|
|
114
|
-
const handleItemClick = (event: CustomEvent) => {
|
|
115
|
-
emit("select", event);
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
type BlDropdownElement = {
|
|
119
|
-
opened?: boolean;
|
|
120
|
-
open: () => void;
|
|
121
|
-
close: () => void;
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
function getBlDropdown(el: HTMLElement | null): BlDropdownElement | null {
|
|
125
|
-
return el as unknown as BlDropdownElement | null;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/** Syncs props.open to the bl-dropdown element. */
|
|
129
|
-
watch(
|
|
130
|
-
() => props.open,
|
|
131
|
-
(newValue) => {
|
|
132
|
-
const blDropdown = getBlDropdown(dropdownRef.value);
|
|
133
|
-
if (blDropdown) {
|
|
134
|
-
if (newValue && !blDropdown.opened) {
|
|
135
|
-
blDropdown.open();
|
|
136
|
-
} else if (!newValue && blDropdown.opened) {
|
|
137
|
-
blDropdown.close();
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
{ immediate: true },
|
|
142
|
-
);
|
|
143
|
-
|
|
144
|
-
onMounted(() => {
|
|
145
|
-
loadBaklavaResources();
|
|
146
|
-
|
|
147
|
-
const blDropdown = getBlDropdown(dropdownRef.value);
|
|
148
|
-
if (blDropdown && blDropdown.opened !== props.open) {
|
|
149
|
-
if (props.open) {
|
|
150
|
-
blDropdown.open();
|
|
151
|
-
} else {
|
|
152
|
-
blDropdown.close();
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
defineExpose({
|
|
158
|
-
/** Opens the dropdown programmatically. */
|
|
159
|
-
open: () => {
|
|
160
|
-
getBlDropdown(dropdownRef.value)?.open();
|
|
161
|
-
},
|
|
162
|
-
/** Closes the dropdown programmatically. */
|
|
163
|
-
close: () => {
|
|
164
|
-
getBlDropdown(dropdownRef.value)?.close();
|
|
165
|
-
},
|
|
166
|
-
/** Toggles the dropdown open/closed state. */
|
|
167
|
-
toggle: () => {
|
|
168
|
-
const blDropdown = getBlDropdown(dropdownRef.value);
|
|
169
|
-
if (blDropdown) {
|
|
170
|
-
if (blDropdown.opened) {
|
|
171
|
-
blDropdown.close();
|
|
172
|
-
} else {
|
|
173
|
-
blDropdown.open();
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
},
|
|
177
|
-
});
|
|
178
|
-
</script>
|
|
179
|
-
|
|
180
|
-
<template>
|
|
181
|
-
<bl-dropdown
|
|
182
|
-
ref="dropdownRef"
|
|
183
|
-
v-bind="{
|
|
184
|
-
label: props.label,
|
|
185
|
-
variant: props.variant,
|
|
186
|
-
kind: props.kind,
|
|
187
|
-
size: props.size,
|
|
188
|
-
icon: props.icon,
|
|
189
|
-
disabled: props.disabled === true ? true : undefined,
|
|
190
|
-
}"
|
|
191
|
-
@bl-dropdown-open="handleOpen"
|
|
192
|
-
@bl-dropdown-close="handleClose"
|
|
193
|
-
>
|
|
194
|
-
<!-- Items mode: render bl-dropdown-group and bl-dropdown-item -->
|
|
195
|
-
<template v-if="isItemsMode">
|
|
196
|
-
<template v-for="(group, gi) in groupedItems" :key="gi">
|
|
197
|
-
<bl-dropdown-group
|
|
198
|
-
v-if="group.groupCaption"
|
|
199
|
-
:caption="group.groupCaption"
|
|
200
|
-
>
|
|
201
|
-
<bl-dropdown-item
|
|
202
|
-
v-for="(entry, ii) in group.entries"
|
|
203
|
-
:key="`${gi}-${ii}`"
|
|
204
|
-
:icon="entry.item.icon"
|
|
205
|
-
:disabled="entry.item.disabled === true"
|
|
206
|
-
@bl-dropdown-item-click="handleItemClick"
|
|
207
|
-
>
|
|
208
|
-
<slot name="item" :item="entry.item" :index="entry.index">
|
|
209
|
-
{{ entry.item.caption }}
|
|
210
|
-
</slot>
|
|
211
|
-
</bl-dropdown-item>
|
|
212
|
-
</bl-dropdown-group>
|
|
213
|
-
<template v-else>
|
|
214
|
-
<bl-dropdown-item
|
|
215
|
-
v-for="(entry, ii) in group.entries"
|
|
216
|
-
:key="`${gi}-${ii}`"
|
|
217
|
-
:icon="entry.item.icon"
|
|
218
|
-
:disabled="entry.item.disabled === true"
|
|
219
|
-
@bl-dropdown-item-click="handleItemClick"
|
|
220
|
-
>
|
|
221
|
-
<slot name="item" :item="entry.item" :index="entry.index">
|
|
222
|
-
{{ entry.item.caption }}
|
|
223
|
-
</slot>
|
|
224
|
-
</bl-dropdown-item>
|
|
225
|
-
</template>
|
|
226
|
-
</template>
|
|
227
|
-
</template>
|
|
228
|
-
<!-- Slot mode: default slot for custom content -->
|
|
229
|
-
<slot v-else />
|
|
230
|
-
</bl-dropdown>
|
|
231
|
-
</template>
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import type { BaklavaIcon } from "@trendyol/baklava-icons";
|
|
2
|
-
import type {
|
|
3
|
-
ButtonKind,
|
|
4
|
-
ButtonSize,
|
|
5
|
-
ButtonVariant,
|
|
6
|
-
} from "@trendyol/baklava/dist/components/button/bl-button";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Properties for a dropdown item when used in items mode.
|
|
10
|
-
*
|
|
11
|
-
* @interface DropdownItem
|
|
12
|
-
*/
|
|
13
|
-
export interface DropdownItem {
|
|
14
|
-
/**
|
|
15
|
-
* The caption text displayed for the item.
|
|
16
|
-
*/
|
|
17
|
-
caption?: string;
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Icon name for the item. Shows icon with bl-icon component.
|
|
21
|
-
*/
|
|
22
|
-
icon?: BaklavaIcon;
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Whether the item is disabled.
|
|
26
|
-
*
|
|
27
|
-
* @default false
|
|
28
|
-
*/
|
|
29
|
-
disabled?: boolean;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Optional group caption. Items with the same groupCaption are rendered
|
|
33
|
-
* inside a bl-dropdown-group with that caption.
|
|
34
|
-
*/
|
|
35
|
-
groupCaption?: string;
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Additional custom data for use in the #item scoped slot.
|
|
39
|
-
*/
|
|
40
|
-
[key: string]: unknown;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Props for the Dropdown component.
|
|
45
|
-
*
|
|
46
|
-
* When `items` prop is provided, the component acts in items mode using
|
|
47
|
-
* bl-dropdown-group and bl-dropdown-item. Otherwise, it uses slots for
|
|
48
|
-
* trigger and content.
|
|
49
|
-
*
|
|
50
|
-
* @interface DropdownProps
|
|
51
|
-
*/
|
|
52
|
-
export interface DropdownProps {
|
|
53
|
-
/**
|
|
54
|
-
* Whether the dropdown is open.
|
|
55
|
-
*
|
|
56
|
-
* @default false
|
|
57
|
-
*/
|
|
58
|
-
open?: boolean;
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Placement of the dropdown popover relative to the trigger.
|
|
62
|
-
* Maps to bl-popover placement.
|
|
63
|
-
*/
|
|
64
|
-
placement?: string;
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Whether the dropdown trigger is disabled.
|
|
68
|
-
*
|
|
69
|
-
* @default false
|
|
70
|
-
*/
|
|
71
|
-
disabled?: boolean;
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Reserved for custom trigger configuration.
|
|
75
|
-
*/
|
|
76
|
-
trigger?: string;
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Label for the built-in dropdown button.
|
|
80
|
-
* Used when in items mode or when not using trigger slot.
|
|
81
|
-
*/
|
|
82
|
-
label?: string;
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Button variant for the built-in dropdown button.
|
|
86
|
-
*/
|
|
87
|
-
variant?: ButtonVariant;
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Button kind for the built-in dropdown button.
|
|
91
|
-
*/
|
|
92
|
-
kind?: ButtonKind;
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Button size for the built-in dropdown button.
|
|
96
|
-
*/
|
|
97
|
-
size?: ButtonSize;
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Icon name for the built-in dropdown button.
|
|
101
|
-
*/
|
|
102
|
-
icon?: string;
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Array of dropdown items to render when in items mode.
|
|
106
|
-
* Each item will be rendered as a bl-dropdown-item (optionally grouped
|
|
107
|
-
* via bl-dropdown-group). Content for each item is provided via the #item slot.
|
|
108
|
-
*/
|
|
109
|
-
items?: DropdownItem[];
|
|
110
|
-
}
|
package/src/dropdown/index.ts
DELETED