@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,24 +0,0 @@
1
- import type { BaklavaIcon } from "@trendyol/baklava-icons";
2
-
3
- /** Tag variant: selectable (default) or removable (closable) */
4
- export type TagVariant = "selectable" | "removable";
5
-
6
- /** Tag size */
7
- export type TagSize = "small" | "medium" | "large";
8
-
9
- export interface TagProps {
10
- /** Tag variant: selectable or removable */
11
- variant?: TagVariant;
12
- /** Tag size */
13
- size?: TagSize;
14
- /** When true, shows close button (uses variant="removable" under the hood) */
15
- closable?: boolean;
16
- /** Icon name from Baklava icons */
17
- icon?: BaklavaIcon;
18
- /** Selected state (for selectable variant) */
19
- selected?: boolean;
20
- /** Disabled state */
21
- disabled?: boolean;
22
- /** Value for form/selection */
23
- value?: string | null;
24
- }
@@ -1,105 +0,0 @@
1
- import { mount } from "@vue/test-utils";
2
- import { describe, expect, it } from "vitest";
3
- import BvTextarea from "./Textarea.vue";
4
-
5
- describe("BvTextarea", () => {
6
- it("renders with default props", () => {
7
- const wrapper = mount(BvTextarea);
8
- expect(wrapper.find("bl-textarea").exists()).toBe(true);
9
- });
10
-
11
- it("passes label and placeholder to bl-textarea", () => {
12
- const wrapper = mount(BvTextarea, {
13
- props: { label: "Message", placeholder: "Enter text" },
14
- });
15
- const el = wrapper.find("bl-textarea").element;
16
- expect(el.getAttribute("label")).toBe("Message");
17
- expect(el.getAttribute("placeholder")).toBe("Enter text");
18
- });
19
-
20
- it("emits update:modelValue when bl-textarea fires bl-input", async () => {
21
- const wrapper = mount(BvTextarea);
22
- const el = wrapper.find("bl-textarea").element as HTMLTextAreaElement & {
23
- value: string;
24
- };
25
- el.value = "new text";
26
- el.dispatchEvent(
27
- new CustomEvent("bl-input", { bubbles: true, detail: { target: el } }),
28
- );
29
- await wrapper.vm.$nextTick();
30
- expect(wrapper.emitted("update:modelValue")).toEqual([["new text"]]);
31
- });
32
-
33
- it("binds modelValue to value attribute", () => {
34
- const wrapper = mount(BvTextarea, {
35
- props: { modelValue: "initial" },
36
- });
37
- expect(wrapper.find("bl-textarea").element.getAttribute("value")).toBe(
38
- "initial",
39
- );
40
- });
41
-
42
- it("passes disabled=true to bl-textarea", () => {
43
- const wrapper = mount(BvTextarea, { props: { disabled: true } });
44
- const el = wrapper.find("bl-textarea").element;
45
- expect(el.getAttribute("disabled")).toBe("true");
46
- });
47
-
48
- it("passes required=true to bl-textarea", () => {
49
- const wrapper = mount(BvTextarea, { props: { required: true } });
50
- const el = wrapper.find("bl-textarea").element;
51
- expect(el.getAttribute("required")).toBe("true");
52
- });
53
-
54
- it("emits update:modelValue with null when target value is empty", async () => {
55
- const wrapper = mount(BvTextarea);
56
- const el = wrapper.find("bl-textarea").element as HTMLTextAreaElement & {
57
- value: string;
58
- };
59
- el.value = "";
60
- el.dispatchEvent(
61
- new CustomEvent("bl-input", { bubbles: true, detail: { target: el } }),
62
- );
63
- await wrapper.vm.$nextTick();
64
- expect(wrapper.emitted("update:modelValue")).toEqual([[null]]);
65
- });
66
-
67
- it("emits input event on bl-input", async () => {
68
- const wrapper = mount(BvTextarea);
69
- const el = wrapper.find("bl-textarea").element as HTMLTextAreaElement & {
70
- value: string;
71
- };
72
- el.value = "text";
73
- el.dispatchEvent(
74
- new CustomEvent("bl-input", { bubbles: true }),
75
- );
76
- await wrapper.vm.$nextTick();
77
- expect(wrapper.emitted("input")).toHaveLength(1);
78
- });
79
-
80
- it("emits change event on bl-change", async () => {
81
- const wrapper = mount(BvTextarea);
82
- const el = wrapper.find("bl-textarea").element;
83
- el.dispatchEvent(new CustomEvent("bl-change", { bubbles: true }));
84
- await wrapper.vm.$nextTick();
85
- expect(wrapper.emitted("change")).toHaveLength(1);
86
- });
87
-
88
- it("renders slot content", () => {
89
- const wrapper = mount(BvTextarea, {
90
- slots: { default: "<span class=\"helper\">Help</span>" },
91
- });
92
- expect(wrapper.find(".helper").exists()).toBe(true);
93
- });
94
-
95
- it("passes additional props (rows, maxlength, name, size) to bl-textarea", () => {
96
- const wrapper = mount(BvTextarea, {
97
- props: { rows: 5, maxlength: 200, name: "comment", size: "large" as const },
98
- });
99
- const el = wrapper.find("bl-textarea").element;
100
- expect(el.getAttribute("rows")).toBe("5");
101
- expect(el.getAttribute("maxlength")).toBe("200");
102
- expect(el.getAttribute("name")).toBe("comment");
103
- expect(el.getAttribute("size")).toBe("large");
104
- });
105
- });
@@ -1,84 +0,0 @@
1
- <script setup lang="ts">
2
- /**
3
- * Textarea Component
4
- *
5
- * A Vue UI kit component for Baklava's `bl-textarea` web component with v-model support.
6
- * Supports label, placeholder, validation, character counter, and help text.
7
- *
8
- * @component
9
- * @example
10
- * ```vue
11
- * <!-- Basic usage with v-model -->
12
- * <template>
13
- * <BvTextarea v-model="message" label="Message" placeholder="Enter your message" />
14
- * </template>
15
- * ```
16
- *
17
- * @example
18
- * ```vue
19
- * <!-- With validation -->
20
- * <template>
21
- * <BvTextarea
22
- * v-model="comment"
23
- * label="Comment"
24
- * :maxlength="500"
25
- * help-text="Max 500 characters"
26
- * invalid-text="Please enter a valid comment"
27
- * />
28
- * </template>
29
- * ```
30
- */
31
- import { onMounted } from "vue";
32
- import { loadBaklavaResources } from "../utils/loadBaklavaResources";
33
- import type { TextareaProps } from "./textarea.types";
34
-
35
- const props = withDefaults(defineProps<TextareaProps>(), {
36
- modelValue: undefined,
37
- label: undefined,
38
- placeholder: undefined,
39
- rows: undefined,
40
- maxlength: undefined,
41
- disabled: undefined,
42
- required: undefined,
43
- });
44
-
45
- const emit = defineEmits<{
46
- /**
47
- * Emitted when the value changes (use with v-model).
48
- * @param {string | null} value - The new textarea value.
49
- */
50
- "update:modelValue": [value: string | null];
51
- /**
52
- * Emitted on user input (mirrors native bl-input).
53
- * @param {CustomEvent} event - The bl-input event.
54
- */
55
- input: [event: CustomEvent];
56
- /**
57
- * Emitted when the value changes (blur or commit).
58
- * @param {CustomEvent} event - The bl-change event.
59
- */
60
- change: [event: CustomEvent];
61
- }>();
62
-
63
- onMounted(() => {
64
- loadBaklavaResources();
65
- });
66
- </script>
67
-
68
- <template>
69
- <bl-textarea
70
- v-bind="{
71
- ...props,
72
- disabled: props.disabled === true ? true : undefined,
73
- required: props.required === true ? true : undefined,
74
- }"
75
- :value="props.modelValue"
76
- @bl-input="
77
- emit('input', $event);
78
- emit('update:modelValue', ($event.target as HTMLTextAreaElement)?.value || null);
79
- "
80
- @bl-change="emit('change', $event)"
81
- >
82
- <slot />
83
- </bl-textarea>
84
- </template>
@@ -1,2 +0,0 @@
1
- export { default as BvTextarea } from "./Textarea.vue";
2
- export type { TextareaProps, TextareaSize } from "./textarea.types";
@@ -1,37 +0,0 @@
1
- /** Textarea size */
2
- export type TextareaSize = "small" | "medium" | "large";
3
-
4
- export interface TextareaProps {
5
- /** Textarea value (use with v-model) */
6
- modelValue?: string | null;
7
- /** Label text */
8
- label?: string;
9
- /** Placeholder text */
10
- placeholder?: string;
11
- /** Number of visible rows */
12
- rows?: number;
13
- /** Maximum character length */
14
- maxlength?: number;
15
- /** Minimum character length */
16
- minlength?: number;
17
- /** Disabled state */
18
- disabled?: boolean;
19
- /** Required field */
20
- required?: boolean;
21
- /** Readonly state */
22
- readonly?: boolean;
23
- /** Help text below the textarea */
24
- helpText?: string;
25
- /** Custom error/invalid message */
26
- invalidText?: string;
27
- /** Enable character counter */
28
- characterCounter?: boolean;
29
- /** Enable auto-expand up to maxRows */
30
- expand?: boolean;
31
- /** Max rows when expand is true */
32
- maxRows?: number;
33
- /** Textarea size */
34
- size?: TextareaSize;
35
- /** Name attribute for forms */
36
- name?: string;
37
- }
@@ -1,46 +0,0 @@
1
- import { mount } from "@vue/test-utils";
2
- import { describe, expect, it } from "vitest";
3
- import BvTooltip from "./Tooltip.vue";
4
-
5
- describe("BvTooltip", () => {
6
- it("renders with content prop", () => {
7
- const wrapper = mount(BvTooltip, {
8
- props: { content: "Tooltip text" },
9
- slots: { default: "Trigger" },
10
- });
11
- expect(wrapper.find("bl-tooltip").exists()).toBe(true);
12
- expect(wrapper.text()).toContain("Tooltip text");
13
- expect(wrapper.text()).toContain("Trigger");
14
- });
15
-
16
- it("passes placement to bl-tooltip", () => {
17
- const wrapper = mount(BvTooltip, {
18
- props: { content: "Tip", placement: "bottom" },
19
- slots: { default: "Hover" },
20
- });
21
- expect(wrapper.find("bl-tooltip").element.getAttribute("placement")).toBe(
22
- "bottom",
23
- );
24
- });
25
-
26
- it("emits show when bl-tooltip fires bl-tooltip-show", async () => {
27
- const wrapper = mount(BvTooltip, {
28
- props: { content: "Tip" },
29
- slots: { default: "Hover" },
30
- });
31
- wrapper.find("bl-tooltip").element.dispatchEvent(
32
- new CustomEvent("bl-tooltip-show", { bubbles: true }),
33
- );
34
- await wrapper.vm.$nextTick();
35
- expect(wrapper.emitted("show")).toHaveLength(1);
36
- });
37
-
38
- it("renders slot when disabled", () => {
39
- const wrapper = mount(BvTooltip, {
40
- props: { content: "Tip", disabled: true },
41
- slots: { default: "Disabled trigger" },
42
- });
43
- expect(wrapper.find("bl-tooltip").exists()).toBe(false);
44
- expect(wrapper.text()).toContain("Disabled trigger");
45
- });
46
- });
@@ -1,81 +0,0 @@
1
- <script setup lang="ts">
2
- /**
3
- * Tooltip Component
4
- *
5
- * A Vue UI kit component for Baklava's `bl-tooltip` web component for displaying contextual
6
- * information on hover or focus. The trigger is provided via the default slot;
7
- * content can be set via the `content` prop or the `#content` slot.
8
- *
9
- * @component
10
- * @example
11
- * ```vue
12
- * <!-- Basic usage -->
13
- * <template>
14
- * <BvTooltip content="This is a tooltip">
15
- * <BvButton>Hover me</BvButton>
16
- * </BvTooltip>
17
- * </template>
18
- * ```
19
- *
20
- * @example
21
- * ```vue
22
- * <!-- With placement -->
23
- * <template>
24
- * <BvTooltip content="Tooltip" placement="bottom">
25
- * <span>Trigger</span>
26
- * </BvTooltip>
27
- * </template>
28
- * ```
29
- */
30
- import { computed, onMounted } from "vue";
31
- import { loadBaklavaResources } from "../utils/loadBaklavaResources";
32
- import type { TooltipProps } from "./tooltip.types";
33
-
34
- const props = withDefaults(defineProps<TooltipProps>(), {
35
- content: undefined,
36
- placement: undefined,
37
- trigger: undefined,
38
- disabled: undefined,
39
- delay: undefined,
40
- });
41
-
42
- const emit = defineEmits<{
43
- /**
44
- * Emitted when the tooltip is shown.
45
- */
46
- show: [];
47
- /**
48
- * Emitted when the tooltip is hidden.
49
- */
50
- hide: [];
51
- }>();
52
-
53
- // bl-tooltip only supports placement and target. Do not pass trigger (read-only),
54
- // content, disabled, or delay as they are not supported and cause errors.
55
- const tooltipProps = computed(() => {
56
- const bind: Record<string, unknown> = {};
57
- if (props.placement !== undefined) bind.placement = props.placement;
58
- if (props.target !== undefined) bind.target = props.target;
59
- return bind;
60
- });
61
-
62
- onMounted(() => {
63
- loadBaklavaResources();
64
- });
65
- </script>
66
-
67
- <template>
68
- <bl-tooltip
69
- v-if="!props.disabled"
70
- v-bind="tooltipProps"
71
- @bl-tooltip-show="emit('show')"
72
- @bl-tooltip-hide="emit('hide')"
73
- >
74
- <div slot="tooltip-trigger">
75
- <slot />
76
- </div>
77
- <slot v-if="$slots['content']" name="content" />
78
- <span v-else-if="content">{{ content }}</span>
79
- </bl-tooltip>
80
- <slot v-else />
81
- </template>
@@ -1,3 +0,0 @@
1
- // Component exports must use the "Bv-" prefix
2
- export { default as BvTooltip } from "./Tooltip.vue";
3
- export type { TooltipProps, TooltipPlacement } from "./tooltip.types";
@@ -1,29 +0,0 @@
1
- /** Tooltip placement relative to trigger */
2
- export type TooltipPlacement =
3
- | "top"
4
- | "top-start"
5
- | "top-end"
6
- | "bottom"
7
- | "bottom-start"
8
- | "bottom-end"
9
- | "left"
10
- | "left-start"
11
- | "left-end"
12
- | "right"
13
- | "right-start"
14
- | "right-end";
15
-
16
- export interface TooltipProps {
17
- /** Tooltip content text */
18
- content?: string;
19
- /** Placement of tooltip relative to trigger (default: 'top') */
20
- placement?: TooltipPlacement;
21
- /** Target element (selector or Element) when using external trigger */
22
- target?: string | Element;
23
- /** Trigger type: 'hover' | 'click' etc. (passed to bl-tooltip) */
24
- trigger?: string;
25
- /** Disabled state */
26
- disabled?: boolean;
27
- /** Delay before showing tooltip (ms) */
28
- delay?: number;
29
- }
@@ -1,24 +0,0 @@
1
- const BAKLAVA_VERSION = "3.4.2";
2
-
3
- export const loadBaklavaResources = () => {
4
- const loadScript = () => {
5
- if (!document.querySelector('script[src*="baklava.js"]')) {
6
- const script = document.createElement("script");
7
- script.type = "module";
8
- script.src = `https://cdn.jsdelivr.net/npm/@trendyol/baklava@${BAKLAVA_VERSION}/dist/baklava.js`;
9
- document.head.appendChild(script);
10
- }
11
- };
12
-
13
- const loadStyles = () => {
14
- if (!document.querySelector('link[href*="default.css"]')) {
15
- const link = document.createElement("link");
16
- link.rel = "stylesheet";
17
- link.href = `https://cdn.jsdelivr.net/npm/@trendyol/baklava@${BAKLAVA_VERSION}/dist/themes/default.css`;
18
- document.head.appendChild(link);
19
- }
20
- };
21
-
22
- loadScript();
23
- loadStyles();
24
- };