@baklavue/ui 1.0.0 → 1.0.2-preview.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/dist/accordion/Accordion.vue.d.ts +51 -0
  2. package/dist/accordion/Accordion.vue.d.ts.map +1 -0
  3. package/dist/accordion/accordion.types.d.ts +97 -0
  4. package/dist/accordion/accordion.types.d.ts.map +1 -0
  5. package/dist/accordion/index.d.ts +3 -0
  6. package/dist/accordion/index.d.ts.map +1 -0
  7. package/dist/alert/Alert.vue.d.ts +49 -0
  8. package/dist/alert/Alert.vue.d.ts.map +1 -0
  9. package/dist/alert/alert.types.d.ts +52 -0
  10. package/dist/alert/alert.types.d.ts.map +1 -0
  11. package/dist/alert/index.d.ts +3 -0
  12. package/dist/alert/index.d.ts.map +1 -0
  13. package/dist/badge/Badge.vue.d.ts +22 -0
  14. package/dist/badge/Badge.vue.d.ts.map +1 -0
  15. package/dist/badge/badge.types.d.ts +7 -0
  16. package/dist/badge/badge.types.d.ts.map +1 -0
  17. package/dist/badge/index.d.ts +3 -0
  18. package/dist/badge/index.d.ts.map +1 -0
  19. package/dist/banner/Banner.vue.d.ts +36 -0
  20. package/dist/banner/Banner.vue.d.ts.map +1 -0
  21. package/dist/banner/banner.types.d.ts +70 -0
  22. package/dist/banner/banner.types.d.ts.map +1 -0
  23. package/dist/banner/index.d.ts +3 -0
  24. package/dist/banner/index.d.ts.map +1 -0
  25. package/dist/button/Button.vue.d.ts +36 -0
  26. package/dist/button/Button.vue.d.ts.map +1 -0
  27. package/dist/button/button.types.d.ts +24 -0
  28. package/dist/button/button.types.d.ts.map +1 -0
  29. package/dist/button/index.d.ts +3 -0
  30. package/dist/button/index.d.ts.map +1 -0
  31. package/dist/checkbox/Checkbox.vue.d.ts +39 -0
  32. package/dist/checkbox/Checkbox.vue.d.ts.map +1 -0
  33. package/dist/checkbox/checkbox.types.d.ts +95 -0
  34. package/dist/checkbox/checkbox.types.d.ts.map +1 -0
  35. package/dist/checkbox/index.d.ts +3 -0
  36. package/dist/checkbox/index.d.ts.map +1 -0
  37. package/dist/chip/Chip.vue.d.ts +29 -0
  38. package/dist/chip/Chip.vue.d.ts.map +1 -0
  39. package/dist/chip/chip.types.d.ts +59 -0
  40. package/dist/chip/chip.types.d.ts.map +1 -0
  41. package/dist/chip/index.d.ts +3 -0
  42. package/dist/chip/index.d.ts.map +1 -0
  43. package/dist/datepicker/Datepicker.vue.d.ts +41 -0
  44. package/dist/datepicker/Datepicker.vue.d.ts.map +1 -0
  45. package/dist/datepicker/datepicker.types.d.ts +38 -0
  46. package/dist/datepicker/datepicker.types.d.ts.map +1 -0
  47. package/dist/datepicker/index.d.ts +3 -0
  48. package/dist/datepicker/index.d.ts.map +1 -0
  49. package/dist/dialog/Dialog.vue.d.ts +44 -0
  50. package/dist/dialog/Dialog.vue.d.ts.map +1 -0
  51. package/dist/dialog/dialog.types.d.ts +18 -0
  52. package/dist/dialog/dialog.types.d.ts.map +1 -0
  53. package/dist/dialog/index.d.ts +3 -0
  54. package/dist/dialog/index.d.ts.map +1 -0
  55. package/dist/drawer/Drawer.vue.d.ts +42 -0
  56. package/dist/drawer/Drawer.vue.d.ts.map +1 -0
  57. package/dist/drawer/drawer.types.d.ts +18 -0
  58. package/dist/drawer/drawer.types.d.ts.map +1 -0
  59. package/dist/drawer/index.d.ts +3 -0
  60. package/dist/drawer/index.d.ts.map +1 -0
  61. package/dist/dropdown/Dropdown.vue.d.ts +59 -0
  62. package/dist/dropdown/Dropdown.vue.d.ts.map +1 -0
  63. package/dist/dropdown/dropdown.types.d.ts +92 -0
  64. package/dist/dropdown/dropdown.types.d.ts.map +1 -0
  65. package/dist/dropdown/index.d.ts +3 -0
  66. package/dist/dropdown/index.d.ts.map +1 -0
  67. package/dist/file-upload/FileUpload.vue.d.ts +44 -0
  68. package/dist/file-upload/FileUpload.vue.d.ts.map +1 -0
  69. package/dist/file-upload/file-upload.types.d.ts +76 -0
  70. package/dist/file-upload/file-upload.types.d.ts.map +1 -0
  71. package/dist/file-upload/index.d.ts +3 -0
  72. package/dist/file-upload/index.d.ts.map +1 -0
  73. package/dist/icon/Icon.vue.d.ts +29 -0
  74. package/dist/icon/Icon.vue.d.ts.map +1 -0
  75. package/dist/icon/icon.types.d.ts +23 -0
  76. package/dist/icon/icon.types.d.ts.map +1 -0
  77. package/dist/icon/index.d.ts +3 -0
  78. package/dist/icon/index.d.ts.map +1 -0
  79. package/dist/image/Image.vue.d.ts +30 -0
  80. package/dist/image/Image.vue.d.ts.map +1 -0
  81. package/dist/image/image.types.d.ts +48 -0
  82. package/dist/image/image.types.d.ts.map +1 -0
  83. package/dist/image/index.d.ts +3 -0
  84. package/dist/image/index.d.ts.map +1 -0
  85. package/dist/index.css +474 -0
  86. package/dist/index.d.ts +42 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +2424 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/input/Input.vue.d.ts +39 -0
  91. package/dist/input/Input.vue.d.ts.map +1 -0
  92. package/dist/input/index.d.ts +3 -0
  93. package/dist/input/index.d.ts.map +1 -0
  94. package/dist/input/input.types.d.ts +122 -0
  95. package/dist/input/input.types.d.ts.map +1 -0
  96. package/dist/link/Link.vue.d.ts +38 -0
  97. package/dist/link/Link.vue.d.ts.map +1 -0
  98. package/dist/link/index.d.ts +3 -0
  99. package/dist/link/index.d.ts.map +1 -0
  100. package/dist/link/link.types.d.ts +40 -0
  101. package/dist/link/link.types.d.ts.map +1 -0
  102. package/dist/notification/Notification.vue.d.ts +7 -0
  103. package/dist/notification/Notification.vue.d.ts.map +1 -0
  104. package/dist/notification/index.d.ts +3 -0
  105. package/dist/notification/index.d.ts.map +1 -0
  106. package/dist/notification/notification.types.d.ts +25 -0
  107. package/dist/notification/notification.types.d.ts.map +1 -0
  108. package/dist/pagination/Pagination.vue.d.ts +34 -0
  109. package/dist/pagination/Pagination.vue.d.ts.map +1 -0
  110. package/dist/pagination/index.d.ts +3 -0
  111. package/dist/pagination/index.d.ts.map +1 -0
  112. package/dist/pagination/pagination.types.d.ts +54 -0
  113. package/dist/pagination/pagination.types.d.ts.map +1 -0
  114. package/dist/radio/Radio.vue.d.ts +42 -0
  115. package/dist/radio/Radio.vue.d.ts.map +1 -0
  116. package/dist/radio/index.d.ts +3 -0
  117. package/dist/radio/index.d.ts.map +1 -0
  118. package/dist/radio/radio.types.d.ts +84 -0
  119. package/dist/radio/radio.types.d.ts.map +1 -0
  120. package/dist/scroll-to-top/ScrollToTop.vue.d.ts +14 -0
  121. package/dist/scroll-to-top/ScrollToTop.vue.d.ts.map +1 -0
  122. package/dist/scroll-to-top/index.d.ts +3 -0
  123. package/dist/scroll-to-top/index.d.ts.map +1 -0
  124. package/dist/scroll-to-top/scroll-to-top.types.d.ts +33 -0
  125. package/dist/scroll-to-top/scroll-to-top.types.d.ts.map +1 -0
  126. package/dist/select/Select.vue.d.ts +42 -0
  127. package/dist/select/Select.vue.d.ts.map +1 -0
  128. package/dist/select/index.d.ts +3 -0
  129. package/dist/select/index.d.ts.map +1 -0
  130. package/dist/select/select.types.d.ts +52 -0
  131. package/dist/select/select.types.d.ts.map +1 -0
  132. package/dist/skeleton/Skeleton.vue.d.ts +9 -0
  133. package/dist/skeleton/Skeleton.vue.d.ts.map +1 -0
  134. package/dist/skeleton/index.d.ts +3 -0
  135. package/dist/skeleton/index.d.ts.map +1 -0
  136. package/dist/skeleton/skeleton.types.d.ts +30 -0
  137. package/dist/skeleton/skeleton.types.d.ts.map +1 -0
  138. package/dist/spinner/Spinner.vue.d.ts +8 -0
  139. package/dist/spinner/Spinner.vue.d.ts.map +1 -0
  140. package/dist/spinner/index.d.ts +3 -0
  141. package/dist/spinner/index.d.ts.map +1 -0
  142. package/dist/spinner/spinner.types.d.ts +12 -0
  143. package/dist/spinner/spinner.types.d.ts.map +1 -0
  144. package/dist/split-button/SplitButton.vue.d.ts +25 -0
  145. package/dist/split-button/SplitButton.vue.d.ts.map +1 -0
  146. package/dist/split-button/index.d.ts +3 -0
  147. package/dist/split-button/index.d.ts.map +1 -0
  148. package/dist/split-button/split-button.types.d.ts +19 -0
  149. package/dist/split-button/split-button.types.d.ts.map +1 -0
  150. package/dist/stepper/Stepper.vue.d.ts +30 -0
  151. package/dist/stepper/Stepper.vue.d.ts.map +1 -0
  152. package/dist/stepper/index.d.ts +3 -0
  153. package/dist/stepper/index.d.ts.map +1 -0
  154. package/dist/stepper/stepper.types.d.ts +29 -0
  155. package/dist/stepper/stepper.types.d.ts.map +1 -0
  156. package/dist/switch/Switch.vue.d.ts +32 -0
  157. package/dist/switch/Switch.vue.d.ts.map +1 -0
  158. package/dist/switch/index.d.ts +3 -0
  159. package/dist/switch/index.d.ts.map +1 -0
  160. package/dist/switch/switch.types.d.ts +14 -0
  161. package/dist/switch/switch.types.d.ts.map +1 -0
  162. package/dist/tab/Tab.vue.d.ts +31 -0
  163. package/dist/tab/Tab.vue.d.ts.map +1 -0
  164. package/dist/tab/index.d.ts +3 -0
  165. package/dist/tab/index.d.ts.map +1 -0
  166. package/dist/tab/tab.types.d.ts +17 -0
  167. package/dist/tab/tab.types.d.ts.map +1 -0
  168. package/dist/table/Table.vue.d.ts +185 -0
  169. package/dist/table/Table.vue.d.ts.map +1 -0
  170. package/dist/table/index.d.ts +3 -0
  171. package/dist/table/index.d.ts.map +1 -0
  172. package/dist/table/table.types.d.ts +61 -0
  173. package/dist/table/table.types.d.ts.map +1 -0
  174. package/dist/tag/Tag.vue.d.ts +31 -0
  175. package/dist/tag/Tag.vue.d.ts.map +1 -0
  176. package/dist/tag/index.d.ts +3 -0
  177. package/dist/tag/index.d.ts.map +1 -0
  178. package/dist/tag/tag.types.d.ts +22 -0
  179. package/dist/tag/tag.types.d.ts.map +1 -0
  180. package/dist/textarea/Textarea.vue.d.ts +35 -0
  181. package/dist/textarea/Textarea.vue.d.ts.map +1 -0
  182. package/dist/textarea/index.d.ts +3 -0
  183. package/dist/textarea/index.d.ts.map +1 -0
  184. package/dist/textarea/textarea.types.d.ts +37 -0
  185. package/dist/textarea/textarea.types.d.ts.map +1 -0
  186. package/dist/tooltip/Tooltip.vue.d.ts +33 -0
  187. package/dist/tooltip/Tooltip.vue.d.ts.map +1 -0
  188. package/dist/tooltip/index.d.ts +3 -0
  189. package/dist/tooltip/index.d.ts.map +1 -0
  190. package/dist/tooltip/tooltip.types.d.ts +17 -0
  191. package/dist/tooltip/tooltip.types.d.ts.map +1 -0
  192. package/dist/utils/loadBaklavaResources.d.ts +2 -0
  193. package/dist/utils/loadBaklavaResources.d.ts.map +1 -0
  194. package/package.json +18 -2
  195. package/.releaserc.json +0 -14
  196. package/CHANGELOG.md +0 -88
  197. package/env.d.ts +0 -5
  198. package/index.ts +0 -1
  199. package/src/accordion/Accordion.spec.ts +0 -75
  200. package/src/accordion/Accordion.vue +0 -206
  201. package/src/accordion/accordion.types.ts +0 -109
  202. package/src/accordion/index.ts +0 -3
  203. package/src/alert/Alert.spec.ts +0 -38
  204. package/src/alert/Alert.vue +0 -199
  205. package/src/alert/alert.types.ts +0 -58
  206. package/src/alert/index.ts +0 -2
  207. package/src/badge/Badge.spec.ts +0 -28
  208. package/src/badge/Badge.vue +0 -20
  209. package/src/badge/badge.types.ts +0 -7
  210. package/src/badge/index.ts +0 -2
  211. package/src/banner/Banner.spec.ts +0 -111
  212. package/src/banner/Banner.vue +0 -265
  213. package/src/banner/banner.types.ts +0 -86
  214. package/src/banner/index.ts +0 -2
  215. package/src/button/Button.spec.ts +0 -51
  216. package/src/button/Button.vue +0 -45
  217. package/src/button/button.types.ts +0 -30
  218. package/src/button/index.ts +0 -3
  219. package/src/checkbox/Checkbox.spec.ts +0 -216
  220. package/src/checkbox/Checkbox.vue +0 -148
  221. package/src/checkbox/checkbox.types.ts +0 -108
  222. package/src/checkbox/index.ts +0 -2
  223. package/src/chip/Chip.spec.ts +0 -49
  224. package/src/chip/Chip.vue +0 -237
  225. package/src/chip/chip.types.ts +0 -77
  226. package/src/chip/index.ts +0 -2
  227. package/src/datepicker/Datepicker.spec.ts +0 -129
  228. package/src/datepicker/Datepicker.vue +0 -172
  229. package/src/datepicker/datepicker.types.ts +0 -39
  230. package/src/datepicker/index.ts +0 -2
  231. package/src/dialog/Dialog.spec.ts +0 -111
  232. package/src/dialog/Dialog.vue +0 -178
  233. package/src/dialog/dialog.types.ts +0 -17
  234. package/src/dialog/index.ts +0 -2
  235. package/src/drawer/Drawer.spec.ts +0 -102
  236. package/src/drawer/Drawer.vue +0 -162
  237. package/src/drawer/drawer.types.ts +0 -17
  238. package/src/drawer/index.ts +0 -2
  239. package/src/dropdown/Dropdown.spec.ts +0 -207
  240. package/src/dropdown/Dropdown.vue +0 -231
  241. package/src/dropdown/dropdown.types.ts +0 -110
  242. package/src/dropdown/index.ts +0 -2
  243. package/src/file-upload/FileUpload.spec.ts +0 -359
  244. package/src/file-upload/FileUpload.vue +0 -440
  245. package/src/file-upload/file-upload.types.ts +0 -89
  246. package/src/file-upload/index.ts +0 -7
  247. package/src/icon/Icon.spec.ts +0 -40
  248. package/src/icon/Icon.vue +0 -102
  249. package/src/icon/icon.types.ts +0 -25
  250. package/src/icon/index.ts +0 -2
  251. package/src/image/Image.spec.ts +0 -23
  252. package/src/image/Image.vue +0 -144
  253. package/src/image/image.types.ts +0 -57
  254. package/src/image/index.ts +0 -3
  255. package/src/index.ts +0 -43
  256. package/src/input/Input.spec.ts +0 -69
  257. package/src/input/Input.vue +0 -148
  258. package/src/input/index.ts +0 -3
  259. package/src/input/input.types.ts +0 -156
  260. package/src/link/Link.spec.ts +0 -69
  261. package/src/link/Link.vue +0 -133
  262. package/src/link/index.ts +0 -2
  263. package/src/link/link.types.ts +0 -42
  264. package/src/notification/Notification.spec.ts +0 -18
  265. package/src/notification/Notification.vue +0 -57
  266. package/src/notification/index.ts +0 -2
  267. package/src/notification/notification.types.ts +0 -25
  268. package/src/pagination/Pagination.spec.ts +0 -39
  269. package/src/pagination/Pagination.vue +0 -137
  270. package/src/pagination/index.ts +0 -2
  271. package/src/pagination/pagination.types.ts +0 -61
  272. package/src/radio/Radio.spec.ts +0 -149
  273. package/src/radio/Radio.vue +0 -205
  274. package/src/radio/index.ts +0 -2
  275. package/src/radio/radio.types.ts +0 -95
  276. package/src/scroll-to-top/ScrollToTop.spec.ts +0 -119
  277. package/src/scroll-to-top/ScrollToTop.vue +0 -130
  278. package/src/scroll-to-top/index.ts +0 -2
  279. package/src/scroll-to-top/scroll-to-top.types.ts +0 -42
  280. package/src/select/Select.spec.ts +0 -47
  281. package/src/select/Select.vue +0 -147
  282. package/src/select/index.ts +0 -2
  283. package/src/select/select.types.ts +0 -53
  284. package/src/skeleton/Skeleton.spec.ts +0 -28
  285. package/src/skeleton/Skeleton.vue +0 -115
  286. package/src/skeleton/index.ts +0 -2
  287. package/src/skeleton/skeleton.types.ts +0 -33
  288. package/src/spinner/Spinner.spec.ts +0 -28
  289. package/src/spinner/Spinner.vue +0 -49
  290. package/src/spinner/index.ts +0 -2
  291. package/src/spinner/spinner.types.ts +0 -11
  292. package/src/split-button/SplitButton.spec.ts +0 -24
  293. package/src/split-button/SplitButton.vue +0 -73
  294. package/src/split-button/index.ts +0 -2
  295. package/src/split-button/split-button.types.ts +0 -19
  296. package/src/stepper/Stepper.spec.ts +0 -37
  297. package/src/stepper/Stepper.vue +0 -100
  298. package/src/stepper/index.ts +0 -2
  299. package/src/stepper/stepper.types.ts +0 -29
  300. package/src/switch/Switch.spec.ts +0 -30
  301. package/src/switch/Switch.vue +0 -80
  302. package/src/switch/index.ts +0 -2
  303. package/src/switch/switch.types.ts +0 -13
  304. package/src/tab/Tab.spec.ts +0 -87
  305. package/src/tab/Tab.vue +0 -99
  306. package/src/tab/index.ts +0 -2
  307. package/src/tab/tab.types.ts +0 -17
  308. package/src/table/Table.spec.ts +0 -185
  309. package/src/table/Table.vue +0 -264
  310. package/src/table/index.ts +0 -7
  311. package/src/table/table.types.ts +0 -62
  312. package/src/tag/Tag.spec.ts +0 -84
  313. package/src/tag/Tag.vue +0 -83
  314. package/src/tag/index.ts +0 -2
  315. package/src/tag/tag.types.ts +0 -24
  316. package/src/textarea/Textarea.spec.ts +0 -105
  317. package/src/textarea/Textarea.vue +0 -84
  318. package/src/textarea/index.ts +0 -2
  319. package/src/textarea/textarea.types.ts +0 -37
  320. package/src/tooltip/Tooltip.spec.ts +0 -46
  321. package/src/tooltip/Tooltip.vue +0 -81
  322. package/src/tooltip/index.ts +0 -3
  323. package/src/tooltip/tooltip.types.ts +0 -29
  324. package/src/utils/loadBaklavaResources.ts +0 -24
  325. package/tests/setup.ts +0 -352
  326. package/tsconfig.json +0 -29
  327. package/vitest.config.ts +0 -32
@@ -1,148 +0,0 @@
1
- <script setup lang="ts">
2
- /**
3
- * Checkbox Component
4
- *
5
- * A Vue UI kit component for Baklava's `bl-checkbox` and `bl-checkbox-group` web components.
6
- * Can be used as either a single checkbox or as a group container for multiple checkboxes.
7
- *
8
- * @component
9
- * @example
10
- * ```vue
11
- * <!-- Single checkbox -->
12
- * <template>
13
- * <BvCheckbox v-model="checked" label="I agree" />
14
- * </template>
15
- * ```
16
- *
17
- * @example
18
- * ```vue
19
- * <!-- Checkbox group -->
20
- * <template>
21
- * <BvCheckbox v-model="selected" :items="items">
22
- * <template #item="{ item }">{{ item.label }}</template>
23
- * </BvCheckbox>
24
- * </template>
25
- * ```
26
- */
27
- import { computed, onMounted } from "vue";
28
- import { loadBaklavaResources } from "../utils/loadBaklavaResources";
29
- import type { CheckboxProps } from "./checkbox.types";
30
-
31
- const props = withDefaults(defineProps<CheckboxProps>(), {
32
- modelValue: undefined,
33
- disabled: undefined,
34
- indeterminate: undefined,
35
- value: undefined,
36
- name: undefined,
37
- label: undefined,
38
- items: undefined,
39
- });
40
-
41
- const emit = defineEmits<{
42
- "update:modelValue": [value: boolean | (string | number)[]];
43
- change: [event: CustomEvent];
44
- input: [event: CustomEvent];
45
- }>();
46
-
47
- /**
48
- * Determines if the component should act as a group container.
49
- * When `items` prop is provided and is an array, it acts as a group.
50
- */
51
- const isGroupMode = computed(
52
- () => props.items !== undefined && Array.isArray(props.items),
53
- );
54
-
55
- /**
56
- * Normalized model value for group mode (always array).
57
- */
58
- const groupValue = computed(() => {
59
- const val = props.modelValue;
60
- if (Array.isArray(val)) return val;
61
- return [];
62
- });
63
-
64
- /**
65
- * Check if an item is selected in group mode.
66
- */
67
- const isItemChecked = (item: { value: string | number }) => {
68
- return groupValue.value.includes(item.value);
69
- };
70
-
71
- /**
72
- * Handles the change event from the single checkbox.
73
- */
74
- const handleSingleChange = (event: CustomEvent) => {
75
- const checked = (event.target as HTMLInputElement & { checked?: boolean })
76
- ?.checked;
77
- emit("change", event);
78
- emit("update:modelValue", checked ?? false);
79
- };
80
-
81
- /**
82
- * Handles the change event from the checkbox group.
83
- * Normalizes value to array (Baklava may emit array or comma-separated string).
84
- */
85
- const handleGroupChange = (event: CustomEvent) => {
86
- emit("change", event);
87
- const target = event.target as { value?: unknown };
88
- let newValue: (string | number)[];
89
- if (Array.isArray(target?.value)) {
90
- newValue = target.value as (string | number)[];
91
- } else if (typeof target?.value === "string") {
92
- newValue = target.value ? target.value.split(",").map((s) => s.trim()) : [];
93
- } else {
94
- newValue = [];
95
- }
96
- emit("update:modelValue", newValue);
97
- };
98
-
99
- onMounted(() => {
100
- loadBaklavaResources();
101
- });
102
- </script>
103
-
104
- <template>
105
- <!-- Group mode: render as bl-checkbox-group -->
106
- <bl-checkbox-group
107
- v-if="isGroupMode"
108
- :value="groupValue"
109
- @bl-checkbox-group-change="handleGroupChange"
110
- >
111
- <bl-checkbox
112
- v-for="(item, index) in props.items"
113
- :key="String(item.value)"
114
- v-bind="{
115
- value: item.value,
116
- checked: isItemChecked(item),
117
- disabled: item.disabled === true ? true : undefined,
118
- indeterminate: item.indeterminate === true ? true : undefined,
119
- name: item.name,
120
- }"
121
- >
122
- <slot name="item" :item="item" :index="index">
123
- {{ item.label }}
124
- </slot>
125
- </bl-checkbox>
126
- </bl-checkbox-group>
127
-
128
- <!-- Single checkbox mode: render as bl-checkbox -->
129
- <bl-checkbox
130
- v-else
131
- v-bind="{
132
- checked:
133
- props.modelValue === true
134
- ? true
135
- : props.modelValue === false
136
- ? false
137
- : undefined,
138
- disabled: props.disabled === true ? true : undefined,
139
- indeterminate: props.indeterminate === true ? true : undefined,
140
- value: props.value,
141
- name: props.name,
142
- }"
143
- @bl-change="handleSingleChange"
144
- @bl-input="emit('input', $event)"
145
- >
146
- <slot>{{ label }}</slot>
147
- </bl-checkbox>
148
- </template>
@@ -1,108 +0,0 @@
1
- /**
2
- * Properties for a single checkbox item when used in group mode.
3
- *
4
- * @interface CheckboxItem
5
- */
6
- export interface CheckboxItem {
7
- /**
8
- * The value of the checkbox (used for v-model in group mode).
9
- */
10
- value: string | number;
11
-
12
- /**
13
- * The label text displayed next to the checkbox.
14
- */
15
- label?: string;
16
-
17
- /**
18
- * Whether the checkbox is checked.
19
- *
20
- * @default false
21
- */
22
- checked?: boolean;
23
-
24
- /**
25
- * Whether the checkbox is disabled.
26
- *
27
- * @default false
28
- */
29
- disabled?: boolean;
30
-
31
- /**
32
- * Whether the checkbox is in indeterminate state.
33
- *
34
- * @default false
35
- */
36
- indeterminate?: boolean;
37
-
38
- /**
39
- * The name attribute for the checkbox.
40
- */
41
- name?: string;
42
-
43
- /**
44
- * Additional custom data for use in the #item scoped slot.
45
- */
46
- [key: string]: unknown;
47
- }
48
-
49
- /**
50
- * Props for the Checkbox component.
51
- *
52
- * When `items` prop is provided, the component acts as a checkbox group container.
53
- * Otherwise, it acts as a single checkbox.
54
- *
55
- * @interface CheckboxProps
56
- */
57
- export interface CheckboxProps {
58
- /**
59
- * Checked state (single mode) or selected values array (group mode).
60
- * Use v-model for two-way binding.
61
- * - Single mode: boolean
62
- * - Group mode: (string | number)[]
63
- */
64
- modelValue?: boolean | (string | number)[];
65
-
66
- /**
67
- * Whether the checkbox is disabled.
68
- * Only used when component is in single checkbox mode.
69
- *
70
- * @default false
71
- */
72
- disabled?: boolean;
73
-
74
- /**
75
- * Whether the checkbox is in indeterminate state.
76
- * Only used when component is in single checkbox mode.
77
- *
78
- * @default false
79
- */
80
- indeterminate?: boolean;
81
-
82
- /**
83
- * The value of the checkbox (for form submission).
84
- * Only used when component is in single checkbox mode.
85
- */
86
- value?: string | number;
87
-
88
- /**
89
- * The name attribute for the checkbox.
90
- * Only used when component is in single checkbox mode.
91
- */
92
- name?: string;
93
-
94
- /**
95
- * The label text displayed next to the checkbox.
96
- * Only used when component is in single checkbox mode.
97
- * Can be overridden by default slot content.
98
- */
99
- label?: string;
100
-
101
- /**
102
- * Array of checkbox items to render when in group mode.
103
- * Each item will be rendered as a bl-checkbox element inside bl-checkbox-group.
104
- * Only used when component is in group mode.
105
- */
106
- items?: CheckboxItem[];
107
-
108
- }
@@ -1,2 +0,0 @@
1
- export { default as BvCheckbox } from "./Checkbox.vue";
2
- export type { CheckboxProps, CheckboxItem } from "./checkbox.types";
@@ -1,49 +0,0 @@
1
- import { mount } from "@vue/test-utils";
2
- import { describe, expect, it } from "vitest";
3
- import BvChip from "./Chip.vue";
4
-
5
- describe("BvChip", () => {
6
- it("renders in default mode with slot", () => {
7
- const wrapper = mount(BvChip, {
8
- slots: {
9
- default: "Child content",
10
- },
11
- });
12
- expect(wrapper.find(".bv-chip").exists()).toBe(true);
13
- expect(wrapper.text()).toContain("Child content");
14
- });
15
-
16
- it("renders in standalone mode", () => {
17
- const wrapper = mount(BvChip, {
18
- props: { standalone: true, text: "5" },
19
- });
20
- expect(wrapper.find(".bv-chip--standalone").exists()).toBe(true);
21
- expect(wrapper.text()).toContain("5");
22
- });
23
-
24
- it("applies color and position styles", () => {
25
- const wrapper = mount(BvChip, {
26
- props: { text: "1", color: "success", position: "top-left" },
27
- });
28
- const badge = wrapper.find(".bv-chip__badge").element;
29
- expect(badge.className).toContain("bv-chip__badge--top-left");
30
- expect(badge.getAttribute("style")).toContain("bl-color-success");
31
- });
32
-
33
- it("renders slot content over text prop", () => {
34
- const wrapper = mount(BvChip, {
35
- props: { text: "fallback" },
36
- slots: {
37
- content: "Custom content",
38
- },
39
- });
40
- expect(wrapper.text()).toContain("Custom content");
41
- });
42
-
43
- it("hides badge when show is false", () => {
44
- const wrapper = mount(BvChip, {
45
- props: { text: "1", show: false },
46
- });
47
- expect(wrapper.find(".bv-chip__badge").exists()).toBe(false);
48
- });
49
- });
package/src/chip/Chip.vue DELETED
@@ -1,237 +0,0 @@
1
- <script setup lang="ts">
2
- /**
3
- * Chip Component
4
- *
5
- * A wrapper that displays a badge/indicator (text or number) positioned on top of another element.
6
- * Similar to Nuxt UI's UChip. Used for notification counts, status indicators, and standalone badges.
7
- *
8
- * @component
9
- * @example
10
- * ```vue
11
- * <template>
12
- * <BvChip :text="5">
13
- * <BvButton icon="mail" />
14
- * </BvChip>
15
- * </template>
16
- * ```
17
- */
18
- import { computed, onMounted } from "vue";
19
- import { loadBaklavaResources } from "../utils/loadBaklavaResources";
20
- import type { ChipProps } from "./chip.types";
21
-
22
- const props = withDefaults(defineProps<ChipProps>(), {
23
- text: undefined,
24
- color: "primary",
25
- size: "md",
26
- position: "top-right",
27
- inset: false,
28
- standalone: false,
29
- show: true,
30
- });
31
-
32
- const colorStyles = computed(() => {
33
- const colorMap: Record<string, { backgroundColor: string; color: string }> = {
34
- primary: {
35
- backgroundColor: "var(--bl-color-primary)",
36
- color: "var(--bl-color-primary-contrast, #fff)",
37
- },
38
- success: {
39
- backgroundColor: "var(--bl-color-success)",
40
- color: "var(--bl-color-success-contrast, #fff)",
41
- },
42
- danger: {
43
- backgroundColor: "var(--bl-color-danger)",
44
- color: "var(--bl-color-danger-contrast, #fff)",
45
- },
46
- warning: {
47
- backgroundColor: "var(--bl-color-warning)",
48
- color: "var(--bl-color-warning-contrast, #fff)",
49
- },
50
- info: {
51
- backgroundColor: "var(--bl-color-info)",
52
- color: "var(--bl-color-info-contrast, #fff)",
53
- },
54
- neutral: {
55
- backgroundColor: "var(--bl-color-neutral-darkest)",
56
- color: "var(--bl-color-neutral-full, #fff)",
57
- },
58
- };
59
- return colorMap[props.color] ?? colorMap["primary"];
60
- });
61
-
62
- const sizeClass = computed(() => `bv-chip__badge--${props.size}`);
63
-
64
- onMounted(() => {
65
- loadBaklavaResources();
66
- });
67
- </script>
68
-
69
- <template>
70
- <template v-if="standalone">
71
- <span
72
- v-if="show"
73
- class="bv-chip bv-chip--standalone"
74
- :class="sizeClass"
75
- :style="colorStyles"
76
- >
77
- <slot name="content">
78
- {{ text }}
79
- </slot>
80
- </span>
81
- </template>
82
- <div v-else class="bv-chip" :class="{ 'bv-chip--has-content': $slots['default'] }">
83
- <slot />
84
- <span
85
- v-if="show"
86
- class="bv-chip__badge"
87
- :class="[sizeClass, `bv-chip__badge--${position}`, { 'bv-chip__badge--inset': inset }]"
88
- :style="colorStyles"
89
- >
90
- <slot name="content">
91
- {{ text }}
92
- </slot>
93
- </span>
94
- </div>
95
- </template>
96
-
97
- <style scoped>
98
- .bv-chip {
99
- position: relative;
100
- display: inline-flex;
101
- }
102
-
103
- .bv-chip--standalone {
104
- display: inline-flex;
105
- align-items: center;
106
- justify-content: center;
107
- border-radius: 9999px;
108
- font-weight: 600;
109
- white-space: nowrap;
110
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
111
- }
112
-
113
- .bv-chip--has-content .bv-chip__badge {
114
- position: absolute;
115
- }
116
-
117
- .bv-chip__badge {
118
- display: inline-flex;
119
- align-items: center;
120
- justify-content: center;
121
- min-width: 1.25em;
122
- border-radius: 9999px;
123
- font-weight: 600;
124
- white-space: nowrap;
125
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
126
- }
127
-
128
- /* Position: top-right (default) */
129
- .bv-chip__badge--top-right {
130
- top: 0;
131
- right: 0;
132
- transform: translate(50%, -50%);
133
- }
134
-
135
- .bv-chip__badge--top-right.bv-chip__badge--inset {
136
- top: 2px;
137
- right: 2px;
138
- transform: translate(50%, -50%);
139
- }
140
-
141
- /* Position: bottom-right */
142
- .bv-chip__badge--bottom-right {
143
- top: 100%;
144
- right: 0;
145
- transform: translate(50%, 50%);
146
- }
147
-
148
- .bv-chip__badge--bottom-right.bv-chip__badge--inset {
149
- top: calc(100% - 2px);
150
- right: 2px;
151
- transform: translate(50%, 50%);
152
- }
153
-
154
- /* Position: top-left */
155
- .bv-chip__badge--top-left {
156
- top: 0;
157
- left: 0;
158
- transform: translate(-50%, -50%);
159
- }
160
-
161
- .bv-chip__badge--top-left.bv-chip__badge--inset {
162
- top: 2px;
163
- left: 2px;
164
- transform: translate(-50%, -50%);
165
- }
166
-
167
- /* Position: bottom-left */
168
- .bv-chip__badge--bottom-left {
169
- top: 100%;
170
- left: 0;
171
- transform: translate(-50%, 50%);
172
- }
173
-
174
- .bv-chip__badge--bottom-left.bv-chip__badge--inset {
175
- top: calc(100% - 2px);
176
- left: 2px;
177
- transform: translate(-50%, 50%);
178
- }
179
-
180
- /* Size variants */
181
- .bv-chip__badge--xs {
182
- font-size: 0.625rem;
183
- padding: 0 0.25rem;
184
- min-width: 1em;
185
- height: 1em;
186
- }
187
-
188
- .bv-chip__badge--sm {
189
- font-size: 0.6875rem;
190
- padding: 0 0.3125rem;
191
- min-width: 1.125em;
192
- height: 1.125em;
193
- }
194
-
195
- .bv-chip__badge--md {
196
- font-size: 0.75rem;
197
- padding: 0 0.375rem;
198
- min-width: 1.25em;
199
- height: 1.25em;
200
- }
201
-
202
- .bv-chip__badge--lg {
203
- font-size: 0.875rem;
204
- padding: 0 0.5rem;
205
- min-width: 1.5em;
206
- height: 1.5em;
207
- }
208
-
209
- /* Standalone size classes */
210
- .bv-chip--standalone.bv-chip__badge--xs {
211
- font-size: 0.625rem;
212
- padding: 0 0.25rem;
213
- min-width: 1em;
214
- height: 1em;
215
- }
216
-
217
- .bv-chip--standalone.bv-chip__badge--sm {
218
- font-size: 0.6875rem;
219
- padding: 0 0.3125rem;
220
- min-width: 1.125em;
221
- height: 1.125em;
222
- }
223
-
224
- .bv-chip--standalone.bv-chip__badge--md {
225
- font-size: 0.75rem;
226
- padding: 0 0.375rem;
227
- min-width: 1.25em;
228
- height: 1.25em;
229
- }
230
-
231
- .bv-chip--standalone.bv-chip__badge--lg {
232
- font-size: 0.875rem;
233
- padding: 0 0.5rem;
234
- min-width: 1.5em;
235
- height: 1.5em;
236
- }
237
- </style>
@@ -1,77 +0,0 @@
1
- /**
2
- * Chip color variant.
3
- */
4
- export type ChipColor =
5
- | "primary"
6
- | "success"
7
- | "danger"
8
- | "warning"
9
- | "info"
10
- | "neutral";
11
-
12
- /**
13
- * Chip size variant.
14
- */
15
- export type ChipSize = "xs" | "sm" | "md" | "lg";
16
-
17
- /**
18
- * Chip position relative to wrapped element.
19
- */
20
- export type ChipPosition =
21
- | "top-right"
22
- | "bottom-right"
23
- | "top-left"
24
- | "bottom-left";
25
-
26
- /**
27
- * Props for the Chip component.
28
- */
29
- export interface ChipProps {
30
- /**
31
- * Display text or number inside the chip.
32
- */
33
- text?: string | number;
34
-
35
- /**
36
- * Color variant.
37
- *
38
- * @default "primary"
39
- */
40
- color?: ChipColor;
41
-
42
- /**
43
- * Size variant.
44
- *
45
- * @default "md"
46
- */
47
- size?: ChipSize;
48
-
49
- /**
50
- * Position of the chip relative to the wrapped element.
51
- *
52
- * @default "top-right"
53
- */
54
- position?: ChipPosition;
55
-
56
- /**
57
- * When true, keep the chip inside the component for rounded elements (e.g. avatar).
58
- *
59
- * @default false
60
- */
61
- inset?: boolean;
62
-
63
- /**
64
- * When true, render the chip inline without wrapping content.
65
- * Use with inset for standalone badges.
66
- *
67
- * @default false
68
- */
69
- standalone?: boolean;
70
-
71
- /**
72
- * When false, hide the chip.
73
- *
74
- * @default true
75
- */
76
- show?: boolean;
77
- }
package/src/chip/index.ts DELETED
@@ -1,2 +0,0 @@
1
- export { default as BvChip } from "./Chip.vue";
2
- export type { ChipProps, ChipColor, ChipSize, ChipPosition } from "./chip.types";