@baklavue/ui 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/dist/accordion/Accordion.vue.d.ts +51 -0
  2. package/dist/accordion/Accordion.vue.d.ts.map +1 -0
  3. package/dist/accordion/accordion.types.d.ts +97 -0
  4. package/dist/accordion/accordion.types.d.ts.map +1 -0
  5. package/dist/accordion/index.d.ts +3 -0
  6. package/dist/accordion/index.d.ts.map +1 -0
  7. package/dist/alert/Alert.vue.d.ts +49 -0
  8. package/dist/alert/Alert.vue.d.ts.map +1 -0
  9. package/dist/alert/alert.types.d.ts +52 -0
  10. package/dist/alert/alert.types.d.ts.map +1 -0
  11. package/dist/alert/index.d.ts +3 -0
  12. package/dist/alert/index.d.ts.map +1 -0
  13. package/dist/badge/Badge.vue.d.ts +22 -0
  14. package/dist/badge/Badge.vue.d.ts.map +1 -0
  15. package/dist/badge/badge.types.d.ts +7 -0
  16. package/dist/badge/badge.types.d.ts.map +1 -0
  17. package/dist/badge/index.d.ts +3 -0
  18. package/dist/badge/index.d.ts.map +1 -0
  19. package/dist/banner/Banner.vue.d.ts +36 -0
  20. package/dist/banner/Banner.vue.d.ts.map +1 -0
  21. package/dist/banner/banner.types.d.ts +70 -0
  22. package/dist/banner/banner.types.d.ts.map +1 -0
  23. package/dist/banner/index.d.ts +3 -0
  24. package/dist/banner/index.d.ts.map +1 -0
  25. package/dist/button/Button.vue.d.ts +36 -0
  26. package/dist/button/Button.vue.d.ts.map +1 -0
  27. package/dist/button/button.types.d.ts +24 -0
  28. package/dist/button/button.types.d.ts.map +1 -0
  29. package/dist/button/index.d.ts +3 -0
  30. package/dist/button/index.d.ts.map +1 -0
  31. package/dist/checkbox/Checkbox.vue.d.ts +39 -0
  32. package/dist/checkbox/Checkbox.vue.d.ts.map +1 -0
  33. package/dist/checkbox/checkbox.types.d.ts +95 -0
  34. package/dist/checkbox/checkbox.types.d.ts.map +1 -0
  35. package/dist/checkbox/index.d.ts +3 -0
  36. package/dist/checkbox/index.d.ts.map +1 -0
  37. package/dist/chip/Chip.vue.d.ts +29 -0
  38. package/dist/chip/Chip.vue.d.ts.map +1 -0
  39. package/dist/chip/chip.types.d.ts +59 -0
  40. package/dist/chip/chip.types.d.ts.map +1 -0
  41. package/dist/chip/index.d.ts +3 -0
  42. package/dist/chip/index.d.ts.map +1 -0
  43. package/dist/datepicker/Datepicker.vue.d.ts +41 -0
  44. package/dist/datepicker/Datepicker.vue.d.ts.map +1 -0
  45. package/dist/datepicker/datepicker.types.d.ts +38 -0
  46. package/dist/datepicker/datepicker.types.d.ts.map +1 -0
  47. package/dist/datepicker/index.d.ts +3 -0
  48. package/dist/datepicker/index.d.ts.map +1 -0
  49. package/dist/dialog/Dialog.vue.d.ts +44 -0
  50. package/dist/dialog/Dialog.vue.d.ts.map +1 -0
  51. package/dist/dialog/dialog.types.d.ts +18 -0
  52. package/dist/dialog/dialog.types.d.ts.map +1 -0
  53. package/dist/dialog/index.d.ts +3 -0
  54. package/dist/dialog/index.d.ts.map +1 -0
  55. package/dist/drawer/Drawer.vue.d.ts +42 -0
  56. package/dist/drawer/Drawer.vue.d.ts.map +1 -0
  57. package/dist/drawer/drawer.types.d.ts +18 -0
  58. package/dist/drawer/drawer.types.d.ts.map +1 -0
  59. package/dist/drawer/index.d.ts +3 -0
  60. package/dist/drawer/index.d.ts.map +1 -0
  61. package/dist/dropdown/Dropdown.vue.d.ts +59 -0
  62. package/dist/dropdown/Dropdown.vue.d.ts.map +1 -0
  63. package/dist/dropdown/dropdown.types.d.ts +92 -0
  64. package/dist/dropdown/dropdown.types.d.ts.map +1 -0
  65. package/dist/dropdown/index.d.ts +3 -0
  66. package/dist/dropdown/index.d.ts.map +1 -0
  67. package/dist/file-upload/FileUpload.vue.d.ts +44 -0
  68. package/dist/file-upload/FileUpload.vue.d.ts.map +1 -0
  69. package/dist/file-upload/file-upload.types.d.ts +76 -0
  70. package/dist/file-upload/file-upload.types.d.ts.map +1 -0
  71. package/dist/file-upload/index.d.ts +3 -0
  72. package/dist/file-upload/index.d.ts.map +1 -0
  73. package/dist/icon/Icon.vue.d.ts +29 -0
  74. package/dist/icon/Icon.vue.d.ts.map +1 -0
  75. package/dist/icon/icon.types.d.ts +23 -0
  76. package/dist/icon/icon.types.d.ts.map +1 -0
  77. package/dist/icon/index.d.ts +3 -0
  78. package/dist/icon/index.d.ts.map +1 -0
  79. package/dist/image/Image.vue.d.ts +30 -0
  80. package/dist/image/Image.vue.d.ts.map +1 -0
  81. package/dist/image/image.types.d.ts +48 -0
  82. package/dist/image/image.types.d.ts.map +1 -0
  83. package/dist/image/index.d.ts +3 -0
  84. package/dist/image/index.d.ts.map +1 -0
  85. package/dist/index.css +474 -0
  86. package/dist/index.d.ts +42 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +2404 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/input/Input.vue.d.ts +39 -0
  91. package/dist/input/Input.vue.d.ts.map +1 -0
  92. package/dist/input/index.d.ts +3 -0
  93. package/dist/input/index.d.ts.map +1 -0
  94. package/dist/input/input.types.d.ts +122 -0
  95. package/dist/input/input.types.d.ts.map +1 -0
  96. package/dist/link/Link.vue.d.ts +38 -0
  97. package/dist/link/Link.vue.d.ts.map +1 -0
  98. package/dist/link/index.d.ts +3 -0
  99. package/dist/link/index.d.ts.map +1 -0
  100. package/dist/link/link.types.d.ts +40 -0
  101. package/dist/link/link.types.d.ts.map +1 -0
  102. package/dist/notification/Notification.vue.d.ts +7 -0
  103. package/dist/notification/Notification.vue.d.ts.map +1 -0
  104. package/dist/notification/index.d.ts +3 -0
  105. package/dist/notification/index.d.ts.map +1 -0
  106. package/dist/notification/notification.types.d.ts +25 -0
  107. package/dist/notification/notification.types.d.ts.map +1 -0
  108. package/dist/pagination/Pagination.vue.d.ts +34 -0
  109. package/dist/pagination/Pagination.vue.d.ts.map +1 -0
  110. package/dist/pagination/index.d.ts +3 -0
  111. package/dist/pagination/index.d.ts.map +1 -0
  112. package/dist/pagination/pagination.types.d.ts +54 -0
  113. package/dist/pagination/pagination.types.d.ts.map +1 -0
  114. package/dist/radio/Radio.vue.d.ts +42 -0
  115. package/dist/radio/Radio.vue.d.ts.map +1 -0
  116. package/dist/radio/index.d.ts +3 -0
  117. package/dist/radio/index.d.ts.map +1 -0
  118. package/dist/radio/radio.types.d.ts +84 -0
  119. package/dist/radio/radio.types.d.ts.map +1 -0
  120. package/dist/scroll-to-top/ScrollToTop.vue.d.ts +14 -0
  121. package/dist/scroll-to-top/ScrollToTop.vue.d.ts.map +1 -0
  122. package/dist/scroll-to-top/index.d.ts +3 -0
  123. package/dist/scroll-to-top/index.d.ts.map +1 -0
  124. package/dist/scroll-to-top/scroll-to-top.types.d.ts +33 -0
  125. package/dist/scroll-to-top/scroll-to-top.types.d.ts.map +1 -0
  126. package/dist/select/Select.vue.d.ts +42 -0
  127. package/dist/select/Select.vue.d.ts.map +1 -0
  128. package/dist/select/index.d.ts +3 -0
  129. package/dist/select/index.d.ts.map +1 -0
  130. package/dist/select/select.types.d.ts +52 -0
  131. package/dist/select/select.types.d.ts.map +1 -0
  132. package/dist/skeleton/Skeleton.vue.d.ts +9 -0
  133. package/dist/skeleton/Skeleton.vue.d.ts.map +1 -0
  134. package/dist/skeleton/index.d.ts +3 -0
  135. package/dist/skeleton/index.d.ts.map +1 -0
  136. package/dist/skeleton/skeleton.types.d.ts +30 -0
  137. package/dist/skeleton/skeleton.types.d.ts.map +1 -0
  138. package/dist/spinner/Spinner.vue.d.ts +8 -0
  139. package/dist/spinner/Spinner.vue.d.ts.map +1 -0
  140. package/dist/spinner/index.d.ts +3 -0
  141. package/dist/spinner/index.d.ts.map +1 -0
  142. package/dist/spinner/spinner.types.d.ts +12 -0
  143. package/dist/spinner/spinner.types.d.ts.map +1 -0
  144. package/dist/split-button/SplitButton.vue.d.ts +25 -0
  145. package/dist/split-button/SplitButton.vue.d.ts.map +1 -0
  146. package/dist/split-button/index.d.ts +3 -0
  147. package/dist/split-button/index.d.ts.map +1 -0
  148. package/dist/split-button/split-button.types.d.ts +19 -0
  149. package/dist/split-button/split-button.types.d.ts.map +1 -0
  150. package/dist/stepper/Stepper.vue.d.ts +30 -0
  151. package/dist/stepper/Stepper.vue.d.ts.map +1 -0
  152. package/dist/stepper/index.d.ts +3 -0
  153. package/dist/stepper/index.d.ts.map +1 -0
  154. package/dist/stepper/stepper.types.d.ts +29 -0
  155. package/dist/stepper/stepper.types.d.ts.map +1 -0
  156. package/dist/switch/Switch.vue.d.ts +32 -0
  157. package/dist/switch/Switch.vue.d.ts.map +1 -0
  158. package/dist/switch/index.d.ts +3 -0
  159. package/dist/switch/index.d.ts.map +1 -0
  160. package/dist/switch/switch.types.d.ts +14 -0
  161. package/dist/switch/switch.types.d.ts.map +1 -0
  162. package/dist/tab/Tab.vue.d.ts +31 -0
  163. package/dist/tab/Tab.vue.d.ts.map +1 -0
  164. package/dist/tab/index.d.ts +3 -0
  165. package/dist/tab/index.d.ts.map +1 -0
  166. package/dist/tab/tab.types.d.ts +17 -0
  167. package/dist/tab/tab.types.d.ts.map +1 -0
  168. package/dist/table/Table.vue.d.ts +181 -0
  169. package/dist/table/Table.vue.d.ts.map +1 -0
  170. package/dist/table/index.d.ts +3 -0
  171. package/dist/table/index.d.ts.map +1 -0
  172. package/dist/table/table.types.d.ts +61 -0
  173. package/dist/table/table.types.d.ts.map +1 -0
  174. package/dist/tag/Tag.vue.d.ts +31 -0
  175. package/dist/tag/Tag.vue.d.ts.map +1 -0
  176. package/dist/tag/index.d.ts +3 -0
  177. package/dist/tag/index.d.ts.map +1 -0
  178. package/dist/tag/tag.types.d.ts +22 -0
  179. package/dist/tag/tag.types.d.ts.map +1 -0
  180. package/dist/textarea/Textarea.vue.d.ts +35 -0
  181. package/dist/textarea/Textarea.vue.d.ts.map +1 -0
  182. package/dist/textarea/index.d.ts +3 -0
  183. package/dist/textarea/index.d.ts.map +1 -0
  184. package/dist/textarea/textarea.types.d.ts +37 -0
  185. package/dist/textarea/textarea.types.d.ts.map +1 -0
  186. package/dist/tooltip/Tooltip.vue.d.ts +33 -0
  187. package/dist/tooltip/Tooltip.vue.d.ts.map +1 -0
  188. package/dist/tooltip/index.d.ts +3 -0
  189. package/dist/tooltip/index.d.ts.map +1 -0
  190. package/dist/tooltip/tooltip.types.d.ts +17 -0
  191. package/dist/tooltip/tooltip.types.d.ts.map +1 -0
  192. package/dist/utils/loadBaklavaResources.d.ts +2 -0
  193. package/dist/utils/loadBaklavaResources.d.ts.map +1 -0
  194. package/package.json +18 -2
  195. package/.releaserc.json +0 -14
  196. package/CHANGELOG.md +0 -88
  197. package/env.d.ts +0 -5
  198. package/index.ts +0 -1
  199. package/src/accordion/Accordion.spec.ts +0 -75
  200. package/src/accordion/Accordion.vue +0 -206
  201. package/src/accordion/accordion.types.ts +0 -109
  202. package/src/accordion/index.ts +0 -3
  203. package/src/alert/Alert.spec.ts +0 -38
  204. package/src/alert/Alert.vue +0 -199
  205. package/src/alert/alert.types.ts +0 -58
  206. package/src/alert/index.ts +0 -2
  207. package/src/badge/Badge.spec.ts +0 -28
  208. package/src/badge/Badge.vue +0 -20
  209. package/src/badge/badge.types.ts +0 -7
  210. package/src/badge/index.ts +0 -2
  211. package/src/banner/Banner.spec.ts +0 -111
  212. package/src/banner/Banner.vue +0 -265
  213. package/src/banner/banner.types.ts +0 -86
  214. package/src/banner/index.ts +0 -2
  215. package/src/button/Button.spec.ts +0 -51
  216. package/src/button/Button.vue +0 -45
  217. package/src/button/button.types.ts +0 -30
  218. package/src/button/index.ts +0 -3
  219. package/src/checkbox/Checkbox.spec.ts +0 -216
  220. package/src/checkbox/Checkbox.vue +0 -148
  221. package/src/checkbox/checkbox.types.ts +0 -108
  222. package/src/checkbox/index.ts +0 -2
  223. package/src/chip/Chip.spec.ts +0 -49
  224. package/src/chip/Chip.vue +0 -237
  225. package/src/chip/chip.types.ts +0 -77
  226. package/src/chip/index.ts +0 -2
  227. package/src/datepicker/Datepicker.spec.ts +0 -129
  228. package/src/datepicker/Datepicker.vue +0 -172
  229. package/src/datepicker/datepicker.types.ts +0 -39
  230. package/src/datepicker/index.ts +0 -2
  231. package/src/dialog/Dialog.spec.ts +0 -111
  232. package/src/dialog/Dialog.vue +0 -178
  233. package/src/dialog/dialog.types.ts +0 -17
  234. package/src/dialog/index.ts +0 -2
  235. package/src/drawer/Drawer.spec.ts +0 -102
  236. package/src/drawer/Drawer.vue +0 -162
  237. package/src/drawer/drawer.types.ts +0 -17
  238. package/src/drawer/index.ts +0 -2
  239. package/src/dropdown/Dropdown.spec.ts +0 -207
  240. package/src/dropdown/Dropdown.vue +0 -231
  241. package/src/dropdown/dropdown.types.ts +0 -110
  242. package/src/dropdown/index.ts +0 -2
  243. package/src/file-upload/FileUpload.spec.ts +0 -359
  244. package/src/file-upload/FileUpload.vue +0 -440
  245. package/src/file-upload/file-upload.types.ts +0 -89
  246. package/src/file-upload/index.ts +0 -7
  247. package/src/icon/Icon.spec.ts +0 -40
  248. package/src/icon/Icon.vue +0 -102
  249. package/src/icon/icon.types.ts +0 -25
  250. package/src/icon/index.ts +0 -2
  251. package/src/image/Image.spec.ts +0 -23
  252. package/src/image/Image.vue +0 -144
  253. package/src/image/image.types.ts +0 -57
  254. package/src/image/index.ts +0 -3
  255. package/src/index.ts +0 -43
  256. package/src/input/Input.spec.ts +0 -69
  257. package/src/input/Input.vue +0 -148
  258. package/src/input/index.ts +0 -3
  259. package/src/input/input.types.ts +0 -156
  260. package/src/link/Link.spec.ts +0 -69
  261. package/src/link/Link.vue +0 -133
  262. package/src/link/index.ts +0 -2
  263. package/src/link/link.types.ts +0 -42
  264. package/src/notification/Notification.spec.ts +0 -18
  265. package/src/notification/Notification.vue +0 -57
  266. package/src/notification/index.ts +0 -2
  267. package/src/notification/notification.types.ts +0 -25
  268. package/src/pagination/Pagination.spec.ts +0 -39
  269. package/src/pagination/Pagination.vue +0 -137
  270. package/src/pagination/index.ts +0 -2
  271. package/src/pagination/pagination.types.ts +0 -61
  272. package/src/radio/Radio.spec.ts +0 -149
  273. package/src/radio/Radio.vue +0 -205
  274. package/src/radio/index.ts +0 -2
  275. package/src/radio/radio.types.ts +0 -95
  276. package/src/scroll-to-top/ScrollToTop.spec.ts +0 -119
  277. package/src/scroll-to-top/ScrollToTop.vue +0 -130
  278. package/src/scroll-to-top/index.ts +0 -2
  279. package/src/scroll-to-top/scroll-to-top.types.ts +0 -42
  280. package/src/select/Select.spec.ts +0 -47
  281. package/src/select/Select.vue +0 -147
  282. package/src/select/index.ts +0 -2
  283. package/src/select/select.types.ts +0 -53
  284. package/src/skeleton/Skeleton.spec.ts +0 -28
  285. package/src/skeleton/Skeleton.vue +0 -115
  286. package/src/skeleton/index.ts +0 -2
  287. package/src/skeleton/skeleton.types.ts +0 -33
  288. package/src/spinner/Spinner.spec.ts +0 -28
  289. package/src/spinner/Spinner.vue +0 -49
  290. package/src/spinner/index.ts +0 -2
  291. package/src/spinner/spinner.types.ts +0 -11
  292. package/src/split-button/SplitButton.spec.ts +0 -24
  293. package/src/split-button/SplitButton.vue +0 -73
  294. package/src/split-button/index.ts +0 -2
  295. package/src/split-button/split-button.types.ts +0 -19
  296. package/src/stepper/Stepper.spec.ts +0 -37
  297. package/src/stepper/Stepper.vue +0 -100
  298. package/src/stepper/index.ts +0 -2
  299. package/src/stepper/stepper.types.ts +0 -29
  300. package/src/switch/Switch.spec.ts +0 -30
  301. package/src/switch/Switch.vue +0 -80
  302. package/src/switch/index.ts +0 -2
  303. package/src/switch/switch.types.ts +0 -13
  304. package/src/tab/Tab.spec.ts +0 -87
  305. package/src/tab/Tab.vue +0 -99
  306. package/src/tab/index.ts +0 -2
  307. package/src/tab/tab.types.ts +0 -17
  308. package/src/table/Table.spec.ts +0 -185
  309. package/src/table/Table.vue +0 -264
  310. package/src/table/index.ts +0 -7
  311. package/src/table/table.types.ts +0 -62
  312. package/src/tag/Tag.spec.ts +0 -84
  313. package/src/tag/Tag.vue +0 -83
  314. package/src/tag/index.ts +0 -2
  315. package/src/tag/tag.types.ts +0 -24
  316. package/src/textarea/Textarea.spec.ts +0 -105
  317. package/src/textarea/Textarea.vue +0 -84
  318. package/src/textarea/index.ts +0 -2
  319. package/src/textarea/textarea.types.ts +0 -37
  320. package/src/tooltip/Tooltip.spec.ts +0 -46
  321. package/src/tooltip/Tooltip.vue +0 -81
  322. package/src/tooltip/index.ts +0 -3
  323. package/src/tooltip/tooltip.types.ts +0 -29
  324. package/src/utils/loadBaklavaResources.ts +0 -24
  325. package/tests/setup.ts +0 -352
  326. package/tsconfig.json +0 -29
  327. package/vitest.config.ts +0 -32
package/dist/index.js ADDED
@@ -0,0 +1,2404 @@
1
+ import { defineComponent, ref, computed, watch, onMounted, openBlock, createElementBlock, Fragment, renderList, mergeProps, renderSlot, nextTick, createCommentVNode, normalizeProps, guardReactiveProps, createTextVNode, toDisplayString, normalizeStyle, createBlock, resolveDynamicComponent, withCtx, createElementVNode, withModifiers, createVNode, normalizeClass, onBeforeUnmount, withDirectives, vShow, onUnmounted, Transition } from "vue";
2
+ const BAKLAVA_VERSION = "3.4.2";
3
+ const BAKLAVA_DETECTION_ELEMENT = "bl-table";
4
+ const loadBaklavaResources = () => {
5
+ if (customElements.get(BAKLAVA_DETECTION_ELEMENT)) {
6
+ return;
7
+ }
8
+ const loadScript = () => {
9
+ if (!document.querySelector('script[src*="baklava.js"]')) {
10
+ const script = document.createElement("script");
11
+ script.type = "module";
12
+ script.src = `https://cdn.jsdelivr.net/npm/@trendyol/baklava@${BAKLAVA_VERSION}/dist/baklava.js`;
13
+ document.head.appendChild(script);
14
+ }
15
+ };
16
+ const loadStyles = () => {
17
+ if (!document.querySelector('link[href*="default.css"]')) {
18
+ const link = document.createElement("link");
19
+ link.rel = "stylesheet";
20
+ link.href = `https://cdn.jsdelivr.net/npm/@trendyol/baklava@${BAKLAVA_VERSION}/dist/themes/default.css`;
21
+ document.head.appendChild(link);
22
+ }
23
+ };
24
+ loadScript();
25
+ loadStyles();
26
+ };
27
+ const _hoisted_1$i = ["multiple"];
28
+ const _sfc_main$u = /* @__PURE__ */ defineComponent({
29
+ __name: "Accordion",
30
+ props: {
31
+ open: { type: Boolean, default: false },
32
+ caption: { default: void 0 },
33
+ icon: { type: Boolean, default: void 0 },
34
+ disabled: { type: Boolean, default: false },
35
+ animationDuration: { default: 250 },
36
+ multiple: { type: Boolean, default: void 0 },
37
+ items: {}
38
+ },
39
+ emits: ["toggle"],
40
+ setup(__props, { expose: __expose, emit: __emit }) {
41
+ const props = __props;
42
+ const emit = __emit;
43
+ const accordionRef = ref(null);
44
+ const isGroupMode = computed(
45
+ () => props.multiple !== void 0 && Array.isArray(props.items)
46
+ );
47
+ watch(
48
+ () => props.open,
49
+ (newValue) => {
50
+ if (!isGroupMode.value && accordionRef.value) {
51
+ const blAccordion = accordionRef.value;
52
+ if (newValue && !blAccordion.open) {
53
+ blAccordion.expand();
54
+ } else if (!newValue && blAccordion.open) {
55
+ blAccordion.collapse();
56
+ }
57
+ }
58
+ },
59
+ { immediate: true }
60
+ );
61
+ const handleToggle = (event) => {
62
+ if (!isGroupMode.value) {
63
+ const isOpen = event.detail;
64
+ emit("toggle", isOpen);
65
+ }
66
+ };
67
+ onMounted(() => {
68
+ loadBaklavaResources();
69
+ if (!isGroupMode.value && accordionRef.value) {
70
+ const blAccordion = accordionRef.value;
71
+ if (props.open && !blAccordion.open) {
72
+ blAccordion.expand();
73
+ } else if (!props.open && blAccordion.open) {
74
+ blAccordion.collapse();
75
+ }
76
+ }
77
+ });
78
+ __expose({
79
+ /**
80
+ * Expands the accordion programmatically.
81
+ *
82
+ * @public
83
+ */
84
+ expand: () => {
85
+ if (!isGroupMode.value && accordionRef.value) {
86
+ accordionRef.value.expand();
87
+ }
88
+ },
89
+ /**
90
+ * Collapses the accordion programmatically.
91
+ *
92
+ * @public
93
+ */
94
+ collapse: () => {
95
+ if (!isGroupMode.value && accordionRef.value) {
96
+ accordionRef.value.collapse();
97
+ }
98
+ }
99
+ });
100
+ return (_ctx, _cache) => {
101
+ return isGroupMode.value ? (openBlock(), createElementBlock("bl-accordion-group", {
102
+ key: 0,
103
+ multiple: props.multiple === true ? true : void 0
104
+ }, [
105
+ (openBlock(true), createElementBlock(Fragment, null, renderList(props.items, (item, index) => {
106
+ return openBlock(), createElementBlock("bl-accordion", mergeProps({ key: index }, { ref_for: true }, {
107
+ open: item.open === true ? true : void 0,
108
+ caption: item.caption,
109
+ icon: item.icon,
110
+ disabled: item.disabled === true ? true : void 0,
111
+ animationDuration: item.animationDuration
112
+ }), [
113
+ renderSlot(_ctx.$slots, "item", {
114
+ item,
115
+ index
116
+ })
117
+ ], 16);
118
+ }), 128))
119
+ ], 8, _hoisted_1$i)) : (openBlock(), createElementBlock("bl-accordion", mergeProps({
120
+ key: 1,
121
+ ref_key: "accordionRef",
122
+ ref: accordionRef
123
+ }, {
124
+ open: props.open === true ? true : void 0,
125
+ caption: props.caption,
126
+ icon: props.icon,
127
+ disabled: props.disabled === true ? true : void 0,
128
+ animationDuration: props.animationDuration
129
+ }, { onBlToggle: handleToggle }), [
130
+ renderSlot(_ctx.$slots, "default")
131
+ ], 16));
132
+ };
133
+ }
134
+ });
135
+ const _sfc_main$t = /* @__PURE__ */ defineComponent({
136
+ __name: "Alert",
137
+ props: {
138
+ variant: { default: "info" },
139
+ description: { default: void 0 },
140
+ icon: { type: Boolean, default: void 0 },
141
+ closable: { type: Boolean, default: false },
142
+ caption: { default: void 0 },
143
+ closed: { type: Boolean, default: false }
144
+ },
145
+ emits: ["close"],
146
+ setup(__props, { expose: __expose, emit: __emit }) {
147
+ const props = __props;
148
+ const emit = __emit;
149
+ const alertRef = ref(null);
150
+ function asBlAlert(el) {
151
+ return el;
152
+ }
153
+ async function waitForBlAlert() {
154
+ if (!customElements.get("bl-alert")) {
155
+ await customElements.whenDefined("bl-alert");
156
+ }
157
+ }
158
+ function syncWithBlAlert(el) {
159
+ const blAlert = asBlAlert(el);
160
+ if (!blAlert || typeof blAlert.close !== "function" || typeof blAlert.open !== "function") {
161
+ return;
162
+ }
163
+ if (props.closed && !blAlert.closed) {
164
+ blAlert.close();
165
+ } else if (!props.closed && blAlert.closed) {
166
+ blAlert.open();
167
+ }
168
+ }
169
+ function callBlAlertMethod(method) {
170
+ const el = asBlAlert(alertRef.value);
171
+ if (el && typeof el[method] === "function") {
172
+ el[method]();
173
+ }
174
+ }
175
+ watch(
176
+ () => props.closed,
177
+ () => {
178
+ if (alertRef.value) {
179
+ syncWithBlAlert(alertRef.value);
180
+ }
181
+ }
182
+ );
183
+ function handleClose() {
184
+ emit("close");
185
+ }
186
+ onMounted(async () => {
187
+ loadBaklavaResources();
188
+ await nextTick();
189
+ await waitForBlAlert();
190
+ if (alertRef.value) {
191
+ syncWithBlAlert(alertRef.value);
192
+ }
193
+ });
194
+ __expose({
195
+ /**
196
+ * Opens the alert programmatically.
197
+ *
198
+ * @public
199
+ */
200
+ open: async () => {
201
+ await nextTick();
202
+ callBlAlertMethod("open");
203
+ },
204
+ /**
205
+ * Closes the alert programmatically.
206
+ *
207
+ * @public
208
+ */
209
+ close: async () => {
210
+ await nextTick();
211
+ callBlAlertMethod("close");
212
+ }
213
+ });
214
+ return (_ctx, _cache) => {
215
+ return openBlock(), createElementBlock("bl-alert", mergeProps({
216
+ ref_key: "alertRef",
217
+ ref: alertRef
218
+ }, {
219
+ ...props,
220
+ closable: props.closable === true ? true : void 0,
221
+ closed: props.closed
222
+ }, { onBlClose: handleClose }), [
223
+ _ctx.$slots["caption"] ? renderSlot(_ctx.$slots, "caption", { key: 0 }) : createCommentVNode("", true),
224
+ _ctx.$slots["default"] ? renderSlot(_ctx.$slots, "default", { key: 1 }) : createCommentVNode("", true),
225
+ _ctx.$slots["action"] ? renderSlot(_ctx.$slots, "action", { key: 2 }) : createCommentVNode("", true)
226
+ ], 16);
227
+ };
228
+ }
229
+ });
230
+ const _sfc_main$s = /* @__PURE__ */ defineComponent({
231
+ __name: "Badge",
232
+ props: {
233
+ size: { default: "medium" },
234
+ icon: { default: void 0 }
235
+ },
236
+ setup(__props) {
237
+ const props = __props;
238
+ onMounted(() => {
239
+ loadBaklavaResources();
240
+ });
241
+ return (_ctx, _cache) => {
242
+ return openBlock(), createElementBlock("bl-badge", normalizeProps(guardReactiveProps(props)), [
243
+ renderSlot(_ctx.$slots, "default")
244
+ ], 16);
245
+ };
246
+ }
247
+ });
248
+ const _sfc_main$r = /* @__PURE__ */ defineComponent({
249
+ __name: "Button",
250
+ props: {
251
+ variant: { default: "primary" },
252
+ kind: { default: "default" },
253
+ size: { default: "medium" },
254
+ label: { default: void 0 },
255
+ loadingLabel: { default: "..." },
256
+ loading: { type: Boolean, default: void 0 },
257
+ disabled: { type: Boolean, default: void 0 },
258
+ href: { default: void 0 },
259
+ icon: { default: void 0 },
260
+ target: { default: void 0 },
261
+ type: { default: "button" },
262
+ autofocus: { type: Boolean, default: void 0 },
263
+ customClass: {}
264
+ },
265
+ emits: ["click"],
266
+ setup(__props, { emit: __emit }) {
267
+ const props = __props;
268
+ const emit = __emit;
269
+ onMounted(() => {
270
+ loadBaklavaResources();
271
+ });
272
+ return (_ctx, _cache) => {
273
+ var _a, _b;
274
+ return openBlock(), createElementBlock("bl-button", mergeProps({
275
+ ...props,
276
+ loading: props.loading === true ? true : void 0
277
+ }, {
278
+ style: {
279
+ "--bl-color-primary": __props.kind === "custom" ? (_a = __props.customClass) == null ? void 0 : _a.color : void 0,
280
+ "--bl-color-primary-highlight": __props.kind === "custom" ? (_b = __props.customClass) == null ? void 0 : _b.highlightColor : void 0
281
+ },
282
+ onBlClick: _cache[0] || (_cache[0] = ($event) => emit("click", $event))
283
+ }), [
284
+ renderSlot(_ctx.$slots, "default", {}, () => [
285
+ createTextVNode(toDisplayString(__props.label), 1)
286
+ ])
287
+ ], 16);
288
+ };
289
+ }
290
+ });
291
+ const _hoisted_1$h = ["name"];
292
+ const _sfc_main$q = /* @__PURE__ */ defineComponent({
293
+ __name: "Icon",
294
+ props: {
295
+ name: { default: void 0 },
296
+ size: { default: void 0 },
297
+ color: { default: void 0 }
298
+ },
299
+ emits: ["load", "error"],
300
+ setup(__props, { emit: __emit }) {
301
+ const props = __props;
302
+ const emit = __emit;
303
+ const iconStyle = computed(() => ({
304
+ ...props.size && { fontSize: props.size },
305
+ ...props.color && { color: props.color }
306
+ }));
307
+ onMounted(() => {
308
+ loadBaklavaResources();
309
+ });
310
+ return (_ctx, _cache) => {
311
+ return openBlock(), createElementBlock("bl-icon", {
312
+ name: props.name,
313
+ style: normalizeStyle(iconStyle.value),
314
+ onBlLoad: _cache[0] || (_cache[0] = ($event) => emit("load", $event.detail)),
315
+ onBlError: _cache[1] || (_cache[1] = ($event) => emit("error", $event.detail))
316
+ }, [
317
+ renderSlot(_ctx.$slots, "default")
318
+ ], 44, _hoisted_1$h);
319
+ };
320
+ }
321
+ });
322
+ const _sfc_main$p = /* @__PURE__ */ defineComponent({
323
+ __name: "Link",
324
+ props: {
325
+ href: { default: void 0 },
326
+ target: { default: void 0 },
327
+ disabled: { type: Boolean, default: void 0 },
328
+ variant: { default: void 0 },
329
+ size: { default: void 0 },
330
+ kind: { default: void 0 },
331
+ ariaLabel: { default: void 0 },
332
+ rel: { default: void 0 },
333
+ hreflang: { default: void 0 },
334
+ type: { default: void 0 },
335
+ referrerPolicy: { default: void 0 },
336
+ download: { default: void 0 },
337
+ ping: { default: void 0 }
338
+ },
339
+ emits: ["click"],
340
+ setup(__props, { emit: __emit }) {
341
+ const props = __props;
342
+ const emit = __emit;
343
+ const linkBindings = computed(() => {
344
+ const { disabled, href, ...rest } = props;
345
+ return {
346
+ ...rest,
347
+ href: disabled ? void 0 : href,
348
+ "aria-disabled": disabled ? "true" : void 0,
349
+ tabindex: disabled ? -1 : void 0
350
+ };
351
+ });
352
+ function handleClick(event) {
353
+ if (props.disabled) {
354
+ event.preventDefault();
355
+ event.stopPropagation();
356
+ return;
357
+ }
358
+ emit("click", event);
359
+ }
360
+ onMounted(() => {
361
+ loadBaklavaResources();
362
+ });
363
+ return (_ctx, _cache) => {
364
+ return openBlock(), createElementBlock("bl-link", mergeProps(linkBindings.value, {
365
+ class: { "bv-link--disabled": __props.disabled },
366
+ onBlClick: handleClick
367
+ }), [
368
+ _ctx.$slots["icon"] ? renderSlot(_ctx.$slots, "icon", { key: 0 }, void 0, true) : createCommentVNode("", true),
369
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
370
+ ], 16);
371
+ };
372
+ }
373
+ });
374
+ const _export_sfc = (sfc, props) => {
375
+ const target = sfc.__vccOpts || sfc;
376
+ for (const [key, val] of props) {
377
+ target[key] = val;
378
+ }
379
+ return target;
380
+ };
381
+ const BvLink = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["__scopeId", "data-v-1fbec25f"]]);
382
+ const _hoisted_1$g = { class: "bv-banner__content" };
383
+ const _hoisted_2$a = { class: "bv-banner__title" };
384
+ const _hoisted_3$4 = {
385
+ key: 0,
386
+ class: "bv-banner__close"
387
+ };
388
+ const STORAGE_PREFIX = "banner-";
389
+ const _sfc_main$o = /* @__PURE__ */ defineComponent({
390
+ __name: "Banner",
391
+ props: {
392
+ title: { default: void 0 },
393
+ icon: { default: void 0 },
394
+ color: { default: "primary" },
395
+ close: { type: Boolean, default: false },
396
+ closeIcon: { default: "close" },
397
+ id: { default: void 0 },
398
+ to: { default: void 0 },
399
+ target: { default: void 0 },
400
+ actions: { default: void 0 }
401
+ },
402
+ emits: ["close"],
403
+ setup(__props, { emit: __emit }) {
404
+ const props = __props;
405
+ const emit = __emit;
406
+ const isDismissed = ref(false);
407
+ function getStorageKey() {
408
+ if (!props.id || typeof props.id !== "string") return null;
409
+ const sanitized = props.id.replace(/[^a-zA-Z0-9_-]/g, "");
410
+ return sanitized ? `${STORAGE_PREFIX}${sanitized}` : null;
411
+ }
412
+ function checkDismissed() {
413
+ const key = getStorageKey();
414
+ if (!key || !props.close || typeof window === "undefined") return;
415
+ try {
416
+ const stored = localStorage.getItem(key);
417
+ if (stored === "true") {
418
+ isDismissed.value = true;
419
+ }
420
+ } catch {
421
+ }
422
+ }
423
+ function handleClose(e) {
424
+ e == null ? void 0 : e.preventDefault();
425
+ e == null ? void 0 : e.stopPropagation();
426
+ const key = getStorageKey();
427
+ if (key && typeof window !== "undefined") {
428
+ try {
429
+ localStorage.setItem(key, "true");
430
+ } catch {
431
+ }
432
+ }
433
+ isDismissed.value = true;
434
+ emit("close");
435
+ }
436
+ function handleActionClick(action) {
437
+ var _a;
438
+ (_a = action.onClick) == null ? void 0 : _a.call(action);
439
+ }
440
+ const colorStyles = computed(() => {
441
+ const colorMap = {
442
+ primary: {
443
+ bg: "var(--bl-color-primary)",
444
+ text: "var(--bl-color-primary-contrast, #fff)"
445
+ },
446
+ success: {
447
+ bg: "var(--bl-color-success)",
448
+ text: "var(--bl-color-success-contrast, #fff)"
449
+ },
450
+ danger: {
451
+ bg: "var(--bl-color-danger)",
452
+ text: "var(--bl-color-danger-contrast, #fff)"
453
+ },
454
+ warning: {
455
+ bg: "var(--bl-color-warning)",
456
+ text: "var(--bl-color-warning-contrast, #fff)"
457
+ },
458
+ info: {
459
+ bg: "var(--bl-color-info)",
460
+ text: "var(--bl-color-info-contrast, #fff)"
461
+ },
462
+ neutral: {
463
+ bg: "var(--bl-color-neutral-darkest)",
464
+ text: "var(--bl-color-neutral-full, #fff)"
465
+ }
466
+ };
467
+ const c = colorMap[props.color] ?? colorMap["primary"];
468
+ return {
469
+ backgroundColor: c.bg,
470
+ color: c.text
471
+ };
472
+ });
473
+ onMounted(() => {
474
+ loadBaklavaResources();
475
+ checkDismissed();
476
+ });
477
+ return (_ctx, _cache) => {
478
+ return !isDismissed.value ? (openBlock(), createElementBlock("div", {
479
+ key: 0,
480
+ class: "bv-banner",
481
+ style: normalizeStyle(colorStyles.value),
482
+ role: "banner"
483
+ }, [
484
+ (openBlock(), createBlock(resolveDynamicComponent(__props.to ? BvLink : "div"), mergeProps(__props.to ? { href: __props.to, target: __props.target } : {}, {
485
+ class: ["bv-banner__inner", { "bv-banner__inner--link": !!__props.to }]
486
+ }), {
487
+ default: withCtx(() => {
488
+ var _a;
489
+ return [
490
+ createElementVNode("div", _hoisted_1$g, [
491
+ renderSlot(_ctx.$slots, "leading", {}, () => [
492
+ __props.icon ? (openBlock(), createBlock(_sfc_main$q, {
493
+ key: 0,
494
+ name: __props.icon,
495
+ class: "bv-banner__icon"
496
+ }, null, 8, ["name"])) : createCommentVNode("", true)
497
+ ], true),
498
+ createElementVNode("div", _hoisted_2$a, [
499
+ renderSlot(_ctx.$slots, "title", {}, () => [
500
+ createTextVNode(toDisplayString(__props.title), 1)
501
+ ], true)
502
+ ]),
503
+ ((_a = __props.actions) == null ? void 0 : _a.length) || _ctx.$slots["actions"] ? (openBlock(), createElementBlock("div", {
504
+ key: 0,
505
+ class: "bv-banner__actions",
506
+ onClick: _cache[0] || (_cache[0] = withModifiers(() => {
507
+ }, ["stop"]))
508
+ }, [
509
+ renderSlot(_ctx.$slots, "actions", {}, () => [
510
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.actions, (action, idx) => {
511
+ return openBlock(), createElementBlock(Fragment, { key: idx }, [
512
+ action ? (openBlock(), createBlock(_sfc_main$r, {
513
+ key: 0,
514
+ variant: action.variant ?? "tertiary",
515
+ label: action.label,
516
+ icon: action.icon ?? action.trailingIcon,
517
+ size: "small",
518
+ class: "bv-banner__action-btn",
519
+ onClick: ($event) => handleActionClick(action)
520
+ }, null, 8, ["variant", "label", "icon", "onClick"])) : createCommentVNode("", true)
521
+ ], 64);
522
+ }), 128))
523
+ ], true)
524
+ ])) : createCommentVNode("", true)
525
+ ])
526
+ ];
527
+ }),
528
+ _: 3
529
+ }, 16, ["class"])),
530
+ __props.close ? (openBlock(), createElementBlock("div", _hoisted_3$4, [
531
+ renderSlot(_ctx.$slots, "close", {}, () => [
532
+ createElementVNode("button", {
533
+ type: "button",
534
+ class: "bv-banner__close-btn",
535
+ "aria-label": "Close banner",
536
+ onClick: handleClose
537
+ }, [
538
+ createVNode(_sfc_main$q, {
539
+ name: __props.closeIcon,
540
+ color: colorStyles.value.color
541
+ }, null, 8, ["name", "color"])
542
+ ])
543
+ ], true)
544
+ ])) : createCommentVNode("", true)
545
+ ], 4)) : createCommentVNode("", true);
546
+ };
547
+ }
548
+ });
549
+ const Banner = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["__scopeId", "data-v-eeab38e1"]]);
550
+ const _hoisted_1$f = ["value"];
551
+ const _sfc_main$n = /* @__PURE__ */ defineComponent({
552
+ __name: "Checkbox",
553
+ props: {
554
+ modelValue: { type: [Boolean, Array], default: void 0 },
555
+ disabled: { type: Boolean, default: void 0 },
556
+ indeterminate: { type: Boolean, default: void 0 },
557
+ value: { default: void 0 },
558
+ name: { default: void 0 },
559
+ label: { default: void 0 },
560
+ items: { default: void 0 }
561
+ },
562
+ emits: ["update:modelValue", "change", "input"],
563
+ setup(__props, { emit: __emit }) {
564
+ const props = __props;
565
+ const emit = __emit;
566
+ const isGroupMode = computed(
567
+ () => props.items !== void 0 && Array.isArray(props.items)
568
+ );
569
+ const groupValue = computed(() => {
570
+ const val = props.modelValue;
571
+ if (Array.isArray(val)) return val;
572
+ return [];
573
+ });
574
+ const isItemChecked = (item) => {
575
+ return groupValue.value.includes(item.value);
576
+ };
577
+ const handleSingleChange = (event) => {
578
+ var _a;
579
+ const checked = (_a = event.target) == null ? void 0 : _a.checked;
580
+ emit("change", event);
581
+ emit("update:modelValue", checked ?? false);
582
+ };
583
+ const handleGroupChange = (event) => {
584
+ emit("change", event);
585
+ const target = event.target;
586
+ let newValue;
587
+ if (Array.isArray(target == null ? void 0 : target.value)) {
588
+ newValue = target.value;
589
+ } else if (typeof (target == null ? void 0 : target.value) === "string") {
590
+ newValue = target.value ? target.value.split(",").map((s) => s.trim()) : [];
591
+ } else {
592
+ newValue = [];
593
+ }
594
+ emit("update:modelValue", newValue);
595
+ };
596
+ onMounted(() => {
597
+ loadBaklavaResources();
598
+ });
599
+ return (_ctx, _cache) => {
600
+ return isGroupMode.value ? (openBlock(), createElementBlock("bl-checkbox-group", {
601
+ key: 0,
602
+ value: groupValue.value,
603
+ onBlCheckboxGroupChange: handleGroupChange
604
+ }, [
605
+ (openBlock(true), createElementBlock(Fragment, null, renderList(props.items, (item, index) => {
606
+ return openBlock(), createElementBlock("bl-checkbox", mergeProps({
607
+ key: String(item.value)
608
+ }, { ref_for: true }, {
609
+ value: item.value,
610
+ checked: isItemChecked(item),
611
+ disabled: item.disabled === true ? true : void 0,
612
+ indeterminate: item.indeterminate === true ? true : void 0,
613
+ name: item.name
614
+ }), [
615
+ renderSlot(_ctx.$slots, "item", {
616
+ item,
617
+ index
618
+ }, () => [
619
+ createTextVNode(toDisplayString(item.label), 1)
620
+ ])
621
+ ], 16);
622
+ }), 128))
623
+ ], 40, _hoisted_1$f)) : (openBlock(), createElementBlock("bl-checkbox", mergeProps({ key: 1 }, {
624
+ checked: props.modelValue === true ? true : props.modelValue === false ? false : void 0,
625
+ disabled: props.disabled === true ? true : void 0,
626
+ indeterminate: props.indeterminate === true ? true : void 0,
627
+ value: props.value,
628
+ name: props.name
629
+ }, {
630
+ onBlChange: handleSingleChange,
631
+ onBlInput: _cache[0] || (_cache[0] = ($event) => emit("input", $event))
632
+ }), [
633
+ renderSlot(_ctx.$slots, "default", {}, () => [
634
+ createTextVNode(toDisplayString(__props.label), 1)
635
+ ])
636
+ ], 16));
637
+ };
638
+ }
639
+ });
640
+ const _sfc_main$m = /* @__PURE__ */ defineComponent({
641
+ __name: "Chip",
642
+ props: {
643
+ text: { default: void 0 },
644
+ color: { default: "primary" },
645
+ size: { default: "md" },
646
+ position: { default: "top-right" },
647
+ inset: { type: Boolean, default: false },
648
+ standalone: { type: Boolean, default: false },
649
+ show: { type: Boolean, default: true }
650
+ },
651
+ setup(__props) {
652
+ const props = __props;
653
+ const colorStyles = computed(() => {
654
+ const colorMap = {
655
+ primary: {
656
+ backgroundColor: "var(--bl-color-primary)",
657
+ color: "var(--bl-color-primary-contrast, #fff)"
658
+ },
659
+ success: {
660
+ backgroundColor: "var(--bl-color-success)",
661
+ color: "var(--bl-color-success-contrast, #fff)"
662
+ },
663
+ danger: {
664
+ backgroundColor: "var(--bl-color-danger)",
665
+ color: "var(--bl-color-danger-contrast, #fff)"
666
+ },
667
+ warning: {
668
+ backgroundColor: "var(--bl-color-warning)",
669
+ color: "var(--bl-color-warning-contrast, #fff)"
670
+ },
671
+ info: {
672
+ backgroundColor: "var(--bl-color-info)",
673
+ color: "var(--bl-color-info-contrast, #fff)"
674
+ },
675
+ neutral: {
676
+ backgroundColor: "var(--bl-color-neutral-darkest)",
677
+ color: "var(--bl-color-neutral-full, #fff)"
678
+ }
679
+ };
680
+ return colorMap[props.color] ?? colorMap["primary"];
681
+ });
682
+ const sizeClass = computed(() => `bv-chip__badge--${props.size}`);
683
+ onMounted(() => {
684
+ loadBaklavaResources();
685
+ });
686
+ return (_ctx, _cache) => {
687
+ return __props.standalone ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
688
+ __props.show ? (openBlock(), createElementBlock("span", {
689
+ key: 0,
690
+ class: normalizeClass(["bv-chip bv-chip--standalone", sizeClass.value]),
691
+ style: normalizeStyle(colorStyles.value)
692
+ }, [
693
+ renderSlot(_ctx.$slots, "content", {}, () => [
694
+ createTextVNode(toDisplayString(__props.text), 1)
695
+ ], true)
696
+ ], 6)) : createCommentVNode("", true)
697
+ ], 64)) : (openBlock(), createElementBlock("div", {
698
+ key: 1,
699
+ class: normalizeClass(["bv-chip", { "bv-chip--has-content": _ctx.$slots["default"] }])
700
+ }, [
701
+ renderSlot(_ctx.$slots, "default", {}, void 0, true),
702
+ __props.show ? (openBlock(), createElementBlock("span", {
703
+ key: 0,
704
+ class: normalizeClass(["bv-chip__badge", [sizeClass.value, `bv-chip__badge--${__props.position}`, { "bv-chip__badge--inset": __props.inset }]]),
705
+ style: normalizeStyle(colorStyles.value)
706
+ }, [
707
+ renderSlot(_ctx.$slots, "content", {}, () => [
708
+ createTextVNode(toDisplayString(__props.text), 1)
709
+ ], true)
710
+ ], 6)) : createCommentVNode("", true)
711
+ ], 2));
712
+ };
713
+ }
714
+ });
715
+ const Chip = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["__scopeId", "data-v-7f495740"]]);
716
+ const _hoisted_1$e = ["type", "label", "placeholder", "disabled", "required", "size", "label-fixed", "help-text", "min-date", "max-date"];
717
+ const _sfc_main$l = /* @__PURE__ */ defineComponent({
718
+ __name: "Datepicker",
719
+ props: {
720
+ modelValue: { default: void 0 },
721
+ type: { default: "single" },
722
+ label: { default: void 0 },
723
+ placeholder: { default: void 0 },
724
+ disabled: { type: Boolean, default: void 0 },
725
+ min: { default: void 0 },
726
+ max: { default: void 0 },
727
+ required: { type: Boolean, default: void 0 },
728
+ size: { default: void 0 },
729
+ labelFixed: { type: Boolean, default: void 0 },
730
+ helpText: { default: void 0 }
731
+ },
732
+ emits: ["update:modelValue", "change"],
733
+ setup(__props, { emit: __emit }) {
734
+ const props = __props;
735
+ const emit = __emit;
736
+ function toISODateString(date) {
737
+ if (Number.isNaN(date.getTime())) return "";
738
+ const year = date.getFullYear();
739
+ const month = String(date.getMonth() + 1).padStart(2, "0");
740
+ const day = String(date.getDate()).padStart(2, "0");
741
+ return `${year}-${month}-${day}`;
742
+ }
743
+ const baklavaValue = computed(() => {
744
+ const val = props.modelValue;
745
+ if (val == null || Array.isArray(val) && val.length === 0) return "";
746
+ if (Array.isArray(val)) return val.map((d) => String(d)).join(",");
747
+ return String(val);
748
+ });
749
+ const skipNextValueSync = ref(false);
750
+ function handleDatepickerChange(event) {
751
+ const rawDates = event.detail ?? [];
752
+ const dates = rawDates.filter(
753
+ (d) => d instanceof Date && !Number.isNaN(d.getTime())
754
+ );
755
+ const type = props.type ?? "single";
756
+ let value;
757
+ if (dates.length === 0) {
758
+ value = type === "multiple" ? [] : null;
759
+ } else if (type === "single") {
760
+ value = toISODateString(dates[0]);
761
+ } else if (type === "multiple") {
762
+ value = dates.map(toISODateString);
763
+ } else if (type === "range") {
764
+ value = [
765
+ toISODateString(dates[0]),
766
+ toISODateString(dates[1] ?? dates[0])
767
+ ];
768
+ } else {
769
+ value = null;
770
+ }
771
+ skipNextValueSync.value = true;
772
+ emit("change", event);
773
+ emit("update:modelValue", value);
774
+ nextTick(() => {
775
+ skipNextValueSync.value = false;
776
+ });
777
+ }
778
+ const datepickerRef = ref(null);
779
+ watch(
780
+ [datepickerRef, baklavaValue],
781
+ ([el, val]) => {
782
+ if (skipNextValueSync.value || !el) return;
783
+ el.value = val ?? "";
784
+ },
785
+ { immediate: true }
786
+ );
787
+ onMounted(async () => {
788
+ loadBaklavaResources();
789
+ if (!customElements.get("bl-datepicker")) {
790
+ await customElements.whenDefined("bl-datepicker");
791
+ }
792
+ });
793
+ return (_ctx, _cache) => {
794
+ return openBlock(), createElementBlock("bl-datepicker", {
795
+ ref_key: "datepickerRef",
796
+ ref: datepickerRef,
797
+ type: props.type,
798
+ label: props.label,
799
+ placeholder: props.placeholder,
800
+ disabled: props.disabled === true ? true : void 0,
801
+ required: props.required === true ? true : void 0,
802
+ size: props.size,
803
+ "label-fixed": props.labelFixed === true ? true : void 0,
804
+ "help-text": props.helpText,
805
+ "min-date": props.min ? new Date(props.min) : void 0,
806
+ "max-date": props.max ? new Date(props.max) : void 0,
807
+ onBlDatepickerChange: handleDatepickerChange
808
+ }, [
809
+ renderSlot(_ctx.$slots, "default")
810
+ ], 40, _hoisted_1$e);
811
+ };
812
+ }
813
+ });
814
+ const _hoisted_1$d = ["open", "caption"];
815
+ const _hoisted_2$9 = {
816
+ key: 0,
817
+ slot: "secondary-action"
818
+ };
819
+ const _sfc_main$k = /* @__PURE__ */ defineComponent({
820
+ __name: "Dialog",
821
+ props: {
822
+ open: { type: Boolean, default: false },
823
+ caption: { default: void 0 },
824
+ closable: { type: Boolean, default: void 0 },
825
+ backdrop: { type: Boolean, default: void 0 },
826
+ size: { default: void 0 }
827
+ },
828
+ emits: ["update:open", "open", "close"],
829
+ setup(__props, { expose: __expose, emit: __emit }) {
830
+ const SIZE_TO_WIDTH = {
831
+ small: "320px",
832
+ medium: "424px",
833
+ large: "560px"
834
+ };
835
+ const props = __props;
836
+ const emit = __emit;
837
+ const dialogRef = ref(null);
838
+ const dialogStyle = computed(() => {
839
+ if (!props.size) return void 0;
840
+ const width = SIZE_TO_WIDTH[props.size.toLowerCase()] ?? props.size;
841
+ return { "--bl-dialog-width": width };
842
+ });
843
+ const handleOpen = () => {
844
+ emit("update:open", true);
845
+ emit("open");
846
+ };
847
+ const handleClose = () => {
848
+ emit("update:open", false);
849
+ emit("close");
850
+ };
851
+ const handleRequestClose = (e) => {
852
+ if (props.closable === false && e.detail.source === "close-button") {
853
+ e.preventDefault();
854
+ }
855
+ if (props.backdrop === false && e.detail.source === "backdrop") {
856
+ e.preventDefault();
857
+ }
858
+ };
859
+ function getBlDialog(el) {
860
+ return el;
861
+ }
862
+ watch(
863
+ () => props.open,
864
+ (newValue) => {
865
+ const blDialog = getBlDialog(dialogRef.value);
866
+ if (blDialog && blDialog.open !== newValue) {
867
+ blDialog.open = newValue;
868
+ }
869
+ },
870
+ { immediate: true }
871
+ );
872
+ onMounted(() => {
873
+ loadBaklavaResources();
874
+ const blDialog = getBlDialog(dialogRef.value);
875
+ if (blDialog && blDialog.open !== props.open) {
876
+ blDialog.open = props.open;
877
+ }
878
+ });
879
+ __expose({
880
+ /** Opens the dialog programmatically. */
881
+ open: () => {
882
+ const blDialog = getBlDialog(dialogRef.value);
883
+ if (blDialog) blDialog.open = true;
884
+ },
885
+ /** Closes the dialog programmatically. */
886
+ close: () => {
887
+ const blDialog = getBlDialog(dialogRef.value);
888
+ if (blDialog) blDialog.open = false;
889
+ }
890
+ });
891
+ return (_ctx, _cache) => {
892
+ return openBlock(), createElementBlock("bl-dialog", {
893
+ ref_key: "dialogRef",
894
+ ref: dialogRef,
895
+ open: __props.open,
896
+ caption: __props.caption,
897
+ style: normalizeStyle(dialogStyle.value),
898
+ onBlDialogOpen: handleOpen,
899
+ onBlDialogClose: handleClose,
900
+ onBlDialogRequestClose: handleRequestClose
901
+ }, [
902
+ createElementVNode("div", null, [
903
+ _ctx.$slots["header"] ? renderSlot(_ctx.$slots, "header", { key: 0 }) : createCommentVNode("", true),
904
+ renderSlot(_ctx.$slots, "default")
905
+ ]),
906
+ _ctx.$slots["footer"] ? (openBlock(), createElementBlock("div", _hoisted_2$9, [
907
+ renderSlot(_ctx.$slots, "footer")
908
+ ])) : createCommentVNode("", true)
909
+ ], 44, _hoisted_1$d);
910
+ };
911
+ }
912
+ });
913
+ const _hoisted_1$c = ["open", "caption", "embed-url", "external-link", "width"];
914
+ const _sfc_main$j = /* @__PURE__ */ defineComponent({
915
+ __name: "Drawer",
916
+ props: {
917
+ open: { type: Boolean, default: false },
918
+ caption: { default: void 0 },
919
+ embedUrl: { default: void 0 },
920
+ externalLink: { default: void 0 },
921
+ width: { default: void 0 }
922
+ },
923
+ emits: ["update:open", "open", "close"],
924
+ setup(__props, { expose: __expose, emit: __emit }) {
925
+ const WIDTH_TO_PX = {
926
+ small: "320px",
927
+ medium: "424px",
928
+ large: "560px"
929
+ };
930
+ const props = __props;
931
+ const emit = __emit;
932
+ const drawerRef = ref(null);
933
+ const drawerWidth = computed(() => {
934
+ if (!props.width) return void 0;
935
+ const key = props.width.toLowerCase();
936
+ return WIDTH_TO_PX[key] ?? props.width;
937
+ });
938
+ const handleOpen = () => {
939
+ emit("update:open", true);
940
+ emit("open");
941
+ };
942
+ const handleClose = () => {
943
+ emit("update:open", false);
944
+ emit("close");
945
+ };
946
+ function getBlDrawer(el) {
947
+ return el;
948
+ }
949
+ watch(
950
+ () => props.open,
951
+ (newValue) => {
952
+ const blDrawer = getBlDrawer(drawerRef.value);
953
+ if (blDrawer && blDrawer.open !== newValue) {
954
+ blDrawer.open = newValue;
955
+ }
956
+ },
957
+ { immediate: true }
958
+ );
959
+ onMounted(() => {
960
+ loadBaklavaResources();
961
+ const blDrawer = getBlDrawer(drawerRef.value);
962
+ if (blDrawer && blDrawer.open !== props.open) {
963
+ blDrawer.open = props.open;
964
+ }
965
+ });
966
+ __expose({
967
+ /** Opens the drawer programmatically. */
968
+ open: () => {
969
+ const blDrawer = getBlDrawer(drawerRef.value);
970
+ if (blDrawer) blDrawer.open = true;
971
+ },
972
+ /** Closes the drawer programmatically. */
973
+ close: () => {
974
+ const blDrawer = getBlDrawer(drawerRef.value);
975
+ if (blDrawer) blDrawer.open = false;
976
+ }
977
+ });
978
+ return (_ctx, _cache) => {
979
+ return openBlock(), createElementBlock("bl-drawer", {
980
+ ref_key: "drawerRef",
981
+ ref: drawerRef,
982
+ open: __props.open,
983
+ caption: __props.caption,
984
+ "embed-url": __props.embedUrl,
985
+ "external-link": __props.externalLink,
986
+ width: drawerWidth.value,
987
+ onBlDrawerOpen: handleOpen,
988
+ onBlDrawerClose: handleClose
989
+ }, [
990
+ renderSlot(_ctx.$slots, "default")
991
+ ], 40, _hoisted_1$c);
992
+ };
993
+ }
994
+ });
995
+ const _hoisted_1$b = ["caption"];
996
+ const _hoisted_2$8 = ["icon", "disabled"];
997
+ const _hoisted_3$3 = ["icon", "disabled"];
998
+ const _sfc_main$i = /* @__PURE__ */ defineComponent({
999
+ __name: "Dropdown",
1000
+ props: {
1001
+ open: { type: Boolean, default: false },
1002
+ placement: { default: void 0 },
1003
+ disabled: { type: Boolean, default: false },
1004
+ trigger: { default: void 0 },
1005
+ label: { default: "Menu" },
1006
+ variant: { default: void 0 },
1007
+ kind: { default: void 0 },
1008
+ size: { default: void 0 },
1009
+ icon: { default: void 0 },
1010
+ items: { default: void 0 }
1011
+ },
1012
+ emits: ["update:open", "open", "close", "select"],
1013
+ setup(__props, { expose: __expose, emit: __emit }) {
1014
+ const props = __props;
1015
+ const emit = __emit;
1016
+ const dropdownRef = ref(null);
1017
+ const isItemsMode = computed(
1018
+ () => Array.isArray(props.items) && props.items.length > 0
1019
+ );
1020
+ const groupedItems = computed(() => {
1021
+ if (!props.items) return [];
1022
+ const groups = /* @__PURE__ */ new Map();
1023
+ props.items.forEach((item, index) => {
1024
+ const key = item.groupCaption ?? void 0;
1025
+ const list = groups.get(key) ?? [];
1026
+ list.push({ item, index });
1027
+ groups.set(key, list);
1028
+ });
1029
+ return Array.from(groups.entries()).map(([groupCaption, entries]) => ({
1030
+ groupCaption: groupCaption || void 0,
1031
+ entries
1032
+ }));
1033
+ });
1034
+ const handleOpen = () => {
1035
+ emit("update:open", true);
1036
+ emit("open");
1037
+ };
1038
+ const handleClose = () => {
1039
+ emit("update:open", false);
1040
+ emit("close");
1041
+ };
1042
+ const handleItemClick = (event) => {
1043
+ emit("select", event);
1044
+ };
1045
+ function getBlDropdown(el) {
1046
+ return el;
1047
+ }
1048
+ watch(
1049
+ () => props.open,
1050
+ (newValue) => {
1051
+ const blDropdown = getBlDropdown(dropdownRef.value);
1052
+ if (blDropdown) {
1053
+ if (newValue && !blDropdown.opened) {
1054
+ blDropdown.open();
1055
+ } else if (!newValue && blDropdown.opened) {
1056
+ blDropdown.close();
1057
+ }
1058
+ }
1059
+ },
1060
+ { immediate: true }
1061
+ );
1062
+ onMounted(() => {
1063
+ loadBaklavaResources();
1064
+ const blDropdown = getBlDropdown(dropdownRef.value);
1065
+ if (blDropdown && blDropdown.opened !== props.open) {
1066
+ if (props.open) {
1067
+ blDropdown.open();
1068
+ } else {
1069
+ blDropdown.close();
1070
+ }
1071
+ }
1072
+ });
1073
+ __expose({
1074
+ /** Opens the dropdown programmatically. */
1075
+ open: () => {
1076
+ var _a;
1077
+ (_a = getBlDropdown(dropdownRef.value)) == null ? void 0 : _a.open();
1078
+ },
1079
+ /** Closes the dropdown programmatically. */
1080
+ close: () => {
1081
+ var _a;
1082
+ (_a = getBlDropdown(dropdownRef.value)) == null ? void 0 : _a.close();
1083
+ },
1084
+ /** Toggles the dropdown open/closed state. */
1085
+ toggle: () => {
1086
+ const blDropdown = getBlDropdown(dropdownRef.value);
1087
+ if (blDropdown) {
1088
+ if (blDropdown.opened) {
1089
+ blDropdown.close();
1090
+ } else {
1091
+ blDropdown.open();
1092
+ }
1093
+ }
1094
+ }
1095
+ });
1096
+ return (_ctx, _cache) => {
1097
+ return openBlock(), createElementBlock("bl-dropdown", mergeProps({
1098
+ ref_key: "dropdownRef",
1099
+ ref: dropdownRef
1100
+ }, {
1101
+ label: props.label,
1102
+ variant: props.variant,
1103
+ kind: props.kind,
1104
+ size: props.size,
1105
+ icon: props.icon,
1106
+ disabled: props.disabled === true ? true : void 0
1107
+ }, {
1108
+ onBlDropdownOpen: handleOpen,
1109
+ onBlDropdownClose: handleClose
1110
+ }), [
1111
+ isItemsMode.value ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(groupedItems.value, (group, gi) => {
1112
+ return openBlock(), createElementBlock(Fragment, { key: gi }, [
1113
+ group.groupCaption ? (openBlock(), createElementBlock("bl-dropdown-group", {
1114
+ key: 0,
1115
+ caption: group.groupCaption
1116
+ }, [
1117
+ (openBlock(true), createElementBlock(Fragment, null, renderList(group.entries, (entry, ii) => {
1118
+ return openBlock(), createElementBlock("bl-dropdown-item", {
1119
+ key: `${gi}-${ii}`,
1120
+ icon: entry.item.icon,
1121
+ disabled: entry.item.disabled === true,
1122
+ onBlDropdownItemClick: handleItemClick
1123
+ }, [
1124
+ renderSlot(_ctx.$slots, "item", {
1125
+ item: entry.item,
1126
+ index: entry.index
1127
+ }, () => [
1128
+ createTextVNode(toDisplayString(entry.item.caption), 1)
1129
+ ])
1130
+ ], 40, _hoisted_2$8);
1131
+ }), 128))
1132
+ ], 8, _hoisted_1$b)) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(group.entries, (entry, ii) => {
1133
+ return openBlock(), createElementBlock("bl-dropdown-item", {
1134
+ key: `${gi}-${ii}`,
1135
+ icon: entry.item.icon,
1136
+ disabled: entry.item.disabled === true,
1137
+ onBlDropdownItemClick: handleItemClick
1138
+ }, [
1139
+ renderSlot(_ctx.$slots, "item", {
1140
+ item: entry.item,
1141
+ index: entry.index
1142
+ }, () => [
1143
+ createTextVNode(toDisplayString(entry.item.caption), 1)
1144
+ ])
1145
+ ], 40, _hoisted_3$3);
1146
+ }), 128))
1147
+ ], 64);
1148
+ }), 128)) : renderSlot(_ctx.$slots, "default", { key: 1 })
1149
+ ], 16);
1150
+ };
1151
+ }
1152
+ });
1153
+ const _sfc_main$h = /* @__PURE__ */ defineComponent({
1154
+ __name: "Tag",
1155
+ props: {
1156
+ variant: { default: void 0 },
1157
+ size: { default: void 0 },
1158
+ closable: { type: Boolean, default: void 0 },
1159
+ icon: { default: void 0 },
1160
+ selected: { type: Boolean },
1161
+ disabled: { type: Boolean },
1162
+ value: {}
1163
+ },
1164
+ emits: ["close", "update:selected"],
1165
+ setup(__props, { emit: __emit }) {
1166
+ const props = __props;
1167
+ const emit = __emit;
1168
+ const handleTagClick = (event) => {
1169
+ if (props.closable) {
1170
+ emit("close");
1171
+ } else if (props.variant === "selectable" && event.detail) {
1172
+ emit("update:selected", event.detail.selected);
1173
+ }
1174
+ };
1175
+ onMounted(() => {
1176
+ loadBaklavaResources();
1177
+ });
1178
+ return (_ctx, _cache) => {
1179
+ return openBlock(), createElementBlock("bl-tag", mergeProps({
1180
+ ...props,
1181
+ variant: props.closable ? "removable" : props.variant,
1182
+ closable: void 0
1183
+ }, { onBlTagClick: handleTagClick }), [
1184
+ _ctx.$slots["icon"] ? renderSlot(_ctx.$slots, "icon", { key: 0 }) : createCommentVNode("", true),
1185
+ renderSlot(_ctx.$slots, "default")
1186
+ ], 16);
1187
+ };
1188
+ }
1189
+ });
1190
+ const _hoisted_1$a = { class: "file-upload" };
1191
+ const _hoisted_2$7 = {
1192
+ key: 0,
1193
+ class: "file-upload-label"
1194
+ };
1195
+ const _hoisted_3$2 = ["accept", "multiple", "disabled"];
1196
+ const _hoisted_4$2 = { class: "file-upload-content" };
1197
+ const _hoisted_5$1 = { class: "file-upload-text" };
1198
+ const _hoisted_6$1 = {
1199
+ key: 1,
1200
+ class: "file-upload-help"
1201
+ };
1202
+ const _hoisted_7$1 = {
1203
+ key: 2,
1204
+ class: "file-upload-invalid"
1205
+ };
1206
+ const _hoisted_8$1 = {
1207
+ key: 3,
1208
+ class: "file-upload-list"
1209
+ };
1210
+ const _hoisted_9$1 = {
1211
+ key: 0,
1212
+ class: "file-upload-preview"
1213
+ };
1214
+ const _hoisted_10$1 = ["src", "alt"];
1215
+ const _sfc_main$g = /* @__PURE__ */ defineComponent({
1216
+ __name: "FileUpload",
1217
+ props: {
1218
+ modelValue: { default: void 0 },
1219
+ multiple: { type: Boolean, default: false },
1220
+ accept: { default: void 0 },
1221
+ maxSize: { default: void 0 },
1222
+ minSize: { default: void 0 },
1223
+ maxFiles: { default: void 0 },
1224
+ disabled: { type: Boolean, default: false },
1225
+ label: { default: void 0 },
1226
+ helpText: { default: void 0 },
1227
+ invalidText: { default: void 0 },
1228
+ showPreview: { type: Boolean, default: false },
1229
+ size: { default: "medium" }
1230
+ },
1231
+ emits: ["update:modelValue", "invalid", "change"],
1232
+ setup(__props, { emit: __emit }) {
1233
+ const props = __props;
1234
+ const emit = __emit;
1235
+ const inputRef = ref(null);
1236
+ const isDragging = ref(false);
1237
+ const previewUrls = ref(/* @__PURE__ */ new Map());
1238
+ const filesList = computed(() => {
1239
+ const v = props.modelValue;
1240
+ if (!v) return [];
1241
+ return Array.isArray(v) ? [...v] : [v];
1242
+ });
1243
+ function matchesAccept(file) {
1244
+ var _a;
1245
+ if (!props.accept) return true;
1246
+ const rules = props.accept.split(",").map((r) => r.trim());
1247
+ const ext = ((_a = file.name.split(".").pop()) == null ? void 0 : _a.toLowerCase()) ?? "";
1248
+ for (const rule of rules) {
1249
+ if (rule.startsWith(".")) {
1250
+ if (ext === rule.slice(1).toLowerCase()) return true;
1251
+ } else {
1252
+ const mime = file.type;
1253
+ if (rule.endsWith("/*")) {
1254
+ const base = rule.slice(0, -1);
1255
+ if (mime.startsWith(base)) return true;
1256
+ } else if (mime === rule) {
1257
+ return true;
1258
+ }
1259
+ }
1260
+ }
1261
+ return false;
1262
+ }
1263
+ function validateFiles(incoming, existingCount) {
1264
+ const invalid = [];
1265
+ const maxFiles = props.maxFiles ?? Infinity;
1266
+ let validAdded = 0;
1267
+ for (const file of incoming) {
1268
+ if (!matchesAccept(file)) {
1269
+ invalid.push({ file, reason: "type" });
1270
+ continue;
1271
+ }
1272
+ if (props.maxSize !== void 0 && file.size > props.maxSize) {
1273
+ invalid.push({ file, reason: "size" });
1274
+ continue;
1275
+ }
1276
+ if (props.minSize !== void 0 && file.size < props.minSize) {
1277
+ invalid.push({ file, reason: "size" });
1278
+ continue;
1279
+ }
1280
+ if (props.multiple && existingCount + validAdded >= maxFiles) {
1281
+ invalid.push({ file, reason: "count" });
1282
+ continue;
1283
+ }
1284
+ validAdded++;
1285
+ }
1286
+ return invalid;
1287
+ }
1288
+ function processFiles(newFiles) {
1289
+ const valid = [];
1290
+ const invalid = validateFiles(newFiles, filesList.value.length);
1291
+ for (const f of newFiles) {
1292
+ const entry = invalid.find((e) => e.file === f);
1293
+ if (!entry) valid.push(f);
1294
+ }
1295
+ if (invalid.length > 0) {
1296
+ emit("invalid", invalid);
1297
+ }
1298
+ if (valid.length > 0) {
1299
+ const combined = props.multiple ? [...filesList.value, ...valid] : [valid[0]];
1300
+ const out = props.multiple ? combined : combined[0];
1301
+ emit("update:modelValue", out);
1302
+ emit("change", combined);
1303
+ }
1304
+ }
1305
+ function handleInputChange(e) {
1306
+ const input = e.target;
1307
+ const files = input.files ? Array.from(input.files) : [];
1308
+ processFiles(files);
1309
+ input.value = "";
1310
+ }
1311
+ function handleDrop(e) {
1312
+ var _a;
1313
+ e.preventDefault();
1314
+ isDragging.value = false;
1315
+ if (props.disabled) return;
1316
+ const files = ((_a = e.dataTransfer) == null ? void 0 : _a.files) ? Array.from(e.dataTransfer.files) : [];
1317
+ processFiles(files);
1318
+ }
1319
+ function handleDragOver(e) {
1320
+ e.preventDefault();
1321
+ e.stopPropagation();
1322
+ if (props.disabled) return;
1323
+ isDragging.value = true;
1324
+ }
1325
+ function handleDragLeave() {
1326
+ isDragging.value = false;
1327
+ }
1328
+ function openFilePicker() {
1329
+ var _a;
1330
+ if (props.disabled) return;
1331
+ (_a = inputRef.value) == null ? void 0 : _a.click();
1332
+ }
1333
+ function removeFile(index) {
1334
+ const list = [...filesList.value];
1335
+ const removed = list[index];
1336
+ list.splice(index, 1);
1337
+ if (props.showPreview && removed && removed.type.startsWith("image/")) {
1338
+ const url = previewUrls.value.get(removed);
1339
+ if (url) URL.revokeObjectURL(url);
1340
+ previewUrls.value.delete(removed);
1341
+ }
1342
+ const out = props.multiple ? list : list[0] ?? null;
1343
+ emit("update:modelValue", out);
1344
+ emit("change", list);
1345
+ }
1346
+ function getPreviewUrl(file) {
1347
+ if (!file.type.startsWith("image/")) return "";
1348
+ let url = previewUrls.value.get(file);
1349
+ if (!url) {
1350
+ url = URL.createObjectURL(file);
1351
+ previewUrls.value.set(file, url);
1352
+ }
1353
+ return url;
1354
+ }
1355
+ watch(
1356
+ filesList,
1357
+ (files) => {
1358
+ const toRevoke = new Set(previewUrls.value.keys());
1359
+ for (const f of files) {
1360
+ toRevoke.delete(f);
1361
+ }
1362
+ for (const f of toRevoke) {
1363
+ const url = previewUrls.value.get(f);
1364
+ if (url) URL.revokeObjectURL(url);
1365
+ previewUrls.value.delete(f);
1366
+ }
1367
+ },
1368
+ { deep: true }
1369
+ );
1370
+ onMounted(() => {
1371
+ loadBaklavaResources();
1372
+ });
1373
+ onBeforeUnmount(() => {
1374
+ for (const url of previewUrls.value.values()) {
1375
+ URL.revokeObjectURL(url);
1376
+ }
1377
+ previewUrls.value.clear();
1378
+ });
1379
+ const zoneSizeClass = computed(() => `file-upload-zone--${props.size}`);
1380
+ const hasError = computed(() => !!props.invalidText);
1381
+ return (_ctx, _cache) => {
1382
+ return openBlock(), createElementBlock("div", _hoisted_1$a, [
1383
+ __props.label ? (openBlock(), createElementBlock("label", _hoisted_2$7, toDisplayString(__props.label), 1)) : createCommentVNode("", true),
1384
+ createElementVNode("div", {
1385
+ class: normalizeClass(["file-upload-zone", [
1386
+ zoneSizeClass.value,
1387
+ {
1388
+ "file-upload-zone--dragging": isDragging.value,
1389
+ "file-upload-zone--disabled": __props.disabled,
1390
+ "file-upload-zone--invalid": hasError.value
1391
+ }
1392
+ ]]),
1393
+ onClick: _cache[0] || (_cache[0] = (e) => e.target !== inputRef.value && openFilePicker()),
1394
+ onDrop: handleDrop,
1395
+ onDragover: handleDragOver,
1396
+ onDragleave: handleDragLeave
1397
+ }, [
1398
+ createElementVNode("input", {
1399
+ ref_key: "inputRef",
1400
+ ref: inputRef,
1401
+ type: "file",
1402
+ class: "file-upload-input",
1403
+ accept: __props.accept,
1404
+ multiple: __props.multiple,
1405
+ disabled: __props.disabled,
1406
+ onChange: handleInputChange
1407
+ }, null, 40, _hoisted_3$2),
1408
+ createElementVNode("div", _hoisted_4$2, [
1409
+ createVNode(_sfc_main$q, {
1410
+ name: "upload",
1411
+ size: "24px",
1412
+ class: "file-upload-icon"
1413
+ }),
1414
+ createElementVNode("span", _hoisted_5$1, [
1415
+ renderSlot(_ctx.$slots, "hint", {}, void 0, true)
1416
+ ])
1417
+ ])
1418
+ ], 34),
1419
+ __props.helpText && !hasError.value ? (openBlock(), createElementBlock("p", _hoisted_6$1, toDisplayString(__props.helpText), 1)) : createCommentVNode("", true),
1420
+ __props.invalidText ? (openBlock(), createElementBlock("p", _hoisted_7$1, toDisplayString(__props.invalidText), 1)) : createCommentVNode("", true),
1421
+ filesList.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_8$1, [
1422
+ (openBlock(true), createElementBlock(Fragment, null, renderList(filesList.value, (file, index) => {
1423
+ return openBlock(), createElementBlock("div", {
1424
+ key: `${file.name}-${file.size}-${index}`,
1425
+ class: "file-upload-item"
1426
+ }, [
1427
+ __props.showPreview && file.type.startsWith("image/") ? (openBlock(), createElementBlock("div", _hoisted_9$1, [
1428
+ createElementVNode("img", {
1429
+ src: getPreviewUrl(file),
1430
+ alt: file.name,
1431
+ class: "file-upload-thumb"
1432
+ }, null, 8, _hoisted_10$1)
1433
+ ])) : createCommentVNode("", true),
1434
+ createVNode(_sfc_main$h, {
1435
+ closable: "",
1436
+ size: "small",
1437
+ class: "file-upload-tag",
1438
+ onClose: ($event) => removeFile(index)
1439
+ }, {
1440
+ default: withCtx(() => [
1441
+ createTextVNode(toDisplayString(file.name) + " (" + toDisplayString((file.size / 1024).toFixed(1)) + " KB) ", 1)
1442
+ ]),
1443
+ _: 2
1444
+ }, 1032, ["onClose"])
1445
+ ]);
1446
+ }), 128))
1447
+ ])) : createCommentVNode("", true)
1448
+ ]);
1449
+ };
1450
+ }
1451
+ });
1452
+ const FileUpload = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__scopeId", "data-v-c3918f05"]]);
1453
+ const _sfc_main$f = /* @__PURE__ */ defineComponent({
1454
+ __name: "Skeleton",
1455
+ props: {
1456
+ variant: { default: "rectangle" },
1457
+ width: { default: void 0 },
1458
+ height: { default: void 0 },
1459
+ count: { default: 1 }
1460
+ },
1461
+ setup(__props) {
1462
+ const props = __props;
1463
+ const effectiveWidth = computed(() => {
1464
+ if (props.width) return props.width;
1465
+ if (props.variant === "circle") return "40px";
1466
+ return "100%";
1467
+ });
1468
+ const effectiveHeight = computed(() => {
1469
+ if (props.height) return props.height;
1470
+ if (props.variant === "circle") return "40px";
1471
+ return "1rem";
1472
+ });
1473
+ onMounted(() => {
1474
+ loadBaklavaResources();
1475
+ });
1476
+ return (_ctx, _cache) => {
1477
+ return openBlock(), createElementBlock("div", {
1478
+ class: normalizeClass(["skeleton-wrapper", `skeleton-wrapper--${props.variant}`]),
1479
+ role: "status",
1480
+ "aria-label": "Loading"
1481
+ }, [
1482
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.count, (n) => {
1483
+ return openBlock(), createElementBlock("div", {
1484
+ key: n,
1485
+ class: normalizeClass(["skeleton", ["skeleton--" + props.variant]]),
1486
+ style: normalizeStyle({
1487
+ width: effectiveWidth.value,
1488
+ height: effectiveHeight.value
1489
+ })
1490
+ }, null, 6);
1491
+ }), 128))
1492
+ ], 2);
1493
+ };
1494
+ }
1495
+ });
1496
+ const BvSkeleton = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-5f0aecb7"]]);
1497
+ const _hoisted_1$9 = {
1498
+ key: 0,
1499
+ class: "image-placeholder"
1500
+ };
1501
+ const _hoisted_2$6 = ["src", "alt", "loading", "srcset", "sizes"];
1502
+ const _hoisted_3$1 = {
1503
+ key: 1,
1504
+ class: "image-fallback"
1505
+ };
1506
+ const _hoisted_4$1 = ["aria-label"];
1507
+ const _sfc_main$e = /* @__PURE__ */ defineComponent({
1508
+ __name: "Image",
1509
+ props: {
1510
+ src: {},
1511
+ alt: {},
1512
+ width: {},
1513
+ height: {},
1514
+ loading: { default: "lazy" },
1515
+ placeholder: { default: "skeleton" },
1516
+ objectFit: { default: "cover" },
1517
+ srcset: {},
1518
+ sizes: {}
1519
+ },
1520
+ emits: ["load", "error"],
1521
+ setup(__props, { emit: __emit }) {
1522
+ const props = __props;
1523
+ const emit = __emit;
1524
+ const isLoading = ref(true);
1525
+ const hasError = ref(false);
1526
+ const showPlaceholder = computed(
1527
+ () => isLoading.value && props.placeholder === "skeleton" && !hasError.value
1528
+ );
1529
+ const showImage = computed(() => !hasError.value);
1530
+ const wrapperStyle = computed(() => ({
1531
+ width: props.width ?? "100%",
1532
+ height: props.height ?? "auto",
1533
+ aspectRatio: !props.height && props.width ? "16 / 9" : void 0
1534
+ }));
1535
+ function onLoad(event) {
1536
+ isLoading.value = false;
1537
+ emit("load", event);
1538
+ }
1539
+ function onError(event) {
1540
+ isLoading.value = false;
1541
+ hasError.value = true;
1542
+ emit("error", event);
1543
+ }
1544
+ onMounted(() => {
1545
+ loadBaklavaResources();
1546
+ });
1547
+ return (_ctx, _cache) => {
1548
+ return openBlock(), createElementBlock("div", {
1549
+ class: "image-wrapper",
1550
+ style: normalizeStyle(wrapperStyle.value)
1551
+ }, [
1552
+ showPlaceholder.value ? (openBlock(), createElementBlock("div", _hoisted_1$9, [
1553
+ renderSlot(_ctx.$slots, "placeholder", {}, () => [
1554
+ createVNode(BvSkeleton, {
1555
+ class: "image-skeleton",
1556
+ width: "100%",
1557
+ height: "100%",
1558
+ variant: "rectangle"
1559
+ })
1560
+ ], true)
1561
+ ])) : createCommentVNode("", true),
1562
+ withDirectives(createElementVNode("img", {
1563
+ src: __props.src,
1564
+ alt: __props.alt,
1565
+ loading: __props.loading,
1566
+ srcset: __props.srcset,
1567
+ sizes: __props.sizes,
1568
+ class: "image-img",
1569
+ style: normalizeStyle({ objectFit: __props.objectFit }),
1570
+ onLoad,
1571
+ onError
1572
+ }, null, 44, _hoisted_2$6), [
1573
+ [vShow, showImage.value]
1574
+ ]),
1575
+ hasError.value ? (openBlock(), createElementBlock("div", _hoisted_3$1, [
1576
+ renderSlot(_ctx.$slots, "fallback", {}, () => [
1577
+ createElementVNode("div", {
1578
+ class: "image-fallback-default",
1579
+ role: "img",
1580
+ "aria-label": __props.alt
1581
+ }, " Failed to load image ", 8, _hoisted_4$1)
1582
+ ], true)
1583
+ ])) : createCommentVNode("", true)
1584
+ ], 4);
1585
+ };
1586
+ }
1587
+ });
1588
+ const Image = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-17dedfa2"]]);
1589
+ const _hoisted_1$8 = ["value"];
1590
+ const _hoisted_2$5 = {
1591
+ key: 0,
1592
+ slot: "icon"
1593
+ };
1594
+ const _sfc_main$d = /* @__PURE__ */ defineComponent({
1595
+ __name: "Input",
1596
+ props: {
1597
+ modelValue: { default: void 0 },
1598
+ name: { default: void 0 },
1599
+ type: { default: "text" },
1600
+ label: { default: void 0 },
1601
+ placeholder: { default: void 0 },
1602
+ required: { type: Boolean, default: void 0 },
1603
+ minlength: { default: void 0 },
1604
+ maxlength: { default: void 0 },
1605
+ min: { default: void 0 },
1606
+ max: { default: void 0 },
1607
+ pattern: { default: void 0 },
1608
+ step: { default: void 0 },
1609
+ autocomplete: { default: void 0 },
1610
+ inputmode: { default: void 0 },
1611
+ autofocus: { type: Boolean, default: void 0 },
1612
+ icon: { default: void 0 },
1613
+ size: { default: "medium" },
1614
+ disabled: { type: Boolean, default: void 0 },
1615
+ readonly: { type: Boolean, default: void 0 },
1616
+ labelFixed: { type: Boolean, default: true },
1617
+ invalidText: { default: void 0 },
1618
+ helpText: { default: void 0 },
1619
+ loading: { type: Boolean, default: void 0 },
1620
+ suffixText: { default: void 0 }
1621
+ },
1622
+ emits: ["update:modelValue", "invalid", "focus", "blur"],
1623
+ setup(__props, { emit: __emit }) {
1624
+ const props = __props;
1625
+ const emit = __emit;
1626
+ const showPicker = ({ currentTarget }) => currentTarget == null ? void 0 : currentTarget.showPicker();
1627
+ onMounted(() => {
1628
+ loadBaklavaResources();
1629
+ });
1630
+ return (_ctx, _cache) => {
1631
+ return openBlock(), createElementBlock("bl-input", mergeProps({
1632
+ ...props,
1633
+ "label-fixed": props.labelFixed === true ? true : void 0,
1634
+ "help-text": props.helpText ? props.helpText : void 0,
1635
+ "invalid-text": props.invalidText ? props.invalidText : void 0,
1636
+ loading: props.loading ? props.loading : void 0,
1637
+ placeholder: props.placeholder ? props.placeholder : props.label
1638
+ }, {
1639
+ value: props.modelValue,
1640
+ onBlInput: _cache[0] || (_cache[0] = ($event) => {
1641
+ var _a;
1642
+ return emit("update:modelValue", (_a = $event.target) == null ? void 0 : _a.value);
1643
+ }),
1644
+ onBlInvalid: _cache[1] || (_cache[1] = ($event) => emit("invalid", $event)),
1645
+ onFocus: _cache[2] || (_cache[2] = ($event) => emit("focus", $event)),
1646
+ onBlur: _cache[3] || (_cache[3] = ($event) => emit("blur", $event)),
1647
+ onClick: showPicker
1648
+ }), [
1649
+ props.suffixText ? (openBlock(), createElementBlock("span", _hoisted_2$5, toDisplayString(props.suffixText), 1)) : createCommentVNode("", true)
1650
+ ], 16, _hoisted_1$8);
1651
+ };
1652
+ }
1653
+ });
1654
+ const _sfc_main$c = /* @__PURE__ */ defineComponent({
1655
+ __name: "Notification",
1656
+ props: {
1657
+ duration: { default: 7 },
1658
+ noAnimation: { type: Boolean, default: false }
1659
+ },
1660
+ setup(__props) {
1661
+ const props = __props;
1662
+ onMounted(() => {
1663
+ loadBaklavaResources();
1664
+ });
1665
+ return (_ctx, _cache) => {
1666
+ return openBlock(), createElementBlock("bl-notification", normalizeProps(guardReactiveProps(props)), null, 16);
1667
+ };
1668
+ }
1669
+ });
1670
+ const _sfc_main$b = /* @__PURE__ */ defineComponent({
1671
+ __name: "Pagination",
1672
+ props: {
1673
+ currentPage: { default: void 0 },
1674
+ totalItems: { default: void 0 },
1675
+ pageSize: { default: void 0 },
1676
+ hasJumper: { type: Boolean, default: false },
1677
+ jumperLabel: { default: void 0 },
1678
+ hasSelect: { type: Boolean, default: false },
1679
+ selectLabel: { default: void 0 },
1680
+ itemsPerPageOptions: { default: void 0 }
1681
+ },
1682
+ emits: ["update:currentPage", "change"],
1683
+ setup(__props, { emit: __emit }) {
1684
+ const props = __props;
1685
+ const emit = __emit;
1686
+ const handleChange = (event) => {
1687
+ emit("change", event);
1688
+ const detail = event.detail;
1689
+ const page = detail == null ? void 0 : detail.selectedPage;
1690
+ if (page !== void 0) {
1691
+ emit("update:currentPage", page);
1692
+ }
1693
+ };
1694
+ onMounted(() => {
1695
+ loadBaklavaResources();
1696
+ });
1697
+ return (_ctx, _cache) => {
1698
+ return openBlock(), createElementBlock("bl-pagination", mergeProps({
1699
+ "current-page": props.currentPage,
1700
+ "total-items": props.totalItems,
1701
+ "items-per-page": props.pageSize,
1702
+ "has-jumper": props.hasJumper === true ? true : void 0,
1703
+ "jumper-label": props.jumperLabel,
1704
+ "has-select": props.hasSelect === true ? true : void 0,
1705
+ "select-label": props.selectLabel,
1706
+ "items-per-page-options": props.itemsPerPageOptions
1707
+ }, { onBlChange: handleChange }), [
1708
+ renderSlot(_ctx.$slots, "default")
1709
+ ], 16);
1710
+ };
1711
+ }
1712
+ });
1713
+ const _hoisted_1$7 = ["value", "required", "label"];
1714
+ const _sfc_main$a = /* @__PURE__ */ defineComponent({
1715
+ __name: "Radio",
1716
+ props: {
1717
+ modelValue: { default: void 0 },
1718
+ value: { default: void 0 },
1719
+ name: { default: void 0 },
1720
+ label: { default: void 0 },
1721
+ checked: { type: Boolean, default: void 0 },
1722
+ disabled: { type: Boolean, default: void 0 },
1723
+ required: { type: Boolean, default: void 0 },
1724
+ items: { default: void 0 }
1725
+ },
1726
+ emits: ["update:modelValue", "update:checked", "change", "input"],
1727
+ setup(__props, { emit: __emit }) {
1728
+ const props = __props;
1729
+ const emit = __emit;
1730
+ const isGroupMode = computed(
1731
+ () => props.items !== void 0 && Array.isArray(props.items)
1732
+ );
1733
+ const groupValue = computed(() => {
1734
+ const val = props.modelValue;
1735
+ if (val === void 0 || val === null) return "";
1736
+ return String(val);
1737
+ });
1738
+ const computedChecked = computed(() => {
1739
+ if (props.checked === true || props.checked === false) {
1740
+ return props.checked;
1741
+ }
1742
+ if (props.modelValue !== void 0 && props.value !== void 0) {
1743
+ return String(props.modelValue) === String(props.value);
1744
+ }
1745
+ return void 0;
1746
+ });
1747
+ const handleSingleChange = (event) => {
1748
+ emit("change", event);
1749
+ const target = event.target;
1750
+ const checked = target == null ? void 0 : target.checked;
1751
+ if (checked === true && props.value !== void 0) {
1752
+ emit("update:modelValue", props.value);
1753
+ }
1754
+ if (checked === true || checked === false) {
1755
+ emit("update:checked", checked);
1756
+ }
1757
+ };
1758
+ const handleGroupChange = (event) => {
1759
+ var _a;
1760
+ emit("change", event);
1761
+ const detail = event.detail;
1762
+ if (detail === void 0 || detail === "") return;
1763
+ const item = (_a = props.items) == null ? void 0 : _a.find(
1764
+ (i) => String(i.value) === String(detail)
1765
+ );
1766
+ const newValue = item !== void 0 ? item.value : detail;
1767
+ emit("update:modelValue", newValue);
1768
+ };
1769
+ onMounted(() => {
1770
+ loadBaklavaResources();
1771
+ });
1772
+ return (_ctx, _cache) => {
1773
+ return isGroupMode.value ? (openBlock(), createElementBlock("bl-radio-group", {
1774
+ key: 0,
1775
+ value: groupValue.value,
1776
+ required: props.required === true ? true : void 0,
1777
+ label: props.label,
1778
+ onBlRadioChange: handleGroupChange
1779
+ }, [
1780
+ (openBlock(true), createElementBlock(Fragment, null, renderList(props.items, (item, index) => {
1781
+ return openBlock(), createElementBlock("bl-radio", mergeProps({
1782
+ key: String(item.value)
1783
+ }, { ref_for: true }, {
1784
+ value: String(item.value),
1785
+ disabled: item.disabled === true ? true : void 0,
1786
+ name: item.name ?? props.name
1787
+ }), [
1788
+ renderSlot(_ctx.$slots, "item", {
1789
+ item,
1790
+ index
1791
+ }, () => [
1792
+ createTextVNode(toDisplayString(item.label), 1)
1793
+ ])
1794
+ ], 16);
1795
+ }), 128))
1796
+ ], 40, _hoisted_1$7)) : (openBlock(), createElementBlock("bl-radio", mergeProps({ key: 1 }, {
1797
+ value: props.value !== void 0 ? String(props.value) : void 0,
1798
+ name: props.name,
1799
+ disabled: props.disabled === true ? true : void 0,
1800
+ required: props.required === true ? true : void 0,
1801
+ checked: computedChecked.value === true ? true : computedChecked.value === false ? false : void 0
1802
+ }, {
1803
+ onBlChange: handleSingleChange,
1804
+ onBlInput: _cache[0] || (_cache[0] = ($event) => emit("input", $event))
1805
+ }), [
1806
+ renderSlot(_ctx.$slots, "default", {}, () => [
1807
+ createTextVNode(toDisplayString(__props.label), 1)
1808
+ ])
1809
+ ], 16));
1810
+ };
1811
+ }
1812
+ });
1813
+ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
1814
+ __name: "ScrollToTop",
1815
+ props: {
1816
+ threshold: { default: 300 },
1817
+ position: { default: "bottom-right" },
1818
+ label: { default: "Scroll to top" },
1819
+ size: { default: "medium" },
1820
+ variant: { default: "primary" }
1821
+ },
1822
+ emits: ["click"],
1823
+ setup(__props, { emit: __emit }) {
1824
+ const props = __props;
1825
+ const emit = __emit;
1826
+ const isVisible = ref(false);
1827
+ let rafId = null;
1828
+ const checkVisibility = () => {
1829
+ isVisible.value = window.scrollY > props.threshold;
1830
+ };
1831
+ const handleScroll = () => {
1832
+ if (rafId !== null) return;
1833
+ rafId = requestAnimationFrame(() => {
1834
+ checkVisibility();
1835
+ rafId = null;
1836
+ });
1837
+ };
1838
+ const scrollToTop = () => {
1839
+ window.scrollTo({ top: 0, behavior: "smooth" });
1840
+ emit("click");
1841
+ };
1842
+ const positionClasses = {
1843
+ "bottom-right": "scroll-to-top--bottom-right",
1844
+ "bottom-left": "scroll-to-top--bottom-left",
1845
+ "top-right": "scroll-to-top--top-right",
1846
+ "top-left": "scroll-to-top--top-left"
1847
+ };
1848
+ onMounted(() => {
1849
+ loadBaklavaResources();
1850
+ checkVisibility();
1851
+ window.addEventListener("scroll", handleScroll, { passive: true });
1852
+ });
1853
+ onUnmounted(() => {
1854
+ window.removeEventListener("scroll", handleScroll);
1855
+ if (rafId !== null) cancelAnimationFrame(rafId);
1856
+ });
1857
+ return (_ctx, _cache) => {
1858
+ return openBlock(), createBlock(Transition, { name: "scroll-to-top-fade" }, {
1859
+ default: withCtx(() => [
1860
+ withDirectives(createElementVNode("div", {
1861
+ class: normalizeClass(["scroll-to-top", positionClasses[__props.position]]),
1862
+ role: "complementary",
1863
+ "aria-label": "Scroll to top"
1864
+ }, [
1865
+ createVNode(_sfc_main$r, {
1866
+ variant: __props.variant,
1867
+ size: __props.size,
1868
+ label: __props.label,
1869
+ icon: "arrow_up",
1870
+ onClick: scrollToTop
1871
+ }, {
1872
+ default: withCtx(() => [..._cache[0] || (_cache[0] = [])]),
1873
+ _: 1
1874
+ }, 8, ["variant", "size", "label"])
1875
+ ], 2), [
1876
+ [vShow, isVisible.value]
1877
+ ])
1878
+ ]),
1879
+ _: 1
1880
+ });
1881
+ };
1882
+ }
1883
+ });
1884
+ const ScrollToTop = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-bd8f6b00"]]);
1885
+ const _hoisted_1$6 = ["value"];
1886
+ const _hoisted_2$4 = ["value", "disabled"];
1887
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
1888
+ __name: "Select",
1889
+ props: {
1890
+ modelValue: { default: void 0 },
1891
+ options: { default: void 0 },
1892
+ label: { default: void 0 },
1893
+ placeholder: { default: void 0 },
1894
+ name: { default: void 0 },
1895
+ required: { type: Boolean, default: void 0 },
1896
+ disabled: { type: Boolean, default: void 0 },
1897
+ multiple: { type: Boolean, default: void 0 },
1898
+ size: { default: void 0 },
1899
+ clearable: { type: Boolean, default: void 0 },
1900
+ helpText: { default: void 0 },
1901
+ customInvalidText: { default: void 0 },
1902
+ searchBar: { type: Boolean, default: void 0 },
1903
+ searchBarPlaceholder: { default: void 0 }
1904
+ },
1905
+ emits: ["update:modelValue", "change", "input"],
1906
+ setup(__props, { emit: __emit }) {
1907
+ const props = __props;
1908
+ const emit = __emit;
1909
+ const handleChange = (event) => {
1910
+ emit("change", event);
1911
+ const target = event.target;
1912
+ emit("update:modelValue", (target == null ? void 0 : target.value) ?? null);
1913
+ };
1914
+ const selectProps = computed(() => {
1915
+ const { modelValue: _, options: __, ...rest } = props;
1916
+ return {
1917
+ ...rest,
1918
+ disabled: rest.disabled === true ? true : void 0,
1919
+ multiple: rest.multiple === true ? true : void 0,
1920
+ "help-text": rest.helpText ?? void 0,
1921
+ "invalid-text": rest.customInvalidText ?? void 0,
1922
+ "search-bar": rest.searchBar === true ? true : void 0,
1923
+ "search-bar-placeholder": rest.searchBarPlaceholder ?? void 0
1924
+ };
1925
+ });
1926
+ onMounted(() => {
1927
+ loadBaklavaResources();
1928
+ });
1929
+ return (_ctx, _cache) => {
1930
+ return openBlock(), createElementBlock("bl-select", mergeProps(selectProps.value, {
1931
+ value: props.modelValue,
1932
+ onBlChange: handleChange,
1933
+ onBlInput: _cache[0] || (_cache[0] = ($event) => emit("input", $event))
1934
+ }), [
1935
+ __props.options ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(__props.options, (option) => {
1936
+ return openBlock(), createElementBlock("bl-select-option", {
1937
+ key: option.value,
1938
+ value: option.value,
1939
+ disabled: option.disabled
1940
+ }, toDisplayString(option.label), 9, _hoisted_2$4);
1941
+ }), 128)) : createCommentVNode("", true),
1942
+ renderSlot(_ctx.$slots, "default")
1943
+ ], 16, _hoisted_1$6);
1944
+ };
1945
+ }
1946
+ });
1947
+ const _hoisted_1$5 = ["aria-label"];
1948
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
1949
+ __name: "Spinner",
1950
+ props: {
1951
+ size: { default: void 0 },
1952
+ variant: { default: void 0 },
1953
+ label: { default: void 0 }
1954
+ },
1955
+ setup(__props) {
1956
+ const props = __props;
1957
+ const spinnerProps = computed(() => {
1958
+ const { label: _, ...rest } = props;
1959
+ return rest;
1960
+ });
1961
+ onMounted(() => {
1962
+ loadBaklavaResources();
1963
+ });
1964
+ return (_ctx, _cache) => {
1965
+ return openBlock(), createElementBlock("bl-spinner", mergeProps(spinnerProps.value, { "aria-label": __props.label }), null, 16, _hoisted_1$5);
1966
+ };
1967
+ }
1968
+ });
1969
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
1970
+ __name: "SplitButton",
1971
+ props: {
1972
+ variant: {},
1973
+ size: {},
1974
+ disabled: { type: Boolean },
1975
+ loading: { type: Boolean },
1976
+ label: {},
1977
+ icon: {}
1978
+ },
1979
+ emits: ["click", "dropdown-click"],
1980
+ setup(__props, { emit: __emit }) {
1981
+ const props = __props;
1982
+ const emit = __emit;
1983
+ onMounted(() => {
1984
+ loadBaklavaResources();
1985
+ });
1986
+ return (_ctx, _cache) => {
1987
+ return openBlock(), createElementBlock("bl-split-button", mergeProps({
1988
+ variant: props.variant,
1989
+ size: props.size,
1990
+ disabled: props.disabled === true ? true : void 0,
1991
+ loading: props.loading === true ? true : void 0,
1992
+ label: props.label,
1993
+ icon: props.icon
1994
+ }, {
1995
+ onBlClick: _cache[0] || (_cache[0] = ($event) => emit("click", $event)),
1996
+ onBlDropdownClick: _cache[1] || (_cache[1] = ($event) => emit("dropdown-click", $event))
1997
+ }), [
1998
+ _ctx.$slots["dropdown-content"] ? renderSlot(_ctx.$slots, "dropdown-content", { key: 0 }) : createCommentVNode("", true)
1999
+ ], 16);
2000
+ };
2001
+ }
2002
+ });
2003
+ const _hoisted_1$4 = ["direction"];
2004
+ const _hoisted_2$3 = ["id", "title", "description", "variant", "disabled"];
2005
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
2006
+ __name: "Stepper",
2007
+ props: {
2008
+ currentStep: { default: void 0 },
2009
+ steps: { default: void 0 },
2010
+ orientation: { default: void 0 },
2011
+ showLabels: { type: Boolean, default: void 0 }
2012
+ },
2013
+ emits: ["update:currentStep", "step-change"],
2014
+ setup(__props, { emit: __emit }) {
2015
+ const props = __props;
2016
+ const emit = __emit;
2017
+ const getStepVariant = (index) => {
2018
+ var _a;
2019
+ const current = props.currentStep ?? 0;
2020
+ const step = (_a = props.steps) == null ? void 0 : _a[index];
2021
+ if (step == null ? void 0 : step.error) return "error";
2022
+ if (index < current) return "success";
2023
+ if (index === current) return "active";
2024
+ return "default";
2025
+ };
2026
+ const handleStepChange = (event) => {
2027
+ var _a;
2028
+ emit("step-change", event);
2029
+ const step = (_a = event.detail) == null ? void 0 : _a.activeStep;
2030
+ if (step !== void 0) emit("update:currentStep", step);
2031
+ };
2032
+ onMounted(() => {
2033
+ loadBaklavaResources();
2034
+ });
2035
+ return (_ctx, _cache) => {
2036
+ return openBlock(), createElementBlock("bl-stepper", {
2037
+ direction: __props.orientation ?? "horizontal",
2038
+ onBlStepperChange: handleStepChange
2039
+ }, [
2040
+ __props.steps ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(__props.steps, (step, index) => {
2041
+ return openBlock(), createElementBlock("bl-stepper-item", {
2042
+ key: index,
2043
+ id: `step-${index}`,
2044
+ title: __props.showLabels !== false ? step.label : "",
2045
+ description: __props.showLabels !== false && step.description ? step.description : "",
2046
+ variant: getStepVariant(index),
2047
+ disabled: step.disabled
2048
+ }, null, 8, _hoisted_2$3);
2049
+ }), 128)) : createCommentVNode("", true),
2050
+ renderSlot(_ctx.$slots, "default")
2051
+ ], 40, _hoisted_1$4);
2052
+ };
2053
+ }
2054
+ });
2055
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
2056
+ __name: "Switch",
2057
+ props: {
2058
+ checked: { type: Boolean, default: void 0 },
2059
+ disabled: { type: Boolean, default: void 0 },
2060
+ label: { default: void 0 },
2061
+ size: { default: void 0 }
2062
+ },
2063
+ emits: ["update:checked", "change", "input"],
2064
+ setup(__props, { emit: __emit }) {
2065
+ const props = __props;
2066
+ const emit = __emit;
2067
+ onMounted(() => {
2068
+ loadBaklavaResources();
2069
+ });
2070
+ return (_ctx, _cache) => {
2071
+ return openBlock(), createElementBlock("bl-switch", mergeProps({
2072
+ ...props,
2073
+ checked: props.checked === true ? true : props.checked === false ? false : void 0,
2074
+ disabled: props.disabled === true ? true : void 0
2075
+ }, {
2076
+ onBlSwitchToggle: _cache[0] || (_cache[0] = ($event) => {
2077
+ emit("change", $event);
2078
+ emit("update:checked", $event.detail);
2079
+ })
2080
+ }), [
2081
+ renderSlot(_ctx.$slots, "default", {}, () => [
2082
+ createTextVNode(toDisplayString(__props.label), 1)
2083
+ ])
2084
+ ], 16);
2085
+ };
2086
+ }
2087
+ });
2088
+ const _hoisted_1$3 = ["name", "caption", "disabled", "selected"];
2089
+ const _hoisted_2$2 = ["tab"];
2090
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
2091
+ __name: "Tab",
2092
+ props: {
2093
+ activeTab: { default: void 0 },
2094
+ tabs: { default: void 0 },
2095
+ variant: { default: void 0 },
2096
+ orientation: { default: void 0 }
2097
+ },
2098
+ emits: ["update:activeTab", "tab-change"],
2099
+ setup(__props, { emit: __emit }) {
2100
+ const props = __props;
2101
+ const emit = __emit;
2102
+ const handleTabChange = (event) => {
2103
+ emit("tab-change", event);
2104
+ const tab = event.detail;
2105
+ if (tab !== void 0) emit("update:activeTab", tab);
2106
+ };
2107
+ onMounted(() => {
2108
+ loadBaklavaResources();
2109
+ });
2110
+ return (_ctx, _cache) => {
2111
+ return openBlock(), createElementBlock("bl-tab-group", { onBlTabSelected: handleTabChange }, [
2112
+ __props.tabs ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
2113
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.tabs, (tab) => {
2114
+ return openBlock(), createElementBlock("bl-tab", {
2115
+ key: tab.value,
2116
+ slot: "tabs",
2117
+ name: tab.value,
2118
+ caption: tab.label,
2119
+ disabled: tab.disabled,
2120
+ selected: props.activeTab === tab.value
2121
+ }, toDisplayString(tab.label), 9, _hoisted_1$3);
2122
+ }), 128)),
2123
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.tabs, (tab) => {
2124
+ return openBlock(), createElementBlock("bl-tab-panel", {
2125
+ key: `panel-${tab.value}`,
2126
+ tab: tab.value
2127
+ }, [
2128
+ renderSlot(_ctx.$slots, "default")
2129
+ ], 8, _hoisted_2$2);
2130
+ }), 128))
2131
+ ], 64)) : renderSlot(_ctx.$slots, "default", { key: 1 })
2132
+ ], 32);
2133
+ };
2134
+ }
2135
+ });
2136
+ const _hoisted_1$2 = { class: "table" };
2137
+ const _hoisted_2$1 = {
2138
+ key: 0,
2139
+ class: "header"
2140
+ };
2141
+ const _hoisted_3 = { class: "--title" };
2142
+ const _hoisted_4 = { class: "table-content" };
2143
+ const _hoisted_5 = { key: 0 };
2144
+ const _hoisted_6 = { class: "loading-state" };
2145
+ const _hoisted_7 = { key: 1 };
2146
+ const _hoisted_8 = { class: "empty-state" };
2147
+ const _hoisted_9 = ["sticky"];
2148
+ const _hoisted_10 = ["sort-key"];
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"];
2155
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
2156
+ ...{ inheritAttrs: false },
2157
+ __name: "Table",
2158
+ props: {
2159
+ title: { type: String, default: void 0 },
2160
+ headerOptions: {
2161
+ type: Object,
2162
+ default: void 0
2163
+ },
2164
+ data: { type: Array, default: () => [] },
2165
+ columns: { type: Array, default: void 0 },
2166
+ sortable: { type: Boolean, default: void 0 },
2167
+ selectable: { type: Boolean, default: void 0 },
2168
+ multiple: { type: Boolean, default: void 0 },
2169
+ selected: {
2170
+ type: Array,
2171
+ default: void 0
2172
+ },
2173
+ sortKey: { type: String, default: void 0 },
2174
+ sortDirection: { type: String, default: void 0 },
2175
+ stickyFirstColumn: { type: Boolean, default: void 0 },
2176
+ stickyLastColumn: { type: Boolean, default: void 0 },
2177
+ isLoading: { type: Boolean, default: void 0 },
2178
+ pagination: {
2179
+ type: Object,
2180
+ default: void 0
2181
+ },
2182
+ loadingText: { type: String, default: "Loading..." }
2183
+ },
2184
+ emits: ["row-click", "sort", "select", "change"],
2185
+ setup(__props, { emit: __emit }) {
2186
+ const props = __props;
2187
+ const emit = __emit;
2188
+ const selectedIdsAsStrings = computed(() => {
2189
+ const s = props.selected;
2190
+ if (s == null || !Array.isArray(s)) return [];
2191
+ return s.map((id) => String(id));
2192
+ });
2193
+ const getColumnLabel = (col) => col.name ?? col.label ?? col.key;
2194
+ const getRowKey = (row, index) => row.id != null ? String(row.id) : String(index);
2195
+ onMounted(() => {
2196
+ loadBaklavaResources();
2197
+ });
2198
+ return (_ctx, _cache) => {
2199
+ var _a, _b;
2200
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
2201
+ props.title ? (openBlock(), createElementBlock("div", _hoisted_2$1, [
2202
+ createElementVNode("span", _hoisted_3, toDisplayString(props.title), 1),
2203
+ renderSlot(_ctx.$slots, "header-actions", {}, void 0, true)
2204
+ ])) : createCommentVNode("", true),
2205
+ createElementVNode("div", _hoisted_4, [
2206
+ props.isLoading ? (openBlock(), createElementBlock("bl-table", _hoisted_5, [
2207
+ createElementVNode("div", _hoisted_6, [
2208
+ createVNode(_sfc_main$7),
2209
+ createElementVNode("span", null, toDisplayString(props.loadingText), 1)
2210
+ ])
2211
+ ])) : !((_a = props.data) == null ? void 0 : _a.length) ? (openBlock(), createElementBlock("bl-table", _hoisted_7, [
2212
+ createElementVNode("div", _hoisted_8, [
2213
+ renderSlot(_ctx.$slots, "empty-state", {}, void 0, true)
2214
+ ])
2215
+ ])) : (openBlock(), createElementBlock("bl-table", mergeProps({ key: 2 }, {
2216
+ sortable: props.sortable === true ? true : void 0,
2217
+ selectable: props.selectable === true ? true : void 0,
2218
+ multiple: props.multiple === true ? true : void 0,
2219
+ ...props.selectable && { selected: selectedIdsAsStrings.value },
2220
+ sortKey: props.sortKey,
2221
+ sortDirection: props.sortDirection,
2222
+ stickyFirstColumn: props.stickyFirstColumn,
2223
+ stickyLastColumn: props.stickyLastColumn
2224
+ }, {
2225
+ onBlSort: _cache[0] || (_cache[0] = ($event) => emit("sort", $event)),
2226
+ onBlRowSelect: _cache[1] || (_cache[1] = ($event) => emit("select", $event))
2227
+ }), [
2228
+ createElementVNode("bl-table-header", {
2229
+ sticky: (_b = props.headerOptions) == null ? void 0 : _b.sticky
2230
+ }, [
2231
+ createElementVNode("bl-table-row", null, [
2232
+ (openBlock(true), createElementBlock(Fragment, null, renderList(props.columns, (column) => {
2233
+ var _a2;
2234
+ return openBlock(), createElementBlock("bl-table-header-cell", {
2235
+ key: column.key,
2236
+ "sort-key": props.sortable && column.sortable !== false ? column.key : void 0,
2237
+ style: normalizeStyle({
2238
+ "--bl-table-header-cell-min-width": ((_a2 = props.headerOptions) == null ? void 0 : _a2.minCellWidth) || "100px"
2239
+ })
2240
+ }, toDisplayString(getColumnLabel(column)), 13, _hoisted_10);
2241
+ }), 128))
2242
+ ])
2243
+ ], 8, _hoisted_9),
2244
+ createElementVNode("bl-table-body", null, [
2245
+ (openBlock(true), createElementBlock(Fragment, null, renderList(props.data, (row, index) => {
2246
+ return openBlock(), createElementBlock("bl-table-row", {
2247
+ key: getRowKey(row, index),
2248
+ "selection-key": props.selectable ? getRowKey(row, index) : void 0
2249
+ }, [
2250
+ (openBlock(true), createElementBlock(Fragment, null, renderList(props.columns, (column) => {
2251
+ return openBlock(), createElementBlock("bl-table-cell", {
2252
+ key: column.key
2253
+ }, [
2254
+ renderSlot(_ctx.$slots, column.key, {
2255
+ row,
2256
+ value: row[column.key]
2257
+ }, () => [
2258
+ createTextVNode(toDisplayString(row[column.key]), 1)
2259
+ ], true)
2260
+ ]);
2261
+ }), 128))
2262
+ ], 8, _hoisted_11);
2263
+ }), 128))
2264
+ ])
2265
+ ], 16))
2266
+ ]),
2267
+ props.pagination ? (openBlock(), createElementBlock("div", _hoisted_12, [
2268
+ createElementVNode("bl-pagination", {
2269
+ "current-page": props.pagination.currentPage,
2270
+ "total-items": props.pagination.totalItems,
2271
+ "items-per-page": props.pagination.itemsPerPage,
2272
+ "has-jumper": props.pagination.hasJumper ?? void 0,
2273
+ "has-select": props.pagination.hasSelect ?? void 0,
2274
+ "jumper-label": props.pagination.jumperLabel ?? "Go to page",
2275
+ "select-label": props.pagination.selectLabel ?? "Items per page",
2276
+ "items-per-page-options": props.pagination.itemsPerPageOptions,
2277
+ onBlChange: _cache[2] || (_cache[2] = ($event) => emit("change", $event))
2278
+ }, null, 40, _hoisted_13)
2279
+ ])) : createCommentVNode("", true)
2280
+ ]);
2281
+ };
2282
+ }
2283
+ });
2284
+ const Table = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-63753cd2"]]);
2285
+ const _hoisted_1$1 = ["value"];
2286
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
2287
+ __name: "Textarea",
2288
+ props: {
2289
+ modelValue: { default: void 0 },
2290
+ label: { default: void 0 },
2291
+ placeholder: { default: void 0 },
2292
+ rows: { default: void 0 },
2293
+ maxlength: { default: void 0 },
2294
+ minlength: {},
2295
+ disabled: { type: Boolean, default: void 0 },
2296
+ required: { type: Boolean, default: void 0 },
2297
+ readonly: { type: Boolean },
2298
+ helpText: {},
2299
+ invalidText: {},
2300
+ characterCounter: { type: Boolean },
2301
+ expand: { type: Boolean },
2302
+ maxRows: {},
2303
+ size: {},
2304
+ name: {}
2305
+ },
2306
+ emits: ["update:modelValue", "input", "change"],
2307
+ setup(__props, { emit: __emit }) {
2308
+ const props = __props;
2309
+ const emit = __emit;
2310
+ onMounted(() => {
2311
+ loadBaklavaResources();
2312
+ });
2313
+ return (_ctx, _cache) => {
2314
+ return openBlock(), createElementBlock("bl-textarea", mergeProps({
2315
+ ...props,
2316
+ disabled: props.disabled === true ? true : void 0,
2317
+ required: props.required === true ? true : void 0
2318
+ }, {
2319
+ value: props.modelValue,
2320
+ onBlInput: _cache[0] || (_cache[0] = ($event) => {
2321
+ var _a;
2322
+ emit("input", $event);
2323
+ emit("update:modelValue", ((_a = $event.target) == null ? void 0 : _a.value) || null);
2324
+ }),
2325
+ onBlChange: _cache[1] || (_cache[1] = ($event) => emit("change", $event))
2326
+ }), [
2327
+ renderSlot(_ctx.$slots, "default")
2328
+ ], 16, _hoisted_1$1);
2329
+ };
2330
+ }
2331
+ });
2332
+ const _hoisted_1 = { slot: "tooltip-trigger" };
2333
+ const _hoisted_2 = { key: 1 };
2334
+ const _sfc_main = /* @__PURE__ */ defineComponent({
2335
+ __name: "Tooltip",
2336
+ props: {
2337
+ content: { default: void 0 },
2338
+ placement: { default: void 0 },
2339
+ target: {},
2340
+ trigger: { default: void 0 },
2341
+ disabled: { type: Boolean, default: void 0 },
2342
+ delay: { default: void 0 }
2343
+ },
2344
+ emits: ["show", "hide"],
2345
+ setup(__props, { emit: __emit }) {
2346
+ const props = __props;
2347
+ const emit = __emit;
2348
+ const tooltipProps = computed(() => {
2349
+ const bind = {};
2350
+ if (props.placement !== void 0) bind.placement = props.placement;
2351
+ if (props.target !== void 0) bind.target = props.target;
2352
+ return bind;
2353
+ });
2354
+ onMounted(() => {
2355
+ loadBaklavaResources();
2356
+ });
2357
+ return (_ctx, _cache) => {
2358
+ return !props.disabled ? (openBlock(), createElementBlock("bl-tooltip", mergeProps({ key: 0 }, tooltipProps.value, {
2359
+ onBlTooltipShow: _cache[0] || (_cache[0] = ($event) => emit("show")),
2360
+ onBlTooltipHide: _cache[1] || (_cache[1] = ($event) => emit("hide"))
2361
+ }), [
2362
+ createElementVNode("div", _hoisted_1, [
2363
+ renderSlot(_ctx.$slots, "default")
2364
+ ]),
2365
+ _ctx.$slots["content"] ? renderSlot(_ctx.$slots, "content", { key: 0 }) : __props.content ? (openBlock(), createElementBlock("span", _hoisted_2, toDisplayString(__props.content), 1)) : createCommentVNode("", true)
2366
+ ], 16)) : renderSlot(_ctx.$slots, "default", { key: 1 });
2367
+ };
2368
+ }
2369
+ });
2370
+ export {
2371
+ _sfc_main$u as BvAccordion,
2372
+ _sfc_main$t as BvAlert,
2373
+ _sfc_main$s as BvBadge,
2374
+ Banner as BvBanner,
2375
+ _sfc_main$r as BvButton,
2376
+ _sfc_main$n as BvCheckbox,
2377
+ Chip as BvChip,
2378
+ _sfc_main$l as BvDatepicker,
2379
+ _sfc_main$k as BvDialog,
2380
+ _sfc_main$j as BvDrawer,
2381
+ _sfc_main$i as BvDropdown,
2382
+ FileUpload as BvFileUpload,
2383
+ _sfc_main$q as BvIcon,
2384
+ Image as BvImage,
2385
+ _sfc_main$d as BvInput,
2386
+ BvLink,
2387
+ _sfc_main$c as BvNotification,
2388
+ _sfc_main$b as BvPagination,
2389
+ _sfc_main$a as BvRadio,
2390
+ ScrollToTop as BvScrollToTop,
2391
+ _sfc_main$8 as BvSelect,
2392
+ BvSkeleton,
2393
+ _sfc_main$7 as BvSpinner,
2394
+ _sfc_main$6 as BvSplitButton,
2395
+ _sfc_main$5 as BvStepper,
2396
+ _sfc_main$4 as BvSwitch,
2397
+ _sfc_main$3 as BvTab,
2398
+ Table as BvTable,
2399
+ _sfc_main$h as BvTag,
2400
+ _sfc_main$1 as BvTextarea,
2401
+ _sfc_main as BvTooltip,
2402
+ loadBaklavaResources
2403
+ };
2404
+ //# sourceMappingURL=index.js.map