@baklavue/ui 1.0.0 → 1.0.2-preview.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 +2424 -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 +185 -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
@@ -1,102 +0,0 @@
1
- import { mount } from "@vue/test-utils";
2
- import { describe, expect, it } from "vitest";
3
- import BvDrawer from "./Drawer.vue";
4
-
5
- describe("BvDrawer", () => {
6
- it("renders with default props", () => {
7
- const wrapper = mount(BvDrawer);
8
- expect(wrapper.find("bl-drawer").exists()).toBe(true);
9
- });
10
-
11
- it("passes caption and open to bl-drawer", () => {
12
- const wrapper = mount(BvDrawer, {
13
- props: { caption: "Title", open: true },
14
- slots: { default: "Content" },
15
- });
16
- const el = wrapper.find("bl-drawer").element;
17
- expect(el.getAttribute("caption")).toBe("Title");
18
- });
19
-
20
- it("emits update:open and open when bl-drawer fires bl-drawer-open", async () => {
21
- const wrapper = mount(BvDrawer, { slots: { default: "Content" } });
22
- wrapper.find("bl-drawer").element.dispatchEvent(
23
- new CustomEvent("bl-drawer-open", { bubbles: true }),
24
- );
25
- await wrapper.vm.$nextTick();
26
- expect(wrapper.emitted("update:open")).toEqual([[true]]);
27
- expect(wrapper.emitted("open")).toHaveLength(1);
28
- });
29
-
30
- it("emits update:open and close when bl-drawer fires bl-drawer-close", async () => {
31
- const wrapper = mount(BvDrawer, {
32
- props: { open: true },
33
- slots: { default: "Content" },
34
- });
35
- wrapper.find("bl-drawer").element.dispatchEvent(
36
- new CustomEvent("bl-drawer-close", { bubbles: true }),
37
- );
38
- await wrapper.vm.$nextTick();
39
- expect(wrapper.emitted("update:open")).toEqual([[false]]);
40
- expect(wrapper.emitted("close")).toHaveLength(1);
41
- });
42
-
43
- it("passes width for size preset", () => {
44
- const wrapper = mount(BvDrawer, { props: { width: "small" } });
45
- const el = wrapper.find("bl-drawer").element;
46
- expect(el.getAttribute("width")).toBe("320px");
47
- });
48
-
49
- it("maps medium width preset to 424px", () => {
50
- const wrapper = mount(BvDrawer, { props: { width: "medium" } });
51
- expect(wrapper.find("bl-drawer").element.getAttribute("width")).toBe("424px");
52
- });
53
-
54
- it("maps large width preset to 560px", () => {
55
- const wrapper = mount(BvDrawer, { props: { width: "large" } });
56
- expect(wrapper.find("bl-drawer").element.getAttribute("width")).toBe("560px");
57
- });
58
-
59
- it("passes custom CSS width through unchanged", () => {
60
- const wrapper = mount(BvDrawer, { props: { width: "500px" } });
61
- expect(wrapper.find("bl-drawer").element.getAttribute("width")).toBe("500px");
62
- });
63
-
64
- it("passes embedUrl and externalLink to bl-drawer", () => {
65
- const wrapper = mount(BvDrawer, {
66
- props: { embedUrl: "https://example.com", externalLink: "https://link.com" },
67
- });
68
- const el = wrapper.find("bl-drawer").element;
69
- expect(el.getAttribute("embed-url")).toBe("https://example.com");
70
- expect(el.getAttribute("external-link")).toBe("https://link.com");
71
- });
72
-
73
- it("exposes open and close methods", () => {
74
- const wrapper = mount(BvDrawer);
75
- const vm = wrapper.vm as unknown as { open: () => void; close: () => void };
76
- expect(typeof vm.open).toBe("function");
77
- expect(typeof vm.close).toBe("function");
78
- });
79
-
80
- it("open() exposed method sets open property on the element", () => {
81
- const wrapper = mount(BvDrawer);
82
- const vm = wrapper.vm as unknown as { open: () => void };
83
- vm.open();
84
- const el = wrapper.find("bl-drawer").element as unknown as { open: boolean };
85
- expect(el.open).toBe(true);
86
- });
87
-
88
- it("close() exposed method sets open property to false on the element", () => {
89
- const wrapper = mount(BvDrawer, { props: { open: true } });
90
- const vm = wrapper.vm as unknown as { close: () => void };
91
- vm.close();
92
- const el = wrapper.find("bl-drawer").element as unknown as { open: boolean };
93
- expect(el.open).toBe(false);
94
- });
95
-
96
- it("syncs open prop change to the underlying element", async () => {
97
- const wrapper = mount(BvDrawer, { props: { open: false } });
98
- await wrapper.setProps({ open: true });
99
- const el = wrapper.find("bl-drawer").element as unknown as { open: boolean };
100
- expect(el.open).toBe(true);
101
- });
102
- });
@@ -1,162 +0,0 @@
1
- <script setup lang="ts">
2
- /**
3
- * Drawer Component
4
- *
5
- * A Vue UI kit component for Baklava's `bl-drawer` web component.
6
- * Provides a side drawer for supplemental content with support for caption,
7
- * embedded iframe content, external link, and programmable width.
8
- *
9
- * @component
10
- * @example
11
- * ```vue
12
- * <!-- Basic usage -->
13
- * <template>
14
- * <BvButton @click="showDrawer = true">Open Drawer</BvButton>
15
- * <BvDrawer v-model:open="showDrawer">
16
- * <p>Drawer content goes here.</p>
17
- * </BvDrawer>
18
- * </template>
19
- * ```
20
- *
21
- * @example
22
- * ```vue
23
- * <!-- With caption -->
24
- * <template>
25
- * <BvDrawer v-model:open="showDrawer" caption="Drawer Title">
26
- * <p>Content with title.</p>
27
- * </BvDrawer>
28
- * </template>
29
- * ```
30
- *
31
- * @example
32
- * ```vue
33
- * <!-- With embed URL (iframe) -->
34
- * <template>
35
- * <BvDrawer v-model:open="showDrawer" embed-url="https://example.com" />
36
- * </template>
37
- * ```
38
- *
39
- * @example
40
- * ```vue
41
- * <!-- With width -->
42
- * <template>
43
- * <BvDrawer v-model:open="showDrawer" width="large" caption="Wide Drawer">
44
- * <p>Wider drawer content.</p>
45
- * </BvDrawer>
46
- * </template>
47
- * ```
48
- *
49
- * @example
50
- * ```vue
51
- * <!-- Programmatic control via ref -->
52
- * <template>
53
- * <BvButton @click="drawerRef?.open()">Open</BvButton>
54
- * <BvButton @click="drawerRef?.close()">Close</BvButton>
55
- * <BvDrawer ref="drawerRef" caption="Programmatic">
56
- * <p>Opened and closed via ref methods.</p>
57
- * </BvDrawer>
58
- * </template>
59
- * ```
60
- */
61
- import { computed, onMounted, ref, watch } from "vue";
62
- import { loadBaklavaResources } from "../utils/loadBaklavaResources";
63
- import type { DrawerProps } from "./drawer.types";
64
-
65
- const WIDTH_TO_PX: Record<string, string> = {
66
- small: "320px",
67
- medium: "424px",
68
- large: "560px",
69
- };
70
-
71
- const props = withDefaults(defineProps<DrawerProps>(), {
72
- open: false,
73
- caption: undefined,
74
- embedUrl: undefined,
75
- externalLink: undefined,
76
- width: undefined,
77
- });
78
-
79
- const emit = defineEmits<{
80
- /** Emitted when visibility changes. Use for two-way binding. */
81
- "update:open": [open: boolean];
82
- /** Emitted when the drawer is opened. */
83
- open: [];
84
- /** Emitted when the drawer is closed. */
85
- close: [];
86
- }>();
87
-
88
- /** Reference to the underlying bl-drawer element. */
89
- const drawerRef = ref<HTMLElement | null>(null);
90
-
91
- /** Computed width for bl-drawer. Maps small/medium/large to px or passes CSS value. */
92
- const drawerWidth = computed(() => {
93
- if (!props.width) return undefined;
94
- const key = props.width.toLowerCase();
95
- return WIDTH_TO_PX[key] ?? props.width;
96
- });
97
-
98
- /** Handles bl-drawer-open event. Syncs state and emits. */
99
- const handleOpen = () => {
100
- emit("update:open", true);
101
- emit("open");
102
- };
103
-
104
- /** Handles bl-drawer-close event. Syncs state and emits. */
105
- const handleClose = () => {
106
- emit("update:open", false);
107
- emit("close");
108
- };
109
-
110
- /** Syncs props.open to the bl-drawer element's open property. */
111
- function getBlDrawer(el: HTMLElement | null): { open: boolean } | null {
112
- return el as unknown as { open: boolean } | null;
113
- }
114
-
115
- watch(
116
- () => props.open,
117
- (newValue) => {
118
- const blDrawer = getBlDrawer(drawerRef.value);
119
- if (blDrawer && blDrawer.open !== newValue) {
120
- blDrawer.open = newValue;
121
- }
122
- },
123
- { immediate: true },
124
- );
125
-
126
- onMounted(() => {
127
- loadBaklavaResources();
128
-
129
- const blDrawer = getBlDrawer(drawerRef.value);
130
- if (blDrawer && blDrawer.open !== props.open) {
131
- blDrawer.open = props.open;
132
- }
133
- });
134
-
135
- defineExpose({
136
- /** Opens the drawer programmatically. */
137
- open: () => {
138
- const blDrawer = getBlDrawer(drawerRef.value);
139
- if (blDrawer) blDrawer.open = true;
140
- },
141
- /** Closes the drawer programmatically. */
142
- close: () => {
143
- const blDrawer = getBlDrawer(drawerRef.value);
144
- if (blDrawer) blDrawer.open = false;
145
- },
146
- });
147
- </script>
148
-
149
- <template>
150
- <bl-drawer
151
- ref="drawerRef"
152
- :open="open"
153
- :caption="caption"
154
- :embed-url="embedUrl"
155
- :external-link="externalLink"
156
- :width="drawerWidth"
157
- @bl-drawer-open="handleOpen"
158
- @bl-drawer-close="handleClose"
159
- >
160
- <slot />
161
- </bl-drawer>
162
- </template>
@@ -1,17 +0,0 @@
1
- /**
2
- * Props for the Drawer component.
3
- *
4
- * @interface DrawerProps
5
- */
6
- export interface DrawerProps {
7
- /** Whether the drawer is visible. */
8
- open?: boolean;
9
- /** Drawer title. Maps to bl-drawer's caption attribute. */
10
- caption?: string;
11
- /** Iframe URL for embedded content. When set, drawer shows iframe instead of slot. */
12
- embedUrl?: string;
13
- /** External link URL - adds a button in the header. */
14
- externalLink?: string;
15
- /** Drawer width. Accepts "small", "medium", "large" or CSS value (e.g. "424px"). */
16
- width?: string;
17
- }
@@ -1,2 +0,0 @@
1
- export { default as BvDrawer } from "./Drawer.vue";
2
- export type { DrawerProps } from "./drawer.types";
@@ -1,207 +0,0 @@
1
- import { mount } from "@vue/test-utils";
2
- import { nextTick } from "vue";
3
- import { describe, expect, it } from "vitest";
4
- import BvDropdown from "./Dropdown.vue";
5
-
6
- describe("BvDropdown", () => {
7
- it("renders with label and items", () => {
8
- const wrapper = mount(BvDropdown, {
9
- props: {
10
- label: "Menu",
11
- items: [
12
- { value: "a", caption: "Option A" },
13
- { value: "b", caption: "Option B" },
14
- ],
15
- },
16
- slots: { item: ({ item }: { item: { caption: string } }) => item.caption },
17
- });
18
- expect(wrapper.find("bl-dropdown").exists()).toBe(true);
19
- expect(wrapper.text()).toContain("Option A");
20
- expect(wrapper.text()).toContain("Option B");
21
- });
22
-
23
- it("passes disabled to bl-dropdown", () => {
24
- const wrapper = mount(BvDropdown, {
25
- props: { label: "Menu", disabled: true, items: [] },
26
- });
27
- expect(wrapper.find("bl-dropdown").element.hasAttribute("disabled")).toBe(
28
- true,
29
- );
30
- });
31
-
32
- it("emits update:open and open when bl-dropdown fires bl-dropdown-open", async () => {
33
- const wrapper = mount(BvDropdown, {
34
- props: { label: "Menu", items: [] },
35
- });
36
- wrapper.find("bl-dropdown").element.dispatchEvent(
37
- new CustomEvent("bl-dropdown-open", { bubbles: true }),
38
- );
39
- await wrapper.vm.$nextTick();
40
- expect(wrapper.emitted("update:open")).toEqual([[true]]);
41
- expect(wrapper.emitted("open")).toHaveLength(1);
42
- });
43
-
44
- it("emits update:open and close when bl-dropdown fires bl-dropdown-close", async () => {
45
- const wrapper = mount(BvDropdown, {
46
- props: { label: "Menu", items: [], open: true },
47
- });
48
- wrapper.find("bl-dropdown").element.dispatchEvent(
49
- new CustomEvent("bl-dropdown-close", { bubbles: true }),
50
- );
51
- await wrapper.vm.$nextTick();
52
- expect(wrapper.emitted("update:open")).toEqual([[false]]);
53
- expect(wrapper.emitted("close")).toHaveLength(1);
54
- });
55
-
56
- it("emits select when dropdown item is clicked", async () => {
57
- const wrapper = mount(BvDropdown, {
58
- props: {
59
- label: "Menu",
60
- items: [{ value: "a", caption: "Option A" }],
61
- },
62
- slots: { item: ({ item }: { item: { caption: string } }) => item.caption },
63
- });
64
- const item = wrapper.find("bl-dropdown-item");
65
- const event = new CustomEvent("bl-dropdown-item-click", { bubbles: true });
66
- item.element.dispatchEvent(event);
67
- await wrapper.vm.$nextTick();
68
- expect(wrapper.emitted("select")).toHaveLength(1);
69
- expect(wrapper.emitted("select")![0][0]).toBe(event);
70
- });
71
-
72
- it("renders items with groups when groupCaption is set", () => {
73
- const wrapper = mount(BvDropdown, {
74
- props: {
75
- label: "Menu",
76
- items: [
77
- { value: "a", caption: "Option A", groupCaption: "Group 1" },
78
- { value: "b", caption: "Option B", groupCaption: "Group 1" },
79
- ],
80
- },
81
- slots: { item: ({ item }: { item: { caption: string } }) => item.caption },
82
- });
83
- const group = wrapper.find("bl-dropdown-group");
84
- expect(group.exists()).toBe(true);
85
- expect(group.attributes("caption")).toBe("Group 1");
86
- });
87
-
88
- it("exposes open, close, and toggle methods", () => {
89
- const wrapper = mount(BvDropdown, {
90
- props: { label: "Menu", items: [] },
91
- });
92
- const vm = wrapper.vm as unknown as {
93
- open: () => void;
94
- close: () => void;
95
- toggle: () => void;
96
- };
97
- expect(typeof vm.open).toBe("function");
98
- expect(typeof vm.close).toBe("function");
99
- expect(typeof vm.toggle).toBe("function");
100
- });
101
-
102
- it("calls open on bl-dropdown when exposed open is invoked", () => {
103
- const wrapper = mount(BvDropdown, {
104
- props: { label: "Menu", items: [] },
105
- });
106
- const vm = wrapper.vm as unknown as { open: () => void };
107
- const blDropdown = wrapper.find("bl-dropdown").element as unknown as {
108
- opened?: boolean;
109
- open: () => void;
110
- };
111
- vm.open();
112
- expect(blDropdown.opened).toBe(true);
113
- });
114
-
115
- it("calls close on bl-dropdown when exposed close is invoked", () => {
116
- const wrapper = mount(BvDropdown, {
117
- props: { label: "Menu", items: [], open: true },
118
- });
119
- const vm = wrapper.vm as unknown as { close: () => void };
120
- const blDropdown = wrapper.find("bl-dropdown").element as unknown as {
121
- opened?: boolean;
122
- close: () => void;
123
- };
124
- vm.close();
125
- expect(blDropdown.opened).toBe(false);
126
- });
127
-
128
- it("syncs open state via watch when prop changes from false to true", async () => {
129
- const wrapper = mount(BvDropdown, {
130
- props: { label: "Menu", items: [], open: false },
131
- });
132
- const blDropdown = wrapper.find("bl-dropdown").element as unknown as {
133
- opened?: boolean;
134
- };
135
- expect(blDropdown.opened).toBe(false);
136
- await wrapper.setProps({ open: true });
137
- expect(blDropdown.opened).toBe(true);
138
- });
139
-
140
- it("syncs open state via watch when prop changes from true to false", async () => {
141
- const wrapper = mount(BvDropdown, {
142
- props: { label: "Menu", items: [], open: false },
143
- });
144
- const blDropdown = wrapper.find("bl-dropdown").element as unknown as {
145
- opened?: boolean;
146
- };
147
- // First open it
148
- await wrapper.setProps({ open: true });
149
- expect(blDropdown.opened).toBe(true);
150
- // Then close it
151
- await wrapper.setProps({ open: false });
152
- expect(blDropdown.opened).toBe(false);
153
- });
154
-
155
- it("toggle closes when dropdown is opened", () => {
156
- const wrapper = mount(BvDropdown, {
157
- props: { label: "Menu", items: [] },
158
- });
159
- const vm = wrapper.vm as unknown as {
160
- open: () => void;
161
- toggle: () => void;
162
- };
163
- const blDropdown = wrapper.find("bl-dropdown").element as unknown as {
164
- opened?: boolean;
165
- };
166
- // Open first
167
- vm.open();
168
- expect(blDropdown.opened).toBe(true);
169
- // Toggle should close
170
- vm.toggle();
171
- expect(blDropdown.opened).toBe(false);
172
- });
173
-
174
- it("toggle opens when dropdown is closed", () => {
175
- const wrapper = mount(BvDropdown, {
176
- props: { label: "Menu", items: [] },
177
- });
178
- const vm = wrapper.vm as unknown as { toggle: () => void };
179
- const blDropdown = wrapper.find("bl-dropdown").element as unknown as {
180
- opened?: boolean;
181
- };
182
- expect(blDropdown.opened).toBe(false);
183
- vm.toggle();
184
- expect(blDropdown.opened).toBe(true);
185
- });
186
-
187
- it("renders item captions via default fallback when no item slot provided", () => {
188
- const wrapper = mount(BvDropdown, {
189
- props: {
190
- label: "Menu",
191
- items: [
192
- { value: "x", caption: "Fallback Caption" },
193
- ],
194
- },
195
- });
196
- expect(wrapper.text()).toContain("Fallback Caption");
197
- });
198
-
199
- it("renders slot mode content when no items provided", () => {
200
- const wrapper = mount(BvDropdown, {
201
- props: { label: "Menu" },
202
- slots: { default: '<div class="custom-content">Custom</div>' },
203
- });
204
- expect(wrapper.find(".custom-content").exists()).toBe(true);
205
- expect(wrapper.text()).toContain("Custom");
206
- });
207
- });