@baklavue/ui 1.0.0-preview.2

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.
Files changed (83) hide show
  1. package/.releaserc.json +14 -0
  2. package/CHANGELOG.md +40 -0
  3. package/README.md +15 -0
  4. package/index.ts +1 -0
  5. package/package.json +45 -0
  6. package/src/accordion/Accordion.vue +206 -0
  7. package/src/accordion/accordion.types.ts +109 -0
  8. package/src/accordion/index.ts +3 -0
  9. package/src/alert/Alert.vue +199 -0
  10. package/src/alert/alert.types.ts +58 -0
  11. package/src/alert/index.ts +2 -0
  12. package/src/badge/Badge.vue +20 -0
  13. package/src/badge/badge.types.ts +7 -0
  14. package/src/badge/index.ts +2 -0
  15. package/src/button/Button.vue +45 -0
  16. package/src/button/button.types.ts +30 -0
  17. package/src/button/index.ts +3 -0
  18. package/src/checkbox/Checkbox.vue +148 -0
  19. package/src/checkbox/checkbox.types.ts +108 -0
  20. package/src/checkbox/index.ts +2 -0
  21. package/src/datepicker/Datepicker.vue +172 -0
  22. package/src/datepicker/datepicker.types.ts +39 -0
  23. package/src/datepicker/index.ts +2 -0
  24. package/src/dialog/Dialog.vue +178 -0
  25. package/src/dialog/dialog.types.ts +17 -0
  26. package/src/dialog/index.ts +2 -0
  27. package/src/drawer/Drawer.vue +162 -0
  28. package/src/drawer/drawer.types.ts +17 -0
  29. package/src/drawer/index.ts +2 -0
  30. package/src/dropdown/Dropdown.vue +231 -0
  31. package/src/dropdown/dropdown.types.ts +110 -0
  32. package/src/dropdown/index.ts +2 -0
  33. package/src/icon/Icon.vue +102 -0
  34. package/src/icon/icon.types.ts +25 -0
  35. package/src/icon/index.ts +2 -0
  36. package/src/index.ts +37 -0
  37. package/src/input/Input.vue +148 -0
  38. package/src/input/index.ts +3 -0
  39. package/src/input/input.types.ts +156 -0
  40. package/src/link/Link.vue +133 -0
  41. package/src/link/index.ts +2 -0
  42. package/src/link/link.types.ts +42 -0
  43. package/src/notification/Notification.vue +57 -0
  44. package/src/notification/index.ts +2 -0
  45. package/src/notification/notification.types.ts +25 -0
  46. package/src/pagination/Pagination.vue +137 -0
  47. package/src/pagination/index.ts +2 -0
  48. package/src/pagination/pagination.types.ts +61 -0
  49. package/src/radio/Radio.vue +205 -0
  50. package/src/radio/index.ts +2 -0
  51. package/src/radio/radio.types.ts +95 -0
  52. package/src/select/Select.vue +147 -0
  53. package/src/select/index.ts +2 -0
  54. package/src/select/select.types.ts +53 -0
  55. package/src/spinner/Spinner.vue +49 -0
  56. package/src/spinner/index.ts +2 -0
  57. package/src/spinner/spinner.types.ts +11 -0
  58. package/src/split-button/SplitButton.vue +73 -0
  59. package/src/split-button/index.ts +2 -0
  60. package/src/split-button/split-button.types.ts +19 -0
  61. package/src/stepper/Stepper.vue +100 -0
  62. package/src/stepper/index.ts +2 -0
  63. package/src/stepper/stepper.types.ts +29 -0
  64. package/src/switch/Switch.vue +80 -0
  65. package/src/switch/index.ts +2 -0
  66. package/src/switch/switch.types.ts +13 -0
  67. package/src/tab/Tab.vue +99 -0
  68. package/src/tab/index.ts +2 -0
  69. package/src/tab/tab.types.ts +17 -0
  70. package/src/table/Table.vue +264 -0
  71. package/src/table/index.ts +7 -0
  72. package/src/table/table.types.ts +62 -0
  73. package/src/tag/Tag.vue +83 -0
  74. package/src/tag/index.ts +2 -0
  75. package/src/tag/tag.types.ts +24 -0
  76. package/src/textarea/Textarea.vue +84 -0
  77. package/src/textarea/index.ts +2 -0
  78. package/src/textarea/textarea.types.ts +37 -0
  79. package/src/tooltip/Tooltip.vue +81 -0
  80. package/src/tooltip/index.ts +3 -0
  81. package/src/tooltip/tooltip.types.ts +29 -0
  82. package/src/utils/loadBaklavaResources.ts +24 -0
  83. package/tsconfig.json +28 -0
@@ -0,0 +1,20 @@
1
+ <script setup lang="ts">
2
+ import { onMounted } from "vue";
3
+ import { loadBaklavaResources } from "../utils/loadBaklavaResources";
4
+ import type { BadgeProps } from "./badge.types";
5
+
6
+ const props = withDefaults(defineProps<BadgeProps>(), {
7
+ size: "medium",
8
+ icon: undefined,
9
+ });
10
+
11
+ onMounted(() => {
12
+ loadBaklavaResources();
13
+ });
14
+ </script>
15
+
16
+ <template>
17
+ <bl-badge v-bind="props">
18
+ <slot />
19
+ </bl-badge>
20
+ </template>
@@ -0,0 +1,7 @@
1
+ import type { BaklavaIcon } from "@trendyol/baklava-icons";
2
+ import type { BadgeSize } from "@trendyol/baklava/dist/components/badge/bl-badge";
3
+
4
+ export interface BadgeProps {
5
+ size?: BadgeSize;
6
+ icon?: BaklavaIcon;
7
+ }
@@ -0,0 +1,2 @@
1
+ export { default as BvBadge } from "./Badge.vue";
2
+ export type { BadgeProps } from "./badge.types";
@@ -0,0 +1,45 @@
1
+ <script setup lang="ts">
2
+ import { onMounted } from "vue";
3
+ import { loadBaklavaResources } from "../utils/loadBaklavaResources";
4
+ import type { ButtonProps } from "./button.types";
5
+
6
+ const props = withDefaults(defineProps<ButtonProps>(), {
7
+ variant: "primary",
8
+ kind: "default",
9
+ size: "medium",
10
+ disabled: undefined,
11
+ loading: undefined,
12
+ loadingLabel: "...",
13
+ label: undefined,
14
+ href: undefined,
15
+ icon: undefined,
16
+ target: undefined,
17
+ type: "button",
18
+ autofocus: undefined,
19
+ });
20
+
21
+ const emit = defineEmits<{
22
+ click: [event: CustomEvent<MouseEvent>];
23
+ }>();
24
+
25
+ onMounted(() => {
26
+ loadBaklavaResources();
27
+ });
28
+ </script>
29
+
30
+ <template>
31
+ <bl-button
32
+ v-bind="{
33
+ ...props,
34
+ loading: props.loading === true ? true : undefined,
35
+ }"
36
+ :style="{
37
+ '--bl-color-primary': kind === 'custom' ? customClass?.color : undefined,
38
+ '--bl-color-primary-highlight':
39
+ kind === 'custom' ? customClass?.highlightColor : undefined,
40
+ }"
41
+ @bl-click="emit('click', $event)"
42
+ >
43
+ <slot>{{ label }}</slot>
44
+ </bl-button>
45
+ </template>
@@ -0,0 +1,30 @@
1
+ import type { BaklavaIcon } from "@trendyol/baklava-icons";
2
+ import type {
3
+ ButtonKind as BaseButtonKind,
4
+ ButtonSize,
5
+ ButtonVariant,
6
+ TargetType,
7
+ } from "@trendyol/baklava/dist/components/button/bl-button";
8
+
9
+ type ButtonKind = BaseButtonKind | "custom";
10
+
11
+ interface CustomClass {
12
+ color?: string;
13
+ highlightColor?: string;
14
+ }
15
+
16
+ export interface ButtonProps {
17
+ variant?: ButtonVariant;
18
+ kind?: ButtonKind;
19
+ size?: ButtonSize;
20
+ label?: string;
21
+ loadingLabel?: string;
22
+ loading?: boolean;
23
+ disabled?: boolean;
24
+ href?: string;
25
+ icon?: BaklavaIcon;
26
+ target?: TargetType;
27
+ type?: HTMLButtonElement["type"];
28
+ autofocus?: boolean;
29
+ customClass?: CustomClass;
30
+ }
@@ -0,0 +1,3 @@
1
+ // Component exports must use the "Bv-" prefix
2
+ export { default as BvButton } from "./Button.vue";
3
+ export type { ButtonProps } from "./button.types";
@@ -0,0 +1,148 @@
1
+ <script setup lang="ts">
2
+ /**
3
+ * Checkbox Component
4
+ *
5
+ * A Vue UI kit component for Baklava's `bl-checkbox` and `bl-checkbox-group` web components.
6
+ * Can be used as either a single checkbox or as a group container for multiple checkboxes.
7
+ *
8
+ * @component
9
+ * @example
10
+ * ```vue
11
+ * <!-- Single checkbox -->
12
+ * <template>
13
+ * <BvCheckbox v-model="checked" label="I agree" />
14
+ * </template>
15
+ * ```
16
+ *
17
+ * @example
18
+ * ```vue
19
+ * <!-- Checkbox group -->
20
+ * <template>
21
+ * <BvCheckbox v-model="selected" :items="items">
22
+ * <template #item="{ item }">{{ item.label }}</template>
23
+ * </BvCheckbox>
24
+ * </template>
25
+ * ```
26
+ */
27
+ import { computed, onMounted } from "vue";
28
+ import { loadBaklavaResources } from "../utils/loadBaklavaResources";
29
+ import type { CheckboxProps } from "./checkbox.types";
30
+
31
+ const props = withDefaults(defineProps<CheckboxProps>(), {
32
+ modelValue: undefined,
33
+ disabled: undefined,
34
+ indeterminate: undefined,
35
+ value: undefined,
36
+ name: undefined,
37
+ label: undefined,
38
+ items: undefined,
39
+ });
40
+
41
+ const emit = defineEmits<{
42
+ "update:modelValue": [value: boolean | (string | number)[]];
43
+ change: [event: CustomEvent];
44
+ input: [event: CustomEvent];
45
+ }>();
46
+
47
+ /**
48
+ * Determines if the component should act as a group container.
49
+ * When `items` prop is provided and is an array, it acts as a group.
50
+ */
51
+ const isGroupMode = computed(
52
+ () => props.items !== undefined && Array.isArray(props.items),
53
+ );
54
+
55
+ /**
56
+ * Normalized model value for group mode (always array).
57
+ */
58
+ const groupValue = computed(() => {
59
+ const val = props.modelValue;
60
+ if (Array.isArray(val)) return val;
61
+ return [];
62
+ });
63
+
64
+ /**
65
+ * Check if an item is selected in group mode.
66
+ */
67
+ const isItemChecked = (item: { value: string | number }) => {
68
+ return groupValue.value.includes(item.value);
69
+ };
70
+
71
+ /**
72
+ * Handles the change event from the single checkbox.
73
+ */
74
+ const handleSingleChange = (event: CustomEvent) => {
75
+ const checked = (event.target as HTMLInputElement & { checked?: boolean })
76
+ ?.checked;
77
+ emit("change", event);
78
+ emit("update:modelValue", checked ?? false);
79
+ };
80
+
81
+ /**
82
+ * Handles the change event from the checkbox group.
83
+ * Normalizes value to array (Baklava may emit array or comma-separated string).
84
+ */
85
+ const handleGroupChange = (event: CustomEvent) => {
86
+ emit("change", event);
87
+ const target = event.target as { value?: unknown };
88
+ let newValue: (string | number)[];
89
+ if (Array.isArray(target?.value)) {
90
+ newValue = target.value as (string | number)[];
91
+ } else if (typeof target?.value === "string") {
92
+ newValue = target.value ? target.value.split(",").map((s) => s.trim()) : [];
93
+ } else {
94
+ newValue = [];
95
+ }
96
+ emit("update:modelValue", newValue);
97
+ };
98
+
99
+ onMounted(() => {
100
+ loadBaklavaResources();
101
+ });
102
+ </script>
103
+
104
+ <template>
105
+ <!-- Group mode: render as bl-checkbox-group -->
106
+ <bl-checkbox-group
107
+ v-if="isGroupMode"
108
+ :value="groupValue"
109
+ @bl-checkbox-group-change="handleGroupChange"
110
+ >
111
+ <bl-checkbox
112
+ v-for="(item, index) in props.items"
113
+ :key="String(item.value)"
114
+ v-bind="{
115
+ value: item.value,
116
+ checked: isItemChecked(item),
117
+ disabled: item.disabled === true ? true : undefined,
118
+ indeterminate: item.indeterminate === true ? true : undefined,
119
+ name: item.name,
120
+ }"
121
+ >
122
+ <slot name="item" :item="item" :index="index">
123
+ {{ item.label }}
124
+ </slot>
125
+ </bl-checkbox>
126
+ </bl-checkbox-group>
127
+
128
+ <!-- Single checkbox mode: render as bl-checkbox -->
129
+ <bl-checkbox
130
+ v-else
131
+ v-bind="{
132
+ checked:
133
+ props.modelValue === true
134
+ ? true
135
+ : props.modelValue === false
136
+ ? false
137
+ : undefined,
138
+ disabled: props.disabled === true ? true : undefined,
139
+ indeterminate: props.indeterminate === true ? true : undefined,
140
+ value: props.value,
141
+ name: props.name,
142
+ }"
143
+ @bl-change="handleSingleChange"
144
+ @bl-input="emit('input', $event)"
145
+ >
146
+ <slot>{{ label }}</slot>
147
+ </bl-checkbox>
148
+ </template>
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Properties for a single checkbox item when used in group mode.
3
+ *
4
+ * @interface CheckboxItem
5
+ */
6
+ export interface CheckboxItem {
7
+ /**
8
+ * The value of the checkbox (used for v-model in group mode).
9
+ */
10
+ value: string | number;
11
+
12
+ /**
13
+ * The label text displayed next to the checkbox.
14
+ */
15
+ label?: string;
16
+
17
+ /**
18
+ * Whether the checkbox is checked.
19
+ *
20
+ * @default false
21
+ */
22
+ checked?: boolean;
23
+
24
+ /**
25
+ * Whether the checkbox is disabled.
26
+ *
27
+ * @default false
28
+ */
29
+ disabled?: boolean;
30
+
31
+ /**
32
+ * Whether the checkbox is in indeterminate state.
33
+ *
34
+ * @default false
35
+ */
36
+ indeterminate?: boolean;
37
+
38
+ /**
39
+ * The name attribute for the checkbox.
40
+ */
41
+ name?: string;
42
+
43
+ /**
44
+ * Additional custom data for use in the #item scoped slot.
45
+ */
46
+ [key: string]: unknown;
47
+ }
48
+
49
+ /**
50
+ * Props for the Checkbox component.
51
+ *
52
+ * When `items` prop is provided, the component acts as a checkbox group container.
53
+ * Otherwise, it acts as a single checkbox.
54
+ *
55
+ * @interface CheckboxProps
56
+ */
57
+ export interface CheckboxProps {
58
+ /**
59
+ * Checked state (single mode) or selected values array (group mode).
60
+ * Use v-model for two-way binding.
61
+ * - Single mode: boolean
62
+ * - Group mode: (string | number)[]
63
+ */
64
+ modelValue?: boolean | (string | number)[];
65
+
66
+ /**
67
+ * Whether the checkbox is disabled.
68
+ * Only used when component is in single checkbox mode.
69
+ *
70
+ * @default false
71
+ */
72
+ disabled?: boolean;
73
+
74
+ /**
75
+ * Whether the checkbox is in indeterminate state.
76
+ * Only used when component is in single checkbox mode.
77
+ *
78
+ * @default false
79
+ */
80
+ indeterminate?: boolean;
81
+
82
+ /**
83
+ * The value of the checkbox (for form submission).
84
+ * Only used when component is in single checkbox mode.
85
+ */
86
+ value?: string | number;
87
+
88
+ /**
89
+ * The name attribute for the checkbox.
90
+ * Only used when component is in single checkbox mode.
91
+ */
92
+ name?: string;
93
+
94
+ /**
95
+ * The label text displayed next to the checkbox.
96
+ * Only used when component is in single checkbox mode.
97
+ * Can be overridden by default slot content.
98
+ */
99
+ label?: string;
100
+
101
+ /**
102
+ * Array of checkbox items to render when in group mode.
103
+ * Each item will be rendered as a bl-checkbox element inside bl-checkbox-group.
104
+ * Only used when component is in group mode.
105
+ */
106
+ items?: CheckboxItem[];
107
+
108
+ }
@@ -0,0 +1,2 @@
1
+ export { default as BvCheckbox } from "./Checkbox.vue";
2
+ export type { CheckboxProps, CheckboxItem } from "./checkbox.types";
@@ -0,0 +1,172 @@
1
+ <script setup lang="ts">
2
+ /**
3
+ * Datepicker Component
4
+ *
5
+ * A Vue UI kit component for Baklava's `bl-datepicker` web component with v-model support.
6
+ * Provides a calendar picker input for date selection with min/max constraints,
7
+ * placeholder text, and standard form states.
8
+ *
9
+ * Supports single date, multiple dates, and date range selection modes.
10
+ *
11
+ * @component
12
+ * @example
13
+ * ```vue
14
+ * <!-- Basic usage (single) -->
15
+ * <template>
16
+ * <BvDatepicker v-model="date" label="Select date" />
17
+ * </template>
18
+ * ```
19
+ *
20
+ * @example
21
+ * ```vue
22
+ * <!-- Multiple dates -->
23
+ * <template>
24
+ * <BvDatepicker v-model="dates" type="multiple" label="Select dates" />
25
+ * </template>
26
+ * ```
27
+ *
28
+ * @example
29
+ * ```vue
30
+ * <!-- Date range -->
31
+ * <template>
32
+ * <BvDatepicker v-model="range" type="range" label="Select range" />
33
+ * </template>
34
+ * ```
35
+ *
36
+ * @example
37
+ * ```vue
38
+ * <!-- With min/max constraints -->
39
+ * <template>
40
+ * <BvDatepicker
41
+ * v-model="date"
42
+ * label="Date range"
43
+ * placeholder="Select within range"
44
+ * :min="minDate"
45
+ * :max="maxDate"
46
+ * />
47
+ * </template>
48
+ * ```
49
+ */
50
+ import { computed, nextTick, onMounted, ref, watch } from "vue";
51
+ import { loadBaklavaResources } from "../utils/loadBaklavaResources";
52
+ import type { DatepickerProps, DatepickerType } from "./datepicker.types";
53
+
54
+ const props = withDefaults(defineProps<DatepickerProps>(), {
55
+ modelValue: undefined,
56
+ type: "single",
57
+ label: undefined,
58
+ placeholder: undefined,
59
+ disabled: undefined,
60
+ min: undefined,
61
+ max: undefined,
62
+ required: undefined,
63
+ size: undefined,
64
+ labelFixed: undefined,
65
+ helpText: undefined,
66
+ });
67
+
68
+ const emit = defineEmits<{
69
+ "update:modelValue": [value: string | string[] | [string, string] | null];
70
+ change: [event: CustomEvent<Date[]>];
71
+ }>();
72
+
73
+ /**
74
+ * Converts a Date to ISO date string (YYYY-MM-DD) for v-model consistency.
75
+ */
76
+ function toISODateString(date: Date): string {
77
+ if (Number.isNaN(date.getTime())) return "";
78
+ const year = date.getFullYear();
79
+ const month = String(date.getMonth() + 1).padStart(2, "0");
80
+ const day = String(date.getDate()).padStart(2, "0");
81
+ return `${year}-${month}-${day}`;
82
+ }
83
+
84
+ /**
85
+ * Converts modelValue to Baklava value format (comma-separated string).
86
+ * Baklava expects comma-separated ISO date strings (YYYY-MM-DD).
87
+ */
88
+ const baklavaValue = computed(() => {
89
+ const val = props.modelValue;
90
+ if (val == null || (Array.isArray(val) && val.length === 0)) return "";
91
+ if (Array.isArray(val)) return val.map((d) => String(d)).join(",");
92
+ return String(val);
93
+ });
94
+
95
+ /**
96
+ * Handles the bl-datepicker-change event from Baklava.
97
+ * Converts Date[] to the appropriate format based on type and emits update:modelValue.
98
+ */
99
+ const skipNextValueSync = ref(false);
100
+
101
+ function handleDatepickerChange(event: CustomEvent<Date[]>) {
102
+ const rawDates = event.detail ?? [];
103
+ const dates = rawDates.filter(
104
+ (d) => d instanceof Date && !Number.isNaN(d.getTime()),
105
+ );
106
+ const type: DatepickerType = props.type ?? "single";
107
+
108
+ let value: string | string[] | [string, string] | null;
109
+
110
+ if (dates.length === 0) {
111
+ value = type === "multiple" ? [] : null;
112
+ } else if (type === "single") {
113
+ value = toISODateString(dates[0]);
114
+ } else if (type === "multiple") {
115
+ value = dates.map(toISODateString);
116
+ } else if (type === "range") {
117
+ value = [
118
+ toISODateString(dates[0]),
119
+ toISODateString(dates[1] ?? dates[0]),
120
+ ] as [string, string];
121
+ } else {
122
+ value = null;
123
+ }
124
+
125
+ skipNextValueSync.value = true;
126
+ emit("change", event);
127
+ emit("update:modelValue", value);
128
+ nextTick(() => {
129
+ skipNextValueSync.value = false;
130
+ });
131
+ }
132
+
133
+ const datepickerRef = ref<HTMLElement | null>(null);
134
+
135
+ // Sync value to web component property when modelValue changes externally.
136
+ // Skip sync when change originated from datepicker to avoid duplicate values in multiple/range mode.
137
+ watch(
138
+ [datepickerRef, baklavaValue],
139
+ ([el, val]) => {
140
+ if (skipNextValueSync.value || !el) return;
141
+ (el as HTMLUnknownElement & { value?: string }).value = val ?? "";
142
+ },
143
+ { immediate: true },
144
+ );
145
+
146
+ onMounted(async () => {
147
+ loadBaklavaResources();
148
+ // Wait for custom element to be defined before value can be set
149
+ if (!customElements.get("bl-datepicker")) {
150
+ await customElements.whenDefined("bl-datepicker");
151
+ }
152
+ });
153
+ </script>
154
+
155
+ <template>
156
+ <bl-datepicker
157
+ ref="datepickerRef"
158
+ :type="props.type"
159
+ :label="props.label"
160
+ :placeholder="props.placeholder"
161
+ :disabled="props.disabled === true ? true : undefined"
162
+ :required="props.required === true ? true : undefined"
163
+ :size="props.size"
164
+ :label-fixed="props.labelFixed === true ? true : undefined"
165
+ :help-text="props.helpText"
166
+ :min-date="props.min ? new Date(props.min) : undefined"
167
+ :max-date="props.max ? new Date(props.max) : undefined"
168
+ @bl-datepicker-change="handleDatepickerChange"
169
+ >
170
+ <slot />
171
+ </bl-datepicker>
172
+ </template>
@@ -0,0 +1,39 @@
1
+ import type { InputSize } from "@trendyol/baklava/dist/components/input/bl-input";
2
+
3
+ /**
4
+ * Calendar selection type.
5
+ * - single: One date selection
6
+ * - multiple: Multiple dates selection
7
+ * - range: Date range selection (start and end)
8
+ */
9
+ export type DatepickerType = "single" | "multiple" | "range";
10
+
11
+ /**
12
+ * Props for the BvDatepicker component.
13
+ *
14
+ * @see BvDatepicker
15
+ */
16
+ export interface DatepickerProps {
17
+ /** Selected date(s) (v-model). For single: ISO string. For multiple: string[]. For range: [start, end]. */
18
+ modelValue?: string | string[] | [string, string] | null;
19
+ /** Selection mode: single date, multiple dates, or date range */
20
+ type?: DatepickerType;
21
+ /** Datepicker input label */
22
+ label?: string;
23
+ /** Placeholder text when no date is selected */
24
+ placeholder?: string;
25
+ /** Disabled state */
26
+ disabled?: boolean;
27
+ /** Minimum selectable date, ISO format YYYY-MM-DD */
28
+ min?: string;
29
+ /** Maximum selectable date, ISO format YYYY-MM-DD */
30
+ max?: string;
31
+ /** Required field for form validation */
32
+ required?: boolean;
33
+ /** Input size (small, medium, large) */
34
+ size?: InputSize;
35
+ /** Makes the label fixed positioned */
36
+ labelFixed?: boolean;
37
+ /** Help text displayed below the input */
38
+ helpText?: string;
39
+ }
@@ -0,0 +1,2 @@
1
+ export type { DatepickerProps, DatepickerType } from "./datepicker.types";
2
+ export { default as BvDatepicker } from "./Datepicker.vue";