vlite3 0.1.0 → 0.1.2

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 (465) hide show
  1. package/_virtual/_plugin-vue_export-helper.js +9 -0
  2. package/components/Accordion/Accordion.vue.d.ts +44 -0
  3. package/components/Accordion/Accordion.vue.js +95 -0
  4. package/components/Accordion/Accordion.vue2.js +4 -0
  5. package/components/Accordion/AccordionContent.vue.d.ts +22 -0
  6. package/components/Accordion/AccordionContent.vue.js +7 -0
  7. package/components/Accordion/AccordionContent.vue2.js +47 -0
  8. package/components/Accordion/AccordionItem.vue.d.ts +56 -0
  9. package/components/Accordion/AccordionItem.vue.js +115 -0
  10. package/components/Accordion/AccordionItem.vue2.js +4 -0
  11. package/components/Accordion/AccordionTrigger.vue.d.ts +43 -0
  12. package/components/Accordion/AccordionTrigger.vue.js +94 -0
  13. package/components/Accordion/AccordionTrigger.vue2.js +4 -0
  14. package/components/Accordion/index.d.ts +5 -0
  15. package/components/Accordion/types.d.ts +33 -0
  16. package/components/Alert.vue.d.ts +36 -0
  17. package/components/Alert.vue.js +84 -0
  18. package/components/Alert.vue2.js +4 -0
  19. package/components/Avatar.vue.d.ts +32 -0
  20. package/components/Avatar.vue.js +78 -0
  21. package/components/Avatar.vue2.js +4 -0
  22. package/components/AvatarUploader/AvatarUploader.vue.d.ts +32 -0
  23. package/components/AvatarUploader/AvatarUploader.vue.js +99 -0
  24. package/components/AvatarUploader/AvatarUploader.vue2.js +4 -0
  25. package/{src/components/AvatarUploader/index.ts → components/AvatarUploader/index.d.ts} +2 -2
  26. package/components/Badge.vue.d.ts +25 -0
  27. package/components/Badge.vue.js +27 -0
  28. package/components/Badge.vue2.js +4 -0
  29. package/components/Button.vue.d.ts +26 -0
  30. package/components/Button.vue.js +107 -0
  31. package/components/Button.vue2.js +4 -0
  32. package/components/ButtonGroup.vue.d.ts +29 -0
  33. package/components/ButtonGroup.vue.js +7 -0
  34. package/components/ButtonGroup.vue2.js +30 -0
  35. package/components/Carousel/Carousel.vue.d.ts +847 -0
  36. package/components/Carousel/Carousel.vue.js +7 -0
  37. package/components/Carousel/Carousel.vue2.js +68 -0
  38. package/components/Carousel/index.d.ts +2 -0
  39. package/components/Carousel/types.d.ts +24 -0
  40. package/components/CheckBox.vue.d.ts +27 -0
  41. package/components/CheckBox.vue.js +115 -0
  42. package/components/CheckBox.vue2.js +4 -0
  43. package/components/Chip/Chip.vue.d.ts +33 -0
  44. package/components/Chip/Chip.vue.js +113 -0
  45. package/components/Chip/Chip.vue2.js +4 -0
  46. package/components/Chip/index.d.ts +2 -0
  47. package/components/Chip/types.d.ts +12 -0
  48. package/components/ChoiceBox/ChoiceBox.vue.d.ts +32 -0
  49. package/components/ChoiceBox/ChoiceBox.vue.js +141 -0
  50. package/components/ChoiceBox/ChoiceBox.vue2.js +4 -0
  51. package/components/ChoiceBox/index.d.ts +2 -0
  52. package/components/ColorPicker/ColorIro.vue.d.ts +18 -0
  53. package/components/ColorPicker/ColorIro.vue.js +142 -0
  54. package/components/ColorPicker/ColorIro.vue3.js +5 -0
  55. package/components/ColorPicker/ColorPicker.vue.d.ts +22 -0
  56. package/components/ColorPicker/ColorPicker.vue.js +56 -0
  57. package/components/ColorPicker/ColorPicker.vue2.js +4 -0
  58. package/components/ConfirmationModal.vue.d.ts +39 -0
  59. package/components/ConfirmationModal.vue.js +55 -0
  60. package/components/ConfirmationModal.vue2.js +4 -0
  61. package/components/DataTable/DataTable.vue.d.ts +60 -0
  62. package/components/DataTable/DataTable.vue.js +7 -0
  63. package/components/DataTable/DataTable.vue2.js +310 -0
  64. package/components/DataTable/DataTableHeader.vue.d.ts +14 -0
  65. package/components/DataTable/DataTableHeader.vue.js +49 -0
  66. package/components/DataTable/DataTableHeader.vue2.js +4 -0
  67. package/components/DataTable/DataTableRow.vue.d.ts +51 -0
  68. package/components/DataTable/DataTableRow.vue.js +114 -0
  69. package/components/DataTable/DataTableRow.vue2.js +4 -0
  70. package/components/DataTable/DataTableToolbar.vue.d.ts +31 -0
  71. package/components/DataTable/DataTableToolbar.vue.js +45 -0
  72. package/components/DataTable/DataTableToolbar.vue2.js +4 -0
  73. package/components/DataTable/index.d.ts +4 -0
  74. package/components/DataTable/types.d.ts +75 -0
  75. package/components/DatePicker.vue.d.ts +44 -0
  76. package/components/DatePicker.vue.js +84 -0
  77. package/components/DatePicker.vue2.js +4 -0
  78. package/components/Dropdown/Dropdown.vue.d.ts +105 -0
  79. package/components/Dropdown/Dropdown.vue.js +206 -0
  80. package/components/Dropdown/Dropdown.vue2.js +4 -0
  81. package/components/Dropdown/DropdownBooleanItem.vue.d.ts +12 -0
  82. package/components/Dropdown/DropdownBooleanItem.vue.js +41 -0
  83. package/components/Dropdown/DropdownBooleanItem.vue2.js +4 -0
  84. package/components/Dropdown/DropdownGroupedLayout.vue.d.ts +21 -0
  85. package/components/Dropdown/DropdownGroupedLayout.vue.js +73 -0
  86. package/components/Dropdown/DropdownGroupedLayout.vue2.js +4 -0
  87. package/components/Dropdown/DropdownItem.vue.d.ts +35 -0
  88. package/components/Dropdown/DropdownItem.vue.js +56 -0
  89. package/components/Dropdown/DropdownItem.vue2.js +4 -0
  90. package/components/Dropdown/DropdownMenu.vue.d.ts +73 -0
  91. package/components/Dropdown/DropdownMenu.vue.js +232 -0
  92. package/components/Dropdown/DropdownMenu.vue2.js +4 -0
  93. package/components/Dropdown/DropdownTrigger.vue.d.ts +15 -0
  94. package/components/Dropdown/DropdownTrigger.vue.js +26 -0
  95. package/components/Dropdown/DropdownTrigger.vue2.js +4 -0
  96. package/components/Dropdown/composables/useDropdownIds.d.ts +5 -0
  97. package/components/Dropdown/composables/useDropdownIds.js +20 -0
  98. package/components/Dropdown/composables/useDropdownNavigation.d.ts +19 -0
  99. package/components/Dropdown/composables/useDropdownNavigation.js +49 -0
  100. package/components/Dropdown/composables/useDropdownSelection.d.ts +16 -0
  101. package/components/Dropdown/composables/useDropdownSelection.js +41 -0
  102. package/components/Dropdown/index.d.ts +6 -0
  103. package/components/FilePicker/FilePicker.vue.d.ts +65 -0
  104. package/components/FilePicker/FilePicker.vue.js +285 -0
  105. package/components/FilePicker/FilePicker.vue2.js +4 -0
  106. package/components/FilePicker/index.d.ts +2 -0
  107. package/components/FileTree/FileTree.vue.d.ts +20 -0
  108. package/components/FileTree/FileTree.vue.js +139 -0
  109. package/components/FileTree/FileTree.vue2.js +4 -0
  110. package/components/FileTree/FileTreeNode.vue.d.ts +28 -0
  111. package/components/FileTree/FileTreeNode.vue.js +184 -0
  112. package/components/FileTree/FileTreeNode.vue2.js +4 -0
  113. package/components/FileTree/index.d.ts +4 -0
  114. package/components/FileTree/types.d.ts +36 -0
  115. package/components/FileTree/useTreeSelection.d.ts +12 -0
  116. package/components/FileTree/useTreeSelection.js +25 -0
  117. package/components/Form/CustomFields.vue.d.ts +38 -0
  118. package/components/Form/CustomFields.vue.js +7 -0
  119. package/components/Form/CustomFields.vue2.js +161 -0
  120. package/components/Form/Form.vue.d.ts +94 -0
  121. package/components/Form/Form.vue.js +7 -0
  122. package/components/Form/Form.vue2.js +238 -0
  123. package/components/Form/FormField.vue.d.ts +28 -0
  124. package/components/Form/FormField.vue.js +207 -0
  125. package/components/Form/FormField.vue2.js +4 -0
  126. package/components/Form/FormFields.vue.d.ts +29 -0
  127. package/components/Form/FormFields.vue.js +7 -0
  128. package/components/Form/FormFields.vue2.js +95 -0
  129. package/components/Form/composables/useFileUpload.d.ts +24 -0
  130. package/components/Form/composables/useFileUpload.js +40 -0
  131. package/components/Form/composables/useForm.d.ts +48 -0
  132. package/components/Form/composables/useForm.js +109 -0
  133. package/components/Form/index.d.ts +9 -0
  134. package/components/Form/types.d.ts +167 -0
  135. package/components/Form/utils/form.utils.d.ts +44 -0
  136. package/components/Form/utils/form.utils.js +97 -0
  137. package/components/Heatmap/Heatmap.vue.d.ts +26 -0
  138. package/components/Heatmap/Heatmap.vue.js +7 -0
  139. package/components/Heatmap/Heatmap.vue2.js +326 -0
  140. package/components/Heatmap/index.d.ts +2 -0
  141. package/components/Heatmap/types.d.ts +66 -0
  142. package/components/Icon.vue.d.ts +7 -0
  143. package/components/Icon.vue.js +25 -0
  144. package/components/Icon.vue2.js +4 -0
  145. package/components/IconPicker.vue.d.ts +38 -0
  146. package/components/IconPicker.vue.js +124 -0
  147. package/components/IconPicker.vue2.js +4 -0
  148. package/components/Input.vue.d.ts +54 -0
  149. package/components/Input.vue.js +267 -0
  150. package/components/Input.vue2.js +4 -0
  151. package/components/Label.vue.d.ts +23 -0
  152. package/components/Label.vue.js +23 -0
  153. package/components/Label.vue2.js +4 -0
  154. package/components/Logo.vue.d.ts +2 -0
  155. package/components/Logo.vue.js +10 -0
  156. package/components/Logo.vue2.js +4 -0
  157. package/components/Masonry/Masonry.vue.d.ts +31 -0
  158. package/components/Masonry/Masonry.vue.js +7 -0
  159. package/components/Masonry/Masonry.vue2.js +83 -0
  160. package/components/Masonry/index.d.ts +2 -0
  161. package/components/Masonry/types.d.ts +33 -0
  162. package/components/Masonry/types.js +10 -0
  163. package/components/Modal.vue.d.ts +52 -0
  164. package/components/Modal.vue.js +116 -0
  165. package/components/Modal.vue2.js +4 -0
  166. package/components/MultiSelect/MultiSelect.vue.d.ts +40 -0
  167. package/components/MultiSelect/MultiSelect.vue.js +126 -0
  168. package/components/MultiSelect/MultiSelect.vue2.js +4 -0
  169. package/components/MultiSelect/index.d.ts +1 -0
  170. package/components/Navbar/Navbar.vue.d.ts +51 -0
  171. package/components/Navbar/Navbar.vue.js +198 -0
  172. package/components/Navbar/Navbar.vue2.js +4 -0
  173. package/components/Navbar/NavbarGroup.vue.d.ts +24 -0
  174. package/components/Navbar/NavbarGroup.vue.js +23 -0
  175. package/components/Navbar/NavbarGroup.vue2.js +4 -0
  176. package/components/Navbar/NavbarItem.vue.d.ts +40 -0
  177. package/components/Navbar/NavbarItem.vue.js +104 -0
  178. package/components/Navbar/NavbarItem.vue2.js +4 -0
  179. package/components/Navbar/index.d.ts +3 -0
  180. package/components/OTPInput/OTPInput.vue.d.ts +33 -0
  181. package/components/OTPInput/OTPInput.vue.js +115 -0
  182. package/components/OTPInput/OTPInput.vue2.js +4 -0
  183. package/components/OTPInput/index.d.ts +1 -0
  184. package/components/Pagination/Pagination.vue.d.ts +34 -0
  185. package/components/Pagination/Pagination.vue.js +196 -0
  186. package/components/Pagination/Pagination.vue2.js +4 -0
  187. package/components/Pagination/index.d.ts +1 -0
  188. package/components/PricingPlan/PricingPlan.vue.d.ts +22 -0
  189. package/components/PricingPlan/PricingPlan.vue.js +55 -0
  190. package/components/PricingPlan/PricingPlan.vue2.js +4 -0
  191. package/components/PricingPlan/PricingPlanItem.vue.d.ts +17 -0
  192. package/components/PricingPlan/PricingPlanItem.vue.js +94 -0
  193. package/components/PricingPlan/PricingPlanItem.vue2.js +4 -0
  194. package/components/PricingPlan/index.d.ts +3 -0
  195. package/components/PricingPlan/types.d.ts +25 -0
  196. package/components/SidePanel.vue.d.ts +64 -0
  197. package/components/SidePanel.vue.js +7 -0
  198. package/components/SidePanel.vue2.js +131 -0
  199. package/components/SidebarMenu/SidebarMenu.vue.d.ts +11 -0
  200. package/components/SidebarMenu/SidebarMenu.vue.js +78 -0
  201. package/components/SidebarMenu/SidebarMenu.vue2.js +4 -0
  202. package/components/SidebarMenu/SidebarMenuItem.vue.d.ts +9 -0
  203. package/components/SidebarMenu/SidebarMenuItem.vue.js +269 -0
  204. package/components/SidebarMenu/SidebarMenuItem.vue3.js +5 -0
  205. package/components/SidebarMenu/index.d.ts +3 -0
  206. package/components/SidebarMenu/types.d.ts +35 -0
  207. package/components/Slider.vue.d.ts +31 -0
  208. package/components/Slider.vue.js +157 -0
  209. package/components/Slider.vue2.js +4 -0
  210. package/components/Switch.vue.d.ts +16 -0
  211. package/components/Switch.vue.js +40 -0
  212. package/components/Switch.vue2.js +4 -0
  213. package/components/Tabes/Tabes.vue.d.ts +21 -0
  214. package/components/Tabes/Tabes.vue.js +75 -0
  215. package/components/Tabes/Tabes.vue2.js +4 -0
  216. package/components/Tabes/index.d.ts +2 -0
  217. package/components/Tabes/types.d.ts +8 -0
  218. package/components/Textarea.vue.d.ts +22 -0
  219. package/components/Textarea.vue.js +34 -0
  220. package/components/Textarea.vue2.js +4 -0
  221. package/components/ThemeToggle.vue.d.ts +2 -0
  222. package/components/ThemeToggle.vue.js +18 -0
  223. package/components/ThemeToggle.vue2.js +4 -0
  224. package/components/Timeline.vue.d.ts +39 -0
  225. package/components/Timeline.vue.js +174 -0
  226. package/components/Timeline.vue2.js +4 -0
  227. package/components/ToastNotification.vue.d.ts +7 -0
  228. package/components/ToastNotification.vue.js +7 -0
  229. package/components/ToastNotification.vue2.js +151 -0
  230. package/components/Tooltip.vue.d.ts +31 -0
  231. package/components/Tooltip.vue.js +45 -0
  232. package/components/Tooltip.vue2.js +4 -0
  233. package/components/Workbook/Sheet.vue.d.ts +38 -0
  234. package/components/Workbook/Sheet.vue.js +141 -0
  235. package/components/Workbook/Sheet.vue2.js +4 -0
  236. package/components/Workbook/Workbook.vue.d.ts +54 -0
  237. package/components/Workbook/Workbook.vue.js +7 -0
  238. package/components/Workbook/Workbook.vue2.js +146 -0
  239. package/components/Workbook/WorkbookAddButton.vue.d.ts +6 -0
  240. package/components/Workbook/WorkbookAddButton.vue.js +20 -0
  241. package/components/Workbook/WorkbookAddButton.vue2.js +4 -0
  242. package/components/Workbook/index.d.ts +3 -0
  243. package/components/Workbook/types.d.ts +34 -0
  244. package/composables/useKeyStroke.d.ts +21 -0
  245. package/composables/useKeyStroke.js +93 -0
  246. package/composables/useNotifications.d.ts +113 -0
  247. package/composables/useNotifications.js +99 -0
  248. package/composables/useTheme.d.ts +6 -0
  249. package/composables/useTheme.js +32 -0
  250. package/core/config.d.ts +29 -0
  251. package/core/config.js +12 -0
  252. package/core/index.d.ts +31 -0
  253. package/core/index.js +15 -0
  254. package/directives/vRipple.d.ts +4 -0
  255. package/directives/vRipple.js +17 -0
  256. package/index.d.ts +49 -0
  257. package/index.js +156 -0
  258. package/package.json +2 -2
  259. package/style.css +590 -0
  260. package/types/alert.type.d.ts +10 -0
  261. package/{src/types/avatar.type.ts → types/avatar.type.d.ts} +8 -9
  262. package/types/button.d.ts +15 -0
  263. package/types/buttongroup.type.d.ts +1 -0
  264. package/{src/types/config.type.ts → types/config.type.d.ts} +13 -16
  265. package/types/form.type.d.ts +45 -0
  266. package/types/index.d.ts +10 -0
  267. package/types/navbar.type.d.ts +27 -0
  268. package/types/sidepanel.type.d.ts +13 -0
  269. package/types/styles.d.ts +28 -0
  270. package/types/timeline.type.d.ts +9 -0
  271. package/{src/utils/functions.ts → utils/functions.d.ts} +1 -9
  272. package/utils/functions.js +11 -0
  273. package/utils/index.d.ts +2 -0
  274. package/utils/object.d.ts +6 -0
  275. package/utils/object.js +14 -0
  276. package/.vscode/extensions.json +0 -3
  277. package/LICENSE +0 -21
  278. package/index.html +0 -16
  279. package/scripts/bundle-css.js +0 -45
  280. package/src/App.vue +0 -7
  281. package/src/components/Accordion/Accordion.vue +0 -139
  282. package/src/components/Accordion/AccordionContent.vue +0 -63
  283. package/src/components/Accordion/AccordionItem.vue +0 -163
  284. package/src/components/Accordion/AccordionTrigger.vue +0 -125
  285. package/src/components/Accordion/index.ts +0 -5
  286. package/src/components/Accordion/types.ts +0 -41
  287. package/src/components/Alert.vue +0 -112
  288. package/src/components/Avatar.vue +0 -110
  289. package/src/components/AvatarUploader/AvatarUploader.vue +0 -129
  290. package/src/components/Badge.vue +0 -45
  291. package/src/components/Button.vue +0 -122
  292. package/src/components/ButtonGroup.vue +0 -173
  293. package/src/components/Carousel/Carousel.vue +0 -84
  294. package/src/components/Carousel/index.ts +0 -2
  295. package/src/components/Carousel/types.ts +0 -25
  296. package/src/components/CheckBox.vue +0 -132
  297. package/src/components/Chip/Chip.vue +0 -158
  298. package/src/components/Chip/index.ts +0 -2
  299. package/src/components/Chip/types.ts +0 -23
  300. package/src/components/ChoiceBox/ChoiceBox.vue +0 -181
  301. package/src/components/ChoiceBox/index.ts +0 -2
  302. package/src/components/ColorPicker/ColorIro.vue +0 -207
  303. package/src/components/ColorPicker/ColorPicker.vue +0 -61
  304. package/src/components/ConfirmationModal.vue +0 -46
  305. package/src/components/DataTable/DataTable.vue +0 -478
  306. package/src/components/DataTable/DataTableHeader.vue +0 -78
  307. package/src/components/DataTable/DataTableRow.vue +0 -171
  308. package/src/components/DataTable/DataTableToolbar.vue +0 -45
  309. package/src/components/DataTable/index.ts +0 -5
  310. package/src/components/DataTable/types.ts +0 -85
  311. package/src/components/DatePicker.vue +0 -102
  312. package/src/components/Dropdown/Dropdown.vue +0 -348
  313. package/src/components/Dropdown/DropdownBooleanItem.vue +0 -40
  314. package/src/components/Dropdown/DropdownGroupedLayout.vue +0 -115
  315. package/src/components/Dropdown/DropdownItem.vue +0 -56
  316. package/src/components/Dropdown/DropdownMenu.vue +0 -374
  317. package/src/components/Dropdown/DropdownTrigger.vue +0 -27
  318. package/src/components/Dropdown/composables/useDropdownIds.ts +0 -27
  319. package/src/components/Dropdown/composables/useDropdownNavigation.ts +0 -109
  320. package/src/components/Dropdown/composables/useDropdownSelection.ts +0 -106
  321. package/src/components/Dropdown/index.ts +0 -6
  322. package/src/components/FilePicker/FilePicker.vue +0 -459
  323. package/src/components/FilePicker/index.ts +0 -2
  324. package/src/components/FileTree/FileTree.vue +0 -334
  325. package/src/components/FileTree/FileTreeNode.vue +0 -225
  326. package/src/components/FileTree/index.ts +0 -2
  327. package/src/components/FileTree/types.ts +0 -31
  328. package/src/components/FileTree/useTreeSelection.ts +0 -66
  329. package/src/components/Form/CustomFields.vue +0 -294
  330. package/src/components/Form/Form.vue +0 -406
  331. package/src/components/Form/FormField.vue +0 -404
  332. package/src/components/Form/FormFields.vue +0 -161
  333. package/src/components/Form/composables/useFileUpload.ts +0 -112
  334. package/src/components/Form/composables/useForm.ts +0 -356
  335. package/src/components/Form/index.ts +0 -16
  336. package/src/components/Form/types.ts +0 -203
  337. package/src/components/Form/utils/form.utils.ts +0 -209
  338. package/src/components/Heatmap/Heatmap.vue +0 -629
  339. package/src/components/Heatmap/index.ts +0 -2
  340. package/src/components/Heatmap/types.ts +0 -84
  341. package/src/components/Icon.vue +0 -47
  342. package/src/components/IconPicker.vue +0 -138
  343. package/src/components/Input.vue +0 -366
  344. package/src/components/Label.vue +0 -25
  345. package/src/components/Logo.vue +0 -5
  346. package/src/components/Masonry/Masonry.vue +0 -148
  347. package/src/components/Masonry/index.ts +0 -2
  348. package/src/components/Masonry/types.ts +0 -44
  349. package/src/components/Modal.vue +0 -135
  350. package/src/components/MultiSelect/MultiSelect.vue +0 -176
  351. package/src/components/MultiSelect/index.ts +0 -1
  352. package/src/components/Navbar/Navbar.vue +0 -277
  353. package/src/components/Navbar/NavbarGroup.vue +0 -27
  354. package/src/components/Navbar/NavbarItem.vue +0 -124
  355. package/src/components/Navbar/index.ts +0 -3
  356. package/src/components/OTPInput/OTPInput.vue +0 -220
  357. package/src/components/OTPInput/index.ts +0 -1
  358. package/src/components/Pagination/Pagination.vue +0 -238
  359. package/src/components/Pagination/index.ts +0 -1
  360. package/src/components/PricingPlan/PricingPlan.vue +0 -102
  361. package/src/components/PricingPlan/PricingPlanItem.vue +0 -148
  362. package/src/components/PricingPlan/index.ts +0 -3
  363. package/src/components/PricingPlan/types.ts +0 -29
  364. package/src/components/SidePanel.vue +0 -184
  365. package/src/components/SidebarMenu/SidebarMenu.vue +0 -146
  366. package/src/components/SidebarMenu/SidebarMenuItem.vue +0 -333
  367. package/src/components/SidebarMenu/index.ts +0 -3
  368. package/src/components/SidebarMenu/types.ts +0 -54
  369. package/src/components/Slider.vue +0 -181
  370. package/src/components/Switch.vue +0 -51
  371. package/src/components/Tabes/Tabes.vue +0 -112
  372. package/src/components/Tabes/index.ts +0 -2
  373. package/src/components/Tabes/types.ts +0 -17
  374. package/src/components/Textarea.vue +0 -48
  375. package/src/components/ThemeToggle.vue +0 -14
  376. package/src/components/Timeline.vue +0 -250
  377. package/src/components/ToastNotification.vue +0 -257
  378. package/src/components/Tooltip.vue +0 -25
  379. package/src/components/Workbook/Sheet.vue +0 -185
  380. package/src/components/Workbook/Workbook.vue +0 -231
  381. package/src/components/Workbook/WorkbookAddButton.vue +0 -17
  382. package/src/components/Workbook/index.ts +0 -3
  383. package/src/components/Workbook/types.ts +0 -43
  384. package/src/composables/useKeyStroke.ts +0 -291
  385. package/src/composables/useNotifications.ts +0 -206
  386. package/src/composables/useTheme.ts +0 -55
  387. package/src/core/config.ts +0 -37
  388. package/src/core/index.ts +0 -49
  389. package/src/css/base.css +0 -148
  390. package/src/css/input.css +0 -61
  391. package/src/css/main.css +0 -6
  392. package/src/css/theme.css +0 -344
  393. package/src/directives/vRipple.ts +0 -38
  394. package/src/index.ts +0 -53
  395. package/src/main.ts +0 -5
  396. package/src/playground/Playground.vue +0 -429
  397. package/src/playground/composables/useGetUsers.ts +0 -538
  398. package/src/playground/demos/AccordionDemo.vue +0 -361
  399. package/src/playground/demos/AlertDemo.vue +0 -36
  400. package/src/playground/demos/AvatarDemo.vue +0 -41
  401. package/src/playground/demos/AvatarUploaderDemo.vue +0 -133
  402. package/src/playground/demos/BadgeDemo.vue +0 -31
  403. package/src/playground/demos/BadgesDemo.vue +0 -26
  404. package/src/playground/demos/ButtonDemo.vue +0 -99
  405. package/src/playground/demos/ButtonGroupDemo.vue +0 -39
  406. package/src/playground/demos/ButtonsDemo.vue +0 -111
  407. package/src/playground/demos/CarouselDemo.vue +0 -135
  408. package/src/playground/demos/CheckBoxDemo.vue +0 -43
  409. package/src/playground/demos/ChipDemo.vue +0 -190
  410. package/src/playground/demos/ChoiceBoxDemo.vue +0 -160
  411. package/src/playground/demos/ColorPickerDemo.vue +0 -30
  412. package/src/playground/demos/ColorsDemo.vue +0 -295
  413. package/src/playground/demos/DataTableDemo.vue +0 -215
  414. package/src/playground/demos/DatePickerDemo.vue +0 -43
  415. package/src/playground/demos/DisplayDemo.vue +0 -101
  416. package/src/playground/demos/DropdownDemo.vue +0 -651
  417. package/src/playground/demos/FilePickerDemo.vue +0 -175
  418. package/src/playground/demos/FileTreeDemo.vue +0 -150
  419. package/src/playground/demos/FormDemo.vue +0 -1144
  420. package/src/playground/demos/HeatmapDemo.vue +0 -467
  421. package/src/playground/demos/IconPickerDemo.vue +0 -27
  422. package/src/playground/demos/InputDemo.vue +0 -80
  423. package/src/playground/demos/InputsDemo.vue +0 -127
  424. package/src/playground/demos/LabelDemo.vue +0 -32
  425. package/src/playground/demos/MasonryDemo.vue +0 -241
  426. package/src/playground/demos/ModalDemo.vue +0 -67
  427. package/src/playground/demos/MultiSelectDemo.vue +0 -300
  428. package/src/playground/demos/NavbarDemo.vue +0 -59
  429. package/src/playground/demos/NavigationDemo.vue +0 -116
  430. package/src/playground/demos/OTPInputDemo.vue +0 -170
  431. package/src/playground/demos/OverlaysDemo.vue +0 -104
  432. package/src/playground/demos/PaginationDemo.vue +0 -130
  433. package/src/playground/demos/PricingPlanDemo.vue +0 -110
  434. package/src/playground/demos/SidePanelDemo.vue +0 -45
  435. package/src/playground/demos/SidebarMenuDemo.vue +0 -170
  436. package/src/playground/demos/SliderDemo.vue +0 -48
  437. package/src/playground/demos/SwitchDemo.vue +0 -40
  438. package/src/playground/demos/TabesDemo.vue +0 -178
  439. package/src/playground/demos/TextareaDemo.vue +0 -31
  440. package/src/playground/demos/ThemeToggleDemo.vue +0 -20
  441. package/src/playground/demos/TimelineDemo.vue +0 -43
  442. package/src/playground/demos/ToastDemo.vue +0 -111
  443. package/src/playground/demos/TooltipDemo.vue +0 -30
  444. package/src/playground/demos/WorkbookDemo.vue +0 -227
  445. package/src/types/alert.type.ts +0 -11
  446. package/src/types/button.ts +0 -36
  447. package/src/types/buttongroup.type.ts +0 -1
  448. package/src/types/form.type.ts +0 -75
  449. package/src/types/index.ts +0 -11
  450. package/src/types/navbar.type.ts +0 -28
  451. package/src/types/sidepanel.type.ts +0 -14
  452. package/src/types/styles.ts +0 -42
  453. package/src/types/timeline.type.ts +0 -11
  454. package/src/utils/index.ts +0 -2
  455. package/src/utils/object.ts +0 -40
  456. package/tsconfig.app.json +0 -27
  457. package/tsconfig.json +0 -48
  458. package/tsconfig.node.json +0 -18
  459. package/tsconfig.node.tsbuildinfo +0 -1
  460. package/tsconfig.tsbuildinfo +0 -1
  461. package/vercel.json +0 -8
  462. package/vite.config.d.ts +0 -2
  463. package/vite.config.js +0 -63
  464. package/vite.config.ts +0 -64
  465. package/vite.config.vercel.ts +0 -17
@@ -1,125 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed } from 'vue'
3
- import Icon from '../Icon.vue'
4
-
5
- interface Props {
6
- class?: string
7
- icon?: string
8
- open?: boolean
9
- disabled?: boolean
10
- index?: number
11
- showIndex?: boolean
12
-
13
- // Custom icons from parent/root
14
- openIcon?: string
15
- closeIcon?: string
16
- // Icon Style
17
- iconVariant?: 'simple' | 'solid' | 'outline' | 'primary' | 'ghost'
18
- activeIconVariant?: 'simple' | 'solid' | 'outline' | 'primary' | 'ghost'
19
- chevron?: boolean
20
- }
21
-
22
- const props = withDefaults(defineProps<Props>(), {
23
- class: '',
24
- chevron: true,
25
- showIndex: false,
26
- iconVariant: 'simple',
27
- })
28
-
29
- const emit = defineEmits<{
30
- (e: 'click', event: MouseEvent): void
31
- }>()
32
-
33
- const handleClick = (e: MouseEvent) => {
34
- if (props.disabled) return
35
- emit('click', e)
36
- }
37
-
38
- // Icon Logic
39
- const currentIcon = computed(() => {
40
- // If specific open/close icons are provided
41
- if (props.open && props.openIcon) return props.openIcon
42
- if (!props.open && props.closeIcon) return props.closeIcon
43
-
44
- // Default chevron behavior
45
- return 'lucide:chevron-down'
46
- })
47
-
48
- const iconRotationClass = computed(() => {
49
- // Only rotate if we are NOT using distinct icons (i.e. using chevron for both or same icon)
50
- if (props.openIcon && props.closeIcon) return ''
51
- return props.open ? 'rotate-180' : ''
52
- })
53
-
54
- const currentIconVariant = computed(() => {
55
- if (props.open && props.activeIconVariant) return props.activeIconVariant
56
- return props.iconVariant
57
- })
58
-
59
- const iconContainerClass = computed(() => {
60
- const base = 'flex items-center justify-center shrink-0 transition-all duration-300'
61
- const size = 'h-8 w-8 rounded-full' // Standard click target/visual size for updated designs
62
-
63
- const variants: Record<string, string> = {
64
- simple: 'text-muted-foreground bg-transparent',
65
- solid: 'text-foreground bg-muted',
66
- outline: 'text-foreground border bg-transparent',
67
- primary: 'text-primary-dark bg-primary-light',
68
- ghost: 'text-muted-foreground hover:bg-accent bg-transparent',
69
- }
70
-
71
- const variantClass = variants[currentIconVariant.value] || variants['simple']
72
-
73
- // If simple, we might not want the fixed size container unless it's intended to be a button?
74
- // User requested "customizable it's variant like transparent, solid...".
75
- // Solid/Outline implies a shape.
76
- if (currentIconVariant.value === 'simple')
77
- return `text-muted-foreground group-hover:text-foreground ${iconRotationClass.value}`
78
-
79
- return `${base} ${size} ${variantClass} ${iconRotationClass.value}`
80
- })
81
- </script>
82
-
83
- <template>
84
- <button
85
- type="button"
86
- class="group flex flex-1 w-full items-center justify-between py-3 text-left font-medium transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2"
87
- :class="[props.disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer', props.class]"
88
- :data-state="props.open ? 'open' : 'closed'"
89
- :disabled="props.disabled"
90
- @click="handleClick">
91
- <div class="flex items-center gap-3">
92
- <!-- Number Badge -->
93
- <div
94
- v-if="showIndex && index !== undefined"
95
- class="flex items-center justify-center h-7 w-7 rounded-full bg-primary-light text-primary text-xs font-bold shrink-0">
96
- {{ index }}
97
- </div>
98
-
99
- <!-- Item Icon (Leader) -->
100
- <Icon
101
- v-if="icon"
102
- :icon="icon"
103
- class="h-5 w-5 shrink-0 text-muted-foreground group-hover:text-foreground transition-colors" />
104
-
105
- <!-- Content Slot -->
106
- <div class="flex flex-col">
107
- <slot />
108
- </div>
109
- </div>
110
-
111
- <!-- Expand/Collapse Icon -->
112
- <slot name="icon">
113
- <div v-if="chevron || openIcon || closeIcon" :class="iconContainerClass">
114
- <Icon
115
- :icon="currentIcon"
116
- class="h-4 w-4 shrink-0 transition-transform duration-200"
117
- :class="{ 'rotate-0': currentIconVariant !== 'simple' }" />
118
- <!-- Note: Rotation handled in container for shapes, or on icon for simple.
119
- If container rotates, the shadow/border rotates too which is fine for circle,
120
- but checking logic above: iconContainerClass includes iconRotationClass.
121
- -->
122
- </div>
123
- </slot>
124
- </button>
125
- </template>
@@ -1,5 +0,0 @@
1
- export { default as Accordion } from './Accordion.vue'
2
- export { default as AccordionItem } from './AccordionItem.vue'
3
- export { default as AccordionTrigger } from './AccordionTrigger.vue'
4
- export { default as AccordionContent } from './AccordionContent.vue'
5
- export * from './types'
@@ -1,41 +0,0 @@
1
- export interface AccordionItemSchema {
2
- id: string
3
- title: string
4
- description?: string
5
- content?: string // HTML or text
6
- bodyComponent?: any // Component to render in body
7
- disabled?: boolean
8
- icon?: string
9
- // Allow any arbitrary data for slots
10
- [key: string]: any
11
- }
12
-
13
- export type AccordionVariant = 'default' | 'solid' | 'outline' | 'ghost' | 'separated' // Items have gaps between them
14
-
15
- export interface AccordionProps {
16
- items?: AccordionItemSchema[]
17
- modelValue?: string | string[]
18
- allowMultiple?: boolean
19
- defaultValue?: string | string[]
20
- disabled?: boolean
21
- variant?: AccordionVariant
22
-
23
- // Layout
24
- attached?: boolean
25
-
26
- // Icon Customization
27
- openIcon?: string
28
- closeIcon?: string
29
- iconPosition?: 'left' | 'right'
30
- iconVariant?: 'simple' | 'solid' | 'outline' | 'primary' | 'ghost'
31
- activeIconVariant?: 'simple' | 'solid' | 'outline' | 'primary' | 'ghost'
32
-
33
- // Numbering
34
- showIndex?: boolean
35
-
36
- // Classes for deep customization
37
- class?: string
38
- itemClass?: string
39
- triggerClass?: string
40
- contentClass?: string
41
- }
@@ -1,112 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed, ref } from 'vue'
3
- import Icon from './Icon.vue'
4
- import type { AlertVariant } from '@/types'
5
- import Button from './Button.vue'
6
-
7
- interface Props {
8
- title?: string
9
- description?: string
10
- icon?: string
11
- variant?: AlertVariant
12
- closable?: boolean
13
- role?: 'alert' | 'status' | 'none'
14
- class?: string
15
- }
16
-
17
- const props = withDefaults(defineProps<Props>(), {
18
- variant: 'primary',
19
- closable: false,
20
- class: '',
21
- })
22
-
23
- const emit = defineEmits<{
24
- (e: 'close'): void
25
- }>()
26
-
27
- const isVisible = ref(true)
28
-
29
- const handleClose = () => {
30
- isVisible.value = false
31
- emit('close')
32
- }
33
-
34
- const variantClasses = computed(() => {
35
- const variants: Record<AlertVariant, string> = {
36
- primary: 'bg-primary-light text-primary border-primary/15',
37
- success: 'bg-success-light text-success-dark border-success/25',
38
- warning: 'bg-warning-light text-warning-dark border-warning/20',
39
- danger: 'bg-danger-light text-danger-dark border-danger/15',
40
- }
41
- return variants[props.variant]
42
- })
43
-
44
- const iconClasses = computed(() => {
45
- const variants: Record<AlertVariant, string> = {
46
- primary: 'text-primary!',
47
- success: 'text-success-dark!',
48
- warning: 'text-warning-dark!',
49
- danger: 'text-danger-dark!',
50
- }
51
- return variants[props.variant]
52
- })
53
-
54
- const isTitleOnly = computed(() => !props.description && !useSlots().default)
55
-
56
- // Helper to check if default slot is present (requires import useSlots)
57
- import { useSlots } from 'vue'
58
-
59
- const containerClasses = computed(() => {
60
- return [
61
- 'relative w-full rounded-lg border px-4 [&>svg]:absolute [&>svg]:left-4 [&>svg]:text-foreground',
62
- isTitleOnly.value ? 'py-3' : 'pt-4 pb-2',
63
- // Icon Position: Center vertically if title only, otherwise top-4
64
- isTitleOnly.value
65
- ? '[&>svg]:top-1/2 [&>svg]:-translate-y-1/2'
66
- : '[&>svg]:top-4 top-4 [&>svg+div]:translate-y-[-3px]',
67
- variantClasses.value,
68
- props.class,
69
- ].join(' ')
70
- })
71
-
72
- const titleClasses = computed(() => {
73
- return [
74
- 'font-medium leading-none tracking-tight text-inherit!',
75
- isTitleOnly.value ? '' : 'mb-1',
76
- ].join(' ')
77
- })
78
-
79
- const computedRole = computed(() => {
80
- if (props.role) return props.role
81
- return ['danger', 'warning'].includes(props.variant) ? 'alert' : 'status'
82
- })
83
- </script>
84
-
85
- <template>
86
- <div v-if="isVisible" :class="containerClasses" :role="computedRole">
87
- <slot name="icon">
88
- <Icon v-if="icon" :icon="icon" class="h-4 w-4" :class="iconClasses" />
89
- </slot>
90
-
91
- <div :class="{ 'pl-7': icon || $slots.icon, 'pr-6': closable }">
92
- <h5 :class="titleClasses" v-if="title">
93
- {{ title }}
94
- </h5>
95
- <div v-if="description || $slots.default" class="text-sm opacity-90 [&_p]:leading-relaxed">
96
- <slot>
97
- {{ description }}
98
- </slot>
99
- </div>
100
- </div>
101
-
102
- <button
103
- v-if="closable"
104
- type="button"
105
- @click="handleClose"
106
- class="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2"
107
- :class="[isTitleOnly ? 'top-1/2 -translate-y-1/2' : 'top-4']">
108
- <Icon icon="lucide:x" class="h-4 w-4" />
109
- <span class="sr-only">Close</span>
110
- </button>
111
- </div>
112
- </template>
@@ -1,110 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed, ref, watch } from 'vue'
3
- import Icon from './Icon.vue'
4
- import type { AvatarSize, AvatarRounded } from '@/types'
5
-
6
- interface Props {
7
- src?: string
8
- alt?: string
9
- fallback?: string
10
- size?: AvatarSize
11
- rounded?: AvatarRounded
12
- class?: string
13
- }
14
-
15
- const props = withDefaults(defineProps<Props>(), {
16
- src: '',
17
- alt: 'Avatar',
18
- size: 'md',
19
- rounded: 'full',
20
- class: '',
21
- })
22
-
23
- const hasError = ref(false)
24
- const isLoaded = ref(false)
25
-
26
- // Reset state when src changes
27
- watch(
28
- () => props.src,
29
- () => {
30
- hasError.value = false
31
- isLoaded.value = false
32
- }
33
- )
34
-
35
- const onError = () => {
36
- hasError.value = true
37
- isLoaded.value = false
38
- }
39
-
40
- const onLoad = () => {
41
- isLoaded.value = true
42
- hasError.value = false
43
- }
44
-
45
- const showImage = computed(() => {
46
- return props.src && !hasError.value
47
- })
48
-
49
- const initials = computed(() => {
50
- if (props.fallback) return props.fallback
51
-
52
- if (!props.alt) return ''
53
-
54
- const words = props.alt.trim().split(/\s+/)
55
- if (words.length === 1) {
56
- return words[0].slice(0, 2).toUpperCase()
57
- }
58
- return (words[0][0] + words[words.length - 1][0]).toUpperCase()
59
- })
60
-
61
- const sizeClasses: Record<AvatarSize, string> = {
62
- xs: 'h-6 w-6 text-[10px]',
63
- sm: 'h-8 w-8 text-xs',
64
- md: 'h-10 w-10 text-sm',
65
- lg: 'h-14 w-14 text-base',
66
- xl: 'h-20 w-20 text-lg',
67
- '2xl': 'h-22 w-22 text-xl',
68
- }
69
-
70
- const roundedClasses: Record<AvatarRounded, string> = {
71
- none: 'rounded-none',
72
- sm: 'rounded-sm',
73
- md: 'rounded-md',
74
- lg: 'rounded-lg',
75
- xl: 'rounded-xl',
76
- '2xl': 'rounded-2xl',
77
- full: 'rounded-full',
78
- }
79
-
80
- const containerClass = computed(() => {
81
- return [
82
- 'relative flex shrink-0 overflow-hidden bg-muted border border-border/50',
83
- sizeClasses[props.size],
84
- roundedClasses[props.rounded],
85
- props.class,
86
- ].join(' ')
87
- })
88
-
89
- const fallbackClass = computed(() => {
90
- return 'flex h-full w-full items-center justify-center bg-muted text-muted-foreground font-medium'
91
- })
92
- </script>
93
-
94
- <template>
95
- <div :class="containerClass">
96
- <img
97
- v-if="showImage"
98
- :src="src"
99
- :alt="alt"
100
- class="aspect-square h-full w-full object-cover"
101
- @error="onError"
102
- @load="onLoad" />
103
- <div v-else :class="fallbackClass">
104
- <slot name="fallback">
105
- <span v-if="initials">{{ initials }}</span>
106
- <Icon v-else icon="lucide:user" class="h-1/2 w-1/2" />
107
- </slot>
108
- </div>
109
- </div>
110
- </template>
@@ -1,129 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed, ref } from 'vue'
3
- import Icon from '@/components/Icon.vue'
4
- import FilePicker from '@/components/FilePicker/FilePicker.vue'
5
- import type { FilePickerValue } from '@/components/FilePicker/FilePicker.vue'
6
- import Avatar from '@/components/Avatar.vue'
7
- import type { AvatarSize, AvatarRounded } from '@/types'
8
-
9
- defineOptions({
10
- name: 'AvatarUploader',
11
- })
12
-
13
- export interface Props {
14
- modelValue?: any
15
- size?: AvatarSize
16
- rounded?: AvatarRounded
17
- editable?: boolean
18
- loading?: boolean
19
- disabled?: boolean
20
- fallback?: string
21
- alt?: string
22
- maxSize?: number
23
- className?: string
24
- }
25
-
26
- const props = withDefaults(defineProps<Props>(), {
27
- modelValue: null,
28
- size: 'xl',
29
- rounded: 'full',
30
- editable: true,
31
- loading: false,
32
- disabled: false,
33
- alt: 'Avatar',
34
- })
35
-
36
- const emit = defineEmits<{
37
- (e: 'update:modelValue', value: string | null): void
38
- (e: 'change', value: FilePickerValue | null): void
39
- (e: 'error', error: string): void
40
- }>()
41
-
42
- const previewUrl = ref<string | null>(null)
43
-
44
- const currentImage = computed(() => {
45
- return previewUrl.value || props.modelValue
46
- })
47
-
48
- const handleFileChange = (fileVal: FilePickerValue | FilePickerValue[] | null) => {
49
- if (!fileVal || Array.isArray(fileVal)) {
50
- if (Array.isArray(fileVal) && fileVal.length === 0) {
51
- handleRemove()
52
- }
53
- return
54
- }
55
-
56
- if (fileVal.base64) {
57
- previewUrl.value = fileVal.base64
58
- emit('update:modelValue', fileVal.base64)
59
- }
60
-
61
- emit('change', fileVal)
62
- }
63
-
64
- const handleError = (err: string) => {
65
- emit('error', err)
66
- }
67
-
68
- const handleRemove = () => {
69
- previewUrl.value = null
70
- emit('update:modelValue', null)
71
- emit('change', null)
72
- }
73
- </script>
74
-
75
- <template>
76
- <div class="inline-block">
77
- <div
78
- class="relative inline-block group"
79
- :class="rounded === 'full' ? 'rounded-full' : 'rounded-md'">
80
- <Avatar
81
- :src="currentImage || undefined"
82
- :fallback="fallback"
83
- :alt="alt"
84
- :size="size"
85
- :rounded="rounded"
86
- :class="className" />
87
-
88
- <FilePicker
89
- :disabled="!editable || disabled || loading"
90
- :return-format="'base64'"
91
- :file-types="['image/jpeg', 'image/png', 'image/webp', 'image/gif']"
92
- :max-size="maxSize"
93
- class="absolute inset-0"
94
- @change="(v: any) => handleFileChange(v)"
95
- @error="handleError">
96
- <template #trigger="{ trigger, isLoading }">
97
- <button
98
- type="button"
99
- class="absolute inset-0 cursor-pointer"
100
- :class="{ 'cursor-default': !editable || disabled }"
101
- @click="editable && !disabled ? trigger() : null">
102
- <div
103
- v-if="loading || isLoading"
104
- class="absolute inset-0 flex items-center justify-center bg-black/40 text-white"
105
- :class="rounded === 'full' ? 'rounded-full' : 'rounded-md'">
106
- <Icon icon="lucide:loader-2" class="animate-spin w-1/3 h-1/3" />
107
- </div>
108
-
109
- <div
110
- v-else-if="editable && !disabled"
111
- class="absolute inset-0 flex items-center justify-center bg-black/40 text-white opacity-0 group-hover:opacity-100 transition-opacity"
112
- :class="rounded === 'full' ? 'rounded-full' : 'rounded-md'">
113
- <Icon icon="lucide:camera" class="w-1/3 h-1/3" />
114
- </div>
115
- </button>
116
- </template>
117
- </FilePicker>
118
-
119
- <button
120
- v-if="currentImage && editable && !disabled && !loading"
121
- type="button"
122
- class="absolute -top-1 -right-1 z-10 p-1 bg-background border border-border rounded-full text-muted-foreground shadow-sm hover:text-destructive hover:border-destructive transition-all opacity-0 group-hover:opacity-100 scale-75 group-hover:scale-100"
123
- @click.stop="handleRemove"
124
- title="Remove image">
125
- <Icon icon="lucide:x" class="w-3 h-3" />
126
- </button>
127
- </div>
128
- </div>
129
- </template>
@@ -1,45 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed } from 'vue'
3
-
4
- export type BadgeVariant =
5
- | 'default'
6
- | 'secondary'
7
- | 'danger'
8
- | 'outline'
9
- | 'warning'
10
- | 'info'
11
- | 'success'
12
-
13
- interface Props {
14
- variant?: BadgeVariant
15
- class?: string
16
- }
17
-
18
- const props = withDefaults(defineProps<Props>(), {
19
- variant: 'default',
20
- class: '',
21
- })
22
-
23
- const classes = computed(() => {
24
- const baseClasses =
25
- 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2'
26
-
27
- const variants: Record<BadgeVariant, string> = {
28
- default: 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',
29
- secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',
30
- danger: 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',
31
- warning: 'border-transparent bg-warning text-warning-fg hover:bg-warning/80',
32
- info: 'border-transparent bg-info text-info-fg hover:bg-info/80',
33
- success: 'border-transparent bg-success text-success-fg hover:bg-success/80',
34
- outline: 'text-foreground border-border',
35
- }
36
-
37
- return [baseClasses, variants[props.variant], props.class].join(' ')
38
- })
39
- </script>
40
-
41
- <template>
42
- <div :class="classes">
43
- <slot />
44
- </div>
45
- </template>
@@ -1,122 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed, useSlots } from 'vue'
3
- import Icon from './Icon.vue'
4
- import { vRipple } from '../directives/vRipple'
5
- import type { ButtonVariant, ButtonSize, ButtonRounded, ButtonProps } from '@/types'
6
-
7
- const props = withDefaults(defineProps<ButtonProps>(), {
8
- variant: 'primary',
9
- size: 'md',
10
- type: 'button',
11
- rounded: 'md',
12
- disabled: false,
13
- loading: false,
14
- class: '',
15
- })
16
-
17
- const slots = useSlots()
18
- const isOnlyIcon = computed(() => props.icon && !props.text && !slots.default)
19
-
20
- const classes = computed(() => {
21
- const baseClasses =
22
- 'inline-flex items-center justify-center whitespace-nowrap text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 active:scale-95 cursor-pointer'
23
-
24
- const variants: Record<ButtonVariant, string> = {
25
- primary: 'bg-primary text-primary-foreground hover:bg-primary/90',
26
- 'primary-light': 'bg-primary-light text-primary-fg-light hover:bg-primary/20',
27
- secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
28
- danger: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',
29
- 'danger-light': 'bg-destructive/10 text-destructive hover:bg-destructive/20',
30
- warning: 'bg-warning text-warning-fg hover:bg-warning/80',
31
- 'warning-light': 'bg-warning-light text-warning-fg-light hover:bg-warning/20',
32
- info: 'bg-info text-info-fg hover:bg-info/80',
33
- 'info-light': 'bg-info-light text-info-fg-light hover:bg-info/20',
34
- success: 'bg-success text-success-fg hover:bg-success/80',
35
- 'success-light': 'bg-success-light text-success-fg-light hover:bg-success/20',
36
-
37
- outline:
38
- 'border border-input bg-background hover:bg-accent hover:text-accent-foreground text-foreground',
39
- 'outline-primary': 'border border-primary text-primary hover:bg-primary/10',
40
- 'outline-danger': 'border border-destructive text-destructive hover:bg-destructive/10',
41
- 'outline-warning': 'border border-warning text-warning hover:bg-warning/10',
42
- 'outline-info': 'border border-info text-info hover:bg-info/10',
43
- 'outline-success': 'border border-success text-success hover:bg-success/10',
44
-
45
- ghost: 'hover:bg-accent hover:text-accent-foreground text-foreground',
46
- link: 'text-primary underline-offset-4 hover:underline',
47
- }
48
-
49
- const sizes: Record<ButtonSize, string> = {
50
- xs: 'h-6.5 px-2',
51
- sm: 'h-8 px-3',
52
- md: 'h-9 px-4 py-2',
53
- lg: 'h-10 px-8',
54
- xl: 'h-12 px-10',
55
- }
56
- const iconSizes: Record<ButtonSize, string> = {
57
- xs: 'h-6.5 w-6.5 min-h-6.5 min-w-6.5',
58
- sm: 'h-8 w-8 min-h-9 min-w-9',
59
- md: 'h-9 w-9 min-h-9 min-w-9',
60
- lg: 'h-10 w-10 min-h-11 min-w-11',
61
- xl: 'h-12 w-12 min-h-12 min-w-12',
62
- }
63
-
64
- const roundedVariants: Record<ButtonRounded, string> = {
65
- none: 'rounded-none',
66
- sm: 'rounded-sm',
67
- md: 'rounded',
68
- lg: 'rounded-lg',
69
- xl: 'rounded-xl',
70
- '2xl': 'rounded-2xl',
71
- full: 'rounded-full',
72
- }
73
-
74
- return [
75
- baseClasses,
76
- variants[props.variant],
77
- roundedVariants[props.rounded],
78
- isOnlyIcon.value ? iconSizes[props.size] : sizes[props.size],
79
- props.class,
80
- ].join(' ')
81
- })
82
-
83
- const iconClasses = computed(() => {
84
- const sizes: Record<ButtonSize, string> = {
85
- xs: 'w-3 h-3',
86
- sm: 'w-4 h-4',
87
- md: 'w-4 h-4',
88
- lg: 'w-4 h-4',
89
- xl: 'w-4 h-4',
90
- }
91
-
92
- return sizes[props.size]
93
- })
94
- </script>
95
-
96
- <template>
97
- <button v-ripple :type="type" :class="classes" :disabled="disabled || loading">
98
- <Icon
99
- v-if="loading"
100
- icon="lucide:loader-2"
101
- class="mr-2 animate-spin"
102
- :class="{ 'mr-0': isOnlyIcon, [iconClasses]: true }" />
103
-
104
- <!-- Icon logic: center if only icon -->
105
- <Icon
106
- v-else-if="icon"
107
- :icon="icon"
108
- :class="{
109
- 'mr-2': $slots.default || text,
110
- 'mx-auto': isOnlyIcon,
111
- [iconClasses]: true,
112
- }" />
113
-
114
- <slot>{{ text }}</slot>
115
-
116
- <Icon
117
- v-if="iconRight && !loading"
118
- :icon="iconRight"
119
- :class="iconClasses"
120
- class="ml-2 h-4 w-4" />
121
- </button>
122
- </template>