@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,109 +0,0 @@
1
- import type { BaklavaIcon } from "@trendyol/baklava-icons";
2
-
3
- /**
4
- * Properties for a single accordion item when used in group mode.
5
- *
6
- * @interface AccordionItem
7
- */
8
- export interface AccordionItem {
9
- /**
10
- * Whether the accordion is open/expanded.
11
- *
12
- * @default false
13
- */
14
- open?: boolean;
15
-
16
- /**
17
- * The caption text displayed in the accordion header.
18
- */
19
- caption?: string;
20
-
21
- /**
22
- * Icon configuration for the accordion header.
23
- * Can be a boolean to show/hide default icon, or a specific BaklavaIcon.
24
- */
25
- icon?: boolean | BaklavaIcon;
26
-
27
- /**
28
- * Whether the accordion is disabled.
29
- *
30
- * @default false
31
- */
32
- disabled?: boolean;
33
-
34
- /**
35
- * Duration of the expand/collapse animation in milliseconds.
36
- *
37
- * @default 250
38
- */
39
- animationDuration?: number;
40
-
41
- /**
42
- * Additional custom data for use in the #item scoped slot.
43
- * Content is provided via the #item slot, not via a property.
44
- */
45
- [key: string]: unknown;
46
- }
47
-
48
- /**
49
- * Props for the Accordion component.
50
- *
51
- * When `multiple` prop is provided, the component acts as an accordion group container.
52
- * Otherwise, it acts as a single accordion.
53
- *
54
- * @interface AccordionProps
55
- */
56
- export interface AccordionProps {
57
- /**
58
- * Whether the accordion is open/expanded.
59
- * Only used when component is in single accordion mode.
60
- *
61
- * @default false
62
- */
63
- open?: boolean;
64
-
65
- /**
66
- * The caption text displayed in the accordion header.
67
- * Only used when component is in single accordion mode.
68
- */
69
- caption?: string;
70
-
71
- /**
72
- * Icon configuration for the accordion header.
73
- * Can be a boolean to show/hide default icon, or a specific BaklavaIcon.
74
- * Only used when component is in single accordion mode.
75
- */
76
- icon?: boolean | BaklavaIcon;
77
-
78
- /**
79
- * Whether the accordion is disabled.
80
- * Only used when component is in single accordion mode.
81
- *
82
- * @default false
83
- */
84
- disabled?: boolean;
85
-
86
- /**
87
- * Duration of the expand/collapse animation in milliseconds.
88
- * Only used when component is in single accordion mode.
89
- *
90
- * @default 250
91
- */
92
- animationDuration?: number;
93
-
94
- /**
95
- * Allow multiple accordions to be open at once.
96
- * When this prop is provided, the component acts as an accordion group container.
97
- * When not provided, the component acts as a single accordion.
98
- *
99
- * @default false (when used as group)
100
- */
101
- multiple?: boolean;
102
-
103
- /**
104
- * Array of accordion items to render when in group mode.
105
- * Each item will be rendered as a bl-accordion element.
106
- * Only used when component is in group mode.
107
- */
108
- items?: AccordionItem[];
109
- }
@@ -1,3 +0,0 @@
1
- // Component exports must use the "Bv-" prefix
2
- export { default as BvAccordion } from "./Accordion.vue";
3
- export type { AccordionProps, AccordionItem } from "./accordion.types";
@@ -1,38 +0,0 @@
1
- import { mount } from "@vue/test-utils";
2
- import { describe, expect, it } from "vitest";
3
- import BvAlert from "./Alert.vue";
4
-
5
- describe("BvAlert", () => {
6
- it("renders with default props", () => {
7
- const wrapper = mount(BvAlert);
8
- expect(wrapper.find("bl-alert").exists()).toBe(true);
9
- });
10
-
11
- it("passes variant and description to bl-alert", () => {
12
- const wrapper = mount(BvAlert, {
13
- props: { variant: "success", description: "Done" },
14
- });
15
- const el = wrapper.find("bl-alert").element;
16
- expect(el.getAttribute("variant")).toBe("success");
17
- expect(el.getAttribute("description")).toBe("Done");
18
- });
19
-
20
- it("emits close when bl-alert fires bl-close", async () => {
21
- const wrapper = mount(BvAlert, { props: { closable: true } });
22
- wrapper.find("bl-alert").element.dispatchEvent(
23
- new CustomEvent("bl-close", { bubbles: true }),
24
- );
25
- await wrapper.vm.$nextTick();
26
- expect(wrapper.emitted("close")).toHaveLength(1);
27
- });
28
-
29
- it("exposes open and close methods", async () => {
30
- const wrapper = mount(BvAlert, { props: { closable: true } });
31
- const vm = wrapper.vm as unknown as { open: () => Promise<void>; close: () => Promise<void> };
32
- expect(typeof vm.open).toBe("function");
33
- expect(typeof vm.close).toBe("function");
34
- await vm.close();
35
- await wrapper.vm.$nextTick();
36
- expect(wrapper.emitted("close")).toHaveLength(1);
37
- });
38
- });
@@ -1,199 +0,0 @@
1
- <script setup lang="ts">
2
- /**
3
- * Alert Component
4
- *
5
- * A Vue UI kit component for Baklava's `bl-alert` web component.
6
- * Displays contextual feedback messages with variants (info, success, warning, danger).
7
- *
8
- * @component
9
- * @example
10
- * ```vue
11
- * <!-- Basic alert -->
12
- * <template>
13
- * <BvAlert variant="info" description="This is an informational message" />
14
- * </template>
15
- * ```
16
- *
17
- * @example
18
- * ```vue
19
- * <!-- Closable alert with controlled state -->
20
- * <template>
21
- * <BvAlert
22
- * variant="warning"
23
- * caption="Warning"
24
- * closable
25
- * :closed="isClosed"
26
- * @close="isClosed = true"
27
- * >
28
- * <p>You can close this alert.</p>
29
- * </BvAlert>
30
- * </template>
31
- * ```
32
- *
33
- * @example
34
- * ```vue
35
- * <!-- Programmatic control via ref -->
36
- * <template>
37
- * <BvAlert ref="alertRef" variant="success" closable>
38
- * <p>Content</p>
39
- * </BvAlert>
40
- * <button @click="alertRef?.close()">Close</button>
41
- * </template>
42
- * ```
43
- */
44
- import { nextTick, onMounted, ref, watch } from "vue";
45
- import { loadBaklavaResources } from "../utils/loadBaklavaResources";
46
- import type { AlertProps, BlAlertElement } from "./alert.types";
47
-
48
- /**
49
- * Component props with default values.
50
- */
51
- const props = withDefaults(defineProps<AlertProps>(), {
52
- variant: "info",
53
- description: undefined,
54
- icon: undefined,
55
- closable: false,
56
- caption: undefined,
57
- closed: false,
58
- });
59
-
60
- const emit = defineEmits<{
61
- /**
62
- * Emitted when the close button is clicked (only when closable is true).
63
- */
64
- close: [];
65
- }>();
66
-
67
- /**
68
- * Reference to the underlying bl-alert element.
69
- */
70
- const alertRef = ref<HTMLElement | null>(null);
71
-
72
- /**
73
- * Safely casts an HTMLElement to BlAlertElement.
74
- *
75
- * @param el - The element to cast.
76
- * @returns The element typed as BlAlertElement, or null.
77
- */
78
- function asBlAlert(el: HTMLElement | null): BlAlertElement | null {
79
- return el as BlAlertElement | null;
80
- }
81
-
82
- /**
83
- * Waits for the bl-alert custom element to be defined.
84
- * Used when Baklava script loads asynchronously.
85
- */
86
- async function waitForBlAlert(): Promise<void> {
87
- if (!customElements.get("bl-alert")) {
88
- await customElements.whenDefined("bl-alert");
89
- }
90
- }
91
-
92
- /**
93
- * Syncs the `closed` prop state with the underlying bl-alert web component.
94
- * Calls open() or close() on the element when prop and element state differ.
95
- *
96
- * @param el - The bl-alert element to sync.
97
- */
98
- function syncWithBlAlert(el: HTMLElement): void {
99
- const blAlert = asBlAlert(el);
100
- if (!blAlert || typeof blAlert.close !== "function" || typeof blAlert.open !== "function") {
101
- return;
102
- }
103
- if (props.closed && !blAlert.closed) {
104
- blAlert.close();
105
- } else if (!props.closed && blAlert.closed) {
106
- blAlert.open();
107
- }
108
- }
109
-
110
- /**
111
- * Calls open or close on the bl-alert element when available.
112
- *
113
- * @param method - The method to call ("open" or "close").
114
- */
115
- function callBlAlertMethod(method: "open" | "close"): void {
116
- const el = asBlAlert(alertRef.value);
117
- if (el && typeof el[method] === "function") {
118
- el[method]!();
119
- }
120
- }
121
-
122
- /**
123
- * Watches for changes to the closed prop and syncs with the web component.
124
- */
125
- watch(
126
- () => props.closed,
127
- () => {
128
- if (alertRef.value) {
129
- syncWithBlAlert(alertRef.value);
130
- }
131
- },
132
- );
133
-
134
- /**
135
- * Handles the bl-close event from the underlying web component.
136
- * Forwards it to the component's emit.
137
- */
138
- function handleClose(): void {
139
- emit("close");
140
- }
141
-
142
- /**
143
- * Lifecycle hook: Component mounted.
144
- *
145
- * Loads Baklava resources, waits for bl-alert to be defined,
146
- * then syncs the initial closed state with the web component.
147
- */
148
- onMounted(async () => {
149
- loadBaklavaResources();
150
-
151
- await nextTick();
152
- await waitForBlAlert();
153
-
154
- if (alertRef.value) {
155
- syncWithBlAlert(alertRef.value);
156
- }
157
- });
158
-
159
- /**
160
- * Exposed methods for programmatic control of the alert.
161
- */
162
- defineExpose({
163
- /**
164
- * Opens the alert programmatically.
165
- *
166
- * @public
167
- */
168
- open: async (): Promise<void> => {
169
- await nextTick();
170
- callBlAlertMethod("open");
171
- },
172
-
173
- /**
174
- * Closes the alert programmatically.
175
- *
176
- * @public
177
- */
178
- close: async (): Promise<void> => {
179
- await nextTick();
180
- callBlAlertMethod("close");
181
- },
182
- });
183
- </script>
184
-
185
- <template>
186
- <bl-alert
187
- ref="alertRef"
188
- v-bind="{
189
- ...props,
190
- closable: props.closable === true ? true : undefined,
191
- closed: props.closed,
192
- }"
193
- @bl-close="handleClose"
194
- >
195
- <slot v-if="$slots['caption']" name="caption" />
196
- <slot v-if="$slots['default']" />
197
- <slot v-if="$slots['action']" name="action" />
198
- </bl-alert>
199
- </template>
@@ -1,58 +0,0 @@
1
- import type { BaklavaIcon } from "@trendyol/baklava-icons";
2
- import type { AlertVariant } from "@trendyol/baklava/dist/components/alert/bl-alert";
3
-
4
- /**
5
- * Interface for the bl-alert custom element.
6
- * Extends HTMLElement with Baklava Alert API.
7
- *
8
- * @interface BlAlertElement
9
- */
10
- export interface BlAlertElement extends HTMLElement {
11
- closed?: boolean;
12
- open?: () => void;
13
- close?: () => void;
14
- }
15
-
16
- /**
17
- * Props for the Alert component.
18
- * Wraps Baklava's bl-alert web component.
19
- *
20
- * @interface AlertProps
21
- */
22
- export interface AlertProps {
23
- /**
24
- * Alert variant (success, danger, info, warning).
25
- *
26
- * @default "info"
27
- */
28
- variant?: AlertVariant;
29
-
30
- /**
31
- * Alert description text.
32
- */
33
- description?: string;
34
-
35
- /**
36
- * Icon configuration: boolean to show/hide default icon, or a specific BaklavaIcon.
37
- */
38
- icon?: boolean | BaklavaIcon;
39
-
40
- /**
41
- * Whether to show the close button.
42
- *
43
- * @default false
44
- */
45
- closable?: boolean;
46
-
47
- /**
48
- * Alert caption text.
49
- */
50
- caption?: string;
51
-
52
- /**
53
- * Whether the alert is closed/collapsed.
54
- *
55
- * @default false
56
- */
57
- closed?: boolean;
58
- }
@@ -1,2 +0,0 @@
1
- export { default as BvAlert } from "./Alert.vue";
2
- export type { AlertProps, BlAlertElement } from "./alert.types";
@@ -1,28 +0,0 @@
1
- import { mount } from "@vue/test-utils";
2
- import { describe, expect, it } from "vitest";
3
- import BvBadge from "./Badge.vue";
4
-
5
- describe("BvBadge", () => {
6
- it("renders with default props", () => {
7
- const wrapper = mount(BvBadge);
8
- const blBadge = wrapper.find("bl-badge");
9
- expect(blBadge.exists()).toBe(true);
10
- });
11
-
12
- it("passes size to bl-badge", () => {
13
- const wrapper = mount(BvBadge, {
14
- props: { size: "small" },
15
- });
16
- const blBadge = wrapper.find("bl-badge").element;
17
- expect(blBadge.getAttribute("size")).toBe("small");
18
- });
19
-
20
- it("renders slot content", () => {
21
- const wrapper = mount(BvBadge, {
22
- slots: {
23
- default: "Badge content",
24
- },
25
- });
26
- expect(wrapper.text()).toContain("Badge content");
27
- });
28
- });
@@ -1,20 +0,0 @@
1
- <script setup lang="ts">
2
- import { onMounted } from "vue";
3
- import { loadBaklavaResources } from "../utils/loadBaklavaResources";
4
- import type { BadgeProps } from "./badge.types";
5
-
6
- const props = withDefaults(defineProps<BadgeProps>(), {
7
- size: "medium",
8
- icon: undefined,
9
- });
10
-
11
- onMounted(() => {
12
- loadBaklavaResources();
13
- });
14
- </script>
15
-
16
- <template>
17
- <bl-badge v-bind="props">
18
- <slot />
19
- </bl-badge>
20
- </template>
@@ -1,7 +0,0 @@
1
- import type { BaklavaIcon } from "@trendyol/baklava-icons";
2
- import type { BadgeSize } from "@trendyol/baklava/dist/components/badge/bl-badge";
3
-
4
- export interface BadgeProps {
5
- size?: BadgeSize;
6
- icon?: BaklavaIcon;
7
- }
@@ -1,2 +0,0 @@
1
- export { default as BvBadge } from "./Badge.vue";
2
- export type { BadgeProps } from "./badge.types";
@@ -1,111 +0,0 @@
1
- import { mount } from "@vue/test-utils";
2
- import { nextTick } from "vue";
3
- import { afterEach, describe, expect, it, vi } from "vitest";
4
- import BvBanner from "./Banner.vue";
5
-
6
- describe("BvBanner", () => {
7
- afterEach(() => {
8
- localStorage.clear();
9
- });
10
-
11
- it("renders with title", () => {
12
- const wrapper = mount(BvBanner, {
13
- props: { title: "Important message" },
14
- });
15
- expect(wrapper.text()).toContain("Important message");
16
- });
17
-
18
- it("emits close when close button is clicked", async () => {
19
- const wrapper = mount(BvBanner, {
20
- props: { title: "Message", close: true },
21
- });
22
- const closeBtn = wrapper.find(".bv-banner__close-btn");
23
- await closeBtn.trigger("click");
24
- expect(wrapper.emitted("close")).toHaveLength(1);
25
- });
26
-
27
- it("applies color variant via inline style", () => {
28
- const wrapper = mount(BvBanner, {
29
- props: { title: "Test", color: "success" },
30
- });
31
- const banner = wrapper.find(".bv-banner").element;
32
- expect(banner.getAttribute("style")).toContain("bl-color-success");
33
- });
34
-
35
- it("renders action buttons when actions prop provided", async () => {
36
- const onClick = () => {};
37
- const wrapper = mount(BvBanner, {
38
- props: {
39
- title: "Actions",
40
- actions: [{ label: "Action 1", onClick }],
41
- },
42
- });
43
- expect(wrapper.find(".bv-banner__actions").exists()).toBe(true);
44
- await wrapper.find(".bv-banner__action-btn").trigger("click");
45
- });
46
-
47
- it("renders as link when to prop provided", () => {
48
- const wrapper = mount(BvBanner, {
49
- props: { title: "Link", to: "/page" },
50
- });
51
- expect(wrapper.find(".bv-banner__inner--link").exists()).toBe(true);
52
- expect(wrapper.find("bl-link").attributes("href")).toBe("/page");
53
- });
54
-
55
- it("renders icon when icon prop is provided", () => {
56
- const wrapper = mount(BvBanner, {
57
- props: { title: "With icon", icon: "info" },
58
- });
59
- expect(wrapper.find(".bv-banner__icon").exists()).toBe(true);
60
- });
61
-
62
- it("dismisses on mount when localStorage has 'true' for banner id", async () => {
63
- localStorage.setItem("banner-test-banner", "true");
64
- const wrapper = mount(BvBanner, {
65
- props: { title: "Persisted", close: true, id: "test-banner" },
66
- });
67
- await nextTick();
68
- expect(wrapper.find(".bv-banner").exists()).toBe(false);
69
- });
70
-
71
- it("persists dismissal to localStorage when closing a banner with id", async () => {
72
- const wrapper = mount(BvBanner, {
73
- props: { title: "Persist close", close: true, id: "persist-id" },
74
- });
75
- const closeBtn = wrapper.find(".bv-banner__close-btn");
76
- await closeBtn.trigger("click");
77
- expect(localStorage.getItem("banner-persist-id")).toBe("true");
78
- expect(wrapper.emitted("close")).toHaveLength(1);
79
- });
80
-
81
- it("does not persist when id sanitizes to empty string", async () => {
82
- const wrapper = mount(BvBanner, {
83
- props: { title: "Bad id", close: true, id: "!!!" },
84
- });
85
- const closeBtn = wrapper.find(".bv-banner__close-btn");
86
- await closeBtn.trigger("click");
87
- expect(wrapper.emitted("close")).toHaveLength(1);
88
- // No key written because sanitized id is empty
89
- expect(localStorage.length).toBe(0);
90
- });
91
-
92
- it("handles action button without an onClick handler", async () => {
93
- const wrapper = mount(BvBanner, {
94
- props: {
95
- title: "No handler",
96
- actions: [{ label: "NoOp" }],
97
- },
98
- });
99
- // Should not throw when clicking an action with no onClick
100
- await wrapper.find(".bv-banner__action-btn").trigger("click");
101
- expect(wrapper.find(".bv-banner__actions").exists()).toBe(true);
102
- });
103
-
104
- it("falls back to primary color when unknown color is given", () => {
105
- const wrapper = mount(BvBanner, {
106
- props: { title: "Unknown", color: "custom-unknown" as any },
107
- });
108
- const banner = wrapper.find(".bv-banner").element;
109
- expect(banner.getAttribute("style")).toContain("bl-color-primary");
110
- });
111
- });