@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
@@ -1,129 +0,0 @@
1
- import { mount } from "@vue/test-utils";
2
- import { describe, expect, it } from "vitest";
3
- import BvDatepicker from "./Datepicker.vue";
4
-
5
- describe("BvDatepicker", () => {
6
- it("renders with default props", () => {
7
- const wrapper = mount(BvDatepicker);
8
- expect(wrapper.find("bl-datepicker").exists()).toBe(true);
9
- });
10
-
11
- it("passes label and placeholder to bl-datepicker", () => {
12
- const wrapper = mount(BvDatepicker, {
13
- props: { label: "Pick date", placeholder: "Select..." },
14
- });
15
- const el = wrapper.find("bl-datepicker").element;
16
- expect(el.getAttribute("label")).toBe("Pick date");
17
- expect(el.getAttribute("placeholder")).toBe("Select...");
18
- });
19
-
20
- it("passes modelValue to bl-datepicker", async () => {
21
- const wrapper = mount(BvDatepicker, {
22
- props: { modelValue: "2024-01-15" },
23
- });
24
- await wrapper.vm.$nextTick();
25
- const el = wrapper.find("bl-datepicker").element as HTMLElement & {
26
- value?: string;
27
- };
28
- expect(el.value).toBe("2024-01-15");
29
- });
30
-
31
- it("passes disabled and required to bl-datepicker", () => {
32
- const wrapper = mount(BvDatepicker, {
33
- props: { disabled: true, required: true },
34
- });
35
- const el = wrapper.find("bl-datepicker").element;
36
- expect(el.hasAttribute("disabled")).toBe(true);
37
- expect(el.hasAttribute("required")).toBe(true);
38
- });
39
-
40
- it("passes min and max as Date objects", () => {
41
- const wrapper = mount(BvDatepicker, {
42
- props: { min: "2024-01-01", max: "2024-12-31" },
43
- });
44
- const el = wrapper.find("bl-datepicker").element;
45
- expect(el.getAttribute("min-date")).toBeDefined();
46
- expect(el.getAttribute("max-date")).toBeDefined();
47
- });
48
-
49
- it("emits update:modelValue and change on bl-datepicker-change (single)", async () => {
50
- const wrapper = mount(BvDatepicker, { props: { type: "single" } });
51
- const date = new Date(2024, 0, 15);
52
- wrapper.find("bl-datepicker").element.dispatchEvent(
53
- new CustomEvent("bl-datepicker-change", {
54
- bubbles: true,
55
- detail: [date],
56
- }),
57
- );
58
- await wrapper.vm.$nextTick();
59
- expect(wrapper.emitted("update:modelValue")).toEqual([["2024-01-15"]]);
60
- expect(wrapper.emitted("change")).toHaveLength(1);
61
- });
62
-
63
- it("emits update:modelValue with array for type multiple", async () => {
64
- const wrapper = mount(BvDatepicker, { props: { type: "multiple" } });
65
- const d1 = new Date(2024, 0, 15);
66
- const d2 = new Date(2024, 0, 20);
67
- wrapper.find("bl-datepicker").element.dispatchEvent(
68
- new CustomEvent("bl-datepicker-change", {
69
- bubbles: true,
70
- detail: [d1, d2],
71
- }),
72
- );
73
- await wrapper.vm.$nextTick();
74
- expect(wrapper.emitted("update:modelValue")).toEqual([
75
- [["2024-01-15", "2024-01-20"]],
76
- ]);
77
- });
78
-
79
- it("emits update:modelValue with range for type range", async () => {
80
- const wrapper = mount(BvDatepicker, { props: { type: "range" } });
81
- const d1 = new Date(2024, 0, 15);
82
- const d2 = new Date(2024, 0, 20);
83
- wrapper.find("bl-datepicker").element.dispatchEvent(
84
- new CustomEvent("bl-datepicker-change", {
85
- bubbles: true,
86
- detail: [d1, d2],
87
- }),
88
- );
89
- await wrapper.vm.$nextTick();
90
- expect(wrapper.emitted("update:modelValue")).toEqual([
91
- [["2024-01-15", "2024-01-20"]],
92
- ]);
93
- });
94
-
95
- it("emits null when empty for single type", async () => {
96
- const wrapper = mount(BvDatepicker, { props: { type: "single" } });
97
- wrapper.find("bl-datepicker").element.dispatchEvent(
98
- new CustomEvent("bl-datepicker-change", {
99
- bubbles: true,
100
- detail: [],
101
- }),
102
- );
103
- await wrapper.vm.$nextTick();
104
- expect(wrapper.emitted("update:modelValue")).toEqual([[null]]);
105
- });
106
-
107
- it("emits empty array when empty for multiple type", async () => {
108
- const wrapper = mount(BvDatepicker, { props: { type: "multiple" } });
109
- wrapper.find("bl-datepicker").element.dispatchEvent(
110
- new CustomEvent("bl-datepicker-change", {
111
- bubbles: true,
112
- detail: [],
113
- }),
114
- );
115
- await wrapper.vm.$nextTick();
116
- expect(wrapper.emitted("update:modelValue")).toEqual([[[]]]);
117
- });
118
-
119
- it("converts modelValue array to comma-separated for bl-datepicker", async () => {
120
- const wrapper = mount(BvDatepicker, {
121
- props: { modelValue: ["2024-01-15", "2024-01-20"] },
122
- });
123
- await wrapper.vm.$nextTick();
124
- const el = wrapper.find("bl-datepicker").element as HTMLElement & {
125
- value?: string;
126
- };
127
- expect(el.value).toBe("2024-01-15,2024-01-20");
128
- });
129
- });
@@ -1,172 +0,0 @@
1
- <script setup lang="ts">
2
- /**
3
- * Datepicker Component
4
- *
5
- * A Vue UI kit component for Baklava's `bl-datepicker` web component with v-model support.
6
- * Provides a calendar picker input for date selection with min/max constraints,
7
- * placeholder text, and standard form states.
8
- *
9
- * Supports single date, multiple dates, and date range selection modes.
10
- *
11
- * @component
12
- * @example
13
- * ```vue
14
- * <!-- Basic usage (single) -->
15
- * <template>
16
- * <BvDatepicker v-model="date" label="Select date" />
17
- * </template>
18
- * ```
19
- *
20
- * @example
21
- * ```vue
22
- * <!-- Multiple dates -->
23
- * <template>
24
- * <BvDatepicker v-model="dates" type="multiple" label="Select dates" />
25
- * </template>
26
- * ```
27
- *
28
- * @example
29
- * ```vue
30
- * <!-- Date range -->
31
- * <template>
32
- * <BvDatepicker v-model="range" type="range" label="Select range" />
33
- * </template>
34
- * ```
35
- *
36
- * @example
37
- * ```vue
38
- * <!-- With min/max constraints -->
39
- * <template>
40
- * <BvDatepicker
41
- * v-model="date"
42
- * label="Date range"
43
- * placeholder="Select within range"
44
- * :min="minDate"
45
- * :max="maxDate"
46
- * />
47
- * </template>
48
- * ```
49
- */
50
- import { computed, nextTick, onMounted, ref, watch } from "vue";
51
- import { loadBaklavaResources } from "../utils/loadBaklavaResources";
52
- import type { DatepickerProps, DatepickerType } from "./datepicker.types";
53
-
54
- const props = withDefaults(defineProps<DatepickerProps>(), {
55
- modelValue: undefined,
56
- type: "single",
57
- label: undefined,
58
- placeholder: undefined,
59
- disabled: undefined,
60
- min: undefined,
61
- max: undefined,
62
- required: undefined,
63
- size: undefined,
64
- labelFixed: undefined,
65
- helpText: undefined,
66
- });
67
-
68
- const emit = defineEmits<{
69
- "update:modelValue": [value: string | string[] | [string, string] | null];
70
- change: [event: CustomEvent<Date[]>];
71
- }>();
72
-
73
- /**
74
- * Converts a Date to ISO date string (YYYY-MM-DD) for v-model consistency.
75
- */
76
- function toISODateString(date: Date): string {
77
- if (Number.isNaN(date.getTime())) return "";
78
- const year = date.getFullYear();
79
- const month = String(date.getMonth() + 1).padStart(2, "0");
80
- const day = String(date.getDate()).padStart(2, "0");
81
- return `${year}-${month}-${day}`;
82
- }
83
-
84
- /**
85
- * Converts modelValue to Baklava value format (comma-separated string).
86
- * Baklava expects comma-separated ISO date strings (YYYY-MM-DD).
87
- */
88
- const baklavaValue = computed(() => {
89
- const val = props.modelValue;
90
- if (val == null || (Array.isArray(val) && val.length === 0)) return "";
91
- if (Array.isArray(val)) return val.map((d) => String(d)).join(",");
92
- return String(val);
93
- });
94
-
95
- /**
96
- * Handles the bl-datepicker-change event from Baklava.
97
- * Converts Date[] to the appropriate format based on type and emits update:modelValue.
98
- */
99
- const skipNextValueSync = ref(false);
100
-
101
- function handleDatepickerChange(event: CustomEvent<Date[]>) {
102
- const rawDates = event.detail ?? [];
103
- const dates = rawDates.filter(
104
- (d) => d instanceof Date && !Number.isNaN(d.getTime()),
105
- );
106
- const type: DatepickerType = props.type ?? "single";
107
-
108
- let value: string | string[] | [string, string] | null;
109
-
110
- if (dates.length === 0) {
111
- value = type === "multiple" ? [] : null;
112
- } else if (type === "single") {
113
- value = toISODateString(dates[0]);
114
- } else if (type === "multiple") {
115
- value = dates.map(toISODateString);
116
- } else if (type === "range") {
117
- value = [
118
- toISODateString(dates[0]),
119
- toISODateString(dates[1] ?? dates[0]),
120
- ] as [string, string];
121
- } else {
122
- value = null;
123
- }
124
-
125
- skipNextValueSync.value = true;
126
- emit("change", event);
127
- emit("update:modelValue", value);
128
- nextTick(() => {
129
- skipNextValueSync.value = false;
130
- });
131
- }
132
-
133
- const datepickerRef = ref<HTMLElement | null>(null);
134
-
135
- // Sync value to web component property when modelValue changes externally.
136
- // Skip sync when change originated from datepicker to avoid duplicate values in multiple/range mode.
137
- watch(
138
- [datepickerRef, baklavaValue],
139
- ([el, val]) => {
140
- if (skipNextValueSync.value || !el) return;
141
- (el as HTMLUnknownElement & { value?: string }).value = val ?? "";
142
- },
143
- { immediate: true },
144
- );
145
-
146
- onMounted(async () => {
147
- loadBaklavaResources();
148
- // Wait for custom element to be defined before value can be set
149
- if (!customElements.get("bl-datepicker")) {
150
- await customElements.whenDefined("bl-datepicker");
151
- }
152
- });
153
- </script>
154
-
155
- <template>
156
- <bl-datepicker
157
- ref="datepickerRef"
158
- :type="props.type"
159
- :label="props.label"
160
- :placeholder="props.placeholder"
161
- :disabled="props.disabled === true ? true : undefined"
162
- :required="props.required === true ? true : undefined"
163
- :size="props.size"
164
- :label-fixed="props.labelFixed === true ? true : undefined"
165
- :help-text="props.helpText"
166
- :min-date="props.min ? new Date(props.min) : undefined"
167
- :max-date="props.max ? new Date(props.max) : undefined"
168
- @bl-datepicker-change="handleDatepickerChange"
169
- >
170
- <slot />
171
- </bl-datepicker>
172
- </template>
@@ -1,39 +0,0 @@
1
- import type { InputSize } from "@trendyol/baklava/dist/components/input/bl-input";
2
-
3
- /**
4
- * Calendar selection type.
5
- * - single: One date selection
6
- * - multiple: Multiple dates selection
7
- * - range: Date range selection (start and end)
8
- */
9
- export type DatepickerType = "single" | "multiple" | "range";
10
-
11
- /**
12
- * Props for the BvDatepicker component.
13
- *
14
- * @see BvDatepicker
15
- */
16
- export interface DatepickerProps {
17
- /** Selected date(s) (v-model). For single: ISO string. For multiple: string[]. For range: [start, end]. */
18
- modelValue?: string | string[] | [string, string] | null;
19
- /** Selection mode: single date, multiple dates, or date range */
20
- type?: DatepickerType;
21
- /** Datepicker input label */
22
- label?: string;
23
- /** Placeholder text when no date is selected */
24
- placeholder?: string;
25
- /** Disabled state */
26
- disabled?: boolean;
27
- /** Minimum selectable date, ISO format YYYY-MM-DD */
28
- min?: string;
29
- /** Maximum selectable date, ISO format YYYY-MM-DD */
30
- max?: string;
31
- /** Required field for form validation */
32
- required?: boolean;
33
- /** Input size (small, medium, large) */
34
- size?: InputSize;
35
- /** Makes the label fixed positioned */
36
- labelFixed?: boolean;
37
- /** Help text displayed below the input */
38
- helpText?: string;
39
- }
@@ -1,2 +0,0 @@
1
- export type { DatepickerProps, DatepickerType } from "./datepicker.types";
2
- export { default as BvDatepicker } from "./Datepicker.vue";
@@ -1,111 +0,0 @@
1
- import { mount } from "@vue/test-utils";
2
- import { describe, expect, it } from "vitest";
3
- import BvDialog from "./Dialog.vue";
4
-
5
- describe("BvDialog", () => {
6
- it("renders with default props", () => {
7
- const wrapper = mount(BvDialog);
8
- expect(wrapper.find("bl-dialog").exists()).toBe(true);
9
- });
10
-
11
- it("passes caption and open to bl-dialog", () => {
12
- const wrapper = mount(BvDialog, {
13
- props: { caption: "Title", open: true },
14
- });
15
- const el = wrapper.find("bl-dialog").element;
16
- expect(el.getAttribute("caption")).toBe("Title");
17
- });
18
-
19
- it("emits update:open and open when bl-dialog fires bl-dialog-open", async () => {
20
- const wrapper = mount(BvDialog);
21
- wrapper.find("bl-dialog").element.dispatchEvent(
22
- new CustomEvent("bl-dialog-open", { bubbles: true }),
23
- );
24
- await wrapper.vm.$nextTick();
25
- expect(wrapper.emitted("update:open")).toEqual([[true]]);
26
- expect(wrapper.emitted("open")).toHaveLength(1);
27
- });
28
-
29
- it("emits update:open and close when bl-dialog fires bl-dialog-close", async () => {
30
- const wrapper = mount(BvDialog, { props: { open: true } });
31
- wrapper.find("bl-dialog").element.dispatchEvent(
32
- new CustomEvent("bl-dialog-close", { bubbles: true }),
33
- );
34
- await wrapper.vm.$nextTick();
35
- expect(wrapper.emitted("update:open")).toEqual([[false]]);
36
- expect(wrapper.emitted("close")).toHaveLength(1);
37
- });
38
-
39
- it("prevents close when closable is false and source is close-button", async () => {
40
- const wrapper = mount(BvDialog, {
41
- props: { open: true, closable: false },
42
- });
43
- const el = wrapper.find("bl-dialog").element;
44
- const event = new CustomEvent("bl-dialog-request-close", {
45
- bubbles: true,
46
- cancelable: true,
47
- detail: { source: "close-button" },
48
- });
49
- el.dispatchEvent(event);
50
- expect(event.defaultPrevented).toBe(true);
51
- });
52
-
53
- it("prevents close when backdrop is false and source is backdrop", async () => {
54
- const wrapper = mount(BvDialog, {
55
- props: { open: true, backdrop: false },
56
- });
57
- const el = wrapper.find("bl-dialog").element;
58
- const event = new CustomEvent("bl-dialog-request-close", {
59
- bubbles: true,
60
- cancelable: true,
61
- detail: { source: "backdrop" },
62
- });
63
- el.dispatchEvent(event);
64
- expect(event.defaultPrevented).toBe(true);
65
- });
66
-
67
- it("does not prevent close when source is keyboard", async () => {
68
- const wrapper = mount(BvDialog, {
69
- props: { open: true, closable: false },
70
- });
71
- const el = wrapper.find("bl-dialog").element;
72
- const event = new CustomEvent("bl-dialog-request-close", {
73
- bubbles: true,
74
- cancelable: true,
75
- detail: { source: "keyboard" },
76
- });
77
- el.dispatchEvent(event);
78
- expect(event.defaultPrevented).toBe(false);
79
- });
80
-
81
- it("applies size width via style", () => {
82
- const wrapper = mount(BvDialog, { props: { size: "small" } });
83
- const el = wrapper.find("bl-dialog").element;
84
- expect(el.getAttribute("style")).toContain("--bl-dialog-width");
85
- });
86
-
87
- it("exposes open and close methods", () => {
88
- const wrapper = mount(BvDialog);
89
- const vm = wrapper.vm as unknown as { open: () => void; close: () => void };
90
- expect(typeof vm.open).toBe("function");
91
- expect(typeof vm.close).toBe("function");
92
- });
93
-
94
- it("calls open on bl-dialog when exposed open is invoked", async () => {
95
- const wrapper = mount(BvDialog);
96
- const blDialog = wrapper.find("bl-dialog").element as { open?: boolean };
97
- const vm = wrapper.vm as unknown as { open: () => void };
98
- vm.open();
99
- await wrapper.vm.$nextTick();
100
- expect(blDialog.open).toBe(true);
101
- });
102
-
103
- it("calls close on bl-dialog when exposed close is invoked", async () => {
104
- const wrapper = mount(BvDialog, { props: { open: true } });
105
- const blDialog = wrapper.find("bl-dialog").element as { open?: boolean };
106
- const vm = wrapper.vm as unknown as { close: () => void };
107
- vm.close();
108
- await wrapper.vm.$nextTick();
109
- expect(blDialog.open).toBe(false);
110
- });
111
- });
@@ -1,178 +0,0 @@
1
- <script setup lang="ts">
2
- /**
3
- * Dialog Component
4
- *
5
- * A Vue UI kit component for Baklava's `bl-dialog` web component.
6
- * Provides a modal overlay for confirmations, forms, and important content
7
- * with support for header and footer slots, controllable visibility, and programmatic open/close.
8
- *
9
- * @component
10
- * @example
11
- * ```vue
12
- * <!-- Basic usage with v-model -->
13
- * <template>
14
- * <BvButton @click="showDialog = true">Open Dialog</BvButton>
15
- * <BvDialog v-model:open="showDialog" caption="Dialog Title">
16
- * <p>Dialog content goes here.</p>
17
- * </BvDialog>
18
- * </template>
19
- * ```
20
- *
21
- * @example
22
- * ```vue
23
- * <!-- With header and footer slots -->
24
- * <template>
25
- * <BvDialog v-model:open="showDialog" caption="Confirm Action">
26
- * <p>Are you sure you want to proceed?</p>
27
- * <template #footer>
28
- * <BvButton variant="tertiary" @click="showDialog = false">Cancel</BvButton>
29
- * <BvButton variant="primary" @click="showDialog = false">Confirm</BvButton>
30
- * </template>
31
- * </BvDialog>
32
- * </template>
33
- * ```
34
- *
35
- * @example
36
- * ```vue
37
- * <!-- Closable with backdrop control -->
38
- * <template>
39
- * <BvDialog v-model:open="showDialog" caption="Closable" :closable="true" :backdrop="true">
40
- * <p>This dialog has a close button and backdrop click.</p>
41
- * </BvDialog>
42
- * </template>
43
- * ```
44
- *
45
- * @example
46
- * ```vue
47
- * <!-- Programmatic control via ref -->
48
- * <template>
49
- * <BvButton @click="dialogRef?.open()">Open</BvButton>
50
- * <BvButton @click="dialogRef?.close()">Close</BvButton>
51
- * <BvDialog ref="dialogRef" caption="Programmatic">
52
- * <p>Opened and closed via ref methods.</p>
53
- * </BvDialog>
54
- * </template>
55
- * ```
56
- */
57
- import { computed, onMounted, ref, watch } from "vue";
58
- import { loadBaklavaResources } from "../utils/loadBaklavaResources";
59
- import type { DialogProps } from "./dialog.types";
60
-
61
- const SIZE_TO_WIDTH: Record<string, string> = {
62
- small: "320px",
63
- medium: "424px",
64
- large: "560px",
65
- };
66
-
67
- const props = withDefaults(defineProps<DialogProps>(), {
68
- open: false,
69
- caption: undefined,
70
- closable: undefined,
71
- backdrop: undefined,
72
- size: undefined,
73
- });
74
-
75
- const emit = defineEmits<{
76
- /** Emitted when visibility changes. Use for two-way binding. */
77
- "update:open": [open: boolean];
78
- /** Emitted when the dialog is opened. */
79
- open: [];
80
- /** Emitted when the dialog is closed. */
81
- close: [];
82
- }>();
83
-
84
- /** Reference to the underlying bl-dialog element. */
85
- const dialogRef = ref<HTMLElement | null>(null);
86
-
87
- /** Computed style for dialog width based on size prop. */
88
- const dialogStyle = computed(() => {
89
- if (!props.size) return undefined;
90
- const width = SIZE_TO_WIDTH[props.size.toLowerCase()] ?? props.size;
91
- return { "--bl-dialog-width": width };
92
- });
93
-
94
- /** Handles bl-dialog-open event. Syncs state and emits. */
95
- const handleOpen = () => {
96
- emit("update:open", true);
97
- emit("open");
98
- };
99
-
100
- /** Handles bl-dialog-close event. Syncs state and emits. */
101
- const handleClose = () => {
102
- emit("update:open", false);
103
- emit("close");
104
- };
105
-
106
- /**
107
- * Handles bl-dialog-request-close event. Prevents closing when closable or backdrop
108
- * is explicitly set to false for the given close source.
109
- */
110
- const handleRequestClose = (
111
- e: CustomEvent<{ source: "close-button" | "keyboard" | "backdrop" }>,
112
- ) => {
113
- if (props.closable === false && e.detail.source === "close-button") {
114
- e.preventDefault();
115
- }
116
- if (props.backdrop === false && e.detail.source === "backdrop") {
117
- e.preventDefault();
118
- }
119
- };
120
-
121
- /** Syncs props.open to the bl-dialog element's open property. */
122
- function getBlDialog(el: HTMLElement | null): { open: boolean } | null {
123
- return el as unknown as { open: boolean } | null;
124
- }
125
-
126
- watch(
127
- () => props.open,
128
- (newValue) => {
129
- const blDialog = getBlDialog(dialogRef.value);
130
- if (blDialog && blDialog.open !== newValue) {
131
- blDialog.open = newValue;
132
- }
133
- },
134
- { immediate: true },
135
- );
136
-
137
- onMounted(() => {
138
- loadBaklavaResources();
139
-
140
- const blDialog = getBlDialog(dialogRef.value);
141
- if (blDialog && blDialog.open !== props.open) {
142
- blDialog.open = props.open;
143
- }
144
- });
145
-
146
- defineExpose({
147
- /** Opens the dialog programmatically. */
148
- open: () => {
149
- const blDialog = getBlDialog(dialogRef.value);
150
- if (blDialog) blDialog.open = true;
151
- },
152
- /** Closes the dialog programmatically. */
153
- close: () => {
154
- const blDialog = getBlDialog(dialogRef.value);
155
- if (blDialog) blDialog.open = false;
156
- },
157
- });
158
- </script>
159
-
160
- <template>
161
- <bl-dialog
162
- ref="dialogRef"
163
- :open="open"
164
- :caption="caption"
165
- :style="dialogStyle"
166
- @bl-dialog-open="handleOpen"
167
- @bl-dialog-close="handleClose"
168
- @bl-dialog-request-close="handleRequestClose"
169
- >
170
- <div>
171
- <slot v-if="$slots['header']" name="header" />
172
- <slot />
173
- </div>
174
- <div v-if="$slots['footer']" slot="secondary-action">
175
- <slot name="footer" />
176
- </div>
177
- </bl-dialog>
178
- </template>
@@ -1,17 +0,0 @@
1
- /**
2
- * Props for the Dialog component.
3
- *
4
- * @interface DialogProps
5
- */
6
- export interface DialogProps {
7
- /** Whether the dialog is visible. */
8
- open?: boolean;
9
- /** Optional dialog title. Maps to bl-dialog's caption attribute. */
10
- caption?: string;
11
- /** Whether to show the close button in the header. When false, clicking the X is prevented. */
12
- closable?: boolean;
13
- /** Whether clicking the backdrop closes the dialog. When false, click-outside is prevented. */
14
- backdrop?: boolean;
15
- /** Dialog width. Accepts "small", "medium", "large" or a CSS value (e.g. "424px"). */
16
- size?: string;
17
- }
@@ -1,2 +0,0 @@
1
- export { default as BvDialog } from "./Dialog.vue";
2
- export type { DialogProps } from "./dialog.types";