@baklavue/ui 1.0.0-preview.4 → 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 (287) 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 +28 -4
  195. package/.releaserc.json +0 -14
  196. package/CHANGELOG.md +0 -56
  197. package/index.ts +0 -1
  198. package/src/accordion/Accordion.vue +0 -206
  199. package/src/accordion/accordion.types.ts +0 -109
  200. package/src/accordion/index.ts +0 -3
  201. package/src/alert/Alert.vue +0 -199
  202. package/src/alert/alert.types.ts +0 -58
  203. package/src/alert/index.ts +0 -2
  204. package/src/badge/Badge.vue +0 -20
  205. package/src/badge/badge.types.ts +0 -7
  206. package/src/badge/index.ts +0 -2
  207. package/src/button/Button.vue +0 -45
  208. package/src/button/button.types.ts +0 -30
  209. package/src/button/index.ts +0 -3
  210. package/src/checkbox/Checkbox.vue +0 -148
  211. package/src/checkbox/checkbox.types.ts +0 -108
  212. package/src/checkbox/index.ts +0 -2
  213. package/src/datepicker/Datepicker.vue +0 -172
  214. package/src/datepicker/datepicker.types.ts +0 -39
  215. package/src/datepicker/index.ts +0 -2
  216. package/src/dialog/Dialog.vue +0 -178
  217. package/src/dialog/dialog.types.ts +0 -17
  218. package/src/dialog/index.ts +0 -2
  219. package/src/drawer/Drawer.vue +0 -162
  220. package/src/drawer/drawer.types.ts +0 -17
  221. package/src/drawer/index.ts +0 -2
  222. package/src/dropdown/Dropdown.vue +0 -231
  223. package/src/dropdown/dropdown.types.ts +0 -110
  224. package/src/dropdown/index.ts +0 -2
  225. package/src/file-upload/FileUpload.vue +0 -440
  226. package/src/file-upload/file-upload.types.ts +0 -89
  227. package/src/file-upload/index.ts +0 -7
  228. package/src/icon/Icon.vue +0 -102
  229. package/src/icon/icon.types.ts +0 -25
  230. package/src/icon/index.ts +0 -2
  231. package/src/image/Image.vue +0 -144
  232. package/src/image/image.types.ts +0 -57
  233. package/src/image/index.ts +0 -3
  234. package/src/index.ts +0 -41
  235. package/src/input/Input.vue +0 -148
  236. package/src/input/index.ts +0 -3
  237. package/src/input/input.types.ts +0 -156
  238. package/src/link/Link.vue +0 -133
  239. package/src/link/index.ts +0 -2
  240. package/src/link/link.types.ts +0 -42
  241. package/src/notification/Notification.vue +0 -57
  242. package/src/notification/index.ts +0 -2
  243. package/src/notification/notification.types.ts +0 -25
  244. package/src/pagination/Pagination.vue +0 -137
  245. package/src/pagination/index.ts +0 -2
  246. package/src/pagination/pagination.types.ts +0 -61
  247. package/src/radio/Radio.vue +0 -205
  248. package/src/radio/index.ts +0 -2
  249. package/src/radio/radio.types.ts +0 -95
  250. package/src/scroll-to-top/ScrollToTop.vue +0 -130
  251. package/src/scroll-to-top/index.ts +0 -2
  252. package/src/scroll-to-top/scroll-to-top.types.ts +0 -42
  253. package/src/select/Select.vue +0 -147
  254. package/src/select/index.ts +0 -2
  255. package/src/select/select.types.ts +0 -53
  256. package/src/skeleton/Skeleton.vue +0 -115
  257. package/src/skeleton/index.ts +0 -2
  258. package/src/skeleton/skeleton.types.ts +0 -33
  259. package/src/spinner/Spinner.vue +0 -49
  260. package/src/spinner/index.ts +0 -2
  261. package/src/spinner/spinner.types.ts +0 -11
  262. package/src/split-button/SplitButton.vue +0 -73
  263. package/src/split-button/index.ts +0 -2
  264. package/src/split-button/split-button.types.ts +0 -19
  265. package/src/stepper/Stepper.vue +0 -100
  266. package/src/stepper/index.ts +0 -2
  267. package/src/stepper/stepper.types.ts +0 -29
  268. package/src/switch/Switch.vue +0 -80
  269. package/src/switch/index.ts +0 -2
  270. package/src/switch/switch.types.ts +0 -13
  271. package/src/tab/Tab.vue +0 -99
  272. package/src/tab/index.ts +0 -2
  273. package/src/tab/tab.types.ts +0 -17
  274. package/src/table/Table.vue +0 -264
  275. package/src/table/index.ts +0 -7
  276. package/src/table/table.types.ts +0 -62
  277. package/src/tag/Tag.vue +0 -83
  278. package/src/tag/index.ts +0 -2
  279. package/src/tag/tag.types.ts +0 -24
  280. package/src/textarea/Textarea.vue +0 -84
  281. package/src/textarea/index.ts +0 -2
  282. package/src/textarea/textarea.types.ts +0 -37
  283. package/src/tooltip/Tooltip.vue +0 -81
  284. package/src/tooltip/index.ts +0 -3
  285. package/src/tooltip/tooltip.types.ts +0 -29
  286. package/src/utils/loadBaklavaResources.ts +0 -24
  287. package/tsconfig.json +0 -28
@@ -1,100 +0,0 @@
1
- <script setup lang="ts">
2
- /**
3
- * Stepper Component
4
- *
5
- * A Vue UI kit component for Baklava's `bl-stepper` web component for step indicators.
6
- * Displays progress through a sequence of steps. Use the `steps` prop for declarative
7
- * configuration or the default slot for custom step content.
8
- *
9
- * @component
10
- * @example
11
- * ```vue
12
- * <template>
13
- * <BvStepper v-model:current-step="currentStep" :steps="steps" />
14
- * </template>
15
- * ```
16
- *
17
- * @example
18
- * ```vue
19
- * <template>
20
- * <BvStepper :steps="['Step 1', 'Step 2', 'Step 3']" />
21
- * </template>
22
- * ```
23
- */
24
- import { onMounted } from "vue";
25
- import { loadBaklavaResources } from "../utils/loadBaklavaResources";
26
- import type { StepperProps, StepperStep } from "./stepper.types";
27
-
28
- /**
29
- * Component props with default values.
30
- */
31
- const props = withDefaults(defineProps<StepperProps>(), {
32
- currentStep: undefined,
33
- steps: undefined,
34
- orientation: undefined,
35
- showLabels: undefined,
36
- });
37
-
38
- /**
39
- * Component events.
40
- */
41
- const emit = defineEmits<{
42
- /**
43
- * Emitted when the current step changes (for v-model:currentStep).
44
- *
45
- * @param {number} step - The new current step index.
46
- */
47
- "update:currentStep": [step: number];
48
- /**
49
- * Emitted when the user selects a different step.
50
- *
51
- * @param {CustomEvent} event - The native bl-stepper-change event from bl-stepper.
52
- */
53
- "step-change": [event: CustomEvent];
54
- }>();
55
-
56
- /**
57
- * Returns the variant for a step based on its index and the current step.
58
- */
59
- const getStepVariant = (index: number): "default" | "active" | "success" | "error" => {
60
- const current = props.currentStep ?? 0;
61
- const step = props.steps?.[index];
62
- if (step?.error) return "error";
63
- if (index < current) return "success";
64
- if (index === current) return "active";
65
- return "default";
66
- };
67
-
68
- /**
69
- * Handles the bl-stepper-change event from the underlying web component.
70
- */
71
- const handleStepChange = (event: CustomEvent<{ activeStep: number; totalSteps: number }>) => {
72
- emit("step-change", event);
73
- const step = event.detail?.activeStep;
74
- if (step !== undefined) emit("update:currentStep", step);
75
- };
76
-
77
- onMounted(() => {
78
- loadBaklavaResources();
79
- });
80
- </script>
81
-
82
- <template>
83
- <bl-stepper
84
- :direction="orientation ?? 'horizontal'"
85
- @bl-stepper-change="handleStepChange"
86
- >
87
- <template v-if="steps">
88
- <bl-stepper-item
89
- v-for="(step, index) in steps"
90
- :key="index"
91
- :id="`step-${index}`"
92
- :title="showLabels !== false ? step.label : ''"
93
- :description="showLabels !== false && step.description ? step.description : ''"
94
- :variant="getStepVariant(index)"
95
- :disabled="step.disabled"
96
- />
97
- </template>
98
- <slot />
99
- </bl-stepper>
100
- </template>
@@ -1,2 +0,0 @@
1
- export { default as BvStepper } from "./Stepper.vue";
2
- export type { StepperProps, StepperStep } from "./stepper.types";
@@ -1,29 +0,0 @@
1
- /**
2
- * Configuration for a single step in the stepper.
3
- */
4
- export interface StepperStep {
5
- /** Step label */
6
- label: string;
7
- /** Optional step description */
8
- description?: string;
9
- /** Whether the step is completed */
10
- completed?: boolean;
11
- /** Whether the step has an error state */
12
- error?: boolean;
13
- /** Whether the step is disabled */
14
- disabled?: boolean;
15
- }
16
-
17
- /**
18
- * Props for the Stepper component.
19
- */
20
- export interface StepperProps {
21
- /** Current step index (0-based). Use with v-model:currentStep */
22
- currentStep?: number;
23
- /** Array of step configurations */
24
- steps?: StepperStep[];
25
- /** Layout direction (horizontal, vertical) */
26
- orientation?: string;
27
- /** Whether to show step labels */
28
- showLabels?: boolean;
29
- }
@@ -1,80 +0,0 @@
1
- <script setup lang="ts">
2
- /**
3
- * Switch Component
4
- *
5
- * A Vue UI kit component for Baklava's `bl-switch` web component with v-model support.
6
- * A toggle switch for boolean states. Supports v-model:checked for two-way binding.
7
- *
8
- * @component
9
- * @example
10
- * ```vue
11
- * <template>
12
- * <BvSwitch v-model:checked="enabled" label="Enable notifications" />
13
- * </template>
14
- * ```
15
- *
16
- * @example
17
- * ```vue
18
- * <template>
19
- * <BvSwitch :checked="isOn" @change="handleChange" />
20
- * </template>
21
- * ```
22
- */
23
- import { onMounted } from "vue";
24
- import { loadBaklavaResources } from "../utils/loadBaklavaResources";
25
- import type { SwitchProps } from "./switch.types";
26
-
27
- /**
28
- * Component props with default values.
29
- */
30
- const props = withDefaults(defineProps<SwitchProps>(), {
31
- checked: undefined,
32
- disabled: undefined,
33
- label: undefined,
34
- size: undefined,
35
- });
36
-
37
- /**
38
- * Component events.
39
- */
40
- const emit = defineEmits<{
41
- /**
42
- * Emitted when the checked state changes (for v-model:checked).
43
- *
44
- * @param {boolean} checked - The new checked state.
45
- */
46
- "update:checked": [checked: boolean];
47
- /**
48
- * Emitted when the user toggles the switch.
49
- *
50
- * @param {CustomEvent} event - The native change event from bl-switch.
51
- */
52
- change: [event: CustomEvent];
53
- /**
54
- * Emitted on user input (mirrors native input event).
55
- *
56
- * @param {CustomEvent} event - The native input event from bl-switch.
57
- */
58
- input: [event: CustomEvent];
59
- }>();
60
-
61
- onMounted(() => {
62
- loadBaklavaResources();
63
- });
64
- </script>
65
-
66
- <template>
67
- <bl-switch
68
- v-bind="{
69
- ...props,
70
- checked: props.checked === true ? true : props.checked === false ? false : undefined,
71
- disabled: props.disabled === true ? true : undefined,
72
- }"
73
- @bl-switch-toggle="
74
- emit('change', $event);
75
- emit('update:checked', $event.detail);
76
- "
77
- >
78
- <slot>{{ label }}</slot>
79
- </bl-switch>
80
- </template>
@@ -1,2 +0,0 @@
1
- export { default as BvSwitch } from "./Switch.vue";
2
- export type { SwitchProps } from "./switch.types";
@@ -1,13 +0,0 @@
1
- /**
2
- * Props for the Switch component.
3
- */
4
- export interface SwitchProps {
5
- /** Checked state. Use with v-model:checked */
6
- checked?: boolean;
7
- /** Whether the switch is disabled */
8
- disabled?: boolean;
9
- /** Label for the switch */
10
- label?: string;
11
- /** Switch size (small, medium, large) */
12
- size?: string;
13
- }
package/src/tab/Tab.vue DELETED
@@ -1,99 +0,0 @@
1
- <script setup lang="ts">
2
- /**
3
- * Tab Component
4
- *
5
- * A Vue UI kit component for Baklava's `bl-tabs` (bl-tab-group / bl-tab / bl-tab-panel) web components
6
- * for tab navigation. Use the `tabs` prop for declarative configuration or the default slot
7
- * for custom tab content.
8
- *
9
- * @component
10
- * @example
11
- * ```vue
12
- * <!-- Basic usage with tabs prop -->
13
- * <template>
14
- * <BvTab v-model:activeTab="activeTab" :tabs="tabOptions">
15
- * <div v-if="activeTab === 'tab1'">Content 1</div>
16
- * <div v-if="activeTab === 'tab2'">Content 2</div>
17
- * </BvTab>
18
- * </template>
19
- * ```
20
- *
21
- * @example
22
- * ```vue
23
- * <!-- Custom slots -->
24
- * <template>
25
- * <BvTab v-model:activeTab="active">
26
- * <bl-tab value="a">Tab A</bl-tab>
27
- * <bl-tab value="b">Tab B</bl-tab>
28
- * <bl-tab-panel tab="a">Panel A content</bl-tab-panel>
29
- * <bl-tab-panel tab="b">Panel B content</bl-tab-panel>
30
- * </BvTab>
31
- * </template>
32
- * ```
33
- */
34
- import { onMounted } from "vue";
35
- import { loadBaklavaResources } from "../utils/loadBaklavaResources";
36
- import type { TabProps } from "./tab.types";
37
-
38
- const props = withDefaults(defineProps<TabProps>(), {
39
- activeTab: undefined,
40
- tabs: undefined,
41
- variant: undefined,
42
- orientation: undefined,
43
- });
44
-
45
- const emit = defineEmits<{
46
- /**
47
- * Emitted when the active tab changes (use with v-model:activeTab).
48
- * @param {string} tab - The new active tab value.
49
- */
50
- "update:activeTab": [tab: string];
51
- /**
52
- * Emitted when tab selection changes (raw CustomEvent from bl-tabs).
53
- * @param {CustomEvent} event - The bl-tab-change event.
54
- */
55
- "tab-change": [event: CustomEvent];
56
- }>();
57
-
58
- /**
59
- * Handles the bl-tab-selected event from the underlying bl-tab-group.
60
- * Emits update:activeTab with the new tab value and tab-change with the raw event.
61
- *
62
- * @param {CustomEvent} event - The bl-tab-selected event from bl-tab (detail is tab name).
63
- */
64
- const handleTabChange = (event: CustomEvent<string>) => {
65
- emit("tab-change", event);
66
- const tab = event.detail;
67
- if (tab !== undefined) emit("update:activeTab", tab);
68
- };
69
-
70
- onMounted(() => {
71
- loadBaklavaResources();
72
- });
73
- </script>
74
-
75
- <template>
76
- <bl-tab-group @bl-tab-selected="handleTabChange">
77
- <template v-if="tabs">
78
- <bl-tab
79
- v-for="tab in tabs"
80
- :key="tab.value"
81
- slot="tabs"
82
- :name="tab.value"
83
- :caption="tab.label"
84
- :disabled="tab.disabled"
85
- :selected="props.activeTab === tab.value"
86
- >
87
- {{ tab.label }}
88
- </bl-tab>
89
- <bl-tab-panel
90
- v-for="tab in tabs"
91
- :key="`panel-${tab.value}`"
92
- :tab="tab.value"
93
- >
94
- <slot />
95
- </bl-tab-panel>
96
- </template>
97
- <slot v-else />
98
- </bl-tab-group>
99
- </template>
package/src/tab/index.ts DELETED
@@ -1,2 +0,0 @@
1
- export { default as BvTab } from "./Tab.vue";
2
- export type { TabProps, TabOption } from "./tab.types";
@@ -1,17 +0,0 @@
1
- /** Tab option for the `tabs` prop */
2
- export interface TabOption {
3
- label: string;
4
- value: string;
5
- disabled?: boolean;
6
- }
7
-
8
- export interface TabProps {
9
- /** Currently active tab value (use with v-model:activeTab) */
10
- activeTab?: string;
11
- /** Array of tab options. When provided, tabs are rendered from this array. */
12
- tabs?: TabOption[];
13
- /** Tab variant (passed to bl-tabs) */
14
- variant?: string;
15
- /** Tab orientation: horizontal or vertical */
16
- orientation?: string;
17
- }
@@ -1,264 +0,0 @@
1
- <script setup lang="ts">
2
- /**
3
- * Table Component
4
- *
5
- * A Vue UI kit component for Baklava's `bl-table` web component for displaying tabular data.
6
- * Supports columns, data, sorting, row selection, loading/empty states, pagination,
7
- * and custom slots for header actions, empty state, and per-column cell content.
8
- *
9
- * @component
10
- * @example
11
- * ```vue
12
- * <!-- Basic usage -->
13
- * <template>
14
- * <BvTable :columns="columns" :data="tableData" />
15
- * </template>
16
- * ```
17
- *
18
- * @example
19
- * ```vue
20
- * <!-- With loading and empty states -->
21
- * <template>
22
- * <BvTable
23
- * :columns="columns"
24
- * :data="tableData"
25
- * :is-loading="isLoading"
26
- * >
27
- * <template #empty-state>
28
- * <span>No data found</span>
29
- * </template>
30
- * </BvTable>
31
- * </template>
32
- * ```
33
- */
34
- import { computed, onMounted, type PropType } from "vue";
35
- import { loadBaklavaResources } from "../utils/loadBaklavaResources";
36
- import BvSpinner from "../spinner/Spinner.vue";
37
- import type {
38
- TableColumn,
39
- TableRow,
40
- TablePaginationProps,
41
- } from "./table.types";
42
-
43
- defineOptions({ inheritAttrs: false });
44
-
45
- const props = defineProps({
46
- title: { type: String, default: undefined },
47
- headerOptions: {
48
- type: Object as PropType<{ sticky?: boolean; minCellWidth?: string }>,
49
- default: undefined,
50
- },
51
- data: { type: Array as PropType<TableRow[]>, default: () => [] },
52
- columns: { type: Array as PropType<TableColumn[]>, default: undefined },
53
- sortable: { type: Boolean, default: undefined },
54
- selectable: { type: Boolean, default: undefined },
55
- multiple: { type: Boolean, default: undefined },
56
- selected: {
57
- type: Array as PropType<(string | number)[]>,
58
- default: undefined,
59
- },
60
- sortKey: { type: String, default: undefined },
61
- sortDirection: { type: String, default: undefined },
62
- stickyFirstColumn: { type: Boolean, default: undefined },
63
- stickyLastColumn: { type: Boolean, default: undefined },
64
- isLoading: { type: Boolean, default: undefined },
65
- pagination: {
66
- type: Object as PropType<TablePaginationProps>,
67
- default: undefined,
68
- },
69
- loadingText: { type: String, default: "Loading..." },
70
- });
71
-
72
- const emit = defineEmits<{
73
- /**
74
- * Emitted when a row is clicked.
75
- * @param {CustomEvent} event - The bl-row-click event.
76
- */
77
- "row-click": [event: CustomEvent];
78
- /**
79
- * Emitted when table sort options change.
80
- * @param {CustomEvent} event - The bl-sort event.
81
- */
82
- sort: [event: CustomEvent];
83
- /**
84
- * Emitted when selected rows change.
85
- * @param {CustomEvent} event - The bl-row-select event.
86
- */
87
- select: [event: CustomEvent];
88
- /**
89
- * Emitted when pagination changes.
90
- * @param {CustomEvent} event - The bl-change event with selectedPage, prevPage, itemsPerPage.
91
- */
92
- change: [event: CustomEvent];
93
- }>();
94
-
95
- /**
96
- * Baklava table expects selected IDs to always be strings,
97
- * even when the actual data IDs might be numbers.
98
- */
99
- const selectedIdsAsStrings = computed(() => {
100
- const s = props.selected;
101
- if (s == null || !Array.isArray(s)) return [];
102
- return s.map((id) => String(id));
103
- });
104
-
105
- /** Column header text: prefer name, then label, then key */
106
- const getColumnLabel = (col: { key: string; label?: string; name?: string }) =>
107
- col.name ?? col.label ?? col.key;
108
-
109
- /** Row key for :key and selection-key: prefer row.id, fallback to index */
110
- const getRowKey = (row: Record<string, unknown> & { id?: string | number }, index: number) =>
111
- row.id != null ? String(row.id) : String(index);
112
-
113
- onMounted(() => {
114
- loadBaklavaResources();
115
- });
116
- </script>
117
-
118
- <template>
119
- <div class="table">
120
- <div v-if="props.title" class="header">
121
- <span class="--title">{{ props.title }}</span>
122
- <slot name="header-actions" />
123
- </div>
124
-
125
- <div class="table-content">
126
- <!-- Loading state -->
127
- <bl-table v-if="props.isLoading">
128
- <div class="loading-state">
129
- <BvSpinner />
130
- <span>{{ props.loadingText }}</span>
131
- </div>
132
- </bl-table>
133
-
134
- <!-- Empty state -->
135
- <bl-table v-else-if="!props.data?.length">
136
- <div class="empty-state">
137
- <slot name="empty-state" />
138
- </div>
139
- </bl-table>
140
-
141
- <!-- Data table -->
142
- <bl-table
143
- v-else
144
- v-bind="{
145
- sortable: props.sortable === true ? true : undefined,
146
- selectable: props.selectable === true ? true : undefined,
147
- multiple: props.multiple === true ? true : undefined,
148
- ...(props.selectable && { selected: selectedIdsAsStrings }),
149
- sortKey: props.sortKey,
150
- sortDirection: props.sortDirection,
151
- stickyFirstColumn: props.stickyFirstColumn,
152
- stickyLastColumn: props.stickyLastColumn,
153
- }"
154
- @bl-sort="emit('sort', $event)"
155
- @bl-row-select="emit('select', $event)"
156
- >
157
- <bl-table-header :sticky="props.headerOptions?.sticky">
158
- <bl-table-row>
159
- <bl-table-header-cell
160
- v-for="column in props.columns"
161
- :key="column.key"
162
- :sort-key="
163
- props.sortable && column.sortable !== false ? column.key : undefined
164
- "
165
- :style="{
166
- '--bl-table-header-cell-min-width':
167
- props.headerOptions?.minCellWidth || '100px',
168
- }"
169
- >
170
- {{ getColumnLabel(column) }}
171
- </bl-table-header-cell>
172
- </bl-table-row>
173
- </bl-table-header>
174
-
175
- <bl-table-body>
176
- <bl-table-row
177
- v-for="(row, index) in props.data"
178
- :key="getRowKey(row, index)"
179
- :selection-key="props.selectable ? getRowKey(row, index) : undefined"
180
- >
181
- <bl-table-cell v-for="column in props.columns" :key="column.key">
182
- <slot
183
- :name="column.key"
184
- :row="row"
185
- :value="row[column.key]"
186
- >
187
- {{ row[column.key] }}
188
- </slot>
189
- </bl-table-cell>
190
- </bl-table-row>
191
- </bl-table-body>
192
- </bl-table>
193
- </div>
194
-
195
- <div v-if="props.pagination" class="pagination-wrapper">
196
- <bl-pagination
197
- :current-page="props.pagination!.currentPage"
198
- :total-items="props.pagination!.totalItems"
199
- :items-per-page="props.pagination!.itemsPerPage"
200
- :has-jumper="props.pagination!.hasJumper ?? undefined"
201
- :has-select="props.pagination!.hasSelect ?? undefined"
202
- :jumper-label="props.pagination!.jumperLabel ?? 'Go to page'"
203
- :select-label="props.pagination!.selectLabel ?? 'Items per page'"
204
- :items-per-page-options="props.pagination!.itemsPerPageOptions"
205
- @bl-change="emit('change', $event)"
206
- />
207
- </div>
208
- </div>
209
- </template>
210
-
211
- <style lang="css" scoped>
212
- .table {
213
- display: flex;
214
- flex-direction: column;
215
- gap: 24px;
216
- }
217
-
218
- .header {
219
- display: flex;
220
- align-items: center;
221
- justify-content: space-between;
222
- }
223
-
224
- .--title {
225
- font: var(--bl-font-title-1-medium);
226
- }
227
-
228
- .table-content {
229
- width: 100%;
230
- overflow-x: auto;
231
- }
232
-
233
- .table-content > bl-table {
234
- min-width: max-content;
235
- }
236
-
237
- .loading-state {
238
- display: flex;
239
- flex-direction: column;
240
- align-items: center;
241
- justify-content: center;
242
- padding: 48px;
243
- gap: 16px;
244
- }
245
-
246
- .loading-state span {
247
- font: var(--bl-font-body-2-regular);
248
- color: var(--bl-color-primary);
249
- }
250
-
251
- .empty-state {
252
- display: flex;
253
- flex-direction: column;
254
- align-items: center;
255
- justify-content: center;
256
- padding: 48px;
257
- gap: 12px;
258
- }
259
-
260
- .pagination-wrapper {
261
- display: flex;
262
- justify-content: flex-end;
263
- }
264
- </style>
@@ -1,7 +0,0 @@
1
- export { default as BvTable } from "./Table.vue";
2
- export type {
3
- TableProps,
4
- TableColumn,
5
- TableRow,
6
- TablePaginationProps,
7
- } from "./table.types";
@@ -1,62 +0,0 @@
1
- import type { ItemsPerPageOption } from "../pagination/pagination.types";
2
-
3
- /** Table column definition */
4
- export interface TableColumn {
5
- key: string;
6
- /** Column header text (alias: use `name` or `label`) */
7
- label?: string;
8
- /** Column header text (alias: use `name` or `label`) */
9
- name?: string;
10
- sortable?: boolean;
11
- }
12
-
13
- /** Table row data (record of column keys to values). When selectable, rows should have `id`. */
14
- export type TableRow = Record<string, unknown> & { id?: string | number };
15
-
16
- /** Pagination props for table integration */
17
- export interface TablePaginationProps {
18
- currentPage: number;
19
- totalItems: number;
20
- itemsPerPage: number;
21
- hasJumper?: boolean;
22
- jumperLabel?: string;
23
- hasSelect?: boolean;
24
- selectLabel?: string;
25
- itemsPerPageOptions?: ItemsPerPageOption[];
26
- }
27
-
28
- export interface TableProps {
29
- /** Optional title displayed above the table */
30
- title?: string;
31
- /** Header options: sticky, minCellWidth */
32
- headerOptions?: {
33
- sticky?: boolean;
34
- minCellWidth?: string;
35
- };
36
- /** Table data rows */
37
- data?: TableRow[];
38
- /** Column definitions */
39
- columns?: TableColumn[];
40
- /** Enable column sorting */
41
- sortable?: boolean;
42
- /** Enable row selection */
43
- selectable?: boolean;
44
- /** Enable multiple row selection */
45
- multiple?: boolean;
46
- /** Selected row selection keys (use with v-model:selected when selectable). Accepts string or number ids. */
47
- selected?: (string | number)[];
48
- /** Sort key for the sorted column */
49
- sortKey?: string;
50
- /** Sort direction: '' | 'asc' | 'desc' */
51
- sortDirection?: string;
52
- /** Make first column sticky */
53
- stickyFirstColumn?: boolean;
54
- /** Make last column sticky */
55
- stickyLastColumn?: boolean;
56
- /** Show loading state */
57
- isLoading?: boolean;
58
- /** Pagination configuration */
59
- pagination?: TablePaginationProps;
60
- /** Text shown in loading state */
61
- loadingText?: string;
62
- }