@baklavue/ui 1.0.1 → 1.0.2-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.
package/dist/index.css CHANGED
@@ -428,27 +428,27 @@
428
428
  opacity: 0;
429
429
  }
430
430
 
431
- .table[data-v-63753cd2] {
431
+ .table[data-v-cda7a650] {
432
432
  display: flex;
433
433
  flex-direction: column;
434
434
  gap: 24px;
435
435
  }
436
- .header[data-v-63753cd2] {
436
+ .header[data-v-cda7a650] {
437
437
  display: flex;
438
438
  align-items: center;
439
439
  justify-content: space-between;
440
440
  }
441
- .--title[data-v-63753cd2] {
441
+ .--title[data-v-cda7a650] {
442
442
  font: var(--bl-font-title-1-medium);
443
443
  }
444
- .table-content[data-v-63753cd2] {
444
+ .table-content[data-v-cda7a650] {
445
445
  width: 100%;
446
446
  overflow-x: auto;
447
447
  }
448
- .table-content > bl-table[data-v-63753cd2] {
448
+ .table-content > bl-table[data-v-cda7a650] {
449
449
  min-width: max-content;
450
450
  }
451
- .loading-state[data-v-63753cd2] {
451
+ .loading-state[data-v-cda7a650] {
452
452
  display: flex;
453
453
  flex-direction: column;
454
454
  align-items: center;
@@ -456,11 +456,11 @@
456
456
  padding: 48px;
457
457
  gap: 16px;
458
458
  }
459
- .loading-state span[data-v-63753cd2] {
459
+ .loading-state span[data-v-cda7a650] {
460
460
  font: var(--bl-font-body-2-regular);
461
461
  color: var(--bl-color-primary);
462
462
  }
463
- .empty-state[data-v-63753cd2] {
463
+ .empty-state[data-v-cda7a650] {
464
464
  display: flex;
465
465
  flex-direction: column;
466
466
  align-items: center;
@@ -468,7 +468,7 @@
468
468
  padding: 48px;
469
469
  gap: 12px;
470
470
  }
471
- .pagination-wrapper[data-v-63753cd2] {
471
+ .pagination-wrapper[data-v-cda7a650] {
472
472
  display: flex;
473
473
  justify-content: flex-end;
474
474
  }
package/dist/index.js CHANGED
@@ -2147,11 +2147,7 @@ const _hoisted_8 = { class: "empty-state" };
2147
2147
  const _hoisted_9 = ["sticky"];
2148
2148
  const _hoisted_10 = ["sort-key"];
2149
2149
  const _hoisted_11 = ["selection-key"];
2150
- const _hoisted_12 = {
2151
- key: 1,
2152
- class: "pagination-wrapper"
2153
- };
2154
- const _hoisted_13 = ["current-page", "total-items", "items-per-page", "has-jumper", "has-select", "jumper-label", "select-label", "items-per-page-options"];
2150
+ const _hoisted_12 = ["current-page", "total-items", "items-per-page", "has-jumper", "has-select", "jumper-label", "select-label", "items-per-page-options"];
2155
2151
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
2156
2152
  ...{ inheritAttrs: false },
2157
2153
  __name: "Table",
@@ -2192,8 +2188,27 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
2192
2188
  });
2193
2189
  const getColumnLabel = (col) => col.name ?? col.label ?? col.key;
2194
2190
  const getRowKey = (row, index) => row.id != null ? String(row.id) : String(index);
2191
+ const paginationRef = ref(null);
2192
+ const setPaginationOptions = () => {
2193
+ nextTick(() => {
2194
+ var _a, _b;
2195
+ const options = (_a = props.pagination) == null ? void 0 : _a.itemsPerPageOptions;
2196
+ if (!(options == null ? void 0 : options.length)) return;
2197
+ const el = (_b = paginationRef.value) == null ? void 0 : _b.querySelector(
2198
+ "bl-pagination"
2199
+ );
2200
+ if (el) el.itemsPerPageOptions = options;
2201
+ });
2202
+ };
2195
2203
  onMounted(() => {
2196
2204
  loadBaklavaResources();
2205
+ setPaginationOptions();
2206
+ });
2207
+ watch(() => {
2208
+ var _a;
2209
+ return (_a = props.pagination) == null ? void 0 : _a.itemsPerPageOptions;
2210
+ }, setPaginationOptions, {
2211
+ deep: true
2197
2212
  });
2198
2213
  return (_ctx, _cache) => {
2199
2214
  var _a, _b;
@@ -2264,7 +2279,12 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
2264
2279
  ])
2265
2280
  ], 16))
2266
2281
  ]),
2267
- props.pagination ? (openBlock(), createElementBlock("div", _hoisted_12, [
2282
+ props.pagination ? (openBlock(), createElementBlock("div", {
2283
+ key: 1,
2284
+ ref_key: "paginationRef",
2285
+ ref: paginationRef,
2286
+ class: "pagination-wrapper"
2287
+ }, [
2268
2288
  createElementVNode("bl-pagination", {
2269
2289
  "current-page": props.pagination.currentPage,
2270
2290
  "total-items": props.pagination.totalItems,
@@ -2275,13 +2295,13 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
2275
2295
  "select-label": props.pagination.selectLabel ?? "Items per page",
2276
2296
  "items-per-page-options": props.pagination.itemsPerPageOptions,
2277
2297
  onBlChange: _cache[2] || (_cache[2] = ($event) => emit("change", $event))
2278
- }, null, 40, _hoisted_13)
2279
- ])) : createCommentVNode("", true)
2298
+ }, null, 40, _hoisted_12)
2299
+ ], 512)) : createCommentVNode("", true)
2280
2300
  ]);
2281
2301
  };
2282
2302
  }
2283
2303
  });
2284
- const Table = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-63753cd2"]]);
2304
+ const Table = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-cda7a650"]]);
2285
2305
  const _hoisted_1$1 = ["value"];
2286
2306
  const _sfc_main$1 = /* @__PURE__ */ defineComponent({
2287
2307
  __name: "Textarea",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/loadBaklavaResources.ts","../src/accordion/Accordion.vue","../src/alert/Alert.vue","../src/badge/Badge.vue","../src/button/Button.vue","../src/icon/Icon.vue","../src/link/Link.vue","../src/banner/Banner.vue","../src/checkbox/Checkbox.vue","../src/chip/Chip.vue","../src/datepicker/Datepicker.vue","../src/dialog/Dialog.vue","../src/drawer/Drawer.vue","../src/dropdown/Dropdown.vue","../src/tag/Tag.vue","../src/file-upload/FileUpload.vue","../src/skeleton/Skeleton.vue","../src/image/Image.vue","../src/input/Input.vue","../src/notification/Notification.vue","../src/pagination/Pagination.vue","../src/radio/Radio.vue","../src/scroll-to-top/ScrollToTop.vue","../src/select/Select.vue","../src/spinner/Spinner.vue","../src/split-button/SplitButton.vue","../src/stepper/Stepper.vue","../src/switch/Switch.vue","../src/tab/Tab.vue","../src/table/Table.vue","../src/textarea/Textarea.vue","../src/tooltip/Tooltip.vue"],"sourcesContent":["const BAKLAVA_VERSION = \"3.4.2\";\n\n/** Key Baklava element used to detect if the library is already loaded (e.g. by host app) */\nconst BAKLAVA_DETECTION_ELEMENT = \"bl-table\";\n\nexport const loadBaklavaResources = () => {\n if (customElements.get(BAKLAVA_DETECTION_ELEMENT)) {\n return;\n }\n\n const loadScript = () => {\n if (!document.querySelector('script[src*=\"baklava.js\"]')) {\n const script = document.createElement(\"script\");\n script.type = \"module\";\n script.src = `https://cdn.jsdelivr.net/npm/@trendyol/baklava@${BAKLAVA_VERSION}/dist/baklava.js`;\n document.head.appendChild(script);\n }\n };\n\n const loadStyles = () => {\n if (!document.querySelector('link[href*=\"default.css\"]')) {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = `https://cdn.jsdelivr.net/npm/@trendyol/baklava@${BAKLAVA_VERSION}/dist/themes/default.css`;\n document.head.appendChild(link);\n }\n };\n\n loadScript();\n loadStyles();\n};\n","<script setup lang=\"ts\">\n/**\n * Accordion Component\n *\n * A Vue UI kit component for Baklava's `bl-accordion` and `bl-accordion-group` web components.\n * Can be used as either a single accordion or as a group container for multiple accordions.\n *\n * @component\n * @example\n * ```vue\n * <!-- Single accordion -->\n * <template>\n * <Accordion :open=\"isOpen\" @toggle=\"isOpen = $event\" caption=\"Section Title\">\n * <p>Accordion content goes here</p>\n * </Accordion>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Accordion group - only one open at a time -->\n * <template>\n * <Accordion :multiple=\"false\" :items=\"items\">\n * <template #item=\"{ item }\">\n * <p>{{ item.answer }}</p>\n * </template>\n * </Accordion>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Accordion group - multiple can be open -->\n * <template>\n * <Accordion :multiple=\"true\" :items=\"sections\">\n * <template #item=\"{ item }\">\n * <p>{{ item.description }}</p>\n * </template>\n * </Accordion>\n * </template>\n * ```\n */\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { AccordionProps } from \"./accordion.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<AccordionProps>(), {\n open: false,\n caption: undefined,\n icon: undefined,\n disabled: false,\n animationDuration: 250,\n multiple: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the accordion is toggled (opened or closed).\n * Only used when component is in single accordion mode.\n *\n * @param {boolean} open - The new open state of the accordion.\n */\n toggle: [open: boolean];\n}>();\n\n/**\n * Reference to the underlying web component element.\n */\nconst accordionRef = ref<HTMLElement | null>(null);\n\n/**\n * Determines if the component should act as a group container.\n * When `multiple` prop is provided and `items` is defined, it acts as a group.\n */\nconst isGroupMode = computed(\n () => props.multiple !== undefined && Array.isArray(props.items),\n);\n\n/**\n * Watches for changes to the `open` prop and syncs with the web component.\n * Only applies when in single accordion mode.\n *\n * When the prop changes, it calls the appropriate expand/collapse method\n * on the underlying web component.\n */\nwatch(\n () => props.open,\n (newValue) => {\n if (!isGroupMode.value && accordionRef.value) {\n const blAccordion = accordionRef.value as any;\n if (newValue && !blAccordion.open) {\n blAccordion.expand();\n } else if (!newValue && blAccordion.open) {\n blAccordion.collapse();\n }\n }\n },\n { immediate: true },\n);\n\n/**\n * Handles the toggle event from the underlying web component.\n * Only used when component is in single accordion mode.\n *\n * @param {CustomEvent<boolean>} event - The toggle event from bl-accordion.\n */\nconst handleToggle = (event: CustomEvent<boolean>): void => {\n if (!isGroupMode.value) {\n const isOpen = event.detail;\n emit(\"toggle\", isOpen);\n }\n};\n\n/**\n * Lifecycle hook: Component mounted.\n *\n * Loads Baklava resources and syncs the initial open state with the web component\n * (only when in single accordion mode).\n */\nonMounted(() => {\n loadBaklavaResources();\n\n // Sync initial state (only for single accordion mode)\n if (!isGroupMode.value && accordionRef.value) {\n const blAccordion = accordionRef.value as any;\n if (props.open && !blAccordion.open) {\n blAccordion.expand();\n } else if (!props.open && blAccordion.open) {\n blAccordion.collapse();\n }\n }\n});\n\n/**\n * Exposed methods for programmatic control of the accordion.\n * Only available when component is in single accordion mode.\n */\ndefineExpose({\n /**\n * Expands the accordion programmatically.\n *\n * @public\n */\n expand: (): void => {\n if (!isGroupMode.value && accordionRef.value) {\n (accordionRef.value as any).expand();\n }\n },\n\n /**\n * Collapses the accordion programmatically.\n *\n * @public\n */\n collapse: (): void => {\n if (!isGroupMode.value && accordionRef.value) {\n (accordionRef.value as any).collapse();\n }\n },\n});\n</script>\n\n<template>\n <!-- Group mode: render as bl-accordion-group -->\n <!-- Render bl-accordion for each item in props.items. Content via #item slot. -->\n <bl-accordion-group\n v-if=\"isGroupMode\"\n :multiple=\"props.multiple === true ? true : undefined\"\n >\n <bl-accordion\n v-for=\"(item, index) in props.items\"\n :key=\"index\"\n v-bind=\"{\n open: item.open === true ? true : undefined,\n caption: item.caption,\n icon: item.icon,\n disabled: item.disabled === true ? true : undefined,\n animationDuration: item.animationDuration,\n }\"\n >\n <slot name=\"item\" :item=\"item\" :index=\"index\" />\n </bl-accordion>\n </bl-accordion-group>\n\n <!-- Single accordion mode: render as bl-accordion -->\n <bl-accordion\n v-else\n ref=\"accordionRef\"\n v-bind=\"{\n open: props.open === true ? true : undefined,\n caption: props.caption,\n icon: props.icon,\n disabled: props.disabled === true ? true : undefined,\n animationDuration: props.animationDuration,\n }\"\n @bl-toggle=\"handleToggle\"\n >\n <slot />\n </bl-accordion>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Alert Component\n *\n * A Vue UI kit component for Baklava's `bl-alert` web component.\n * Displays contextual feedback messages with variants (info, success, warning, danger).\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic alert -->\n * <template>\n * <BvAlert variant=\"info\" description=\"This is an informational message\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Closable alert with controlled state -->\n * <template>\n * <BvAlert\n * variant=\"warning\"\n * caption=\"Warning\"\n * closable\n * :closed=\"isClosed\"\n * @close=\"isClosed = true\"\n * >\n * <p>You can close this alert.</p>\n * </BvAlert>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Programmatic control via ref -->\n * <template>\n * <BvAlert ref=\"alertRef\" variant=\"success\" closable>\n * <p>Content</p>\n * </BvAlert>\n * <button @click=\"alertRef?.close()\">Close</button>\n * </template>\n * ```\n */\nimport { nextTick, onMounted, ref, watch } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { AlertProps, BlAlertElement } from \"./alert.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<AlertProps>(), {\n variant: \"info\",\n description: undefined,\n icon: undefined,\n closable: false,\n caption: undefined,\n closed: false,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the close button is clicked (only when closable is true).\n */\n close: [];\n}>();\n\n/**\n * Reference to the underlying bl-alert element.\n */\nconst alertRef = ref<HTMLElement | null>(null);\n\n/**\n * Safely casts an HTMLElement to BlAlertElement.\n *\n * @param el - The element to cast.\n * @returns The element typed as BlAlertElement, or null.\n */\nfunction asBlAlert(el: HTMLElement | null): BlAlertElement | null {\n return el as BlAlertElement | null;\n}\n\n/**\n * Waits for the bl-alert custom element to be defined.\n * Used when Baklava script loads asynchronously.\n */\nasync function waitForBlAlert(): Promise<void> {\n if (!customElements.get(\"bl-alert\")) {\n await customElements.whenDefined(\"bl-alert\");\n }\n}\n\n/**\n * Syncs the `closed` prop state with the underlying bl-alert web component.\n * Calls open() or close() on the element when prop and element state differ.\n *\n * @param el - The bl-alert element to sync.\n */\nfunction syncWithBlAlert(el: HTMLElement): void {\n const blAlert = asBlAlert(el);\n if (!blAlert || typeof blAlert.close !== \"function\" || typeof blAlert.open !== \"function\") {\n return;\n }\n if (props.closed && !blAlert.closed) {\n blAlert.close();\n } else if (!props.closed && blAlert.closed) {\n blAlert.open();\n }\n}\n\n/**\n * Calls open or close on the bl-alert element when available.\n *\n * @param method - The method to call (\"open\" or \"close\").\n */\nfunction callBlAlertMethod(method: \"open\" | \"close\"): void {\n const el = asBlAlert(alertRef.value);\n if (el && typeof el[method] === \"function\") {\n el[method]!();\n }\n}\n\n/**\n * Watches for changes to the closed prop and syncs with the web component.\n */\nwatch(\n () => props.closed,\n () => {\n if (alertRef.value) {\n syncWithBlAlert(alertRef.value);\n }\n },\n);\n\n/**\n * Handles the bl-close event from the underlying web component.\n * Forwards it to the component's emit.\n */\nfunction handleClose(): void {\n emit(\"close\");\n}\n\n/**\n * Lifecycle hook: Component mounted.\n *\n * Loads Baklava resources, waits for bl-alert to be defined,\n * then syncs the initial closed state with the web component.\n */\nonMounted(async () => {\n loadBaklavaResources();\n\n await nextTick();\n await waitForBlAlert();\n\n if (alertRef.value) {\n syncWithBlAlert(alertRef.value);\n }\n});\n\n/**\n * Exposed methods for programmatic control of the alert.\n */\ndefineExpose({\n /**\n * Opens the alert programmatically.\n *\n * @public\n */\n open: async (): Promise<void> => {\n await nextTick();\n callBlAlertMethod(\"open\");\n },\n\n /**\n * Closes the alert programmatically.\n *\n * @public\n */\n close: async (): Promise<void> => {\n await nextTick();\n callBlAlertMethod(\"close\");\n },\n});\n</script>\n\n<template>\n <bl-alert\n ref=\"alertRef\"\n v-bind=\"{\n ...props,\n closable: props.closable === true ? true : undefined,\n closed: props.closed,\n }\"\n @bl-close=\"handleClose\"\n >\n <slot v-if=\"$slots['caption']\" name=\"caption\" />\n <slot v-if=\"$slots['default']\" />\n <slot v-if=\"$slots['action']\" name=\"action\" />\n </bl-alert>\n</template>\n","<script setup lang=\"ts\">\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { BadgeProps } from \"./badge.types\";\n\nconst props = withDefaults(defineProps<BadgeProps>(), {\n size: \"medium\",\n icon: undefined,\n});\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-badge v-bind=\"props\">\n <slot />\n </bl-badge>\n</template>\n","<script setup lang=\"ts\">\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { ButtonProps } from \"./button.types\";\n\nconst props = withDefaults(defineProps<ButtonProps>(), {\n variant: \"primary\",\n kind: \"default\",\n size: \"medium\",\n disabled: undefined,\n loading: undefined,\n loadingLabel: \"...\",\n label: undefined,\n href: undefined,\n icon: undefined,\n target: undefined,\n type: \"button\",\n autofocus: undefined,\n});\n\nconst emit = defineEmits<{\n click: [event: CustomEvent<MouseEvent>];\n}>();\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-button\n v-bind=\"{\n ...props,\n loading: props.loading === true ? true : undefined,\n }\"\n :style=\"{\n '--bl-color-primary': kind === 'custom' ? customClass?.color : undefined,\n '--bl-color-primary-highlight':\n kind === 'custom' ? customClass?.highlightColor : undefined,\n }\"\n @bl-click=\"emit('click', $event)\"\n >\n <slot>{{ label }}</slot>\n </bl-button>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Icon Component\n *\n * A Vue UI kit component for Baklava's `bl-icon` web component.\n * Provides icon display with support for name, size, color, and custom slot content.\n * Size and color are applied via CSS (font-size, color) as per Baklava's API.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvIcon name=\"home\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With size -->\n * <template>\n * <BvIcon name=\"settings\" size=\"24px\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With color -->\n * <template>\n * <BvIcon name=\"info\" color=\"#0066cc\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Custom slot for custom SVG -->\n * <template>\n * <BvIcon>\n * <svg>...</svg>\n * </BvIcon>\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { IconProps } from \"./icon.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<IconProps>(), {\n name: undefined,\n size: undefined,\n color: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the SVG icon has loaded.\n *\n * @param {string} detail - Event detail from bl-load.\n */\n load: [detail: string];\n /**\n * Emitted when the SVG icon failed to load.\n *\n * @param {string} detail - Event detail from bl-error.\n */\n error: [detail: string];\n}>();\n\n/**\n * Computed style object for size and color.\n * Maps to Baklava's font-size and color CSS properties.\n */\nconst iconStyle = computed(() => ({\n ...(props.size && { fontSize: props.size }),\n ...(props.color && { color: props.color }),\n}));\n\n/**\n * Lifecycle hook: Component mounted.\n * Loads Baklava resources (icons, styles).\n */\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-icon\n :name=\"props.name\"\n :style=\"iconStyle\"\n @bl-load=\"emit('load', ($event as CustomEvent<string>).detail)\"\n @bl-error=\"emit('error', ($event as CustomEvent<string>).detail)\"\n >\n <slot />\n </bl-icon>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Link Component\n *\n * A Vue UI kit component for Baklava's `bl-link` web component for navigation links.\n * Supports inline (text within content) and standalone (button-like) variants with\n * full TypeScript support and HTML anchor attributes (href, target, rel, etc.).\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvLink href=\"/about\">About</BvLink>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Inline variant (default) -->\n * <template>\n * <p>Visit our <BvLink href=\"/docs\">documentation</BvLink> for more info.</p>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Standalone variant with size -->\n * <template>\n * <BvLink href=\"/signup\" variant=\"standalone\" size=\"large\">\n * Sign up\n * </BvLink>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With icon slot -->\n * <template>\n * <BvLink href=\"/settings\" variant=\"standalone\">\n * <template #icon><BvIcon name=\"settings\" /></template>\n * Settings\n * </BvLink>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- External link with target -->\n * <template>\n * <BvLink href=\"https://example.com\" target=\"_blank\" rel=\"noopener noreferrer\">\n * External site\n * </BvLink>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Disabled state -->\n * <template>\n * <BvLink href=\"/disabled\" :disabled=\"true\">Disabled link</BvLink>\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { LinkProps } from \"./link.types\";\n\nconst props = withDefaults(defineProps<LinkProps>(), {\n href: undefined,\n target: undefined,\n disabled: undefined,\n variant: undefined,\n size: undefined,\n kind: undefined,\n ariaLabel: undefined,\n rel: undefined,\n hreflang: undefined,\n type: undefined,\n referrerPolicy: undefined,\n download: undefined,\n ping: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emitted when the link is clicked. */\n click: [event: CustomEvent];\n}>();\n\n/** Props to pass to bl-link. When disabled, omit href so navigation is prevented. */\nconst linkBindings = computed(() => {\n const { disabled, href, ...rest } = props;\n return {\n ...rest,\n href: disabled ? undefined : href,\n \"aria-disabled\": disabled ? \"true\" : undefined,\n tabindex: disabled ? -1 : undefined,\n };\n});\n\n/** Prevents navigation and click when disabled. */\nfunction handleClick(event: CustomEvent) {\n if (props.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n emit(\"click\", event);\n}\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-link\n v-bind=\"linkBindings\"\n :class=\"{ 'bv-link--disabled': disabled }\"\n @bl-click=\"handleClick\"\n >\n <slot v-if=\"$slots['icon']\" name=\"icon\" />\n <slot />\n </bl-link>\n</template>\n\n<style scoped>\n.bv-link--disabled {\n pointer-events: none;\n opacity: 0.5;\n cursor: not-allowed;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Banner Component\n *\n * A full-width banner displayed at the top of a page to inform users about important information.\n * Similar to Nuxt UI's UBanner. Supports title, icon, color variants, closable state with optional\n * localStorage persistence, action buttons, and link mode.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvBanner title=\"This is an important message\" />\n * </template>\n * ```\n */\nimport { computed, onMounted, ref } from \"vue\";\nimport BvButton from \"../button/Button.vue\";\nimport BvIcon from \"../icon/Icon.vue\";\nimport BvLink from \"../link/Link.vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { BannerAction, BannerProps } from \"./banner.types\";\n\nconst STORAGE_PREFIX = \"banner-\";\n\nconst props = withDefaults(defineProps<BannerProps>(), {\n title: undefined,\n icon: undefined,\n color: \"primary\",\n close: false,\n closeIcon: \"close\",\n id: undefined,\n to: undefined,\n target: undefined,\n actions: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emitted when the close button is clicked */\n close: [];\n}>();\n\nconst isDismissed = ref(false);\n\nfunction getStorageKey(): string | null {\n if (!props.id || typeof props.id !== \"string\") return null;\n const sanitized = props.id.replace(/[^a-zA-Z0-9_-]/g, \"\");\n return sanitized ? `${STORAGE_PREFIX}${sanitized}` : null;\n}\n\nfunction checkDismissed(): void {\n const key = getStorageKey();\n if (!key || !props.close || typeof window === \"undefined\") return;\n try {\n const stored = localStorage.getItem(key);\n if (stored === \"true\") {\n isDismissed.value = true;\n }\n } catch {\n /* ignore */\n }\n}\n\nfunction handleClose(e?: Event): void {\n e?.preventDefault();\n e?.stopPropagation();\n const key = getStorageKey();\n if (key && typeof window !== \"undefined\") {\n try {\n localStorage.setItem(key, \"true\");\n } catch {\n /* ignore */\n }\n }\n isDismissed.value = true;\n emit(\"close\");\n}\n\nfunction handleActionClick(action: BannerAction): void {\n action.onClick?.();\n}\n\nconst colorStyles = computed(() => {\n const colorMap: Record<string, { bg: string; text: string }> = {\n primary: {\n bg: \"var(--bl-color-primary)\",\n text: \"var(--bl-color-primary-contrast, #fff)\",\n },\n success: {\n bg: \"var(--bl-color-success)\",\n text: \"var(--bl-color-success-contrast, #fff)\",\n },\n danger: {\n bg: \"var(--bl-color-danger)\",\n text: \"var(--bl-color-danger-contrast, #fff)\",\n },\n warning: {\n bg: \"var(--bl-color-warning)\",\n text: \"var(--bl-color-warning-contrast, #fff)\",\n },\n info: {\n bg: \"var(--bl-color-info)\",\n text: \"var(--bl-color-info-contrast, #fff)\",\n },\n neutral: {\n bg: \"var(--bl-color-neutral-darkest)\",\n text: \"var(--bl-color-neutral-full, #fff)\",\n },\n };\n const c = colorMap[props.color] ?? colorMap[\"primary\"];\n return {\n backgroundColor: c.bg,\n color: c.text,\n };\n});\n\nonMounted(() => {\n loadBaklavaResources();\n checkDismissed();\n});\n</script>\n\n<template>\n <div v-if=\"!isDismissed\" class=\"bv-banner\" :style=\"colorStyles\" role=\"banner\">\n <component\n :is=\"to ? BvLink : 'div'\"\n v-bind=\"to ? { href: to, target } : {}\"\n class=\"bv-banner__inner\"\n :class=\"{ 'bv-banner__inner--link': !!to }\"\n >\n <div class=\"bv-banner__content\">\n <slot name=\"leading\">\n <BvIcon v-if=\"icon\" :name=\"icon\" class=\"bv-banner__icon\" />\n </slot>\n <div class=\"bv-banner__title\">\n <slot name=\"title\">\n {{ title }}\n </slot>\n </div>\n <div\n v-if=\"actions?.length || $slots['actions']\"\n class=\"bv-banner__actions\"\n @click.stop\n >\n <slot name=\"actions\">\n <template v-for=\"(action, idx) in actions\" :key=\"idx\">\n <BvButton\n v-if=\"action\"\n :variant=\"action.variant ?? 'tertiary'\"\n :label=\"action.label\"\n :icon=\"action.icon ?? action.trailingIcon\"\n size=\"small\"\n class=\"bv-banner__action-btn\"\n @click=\"handleActionClick(action)\"\n />\n </template>\n </slot>\n </div>\n </div>\n </component>\n <div v-if=\"close\" class=\"bv-banner__close\">\n <slot name=\"close\">\n <button\n type=\"button\"\n class=\"bv-banner__close-btn\"\n :aria-label=\"'Close banner'\"\n @click=\"handleClose\"\n >\n <BvIcon :name=\"closeIcon\" :color=\"colorStyles.color\" />\n </button>\n </slot>\n </div>\n </div>\n</template>\n\n<style scoped>\n.bv-banner {\n position: relative;\n z-index: 50;\n width: 100%;\n min-height: 3rem;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.75rem;\n padding: 0 1rem;\n transition: background-color 0.2s ease;\n}\n\n.bv-banner__inner {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n text-decoration: none;\n color: inherit;\n}\n\n.bv-banner__inner--link:hover {\n opacity: 0.95;\n}\n\n.bv-banner__content {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n min-width: 0;\n flex: 1;\n}\n\n.bv-banner__icon {\n flex-shrink: 0;\n width: 1.25rem;\n height: 1.25rem;\n pointer-events: none;\n}\n\n.bv-banner__title {\n flex: 1;\n min-width: 0;\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.bv-banner__actions {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n flex-shrink: 0;\n}\n\n.bv-banner__action-btn {\n --bl-color-primary: currentColor;\n --bl-color-primary-contrast: currentColor;\n}\n\n.bv-banner__close {\n flex-shrink: 0;\n}\n\n.bv-banner__close-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.25rem;\n margin: 0 -0.25rem;\n background: transparent;\n border: none;\n border-radius: 0.25rem;\n cursor: pointer;\n color: inherit;\n}\n\n.bv-banner__close-btn:hover {\n background: rgba(255, 255, 255, 0.2);\n}\n\n.bv-banner__close-btn:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Checkbox Component\n *\n * A Vue UI kit component for Baklava's `bl-checkbox` and `bl-checkbox-group` web components.\n * Can be used as either a single checkbox or as a group container for multiple checkboxes.\n *\n * @component\n * @example\n * ```vue\n * <!-- Single checkbox -->\n * <template>\n * <BvCheckbox v-model=\"checked\" label=\"I agree\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Checkbox group -->\n * <template>\n * <BvCheckbox v-model=\"selected\" :items=\"items\">\n * <template #item=\"{ item }\">{{ item.label }}</template>\n * </BvCheckbox>\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { CheckboxProps } from \"./checkbox.types\";\n\nconst props = withDefaults(defineProps<CheckboxProps>(), {\n modelValue: undefined,\n disabled: undefined,\n indeterminate: undefined,\n value: undefined,\n name: undefined,\n label: undefined,\n items: undefined,\n});\n\nconst emit = defineEmits<{\n \"update:modelValue\": [value: boolean | (string | number)[]];\n change: [event: CustomEvent];\n input: [event: CustomEvent];\n}>();\n\n/**\n * Determines if the component should act as a group container.\n * When `items` prop is provided and is an array, it acts as a group.\n */\nconst isGroupMode = computed(\n () => props.items !== undefined && Array.isArray(props.items),\n);\n\n/**\n * Normalized model value for group mode (always array).\n */\nconst groupValue = computed(() => {\n const val = props.modelValue;\n if (Array.isArray(val)) return val;\n return [];\n});\n\n/**\n * Check if an item is selected in group mode.\n */\nconst isItemChecked = (item: { value: string | number }) => {\n return groupValue.value.includes(item.value);\n};\n\n/**\n * Handles the change event from the single checkbox.\n */\nconst handleSingleChange = (event: CustomEvent) => {\n const checked = (event.target as HTMLInputElement & { checked?: boolean })\n ?.checked;\n emit(\"change\", event);\n emit(\"update:modelValue\", checked ?? false);\n};\n\n/**\n * Handles the change event from the checkbox group.\n * Normalizes value to array (Baklava may emit array or comma-separated string).\n */\nconst handleGroupChange = (event: CustomEvent) => {\n emit(\"change\", event);\n const target = event.target as { value?: unknown };\n let newValue: (string | number)[];\n if (Array.isArray(target?.value)) {\n newValue = target.value as (string | number)[];\n } else if (typeof target?.value === \"string\") {\n newValue = target.value ? target.value.split(\",\").map((s) => s.trim()) : [];\n } else {\n newValue = [];\n }\n emit(\"update:modelValue\", newValue);\n};\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <!-- Group mode: render as bl-checkbox-group -->\n <bl-checkbox-group\n v-if=\"isGroupMode\"\n :value=\"groupValue\"\n @bl-checkbox-group-change=\"handleGroupChange\"\n >\n <bl-checkbox\n v-for=\"(item, index) in props.items\"\n :key=\"String(item.value)\"\n v-bind=\"{\n value: item.value,\n checked: isItemChecked(item),\n disabled: item.disabled === true ? true : undefined,\n indeterminate: item.indeterminate === true ? true : undefined,\n name: item.name,\n }\"\n >\n <slot name=\"item\" :item=\"item\" :index=\"index\">\n {{ item.label }}\n </slot>\n </bl-checkbox>\n </bl-checkbox-group>\n\n <!-- Single checkbox mode: render as bl-checkbox -->\n <bl-checkbox\n v-else\n v-bind=\"{\n checked:\n props.modelValue === true\n ? true\n : props.modelValue === false\n ? false\n : undefined,\n disabled: props.disabled === true ? true : undefined,\n indeterminate: props.indeterminate === true ? true : undefined,\n value: props.value,\n name: props.name,\n }\"\n @bl-change=\"handleSingleChange\"\n @bl-input=\"emit('input', $event)\"\n >\n <slot>{{ label }}</slot>\n </bl-checkbox>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Chip Component\n *\n * A wrapper that displays a badge/indicator (text or number) positioned on top of another element.\n * Similar to Nuxt UI's UChip. Used for notification counts, status indicators, and standalone badges.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvChip :text=\"5\">\n * <BvButton icon=\"mail\" />\n * </BvChip>\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { ChipProps } from \"./chip.types\";\n\nconst props = withDefaults(defineProps<ChipProps>(), {\n text: undefined,\n color: \"primary\",\n size: \"md\",\n position: \"top-right\",\n inset: false,\n standalone: false,\n show: true,\n});\n\nconst colorStyles = computed(() => {\n const colorMap: Record<string, { backgroundColor: string; color: string }> = {\n primary: {\n backgroundColor: \"var(--bl-color-primary)\",\n color: \"var(--bl-color-primary-contrast, #fff)\",\n },\n success: {\n backgroundColor: \"var(--bl-color-success)\",\n color: \"var(--bl-color-success-contrast, #fff)\",\n },\n danger: {\n backgroundColor: \"var(--bl-color-danger)\",\n color: \"var(--bl-color-danger-contrast, #fff)\",\n },\n warning: {\n backgroundColor: \"var(--bl-color-warning)\",\n color: \"var(--bl-color-warning-contrast, #fff)\",\n },\n info: {\n backgroundColor: \"var(--bl-color-info)\",\n color: \"var(--bl-color-info-contrast, #fff)\",\n },\n neutral: {\n backgroundColor: \"var(--bl-color-neutral-darkest)\",\n color: \"var(--bl-color-neutral-full, #fff)\",\n },\n };\n return colorMap[props.color] ?? colorMap[\"primary\"];\n});\n\nconst sizeClass = computed(() => `bv-chip__badge--${props.size}`);\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <template v-if=\"standalone\">\n <span\n v-if=\"show\"\n class=\"bv-chip bv-chip--standalone\"\n :class=\"sizeClass\"\n :style=\"colorStyles\"\n >\n <slot name=\"content\">\n {{ text }}\n </slot>\n </span>\n </template>\n <div v-else class=\"bv-chip\" :class=\"{ 'bv-chip--has-content': $slots['default'] }\">\n <slot />\n <span\n v-if=\"show\"\n class=\"bv-chip__badge\"\n :class=\"[sizeClass, `bv-chip__badge--${position}`, { 'bv-chip__badge--inset': inset }]\"\n :style=\"colorStyles\"\n >\n <slot name=\"content\">\n {{ text }}\n </slot>\n </span>\n </div>\n</template>\n\n<style scoped>\n.bv-chip {\n position: relative;\n display: inline-flex;\n}\n\n.bv-chip--standalone {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 9999px;\n font-weight: 600;\n white-space: nowrap;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n.bv-chip--has-content .bv-chip__badge {\n position: absolute;\n}\n\n.bv-chip__badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 1.25em;\n border-radius: 9999px;\n font-weight: 600;\n white-space: nowrap;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n/* Position: top-right (default) */\n.bv-chip__badge--top-right {\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n}\n\n.bv-chip__badge--top-right.bv-chip__badge--inset {\n top: 2px;\n right: 2px;\n transform: translate(50%, -50%);\n}\n\n/* Position: bottom-right */\n.bv-chip__badge--bottom-right {\n top: 100%;\n right: 0;\n transform: translate(50%, 50%);\n}\n\n.bv-chip__badge--bottom-right.bv-chip__badge--inset {\n top: calc(100% - 2px);\n right: 2px;\n transform: translate(50%, 50%);\n}\n\n/* Position: top-left */\n.bv-chip__badge--top-left {\n top: 0;\n left: 0;\n transform: translate(-50%, -50%);\n}\n\n.bv-chip__badge--top-left.bv-chip__badge--inset {\n top: 2px;\n left: 2px;\n transform: translate(-50%, -50%);\n}\n\n/* Position: bottom-left */\n.bv-chip__badge--bottom-left {\n top: 100%;\n left: 0;\n transform: translate(-50%, 50%);\n}\n\n.bv-chip__badge--bottom-left.bv-chip__badge--inset {\n top: calc(100% - 2px);\n left: 2px;\n transform: translate(-50%, 50%);\n}\n\n/* Size variants */\n.bv-chip__badge--xs {\n font-size: 0.625rem;\n padding: 0 0.25rem;\n min-width: 1em;\n height: 1em;\n}\n\n.bv-chip__badge--sm {\n font-size: 0.6875rem;\n padding: 0 0.3125rem;\n min-width: 1.125em;\n height: 1.125em;\n}\n\n.bv-chip__badge--md {\n font-size: 0.75rem;\n padding: 0 0.375rem;\n min-width: 1.25em;\n height: 1.25em;\n}\n\n.bv-chip__badge--lg {\n font-size: 0.875rem;\n padding: 0 0.5rem;\n min-width: 1.5em;\n height: 1.5em;\n}\n\n/* Standalone size classes */\n.bv-chip--standalone.bv-chip__badge--xs {\n font-size: 0.625rem;\n padding: 0 0.25rem;\n min-width: 1em;\n height: 1em;\n}\n\n.bv-chip--standalone.bv-chip__badge--sm {\n font-size: 0.6875rem;\n padding: 0 0.3125rem;\n min-width: 1.125em;\n height: 1.125em;\n}\n\n.bv-chip--standalone.bv-chip__badge--md {\n font-size: 0.75rem;\n padding: 0 0.375rem;\n min-width: 1.25em;\n height: 1.25em;\n}\n\n.bv-chip--standalone.bv-chip__badge--lg {\n font-size: 0.875rem;\n padding: 0 0.5rem;\n min-width: 1.5em;\n height: 1.5em;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Datepicker Component\n *\n * A Vue UI kit component for Baklava's `bl-datepicker` web component with v-model support.\n * Provides a calendar picker input for date selection with min/max constraints,\n * placeholder text, and standard form states.\n *\n * Supports single date, multiple dates, and date range selection modes.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage (single) -->\n * <template>\n * <BvDatepicker v-model=\"date\" label=\"Select date\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Multiple dates -->\n * <template>\n * <BvDatepicker v-model=\"dates\" type=\"multiple\" label=\"Select dates\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Date range -->\n * <template>\n * <BvDatepicker v-model=\"range\" type=\"range\" label=\"Select range\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With min/max constraints -->\n * <template>\n * <BvDatepicker\n * v-model=\"date\"\n * label=\"Date range\"\n * placeholder=\"Select within range\"\n * :min=\"minDate\"\n * :max=\"maxDate\"\n * />\n * </template>\n * ```\n */\nimport { computed, nextTick, onMounted, ref, watch } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { DatepickerProps, DatepickerType } from \"./datepicker.types\";\n\nconst props = withDefaults(defineProps<DatepickerProps>(), {\n modelValue: undefined,\n type: \"single\",\n label: undefined,\n placeholder: undefined,\n disabled: undefined,\n min: undefined,\n max: undefined,\n required: undefined,\n size: undefined,\n labelFixed: undefined,\n helpText: undefined,\n});\n\nconst emit = defineEmits<{\n \"update:modelValue\": [value: string | string[] | [string, string] | null];\n change: [event: CustomEvent<Date[]>];\n}>();\n\n/**\n * Converts a Date to ISO date string (YYYY-MM-DD) for v-model consistency.\n */\nfunction toISODateString(date: Date): string {\n if (Number.isNaN(date.getTime())) return \"\";\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\n/**\n * Converts modelValue to Baklava value format (comma-separated string).\n * Baklava expects comma-separated ISO date strings (YYYY-MM-DD).\n */\nconst baklavaValue = computed(() => {\n const val = props.modelValue;\n if (val == null || (Array.isArray(val) && val.length === 0)) return \"\";\n if (Array.isArray(val)) return val.map((d) => String(d)).join(\",\");\n return String(val);\n});\n\n/**\n * Handles the bl-datepicker-change event from Baklava.\n * Converts Date[] to the appropriate format based on type and emits update:modelValue.\n */\nconst skipNextValueSync = ref(false);\n\nfunction handleDatepickerChange(event: CustomEvent<Date[]>) {\n const rawDates = event.detail ?? [];\n const dates = rawDates.filter(\n (d) => d instanceof Date && !Number.isNaN(d.getTime()),\n );\n const type: DatepickerType = props.type ?? \"single\";\n\n let value: string | string[] | [string, string] | null;\n\n if (dates.length === 0) {\n value = type === \"multiple\" ? [] : null;\n } else if (type === \"single\") {\n value = toISODateString(dates[0]);\n } else if (type === \"multiple\") {\n value = dates.map(toISODateString);\n } else if (type === \"range\") {\n value = [\n toISODateString(dates[0]),\n toISODateString(dates[1] ?? dates[0]),\n ] as [string, string];\n } else {\n value = null;\n }\n\n skipNextValueSync.value = true;\n emit(\"change\", event);\n emit(\"update:modelValue\", value);\n nextTick(() => {\n skipNextValueSync.value = false;\n });\n}\n\nconst datepickerRef = ref<HTMLElement | null>(null);\n\n// Sync value to web component property when modelValue changes externally.\n// Skip sync when change originated from datepicker to avoid duplicate values in multiple/range mode.\nwatch(\n [datepickerRef, baklavaValue],\n ([el, val]) => {\n if (skipNextValueSync.value || !el) return;\n (el as HTMLUnknownElement & { value?: string }).value = val ?? \"\";\n },\n { immediate: true },\n);\n\nonMounted(async () => {\n loadBaklavaResources();\n // Wait for custom element to be defined before value can be set\n if (!customElements.get(\"bl-datepicker\")) {\n await customElements.whenDefined(\"bl-datepicker\");\n }\n});\n</script>\n\n<template>\n <bl-datepicker\n ref=\"datepickerRef\"\n :type=\"props.type\"\n :label=\"props.label\"\n :placeholder=\"props.placeholder\"\n :disabled=\"props.disabled === true ? true : undefined\"\n :required=\"props.required === true ? true : undefined\"\n :size=\"props.size\"\n :label-fixed=\"props.labelFixed === true ? true : undefined\"\n :help-text=\"props.helpText\"\n :min-date=\"props.min ? new Date(props.min) : undefined\"\n :max-date=\"props.max ? new Date(props.max) : undefined\"\n @bl-datepicker-change=\"handleDatepickerChange\"\n >\n <slot />\n </bl-datepicker>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Dialog Component\n *\n * A Vue UI kit component for Baklava's `bl-dialog` web component.\n * Provides a modal overlay for confirmations, forms, and important content\n * with support for header and footer slots, controllable visibility, and programmatic open/close.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage with v-model -->\n * <template>\n * <BvButton @click=\"showDialog = true\">Open Dialog</BvButton>\n * <BvDialog v-model:open=\"showDialog\" caption=\"Dialog Title\">\n * <p>Dialog content goes here.</p>\n * </BvDialog>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With header and footer slots -->\n * <template>\n * <BvDialog v-model:open=\"showDialog\" caption=\"Confirm Action\">\n * <p>Are you sure you want to proceed?</p>\n * <template #footer>\n * <BvButton variant=\"tertiary\" @click=\"showDialog = false\">Cancel</BvButton>\n * <BvButton variant=\"primary\" @click=\"showDialog = false\">Confirm</BvButton>\n * </template>\n * </BvDialog>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Closable with backdrop control -->\n * <template>\n * <BvDialog v-model:open=\"showDialog\" caption=\"Closable\" :closable=\"true\" :backdrop=\"true\">\n * <p>This dialog has a close button and backdrop click.</p>\n * </BvDialog>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Programmatic control via ref -->\n * <template>\n * <BvButton @click=\"dialogRef?.open()\">Open</BvButton>\n * <BvButton @click=\"dialogRef?.close()\">Close</BvButton>\n * <BvDialog ref=\"dialogRef\" caption=\"Programmatic\">\n * <p>Opened and closed via ref methods.</p>\n * </BvDialog>\n * </template>\n * ```\n */\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { DialogProps } from \"./dialog.types\";\n\nconst SIZE_TO_WIDTH: Record<string, string> = {\n small: \"320px\",\n medium: \"424px\",\n large: \"560px\",\n};\n\nconst props = withDefaults(defineProps<DialogProps>(), {\n open: false,\n caption: undefined,\n closable: undefined,\n backdrop: undefined,\n size: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emitted when visibility changes. Use for two-way binding. */\n \"update:open\": [open: boolean];\n /** Emitted when the dialog is opened. */\n open: [];\n /** Emitted when the dialog is closed. */\n close: [];\n}>();\n\n/** Reference to the underlying bl-dialog element. */\nconst dialogRef = ref<HTMLElement | null>(null);\n\n/** Computed style for dialog width based on size prop. */\nconst dialogStyle = computed(() => {\n if (!props.size) return undefined;\n const width = SIZE_TO_WIDTH[props.size.toLowerCase()] ?? props.size;\n return { \"--bl-dialog-width\": width };\n});\n\n/** Handles bl-dialog-open event. Syncs state and emits. */\nconst handleOpen = () => {\n emit(\"update:open\", true);\n emit(\"open\");\n};\n\n/** Handles bl-dialog-close event. Syncs state and emits. */\nconst handleClose = () => {\n emit(\"update:open\", false);\n emit(\"close\");\n};\n\n/**\n * Handles bl-dialog-request-close event. Prevents closing when closable or backdrop\n * is explicitly set to false for the given close source.\n */\nconst handleRequestClose = (\n e: CustomEvent<{ source: \"close-button\" | \"keyboard\" | \"backdrop\" }>,\n) => {\n if (props.closable === false && e.detail.source === \"close-button\") {\n e.preventDefault();\n }\n if (props.backdrop === false && e.detail.source === \"backdrop\") {\n e.preventDefault();\n }\n};\n\n/** Syncs props.open to the bl-dialog element's open property. */\nfunction getBlDialog(el: HTMLElement | null): { open: boolean } | null {\n return el as unknown as { open: boolean } | null;\n}\n\nwatch(\n () => props.open,\n (newValue) => {\n const blDialog = getBlDialog(dialogRef.value);\n if (blDialog && blDialog.open !== newValue) {\n blDialog.open = newValue;\n }\n },\n { immediate: true },\n);\n\nonMounted(() => {\n loadBaklavaResources();\n\n const blDialog = getBlDialog(dialogRef.value);\n if (blDialog && blDialog.open !== props.open) {\n blDialog.open = props.open;\n }\n});\n\ndefineExpose({\n /** Opens the dialog programmatically. */\n open: () => {\n const blDialog = getBlDialog(dialogRef.value);\n if (blDialog) blDialog.open = true;\n },\n /** Closes the dialog programmatically. */\n close: () => {\n const blDialog = getBlDialog(dialogRef.value);\n if (blDialog) blDialog.open = false;\n },\n});\n</script>\n\n<template>\n <bl-dialog\n ref=\"dialogRef\"\n :open=\"open\"\n :caption=\"caption\"\n :style=\"dialogStyle\"\n @bl-dialog-open=\"handleOpen\"\n @bl-dialog-close=\"handleClose\"\n @bl-dialog-request-close=\"handleRequestClose\"\n >\n <div>\n <slot v-if=\"$slots['header']\" name=\"header\" />\n <slot />\n </div>\n <div v-if=\"$slots['footer']\" slot=\"secondary-action\">\n <slot name=\"footer\" />\n </div>\n </bl-dialog>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Drawer Component\n *\n * A Vue UI kit component for Baklava's `bl-drawer` web component.\n * Provides a side drawer for supplemental content with support for caption,\n * embedded iframe content, external link, and programmable width.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvButton @click=\"showDrawer = true\">Open Drawer</BvButton>\n * <BvDrawer v-model:open=\"showDrawer\">\n * <p>Drawer content goes here.</p>\n * </BvDrawer>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With caption -->\n * <template>\n * <BvDrawer v-model:open=\"showDrawer\" caption=\"Drawer Title\">\n * <p>Content with title.</p>\n * </BvDrawer>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With embed URL (iframe) -->\n * <template>\n * <BvDrawer v-model:open=\"showDrawer\" embed-url=\"https://example.com\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With width -->\n * <template>\n * <BvDrawer v-model:open=\"showDrawer\" width=\"large\" caption=\"Wide Drawer\">\n * <p>Wider drawer content.</p>\n * </BvDrawer>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Programmatic control via ref -->\n * <template>\n * <BvButton @click=\"drawerRef?.open()\">Open</BvButton>\n * <BvButton @click=\"drawerRef?.close()\">Close</BvButton>\n * <BvDrawer ref=\"drawerRef\" caption=\"Programmatic\">\n * <p>Opened and closed via ref methods.</p>\n * </BvDrawer>\n * </template>\n * ```\n */\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { DrawerProps } from \"./drawer.types\";\n\nconst WIDTH_TO_PX: Record<string, string> = {\n small: \"320px\",\n medium: \"424px\",\n large: \"560px\",\n};\n\nconst props = withDefaults(defineProps<DrawerProps>(), {\n open: false,\n caption: undefined,\n embedUrl: undefined,\n externalLink: undefined,\n width: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emitted when visibility changes. Use for two-way binding. */\n \"update:open\": [open: boolean];\n /** Emitted when the drawer is opened. */\n open: [];\n /** Emitted when the drawer is closed. */\n close: [];\n}>();\n\n/** Reference to the underlying bl-drawer element. */\nconst drawerRef = ref<HTMLElement | null>(null);\n\n/** Computed width for bl-drawer. Maps small/medium/large to px or passes CSS value. */\nconst drawerWidth = computed(() => {\n if (!props.width) return undefined;\n const key = props.width.toLowerCase();\n return WIDTH_TO_PX[key] ?? props.width;\n});\n\n/** Handles bl-drawer-open event. Syncs state and emits. */\nconst handleOpen = () => {\n emit(\"update:open\", true);\n emit(\"open\");\n};\n\n/** Handles bl-drawer-close event. Syncs state and emits. */\nconst handleClose = () => {\n emit(\"update:open\", false);\n emit(\"close\");\n};\n\n/** Syncs props.open to the bl-drawer element's open property. */\nfunction getBlDrawer(el: HTMLElement | null): { open: boolean } | null {\n return el as unknown as { open: boolean } | null;\n}\n\nwatch(\n () => props.open,\n (newValue) => {\n const blDrawer = getBlDrawer(drawerRef.value);\n if (blDrawer && blDrawer.open !== newValue) {\n blDrawer.open = newValue;\n }\n },\n { immediate: true },\n);\n\nonMounted(() => {\n loadBaklavaResources();\n\n const blDrawer = getBlDrawer(drawerRef.value);\n if (blDrawer && blDrawer.open !== props.open) {\n blDrawer.open = props.open;\n }\n});\n\ndefineExpose({\n /** Opens the drawer programmatically. */\n open: () => {\n const blDrawer = getBlDrawer(drawerRef.value);\n if (blDrawer) blDrawer.open = true;\n },\n /** Closes the drawer programmatically. */\n close: () => {\n const blDrawer = getBlDrawer(drawerRef.value);\n if (blDrawer) blDrawer.open = false;\n },\n});\n</script>\n\n<template>\n <bl-drawer\n ref=\"drawerRef\"\n :open=\"open\"\n :caption=\"caption\"\n :embed-url=\"embedUrl\"\n :external-link=\"externalLink\"\n :width=\"drawerWidth\"\n @bl-drawer-open=\"handleOpen\"\n @bl-drawer-close=\"handleClose\"\n >\n <slot />\n </bl-drawer>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Dropdown Component\n *\n * A Vue UI kit component for Baklava's `bl-dropdown`, `bl-dropdown-group`, and `bl-dropdown-item`\n * web components. Can be used in two modes: slot mode (custom content via slots) or items\n * mode (declarative menu items with optional grouping).\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage with label and items -->\n * <template>\n * <BvDropdown label=\"Actions\" :items=\"menuItems\">\n * <template #item=\"{ item }\">\n * {{ item.caption }}\n * </template>\n * </BvDropdown>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Items mode with groups -->\n * <template>\n * <BvDropdown label=\"Menu\" :items=\"groupedItems\">\n * <template #item=\"{ item }\">\n * {{ item.caption }}\n * </template>\n * </BvDropdown>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Programmatic control via ref -->\n * <template>\n * <BvButton @click=\"dropdownRef?.open()\">Open</BvButton>\n * <BvButton @click=\"dropdownRef?.close()\">Close</BvButton>\n * <BvDropdown ref=\"dropdownRef\" label=\"Menu\" :items=\"items\">\n * <template #item=\"{ item }\">{{ item.caption }}</template>\n * </BvDropdown>\n * </template>\n * ```\n */\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { DropdownItem, DropdownProps } from \"./dropdown.types\";\n\nconst props = withDefaults(defineProps<DropdownProps>(), {\n open: false,\n placement: undefined,\n disabled: false,\n trigger: undefined,\n label: \"Menu\",\n variant: undefined,\n kind: undefined,\n size: undefined,\n icon: undefined,\n items: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emitted when visibility changes. Use for two-way binding. */\n \"update:open\": [open: boolean];\n /** Emitted when the dropdown is opened. */\n open: [];\n /** Emitted when the dropdown is closed. */\n close: [];\n /** Emitted when a dropdown item is clicked (from bl-dropdown-item-click). */\n select: [event: CustomEvent];\n}>();\n\n/** Reference to the underlying bl-dropdown element. */\nconst dropdownRef = ref<HTMLElement | null>(null);\n\n/** Determines if the component is in items mode (using items prop). */\nconst isItemsMode = computed(\n () => Array.isArray(props.items) && props.items.length > 0,\n);\n\n/** Groups items by groupCaption for rendering bl-dropdown-group. */\nconst groupedItems = computed(() => {\n if (!props.items) return [];\n const groups = new Map<\n string | undefined,\n { item: DropdownItem; index: number }[]\n >();\n props.items.forEach((item, index) => {\n const key = item.groupCaption ?? undefined;\n const list = groups.get(key) ?? [];\n list.push({ item, index });\n groups.set(key, list);\n });\n return Array.from(groups.entries()).map(([groupCaption, entries]) => ({\n groupCaption: groupCaption || undefined,\n entries,\n }));\n});\n\n/** Handles bl-dropdown-open event. Syncs state and emits. */\nconst handleOpen = () => {\n emit(\"update:open\", true);\n emit(\"open\");\n};\n\n/** Handles bl-dropdown-close event. Syncs state and emits. */\nconst handleClose = () => {\n emit(\"update:open\", false);\n emit(\"close\");\n};\n\n/** Handles bl-dropdown-item-click from items. Bubbles as select event. */\nconst handleItemClick = (event: CustomEvent) => {\n emit(\"select\", event);\n};\n\ntype BlDropdownElement = {\n opened?: boolean;\n open: () => void;\n close: () => void;\n};\n\nfunction getBlDropdown(el: HTMLElement | null): BlDropdownElement | null {\n return el as unknown as BlDropdownElement | null;\n}\n\n/** Syncs props.open to the bl-dropdown element. */\nwatch(\n () => props.open,\n (newValue) => {\n const blDropdown = getBlDropdown(dropdownRef.value);\n if (blDropdown) {\n if (newValue && !blDropdown.opened) {\n blDropdown.open();\n } else if (!newValue && blDropdown.opened) {\n blDropdown.close();\n }\n }\n },\n { immediate: true },\n);\n\nonMounted(() => {\n loadBaklavaResources();\n\n const blDropdown = getBlDropdown(dropdownRef.value);\n if (blDropdown && blDropdown.opened !== props.open) {\n if (props.open) {\n blDropdown.open();\n } else {\n blDropdown.close();\n }\n }\n});\n\ndefineExpose({\n /** Opens the dropdown programmatically. */\n open: () => {\n getBlDropdown(dropdownRef.value)?.open();\n },\n /** Closes the dropdown programmatically. */\n close: () => {\n getBlDropdown(dropdownRef.value)?.close();\n },\n /** Toggles the dropdown open/closed state. */\n toggle: () => {\n const blDropdown = getBlDropdown(dropdownRef.value);\n if (blDropdown) {\n if (blDropdown.opened) {\n blDropdown.close();\n } else {\n blDropdown.open();\n }\n }\n },\n});\n</script>\n\n<template>\n <bl-dropdown\n ref=\"dropdownRef\"\n v-bind=\"{\n label: props.label,\n variant: props.variant,\n kind: props.kind,\n size: props.size,\n icon: props.icon,\n disabled: props.disabled === true ? true : undefined,\n }\"\n @bl-dropdown-open=\"handleOpen\"\n @bl-dropdown-close=\"handleClose\"\n >\n <!-- Items mode: render bl-dropdown-group and bl-dropdown-item -->\n <template v-if=\"isItemsMode\">\n <template v-for=\"(group, gi) in groupedItems\" :key=\"gi\">\n <bl-dropdown-group\n v-if=\"group.groupCaption\"\n :caption=\"group.groupCaption\"\n >\n <bl-dropdown-item\n v-for=\"(entry, ii) in group.entries\"\n :key=\"`${gi}-${ii}`\"\n :icon=\"entry.item.icon\"\n :disabled=\"entry.item.disabled === true\"\n @bl-dropdown-item-click=\"handleItemClick\"\n >\n <slot name=\"item\" :item=\"entry.item\" :index=\"entry.index\">\n {{ entry.item.caption }}\n </slot>\n </bl-dropdown-item>\n </bl-dropdown-group>\n <template v-else>\n <bl-dropdown-item\n v-for=\"(entry, ii) in group.entries\"\n :key=\"`${gi}-${ii}`\"\n :icon=\"entry.item.icon\"\n :disabled=\"entry.item.disabled === true\"\n @bl-dropdown-item-click=\"handleItemClick\"\n >\n <slot name=\"item\" :item=\"entry.item\" :index=\"entry.index\">\n {{ entry.item.caption }}\n </slot>\n </bl-dropdown-item>\n </template>\n </template>\n </template>\n <!-- Slot mode: default slot for custom content -->\n <slot v-else />\n </bl-dropdown>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Tag Component\n *\n * A Vue UI kit component for Baklava's `bl-tag` web component for displaying tags or labels.\n * Supports selectable and removable (closable) variants, sizes, and icons.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvTag>Label</BvTag>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Closable tag -->\n * <template>\n * <BvTag closable @close=\"removeTag\">Removable</BvTag>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With icon -->\n * <template>\n * <BvTag icon=\"info\">With icon</BvTag>\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { TagProps } from \"./tag.types\";\n\nconst props = withDefaults(defineProps<TagProps>(), {\n variant: undefined,\n size: undefined,\n closable: undefined,\n icon: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the close button is clicked (removable/closable variant only).\n */\n close: [];\n /**\n * Emitted when a selectable tag is clicked. Payload contains the new selected state.\n */\n \"update:selected\": [selected: boolean];\n}>();\n\n/**\n * Handles bl-tag-click. For removable variant, emit 'close'. For selectable, emit 'update:selected'.\n */\nconst handleTagClick = (event: CustomEvent<{ value: string | null; selected: boolean }>) => {\n if (props.closable) {\n emit(\"close\");\n } else if (props.variant === \"selectable\" && event.detail) {\n emit(\"update:selected\", event.detail.selected);\n }\n};\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-tag\n v-bind=\"{\n ...props,\n variant: props.closable ? 'removable' : props.variant,\n closable: undefined,\n }\"\n @bl-tag-click=\"handleTagClick\"\n >\n <slot v-if=\"$slots['icon']\" name=\"icon\" />\n <slot />\n </bl-tag>\n</template>\n","<script setup lang=\"ts\">\n/**\n * FileUpload Component\n *\n * A custom file upload component with drag-and-drop zone, click-to-browse,\n * file list with remove, validation (size/type), and optional preview.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvFileUpload v-model=\"file\" label=\"Upload document\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Multiple with validation -->\n * <template>\n * <BvFileUpload\n * v-model=\"files\"\n * multiple\n * accept=\"image/*\"\n * :max-size=\"1024 * 1024\"\n * @invalid=\"handleInvalid\"\n * />\n * </template>\n * ```\n */\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport BvIcon from \"../icon/Icon.vue\";\nimport BvTag from \"../tag/Tag.vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type {\n FileUploadInvalidEntry,\n FileUploadProps,\n} from \"./file-upload.types\";\n\nconst props = withDefaults(defineProps<FileUploadProps>(), {\n modelValue: undefined,\n multiple: false,\n accept: undefined,\n maxSize: undefined,\n minSize: undefined,\n maxFiles: undefined,\n disabled: false,\n label: undefined,\n helpText: undefined,\n invalidText: undefined,\n showPreview: false,\n size: \"medium\",\n});\n\nconst emit = defineEmits<{\n \"update:modelValue\": [value: File | File[] | null];\n invalid: [entries: FileUploadInvalidEntry[]];\n change: [files: File[]];\n}>();\n\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst isDragging = ref(false);\nconst previewUrls = ref<Map<File, string>>(new Map());\n\n/** Normalize modelValue to File[] */\nconst filesList = computed<File[]>(() => {\n const v = props.modelValue;\n if (!v) return [];\n return Array.isArray(v) ? [...v] : [v];\n});\n\n/** Check if file passes accept filter */\nfunction matchesAccept(file: File): boolean {\n if (!props.accept) return true;\n const rules = props.accept.split(\",\").map((r) => r.trim());\n const ext = file.name.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n for (const rule of rules) {\n if (rule.startsWith(\".\")) {\n if (ext === rule.slice(1).toLowerCase()) return true;\n } else {\n const mime = file.type;\n if (rule.endsWith(\"/*\")) {\n const base = rule.slice(0, -1);\n if (mime.startsWith(base)) return true;\n } else if (mime === rule) {\n return true;\n }\n }\n }\n return false;\n}\n\n/** Validate files and return invalid entries */\nfunction validateFiles(\n incoming: File[],\n existingCount: number,\n): FileUploadInvalidEntry[] {\n const invalid: FileUploadInvalidEntry[] = [];\n const maxFiles = props.maxFiles ?? Infinity;\n let validAdded = 0;\n\n for (const file of incoming) {\n if (!matchesAccept(file)) {\n invalid.push({ file, reason: \"type\" });\n continue;\n }\n if (props.maxSize !== undefined && file.size > props.maxSize) {\n invalid.push({ file, reason: \"size\" });\n continue;\n }\n if (props.minSize !== undefined && file.size < props.minSize) {\n invalid.push({ file, reason: \"size\" });\n continue;\n }\n if (props.multiple && existingCount + validAdded >= maxFiles) {\n invalid.push({ file, reason: \"count\" });\n continue;\n }\n validAdded++;\n }\n\n return invalid;\n}\n\n/** Process and emit validated files */\nfunction processFiles(newFiles: File[]) {\n const valid: File[] = [];\n const invalid = validateFiles(newFiles, filesList.value.length);\n\n for (const f of newFiles) {\n const entry = invalid.find((e) => e.file === f);\n if (!entry) valid.push(f);\n }\n\n if (invalid.length > 0) {\n emit(\"invalid\", invalid);\n }\n\n if (valid.length > 0) {\n const combined = props.multiple\n ? [...filesList.value, ...valid]\n : [valid[0]];\n const out = props.multiple ? combined : combined[0];\n emit(\"update:modelValue\", out);\n emit(\"change\", combined);\n }\n}\n\nfunction handleInputChange(e: Event) {\n const input = e.target as HTMLInputElement;\n const files = input.files ? Array.from(input.files) : [];\n processFiles(files);\n input.value = \"\";\n}\n\nfunction handleDrop(e: DragEvent) {\n e.preventDefault();\n isDragging.value = false;\n if (props.disabled) return;\n const files = e.dataTransfer?.files ? Array.from(e.dataTransfer.files) : [];\n processFiles(files);\n}\n\nfunction handleDragOver(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n if (props.disabled) return;\n isDragging.value = true;\n}\n\nfunction handleDragLeave() {\n isDragging.value = false;\n}\n\nfunction openFilePicker() {\n if (props.disabled) return;\n inputRef.value?.click();\n}\n\nfunction removeFile(index: number) {\n const list = [...filesList.value];\n const removed = list[index];\n list.splice(index, 1);\n if (props.showPreview && removed && removed.type.startsWith(\"image/\")) {\n const url = previewUrls.value.get(removed);\n if (url) URL.revokeObjectURL(url);\n previewUrls.value.delete(removed);\n }\n const out = props.multiple ? list : (list[0] ?? null);\n emit(\"update:modelValue\", out);\n emit(\"change\", list);\n}\n\nfunction getPreviewUrl(file: File): string {\n if (!file.type.startsWith(\"image/\")) return \"\";\n let url = previewUrls.value.get(file);\n if (!url) {\n url = URL.createObjectURL(file);\n previewUrls.value.set(file, url);\n }\n return url;\n}\n\nwatch(\n filesList,\n (files) => {\n const toRevoke = new Set(previewUrls.value.keys());\n for (const f of files) {\n toRevoke.delete(f);\n }\n for (const f of toRevoke) {\n const url = previewUrls.value.get(f);\n if (url) URL.revokeObjectURL(url);\n previewUrls.value.delete(f);\n }\n },\n { deep: true },\n);\n\nonMounted(() => {\n loadBaklavaResources();\n});\n\nonBeforeUnmount(() => {\n for (const url of previewUrls.value.values()) {\n URL.revokeObjectURL(url);\n }\n previewUrls.value.clear();\n});\n\nconst zoneSizeClass = computed(() => `file-upload-zone--${props.size}`);\nconst hasError = computed(() => !!props.invalidText);\n</script>\n\n<template>\n <div class=\"file-upload\">\n <label v-if=\"label\" class=\"file-upload-label\">{{ label }}</label>\n\n <div\n class=\"file-upload-zone\"\n :class=\"[\n zoneSizeClass,\n {\n 'file-upload-zone--dragging': isDragging,\n 'file-upload-zone--disabled': disabled,\n 'file-upload-zone--invalid': hasError,\n },\n ]\"\n @click=\"(e) => e.target !== inputRef && openFilePicker()\"\n @drop=\"handleDrop\"\n @dragover=\"handleDragOver\"\n @dragleave=\"handleDragLeave\"\n >\n <input\n ref=\"inputRef\"\n type=\"file\"\n class=\"file-upload-input\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n @change=\"handleInputChange\"\n />\n <div class=\"file-upload-content\">\n <BvIcon name=\"upload\" size=\"24px\" class=\"file-upload-icon\" />\n <span class=\"file-upload-text\">\n <slot name=\"hint\"> </slot>\n </span>\n </div>\n </div>\n\n <p v-if=\"helpText && !hasError\" class=\"file-upload-help\">{{ helpText }}</p>\n <p v-if=\"invalidText\" class=\"file-upload-invalid\">{{ invalidText }}</p>\n\n <div v-if=\"filesList.length > 0\" class=\"file-upload-list\">\n <div\n v-for=\"(file, index) in filesList\"\n :key=\"`${file.name}-${file.size}-${index}`\"\n class=\"file-upload-item\"\n >\n <div\n v-if=\"showPreview && file.type.startsWith('image/')\"\n class=\"file-upload-preview\"\n >\n <img\n :src=\"getPreviewUrl(file)\"\n :alt=\"file.name\"\n class=\"file-upload-thumb\"\n />\n </div>\n <BvTag\n closable\n size=\"small\"\n class=\"file-upload-tag\"\n @close=\"removeFile(index)\"\n >\n {{ file.name }} ({{ (file.size / 1024).toFixed(1) }} KB)\n </BvTag>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.file-upload {\n display: flex;\n flex-direction: column;\n gap: var(--bl-spacing-2, 0.5rem);\n}\n\n.file-upload-label {\n font: var(--bl-font-body-2-medium, 0.875rem 500);\n color: var(--bl-color-neutral-darker, #374151);\n}\n\n.file-upload-zone {\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px dashed var(--bl-color-neutral-light, #e5e7eb);\n border-radius: var(--bl-radius-m, 8px);\n background: var(--bl-color-neutral-background, #f9fafb);\n cursor: pointer;\n transition:\n border-color 0.2s,\n background 0.2s;\n}\n\n.file-upload-zone:hover:not(.file-upload-zone--disabled) {\n border-color: var(--bl-color-primary, #ff6000);\n background: var(--bl-color-primary-background, #fff5f0);\n}\n\n.file-upload-zone--dragging {\n border-color: var(--bl-color-primary, #ff6000);\n background: var(--bl-color-primary-background, #fff5f0);\n}\n\n.file-upload-zone--disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.file-upload-zone--invalid {\n border-color: var(--bl-color-danger, #dc2626);\n}\n\n.file-upload-zone--small {\n min-height: 80px;\n padding: var(--bl-spacing-3, 0.75rem);\n}\n\n.file-upload-zone--medium {\n min-height: 120px;\n padding: var(--bl-spacing-4, 1rem);\n}\n\n.file-upload-zone--large {\n min-height: 160px;\n padding: var(--bl-spacing-5, 1.25rem);\n}\n\n.file-upload-input {\n position: absolute;\n width: 0;\n height: 0;\n opacity: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n.file-upload-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--bl-spacing-2, 0.5rem);\n}\n\n.file-upload-icon {\n color: var(--bl-color-neutral-subtle, #9ca3af);\n}\n\n.file-upload-text {\n font: var(--bl-font-body-2-regular, 0.875rem 400);\n color: var(--bl-color-neutral-subtle, #6b7280);\n}\n\n.file-upload-browse {\n color: var(--bl-color-primary, #ff6000);\n text-decoration: underline;\n}\n\n.file-upload-help,\n.file-upload-invalid {\n font: var(--bl-font-body-3-regular, 0.75rem 400);\n margin: 0;\n}\n\n.file-upload-help {\n color: var(--bl-color-neutral-subtle, #6b7280);\n}\n\n.file-upload-invalid {\n color: var(--bl-color-danger, #dc2626);\n}\n\n.file-upload-list {\n display: flex;\n flex-wrap: wrap;\n gap: var(--bl-spacing-2, 0.5rem);\n}\n\n.file-upload-item {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--bl-spacing-1, 0.25rem);\n}\n\n.file-upload-preview {\n width: 48px;\n height: 48px;\n border-radius: var(--bl-radius-s, 4px);\n overflow: hidden;\n background: var(--bl-color-neutral-light, #e5e7eb);\n}\n\n.file-upload-thumb {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.file-upload-tag {\n max-width: 240px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Skeleton Component\n *\n * Animated placeholder for content loading states.\n * Displays a shimmer effect with configurable variants.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvSkeleton />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <template>\n * <BvSkeleton variant=\"text\" :count=\"3\" />\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { SkeletonProps } from \"./skeleton.types\";\n\nconst props = withDefaults(defineProps<SkeletonProps>(), {\n variant: \"rectangle\",\n width: undefined,\n height: undefined,\n count: 1,\n});\n\nconst effectiveWidth = computed(() => {\n if (props.width) return props.width;\n if (props.variant === \"circle\") return \"40px\";\n return \"100%\";\n});\n\nconst effectiveHeight = computed(() => {\n if (props.height) return props.height;\n if (props.variant === \"circle\") return \"40px\";\n return \"1rem\";\n});\n\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <div\n class=\"skeleton-wrapper\"\n :class=\"`skeleton-wrapper--${props.variant}`\"\n role=\"status\"\n aria-label=\"Loading\"\n >\n <div\n v-for=\"n in count\"\n :key=\"n\"\n class=\"skeleton\"\n :class=\"['skeleton--' + props.variant]\"\n :style=\"{\n width: effectiveWidth,\n height: effectiveHeight,\n }\"\n />\n </div>\n</template>\n\n<style scoped>\n.skeleton-wrapper {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.skeleton {\n background: var(--bl-color-neutral-light, #e5e7eb);\n border-radius: var(--bl-border-radius-s, 0.25rem);\n position: relative;\n overflow: hidden;\n}\n\n.skeleton::after {\n content: \"\";\n position: absolute;\n inset: 0;\n background: linear-gradient(\n 90deg,\n transparent 0%,\n rgba(255, 255, 255, 0.4) 50%,\n transparent 100%\n );\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\n}\n\n.skeleton--circle {\n border-radius: var(--bl-border-radius-circle, 50%);\n}\n\n.skeleton--text {\n height: 1rem;\n}\n\n@keyframes skeleton-shimmer {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(100%);\n }\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Image Component\n *\n * Performance-focused image wrapper with lazy loading,\n * skeleton placeholder, and error handling.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvImage src=\"/photo.jpg\" alt=\"Photo\" width=\"200px\" height=\"120px\" />\n * </template>\n * ```\n */\nimport { ref, computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport BvSkeleton from \"../skeleton/Skeleton.vue\";\nimport type { ImageProps } from \"./image.types\";\n\nconst props = withDefaults(defineProps<ImageProps>(), {\n loading: \"lazy\",\n placeholder: \"skeleton\",\n objectFit: \"cover\",\n});\n\nconst emit = defineEmits<{\n load: [event: Event];\n error: [event: Event];\n}>();\n\nconst isLoading = ref(true);\nconst hasError = ref(false);\n\nconst showPlaceholder = computed(\n () => isLoading.value && props.placeholder === \"skeleton\" && !hasError.value,\n);\n\nconst showImage = computed(() => !hasError.value);\n\nconst wrapperStyle = computed(() => ({\n width: props.width ?? \"100%\",\n height: props.height ?? \"auto\",\n aspectRatio: !props.height && props.width ? \"16 / 9\" : undefined,\n}));\n\nfunction onLoad(event: Event) {\n isLoading.value = false;\n emit(\"load\", event);\n}\n\nfunction onError(event: Event) {\n isLoading.value = false;\n hasError.value = true;\n emit(\"error\", event);\n}\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <div class=\"image-wrapper\" :style=\"wrapperStyle\">\n <!-- Placeholder (skeleton or custom slot) -->\n <div v-if=\"showPlaceholder\" class=\"image-placeholder\">\n <slot name=\"placeholder\">\n <BvSkeleton\n class=\"image-skeleton\"\n width=\"100%\"\n height=\"100%\"\n variant=\"rectangle\"\n />\n </slot>\n </div>\n\n <!-- Loaded image -->\n <img\n v-show=\"showImage\"\n :src=\"src\"\n :alt=\"alt\"\n :loading=\"loading\"\n :srcset=\"srcset\"\n :sizes=\"sizes\"\n class=\"image-img\"\n :style=\"{ objectFit }\"\n @load=\"onLoad\"\n @error=\"onError\"\n />\n\n <!-- Error fallback -->\n <div v-if=\"hasError\" class=\"image-fallback\">\n <slot name=\"fallback\">\n <div class=\"image-fallback-default\" role=\"img\" :aria-label=\"alt\">\n Failed to load image\n </div>\n </slot>\n </div>\n </div>\n</template>\n\n<style scoped>\n.image-wrapper {\n position: relative;\n overflow: hidden;\n display: block;\n}\n\n.image-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.image-skeleton {\n width: 100% !important;\n height: 100% !important;\n}\n\n.image-img {\n display: block;\n width: 100%;\n height: 100%;\n vertical-align: middle;\n}\n\n.image-fallback {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.image-fallback-default {\n background: var(--bl-color-neutral-light, #e5e7eb);\n color: var(--bl-color-neutral-darker, #6b7280);\n font-size: 0.875rem;\n padding: 1rem;\n text-align: center;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Input Component\n *\n * A Vue UI kit component for Baklava's `bl-input` web component with full v-model support\n * and TypeScript types. Supports text, email, password, number, date, time, and\n * other input types with validation, help text, loading state, and icons.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvInput v-model=\"value\" label=\"Email\" placeholder=\"Enter your email\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With validation -->\n * <template>\n * <BvInput\n * v-model=\"email\"\n * type=\"email\"\n * label=\"Email\"\n * required\n * :invalid-text=\"emailError\"\n * @invalid=\"handleInvalid\"\n * />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With icon -->\n * <template>\n * <BvInput v-model=\"search\" label=\"Search\" icon=\"search\" />\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { InputProps } from \"./input.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<InputProps>(), {\n modelValue: undefined,\n name: undefined,\n type: \"text\",\n label: undefined,\n placeholder: undefined,\n required: undefined,\n minlength: undefined,\n maxlength: undefined,\n min: undefined,\n max: undefined,\n pattern: undefined,\n step: undefined,\n autocomplete: undefined,\n inputmode: undefined,\n autofocus: undefined,\n icon: undefined,\n size: \"medium\",\n disabled: undefined,\n readonly: undefined,\n invalidText: undefined,\n labelFixed: true,\n helpText: undefined,\n loading: undefined,\n suffixText: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the input value changes. Use with v-model.\n *\n * @param {string | number | null} value - The new input value.\n */\n \"update:modelValue\": [value: string | number | null];\n /**\n * Emitted when validation fails.\n *\n * @param {ValidityState} state - The native ValidityState object.\n */\n invalid: [state: ValidityState];\n /**\n * Emitted when the input receives focus.\n *\n * @param {FocusEvent} event - The native focus event.\n */\n focus: [event: FocusEvent];\n /**\n * Emitted when the input loses focus.\n *\n * @param {FocusEvent} event - The native focus event.\n */\n blur: [event: FocusEvent];\n}>();\n\n/**\n * Triggers the native date/time picker for inputs with type=\"date\", \"time\",\n * \"datetime-local\", etc. Called on click to ensure the picker opens when\n * the user clicks the input.\n *\n * @param {Event} event - The click event.\n */\nconst showPicker = ({ currentTarget }: Event) =>\n (currentTarget as HTMLInputElement)?.showPicker();\n\n/**\n * Lifecycle hook: Component mounted.\n *\n * Loads Baklava resources when the component is mounted.\n */\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-input\n v-bind=\"{\n ...props,\n 'label-fixed': props.labelFixed === true ? true : undefined,\n 'help-text': props.helpText ? props.helpText : undefined,\n 'invalid-text': props.invalidText ? props.invalidText : undefined,\n loading: props.loading ? props.loading : undefined,\n placeholder: props.placeholder ? props.placeholder : props.label,\n }\"\n :value=\"props.modelValue\"\n @bl-input=\"\n emit('update:modelValue', ($event.target as HTMLInputElement)?.value)\n \"\n @bl-invalid=\"emit('invalid', $event)\"\n @focus=\"emit('focus', $event)\"\n @blur=\"emit('blur', $event)\"\n @click=\"showPicker\"\n >\n <span v-if=\"props.suffixText\" slot=\"icon\">\n {{ props.suffixText }}\n </span>\n </bl-input>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Notification Component\n *\n * A Vue UI kit component for Baklava's `bl-notification` web component for toast notifications.\n * Place this component once in your app (typically at root or layout level). Notifications\n * are triggered programmatically via the `useNotification` composable.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage: place in app root -->\n * <template>\n * <div>\n * <RouterView />\n * <BvNotification />\n * </div>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With useNotification composable -->\n * <template>\n * <div>\n * <BvButton @click=\"showSuccess\">Show Success</BvButton>\n * <BvNotification />\n * </div>\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { NotificationProps } from \"./notification.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<NotificationProps>(), {\n duration: 7,\n noAnimation: false,\n});\n\n/**\n * Lifecycle hook: Component mounted.\n * Loads Baklava resources required for the web component.\n */\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-notification v-bind=\"props\" />\n</template>\n\n<style lang=\"css\" scoped></style>\n","<script setup lang=\"ts\">\n/**\n * Pagination Component\n *\n * A Vue UI kit component for Baklava's `bl-pagination` web component for page navigation.\n * Supports v-model:currentPage for two-way binding and emits change events when\n * the user navigates to a different page.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic pagination -->\n * <template>\n * <BvPagination\n * v-model:current-page=\"currentPage\"\n * :total-items=\"100\"\n * :page-size=\"10\"\n * @change=\"handlePageChange\"\n * />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With jumper - jump directly to a page -->\n * <template>\n * <BvPagination\n * v-model:current-page=\"currentPage\"\n * :total-items=\"250\"\n * :page-size=\"25\"\n * :has-jumper=\"true\"\n * jumper-label=\"Go to page\"\n * />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With items-per-page select -->\n * <template>\n * <BvPagination\n * v-model:current-page=\"currentPage\"\n * :total-items=\"100\"\n * :page-size=\"10\"\n * :has-select=\"true\"\n * select-label=\"Items per page\"\n * :items-per-page-options=\"[\n * { text: '10 Items', value: 10 },\n * { text: '25 Items', value: 25 },\n * { text: '50 Items', value: 50 }\n * ]\"\n * />\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { PaginationProps } from \"./pagination.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<PaginationProps>(), {\n currentPage: undefined,\n totalItems: undefined,\n pageSize: undefined,\n hasJumper: false,\n jumperLabel: undefined,\n hasSelect: false,\n selectLabel: undefined,\n itemsPerPageOptions: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the current page changes.\n * Use v-model:currentPage for two-way binding.\n *\n * @param {number} page - The new current page number.\n */\n \"update:currentPage\": [page: number];\n\n /**\n * Emitted when the user navigates to a different page.\n * Payload contains selectedPage, prevPage, and itemsPerPage.\n *\n * @param {CustomEvent<{ selectedPage: number; prevPage: number; itemsPerPage: number }>} event - The change event from bl-pagination.\n */\n change: [event: CustomEvent];\n}>();\n\n/**\n * Handles the bl-change event from the underlying bl-pagination component.\n * Extracts selectedPage from event.detail and emits update:currentPage and change.\n *\n * @param {CustomEvent} event - The bl-change event from bl-pagination.\n */\nconst handleChange = (event: CustomEvent) => {\n emit(\"change\", event);\n const detail = event.detail as\n | { selectedPage?: number; prevPage?: number; itemsPerPage?: number }\n | undefined;\n const page = detail?.selectedPage;\n if (page !== undefined) {\n emit(\"update:currentPage\", page);\n }\n};\n\n/**\n * Lifecycle hook: Component mounted.\n * Loads Baklava resources required for bl-pagination.\n */\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-pagination\n v-bind=\"{\n 'current-page': props.currentPage,\n 'total-items': props.totalItems,\n 'items-per-page': props.pageSize,\n 'has-jumper': props.hasJumper === true ? true : undefined,\n 'jumper-label': props.jumperLabel,\n 'has-select': props.hasSelect === true ? true : undefined,\n 'select-label': props.selectLabel,\n 'items-per-page-options': props.itemsPerPageOptions,\n }\"\n @bl-change=\"handleChange\"\n >\n <slot />\n </bl-pagination>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Radio Component\n *\n * A Vue UI kit component for Baklava's `bl-radio` and `bl-radio-group` web components.\n * Can be used as either a single radio option or as a group container for multiple radios.\n *\n * @component\n * @example\n * ```vue\n * <!-- Single radio in a group -->\n * <template>\n * <bl-radio-group :value=\"choice\" @bl-radio-change=\"choice = $event.detail\">\n * <BvRadio v-model=\"choice\" value=\"yes\" label=\"Yes\" name=\"choice\" />\n * <BvRadio v-model=\"choice\" value=\"no\" label=\"No\" name=\"choice\" />\n * </bl-radio-group>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Radio group with items -->\n * <template>\n * <BvRadio v-model=\"choice\" :items=\"items\">\n * <template #item=\"{ item }\">{{ item.label }}</template>\n * </BvRadio>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Explicit checked control -->\n * <template>\n * <BvRadio :checked=\"isSelected\" @update:checked=\"isSelected = $event\" label=\"Option\" />\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { RadioProps } from \"./radio.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<RadioProps>(), {\n modelValue: undefined,\n value: undefined,\n name: undefined,\n label: undefined,\n checked: undefined,\n disabled: undefined,\n required: undefined,\n items: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when selection changes (for v-model with modelValue).\n * Payload is this radio's value when it becomes selected (single mode) or the selected value (group mode).\n *\n * @param {string | number} value - The selected value.\n */\n \"update:modelValue\": [value: string | number];\n\n /**\n * Emitted when checked state changes (for explicit checked control).\n *\n * @param {boolean} checked - The new checked state.\n */\n \"update:checked\": [checked: boolean];\n\n /**\n * Emitted when the radio state changes (native bl-change / bl-radio-change event).\n *\n * @param {CustomEvent} event - The change event from bl-radio or bl-radio-group.\n */\n change: [event: CustomEvent];\n\n /**\n * Emitted on input (native bl-input event).\n *\n * @param {CustomEvent} event - The bl-input event from bl-radio.\n */\n input: [event: CustomEvent];\n}>();\n\n/**\n * Determines if the component should act as a group container.\n * When `items` prop is provided and is an array, it acts as a group.\n */\nconst isGroupMode = computed(\n () => props.items !== undefined && Array.isArray(props.items),\n);\n\n/**\n * Normalized model value for group mode (string for bl-radio-group).\n */\nconst groupValue = computed(() => {\n const val = props.modelValue;\n if (val === undefined || val === null) return \"\";\n return String(val);\n});\n\n/**\n * Computed checked state for bl-radio (single mode).\n * Uses explicit checked prop when provided, otherwise modelValue === value for v-model.\n */\nconst computedChecked = computed(() => {\n if (props.checked === true || props.checked === false) {\n return props.checked;\n }\n if (props.modelValue !== undefined && props.value !== undefined) {\n return String(props.modelValue) === String(props.value);\n }\n return undefined;\n});\n\n/**\n * Handles the bl-change event from the underlying bl-radio (single mode).\n * Emits update:modelValue with this radio's value when selected, or update:checked.\n */\nconst handleSingleChange = (event: CustomEvent) => {\n emit(\"change\", event);\n const target = event.target as { checked?: boolean; value?: string | number };\n const checked = target?.checked;\n if (checked === true && props.value !== undefined) {\n emit(\"update:modelValue\", props.value);\n }\n if (checked === true || checked === false) {\n emit(\"update:checked\", checked);\n }\n};\n\n/**\n * Handles the bl-radio-change event from the underlying bl-radio-group (group mode).\n * Emits update:modelValue with the selected value (preserves original type from items).\n */\nconst handleGroupChange = (event: CustomEvent) => {\n emit(\"change\", event);\n const detail = event.detail as string | undefined;\n if (detail === undefined || detail === \"\") return;\n const item = props.items?.find(\n (i) => String(i.value) === String(detail),\n );\n const newValue = item !== undefined ? item.value : detail;\n emit(\"update:modelValue\", newValue);\n};\n\n/**\n * Lifecycle hook: Component mounted.\n * Loads Baklava resources for bl-radio and bl-radio-group.\n */\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <!-- Group mode: render as bl-radio-group -->\n <bl-radio-group\n v-if=\"isGroupMode\"\n :value=\"groupValue\"\n :required=\"props.required === true ? true : undefined\"\n :label=\"props.label\"\n @bl-radio-change=\"handleGroupChange\"\n >\n <bl-radio\n v-for=\"(item, index) in props.items\"\n :key=\"String(item.value)\"\n v-bind=\"{\n value: String(item.value),\n disabled: item.disabled === true ? true : undefined,\n name: item.name ?? props.name,\n }\"\n >\n <slot name=\"item\" :item=\"item\" :index=\"index\">\n {{ item.label }}\n </slot>\n </bl-radio>\n </bl-radio-group>\n\n <!-- Single radio mode: render as bl-radio -->\n <bl-radio\n v-else\n v-bind=\"{\n value: props.value !== undefined ? String(props.value) : undefined,\n name: props.name,\n disabled: props.disabled === true ? true : undefined,\n required: props.required === true ? true : undefined,\n checked:\n computedChecked === true\n ? true\n : computedChecked === false\n ? false\n : undefined,\n }\"\n @bl-change=\"handleSingleChange\"\n @bl-input=\"emit('input', $event)\"\n >\n <slot>{{ label }}</slot>\n </bl-radio>\n</template>\n","<script setup lang=\"ts\">\n/**\n * ScrollToTop Component\n *\n * A floating button that appears when the user scrolls past a threshold.\n * Clicking it scrolls smoothly to the top of the page.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvScrollToTop />\n * </template>\n * ```\n */\nimport { onMounted, onUnmounted, ref } from \"vue\";\nimport BvButton from \"../button/Button.vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { ScrollToTopProps } from \"./scroll-to-top.types\";\n\nconst props = withDefaults(defineProps<ScrollToTopProps>(), {\n threshold: 300,\n position: \"bottom-right\",\n label: \"Scroll to top\",\n size: \"medium\",\n variant: \"primary\",\n});\n\nconst emit = defineEmits<{\n click: [];\n}>();\n\nconst isVisible = ref(false);\nlet rafId: number | null = null;\n\nconst checkVisibility = () => {\n isVisible.value = window.scrollY > props.threshold;\n};\n\nconst handleScroll = () => {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n checkVisibility();\n rafId = null;\n });\n};\n\nconst scrollToTop = () => {\n window.scrollTo({ top: 0, behavior: \"smooth\" });\n emit(\"click\");\n};\n\nconst positionClasses: Record<\n NonNullable<ScrollToTopProps[\"position\"]>,\n string\n> = {\n \"bottom-right\": \"scroll-to-top--bottom-right\",\n \"bottom-left\": \"scroll-to-top--bottom-left\",\n \"top-right\": \"scroll-to-top--top-right\",\n \"top-left\": \"scroll-to-top--top-left\",\n};\n\nonMounted(() => {\n loadBaklavaResources();\n checkVisibility();\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n});\n\nonUnmounted(() => {\n window.removeEventListener(\"scroll\", handleScroll);\n if (rafId !== null) cancelAnimationFrame(rafId);\n});\n</script>\n\n<template>\n <Transition name=\"scroll-to-top-fade\">\n <div\n v-show=\"isVisible\"\n :class=\"['scroll-to-top', positionClasses[position]]\"\n role=\"complementary\"\n aria-label=\"Scroll to top\"\n >\n <BvButton\n :variant=\"variant\"\n :size=\"size\"\n :label=\"label\"\n icon=\"arrow_up\"\n @click=\"scrollToTop\"\n >\n <template #default></template>\n </BvButton>\n </div>\n </Transition>\n</template>\n\n<style scoped>\n.scroll-to-top {\n position: fixed;\n z-index: 1000;\n}\n\n.scroll-to-top--bottom-right {\n bottom: 1.5rem;\n right: 1.5rem;\n}\n\n.scroll-to-top--bottom-left {\n bottom: 1.5rem;\n left: 1.5rem;\n}\n\n.scroll-to-top--top-right {\n top: 1.5rem;\n right: 1.5rem;\n}\n\n.scroll-to-top--top-left {\n top: 1.5rem;\n left: 1.5rem;\n}\n\n.scroll-to-top-fade-enter-active,\n.scroll-to-top-fade-leave-active {\n transition: opacity 0.2s ease;\n}\n.scroll-to-top-fade-enter-from,\n.scroll-to-top-fade-leave-to {\n opacity: 0;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Select Component\n *\n * A Vue UI kit component for Baklava's `bl-select` web component with v-model support.\n * Supports both slot-based options and the `options` prop for programmatic rendering.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic single select with slot -->\n * <template>\n * <BvSelect v-model=\"selected\" label=\"Choose an option\">\n * <bl-select-option value=\"a\">Option A</bl-select-option>\n * <bl-select-option value=\"b\">Option B</bl-select-option>\n * </BvSelect>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Options array -->\n * <template>\n * <BvSelect v-model=\"country\" label=\"Country\" :options=\"countries\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Multiple select -->\n * <template>\n * <BvSelect v-model=\"selected\" label=\"Select multiple\" :multiple=\"true\" :options=\"items\" />\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { SelectProps } from \"./select.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<SelectProps>(), {\n modelValue: undefined,\n options: undefined,\n label: undefined,\n placeholder: undefined,\n name: undefined,\n required: undefined,\n disabled: undefined,\n multiple: undefined,\n size: undefined,\n clearable: undefined,\n helpText: undefined,\n customInvalidText: undefined,\n searchBar: undefined,\n searchBarPlaceholder: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the selection changes. Use with v-model.\n *\n * @param {string | string[] | null} value - The selected value(s). Array when multiple.\n */\n \"update:modelValue\": [value: string | string[] | null];\n /**\n * Emitted when selection changes (bl-change event).\n *\n * @param {CustomEvent} event - The native bl-change event from bl-select.\n */\n change: [event: CustomEvent];\n /**\n * Emitted on input (bl-input event).\n *\n * @param {CustomEvent} event - The native bl-input event from bl-select.\n */\n input: [event: CustomEvent];\n}>();\n\n/**\n * Handles the bl-change event from the underlying bl-select component.\n * Syncs v-model and forwards the change event.\n * The bl-select element (event.target) exposes a .value property for the selected value.\n *\n * @param {CustomEvent} event - The bl-change event from bl-select.\n */\nconst handleChange = (event: CustomEvent) => {\n emit(\"change\", event);\n const target = event.target as HTMLSelectElement & {\n value?: string | string[] | null;\n };\n emit(\"update:modelValue\", target?.value ?? null);\n};\n\n/**\n * Lifecycle hook: Component mounted.\n *\n * Loads Baklava resources when the component is mounted.\n */\n/**\n * Props to pass to bl-select. Excludes modelValue (we use :value) and options\n * (we render bl-select-option children from options in the template).\n */\nconst selectProps = computed(() => {\n const { modelValue: _, options: __, ...rest } = props;\n return {\n ...rest,\n disabled: rest.disabled === true ? true : undefined,\n multiple: rest.multiple === true ? true : undefined,\n \"help-text\": rest.helpText ?? undefined,\n \"invalid-text\": rest.customInvalidText ?? undefined,\n \"search-bar\": rest.searchBar === true ? true : undefined,\n \"search-bar-placeholder\": rest.searchBarPlaceholder ?? undefined,\n };\n});\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-select\n v-bind=\"selectProps\"\n :value=\"props.modelValue\"\n @bl-change=\"handleChange\"\n @bl-input=\"emit('input', $event)\"\n >\n <!-- Render options from options prop when provided -->\n <template v-if=\"options\">\n <bl-select-option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </bl-select-option>\n </template>\n <!-- Default slot for custom bl-select-option children -->\n <slot />\n </bl-select>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Spinner Component\n *\n * A Vue UI kit component for Baklava's `bl-spinner` web component for loading indicators.\n * Displays an animated spinner with configurable size and variant.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvSpinner />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <template>\n * <BvSpinner size=\"large\" label=\"Loading...\" />\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { SpinnerProps } from \"./spinner.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<SpinnerProps>(), {\n size: undefined,\n variant: undefined,\n label: undefined,\n});\n\n/** Props to pass to bl-spinner (excludes label, which is used for aria-label) */\nconst spinnerProps = computed(() => {\n const { label: _, ...rest } = props;\n return rest;\n});\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-spinner v-bind=\"spinnerProps\" :aria-label=\"label\" />\n</template>\n","<script setup lang=\"ts\">\n/**\n * SplitButton Component\n *\n * A Vue UI kit component for Baklava's `bl-split-button` web component.\n * A button with a primary action and a dropdown for secondary actions.\n * Dropdown content is provided via the `dropdown-content` slot.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvSplitButton label=\"Actions\" @click=\"handleClick\">\n * <template #dropdown-content>\n * <bl-dropdown-item>Action 1</bl-dropdown-item>\n * <bl-dropdown-item>Action 2</bl-dropdown-item>\n * </template>\n * </BvSplitButton>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <template>\n * <BvSplitButton label=\"Save\" icon=\"check\" variant=\"primary\" @click=\"save\" />\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { SplitButtonProps } from \"./split-button.types\";\n\nconst props = defineProps<SplitButtonProps>();\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the main button is clicked.\n *\n * @param {CustomEvent} event - The native click event from bl-split-button.\n */\n click: [event: CustomEvent];\n /**\n * Emitted when the dropdown button is clicked.\n *\n * @param {CustomEvent} event - The native dropdown-click event from bl-split-button.\n */\n \"dropdown-click\": [event: CustomEvent];\n}>();\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-split-button\n v-bind=\"{\n variant: props.variant,\n size: props.size,\n disabled: props.disabled === true ? true : undefined,\n loading: props.loading === true ? true : undefined,\n label: props.label,\n icon: props.icon,\n }\"\n @bl-click=\"emit('click', $event)\"\n @bl-dropdown-click=\"emit('dropdown-click', $event)\"\n >\n <slot v-if=\"$slots['dropdown-content']\" name=\"dropdown-content\" />\n </bl-split-button>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Stepper Component\n *\n * A Vue UI kit component for Baklava's `bl-stepper` web component for step indicators.\n * Displays progress through a sequence of steps. Use the `steps` prop for declarative\n * configuration or the default slot for custom step content.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvStepper v-model:current-step=\"currentStep\" :steps=\"steps\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <template>\n * <BvStepper :steps=\"['Step 1', 'Step 2', 'Step 3']\" />\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { StepperProps, StepperStep } from \"./stepper.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<StepperProps>(), {\n currentStep: undefined,\n steps: undefined,\n orientation: undefined,\n showLabels: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the current step changes (for v-model:currentStep).\n *\n * @param {number} step - The new current step index.\n */\n \"update:currentStep\": [step: number];\n /**\n * Emitted when the user selects a different step.\n *\n * @param {CustomEvent} event - The native bl-stepper-change event from bl-stepper.\n */\n \"step-change\": [event: CustomEvent];\n}>();\n\n/**\n * Returns the variant for a step based on its index and the current step.\n */\nconst getStepVariant = (index: number): \"default\" | \"active\" | \"success\" | \"error\" => {\n const current = props.currentStep ?? 0;\n const step = props.steps?.[index];\n if (step?.error) return \"error\";\n if (index < current) return \"success\";\n if (index === current) return \"active\";\n return \"default\";\n};\n\n/**\n * Handles the bl-stepper-change event from the underlying web component.\n */\nconst handleStepChange = (event: CustomEvent<{ activeStep: number; totalSteps: number }>) => {\n emit(\"step-change\", event);\n const step = event.detail?.activeStep;\n if (step !== undefined) emit(\"update:currentStep\", step);\n};\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-stepper\n :direction=\"orientation ?? 'horizontal'\"\n @bl-stepper-change=\"handleStepChange\"\n >\n <template v-if=\"steps\">\n <bl-stepper-item\n v-for=\"(step, index) in steps\"\n :key=\"index\"\n :id=\"`step-${index}`\"\n :title=\"showLabels !== false ? step.label : ''\"\n :description=\"showLabels !== false && step.description ? step.description : ''\"\n :variant=\"getStepVariant(index)\"\n :disabled=\"step.disabled\"\n />\n </template>\n <slot />\n </bl-stepper>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Switch Component\n *\n * A Vue UI kit component for Baklava's `bl-switch` web component with v-model support.\n * A toggle switch for boolean states. Supports v-model:checked for two-way binding.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvSwitch v-model:checked=\"enabled\" label=\"Enable notifications\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <template>\n * <BvSwitch :checked=\"isOn\" @change=\"handleChange\" />\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { SwitchProps } from \"./switch.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<SwitchProps>(), {\n checked: undefined,\n disabled: undefined,\n label: undefined,\n size: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the checked state changes (for v-model:checked).\n *\n * @param {boolean} checked - The new checked state.\n */\n \"update:checked\": [checked: boolean];\n /**\n * Emitted when the user toggles the switch.\n *\n * @param {CustomEvent} event - The native change event from bl-switch.\n */\n change: [event: CustomEvent];\n /**\n * Emitted on user input (mirrors native input event).\n *\n * @param {CustomEvent} event - The native input event from bl-switch.\n */\n input: [event: CustomEvent];\n}>();\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-switch\n v-bind=\"{\n ...props,\n checked: props.checked === true ? true : props.checked === false ? false : undefined,\n disabled: props.disabled === true ? true : undefined,\n }\"\n @bl-switch-toggle=\"\n emit('change', $event);\n emit('update:checked', $event.detail);\n \"\n >\n <slot>{{ label }}</slot>\n </bl-switch>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Tab Component\n *\n * A Vue UI kit component for Baklava's `bl-tabs` (bl-tab-group / bl-tab / bl-tab-panel) web components\n * for tab navigation. Use the `tabs` prop for declarative configuration or the default slot\n * for custom tab content.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage with tabs prop -->\n * <template>\n * <BvTab v-model:activeTab=\"activeTab\" :tabs=\"tabOptions\">\n * <div v-if=\"activeTab === 'tab1'\">Content 1</div>\n * <div v-if=\"activeTab === 'tab2'\">Content 2</div>\n * </BvTab>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Custom slots -->\n * <template>\n * <BvTab v-model:activeTab=\"active\">\n * <bl-tab value=\"a\">Tab A</bl-tab>\n * <bl-tab value=\"b\">Tab B</bl-tab>\n * <bl-tab-panel tab=\"a\">Panel A content</bl-tab-panel>\n * <bl-tab-panel tab=\"b\">Panel B content</bl-tab-panel>\n * </BvTab>\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { TabProps } from \"./tab.types\";\n\nconst props = withDefaults(defineProps<TabProps>(), {\n activeTab: undefined,\n tabs: undefined,\n variant: undefined,\n orientation: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the active tab changes (use with v-model:activeTab).\n * @param {string} tab - The new active tab value.\n */\n \"update:activeTab\": [tab: string];\n /**\n * Emitted when tab selection changes (raw CustomEvent from bl-tabs).\n * @param {CustomEvent} event - The bl-tab-change event.\n */\n \"tab-change\": [event: CustomEvent];\n}>();\n\n/**\n * Handles the bl-tab-selected event from the underlying bl-tab-group.\n * Emits update:activeTab with the new tab value and tab-change with the raw event.\n *\n * @param {CustomEvent} event - The bl-tab-selected event from bl-tab (detail is tab name).\n */\nconst handleTabChange = (event: CustomEvent<string>) => {\n emit(\"tab-change\", event);\n const tab = event.detail;\n if (tab !== undefined) emit(\"update:activeTab\", tab);\n};\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-tab-group @bl-tab-selected=\"handleTabChange\">\n <template v-if=\"tabs\">\n <bl-tab\n v-for=\"tab in tabs\"\n :key=\"tab.value\"\n slot=\"tabs\"\n :name=\"tab.value\"\n :caption=\"tab.label\"\n :disabled=\"tab.disabled\"\n :selected=\"props.activeTab === tab.value\"\n >\n {{ tab.label }}\n </bl-tab>\n <bl-tab-panel\n v-for=\"tab in tabs\"\n :key=\"`panel-${tab.value}`\"\n :tab=\"tab.value\"\n >\n <slot />\n </bl-tab-panel>\n </template>\n <slot v-else />\n </bl-tab-group>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Table Component\n *\n * A Vue UI kit component for Baklava's `bl-table` web component for displaying tabular data.\n * Supports columns, data, sorting, row selection, loading/empty states, pagination,\n * and custom slots for header actions, empty state, and per-column cell content.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvTable :columns=\"columns\" :data=\"tableData\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With loading and empty states -->\n * <template>\n * <BvTable\n * :columns=\"columns\"\n * :data=\"tableData\"\n * :is-loading=\"isLoading\"\n * >\n * <template #empty-state>\n * <span>No data found</span>\n * </template>\n * </BvTable>\n * </template>\n * ```\n */\nimport { computed, onMounted, type PropType } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport BvSpinner from \"../spinner/Spinner.vue\";\nimport type {\n TableColumn,\n TableRow,\n TablePaginationProps,\n} from \"./table.types\";\n\ndefineOptions({ inheritAttrs: false });\n\nconst props = defineProps({\n title: { type: String, default: undefined },\n headerOptions: {\n type: Object as PropType<{ sticky?: boolean; minCellWidth?: string }>,\n default: undefined,\n },\n data: { type: Array as PropType<TableRow[]>, default: () => [] },\n columns: { type: Array as PropType<TableColumn[]>, default: undefined },\n sortable: { type: Boolean, default: undefined },\n selectable: { type: Boolean, default: undefined },\n multiple: { type: Boolean, default: undefined },\n selected: {\n type: Array as PropType<(string | number)[]>,\n default: undefined,\n },\n sortKey: { type: String, default: undefined },\n sortDirection: { type: String, default: undefined },\n stickyFirstColumn: { type: Boolean, default: undefined },\n stickyLastColumn: { type: Boolean, default: undefined },\n isLoading: { type: Boolean, default: undefined },\n pagination: {\n type: Object as PropType<TablePaginationProps>,\n default: undefined,\n },\n loadingText: { type: String, default: \"Loading...\" },\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when a row is clicked.\n * @param {CustomEvent} event - The bl-row-click event.\n */\n \"row-click\": [event: CustomEvent];\n /**\n * Emitted when table sort options change.\n * @param {CustomEvent} event - The bl-sort event.\n */\n sort: [event: CustomEvent];\n /**\n * Emitted when selected rows change.\n * @param {CustomEvent} event - The bl-row-select event.\n */\n select: [event: CustomEvent];\n /**\n * Emitted when pagination changes.\n * @param {CustomEvent} event - The bl-change event with selectedPage, prevPage, itemsPerPage.\n */\n change: [event: CustomEvent];\n}>();\n\n/**\n * Baklava table expects selected IDs to always be strings,\n * even when the actual data IDs might be numbers.\n */\nconst selectedIdsAsStrings = computed(() => {\n const s = props.selected;\n if (s == null || !Array.isArray(s)) return [];\n return s.map((id) => String(id));\n});\n\n/** Column header text: prefer name, then label, then key */\nconst getColumnLabel = (col: { key: string; label?: string; name?: string }) =>\n col.name ?? col.label ?? col.key;\n\n/** Row key for :key and selection-key: prefer row.id, fallback to index */\nconst getRowKey = (row: Record<string, unknown> & { id?: string | number }, index: number) =>\n row.id != null ? String(row.id) : String(index);\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <div class=\"table\">\n <div v-if=\"props.title\" class=\"header\">\n <span class=\"--title\">{{ props.title }}</span>\n <slot name=\"header-actions\" />\n </div>\n\n <div class=\"table-content\">\n <!-- Loading state -->\n <bl-table v-if=\"props.isLoading\">\n <div class=\"loading-state\">\n <BvSpinner />\n <span>{{ props.loadingText }}</span>\n </div>\n </bl-table>\n\n <!-- Empty state -->\n <bl-table v-else-if=\"!props.data?.length\">\n <div class=\"empty-state\">\n <slot name=\"empty-state\" />\n </div>\n </bl-table>\n\n <!-- Data table -->\n <bl-table\n v-else\n v-bind=\"{\n sortable: props.sortable === true ? true : undefined,\n selectable: props.selectable === true ? true : undefined,\n multiple: props.multiple === true ? true : undefined,\n ...(props.selectable && { selected: selectedIdsAsStrings }),\n sortKey: props.sortKey,\n sortDirection: props.sortDirection,\n stickyFirstColumn: props.stickyFirstColumn,\n stickyLastColumn: props.stickyLastColumn,\n }\"\n @bl-sort=\"emit('sort', $event)\"\n @bl-row-select=\"emit('select', $event)\"\n >\n <bl-table-header :sticky=\"props.headerOptions?.sticky\">\n <bl-table-row>\n <bl-table-header-cell\n v-for=\"column in props.columns\"\n :key=\"column.key\"\n :sort-key=\"\n props.sortable && column.sortable !== false ? column.key : undefined\n \"\n :style=\"{\n '--bl-table-header-cell-min-width':\n props.headerOptions?.minCellWidth || '100px',\n }\"\n >\n {{ getColumnLabel(column) }}\n </bl-table-header-cell>\n </bl-table-row>\n </bl-table-header>\n\n <bl-table-body>\n <bl-table-row\n v-for=\"(row, index) in props.data\"\n :key=\"getRowKey(row, index)\"\n :selection-key=\"props.selectable ? getRowKey(row, index) : undefined\"\n >\n <bl-table-cell v-for=\"column in props.columns\" :key=\"column.key\">\n <slot\n :name=\"column.key\"\n :row=\"row\"\n :value=\"row[column.key]\"\n >\n {{ row[column.key] }}\n </slot>\n </bl-table-cell>\n </bl-table-row>\n </bl-table-body>\n </bl-table>\n </div>\n\n <div v-if=\"props.pagination\" class=\"pagination-wrapper\">\n <bl-pagination\n :current-page=\"props.pagination!.currentPage\"\n :total-items=\"props.pagination!.totalItems\"\n :items-per-page=\"props.pagination!.itemsPerPage\"\n :has-jumper=\"props.pagination!.hasJumper ?? undefined\"\n :has-select=\"props.pagination!.hasSelect ?? undefined\"\n :jumper-label=\"props.pagination!.jumperLabel ?? 'Go to page'\"\n :select-label=\"props.pagination!.selectLabel ?? 'Items per page'\"\n :items-per-page-options=\"props.pagination!.itemsPerPageOptions\"\n @bl-change=\"emit('change', $event)\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"css\" scoped>\n.table {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.--title {\n font: var(--bl-font-title-1-medium);\n}\n\n.table-content {\n width: 100%;\n overflow-x: auto;\n}\n\n.table-content > bl-table {\n min-width: max-content;\n}\n\n.loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px;\n gap: 16px;\n}\n\n.loading-state span {\n font: var(--bl-font-body-2-regular);\n color: var(--bl-color-primary);\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px;\n gap: 12px;\n}\n\n.pagination-wrapper {\n display: flex;\n justify-content: flex-end;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Textarea Component\n *\n * A Vue UI kit component for Baklava's `bl-textarea` web component with v-model support.\n * Supports label, placeholder, validation, character counter, and help text.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage with v-model -->\n * <template>\n * <BvTextarea v-model=\"message\" label=\"Message\" placeholder=\"Enter your message\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With validation -->\n * <template>\n * <BvTextarea\n * v-model=\"comment\"\n * label=\"Comment\"\n * :maxlength=\"500\"\n * help-text=\"Max 500 characters\"\n * invalid-text=\"Please enter a valid comment\"\n * />\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { TextareaProps } from \"./textarea.types\";\n\nconst props = withDefaults(defineProps<TextareaProps>(), {\n modelValue: undefined,\n label: undefined,\n placeholder: undefined,\n rows: undefined,\n maxlength: undefined,\n disabled: undefined,\n required: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the value changes (use with v-model).\n * @param {string | null} value - The new textarea value.\n */\n \"update:modelValue\": [value: string | null];\n /**\n * Emitted on user input (mirrors native bl-input).\n * @param {CustomEvent} event - The bl-input event.\n */\n input: [event: CustomEvent];\n /**\n * Emitted when the value changes (blur or commit).\n * @param {CustomEvent} event - The bl-change event.\n */\n change: [event: CustomEvent];\n}>();\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-textarea\n v-bind=\"{\n ...props,\n disabled: props.disabled === true ? true : undefined,\n required: props.required === true ? true : undefined,\n }\"\n :value=\"props.modelValue\"\n @bl-input=\"\n emit('input', $event);\n emit('update:modelValue', ($event.target as HTMLTextAreaElement)?.value || null);\n \"\n @bl-change=\"emit('change', $event)\"\n >\n <slot />\n </bl-textarea>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Tooltip Component\n *\n * A Vue UI kit component for Baklava's `bl-tooltip` web component for displaying contextual\n * information on hover or focus. The trigger is provided via the default slot;\n * content can be set via the `content` prop or the `#content` slot.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvTooltip content=\"This is a tooltip\">\n * <BvButton>Hover me</BvButton>\n * </BvTooltip>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With placement -->\n * <template>\n * <BvTooltip content=\"Tooltip\" placement=\"bottom\">\n * <span>Trigger</span>\n * </BvTooltip>\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { TooltipProps } from \"./tooltip.types\";\n\nconst props = withDefaults(defineProps<TooltipProps>(), {\n content: undefined,\n placement: undefined,\n trigger: undefined,\n disabled: undefined,\n delay: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the tooltip is shown.\n */\n show: [];\n /**\n * Emitted when the tooltip is hidden.\n */\n hide: [];\n}>();\n\n// bl-tooltip only supports placement and target. Do not pass trigger (read-only),\n// content, disabled, or delay as they are not supported and cause errors.\nconst tooltipProps = computed(() => {\n const bind: Record<string, unknown> = {};\n if (props.placement !== undefined) bind.placement = props.placement;\n if (props.target !== undefined) bind.target = props.target;\n return bind;\n});\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-tooltip\n v-if=\"!props.disabled\"\n v-bind=\"tooltipProps\"\n @bl-tooltip-show=\"emit('show')\"\n @bl-tooltip-hide=\"emit('hide')\"\n >\n <div slot=\"tooltip-trigger\">\n <slot />\n </div>\n <slot v-if=\"$slots['content']\" name=\"content\" />\n <span v-else-if=\"content\">{{ content }}</span>\n </bl-tooltip>\n <slot v-else />\n</template>\n"],"names":["_createElementBlock","_openBlock","_Fragment","_mergeProps","_renderSlot","$slots","_createBlock","_resolveDynamicComponent","_createElementVNode","_hoisted_1","BvIcon","_hoisted_2","_renderList","BvButton","_hoisted_3","_createVNode","_createTextVNode","_toDisplayString","_normalizeClass","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","BvTag","_normalizeStyle","_Transition","BvSpinner","_a"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/loadBaklavaResources.ts","../src/accordion/Accordion.vue","../src/alert/Alert.vue","../src/badge/Badge.vue","../src/button/Button.vue","../src/icon/Icon.vue","../src/link/Link.vue","../src/banner/Banner.vue","../src/checkbox/Checkbox.vue","../src/chip/Chip.vue","../src/datepicker/Datepicker.vue","../src/dialog/Dialog.vue","../src/drawer/Drawer.vue","../src/dropdown/Dropdown.vue","../src/tag/Tag.vue","../src/file-upload/FileUpload.vue","../src/skeleton/Skeleton.vue","../src/image/Image.vue","../src/input/Input.vue","../src/notification/Notification.vue","../src/pagination/Pagination.vue","../src/radio/Radio.vue","../src/scroll-to-top/ScrollToTop.vue","../src/select/Select.vue","../src/spinner/Spinner.vue","../src/split-button/SplitButton.vue","../src/stepper/Stepper.vue","../src/switch/Switch.vue","../src/tab/Tab.vue","../src/table/Table.vue","../src/textarea/Textarea.vue","../src/tooltip/Tooltip.vue"],"sourcesContent":["const BAKLAVA_VERSION = \"3.4.2\";\n\n/** Key Baklava element used to detect if the library is already loaded (e.g. by host app) */\nconst BAKLAVA_DETECTION_ELEMENT = \"bl-table\";\n\nexport const loadBaklavaResources = () => {\n if (customElements.get(BAKLAVA_DETECTION_ELEMENT)) {\n return;\n }\n\n const loadScript = () => {\n if (!document.querySelector('script[src*=\"baklava.js\"]')) {\n const script = document.createElement(\"script\");\n script.type = \"module\";\n script.src = `https://cdn.jsdelivr.net/npm/@trendyol/baklava@${BAKLAVA_VERSION}/dist/baklava.js`;\n document.head.appendChild(script);\n }\n };\n\n const loadStyles = () => {\n if (!document.querySelector('link[href*=\"default.css\"]')) {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = `https://cdn.jsdelivr.net/npm/@trendyol/baklava@${BAKLAVA_VERSION}/dist/themes/default.css`;\n document.head.appendChild(link);\n }\n };\n\n loadScript();\n loadStyles();\n};\n","<script setup lang=\"ts\">\n/**\n * Accordion Component\n *\n * A Vue UI kit component for Baklava's `bl-accordion` and `bl-accordion-group` web components.\n * Can be used as either a single accordion or as a group container for multiple accordions.\n *\n * @component\n * @example\n * ```vue\n * <!-- Single accordion -->\n * <template>\n * <Accordion :open=\"isOpen\" @toggle=\"isOpen = $event\" caption=\"Section Title\">\n * <p>Accordion content goes here</p>\n * </Accordion>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Accordion group - only one open at a time -->\n * <template>\n * <Accordion :multiple=\"false\" :items=\"items\">\n * <template #item=\"{ item }\">\n * <p>{{ item.answer }}</p>\n * </template>\n * </Accordion>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Accordion group - multiple can be open -->\n * <template>\n * <Accordion :multiple=\"true\" :items=\"sections\">\n * <template #item=\"{ item }\">\n * <p>{{ item.description }}</p>\n * </template>\n * </Accordion>\n * </template>\n * ```\n */\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { AccordionProps } from \"./accordion.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<AccordionProps>(), {\n open: false,\n caption: undefined,\n icon: undefined,\n disabled: false,\n animationDuration: 250,\n multiple: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the accordion is toggled (opened or closed).\n * Only used when component is in single accordion mode.\n *\n * @param {boolean} open - The new open state of the accordion.\n */\n toggle: [open: boolean];\n}>();\n\n/**\n * Reference to the underlying web component element.\n */\nconst accordionRef = ref<HTMLElement | null>(null);\n\n/**\n * Determines if the component should act as a group container.\n * When `multiple` prop is provided and `items` is defined, it acts as a group.\n */\nconst isGroupMode = computed(\n () => props.multiple !== undefined && Array.isArray(props.items),\n);\n\n/**\n * Watches for changes to the `open` prop and syncs with the web component.\n * Only applies when in single accordion mode.\n *\n * When the prop changes, it calls the appropriate expand/collapse method\n * on the underlying web component.\n */\nwatch(\n () => props.open,\n (newValue) => {\n if (!isGroupMode.value && accordionRef.value) {\n const blAccordion = accordionRef.value as any;\n if (newValue && !blAccordion.open) {\n blAccordion.expand();\n } else if (!newValue && blAccordion.open) {\n blAccordion.collapse();\n }\n }\n },\n { immediate: true },\n);\n\n/**\n * Handles the toggle event from the underlying web component.\n * Only used when component is in single accordion mode.\n *\n * @param {CustomEvent<boolean>} event - The toggle event from bl-accordion.\n */\nconst handleToggle = (event: CustomEvent<boolean>): void => {\n if (!isGroupMode.value) {\n const isOpen = event.detail;\n emit(\"toggle\", isOpen);\n }\n};\n\n/**\n * Lifecycle hook: Component mounted.\n *\n * Loads Baklava resources and syncs the initial open state with the web component\n * (only when in single accordion mode).\n */\nonMounted(() => {\n loadBaklavaResources();\n\n // Sync initial state (only for single accordion mode)\n if (!isGroupMode.value && accordionRef.value) {\n const blAccordion = accordionRef.value as any;\n if (props.open && !blAccordion.open) {\n blAccordion.expand();\n } else if (!props.open && blAccordion.open) {\n blAccordion.collapse();\n }\n }\n});\n\n/**\n * Exposed methods for programmatic control of the accordion.\n * Only available when component is in single accordion mode.\n */\ndefineExpose({\n /**\n * Expands the accordion programmatically.\n *\n * @public\n */\n expand: (): void => {\n if (!isGroupMode.value && accordionRef.value) {\n (accordionRef.value as any).expand();\n }\n },\n\n /**\n * Collapses the accordion programmatically.\n *\n * @public\n */\n collapse: (): void => {\n if (!isGroupMode.value && accordionRef.value) {\n (accordionRef.value as any).collapse();\n }\n },\n});\n</script>\n\n<template>\n <!-- Group mode: render as bl-accordion-group -->\n <!-- Render bl-accordion for each item in props.items. Content via #item slot. -->\n <bl-accordion-group\n v-if=\"isGroupMode\"\n :multiple=\"props.multiple === true ? true : undefined\"\n >\n <bl-accordion\n v-for=\"(item, index) in props.items\"\n :key=\"index\"\n v-bind=\"{\n open: item.open === true ? true : undefined,\n caption: item.caption,\n icon: item.icon,\n disabled: item.disabled === true ? true : undefined,\n animationDuration: item.animationDuration,\n }\"\n >\n <slot name=\"item\" :item=\"item\" :index=\"index\" />\n </bl-accordion>\n </bl-accordion-group>\n\n <!-- Single accordion mode: render as bl-accordion -->\n <bl-accordion\n v-else\n ref=\"accordionRef\"\n v-bind=\"{\n open: props.open === true ? true : undefined,\n caption: props.caption,\n icon: props.icon,\n disabled: props.disabled === true ? true : undefined,\n animationDuration: props.animationDuration,\n }\"\n @bl-toggle=\"handleToggle\"\n >\n <slot />\n </bl-accordion>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Alert Component\n *\n * A Vue UI kit component for Baklava's `bl-alert` web component.\n * Displays contextual feedback messages with variants (info, success, warning, danger).\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic alert -->\n * <template>\n * <BvAlert variant=\"info\" description=\"This is an informational message\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Closable alert with controlled state -->\n * <template>\n * <BvAlert\n * variant=\"warning\"\n * caption=\"Warning\"\n * closable\n * :closed=\"isClosed\"\n * @close=\"isClosed = true\"\n * >\n * <p>You can close this alert.</p>\n * </BvAlert>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Programmatic control via ref -->\n * <template>\n * <BvAlert ref=\"alertRef\" variant=\"success\" closable>\n * <p>Content</p>\n * </BvAlert>\n * <button @click=\"alertRef?.close()\">Close</button>\n * </template>\n * ```\n */\nimport { nextTick, onMounted, ref, watch } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { AlertProps, BlAlertElement } from \"./alert.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<AlertProps>(), {\n variant: \"info\",\n description: undefined,\n icon: undefined,\n closable: false,\n caption: undefined,\n closed: false,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the close button is clicked (only when closable is true).\n */\n close: [];\n}>();\n\n/**\n * Reference to the underlying bl-alert element.\n */\nconst alertRef = ref<HTMLElement | null>(null);\n\n/**\n * Safely casts an HTMLElement to BlAlertElement.\n *\n * @param el - The element to cast.\n * @returns The element typed as BlAlertElement, or null.\n */\nfunction asBlAlert(el: HTMLElement | null): BlAlertElement | null {\n return el as BlAlertElement | null;\n}\n\n/**\n * Waits for the bl-alert custom element to be defined.\n * Used when Baklava script loads asynchronously.\n */\nasync function waitForBlAlert(): Promise<void> {\n if (!customElements.get(\"bl-alert\")) {\n await customElements.whenDefined(\"bl-alert\");\n }\n}\n\n/**\n * Syncs the `closed` prop state with the underlying bl-alert web component.\n * Calls open() or close() on the element when prop and element state differ.\n *\n * @param el - The bl-alert element to sync.\n */\nfunction syncWithBlAlert(el: HTMLElement): void {\n const blAlert = asBlAlert(el);\n if (!blAlert || typeof blAlert.close !== \"function\" || typeof blAlert.open !== \"function\") {\n return;\n }\n if (props.closed && !blAlert.closed) {\n blAlert.close();\n } else if (!props.closed && blAlert.closed) {\n blAlert.open();\n }\n}\n\n/**\n * Calls open or close on the bl-alert element when available.\n *\n * @param method - The method to call (\"open\" or \"close\").\n */\nfunction callBlAlertMethod(method: \"open\" | \"close\"): void {\n const el = asBlAlert(alertRef.value);\n if (el && typeof el[method] === \"function\") {\n el[method]!();\n }\n}\n\n/**\n * Watches for changes to the closed prop and syncs with the web component.\n */\nwatch(\n () => props.closed,\n () => {\n if (alertRef.value) {\n syncWithBlAlert(alertRef.value);\n }\n },\n);\n\n/**\n * Handles the bl-close event from the underlying web component.\n * Forwards it to the component's emit.\n */\nfunction handleClose(): void {\n emit(\"close\");\n}\n\n/**\n * Lifecycle hook: Component mounted.\n *\n * Loads Baklava resources, waits for bl-alert to be defined,\n * then syncs the initial closed state with the web component.\n */\nonMounted(async () => {\n loadBaklavaResources();\n\n await nextTick();\n await waitForBlAlert();\n\n if (alertRef.value) {\n syncWithBlAlert(alertRef.value);\n }\n});\n\n/**\n * Exposed methods for programmatic control of the alert.\n */\ndefineExpose({\n /**\n * Opens the alert programmatically.\n *\n * @public\n */\n open: async (): Promise<void> => {\n await nextTick();\n callBlAlertMethod(\"open\");\n },\n\n /**\n * Closes the alert programmatically.\n *\n * @public\n */\n close: async (): Promise<void> => {\n await nextTick();\n callBlAlertMethod(\"close\");\n },\n});\n</script>\n\n<template>\n <bl-alert\n ref=\"alertRef\"\n v-bind=\"{\n ...props,\n closable: props.closable === true ? true : undefined,\n closed: props.closed,\n }\"\n @bl-close=\"handleClose\"\n >\n <slot v-if=\"$slots['caption']\" name=\"caption\" />\n <slot v-if=\"$slots['default']\" />\n <slot v-if=\"$slots['action']\" name=\"action\" />\n </bl-alert>\n</template>\n","<script setup lang=\"ts\">\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { BadgeProps } from \"./badge.types\";\n\nconst props = withDefaults(defineProps<BadgeProps>(), {\n size: \"medium\",\n icon: undefined,\n});\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-badge v-bind=\"props\">\n <slot />\n </bl-badge>\n</template>\n","<script setup lang=\"ts\">\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { ButtonProps } from \"./button.types\";\n\nconst props = withDefaults(defineProps<ButtonProps>(), {\n variant: \"primary\",\n kind: \"default\",\n size: \"medium\",\n disabled: undefined,\n loading: undefined,\n loadingLabel: \"...\",\n label: undefined,\n href: undefined,\n icon: undefined,\n target: undefined,\n type: \"button\",\n autofocus: undefined,\n});\n\nconst emit = defineEmits<{\n click: [event: CustomEvent<MouseEvent>];\n}>();\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-button\n v-bind=\"{\n ...props,\n loading: props.loading === true ? true : undefined,\n }\"\n :style=\"{\n '--bl-color-primary': kind === 'custom' ? customClass?.color : undefined,\n '--bl-color-primary-highlight':\n kind === 'custom' ? customClass?.highlightColor : undefined,\n }\"\n @bl-click=\"emit('click', $event)\"\n >\n <slot>{{ label }}</slot>\n </bl-button>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Icon Component\n *\n * A Vue UI kit component for Baklava's `bl-icon` web component.\n * Provides icon display with support for name, size, color, and custom slot content.\n * Size and color are applied via CSS (font-size, color) as per Baklava's API.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvIcon name=\"home\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With size -->\n * <template>\n * <BvIcon name=\"settings\" size=\"24px\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With color -->\n * <template>\n * <BvIcon name=\"info\" color=\"#0066cc\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Custom slot for custom SVG -->\n * <template>\n * <BvIcon>\n * <svg>...</svg>\n * </BvIcon>\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { IconProps } from \"./icon.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<IconProps>(), {\n name: undefined,\n size: undefined,\n color: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the SVG icon has loaded.\n *\n * @param {string} detail - Event detail from bl-load.\n */\n load: [detail: string];\n /**\n * Emitted when the SVG icon failed to load.\n *\n * @param {string} detail - Event detail from bl-error.\n */\n error: [detail: string];\n}>();\n\n/**\n * Computed style object for size and color.\n * Maps to Baklava's font-size and color CSS properties.\n */\nconst iconStyle = computed(() => ({\n ...(props.size && { fontSize: props.size }),\n ...(props.color && { color: props.color }),\n}));\n\n/**\n * Lifecycle hook: Component mounted.\n * Loads Baklava resources (icons, styles).\n */\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-icon\n :name=\"props.name\"\n :style=\"iconStyle\"\n @bl-load=\"emit('load', ($event as CustomEvent<string>).detail)\"\n @bl-error=\"emit('error', ($event as CustomEvent<string>).detail)\"\n >\n <slot />\n </bl-icon>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Link Component\n *\n * A Vue UI kit component for Baklava's `bl-link` web component for navigation links.\n * Supports inline (text within content) and standalone (button-like) variants with\n * full TypeScript support and HTML anchor attributes (href, target, rel, etc.).\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvLink href=\"/about\">About</BvLink>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Inline variant (default) -->\n * <template>\n * <p>Visit our <BvLink href=\"/docs\">documentation</BvLink> for more info.</p>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Standalone variant with size -->\n * <template>\n * <BvLink href=\"/signup\" variant=\"standalone\" size=\"large\">\n * Sign up\n * </BvLink>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With icon slot -->\n * <template>\n * <BvLink href=\"/settings\" variant=\"standalone\">\n * <template #icon><BvIcon name=\"settings\" /></template>\n * Settings\n * </BvLink>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- External link with target -->\n * <template>\n * <BvLink href=\"https://example.com\" target=\"_blank\" rel=\"noopener noreferrer\">\n * External site\n * </BvLink>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Disabled state -->\n * <template>\n * <BvLink href=\"/disabled\" :disabled=\"true\">Disabled link</BvLink>\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { LinkProps } from \"./link.types\";\n\nconst props = withDefaults(defineProps<LinkProps>(), {\n href: undefined,\n target: undefined,\n disabled: undefined,\n variant: undefined,\n size: undefined,\n kind: undefined,\n ariaLabel: undefined,\n rel: undefined,\n hreflang: undefined,\n type: undefined,\n referrerPolicy: undefined,\n download: undefined,\n ping: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emitted when the link is clicked. */\n click: [event: CustomEvent];\n}>();\n\n/** Props to pass to bl-link. When disabled, omit href so navigation is prevented. */\nconst linkBindings = computed(() => {\n const { disabled, href, ...rest } = props;\n return {\n ...rest,\n href: disabled ? undefined : href,\n \"aria-disabled\": disabled ? \"true\" : undefined,\n tabindex: disabled ? -1 : undefined,\n };\n});\n\n/** Prevents navigation and click when disabled. */\nfunction handleClick(event: CustomEvent) {\n if (props.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n emit(\"click\", event);\n}\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-link\n v-bind=\"linkBindings\"\n :class=\"{ 'bv-link--disabled': disabled }\"\n @bl-click=\"handleClick\"\n >\n <slot v-if=\"$slots['icon']\" name=\"icon\" />\n <slot />\n </bl-link>\n</template>\n\n<style scoped>\n.bv-link--disabled {\n pointer-events: none;\n opacity: 0.5;\n cursor: not-allowed;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Banner Component\n *\n * A full-width banner displayed at the top of a page to inform users about important information.\n * Similar to Nuxt UI's UBanner. Supports title, icon, color variants, closable state with optional\n * localStorage persistence, action buttons, and link mode.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvBanner title=\"This is an important message\" />\n * </template>\n * ```\n */\nimport { computed, onMounted, ref } from \"vue\";\nimport BvButton from \"../button/Button.vue\";\nimport BvIcon from \"../icon/Icon.vue\";\nimport BvLink from \"../link/Link.vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { BannerAction, BannerProps } from \"./banner.types\";\n\nconst STORAGE_PREFIX = \"banner-\";\n\nconst props = withDefaults(defineProps<BannerProps>(), {\n title: undefined,\n icon: undefined,\n color: \"primary\",\n close: false,\n closeIcon: \"close\",\n id: undefined,\n to: undefined,\n target: undefined,\n actions: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emitted when the close button is clicked */\n close: [];\n}>();\n\nconst isDismissed = ref(false);\n\nfunction getStorageKey(): string | null {\n if (!props.id || typeof props.id !== \"string\") return null;\n const sanitized = props.id.replace(/[^a-zA-Z0-9_-]/g, \"\");\n return sanitized ? `${STORAGE_PREFIX}${sanitized}` : null;\n}\n\nfunction checkDismissed(): void {\n const key = getStorageKey();\n if (!key || !props.close || typeof window === \"undefined\") return;\n try {\n const stored = localStorage.getItem(key);\n if (stored === \"true\") {\n isDismissed.value = true;\n }\n } catch {\n /* ignore */\n }\n}\n\nfunction handleClose(e?: Event): void {\n e?.preventDefault();\n e?.stopPropagation();\n const key = getStorageKey();\n if (key && typeof window !== \"undefined\") {\n try {\n localStorage.setItem(key, \"true\");\n } catch {\n /* ignore */\n }\n }\n isDismissed.value = true;\n emit(\"close\");\n}\n\nfunction handleActionClick(action: BannerAction): void {\n action.onClick?.();\n}\n\nconst colorStyles = computed(() => {\n const colorMap: Record<string, { bg: string; text: string }> = {\n primary: {\n bg: \"var(--bl-color-primary)\",\n text: \"var(--bl-color-primary-contrast, #fff)\",\n },\n success: {\n bg: \"var(--bl-color-success)\",\n text: \"var(--bl-color-success-contrast, #fff)\",\n },\n danger: {\n bg: \"var(--bl-color-danger)\",\n text: \"var(--bl-color-danger-contrast, #fff)\",\n },\n warning: {\n bg: \"var(--bl-color-warning)\",\n text: \"var(--bl-color-warning-contrast, #fff)\",\n },\n info: {\n bg: \"var(--bl-color-info)\",\n text: \"var(--bl-color-info-contrast, #fff)\",\n },\n neutral: {\n bg: \"var(--bl-color-neutral-darkest)\",\n text: \"var(--bl-color-neutral-full, #fff)\",\n },\n };\n const c = colorMap[props.color] ?? colorMap[\"primary\"];\n return {\n backgroundColor: c.bg,\n color: c.text,\n };\n});\n\nonMounted(() => {\n loadBaklavaResources();\n checkDismissed();\n});\n</script>\n\n<template>\n <div v-if=\"!isDismissed\" class=\"bv-banner\" :style=\"colorStyles\" role=\"banner\">\n <component\n :is=\"to ? BvLink : 'div'\"\n v-bind=\"to ? { href: to, target } : {}\"\n class=\"bv-banner__inner\"\n :class=\"{ 'bv-banner__inner--link': !!to }\"\n >\n <div class=\"bv-banner__content\">\n <slot name=\"leading\">\n <BvIcon v-if=\"icon\" :name=\"icon\" class=\"bv-banner__icon\" />\n </slot>\n <div class=\"bv-banner__title\">\n <slot name=\"title\">\n {{ title }}\n </slot>\n </div>\n <div\n v-if=\"actions?.length || $slots['actions']\"\n class=\"bv-banner__actions\"\n @click.stop\n >\n <slot name=\"actions\">\n <template v-for=\"(action, idx) in actions\" :key=\"idx\">\n <BvButton\n v-if=\"action\"\n :variant=\"action.variant ?? 'tertiary'\"\n :label=\"action.label\"\n :icon=\"action.icon ?? action.trailingIcon\"\n size=\"small\"\n class=\"bv-banner__action-btn\"\n @click=\"handleActionClick(action)\"\n />\n </template>\n </slot>\n </div>\n </div>\n </component>\n <div v-if=\"close\" class=\"bv-banner__close\">\n <slot name=\"close\">\n <button\n type=\"button\"\n class=\"bv-banner__close-btn\"\n :aria-label=\"'Close banner'\"\n @click=\"handleClose\"\n >\n <BvIcon :name=\"closeIcon\" :color=\"colorStyles.color\" />\n </button>\n </slot>\n </div>\n </div>\n</template>\n\n<style scoped>\n.bv-banner {\n position: relative;\n z-index: 50;\n width: 100%;\n min-height: 3rem;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.75rem;\n padding: 0 1rem;\n transition: background-color 0.2s ease;\n}\n\n.bv-banner__inner {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n text-decoration: none;\n color: inherit;\n}\n\n.bv-banner__inner--link:hover {\n opacity: 0.95;\n}\n\n.bv-banner__content {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n min-width: 0;\n flex: 1;\n}\n\n.bv-banner__icon {\n flex-shrink: 0;\n width: 1.25rem;\n height: 1.25rem;\n pointer-events: none;\n}\n\n.bv-banner__title {\n flex: 1;\n min-width: 0;\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.bv-banner__actions {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n flex-shrink: 0;\n}\n\n.bv-banner__action-btn {\n --bl-color-primary: currentColor;\n --bl-color-primary-contrast: currentColor;\n}\n\n.bv-banner__close {\n flex-shrink: 0;\n}\n\n.bv-banner__close-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.25rem;\n margin: 0 -0.25rem;\n background: transparent;\n border: none;\n border-radius: 0.25rem;\n cursor: pointer;\n color: inherit;\n}\n\n.bv-banner__close-btn:hover {\n background: rgba(255, 255, 255, 0.2);\n}\n\n.bv-banner__close-btn:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Checkbox Component\n *\n * A Vue UI kit component for Baklava's `bl-checkbox` and `bl-checkbox-group` web components.\n * Can be used as either a single checkbox or as a group container for multiple checkboxes.\n *\n * @component\n * @example\n * ```vue\n * <!-- Single checkbox -->\n * <template>\n * <BvCheckbox v-model=\"checked\" label=\"I agree\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Checkbox group -->\n * <template>\n * <BvCheckbox v-model=\"selected\" :items=\"items\">\n * <template #item=\"{ item }\">{{ item.label }}</template>\n * </BvCheckbox>\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { CheckboxProps } from \"./checkbox.types\";\n\nconst props = withDefaults(defineProps<CheckboxProps>(), {\n modelValue: undefined,\n disabled: undefined,\n indeterminate: undefined,\n value: undefined,\n name: undefined,\n label: undefined,\n items: undefined,\n});\n\nconst emit = defineEmits<{\n \"update:modelValue\": [value: boolean | (string | number)[]];\n change: [event: CustomEvent];\n input: [event: CustomEvent];\n}>();\n\n/**\n * Determines if the component should act as a group container.\n * When `items` prop is provided and is an array, it acts as a group.\n */\nconst isGroupMode = computed(\n () => props.items !== undefined && Array.isArray(props.items),\n);\n\n/**\n * Normalized model value for group mode (always array).\n */\nconst groupValue = computed(() => {\n const val = props.modelValue;\n if (Array.isArray(val)) return val;\n return [];\n});\n\n/**\n * Check if an item is selected in group mode.\n */\nconst isItemChecked = (item: { value: string | number }) => {\n return groupValue.value.includes(item.value);\n};\n\n/**\n * Handles the change event from the single checkbox.\n */\nconst handleSingleChange = (event: CustomEvent) => {\n const checked = (event.target as HTMLInputElement & { checked?: boolean })\n ?.checked;\n emit(\"change\", event);\n emit(\"update:modelValue\", checked ?? false);\n};\n\n/**\n * Handles the change event from the checkbox group.\n * Normalizes value to array (Baklava may emit array or comma-separated string).\n */\nconst handleGroupChange = (event: CustomEvent) => {\n emit(\"change\", event);\n const target = event.target as { value?: unknown };\n let newValue: (string | number)[];\n if (Array.isArray(target?.value)) {\n newValue = target.value as (string | number)[];\n } else if (typeof target?.value === \"string\") {\n newValue = target.value ? target.value.split(\",\").map((s) => s.trim()) : [];\n } else {\n newValue = [];\n }\n emit(\"update:modelValue\", newValue);\n};\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <!-- Group mode: render as bl-checkbox-group -->\n <bl-checkbox-group\n v-if=\"isGroupMode\"\n :value=\"groupValue\"\n @bl-checkbox-group-change=\"handleGroupChange\"\n >\n <bl-checkbox\n v-for=\"(item, index) in props.items\"\n :key=\"String(item.value)\"\n v-bind=\"{\n value: item.value,\n checked: isItemChecked(item),\n disabled: item.disabled === true ? true : undefined,\n indeterminate: item.indeterminate === true ? true : undefined,\n name: item.name,\n }\"\n >\n <slot name=\"item\" :item=\"item\" :index=\"index\">\n {{ item.label }}\n </slot>\n </bl-checkbox>\n </bl-checkbox-group>\n\n <!-- Single checkbox mode: render as bl-checkbox -->\n <bl-checkbox\n v-else\n v-bind=\"{\n checked:\n props.modelValue === true\n ? true\n : props.modelValue === false\n ? false\n : undefined,\n disabled: props.disabled === true ? true : undefined,\n indeterminate: props.indeterminate === true ? true : undefined,\n value: props.value,\n name: props.name,\n }\"\n @bl-change=\"handleSingleChange\"\n @bl-input=\"emit('input', $event)\"\n >\n <slot>{{ label }}</slot>\n </bl-checkbox>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Chip Component\n *\n * A wrapper that displays a badge/indicator (text or number) positioned on top of another element.\n * Similar to Nuxt UI's UChip. Used for notification counts, status indicators, and standalone badges.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvChip :text=\"5\">\n * <BvButton icon=\"mail\" />\n * </BvChip>\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { ChipProps } from \"./chip.types\";\n\nconst props = withDefaults(defineProps<ChipProps>(), {\n text: undefined,\n color: \"primary\",\n size: \"md\",\n position: \"top-right\",\n inset: false,\n standalone: false,\n show: true,\n});\n\nconst colorStyles = computed(() => {\n const colorMap: Record<string, { backgroundColor: string; color: string }> = {\n primary: {\n backgroundColor: \"var(--bl-color-primary)\",\n color: \"var(--bl-color-primary-contrast, #fff)\",\n },\n success: {\n backgroundColor: \"var(--bl-color-success)\",\n color: \"var(--bl-color-success-contrast, #fff)\",\n },\n danger: {\n backgroundColor: \"var(--bl-color-danger)\",\n color: \"var(--bl-color-danger-contrast, #fff)\",\n },\n warning: {\n backgroundColor: \"var(--bl-color-warning)\",\n color: \"var(--bl-color-warning-contrast, #fff)\",\n },\n info: {\n backgroundColor: \"var(--bl-color-info)\",\n color: \"var(--bl-color-info-contrast, #fff)\",\n },\n neutral: {\n backgroundColor: \"var(--bl-color-neutral-darkest)\",\n color: \"var(--bl-color-neutral-full, #fff)\",\n },\n };\n return colorMap[props.color] ?? colorMap[\"primary\"];\n});\n\nconst sizeClass = computed(() => `bv-chip__badge--${props.size}`);\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <template v-if=\"standalone\">\n <span\n v-if=\"show\"\n class=\"bv-chip bv-chip--standalone\"\n :class=\"sizeClass\"\n :style=\"colorStyles\"\n >\n <slot name=\"content\">\n {{ text }}\n </slot>\n </span>\n </template>\n <div v-else class=\"bv-chip\" :class=\"{ 'bv-chip--has-content': $slots['default'] }\">\n <slot />\n <span\n v-if=\"show\"\n class=\"bv-chip__badge\"\n :class=\"[sizeClass, `bv-chip__badge--${position}`, { 'bv-chip__badge--inset': inset }]\"\n :style=\"colorStyles\"\n >\n <slot name=\"content\">\n {{ text }}\n </slot>\n </span>\n </div>\n</template>\n\n<style scoped>\n.bv-chip {\n position: relative;\n display: inline-flex;\n}\n\n.bv-chip--standalone {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 9999px;\n font-weight: 600;\n white-space: nowrap;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n.bv-chip--has-content .bv-chip__badge {\n position: absolute;\n}\n\n.bv-chip__badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 1.25em;\n border-radius: 9999px;\n font-weight: 600;\n white-space: nowrap;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n/* Position: top-right (default) */\n.bv-chip__badge--top-right {\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n}\n\n.bv-chip__badge--top-right.bv-chip__badge--inset {\n top: 2px;\n right: 2px;\n transform: translate(50%, -50%);\n}\n\n/* Position: bottom-right */\n.bv-chip__badge--bottom-right {\n top: 100%;\n right: 0;\n transform: translate(50%, 50%);\n}\n\n.bv-chip__badge--bottom-right.bv-chip__badge--inset {\n top: calc(100% - 2px);\n right: 2px;\n transform: translate(50%, 50%);\n}\n\n/* Position: top-left */\n.bv-chip__badge--top-left {\n top: 0;\n left: 0;\n transform: translate(-50%, -50%);\n}\n\n.bv-chip__badge--top-left.bv-chip__badge--inset {\n top: 2px;\n left: 2px;\n transform: translate(-50%, -50%);\n}\n\n/* Position: bottom-left */\n.bv-chip__badge--bottom-left {\n top: 100%;\n left: 0;\n transform: translate(-50%, 50%);\n}\n\n.bv-chip__badge--bottom-left.bv-chip__badge--inset {\n top: calc(100% - 2px);\n left: 2px;\n transform: translate(-50%, 50%);\n}\n\n/* Size variants */\n.bv-chip__badge--xs {\n font-size: 0.625rem;\n padding: 0 0.25rem;\n min-width: 1em;\n height: 1em;\n}\n\n.bv-chip__badge--sm {\n font-size: 0.6875rem;\n padding: 0 0.3125rem;\n min-width: 1.125em;\n height: 1.125em;\n}\n\n.bv-chip__badge--md {\n font-size: 0.75rem;\n padding: 0 0.375rem;\n min-width: 1.25em;\n height: 1.25em;\n}\n\n.bv-chip__badge--lg {\n font-size: 0.875rem;\n padding: 0 0.5rem;\n min-width: 1.5em;\n height: 1.5em;\n}\n\n/* Standalone size classes */\n.bv-chip--standalone.bv-chip__badge--xs {\n font-size: 0.625rem;\n padding: 0 0.25rem;\n min-width: 1em;\n height: 1em;\n}\n\n.bv-chip--standalone.bv-chip__badge--sm {\n font-size: 0.6875rem;\n padding: 0 0.3125rem;\n min-width: 1.125em;\n height: 1.125em;\n}\n\n.bv-chip--standalone.bv-chip__badge--md {\n font-size: 0.75rem;\n padding: 0 0.375rem;\n min-width: 1.25em;\n height: 1.25em;\n}\n\n.bv-chip--standalone.bv-chip__badge--lg {\n font-size: 0.875rem;\n padding: 0 0.5rem;\n min-width: 1.5em;\n height: 1.5em;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Datepicker Component\n *\n * A Vue UI kit component for Baklava's `bl-datepicker` web component with v-model support.\n * Provides a calendar picker input for date selection with min/max constraints,\n * placeholder text, and standard form states.\n *\n * Supports single date, multiple dates, and date range selection modes.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage (single) -->\n * <template>\n * <BvDatepicker v-model=\"date\" label=\"Select date\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Multiple dates -->\n * <template>\n * <BvDatepicker v-model=\"dates\" type=\"multiple\" label=\"Select dates\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Date range -->\n * <template>\n * <BvDatepicker v-model=\"range\" type=\"range\" label=\"Select range\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With min/max constraints -->\n * <template>\n * <BvDatepicker\n * v-model=\"date\"\n * label=\"Date range\"\n * placeholder=\"Select within range\"\n * :min=\"minDate\"\n * :max=\"maxDate\"\n * />\n * </template>\n * ```\n */\nimport { computed, nextTick, onMounted, ref, watch } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { DatepickerProps, DatepickerType } from \"./datepicker.types\";\n\nconst props = withDefaults(defineProps<DatepickerProps>(), {\n modelValue: undefined,\n type: \"single\",\n label: undefined,\n placeholder: undefined,\n disabled: undefined,\n min: undefined,\n max: undefined,\n required: undefined,\n size: undefined,\n labelFixed: undefined,\n helpText: undefined,\n});\n\nconst emit = defineEmits<{\n \"update:modelValue\": [value: string | string[] | [string, string] | null];\n change: [event: CustomEvent<Date[]>];\n}>();\n\n/**\n * Converts a Date to ISO date string (YYYY-MM-DD) for v-model consistency.\n */\nfunction toISODateString(date: Date): string {\n if (Number.isNaN(date.getTime())) return \"\";\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\n/**\n * Converts modelValue to Baklava value format (comma-separated string).\n * Baklava expects comma-separated ISO date strings (YYYY-MM-DD).\n */\nconst baklavaValue = computed(() => {\n const val = props.modelValue;\n if (val == null || (Array.isArray(val) && val.length === 0)) return \"\";\n if (Array.isArray(val)) return val.map((d) => String(d)).join(\",\");\n return String(val);\n});\n\n/**\n * Handles the bl-datepicker-change event from Baklava.\n * Converts Date[] to the appropriate format based on type and emits update:modelValue.\n */\nconst skipNextValueSync = ref(false);\n\nfunction handleDatepickerChange(event: CustomEvent<Date[]>) {\n const rawDates = event.detail ?? [];\n const dates = rawDates.filter(\n (d) => d instanceof Date && !Number.isNaN(d.getTime()),\n );\n const type: DatepickerType = props.type ?? \"single\";\n\n let value: string | string[] | [string, string] | null;\n\n if (dates.length === 0) {\n value = type === \"multiple\" ? [] : null;\n } else if (type === \"single\") {\n value = toISODateString(dates[0]);\n } else if (type === \"multiple\") {\n value = dates.map(toISODateString);\n } else if (type === \"range\") {\n value = [\n toISODateString(dates[0]),\n toISODateString(dates[1] ?? dates[0]),\n ] as [string, string];\n } else {\n value = null;\n }\n\n skipNextValueSync.value = true;\n emit(\"change\", event);\n emit(\"update:modelValue\", value);\n nextTick(() => {\n skipNextValueSync.value = false;\n });\n}\n\nconst datepickerRef = ref<HTMLElement | null>(null);\n\n// Sync value to web component property when modelValue changes externally.\n// Skip sync when change originated from datepicker to avoid duplicate values in multiple/range mode.\nwatch(\n [datepickerRef, baklavaValue],\n ([el, val]) => {\n if (skipNextValueSync.value || !el) return;\n (el as HTMLUnknownElement & { value?: string }).value = val ?? \"\";\n },\n { immediate: true },\n);\n\nonMounted(async () => {\n loadBaklavaResources();\n // Wait for custom element to be defined before value can be set\n if (!customElements.get(\"bl-datepicker\")) {\n await customElements.whenDefined(\"bl-datepicker\");\n }\n});\n</script>\n\n<template>\n <bl-datepicker\n ref=\"datepickerRef\"\n :type=\"props.type\"\n :label=\"props.label\"\n :placeholder=\"props.placeholder\"\n :disabled=\"props.disabled === true ? true : undefined\"\n :required=\"props.required === true ? true : undefined\"\n :size=\"props.size\"\n :label-fixed=\"props.labelFixed === true ? true : undefined\"\n :help-text=\"props.helpText\"\n :min-date=\"props.min ? new Date(props.min) : undefined\"\n :max-date=\"props.max ? new Date(props.max) : undefined\"\n @bl-datepicker-change=\"handleDatepickerChange\"\n >\n <slot />\n </bl-datepicker>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Dialog Component\n *\n * A Vue UI kit component for Baklava's `bl-dialog` web component.\n * Provides a modal overlay for confirmations, forms, and important content\n * with support for header and footer slots, controllable visibility, and programmatic open/close.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage with v-model -->\n * <template>\n * <BvButton @click=\"showDialog = true\">Open Dialog</BvButton>\n * <BvDialog v-model:open=\"showDialog\" caption=\"Dialog Title\">\n * <p>Dialog content goes here.</p>\n * </BvDialog>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With header and footer slots -->\n * <template>\n * <BvDialog v-model:open=\"showDialog\" caption=\"Confirm Action\">\n * <p>Are you sure you want to proceed?</p>\n * <template #footer>\n * <BvButton variant=\"tertiary\" @click=\"showDialog = false\">Cancel</BvButton>\n * <BvButton variant=\"primary\" @click=\"showDialog = false\">Confirm</BvButton>\n * </template>\n * </BvDialog>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Closable with backdrop control -->\n * <template>\n * <BvDialog v-model:open=\"showDialog\" caption=\"Closable\" :closable=\"true\" :backdrop=\"true\">\n * <p>This dialog has a close button and backdrop click.</p>\n * </BvDialog>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Programmatic control via ref -->\n * <template>\n * <BvButton @click=\"dialogRef?.open()\">Open</BvButton>\n * <BvButton @click=\"dialogRef?.close()\">Close</BvButton>\n * <BvDialog ref=\"dialogRef\" caption=\"Programmatic\">\n * <p>Opened and closed via ref methods.</p>\n * </BvDialog>\n * </template>\n * ```\n */\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { DialogProps } from \"./dialog.types\";\n\nconst SIZE_TO_WIDTH: Record<string, string> = {\n small: \"320px\",\n medium: \"424px\",\n large: \"560px\",\n};\n\nconst props = withDefaults(defineProps<DialogProps>(), {\n open: false,\n caption: undefined,\n closable: undefined,\n backdrop: undefined,\n size: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emitted when visibility changes. Use for two-way binding. */\n \"update:open\": [open: boolean];\n /** Emitted when the dialog is opened. */\n open: [];\n /** Emitted when the dialog is closed. */\n close: [];\n}>();\n\n/** Reference to the underlying bl-dialog element. */\nconst dialogRef = ref<HTMLElement | null>(null);\n\n/** Computed style for dialog width based on size prop. */\nconst dialogStyle = computed(() => {\n if (!props.size) return undefined;\n const width = SIZE_TO_WIDTH[props.size.toLowerCase()] ?? props.size;\n return { \"--bl-dialog-width\": width };\n});\n\n/** Handles bl-dialog-open event. Syncs state and emits. */\nconst handleOpen = () => {\n emit(\"update:open\", true);\n emit(\"open\");\n};\n\n/** Handles bl-dialog-close event. Syncs state and emits. */\nconst handleClose = () => {\n emit(\"update:open\", false);\n emit(\"close\");\n};\n\n/**\n * Handles bl-dialog-request-close event. Prevents closing when closable or backdrop\n * is explicitly set to false for the given close source.\n */\nconst handleRequestClose = (\n e: CustomEvent<{ source: \"close-button\" | \"keyboard\" | \"backdrop\" }>,\n) => {\n if (props.closable === false && e.detail.source === \"close-button\") {\n e.preventDefault();\n }\n if (props.backdrop === false && e.detail.source === \"backdrop\") {\n e.preventDefault();\n }\n};\n\n/** Syncs props.open to the bl-dialog element's open property. */\nfunction getBlDialog(el: HTMLElement | null): { open: boolean } | null {\n return el as unknown as { open: boolean } | null;\n}\n\nwatch(\n () => props.open,\n (newValue) => {\n const blDialog = getBlDialog(dialogRef.value);\n if (blDialog && blDialog.open !== newValue) {\n blDialog.open = newValue;\n }\n },\n { immediate: true },\n);\n\nonMounted(() => {\n loadBaklavaResources();\n\n const blDialog = getBlDialog(dialogRef.value);\n if (blDialog && blDialog.open !== props.open) {\n blDialog.open = props.open;\n }\n});\n\ndefineExpose({\n /** Opens the dialog programmatically. */\n open: () => {\n const blDialog = getBlDialog(dialogRef.value);\n if (blDialog) blDialog.open = true;\n },\n /** Closes the dialog programmatically. */\n close: () => {\n const blDialog = getBlDialog(dialogRef.value);\n if (blDialog) blDialog.open = false;\n },\n});\n</script>\n\n<template>\n <bl-dialog\n ref=\"dialogRef\"\n :open=\"open\"\n :caption=\"caption\"\n :style=\"dialogStyle\"\n @bl-dialog-open=\"handleOpen\"\n @bl-dialog-close=\"handleClose\"\n @bl-dialog-request-close=\"handleRequestClose\"\n >\n <div>\n <slot v-if=\"$slots['header']\" name=\"header\" />\n <slot />\n </div>\n <div v-if=\"$slots['footer']\" slot=\"secondary-action\">\n <slot name=\"footer\" />\n </div>\n </bl-dialog>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Drawer Component\n *\n * A Vue UI kit component for Baklava's `bl-drawer` web component.\n * Provides a side drawer for supplemental content with support for caption,\n * embedded iframe content, external link, and programmable width.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvButton @click=\"showDrawer = true\">Open Drawer</BvButton>\n * <BvDrawer v-model:open=\"showDrawer\">\n * <p>Drawer content goes here.</p>\n * </BvDrawer>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With caption -->\n * <template>\n * <BvDrawer v-model:open=\"showDrawer\" caption=\"Drawer Title\">\n * <p>Content with title.</p>\n * </BvDrawer>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With embed URL (iframe) -->\n * <template>\n * <BvDrawer v-model:open=\"showDrawer\" embed-url=\"https://example.com\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With width -->\n * <template>\n * <BvDrawer v-model:open=\"showDrawer\" width=\"large\" caption=\"Wide Drawer\">\n * <p>Wider drawer content.</p>\n * </BvDrawer>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Programmatic control via ref -->\n * <template>\n * <BvButton @click=\"drawerRef?.open()\">Open</BvButton>\n * <BvButton @click=\"drawerRef?.close()\">Close</BvButton>\n * <BvDrawer ref=\"drawerRef\" caption=\"Programmatic\">\n * <p>Opened and closed via ref methods.</p>\n * </BvDrawer>\n * </template>\n * ```\n */\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { DrawerProps } from \"./drawer.types\";\n\nconst WIDTH_TO_PX: Record<string, string> = {\n small: \"320px\",\n medium: \"424px\",\n large: \"560px\",\n};\n\nconst props = withDefaults(defineProps<DrawerProps>(), {\n open: false,\n caption: undefined,\n embedUrl: undefined,\n externalLink: undefined,\n width: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emitted when visibility changes. Use for two-way binding. */\n \"update:open\": [open: boolean];\n /** Emitted when the drawer is opened. */\n open: [];\n /** Emitted when the drawer is closed. */\n close: [];\n}>();\n\n/** Reference to the underlying bl-drawer element. */\nconst drawerRef = ref<HTMLElement | null>(null);\n\n/** Computed width for bl-drawer. Maps small/medium/large to px or passes CSS value. */\nconst drawerWidth = computed(() => {\n if (!props.width) return undefined;\n const key = props.width.toLowerCase();\n return WIDTH_TO_PX[key] ?? props.width;\n});\n\n/** Handles bl-drawer-open event. Syncs state and emits. */\nconst handleOpen = () => {\n emit(\"update:open\", true);\n emit(\"open\");\n};\n\n/** Handles bl-drawer-close event. Syncs state and emits. */\nconst handleClose = () => {\n emit(\"update:open\", false);\n emit(\"close\");\n};\n\n/** Syncs props.open to the bl-drawer element's open property. */\nfunction getBlDrawer(el: HTMLElement | null): { open: boolean } | null {\n return el as unknown as { open: boolean } | null;\n}\n\nwatch(\n () => props.open,\n (newValue) => {\n const blDrawer = getBlDrawer(drawerRef.value);\n if (blDrawer && blDrawer.open !== newValue) {\n blDrawer.open = newValue;\n }\n },\n { immediate: true },\n);\n\nonMounted(() => {\n loadBaklavaResources();\n\n const blDrawer = getBlDrawer(drawerRef.value);\n if (blDrawer && blDrawer.open !== props.open) {\n blDrawer.open = props.open;\n }\n});\n\ndefineExpose({\n /** Opens the drawer programmatically. */\n open: () => {\n const blDrawer = getBlDrawer(drawerRef.value);\n if (blDrawer) blDrawer.open = true;\n },\n /** Closes the drawer programmatically. */\n close: () => {\n const blDrawer = getBlDrawer(drawerRef.value);\n if (blDrawer) blDrawer.open = false;\n },\n});\n</script>\n\n<template>\n <bl-drawer\n ref=\"drawerRef\"\n :open=\"open\"\n :caption=\"caption\"\n :embed-url=\"embedUrl\"\n :external-link=\"externalLink\"\n :width=\"drawerWidth\"\n @bl-drawer-open=\"handleOpen\"\n @bl-drawer-close=\"handleClose\"\n >\n <slot />\n </bl-drawer>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Dropdown Component\n *\n * A Vue UI kit component for Baklava's `bl-dropdown`, `bl-dropdown-group`, and `bl-dropdown-item`\n * web components. Can be used in two modes: slot mode (custom content via slots) or items\n * mode (declarative menu items with optional grouping).\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage with label and items -->\n * <template>\n * <BvDropdown label=\"Actions\" :items=\"menuItems\">\n * <template #item=\"{ item }\">\n * {{ item.caption }}\n * </template>\n * </BvDropdown>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Items mode with groups -->\n * <template>\n * <BvDropdown label=\"Menu\" :items=\"groupedItems\">\n * <template #item=\"{ item }\">\n * {{ item.caption }}\n * </template>\n * </BvDropdown>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Programmatic control via ref -->\n * <template>\n * <BvButton @click=\"dropdownRef?.open()\">Open</BvButton>\n * <BvButton @click=\"dropdownRef?.close()\">Close</BvButton>\n * <BvDropdown ref=\"dropdownRef\" label=\"Menu\" :items=\"items\">\n * <template #item=\"{ item }\">{{ item.caption }}</template>\n * </BvDropdown>\n * </template>\n * ```\n */\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { DropdownItem, DropdownProps } from \"./dropdown.types\";\n\nconst props = withDefaults(defineProps<DropdownProps>(), {\n open: false,\n placement: undefined,\n disabled: false,\n trigger: undefined,\n label: \"Menu\",\n variant: undefined,\n kind: undefined,\n size: undefined,\n icon: undefined,\n items: undefined,\n});\n\nconst emit = defineEmits<{\n /** Emitted when visibility changes. Use for two-way binding. */\n \"update:open\": [open: boolean];\n /** Emitted when the dropdown is opened. */\n open: [];\n /** Emitted when the dropdown is closed. */\n close: [];\n /** Emitted when a dropdown item is clicked (from bl-dropdown-item-click). */\n select: [event: CustomEvent];\n}>();\n\n/** Reference to the underlying bl-dropdown element. */\nconst dropdownRef = ref<HTMLElement | null>(null);\n\n/** Determines if the component is in items mode (using items prop). */\nconst isItemsMode = computed(\n () => Array.isArray(props.items) && props.items.length > 0,\n);\n\n/** Groups items by groupCaption for rendering bl-dropdown-group. */\nconst groupedItems = computed(() => {\n if (!props.items) return [];\n const groups = new Map<\n string | undefined,\n { item: DropdownItem; index: number }[]\n >();\n props.items.forEach((item, index) => {\n const key = item.groupCaption ?? undefined;\n const list = groups.get(key) ?? [];\n list.push({ item, index });\n groups.set(key, list);\n });\n return Array.from(groups.entries()).map(([groupCaption, entries]) => ({\n groupCaption: groupCaption || undefined,\n entries,\n }));\n});\n\n/** Handles bl-dropdown-open event. Syncs state and emits. */\nconst handleOpen = () => {\n emit(\"update:open\", true);\n emit(\"open\");\n};\n\n/** Handles bl-dropdown-close event. Syncs state and emits. */\nconst handleClose = () => {\n emit(\"update:open\", false);\n emit(\"close\");\n};\n\n/** Handles bl-dropdown-item-click from items. Bubbles as select event. */\nconst handleItemClick = (event: CustomEvent) => {\n emit(\"select\", event);\n};\n\ntype BlDropdownElement = {\n opened?: boolean;\n open: () => void;\n close: () => void;\n};\n\nfunction getBlDropdown(el: HTMLElement | null): BlDropdownElement | null {\n return el as unknown as BlDropdownElement | null;\n}\n\n/** Syncs props.open to the bl-dropdown element. */\nwatch(\n () => props.open,\n (newValue) => {\n const blDropdown = getBlDropdown(dropdownRef.value);\n if (blDropdown) {\n if (newValue && !blDropdown.opened) {\n blDropdown.open();\n } else if (!newValue && blDropdown.opened) {\n blDropdown.close();\n }\n }\n },\n { immediate: true },\n);\n\nonMounted(() => {\n loadBaklavaResources();\n\n const blDropdown = getBlDropdown(dropdownRef.value);\n if (blDropdown && blDropdown.opened !== props.open) {\n if (props.open) {\n blDropdown.open();\n } else {\n blDropdown.close();\n }\n }\n});\n\ndefineExpose({\n /** Opens the dropdown programmatically. */\n open: () => {\n getBlDropdown(dropdownRef.value)?.open();\n },\n /** Closes the dropdown programmatically. */\n close: () => {\n getBlDropdown(dropdownRef.value)?.close();\n },\n /** Toggles the dropdown open/closed state. */\n toggle: () => {\n const blDropdown = getBlDropdown(dropdownRef.value);\n if (blDropdown) {\n if (blDropdown.opened) {\n blDropdown.close();\n } else {\n blDropdown.open();\n }\n }\n },\n});\n</script>\n\n<template>\n <bl-dropdown\n ref=\"dropdownRef\"\n v-bind=\"{\n label: props.label,\n variant: props.variant,\n kind: props.kind,\n size: props.size,\n icon: props.icon,\n disabled: props.disabled === true ? true : undefined,\n }\"\n @bl-dropdown-open=\"handleOpen\"\n @bl-dropdown-close=\"handleClose\"\n >\n <!-- Items mode: render bl-dropdown-group and bl-dropdown-item -->\n <template v-if=\"isItemsMode\">\n <template v-for=\"(group, gi) in groupedItems\" :key=\"gi\">\n <bl-dropdown-group\n v-if=\"group.groupCaption\"\n :caption=\"group.groupCaption\"\n >\n <bl-dropdown-item\n v-for=\"(entry, ii) in group.entries\"\n :key=\"`${gi}-${ii}`\"\n :icon=\"entry.item.icon\"\n :disabled=\"entry.item.disabled === true\"\n @bl-dropdown-item-click=\"handleItemClick\"\n >\n <slot name=\"item\" :item=\"entry.item\" :index=\"entry.index\">\n {{ entry.item.caption }}\n </slot>\n </bl-dropdown-item>\n </bl-dropdown-group>\n <template v-else>\n <bl-dropdown-item\n v-for=\"(entry, ii) in group.entries\"\n :key=\"`${gi}-${ii}`\"\n :icon=\"entry.item.icon\"\n :disabled=\"entry.item.disabled === true\"\n @bl-dropdown-item-click=\"handleItemClick\"\n >\n <slot name=\"item\" :item=\"entry.item\" :index=\"entry.index\">\n {{ entry.item.caption }}\n </slot>\n </bl-dropdown-item>\n </template>\n </template>\n </template>\n <!-- Slot mode: default slot for custom content -->\n <slot v-else />\n </bl-dropdown>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Tag Component\n *\n * A Vue UI kit component for Baklava's `bl-tag` web component for displaying tags or labels.\n * Supports selectable and removable (closable) variants, sizes, and icons.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvTag>Label</BvTag>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Closable tag -->\n * <template>\n * <BvTag closable @close=\"removeTag\">Removable</BvTag>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With icon -->\n * <template>\n * <BvTag icon=\"info\">With icon</BvTag>\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { TagProps } from \"./tag.types\";\n\nconst props = withDefaults(defineProps<TagProps>(), {\n variant: undefined,\n size: undefined,\n closable: undefined,\n icon: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the close button is clicked (removable/closable variant only).\n */\n close: [];\n /**\n * Emitted when a selectable tag is clicked. Payload contains the new selected state.\n */\n \"update:selected\": [selected: boolean];\n}>();\n\n/**\n * Handles bl-tag-click. For removable variant, emit 'close'. For selectable, emit 'update:selected'.\n */\nconst handleTagClick = (event: CustomEvent<{ value: string | null; selected: boolean }>) => {\n if (props.closable) {\n emit(\"close\");\n } else if (props.variant === \"selectable\" && event.detail) {\n emit(\"update:selected\", event.detail.selected);\n }\n};\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-tag\n v-bind=\"{\n ...props,\n variant: props.closable ? 'removable' : props.variant,\n closable: undefined,\n }\"\n @bl-tag-click=\"handleTagClick\"\n >\n <slot v-if=\"$slots['icon']\" name=\"icon\" />\n <slot />\n </bl-tag>\n</template>\n","<script setup lang=\"ts\">\n/**\n * FileUpload Component\n *\n * A custom file upload component with drag-and-drop zone, click-to-browse,\n * file list with remove, validation (size/type), and optional preview.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvFileUpload v-model=\"file\" label=\"Upload document\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Multiple with validation -->\n * <template>\n * <BvFileUpload\n * v-model=\"files\"\n * multiple\n * accept=\"image/*\"\n * :max-size=\"1024 * 1024\"\n * @invalid=\"handleInvalid\"\n * />\n * </template>\n * ```\n */\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport BvIcon from \"../icon/Icon.vue\";\nimport BvTag from \"../tag/Tag.vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type {\n FileUploadInvalidEntry,\n FileUploadProps,\n} from \"./file-upload.types\";\n\nconst props = withDefaults(defineProps<FileUploadProps>(), {\n modelValue: undefined,\n multiple: false,\n accept: undefined,\n maxSize: undefined,\n minSize: undefined,\n maxFiles: undefined,\n disabled: false,\n label: undefined,\n helpText: undefined,\n invalidText: undefined,\n showPreview: false,\n size: \"medium\",\n});\n\nconst emit = defineEmits<{\n \"update:modelValue\": [value: File | File[] | null];\n invalid: [entries: FileUploadInvalidEntry[]];\n change: [files: File[]];\n}>();\n\nconst inputRef = ref<HTMLInputElement | null>(null);\nconst isDragging = ref(false);\nconst previewUrls = ref<Map<File, string>>(new Map());\n\n/** Normalize modelValue to File[] */\nconst filesList = computed<File[]>(() => {\n const v = props.modelValue;\n if (!v) return [];\n return Array.isArray(v) ? [...v] : [v];\n});\n\n/** Check if file passes accept filter */\nfunction matchesAccept(file: File): boolean {\n if (!props.accept) return true;\n const rules = props.accept.split(\",\").map((r) => r.trim());\n const ext = file.name.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n for (const rule of rules) {\n if (rule.startsWith(\".\")) {\n if (ext === rule.slice(1).toLowerCase()) return true;\n } else {\n const mime = file.type;\n if (rule.endsWith(\"/*\")) {\n const base = rule.slice(0, -1);\n if (mime.startsWith(base)) return true;\n } else if (mime === rule) {\n return true;\n }\n }\n }\n return false;\n}\n\n/** Validate files and return invalid entries */\nfunction validateFiles(\n incoming: File[],\n existingCount: number,\n): FileUploadInvalidEntry[] {\n const invalid: FileUploadInvalidEntry[] = [];\n const maxFiles = props.maxFiles ?? Infinity;\n let validAdded = 0;\n\n for (const file of incoming) {\n if (!matchesAccept(file)) {\n invalid.push({ file, reason: \"type\" });\n continue;\n }\n if (props.maxSize !== undefined && file.size > props.maxSize) {\n invalid.push({ file, reason: \"size\" });\n continue;\n }\n if (props.minSize !== undefined && file.size < props.minSize) {\n invalid.push({ file, reason: \"size\" });\n continue;\n }\n if (props.multiple && existingCount + validAdded >= maxFiles) {\n invalid.push({ file, reason: \"count\" });\n continue;\n }\n validAdded++;\n }\n\n return invalid;\n}\n\n/** Process and emit validated files */\nfunction processFiles(newFiles: File[]) {\n const valid: File[] = [];\n const invalid = validateFiles(newFiles, filesList.value.length);\n\n for (const f of newFiles) {\n const entry = invalid.find((e) => e.file === f);\n if (!entry) valid.push(f);\n }\n\n if (invalid.length > 0) {\n emit(\"invalid\", invalid);\n }\n\n if (valid.length > 0) {\n const combined = props.multiple\n ? [...filesList.value, ...valid]\n : [valid[0]];\n const out = props.multiple ? combined : combined[0];\n emit(\"update:modelValue\", out);\n emit(\"change\", combined);\n }\n}\n\nfunction handleInputChange(e: Event) {\n const input = e.target as HTMLInputElement;\n const files = input.files ? Array.from(input.files) : [];\n processFiles(files);\n input.value = \"\";\n}\n\nfunction handleDrop(e: DragEvent) {\n e.preventDefault();\n isDragging.value = false;\n if (props.disabled) return;\n const files = e.dataTransfer?.files ? Array.from(e.dataTransfer.files) : [];\n processFiles(files);\n}\n\nfunction handleDragOver(e: DragEvent) {\n e.preventDefault();\n e.stopPropagation();\n if (props.disabled) return;\n isDragging.value = true;\n}\n\nfunction handleDragLeave() {\n isDragging.value = false;\n}\n\nfunction openFilePicker() {\n if (props.disabled) return;\n inputRef.value?.click();\n}\n\nfunction removeFile(index: number) {\n const list = [...filesList.value];\n const removed = list[index];\n list.splice(index, 1);\n if (props.showPreview && removed && removed.type.startsWith(\"image/\")) {\n const url = previewUrls.value.get(removed);\n if (url) URL.revokeObjectURL(url);\n previewUrls.value.delete(removed);\n }\n const out = props.multiple ? list : (list[0] ?? null);\n emit(\"update:modelValue\", out);\n emit(\"change\", list);\n}\n\nfunction getPreviewUrl(file: File): string {\n if (!file.type.startsWith(\"image/\")) return \"\";\n let url = previewUrls.value.get(file);\n if (!url) {\n url = URL.createObjectURL(file);\n previewUrls.value.set(file, url);\n }\n return url;\n}\n\nwatch(\n filesList,\n (files) => {\n const toRevoke = new Set(previewUrls.value.keys());\n for (const f of files) {\n toRevoke.delete(f);\n }\n for (const f of toRevoke) {\n const url = previewUrls.value.get(f);\n if (url) URL.revokeObjectURL(url);\n previewUrls.value.delete(f);\n }\n },\n { deep: true },\n);\n\nonMounted(() => {\n loadBaklavaResources();\n});\n\nonBeforeUnmount(() => {\n for (const url of previewUrls.value.values()) {\n URL.revokeObjectURL(url);\n }\n previewUrls.value.clear();\n});\n\nconst zoneSizeClass = computed(() => `file-upload-zone--${props.size}`);\nconst hasError = computed(() => !!props.invalidText);\n</script>\n\n<template>\n <div class=\"file-upload\">\n <label v-if=\"label\" class=\"file-upload-label\">{{ label }}</label>\n\n <div\n class=\"file-upload-zone\"\n :class=\"[\n zoneSizeClass,\n {\n 'file-upload-zone--dragging': isDragging,\n 'file-upload-zone--disabled': disabled,\n 'file-upload-zone--invalid': hasError,\n },\n ]\"\n @click=\"(e) => e.target !== inputRef && openFilePicker()\"\n @drop=\"handleDrop\"\n @dragover=\"handleDragOver\"\n @dragleave=\"handleDragLeave\"\n >\n <input\n ref=\"inputRef\"\n type=\"file\"\n class=\"file-upload-input\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n :disabled=\"disabled\"\n @change=\"handleInputChange\"\n />\n <div class=\"file-upload-content\">\n <BvIcon name=\"upload\" size=\"24px\" class=\"file-upload-icon\" />\n <span class=\"file-upload-text\">\n <slot name=\"hint\"> </slot>\n </span>\n </div>\n </div>\n\n <p v-if=\"helpText && !hasError\" class=\"file-upload-help\">{{ helpText }}</p>\n <p v-if=\"invalidText\" class=\"file-upload-invalid\">{{ invalidText }}</p>\n\n <div v-if=\"filesList.length > 0\" class=\"file-upload-list\">\n <div\n v-for=\"(file, index) in filesList\"\n :key=\"`${file.name}-${file.size}-${index}`\"\n class=\"file-upload-item\"\n >\n <div\n v-if=\"showPreview && file.type.startsWith('image/')\"\n class=\"file-upload-preview\"\n >\n <img\n :src=\"getPreviewUrl(file)\"\n :alt=\"file.name\"\n class=\"file-upload-thumb\"\n />\n </div>\n <BvTag\n closable\n size=\"small\"\n class=\"file-upload-tag\"\n @close=\"removeFile(index)\"\n >\n {{ file.name }} ({{ (file.size / 1024).toFixed(1) }} KB)\n </BvTag>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.file-upload {\n display: flex;\n flex-direction: column;\n gap: var(--bl-spacing-2, 0.5rem);\n}\n\n.file-upload-label {\n font: var(--bl-font-body-2-medium, 0.875rem 500);\n color: var(--bl-color-neutral-darker, #374151);\n}\n\n.file-upload-zone {\n display: flex;\n align-items: center;\n justify-content: center;\n border: 2px dashed var(--bl-color-neutral-light, #e5e7eb);\n border-radius: var(--bl-radius-m, 8px);\n background: var(--bl-color-neutral-background, #f9fafb);\n cursor: pointer;\n transition:\n border-color 0.2s,\n background 0.2s;\n}\n\n.file-upload-zone:hover:not(.file-upload-zone--disabled) {\n border-color: var(--bl-color-primary, #ff6000);\n background: var(--bl-color-primary-background, #fff5f0);\n}\n\n.file-upload-zone--dragging {\n border-color: var(--bl-color-primary, #ff6000);\n background: var(--bl-color-primary-background, #fff5f0);\n}\n\n.file-upload-zone--disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.file-upload-zone--invalid {\n border-color: var(--bl-color-danger, #dc2626);\n}\n\n.file-upload-zone--small {\n min-height: 80px;\n padding: var(--bl-spacing-3, 0.75rem);\n}\n\n.file-upload-zone--medium {\n min-height: 120px;\n padding: var(--bl-spacing-4, 1rem);\n}\n\n.file-upload-zone--large {\n min-height: 160px;\n padding: var(--bl-spacing-5, 1.25rem);\n}\n\n.file-upload-input {\n position: absolute;\n width: 0;\n height: 0;\n opacity: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n.file-upload-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--bl-spacing-2, 0.5rem);\n}\n\n.file-upload-icon {\n color: var(--bl-color-neutral-subtle, #9ca3af);\n}\n\n.file-upload-text {\n font: var(--bl-font-body-2-regular, 0.875rem 400);\n color: var(--bl-color-neutral-subtle, #6b7280);\n}\n\n.file-upload-browse {\n color: var(--bl-color-primary, #ff6000);\n text-decoration: underline;\n}\n\n.file-upload-help,\n.file-upload-invalid {\n font: var(--bl-font-body-3-regular, 0.75rem 400);\n margin: 0;\n}\n\n.file-upload-help {\n color: var(--bl-color-neutral-subtle, #6b7280);\n}\n\n.file-upload-invalid {\n color: var(--bl-color-danger, #dc2626);\n}\n\n.file-upload-list {\n display: flex;\n flex-wrap: wrap;\n gap: var(--bl-spacing-2, 0.5rem);\n}\n\n.file-upload-item {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--bl-spacing-1, 0.25rem);\n}\n\n.file-upload-preview {\n width: 48px;\n height: 48px;\n border-radius: var(--bl-radius-s, 4px);\n overflow: hidden;\n background: var(--bl-color-neutral-light, #e5e7eb);\n}\n\n.file-upload-thumb {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.file-upload-tag {\n max-width: 240px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Skeleton Component\n *\n * Animated placeholder for content loading states.\n * Displays a shimmer effect with configurable variants.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvSkeleton />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <template>\n * <BvSkeleton variant=\"text\" :count=\"3\" />\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { SkeletonProps } from \"./skeleton.types\";\n\nconst props = withDefaults(defineProps<SkeletonProps>(), {\n variant: \"rectangle\",\n width: undefined,\n height: undefined,\n count: 1,\n});\n\nconst effectiveWidth = computed(() => {\n if (props.width) return props.width;\n if (props.variant === \"circle\") return \"40px\";\n return \"100%\";\n});\n\nconst effectiveHeight = computed(() => {\n if (props.height) return props.height;\n if (props.variant === \"circle\") return \"40px\";\n return \"1rem\";\n});\n\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <div\n class=\"skeleton-wrapper\"\n :class=\"`skeleton-wrapper--${props.variant}`\"\n role=\"status\"\n aria-label=\"Loading\"\n >\n <div\n v-for=\"n in count\"\n :key=\"n\"\n class=\"skeleton\"\n :class=\"['skeleton--' + props.variant]\"\n :style=\"{\n width: effectiveWidth,\n height: effectiveHeight,\n }\"\n />\n </div>\n</template>\n\n<style scoped>\n.skeleton-wrapper {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.skeleton {\n background: var(--bl-color-neutral-light, #e5e7eb);\n border-radius: var(--bl-border-radius-s, 0.25rem);\n position: relative;\n overflow: hidden;\n}\n\n.skeleton::after {\n content: \"\";\n position: absolute;\n inset: 0;\n background: linear-gradient(\n 90deg,\n transparent 0%,\n rgba(255, 255, 255, 0.4) 50%,\n transparent 100%\n );\n animation: skeleton-shimmer 1.5s ease-in-out infinite;\n}\n\n.skeleton--circle {\n border-radius: var(--bl-border-radius-circle, 50%);\n}\n\n.skeleton--text {\n height: 1rem;\n}\n\n@keyframes skeleton-shimmer {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(100%);\n }\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Image Component\n *\n * Performance-focused image wrapper with lazy loading,\n * skeleton placeholder, and error handling.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvImage src=\"/photo.jpg\" alt=\"Photo\" width=\"200px\" height=\"120px\" />\n * </template>\n * ```\n */\nimport { ref, computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport BvSkeleton from \"../skeleton/Skeleton.vue\";\nimport type { ImageProps } from \"./image.types\";\n\nconst props = withDefaults(defineProps<ImageProps>(), {\n loading: \"lazy\",\n placeholder: \"skeleton\",\n objectFit: \"cover\",\n});\n\nconst emit = defineEmits<{\n load: [event: Event];\n error: [event: Event];\n}>();\n\nconst isLoading = ref(true);\nconst hasError = ref(false);\n\nconst showPlaceholder = computed(\n () => isLoading.value && props.placeholder === \"skeleton\" && !hasError.value,\n);\n\nconst showImage = computed(() => !hasError.value);\n\nconst wrapperStyle = computed(() => ({\n width: props.width ?? \"100%\",\n height: props.height ?? \"auto\",\n aspectRatio: !props.height && props.width ? \"16 / 9\" : undefined,\n}));\n\nfunction onLoad(event: Event) {\n isLoading.value = false;\n emit(\"load\", event);\n}\n\nfunction onError(event: Event) {\n isLoading.value = false;\n hasError.value = true;\n emit(\"error\", event);\n}\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <div class=\"image-wrapper\" :style=\"wrapperStyle\">\n <!-- Placeholder (skeleton or custom slot) -->\n <div v-if=\"showPlaceholder\" class=\"image-placeholder\">\n <slot name=\"placeholder\">\n <BvSkeleton\n class=\"image-skeleton\"\n width=\"100%\"\n height=\"100%\"\n variant=\"rectangle\"\n />\n </slot>\n </div>\n\n <!-- Loaded image -->\n <img\n v-show=\"showImage\"\n :src=\"src\"\n :alt=\"alt\"\n :loading=\"loading\"\n :srcset=\"srcset\"\n :sizes=\"sizes\"\n class=\"image-img\"\n :style=\"{ objectFit }\"\n @load=\"onLoad\"\n @error=\"onError\"\n />\n\n <!-- Error fallback -->\n <div v-if=\"hasError\" class=\"image-fallback\">\n <slot name=\"fallback\">\n <div class=\"image-fallback-default\" role=\"img\" :aria-label=\"alt\">\n Failed to load image\n </div>\n </slot>\n </div>\n </div>\n</template>\n\n<style scoped>\n.image-wrapper {\n position: relative;\n overflow: hidden;\n display: block;\n}\n\n.image-placeholder {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.image-skeleton {\n width: 100% !important;\n height: 100% !important;\n}\n\n.image-img {\n display: block;\n width: 100%;\n height: 100%;\n vertical-align: middle;\n}\n\n.image-fallback {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.image-fallback-default {\n background: var(--bl-color-neutral-light, #e5e7eb);\n color: var(--bl-color-neutral-darker, #6b7280);\n font-size: 0.875rem;\n padding: 1rem;\n text-align: center;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Input Component\n *\n * A Vue UI kit component for Baklava's `bl-input` web component with full v-model support\n * and TypeScript types. Supports text, email, password, number, date, time, and\n * other input types with validation, help text, loading state, and icons.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvInput v-model=\"value\" label=\"Email\" placeholder=\"Enter your email\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With validation -->\n * <template>\n * <BvInput\n * v-model=\"email\"\n * type=\"email\"\n * label=\"Email\"\n * required\n * :invalid-text=\"emailError\"\n * @invalid=\"handleInvalid\"\n * />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With icon -->\n * <template>\n * <BvInput v-model=\"search\" label=\"Search\" icon=\"search\" />\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { InputProps } from \"./input.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<InputProps>(), {\n modelValue: undefined,\n name: undefined,\n type: \"text\",\n label: undefined,\n placeholder: undefined,\n required: undefined,\n minlength: undefined,\n maxlength: undefined,\n min: undefined,\n max: undefined,\n pattern: undefined,\n step: undefined,\n autocomplete: undefined,\n inputmode: undefined,\n autofocus: undefined,\n icon: undefined,\n size: \"medium\",\n disabled: undefined,\n readonly: undefined,\n invalidText: undefined,\n labelFixed: true,\n helpText: undefined,\n loading: undefined,\n suffixText: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the input value changes. Use with v-model.\n *\n * @param {string | number | null} value - The new input value.\n */\n \"update:modelValue\": [value: string | number | null];\n /**\n * Emitted when validation fails.\n *\n * @param {ValidityState} state - The native ValidityState object.\n */\n invalid: [state: ValidityState];\n /**\n * Emitted when the input receives focus.\n *\n * @param {FocusEvent} event - The native focus event.\n */\n focus: [event: FocusEvent];\n /**\n * Emitted when the input loses focus.\n *\n * @param {FocusEvent} event - The native focus event.\n */\n blur: [event: FocusEvent];\n}>();\n\n/**\n * Triggers the native date/time picker for inputs with type=\"date\", \"time\",\n * \"datetime-local\", etc. Called on click to ensure the picker opens when\n * the user clicks the input.\n *\n * @param {Event} event - The click event.\n */\nconst showPicker = ({ currentTarget }: Event) =>\n (currentTarget as HTMLInputElement)?.showPicker();\n\n/**\n * Lifecycle hook: Component mounted.\n *\n * Loads Baklava resources when the component is mounted.\n */\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-input\n v-bind=\"{\n ...props,\n 'label-fixed': props.labelFixed === true ? true : undefined,\n 'help-text': props.helpText ? props.helpText : undefined,\n 'invalid-text': props.invalidText ? props.invalidText : undefined,\n loading: props.loading ? props.loading : undefined,\n placeholder: props.placeholder ? props.placeholder : props.label,\n }\"\n :value=\"props.modelValue\"\n @bl-input=\"\n emit('update:modelValue', ($event.target as HTMLInputElement)?.value)\n \"\n @bl-invalid=\"emit('invalid', $event)\"\n @focus=\"emit('focus', $event)\"\n @blur=\"emit('blur', $event)\"\n @click=\"showPicker\"\n >\n <span v-if=\"props.suffixText\" slot=\"icon\">\n {{ props.suffixText }}\n </span>\n </bl-input>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Notification Component\n *\n * A Vue UI kit component for Baklava's `bl-notification` web component for toast notifications.\n * Place this component once in your app (typically at root or layout level). Notifications\n * are triggered programmatically via the `useNotification` composable.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage: place in app root -->\n * <template>\n * <div>\n * <RouterView />\n * <BvNotification />\n * </div>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With useNotification composable -->\n * <template>\n * <div>\n * <BvButton @click=\"showSuccess\">Show Success</BvButton>\n * <BvNotification />\n * </div>\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { NotificationProps } from \"./notification.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<NotificationProps>(), {\n duration: 7,\n noAnimation: false,\n});\n\n/**\n * Lifecycle hook: Component mounted.\n * Loads Baklava resources required for the web component.\n */\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-notification v-bind=\"props\" />\n</template>\n\n<style lang=\"css\" scoped></style>\n","<script setup lang=\"ts\">\n/**\n * Pagination Component\n *\n * A Vue UI kit component for Baklava's `bl-pagination` web component for page navigation.\n * Supports v-model:currentPage for two-way binding and emits change events when\n * the user navigates to a different page.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic pagination -->\n * <template>\n * <BvPagination\n * v-model:current-page=\"currentPage\"\n * :total-items=\"100\"\n * :page-size=\"10\"\n * @change=\"handlePageChange\"\n * />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With jumper - jump directly to a page -->\n * <template>\n * <BvPagination\n * v-model:current-page=\"currentPage\"\n * :total-items=\"250\"\n * :page-size=\"25\"\n * :has-jumper=\"true\"\n * jumper-label=\"Go to page\"\n * />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With items-per-page select -->\n * <template>\n * <BvPagination\n * v-model:current-page=\"currentPage\"\n * :total-items=\"100\"\n * :page-size=\"10\"\n * :has-select=\"true\"\n * select-label=\"Items per page\"\n * :items-per-page-options=\"[\n * { text: '10 Items', value: 10 },\n * { text: '25 Items', value: 25 },\n * { text: '50 Items', value: 50 }\n * ]\"\n * />\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { PaginationProps } from \"./pagination.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<PaginationProps>(), {\n currentPage: undefined,\n totalItems: undefined,\n pageSize: undefined,\n hasJumper: false,\n jumperLabel: undefined,\n hasSelect: false,\n selectLabel: undefined,\n itemsPerPageOptions: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the current page changes.\n * Use v-model:currentPage for two-way binding.\n *\n * @param {number} page - The new current page number.\n */\n \"update:currentPage\": [page: number];\n\n /**\n * Emitted when the user navigates to a different page.\n * Payload contains selectedPage, prevPage, and itemsPerPage.\n *\n * @param {CustomEvent<{ selectedPage: number; prevPage: number; itemsPerPage: number }>} event - The change event from bl-pagination.\n */\n change: [event: CustomEvent];\n}>();\n\n/**\n * Handles the bl-change event from the underlying bl-pagination component.\n * Extracts selectedPage from event.detail and emits update:currentPage and change.\n *\n * @param {CustomEvent} event - The bl-change event from bl-pagination.\n */\nconst handleChange = (event: CustomEvent) => {\n emit(\"change\", event);\n const detail = event.detail as\n | { selectedPage?: number; prevPage?: number; itemsPerPage?: number }\n | undefined;\n const page = detail?.selectedPage;\n if (page !== undefined) {\n emit(\"update:currentPage\", page);\n }\n};\n\n/**\n * Lifecycle hook: Component mounted.\n * Loads Baklava resources required for bl-pagination.\n */\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-pagination\n v-bind=\"{\n 'current-page': props.currentPage,\n 'total-items': props.totalItems,\n 'items-per-page': props.pageSize,\n 'has-jumper': props.hasJumper === true ? true : undefined,\n 'jumper-label': props.jumperLabel,\n 'has-select': props.hasSelect === true ? true : undefined,\n 'select-label': props.selectLabel,\n 'items-per-page-options': props.itemsPerPageOptions,\n }\"\n @bl-change=\"handleChange\"\n >\n <slot />\n </bl-pagination>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Radio Component\n *\n * A Vue UI kit component for Baklava's `bl-radio` and `bl-radio-group` web components.\n * Can be used as either a single radio option or as a group container for multiple radios.\n *\n * @component\n * @example\n * ```vue\n * <!-- Single radio in a group -->\n * <template>\n * <bl-radio-group :value=\"choice\" @bl-radio-change=\"choice = $event.detail\">\n * <BvRadio v-model=\"choice\" value=\"yes\" label=\"Yes\" name=\"choice\" />\n * <BvRadio v-model=\"choice\" value=\"no\" label=\"No\" name=\"choice\" />\n * </bl-radio-group>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Radio group with items -->\n * <template>\n * <BvRadio v-model=\"choice\" :items=\"items\">\n * <template #item=\"{ item }\">{{ item.label }}</template>\n * </BvRadio>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Explicit checked control -->\n * <template>\n * <BvRadio :checked=\"isSelected\" @update:checked=\"isSelected = $event\" label=\"Option\" />\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { RadioProps } from \"./radio.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<RadioProps>(), {\n modelValue: undefined,\n value: undefined,\n name: undefined,\n label: undefined,\n checked: undefined,\n disabled: undefined,\n required: undefined,\n items: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when selection changes (for v-model with modelValue).\n * Payload is this radio's value when it becomes selected (single mode) or the selected value (group mode).\n *\n * @param {string | number} value - The selected value.\n */\n \"update:modelValue\": [value: string | number];\n\n /**\n * Emitted when checked state changes (for explicit checked control).\n *\n * @param {boolean} checked - The new checked state.\n */\n \"update:checked\": [checked: boolean];\n\n /**\n * Emitted when the radio state changes (native bl-change / bl-radio-change event).\n *\n * @param {CustomEvent} event - The change event from bl-radio or bl-radio-group.\n */\n change: [event: CustomEvent];\n\n /**\n * Emitted on input (native bl-input event).\n *\n * @param {CustomEvent} event - The bl-input event from bl-radio.\n */\n input: [event: CustomEvent];\n}>();\n\n/**\n * Determines if the component should act as a group container.\n * When `items` prop is provided and is an array, it acts as a group.\n */\nconst isGroupMode = computed(\n () => props.items !== undefined && Array.isArray(props.items),\n);\n\n/**\n * Normalized model value for group mode (string for bl-radio-group).\n */\nconst groupValue = computed(() => {\n const val = props.modelValue;\n if (val === undefined || val === null) return \"\";\n return String(val);\n});\n\n/**\n * Computed checked state for bl-radio (single mode).\n * Uses explicit checked prop when provided, otherwise modelValue === value for v-model.\n */\nconst computedChecked = computed(() => {\n if (props.checked === true || props.checked === false) {\n return props.checked;\n }\n if (props.modelValue !== undefined && props.value !== undefined) {\n return String(props.modelValue) === String(props.value);\n }\n return undefined;\n});\n\n/**\n * Handles the bl-change event from the underlying bl-radio (single mode).\n * Emits update:modelValue with this radio's value when selected, or update:checked.\n */\nconst handleSingleChange = (event: CustomEvent) => {\n emit(\"change\", event);\n const target = event.target as { checked?: boolean; value?: string | number };\n const checked = target?.checked;\n if (checked === true && props.value !== undefined) {\n emit(\"update:modelValue\", props.value);\n }\n if (checked === true || checked === false) {\n emit(\"update:checked\", checked);\n }\n};\n\n/**\n * Handles the bl-radio-change event from the underlying bl-radio-group (group mode).\n * Emits update:modelValue with the selected value (preserves original type from items).\n */\nconst handleGroupChange = (event: CustomEvent) => {\n emit(\"change\", event);\n const detail = event.detail as string | undefined;\n if (detail === undefined || detail === \"\") return;\n const item = props.items?.find(\n (i) => String(i.value) === String(detail),\n );\n const newValue = item !== undefined ? item.value : detail;\n emit(\"update:modelValue\", newValue);\n};\n\n/**\n * Lifecycle hook: Component mounted.\n * Loads Baklava resources for bl-radio and bl-radio-group.\n */\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <!-- Group mode: render as bl-radio-group -->\n <bl-radio-group\n v-if=\"isGroupMode\"\n :value=\"groupValue\"\n :required=\"props.required === true ? true : undefined\"\n :label=\"props.label\"\n @bl-radio-change=\"handleGroupChange\"\n >\n <bl-radio\n v-for=\"(item, index) in props.items\"\n :key=\"String(item.value)\"\n v-bind=\"{\n value: String(item.value),\n disabled: item.disabled === true ? true : undefined,\n name: item.name ?? props.name,\n }\"\n >\n <slot name=\"item\" :item=\"item\" :index=\"index\">\n {{ item.label }}\n </slot>\n </bl-radio>\n </bl-radio-group>\n\n <!-- Single radio mode: render as bl-radio -->\n <bl-radio\n v-else\n v-bind=\"{\n value: props.value !== undefined ? String(props.value) : undefined,\n name: props.name,\n disabled: props.disabled === true ? true : undefined,\n required: props.required === true ? true : undefined,\n checked:\n computedChecked === true\n ? true\n : computedChecked === false\n ? false\n : undefined,\n }\"\n @bl-change=\"handleSingleChange\"\n @bl-input=\"emit('input', $event)\"\n >\n <slot>{{ label }}</slot>\n </bl-radio>\n</template>\n","<script setup lang=\"ts\">\n/**\n * ScrollToTop Component\n *\n * A floating button that appears when the user scrolls past a threshold.\n * Clicking it scrolls smoothly to the top of the page.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvScrollToTop />\n * </template>\n * ```\n */\nimport { onMounted, onUnmounted, ref } from \"vue\";\nimport BvButton from \"../button/Button.vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { ScrollToTopProps } from \"./scroll-to-top.types\";\n\nconst props = withDefaults(defineProps<ScrollToTopProps>(), {\n threshold: 300,\n position: \"bottom-right\",\n label: \"Scroll to top\",\n size: \"medium\",\n variant: \"primary\",\n});\n\nconst emit = defineEmits<{\n click: [];\n}>();\n\nconst isVisible = ref(false);\nlet rafId: number | null = null;\n\nconst checkVisibility = () => {\n isVisible.value = window.scrollY > props.threshold;\n};\n\nconst handleScroll = () => {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n checkVisibility();\n rafId = null;\n });\n};\n\nconst scrollToTop = () => {\n window.scrollTo({ top: 0, behavior: \"smooth\" });\n emit(\"click\");\n};\n\nconst positionClasses: Record<\n NonNullable<ScrollToTopProps[\"position\"]>,\n string\n> = {\n \"bottom-right\": \"scroll-to-top--bottom-right\",\n \"bottom-left\": \"scroll-to-top--bottom-left\",\n \"top-right\": \"scroll-to-top--top-right\",\n \"top-left\": \"scroll-to-top--top-left\",\n};\n\nonMounted(() => {\n loadBaklavaResources();\n checkVisibility();\n window.addEventListener(\"scroll\", handleScroll, { passive: true });\n});\n\nonUnmounted(() => {\n window.removeEventListener(\"scroll\", handleScroll);\n if (rafId !== null) cancelAnimationFrame(rafId);\n});\n</script>\n\n<template>\n <Transition name=\"scroll-to-top-fade\">\n <div\n v-show=\"isVisible\"\n :class=\"['scroll-to-top', positionClasses[position]]\"\n role=\"complementary\"\n aria-label=\"Scroll to top\"\n >\n <BvButton\n :variant=\"variant\"\n :size=\"size\"\n :label=\"label\"\n icon=\"arrow_up\"\n @click=\"scrollToTop\"\n >\n <template #default></template>\n </BvButton>\n </div>\n </Transition>\n</template>\n\n<style scoped>\n.scroll-to-top {\n position: fixed;\n z-index: 1000;\n}\n\n.scroll-to-top--bottom-right {\n bottom: 1.5rem;\n right: 1.5rem;\n}\n\n.scroll-to-top--bottom-left {\n bottom: 1.5rem;\n left: 1.5rem;\n}\n\n.scroll-to-top--top-right {\n top: 1.5rem;\n right: 1.5rem;\n}\n\n.scroll-to-top--top-left {\n top: 1.5rem;\n left: 1.5rem;\n}\n\n.scroll-to-top-fade-enter-active,\n.scroll-to-top-fade-leave-active {\n transition: opacity 0.2s ease;\n}\n.scroll-to-top-fade-enter-from,\n.scroll-to-top-fade-leave-to {\n opacity: 0;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Select Component\n *\n * A Vue UI kit component for Baklava's `bl-select` web component with v-model support.\n * Supports both slot-based options and the `options` prop for programmatic rendering.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic single select with slot -->\n * <template>\n * <BvSelect v-model=\"selected\" label=\"Choose an option\">\n * <bl-select-option value=\"a\">Option A</bl-select-option>\n * <bl-select-option value=\"b\">Option B</bl-select-option>\n * </BvSelect>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Options array -->\n * <template>\n * <BvSelect v-model=\"country\" label=\"Country\" :options=\"countries\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Multiple select -->\n * <template>\n * <BvSelect v-model=\"selected\" label=\"Select multiple\" :multiple=\"true\" :options=\"items\" />\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { SelectProps } from \"./select.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<SelectProps>(), {\n modelValue: undefined,\n options: undefined,\n label: undefined,\n placeholder: undefined,\n name: undefined,\n required: undefined,\n disabled: undefined,\n multiple: undefined,\n size: undefined,\n clearable: undefined,\n helpText: undefined,\n customInvalidText: undefined,\n searchBar: undefined,\n searchBarPlaceholder: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the selection changes. Use with v-model.\n *\n * @param {string | string[] | null} value - The selected value(s). Array when multiple.\n */\n \"update:modelValue\": [value: string | string[] | null];\n /**\n * Emitted when selection changes (bl-change event).\n *\n * @param {CustomEvent} event - The native bl-change event from bl-select.\n */\n change: [event: CustomEvent];\n /**\n * Emitted on input (bl-input event).\n *\n * @param {CustomEvent} event - The native bl-input event from bl-select.\n */\n input: [event: CustomEvent];\n}>();\n\n/**\n * Handles the bl-change event from the underlying bl-select component.\n * Syncs v-model and forwards the change event.\n * The bl-select element (event.target) exposes a .value property for the selected value.\n *\n * @param {CustomEvent} event - The bl-change event from bl-select.\n */\nconst handleChange = (event: CustomEvent) => {\n emit(\"change\", event);\n const target = event.target as HTMLSelectElement & {\n value?: string | string[] | null;\n };\n emit(\"update:modelValue\", target?.value ?? null);\n};\n\n/**\n * Lifecycle hook: Component mounted.\n *\n * Loads Baklava resources when the component is mounted.\n */\n/**\n * Props to pass to bl-select. Excludes modelValue (we use :value) and options\n * (we render bl-select-option children from options in the template).\n */\nconst selectProps = computed(() => {\n const { modelValue: _, options: __, ...rest } = props;\n return {\n ...rest,\n disabled: rest.disabled === true ? true : undefined,\n multiple: rest.multiple === true ? true : undefined,\n \"help-text\": rest.helpText ?? undefined,\n \"invalid-text\": rest.customInvalidText ?? undefined,\n \"search-bar\": rest.searchBar === true ? true : undefined,\n \"search-bar-placeholder\": rest.searchBarPlaceholder ?? undefined,\n };\n});\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-select\n v-bind=\"selectProps\"\n :value=\"props.modelValue\"\n @bl-change=\"handleChange\"\n @bl-input=\"emit('input', $event)\"\n >\n <!-- Render options from options prop when provided -->\n <template v-if=\"options\">\n <bl-select-option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </bl-select-option>\n </template>\n <!-- Default slot for custom bl-select-option children -->\n <slot />\n </bl-select>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Spinner Component\n *\n * A Vue UI kit component for Baklava's `bl-spinner` web component for loading indicators.\n * Displays an animated spinner with configurable size and variant.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvSpinner />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <template>\n * <BvSpinner size=\"large\" label=\"Loading...\" />\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { SpinnerProps } from \"./spinner.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<SpinnerProps>(), {\n size: undefined,\n variant: undefined,\n label: undefined,\n});\n\n/** Props to pass to bl-spinner (excludes label, which is used for aria-label) */\nconst spinnerProps = computed(() => {\n const { label: _, ...rest } = props;\n return rest;\n});\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-spinner v-bind=\"spinnerProps\" :aria-label=\"label\" />\n</template>\n","<script setup lang=\"ts\">\n/**\n * SplitButton Component\n *\n * A Vue UI kit component for Baklava's `bl-split-button` web component.\n * A button with a primary action and a dropdown for secondary actions.\n * Dropdown content is provided via the `dropdown-content` slot.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvSplitButton label=\"Actions\" @click=\"handleClick\">\n * <template #dropdown-content>\n * <bl-dropdown-item>Action 1</bl-dropdown-item>\n * <bl-dropdown-item>Action 2</bl-dropdown-item>\n * </template>\n * </BvSplitButton>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <template>\n * <BvSplitButton label=\"Save\" icon=\"check\" variant=\"primary\" @click=\"save\" />\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { SplitButtonProps } from \"./split-button.types\";\n\nconst props = defineProps<SplitButtonProps>();\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the main button is clicked.\n *\n * @param {CustomEvent} event - The native click event from bl-split-button.\n */\n click: [event: CustomEvent];\n /**\n * Emitted when the dropdown button is clicked.\n *\n * @param {CustomEvent} event - The native dropdown-click event from bl-split-button.\n */\n \"dropdown-click\": [event: CustomEvent];\n}>();\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-split-button\n v-bind=\"{\n variant: props.variant,\n size: props.size,\n disabled: props.disabled === true ? true : undefined,\n loading: props.loading === true ? true : undefined,\n label: props.label,\n icon: props.icon,\n }\"\n @bl-click=\"emit('click', $event)\"\n @bl-dropdown-click=\"emit('dropdown-click', $event)\"\n >\n <slot v-if=\"$slots['dropdown-content']\" name=\"dropdown-content\" />\n </bl-split-button>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Stepper Component\n *\n * A Vue UI kit component for Baklava's `bl-stepper` web component for step indicators.\n * Displays progress through a sequence of steps. Use the `steps` prop for declarative\n * configuration or the default slot for custom step content.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvStepper v-model:current-step=\"currentStep\" :steps=\"steps\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <template>\n * <BvStepper :steps=\"['Step 1', 'Step 2', 'Step 3']\" />\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { StepperProps, StepperStep } from \"./stepper.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<StepperProps>(), {\n currentStep: undefined,\n steps: undefined,\n orientation: undefined,\n showLabels: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the current step changes (for v-model:currentStep).\n *\n * @param {number} step - The new current step index.\n */\n \"update:currentStep\": [step: number];\n /**\n * Emitted when the user selects a different step.\n *\n * @param {CustomEvent} event - The native bl-stepper-change event from bl-stepper.\n */\n \"step-change\": [event: CustomEvent];\n}>();\n\n/**\n * Returns the variant for a step based on its index and the current step.\n */\nconst getStepVariant = (index: number): \"default\" | \"active\" | \"success\" | \"error\" => {\n const current = props.currentStep ?? 0;\n const step = props.steps?.[index];\n if (step?.error) return \"error\";\n if (index < current) return \"success\";\n if (index === current) return \"active\";\n return \"default\";\n};\n\n/**\n * Handles the bl-stepper-change event from the underlying web component.\n */\nconst handleStepChange = (event: CustomEvent<{ activeStep: number; totalSteps: number }>) => {\n emit(\"step-change\", event);\n const step = event.detail?.activeStep;\n if (step !== undefined) emit(\"update:currentStep\", step);\n};\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-stepper\n :direction=\"orientation ?? 'horizontal'\"\n @bl-stepper-change=\"handleStepChange\"\n >\n <template v-if=\"steps\">\n <bl-stepper-item\n v-for=\"(step, index) in steps\"\n :key=\"index\"\n :id=\"`step-${index}`\"\n :title=\"showLabels !== false ? step.label : ''\"\n :description=\"showLabels !== false && step.description ? step.description : ''\"\n :variant=\"getStepVariant(index)\"\n :disabled=\"step.disabled\"\n />\n </template>\n <slot />\n </bl-stepper>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Switch Component\n *\n * A Vue UI kit component for Baklava's `bl-switch` web component with v-model support.\n * A toggle switch for boolean states. Supports v-model:checked for two-way binding.\n *\n * @component\n * @example\n * ```vue\n * <template>\n * <BvSwitch v-model:checked=\"enabled\" label=\"Enable notifications\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <template>\n * <BvSwitch :checked=\"isOn\" @change=\"handleChange\" />\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { SwitchProps } from \"./switch.types\";\n\n/**\n * Component props with default values.\n */\nconst props = withDefaults(defineProps<SwitchProps>(), {\n checked: undefined,\n disabled: undefined,\n label: undefined,\n size: undefined,\n});\n\n/**\n * Component events.\n */\nconst emit = defineEmits<{\n /**\n * Emitted when the checked state changes (for v-model:checked).\n *\n * @param {boolean} checked - The new checked state.\n */\n \"update:checked\": [checked: boolean];\n /**\n * Emitted when the user toggles the switch.\n *\n * @param {CustomEvent} event - The native change event from bl-switch.\n */\n change: [event: CustomEvent];\n /**\n * Emitted on user input (mirrors native input event).\n *\n * @param {CustomEvent} event - The native input event from bl-switch.\n */\n input: [event: CustomEvent];\n}>();\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-switch\n v-bind=\"{\n ...props,\n checked: props.checked === true ? true : props.checked === false ? false : undefined,\n disabled: props.disabled === true ? true : undefined,\n }\"\n @bl-switch-toggle=\"\n emit('change', $event);\n emit('update:checked', $event.detail);\n \"\n >\n <slot>{{ label }}</slot>\n </bl-switch>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Tab Component\n *\n * A Vue UI kit component for Baklava's `bl-tabs` (bl-tab-group / bl-tab / bl-tab-panel) web components\n * for tab navigation. Use the `tabs` prop for declarative configuration or the default slot\n * for custom tab content.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage with tabs prop -->\n * <template>\n * <BvTab v-model:activeTab=\"activeTab\" :tabs=\"tabOptions\">\n * <div v-if=\"activeTab === 'tab1'\">Content 1</div>\n * <div v-if=\"activeTab === 'tab2'\">Content 2</div>\n * </BvTab>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- Custom slots -->\n * <template>\n * <BvTab v-model:activeTab=\"active\">\n * <bl-tab value=\"a\">Tab A</bl-tab>\n * <bl-tab value=\"b\">Tab B</bl-tab>\n * <bl-tab-panel tab=\"a\">Panel A content</bl-tab-panel>\n * <bl-tab-panel tab=\"b\">Panel B content</bl-tab-panel>\n * </BvTab>\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { TabProps } from \"./tab.types\";\n\nconst props = withDefaults(defineProps<TabProps>(), {\n activeTab: undefined,\n tabs: undefined,\n variant: undefined,\n orientation: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the active tab changes (use with v-model:activeTab).\n * @param {string} tab - The new active tab value.\n */\n \"update:activeTab\": [tab: string];\n /**\n * Emitted when tab selection changes (raw CustomEvent from bl-tabs).\n * @param {CustomEvent} event - The bl-tab-change event.\n */\n \"tab-change\": [event: CustomEvent];\n}>();\n\n/**\n * Handles the bl-tab-selected event from the underlying bl-tab-group.\n * Emits update:activeTab with the new tab value and tab-change with the raw event.\n *\n * @param {CustomEvent} event - The bl-tab-selected event from bl-tab (detail is tab name).\n */\nconst handleTabChange = (event: CustomEvent<string>) => {\n emit(\"tab-change\", event);\n const tab = event.detail;\n if (tab !== undefined) emit(\"update:activeTab\", tab);\n};\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-tab-group @bl-tab-selected=\"handleTabChange\">\n <template v-if=\"tabs\">\n <bl-tab\n v-for=\"tab in tabs\"\n :key=\"tab.value\"\n slot=\"tabs\"\n :name=\"tab.value\"\n :caption=\"tab.label\"\n :disabled=\"tab.disabled\"\n :selected=\"props.activeTab === tab.value\"\n >\n {{ tab.label }}\n </bl-tab>\n <bl-tab-panel\n v-for=\"tab in tabs\"\n :key=\"`panel-${tab.value}`\"\n :tab=\"tab.value\"\n >\n <slot />\n </bl-tab-panel>\n </template>\n <slot v-else />\n </bl-tab-group>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Table Component\n *\n * A Vue UI kit component for Baklava's `bl-table` web component for displaying tabular data.\n * Supports columns, data, sorting, row selection, loading/empty states, pagination,\n * and custom slots for header actions, empty state, and per-column cell content.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvTable :columns=\"columns\" :data=\"tableData\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With loading and empty states -->\n * <template>\n * <BvTable\n * :columns=\"columns\"\n * :data=\"tableData\"\n * :is-loading=\"isLoading\"\n * >\n * <template #empty-state>\n * <span>No data found</span>\n * </template>\n * </BvTable>\n * </template>\n * ```\n */\nimport { computed, nextTick, onMounted, ref, watch, type PropType } from \"vue\";\nimport BvSpinner from \"../spinner/Spinner.vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type {\n TableColumn,\n TablePaginationProps,\n TableRow,\n} from \"./table.types\";\n\ndefineOptions({ inheritAttrs: false });\n\ninterface BlPagination extends Element {\n itemsPerPageOptions: Array<{ text: string; value: number }>;\n}\n\nconst props = defineProps({\n title: { type: String, default: undefined },\n headerOptions: {\n type: Object as PropType<{ sticky?: boolean; minCellWidth?: string }>,\n default: undefined,\n },\n data: { type: Array as PropType<TableRow[]>, default: () => [] },\n columns: { type: Array as PropType<TableColumn[]>, default: undefined },\n sortable: { type: Boolean, default: undefined },\n selectable: { type: Boolean, default: undefined },\n multiple: { type: Boolean, default: undefined },\n selected: {\n type: Array as PropType<(string | number)[]>,\n default: undefined,\n },\n sortKey: { type: String, default: undefined },\n sortDirection: { type: String, default: undefined },\n stickyFirstColumn: { type: Boolean, default: undefined },\n stickyLastColumn: { type: Boolean, default: undefined },\n isLoading: { type: Boolean, default: undefined },\n pagination: {\n type: Object as PropType<TablePaginationProps>,\n default: undefined,\n },\n loadingText: { type: String, default: \"Loading...\" },\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when a row is clicked.\n * @param {CustomEvent} event - The bl-row-click event.\n */\n \"row-click\": [event: CustomEvent];\n /**\n * Emitted when table sort options change.\n * @param {CustomEvent} event - The bl-sort event.\n */\n sort: [event: CustomEvent];\n /**\n * Emitted when selected rows change.\n * @param {CustomEvent} event - The bl-row-select event.\n */\n select: [event: CustomEvent];\n /**\n * Emitted when pagination changes.\n * @param {CustomEvent} event - The bl-change event with selectedPage, prevPage, itemsPerPage.\n */\n change: [event: CustomEvent];\n}>();\n\n/**\n * Baklava table expects selected IDs to always be strings,\n * even when the actual data IDs might be numbers.\n */\nconst selectedIdsAsStrings = computed(() => {\n const s = props.selected;\n if (s == null || !Array.isArray(s)) return [];\n return s.map((id) => String(id));\n});\n\n/** Column header text: prefer name, then label, then key */\nconst getColumnLabel = (col: { key: string; label?: string; name?: string }) =>\n col.name ?? col.label ?? col.key;\n\n/** Row key for :key and selection-key: prefer row.id, fallback to index */\nconst getRowKey = (\n row: Record<string, unknown> & { id?: string | number },\n index: number,\n) => (row.id != null ? String(row.id) : String(index));\n\nconst paginationRef = ref<HTMLElement | null>(null);\n\nconst setPaginationOptions = () => {\n nextTick(() => {\n const options = props.pagination?.itemsPerPageOptions;\n if (!options?.length) return;\n const el = paginationRef.value?.querySelector(\n \"bl-pagination\",\n ) as BlPagination | null;\n if (el) el.itemsPerPageOptions = options;\n });\n};\n\nonMounted(() => {\n loadBaklavaResources();\n setPaginationOptions();\n});\n\nwatch(() => props.pagination?.itemsPerPageOptions, setPaginationOptions, {\n deep: true,\n});\n</script>\n\n<template>\n <div class=\"table\">\n <div v-if=\"props.title\" class=\"header\">\n <span class=\"--title\">{{ props.title }}</span>\n <slot name=\"header-actions\" />\n </div>\n\n <div class=\"table-content\">\n <!-- Loading state -->\n <bl-table v-if=\"props.isLoading\">\n <div class=\"loading-state\">\n <BvSpinner />\n <span>{{ props.loadingText }}</span>\n </div>\n </bl-table>\n\n <!-- Empty state -->\n <bl-table v-else-if=\"!props.data?.length\">\n <div class=\"empty-state\">\n <slot name=\"empty-state\" />\n </div>\n </bl-table>\n\n <!-- Data table -->\n <bl-table\n v-else\n v-bind=\"{\n sortable: props.sortable === true ? true : undefined,\n selectable: props.selectable === true ? true : undefined,\n multiple: props.multiple === true ? true : undefined,\n ...(props.selectable && { selected: selectedIdsAsStrings }),\n sortKey: props.sortKey,\n sortDirection: props.sortDirection,\n stickyFirstColumn: props.stickyFirstColumn,\n stickyLastColumn: props.stickyLastColumn,\n }\"\n @bl-sort=\"emit('sort', $event)\"\n @bl-row-select=\"emit('select', $event)\"\n >\n <bl-table-header :sticky=\"props.headerOptions?.sticky\">\n <bl-table-row>\n <bl-table-header-cell\n v-for=\"column in props.columns\"\n :key=\"column.key\"\n :sort-key=\"\n props.sortable && column.sortable !== false\n ? column.key\n : undefined\n \"\n :style=\"{\n '--bl-table-header-cell-min-width':\n props.headerOptions?.minCellWidth || '100px',\n }\"\n >\n {{ getColumnLabel(column) }}\n </bl-table-header-cell>\n </bl-table-row>\n </bl-table-header>\n\n <bl-table-body>\n <bl-table-row\n v-for=\"(row, index) in props.data\"\n :key=\"getRowKey(row, index)\"\n :selection-key=\"\n props.selectable ? getRowKey(row, index) : undefined\n \"\n >\n <bl-table-cell v-for=\"column in props.columns\" :key=\"column.key\">\n <slot :name=\"column.key\" :row=\"row\" :value=\"row[column.key]\">\n {{ row[column.key] }}\n </slot>\n </bl-table-cell>\n </bl-table-row>\n </bl-table-body>\n </bl-table>\n </div>\n\n <div v-if=\"props.pagination\" ref=\"paginationRef\" class=\"pagination-wrapper\">\n <bl-pagination\n :current-page=\"props.pagination!.currentPage\"\n :total-items=\"props.pagination!.totalItems\"\n :items-per-page=\"props.pagination!.itemsPerPage\"\n :has-jumper=\"props.pagination!.hasJumper ?? undefined\"\n :has-select=\"props.pagination!.hasSelect ?? undefined\"\n :jumper-label=\"props.pagination!.jumperLabel ?? 'Go to page'\"\n :select-label=\"props.pagination!.selectLabel ?? 'Items per page'\"\n :items-per-page-options=\"props.pagination!.itemsPerPageOptions\"\n @bl-change=\"emit('change', $event)\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"css\" scoped>\n.table {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.--title {\n font: var(--bl-font-title-1-medium);\n}\n\n.table-content {\n width: 100%;\n overflow-x: auto;\n}\n\n.table-content > bl-table {\n min-width: max-content;\n}\n\n.loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px;\n gap: 16px;\n}\n\n.loading-state span {\n font: var(--bl-font-body-2-regular);\n color: var(--bl-color-primary);\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px;\n gap: 12px;\n}\n\n.pagination-wrapper {\n display: flex;\n justify-content: flex-end;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Textarea Component\n *\n * A Vue UI kit component for Baklava's `bl-textarea` web component with v-model support.\n * Supports label, placeholder, validation, character counter, and help text.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage with v-model -->\n * <template>\n * <BvTextarea v-model=\"message\" label=\"Message\" placeholder=\"Enter your message\" />\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With validation -->\n * <template>\n * <BvTextarea\n * v-model=\"comment\"\n * label=\"Comment\"\n * :maxlength=\"500\"\n * help-text=\"Max 500 characters\"\n * invalid-text=\"Please enter a valid comment\"\n * />\n * </template>\n * ```\n */\nimport { onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { TextareaProps } from \"./textarea.types\";\n\nconst props = withDefaults(defineProps<TextareaProps>(), {\n modelValue: undefined,\n label: undefined,\n placeholder: undefined,\n rows: undefined,\n maxlength: undefined,\n disabled: undefined,\n required: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the value changes (use with v-model).\n * @param {string | null} value - The new textarea value.\n */\n \"update:modelValue\": [value: string | null];\n /**\n * Emitted on user input (mirrors native bl-input).\n * @param {CustomEvent} event - The bl-input event.\n */\n input: [event: CustomEvent];\n /**\n * Emitted when the value changes (blur or commit).\n * @param {CustomEvent} event - The bl-change event.\n */\n change: [event: CustomEvent];\n}>();\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-textarea\n v-bind=\"{\n ...props,\n disabled: props.disabled === true ? true : undefined,\n required: props.required === true ? true : undefined,\n }\"\n :value=\"props.modelValue\"\n @bl-input=\"\n emit('input', $event);\n emit('update:modelValue', ($event.target as HTMLTextAreaElement)?.value || null);\n \"\n @bl-change=\"emit('change', $event)\"\n >\n <slot />\n </bl-textarea>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Tooltip Component\n *\n * A Vue UI kit component for Baklava's `bl-tooltip` web component for displaying contextual\n * information on hover or focus. The trigger is provided via the default slot;\n * content can be set via the `content` prop or the `#content` slot.\n *\n * @component\n * @example\n * ```vue\n * <!-- Basic usage -->\n * <template>\n * <BvTooltip content=\"This is a tooltip\">\n * <BvButton>Hover me</BvButton>\n * </BvTooltip>\n * </template>\n * ```\n *\n * @example\n * ```vue\n * <!-- With placement -->\n * <template>\n * <BvTooltip content=\"Tooltip\" placement=\"bottom\">\n * <span>Trigger</span>\n * </BvTooltip>\n * </template>\n * ```\n */\nimport { computed, onMounted } from \"vue\";\nimport { loadBaklavaResources } from \"../utils/loadBaklavaResources\";\nimport type { TooltipProps } from \"./tooltip.types\";\n\nconst props = withDefaults(defineProps<TooltipProps>(), {\n content: undefined,\n placement: undefined,\n trigger: undefined,\n disabled: undefined,\n delay: undefined,\n});\n\nconst emit = defineEmits<{\n /**\n * Emitted when the tooltip is shown.\n */\n show: [];\n /**\n * Emitted when the tooltip is hidden.\n */\n hide: [];\n}>();\n\n// bl-tooltip only supports placement and target. Do not pass trigger (read-only),\n// content, disabled, or delay as they are not supported and cause errors.\nconst tooltipProps = computed(() => {\n const bind: Record<string, unknown> = {};\n if (props.placement !== undefined) bind.placement = props.placement;\n if (props.target !== undefined) bind.target = props.target;\n return bind;\n});\n\nonMounted(() => {\n loadBaklavaResources();\n});\n</script>\n\n<template>\n <bl-tooltip\n v-if=\"!props.disabled\"\n v-bind=\"tooltipProps\"\n @bl-tooltip-show=\"emit('show')\"\n @bl-tooltip-hide=\"emit('hide')\"\n >\n <div slot=\"tooltip-trigger\">\n <slot />\n </div>\n <slot v-if=\"$slots['content']\" name=\"content\" />\n <span v-else-if=\"content\">{{ content }}</span>\n </bl-tooltip>\n <slot v-else />\n</template>\n"],"names":["_createElementBlock","_openBlock","_Fragment","_mergeProps","_renderSlot","$slots","_createBlock","_resolveDynamicComponent","_createElementVNode","_hoisted_1","BvIcon","_hoisted_2","_renderList","BvButton","_hoisted_3","_createVNode","_createTextVNode","_toDisplayString","_normalizeClass","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","BvTag","_normalizeStyle","_Transition","BvSpinner","_a"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { PropType } from 'vue';
2
- import { TableColumn, TableRow, TablePaginationProps } from './table.types';
2
+ import { TableColumn, TablePaginationProps, TableRow } from './table.types';
3
3
  declare function __VLS_template(): {
4
4
  attrs: Partial<{}>;
5
5
  slots: Partial<Record<string, (_: {
@@ -9,7 +9,9 @@ declare function __VLS_template(): {
9
9
  'header-actions'?(_: {}): any;
10
10
  'empty-state'?(_: {}): any;
11
11
  };
12
- refs: {};
12
+ refs: {
13
+ paginationRef: HTMLDivElement;
14
+ };
13
15
  rootEl: any;
14
16
  };
15
17
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
@@ -170,7 +172,9 @@ declare const __VLS_component: import('vue').DefineComponent<import('vue').Extra
170
172
  isLoading: boolean;
171
173
  pagination: TablePaginationProps;
172
174
  loadingText: string;
173
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
175
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {
176
+ paginationRef: HTMLDivElement;
177
+ }, any>;
174
178
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
175
179
  export default _default;
176
180
  type __VLS_WithTemplateSlots<T, S> = T & {
@@ -1 +1 @@
1
- {"version":3,"file":"Table.vue.d.ts","sourceRoot":"","sources":["../../src/table/Table.vue"],"names":[],"mappings":"AA0QA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,KAAK,CAAC;AAGzD,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,oBAAoB,EACrB,MAAM,eAAe,CAAC;AA+EvB,iBAAS,cAAc;WA4QT,OAAO,IAA6B;;;;UAbqC,GAAG;kCAEpD,GAAG;+BACL,GAAG;;;;EAetC;AAuCD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;cASC,QAAQ,CAAC;YAAE,MAAM,CAAC,EAAE,OAAO,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;;;;cAGhD,QAAQ,CAAC,QAAQ,EAAE,CAAC;;;;cACjB,QAAQ,CAAC,WAAW,EAAE,CAAC;;;;;;;;;;;;;;;;cAKhC,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;cAS5B,QAAQ,CAAC,oBAAoB,CAAC;;;;;;;;;;;;;;;;;;cAlB9B,QAAQ,CAAC;YAAE,MAAM,CAAC,EAAE,OAAO,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;;;;cAGhD,QAAQ,CAAC,QAAQ,EAAE,CAAC;;;;cACjB,QAAQ,CAAC,WAAW,EAAE,CAAC;;;;;;;;;;;;;;;;cAKhC,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;cAS5B,QAAQ,CAAC,oBAAoB,CAAC;;;;;;;;;;;;;;;;;;;iBAlBV,OAAO;uBAAiB,MAAM;;;;;;;;;;;4EAuBtE,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAEpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"Table.vue.d.ts","sourceRoot":"","sources":["../../src/table/Table.vue"],"names":[],"mappings":"AAkSA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAA6C,KAAK,QAAQ,EAAE,MAAM,KAAK,CAAC;AAG/E,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACpB,QAAQ,EACT,MAAM,eAAe,CAAC;AAuGvB,iBAAS,cAAc;WAwRT,OAAO,IAA6B;;;;UAdqC,GAAG;kCAEpD,GAAG;+BACL,GAAG;;;;;;EAgBtC;AAwCD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;cASD,QAAQ,CAAC;YAAE,MAAM,CAAC,EAAE,OAAO,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;;;;cAGhD,QAAQ,CAAC,QAAQ,EAAE,CAAC;;;;cACjB,QAAQ,CAAC,WAAW,EAAE,CAAC;;;;;;;;;;;;;;;;cAKhC,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;cAS5B,QAAQ,CAAC,oBAAoB,CAAC;;;;;;;;;;;;;;;;;;cAlB9B,QAAQ,CAAC;YAAE,MAAM,CAAC,EAAE,OAAO,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;;;;cAGhD,QAAQ,CAAC,QAAQ,EAAE,CAAC;;;;cACjB,QAAQ,CAAC,WAAW,EAAE,CAAC;;;;;;;;;;;;;;;;cAKhC,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;cAS5B,QAAQ,CAAC,oBAAoB,CAAC;;;;;;;;;;;;;;;;;;;iBAlBV,OAAO;uBAAiB,MAAM;;;;;;;;;;;;;OAwBpE,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAEpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@baklavue/ui",
3
- "version": "1.0.1",
3
+ "version": "1.0.2-preview.2",
4
4
  "description": "Vue 3 UI kit for Trendyol Baklava Design System",
5
5
  "author": "erbilnas",
6
6
  "license": "MIT",
@@ -30,7 +30,8 @@
30
30
  "types": "./dist/index.d.ts",
31
31
  "import": "./dist/index.js",
32
32
  "default": "./dist/index.js"
33
- }
33
+ },
34
+ "./dist/index.css": "./dist/index.css"
34
35
  },
35
36
  "type": "module",
36
37
  "scripts": {