@indielayer/ui 1.0.9 → 1.1.0

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 (429) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +2 -2
  3. package/{src/exports/nuxt.js → exports/nuxt.mjs} +1 -1
  4. package/{lib → exports}/nuxt.plugin.js +1 -1
  5. package/lib/_virtual/_plugin-vue_export-helper.js +9 -0
  6. package/lib/common/icons.js +18 -0
  7. package/lib/common/utils.d.ts +4 -0
  8. package/lib/common/utils.js +25 -0
  9. package/lib/components/alert/Alert.theme.d.ts +10 -8
  10. package/lib/components/alert/Alert.theme.js +41 -0
  11. package/lib/components/alert/Alert.vue.d.ts +33 -7
  12. package/lib/components/alert/Alert.vue.js +9 -0
  13. package/lib/components/alert/Alert.vue2.js +62 -0
  14. package/lib/components/alert/Alert.vue3.js +8 -0
  15. package/lib/components/alert/index.d.ts +3 -0
  16. package/lib/components/avatar/Avatar.theme.d.ts +13 -7
  17. package/lib/components/avatar/Avatar.theme.js +25 -0
  18. package/lib/components/avatar/Avatar.vue.d.ts +32 -3
  19. package/lib/components/avatar/Avatar.vue.js +9 -0
  20. package/lib/components/avatar/Avatar.vue2.js +76 -0
  21. package/lib/components/avatar/Avatar.vue3.js +7 -0
  22. package/lib/components/avatar/index.d.ts +3 -0
  23. package/lib/components/badge/Badge.theme.d.ts +10 -8
  24. package/lib/components/badge/Badge.theme.js +12 -0
  25. package/lib/components/badge/Badge.vue.d.ts +54 -9
  26. package/lib/components/badge/Badge.vue.js +94 -0
  27. package/lib/components/badge/Badge.vue2.js +4 -0
  28. package/lib/components/badge/index.d.ts +3 -0
  29. package/lib/components/breadcrumbs/Breadcrumbs.theme.d.ts +10 -8
  30. package/lib/components/breadcrumbs/Breadcrumbs.theme.js +10 -0
  31. package/lib/components/breadcrumbs/Breadcrumbs.vue.d.ts +20 -6
  32. package/lib/components/breadcrumbs/Breadcrumbs.vue.js +79 -0
  33. package/lib/components/breadcrumbs/Breadcrumbs.vue2.js +4 -0
  34. package/lib/components/breadcrumbs/index.d.ts +3 -0
  35. package/lib/components/button/Button.theme.d.ts +12 -9
  36. package/lib/components/button/Button.theme.js +138 -0
  37. package/lib/components/button/Button.vue.d.ts +49 -8
  38. package/lib/components/button/Button.vue.js +9 -0
  39. package/lib/components/button/Button.vue2.js +115 -0
  40. package/lib/components/button/Button.vue3.js +8 -0
  41. package/lib/components/button/ButtonGroup.theme.d.ts +12 -5
  42. package/lib/components/button/ButtonGroup.theme.js +8 -0
  43. package/lib/components/button/ButtonGroup.vue.d.ts +44 -6
  44. package/lib/components/button/ButtonGroup.vue.js +9 -0
  45. package/lib/components/button/ButtonGroup.vue2.js +54 -0
  46. package/lib/components/button/ButtonGroup.vue3.js +7 -0
  47. package/lib/components/button/index.d.ts +6 -0
  48. package/lib/components/card/Card.theme.d.ts +10 -7
  49. package/lib/components/card/Card.theme.js +8 -0
  50. package/lib/components/card/Card.vue.d.ts +17 -1
  51. package/lib/components/card/Card.vue.js +31 -0
  52. package/lib/components/card/Card.vue2.js +4 -0
  53. package/lib/components/card/index.d.ts +3 -0
  54. package/lib/components/checkbox/Checkbox.theme.d.ts +13 -10
  55. package/lib/components/checkbox/Checkbox.theme.js +52 -0
  56. package/lib/components/checkbox/Checkbox.vue.d.ts +46 -7
  57. package/lib/components/checkbox/Checkbox.vue.js +9 -0
  58. package/lib/components/checkbox/Checkbox.vue2.js +108 -0
  59. package/lib/components/checkbox/Checkbox.vue3.js +6 -0
  60. package/lib/components/checkbox/index.d.ts +3 -0
  61. package/lib/components/collapse/Collapse.theme.d.ts +10 -9
  62. package/lib/components/collapse/Collapse.theme.js +10 -0
  63. package/lib/components/collapse/Collapse.vue.d.ts +32 -2
  64. package/lib/components/collapse/Collapse.vue.js +132 -0
  65. package/lib/components/collapse/Collapse.vue2.js +4 -0
  66. package/lib/components/collapse/index.d.ts +3 -0
  67. package/lib/components/container/Container.theme.d.ts +10 -6
  68. package/lib/components/container/Container.theme.js +8 -0
  69. package/lib/components/container/Container.vue.d.ts +16 -1
  70. package/lib/components/container/Container.vue.js +30 -0
  71. package/lib/components/container/Container.vue2.js +4 -0
  72. package/lib/components/container/index.d.ts +3 -0
  73. package/lib/components/divider/Divider.theme.d.ts +10 -9
  74. package/lib/components/divider/Divider.theme.js +10 -0
  75. package/lib/components/divider/Divider.vue.d.ts +7 -1
  76. package/lib/components/divider/Divider.vue.js +53 -0
  77. package/lib/components/divider/Divider.vue2.js +4 -0
  78. package/lib/components/divider/index.d.ts +3 -0
  79. package/lib/components/drawer/Drawer.theme.d.ts +10 -7
  80. package/lib/components/drawer/Drawer.theme.js +9 -0
  81. package/lib/components/drawer/Drawer.vue.d.ts +50 -14
  82. package/lib/components/drawer/Drawer.vue.js +171 -0
  83. package/lib/components/drawer/Drawer.vue2.js +4 -0
  84. package/lib/components/drawer/index.d.ts +3 -0
  85. package/lib/components/form/Form.theme.d.ts +10 -6
  86. package/lib/components/form/Form.theme.js +8 -0
  87. package/lib/components/form/Form.vue.d.ts +34 -6
  88. package/lib/components/form/Form.vue.js +79 -0
  89. package/lib/components/form/Form.vue2.js +4 -0
  90. package/lib/components/form/index.d.ts +3 -0
  91. package/lib/components/helpers/InputError.d.ts +2 -2
  92. package/lib/components/helpers/InputError.js +18 -0
  93. package/lib/components/icon/Icon.theme.d.ts +10 -7
  94. package/lib/components/icon/Icon.theme.js +11 -0
  95. package/lib/components/icon/Icon.vue.d.ts +22 -4
  96. package/lib/components/icon/Icon.vue.js +74 -0
  97. package/lib/components/icon/Icon.vue2.js +4 -0
  98. package/lib/components/icon/index.d.ts +3 -0
  99. package/lib/components/image/Image.theme.d.ts +10 -6
  100. package/lib/components/image/Image.theme.js +8 -0
  101. package/lib/components/image/Image.vue.d.ts +6 -1
  102. package/lib/components/image/Image.vue.js +32 -0
  103. package/lib/components/image/Image.vue2.js +4 -0
  104. package/lib/components/image/index.d.ts +3 -0
  105. package/lib/components/index.d.ts +35 -45
  106. package/lib/components/index.js +92 -0
  107. package/lib/components/input/Input.theme.d.ts +12 -10
  108. package/lib/components/input/Input.theme.js +21 -0
  109. package/lib/components/input/Input.vue.d.ts +73 -22
  110. package/lib/components/input/Input.vue.js +140 -0
  111. package/lib/components/input/Input.vue2.js +4 -0
  112. package/lib/components/input/index.d.ts +3 -0
  113. package/lib/components/link/Link.theme.d.ts +10 -8
  114. package/lib/components/link/Link.theme.js +25 -0
  115. package/lib/components/link/Link.vue.d.ts +25 -2
  116. package/lib/components/link/Link.vue.js +9 -0
  117. package/lib/components/link/Link.vue2.js +48 -0
  118. package/lib/components/link/Link.vue3.js +8 -0
  119. package/lib/components/link/index.d.ts +3 -0
  120. package/lib/components/menu/Menu.theme.d.ts +10 -6
  121. package/lib/components/menu/Menu.theme.js +8 -0
  122. package/lib/components/menu/Menu.vue.d.ts +62 -9
  123. package/lib/components/menu/Menu.vue.js +133 -0
  124. package/lib/components/menu/Menu.vue2.js +4 -0
  125. package/lib/components/menu/MenuItem.theme.d.ts +13 -7
  126. package/lib/components/menu/MenuItem.theme.js +86 -0
  127. package/lib/components/menu/MenuItem.vue.d.ts +63 -14
  128. package/lib/components/menu/MenuItem.vue.js +9 -0
  129. package/lib/components/menu/MenuItem.vue2.js +143 -0
  130. package/lib/components/menu/MenuItem.vue3.js +7 -0
  131. package/lib/components/menu/index.d.ts +6 -0
  132. package/lib/components/modal/Modal.theme.d.ts +10 -13
  133. package/lib/components/modal/Modal.theme.js +17 -0
  134. package/lib/components/modal/Modal.vue.d.ts +24 -2
  135. package/lib/components/modal/Modal.vue.js +127 -0
  136. package/lib/components/modal/Modal.vue2.js +4 -0
  137. package/lib/components/modal/index.d.ts +3 -0
  138. package/lib/components/notifications/Notifications.theme.d.ts +10 -8
  139. package/lib/components/notifications/Notifications.theme.js +10 -0
  140. package/lib/components/notifications/Notifications.vue.d.ts +56 -16
  141. package/lib/components/notifications/Notifications.vue.js +234 -0
  142. package/lib/components/notifications/Notifications.vue2.js +4 -0
  143. package/lib/components/notifications/index.d.ts +3 -0
  144. package/lib/components/pagination/Pagination.theme.d.ts +10 -9
  145. package/lib/components/pagination/Pagination.theme.js +13 -0
  146. package/lib/components/pagination/Pagination.vue.d.ts +28 -5
  147. package/lib/components/pagination/Pagination.vue.js +131 -0
  148. package/lib/components/pagination/Pagination.vue2.js +4 -0
  149. package/lib/components/pagination/PaginationItem.theme.d.ts +10 -7
  150. package/lib/components/pagination/PaginationItem.theme.js +8 -0
  151. package/lib/components/pagination/PaginationItem.vue.d.ts +17 -2
  152. package/lib/components/pagination/PaginationItem.vue.js +48 -0
  153. package/lib/components/pagination/PaginationItem.vue2.js +4 -0
  154. package/lib/components/pagination/index.d.ts +6 -0
  155. package/lib/components/popover/Popover.theme.d.ts +10 -7
  156. package/lib/components/popover/Popover.theme.js +9 -0
  157. package/lib/components/popover/Popover.vue.d.ts +48 -10
  158. package/lib/components/popover/Popover.vue.js +9 -0
  159. package/lib/components/popover/Popover.vue2.js +106 -0
  160. package/lib/components/popover/Popover.vue3.js +15 -0
  161. package/lib/components/popover/PopoverContainer.theme.d.ts +10 -6
  162. package/lib/components/popover/PopoverContainer.theme.js +8 -0
  163. package/lib/components/popover/PopoverContainer.vue.d.ts +16 -1
  164. package/lib/components/popover/PopoverContainer.vue.js +30 -0
  165. package/lib/components/popover/PopoverContainer.vue2.js +4 -0
  166. package/lib/components/popover/index.d.ts +6 -0
  167. package/lib/components/progress/Progress.theme.d.ts +10 -10
  168. package/lib/components/progress/Progress.theme.js +18 -0
  169. package/lib/components/progress/Progress.vue.d.ts +21 -2
  170. package/lib/components/progress/Progress.vue.js +51 -0
  171. package/lib/components/progress/Progress.vue2.js +4 -0
  172. package/lib/components/progress/index.d.ts +3 -0
  173. package/lib/components/radio/Radio.theme.d.ts +13 -11
  174. package/lib/components/radio/Radio.theme.js +67 -0
  175. package/lib/components/radio/Radio.vue.d.ts +48 -9
  176. package/lib/components/radio/Radio.vue.js +9 -0
  177. package/lib/components/radio/Radio.vue2.js +117 -0
  178. package/lib/components/radio/Radio.vue3.js +10 -0
  179. package/lib/components/radio/index.d.ts +3 -0
  180. package/lib/components/scroll/Scroll.theme.d.ts +10 -6
  181. package/lib/components/scroll/Scroll.theme.js +8 -0
  182. package/lib/components/scroll/Scroll.vue.d.ts +20 -2
  183. package/lib/components/scroll/Scroll.vue.js +9 -0
  184. package/lib/components/scroll/Scroll.vue2.js +64 -0
  185. package/lib/components/scroll/Scroll.vue3.js +17 -0
  186. package/lib/components/scroll/index.d.ts +3 -0
  187. package/lib/components/select/Select.theme.d.ts +13 -12
  188. package/lib/components/select/Select.theme.js +23 -0
  189. package/lib/components/select/Select.vue.d.ts +44 -8
  190. package/lib/components/select/Select.vue.js +269 -0
  191. package/lib/components/select/Select.vue2.js +4 -0
  192. package/lib/components/select/index.d.ts +3 -0
  193. package/lib/components/skeleton/Skeleton.theme.d.ts +10 -6
  194. package/lib/components/skeleton/Skeleton.theme.js +8 -0
  195. package/lib/components/skeleton/Skeleton.vue.d.ts +9 -1
  196. package/lib/components/skeleton/Skeleton.vue.js +30 -0
  197. package/lib/components/skeleton/Skeleton.vue2.js +4 -0
  198. package/lib/components/skeleton/index.d.ts +3 -0
  199. package/lib/components/slider/Slider.theme.d.ts +10 -10
  200. package/lib/components/slider/Slider.theme.js +20 -0
  201. package/lib/components/slider/Slider.vue.d.ts +55 -7
  202. package/lib/components/slider/Slider.vue.js +148 -0
  203. package/lib/components/slider/Slider.vue2.js +4 -0
  204. package/lib/components/slider/index.d.ts +2 -0
  205. package/lib/components/spacer/Spacer.d.ts +1 -1
  206. package/lib/components/spacer/Spacer.js +12 -0
  207. package/lib/components/spacer/index.d.ts +1 -0
  208. package/lib/components/spinner/Spinner.vue.d.ts +14 -1
  209. package/lib/components/spinner/Spinner.vue.js +28 -0
  210. package/lib/components/spinner/Spinner.vue2.js +4 -0
  211. package/lib/components/spinner/index.d.ts +2 -0
  212. package/lib/components/tab/Tab.theme.d.ts +12 -9
  213. package/lib/components/tab/Tab.theme.js +13 -0
  214. package/lib/components/tab/Tab.vue.d.ts +44 -9
  215. package/lib/components/tab/Tab.vue.js +129 -0
  216. package/lib/components/tab/Tab.vue2.js +4 -0
  217. package/lib/components/tab/TabGroup.theme.d.ts +10 -10
  218. package/lib/components/tab/TabGroup.theme.js +27 -0
  219. package/lib/components/tab/TabGroup.vue.d.ts +61 -9
  220. package/lib/components/tab/TabGroup.vue.js +133 -0
  221. package/lib/components/tab/TabGroup.vue2.js +4 -0
  222. package/lib/components/tab/index.d.ts +4 -0
  223. package/lib/components/table/Table.theme.d.ts +10 -8
  224. package/lib/components/table/Table.theme.js +12 -0
  225. package/lib/components/table/Table.vue.d.ts +269 -51
  226. package/lib/components/table/Table.vue.js +147 -0
  227. package/lib/components/table/Table.vue2.js +4 -0
  228. package/lib/components/table/TableBody.d.ts +1 -1
  229. package/lib/components/table/TableBody.js +15 -0
  230. package/lib/components/table/TableCell.theme.d.ts +10 -7
  231. package/lib/components/table/TableCell.theme.js +11 -0
  232. package/lib/components/table/TableCell.vue.d.ts +35 -6
  233. package/lib/components/table/TableCell.vue.js +43 -0
  234. package/lib/components/table/TableCell.vue2.js +4 -0
  235. package/lib/components/table/TableHead.d.ts +1 -1
  236. package/lib/components/table/TableHead.js +19 -0
  237. package/lib/components/table/TableHeader.vue.d.ts +34 -9
  238. package/lib/components/table/TableHeader.vue.js +78 -0
  239. package/lib/components/table/TableHeader.vue2.js +4 -0
  240. package/lib/components/table/TableRow.vue.d.ts +8 -1
  241. package/lib/components/table/TableRow.vue.js +32 -0
  242. package/lib/components/table/TableRow.vue2.js +4 -0
  243. package/lib/components/table/index.d.ts +9 -0
  244. package/lib/components/tag/Tag.theme.d.ts +10 -9
  245. package/lib/components/tag/Tag.theme.js +23 -0
  246. package/lib/components/tag/Tag.vue.d.ts +31 -4
  247. package/lib/components/tag/Tag.vue.js +61 -0
  248. package/lib/components/tag/Tag.vue2.js +4 -0
  249. package/lib/components/tag/index.d.ts +2 -0
  250. package/lib/components/textarea/Textarea.theme.d.ts +13 -9
  251. package/lib/components/textarea/Textarea.theme.js +16 -0
  252. package/lib/components/textarea/Textarea.vue.d.ts +59 -17
  253. package/lib/components/textarea/Textarea.vue.js +110 -0
  254. package/lib/components/textarea/Textarea.vue2.js +4 -0
  255. package/lib/components/textarea/index.d.ts +2 -0
  256. package/lib/components/toggle/Toggle.theme.d.ts +10 -11
  257. package/lib/components/toggle/Toggle.theme.js +29 -0
  258. package/lib/components/toggle/Toggle.vue.d.ts +39 -7
  259. package/lib/components/toggle/Toggle.vue.js +110 -0
  260. package/lib/components/toggle/Toggle.vue2.js +4 -0
  261. package/lib/components/toggle/index.d.ts +2 -0
  262. package/lib/components/tooltip/Tooltip.vue.d.ts +12 -1
  263. package/lib/components/tooltip/Tooltip.vue.js +27 -0
  264. package/lib/components/tooltip/Tooltip.vue2.js +4 -0
  265. package/lib/components/tooltip/index.d.ts +2 -0
  266. package/lib/composables/colors-utils.js +19 -0
  267. package/lib/composables/colors.d.ts +6 -4
  268. package/lib/composables/colors.js +52 -0
  269. package/lib/composables/common.d.ts +1 -1
  270. package/lib/composables/common.js +17 -0
  271. package/lib/composables/css.d.ts +1 -1
  272. package/lib/composables/css.js +26 -0
  273. package/lib/composables/inputtable.d.ts +4 -4
  274. package/lib/composables/inputtable.js +78 -0
  275. package/lib/composables/interactive.js +17 -0
  276. package/lib/composables/keys.d.ts +6 -3
  277. package/lib/composables/keys.js +10 -0
  278. package/lib/composables/notifications.d.ts +1 -1
  279. package/lib/composables/notifications.js +9 -0
  280. package/lib/composables/theme.d.ts +13 -7
  281. package/lib/composables/theme.js +59 -0
  282. package/lib/create.d.ts +1 -1
  283. package/lib/create.js +19 -0
  284. package/lib/index.js +121 -0
  285. package/lib/index.umd.js +1 -0
  286. package/lib/install.js +10 -0
  287. package/lib/node_modules/.pnpm/@vueuse_core@10.2.0_vue@3.3.4/node_modules/@vueuse/core/index.js +379 -0
  288. package/lib/node_modules/.pnpm/@vueuse_shared@10.2.0_vue@3.3.4/node_modules/@vueuse/shared/index.js +90 -0
  289. package/lib/version.d.ts +1 -1
  290. package/lib/version.js +4 -0
  291. package/package.json +54 -54
  292. package/src/common/utils.ts +25 -2
  293. package/src/components/alert/Alert.theme.ts +15 -6
  294. package/src/components/alert/Alert.vue +26 -13
  295. package/src/components/alert/index.ts +3 -0
  296. package/src/components/avatar/Avatar.theme.ts +16 -4
  297. package/src/components/avatar/Avatar.vue +20 -15
  298. package/src/components/avatar/index.ts +3 -0
  299. package/src/components/badge/Badge.theme.ts +13 -3
  300. package/src/components/badge/Badge.vue +30 -15
  301. package/src/components/badge/index.ts +3 -0
  302. package/src/components/breadcrumbs/Breadcrumbs.theme.ts +12 -2
  303. package/src/components/breadcrumbs/Breadcrumbs.vue +24 -21
  304. package/src/components/breadcrumbs/index.ts +3 -0
  305. package/src/components/button/Button.theme.ts +23 -19
  306. package/src/components/button/Button.vue +30 -19
  307. package/src/components/button/ButtonGroup.theme.ts +14 -1
  308. package/src/components/button/ButtonGroup.vue +33 -19
  309. package/src/components/button/index.ts +7 -0
  310. package/src/components/card/Card.theme.ts +13 -3
  311. package/src/components/card/Card.vue +12 -7
  312. package/src/components/card/index.ts +3 -0
  313. package/src/components/checkbox/Checkbox.theme.ts +19 -7
  314. package/src/components/checkbox/Checkbox.vue +21 -12
  315. package/src/components/checkbox/index.ts +3 -0
  316. package/src/components/collapse/Collapse.theme.ts +13 -3
  317. package/src/components/collapse/Collapse.vue +28 -24
  318. package/src/components/collapse/index.ts +3 -0
  319. package/src/components/container/Container.theme.ts +12 -2
  320. package/src/components/container/Container.vue +11 -6
  321. package/src/components/container/index.ts +3 -0
  322. package/src/components/divider/Divider.theme.ts +13 -3
  323. package/src/components/divider/Divider.vue +9 -4
  324. package/src/components/divider/index.ts +3 -0
  325. package/src/components/drawer/Drawer.theme.ts +12 -2
  326. package/src/components/drawer/Drawer.vue +50 -41
  327. package/src/components/drawer/index.ts +3 -0
  328. package/src/components/form/Form.theme.ts +12 -2
  329. package/src/components/form/Form.vue +40 -31
  330. package/src/components/form/index.ts +3 -0
  331. package/src/components/helpers/InputError.tsx +2 -2
  332. package/src/components/icon/Icon.theme.ts +13 -3
  333. package/src/components/icon/Icon.vue +24 -15
  334. package/src/components/icon/__tests__/Icon.spec.ts +5 -1
  335. package/src/components/icon/index.ts +3 -0
  336. package/src/components/image/Image.theme.ts +12 -2
  337. package/src/components/image/Image.vue +8 -4
  338. package/src/components/image/index.ts +3 -0
  339. package/src/components/index.ts +35 -45
  340. package/src/components/input/Input.theme.ts +17 -6
  341. package/src/components/input/Input.vue +33 -22
  342. package/src/components/input/index.ts +3 -0
  343. package/src/components/link/Link.theme.ts +13 -3
  344. package/src/components/link/Link.vue +20 -12
  345. package/src/components/link/index.ts +3 -0
  346. package/src/components/menu/Menu.theme.ts +12 -2
  347. package/src/components/menu/Menu.vue +59 -23
  348. package/src/components/menu/MenuItem.theme.ts +17 -5
  349. package/src/components/menu/MenuItem.vue +65 -52
  350. package/src/components/menu/index.ts +7 -0
  351. package/src/components/modal/Modal.theme.ts +13 -3
  352. package/src/components/modal/Modal.vue +23 -12
  353. package/src/components/modal/index.ts +3 -0
  354. package/src/components/notifications/Notifications.theme.ts +12 -2
  355. package/src/components/notifications/Notifications.vue +53 -49
  356. package/src/components/notifications/index.ts +9 -0
  357. package/src/components/pagination/Pagination.theme.ts +15 -5
  358. package/src/components/pagination/Pagination.vue +24 -18
  359. package/src/components/pagination/PaginationItem.theme.ts +13 -3
  360. package/src/components/pagination/PaginationItem.vue +14 -10
  361. package/src/components/pagination/index.ts +7 -0
  362. package/src/components/popover/Popover.theme.ts +12 -2
  363. package/src/components/popover/Popover.vue +56 -46
  364. package/src/components/popover/PopoverContainer.theme.ts +12 -2
  365. package/src/components/popover/PopoverContainer.vue +11 -6
  366. package/src/components/popover/index.ts +7 -0
  367. package/src/components/progress/Progress.theme.ts +14 -4
  368. package/src/components/progress/Progress.vue +16 -16
  369. package/src/components/progress/index.ts +3 -0
  370. package/src/components/radio/Radio.theme.ts +19 -7
  371. package/src/components/radio/Radio.vue +24 -14
  372. package/src/components/radio/index.ts +3 -0
  373. package/src/components/scroll/Scroll.theme.ts +12 -2
  374. package/src/components/scroll/Scroll.vue +37 -26
  375. package/src/components/scroll/index.ts +3 -0
  376. package/src/components/select/Select.theme.ts +20 -6
  377. package/src/components/select/Select.vue +28 -20
  378. package/src/components/select/index.ts +3 -0
  379. package/src/components/skeleton/Skeleton.theme.ts +12 -2
  380. package/src/components/skeleton/Skeleton.vue +11 -6
  381. package/src/components/skeleton/index.ts +3 -0
  382. package/src/components/slider/Slider.theme.ts +14 -4
  383. package/src/components/slider/Slider.vue +24 -16
  384. package/src/components/slider/index.ts +2 -0
  385. package/src/components/spacer/index.ts +1 -0
  386. package/src/components/spinner/Spinner.vue +18 -8
  387. package/src/components/spinner/index.ts +2 -0
  388. package/src/components/tab/Tab.theme.ts +15 -3
  389. package/src/components/tab/Tab.vue +85 -68
  390. package/src/components/tab/TabGroup.theme.ts +15 -5
  391. package/src/components/tab/TabGroup.vue +67 -22
  392. package/src/components/tab/index.ts +5 -0
  393. package/src/components/table/Table.theme.ts +14 -4
  394. package/src/components/table/Table.vue +41 -31
  395. package/src/components/table/TableCell.theme.ts +13 -3
  396. package/src/components/table/TableCell.vue +22 -16
  397. package/src/components/table/TableHeader.vue +20 -17
  398. package/src/components/table/TableRow.vue +1 -1
  399. package/src/components/table/index.ts +10 -0
  400. package/src/components/tag/Tag.theme.ts +14 -4
  401. package/src/components/tag/Tag.vue +22 -13
  402. package/src/components/tag/index.ts +2 -0
  403. package/src/components/textarea/Textarea.theme.ts +18 -30
  404. package/src/components/textarea/Textarea.vue +28 -19
  405. package/src/components/textarea/index.ts +2 -0
  406. package/src/components/toggle/Toggle.theme.ts +16 -6
  407. package/src/components/toggle/Toggle.vue +21 -12
  408. package/src/components/toggle/index.ts +2 -0
  409. package/src/components/tooltip/Tooltip.vue +5 -0
  410. package/src/components/tooltip/index.ts +2 -0
  411. package/src/composables/colors-utils.ts +4 -346
  412. package/src/composables/colors.ts +21 -17
  413. package/src/composables/common.ts +1 -1
  414. package/src/composables/css.ts +4 -4
  415. package/src/composables/inputtable.ts +8 -8
  416. package/src/composables/interactive.ts +2 -2
  417. package/src/composables/keys.ts +6 -3
  418. package/src/composables/theme.ts +30 -27
  419. package/src/create.ts +6 -7
  420. package/src/version.ts +1 -1
  421. package/volar.d.ts +0 -2
  422. package/lib/components/tooltip/Tooltip.theme.d.ts +0 -11
  423. package/lib/index.cjs.js +0 -1
  424. package/lib/index.es.js +0 -7184
  425. package/lib/nuxt.js +0 -33
  426. package/src/components/tooltip/Tooltip.theme.ts +0 -51
  427. package/src/exports/nuxt.plugin.js +0 -8
  428. package/src/exports/tailwind.preset.js +0 -55
  429. /package/{lib → exports}/tailwind.preset.js +0 -0
@@ -1,9 +1,28 @@
1
1
  <script lang="ts">
2
- export default { name: 'XAlert' }
2
+ const alertType = ['info', 'success', 'error', 'warning'] as const
3
+ const alertProps = {
4
+ ...useColors.props(),
5
+ type: String as PropType<AlertType>,
6
+ glow: Boolean,
7
+ light: Boolean,
8
+ outlined: Boolean,
9
+ removable: Boolean,
10
+ closeLabel: String,
11
+ }
12
+
13
+ export type AlertType = typeof alertType[number]
14
+ export type AlertProps = ExtractPublicPropTypes<typeof alertProps>
15
+
16
+ export default {
17
+ name: 'XAlert',
18
+ validators: {
19
+ type: alertType,
20
+ },
21
+ }
3
22
  </script>
4
23
 
5
24
  <script setup lang="ts">
6
- import { computed, type PropType } from 'vue'
25
+ import { computed, type ExtractPublicPropTypes, type PropType } from 'vue'
7
26
  import { useColors } from '../../composables/colors'
8
27
  import { useTheme } from '../../composables/theme'
9
28
  import { closeIcon, successIcon, errorIcon, warningIcon, infoIcon } from '../../common/icons'
@@ -12,14 +31,7 @@ import XIcon from '../icon/Icon.vue'
12
31
 
13
32
  import theme from './Alert.theme'
14
33
 
15
- const props = defineProps({
16
- ...useColors.props(),
17
- type: String as PropType<'info' | 'success' | 'error' | 'warning' | undefined>,
18
- glow: Boolean,
19
- light: Boolean,
20
- outlined: Boolean,
21
- removable: Boolean,
22
- })
34
+ const props = defineProps(alertProps)
23
35
 
24
36
  defineEmits(['remove'])
25
37
 
@@ -60,11 +72,11 @@ const { styles, classes, className } = useTheme('alert', theme, props)
60
72
 
61
73
  <template v-if="removable">
62
74
  <div class="flex-grow"></div>
63
- <span class="flex items-center cursor-pointer shrink-0" @click="(e: Event) => $emit('remove', e)">
75
+ <button class="shrink-0" :aria-label="closeLabel" @click="(e: Event) => $emit('remove', e)">
64
76
  <slot name="removeIcon">
65
77
  <x-icon :icon="closeIcon"/>
66
78
  </slot>
67
- </span>
79
+ </button>
68
80
  </template>
69
81
  </div>
70
82
  </template>
@@ -79,7 +91,8 @@ const { styles, classes, className } = useTheme('alert', theme, props)
79
91
  box-shadow: 0 0 #000, 0 0 #000, 0 10px 15px -3px var(--x-alert-glow), 0 4px 6px -4px var(--x-alert-glow);
80
92
  }
81
93
 
82
- :global(.dark) &, &:global(.dark) {
94
+ :global(.dark) &,
95
+ &:global(.dark) {
83
96
  color: var(--x-alert-dark-text, var(--x-alert-text));
84
97
  background-color: var(--x-alert-dark-bg, var(--x-alert-bg));
85
98
  border-color: var(--x-alert-dark-border, var(--x-alert-border));
@@ -0,0 +1,3 @@
1
+ export { default as XAlert } from './Alert.vue'
2
+ export type { AlertProps, AlertType } from './Alert.vue'
3
+ export type { AlertTheme } from './Alert.theme'
@@ -1,8 +1,18 @@
1
- import type { ThemeParams } from '../../composables/theme'
1
+ import type { Ref } from 'vue'
2
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
3
+ import type { AvatarProps } from './Avatar.vue'
2
4
 
3
- export default {
5
+ type InternalClasses = 'wrapper'
6
+ type InternalExtraData = { source: Ref<string | undefined>; }
7
+
8
+ interface InternalTheme extends ThemeComponent<AvatarProps, InternalClasses, InternalExtraData> {}
9
+ export interface AvatarTheme extends Omit<InternalTheme, 'classes'> {
10
+ classes?: Partial<ThemeClasses<AvatarProps, InternalClasses, InternalExtraData>>;
11
+ }
12
+
13
+ const theme: InternalTheme = {
4
14
  classes: {
5
- wrapper({ props }: ThemeParams) {
15
+ wrapper({ props }) {
6
16
  const classes = ['relative inline-flex items-center justify-center overflow-hidden align-middle border box-content']
7
17
 
8
18
  // radius
@@ -19,7 +29,7 @@ export default {
19
29
  },
20
30
  },
21
31
 
22
- styles({ props, colors, css, data }: ThemeParams) {
32
+ styles({ props, colors, css, data }) {
23
33
  const color = colors.getPalette(props.color)
24
34
 
25
35
  if (data.source) return css.variables({
@@ -37,3 +47,5 @@ export default {
37
47
  })
38
48
  },
39
49
  }
50
+
51
+ export default theme
@@ -1,4 +1,20 @@
1
1
  <script lang="ts">
2
+ const avatarProps = {
3
+ ...useCommon.props(),
4
+ ...useColors.props('primary'),
5
+ tag: {
6
+ type: String,
7
+ default: 'div',
8
+ },
9
+ name: String,
10
+ alt: String,
11
+ image: String,
12
+ outlined: Boolean,
13
+ rounded: Boolean,
14
+ }
15
+
16
+ export type AvatarProps = ExtractPublicPropTypes<typeof avatarProps>
17
+
2
18
  export default {
3
19
  name: 'XAvatar',
4
20
  validators: useCommon.validators(),
@@ -6,7 +22,7 @@ export default {
6
22
  </script>
7
23
 
8
24
  <script setup lang="ts">
9
- import { computed, ref, watch } from 'vue'
25
+ import { computed, ref, watch, type ExtractPublicPropTypes } from 'vue'
10
26
  import { useCommon } from '../../composables/common'
11
27
  import { useColors } from '../../composables/colors'
12
28
  import { useTheme } from '../../composables/theme'
@@ -16,19 +32,7 @@ import XIcon from '../../components/icon/Icon.vue'
16
32
 
17
33
  import theme from './Avatar.theme'
18
34
 
19
- const props = defineProps({
20
- ...useCommon.props(),
21
- ...useColors.props('primary'),
22
- tag: {
23
- type: String,
24
- default: 'div',
25
- },
26
- name: String,
27
- alt: String,
28
- image: String,
29
- outlined: Boolean,
30
- rounded: Boolean,
31
- })
35
+ const props = defineProps(avatarProps)
32
36
 
33
37
  const source = ref<string>()
34
38
  const initials = computed(() => {
@@ -92,7 +96,8 @@ const { styles, classes, className } = useTheme('avatar', theme, props, { source
92
96
  background-color: var(--x-avatar-bg);
93
97
  border-color: var(--x-avatar-border);
94
98
 
95
- :global(.dark) &, &:global(.dark) {
99
+ :global(.dark) &,
100
+ &:global(.dark) {
96
101
  color: var(--x-avatar-dark-text, var(--x-avatar-text));
97
102
  background-color: var(--x-avatar-dark-bg, var(--x-avatar-bg));
98
103
  border-color: var(--x-avatar-dark-border, var(--x-avatar-border));
@@ -0,0 +1,3 @@
1
+ export { default as XAvatar } from './Avatar.vue'
2
+ export type { AvatarProps } from './Avatar.vue'
3
+ export type { AvatarTheme } from './Avatar.theme'
@@ -1,13 +1,23 @@
1
- import type { ThemeParams } from '../../composables/theme'
1
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
2
+ import type { BadgeProps } from './Badge.vue'
2
3
 
3
- export default {
4
+ type InternalClasses = 'wrapper'
5
+
6
+ interface InternalTheme extends ThemeComponent<BadgeProps, InternalClasses> {}
7
+ export interface BadgeTheme extends Omit<InternalTheme, 'classes'> {
8
+ classes?: Partial<ThemeClasses<BadgeProps, InternalClasses>>;
9
+ }
10
+
11
+ const theme: InternalTheme = {
4
12
  classes: {
5
13
  wrapper: 'inline-block',
6
14
  },
7
15
 
8
- styles({ props, colors, css }: ThemeParams) {
16
+ styles({ props, colors, css }) {
9
17
  const color = colors.getPalette(props.color)
10
18
 
11
19
  return css.get('bg', color[500])
12
20
  },
13
21
  }
22
+
23
+ export default theme
@@ -1,16 +1,7 @@
1
1
  <script lang="ts">
2
- export default { name: 'XBadge' }
3
- </script>
4
-
5
- <script setup lang="ts">
6
- import { computed, useSlots, type PropType } from 'vue'
7
- import { useTheme } from '../../composables/theme'
8
- import { useCommon } from '../../composables/common'
9
- import { useColors } from '../../composables/colors'
10
-
11
- import theme from './Badge.theme'
12
-
13
- const props = defineProps({
2
+ const badgeAlign = ['left', 'right'] as const
3
+ const badgePosition = ['top', 'bottom'] as const
4
+ const badgeProps = {
14
5
  ...useCommon.props(),
15
6
  ...useColors.props('primary'),
16
7
  tag: {
@@ -18,11 +9,11 @@ const props = defineProps({
18
9
  default: 'div',
19
10
  },
20
11
  position: {
21
- type: String as PropType<'top' | 'bottom'>,
12
+ type: String as PropType<BadgePosition>,
22
13
  default: 'top',
23
14
  },
24
15
  align: {
25
- type: String as PropType<'left' | 'right'>,
16
+ type: String as PropType<BadgeAlign>,
26
17
  default: 'right',
27
18
  },
28
19
  offsetX: [Number, String],
@@ -34,7 +25,31 @@ const props = defineProps({
34
25
  type: Boolean,
35
26
  default: true,
36
27
  },
37
- })
28
+ }
29
+
30
+ export type BadgePosition = typeof badgePosition[number]
31
+ export type BadgeAlign = typeof badgeAlign[number]
32
+ export type BadgeProps = ExtractPublicPropTypes<typeof badgeProps>
33
+
34
+ export default {
35
+ name: 'XBadge',
36
+ validators: {
37
+ ...useCommon.validators(),
38
+ position: badgePosition,
39
+ align: badgeAlign,
40
+ },
41
+ }
42
+ </script>
43
+
44
+ <script setup lang="ts">
45
+ import { computed, useSlots, type PropType, type ExtractPublicPropTypes } from 'vue'
46
+ import { useTheme } from '../../composables/theme'
47
+ import { useCommon } from '../../composables/common'
48
+ import { useColors } from '../../composables/colors'
49
+
50
+ import theme from './Badge.theme'
51
+
52
+ const props = defineProps(badgeProps)
38
53
 
39
54
  const slots = useSlots()
40
55
 
@@ -0,0 +1,3 @@
1
+ export { default as XBadge } from './Badge.vue'
2
+ export type { BadgeProps, BadgeAlign, BadgePosition } from './Badge.vue'
3
+ export type { BadgeTheme } from './Badge.theme'
@@ -1,9 +1,19 @@
1
- import type { ThemeParams } from '../../composables/theme'
1
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
2
+ import type { BreadcrumbsProps } from './Breadcrumbs.vue'
2
3
 
3
- export default {
4
+ type InternalClasses = 'wrapper' | 'item' | 'lastItem'
5
+
6
+ interface InternalTheme extends ThemeComponent<BreadcrumbsProps, InternalClasses> {}
7
+ export interface BreadcrumbsTheme extends Omit<InternalTheme, 'classes'> {
8
+ classes?: Partial<ThemeClasses<BreadcrumbsProps, InternalClasses>>;
9
+ }
10
+
11
+ const theme: InternalTheme = {
4
12
  classes: {
5
13
  wrapper: 'flex items-center flex-wrap',
6
14
  item: 'flex items-center',
7
15
  lastItem: 'font-semibold',
8
16
  },
9
17
  }
18
+
19
+ export default theme
@@ -1,9 +1,31 @@
1
1
  <script lang="ts">
2
+ const breadcrumbsProps = {
3
+ ...useColors.props(),
4
+ items: Array as PropType<BreadcrumbsItem[]>,
5
+ icon: {
6
+ type: String,
7
+ default: arrowRightIcon,
8
+ },
9
+ shadow: Boolean,
10
+ underline: Boolean,
11
+ }
12
+
13
+ export type BreadcrumbsItem = {
14
+ label: string;
15
+ to?: string | object;
16
+ href?: string;
17
+ color?: string;
18
+ icon?: string;
19
+ shadow?: boolean;
20
+ underline?: boolean;
21
+ }
22
+ export type BreadcrumbsProps = ExtractPublicPropTypes<typeof breadcrumbsProps>
23
+
2
24
  export default { name: 'XBreadcrumbs' }
3
25
  </script>
4
26
 
5
27
  <script setup lang="ts">
6
- import { computed, type PropType } from 'vue'
28
+ import { computed, type ExtractPublicPropTypes, type PropType } from 'vue'
7
29
  import { useTheme } from '../../composables/theme'
8
30
  import { arrowRightIcon } from '../../common/icons'
9
31
  import { useColors } from '../../composables/colors'
@@ -13,26 +35,7 @@ import XLink from '../../components/link/Link.vue'
13
35
 
14
36
  import theme from './Breadcrumbs.theme'
15
37
 
16
- export type BreadcrumbItem = {
17
- label: string,
18
- to?: string | object,
19
- href?: string,
20
- color?: string,
21
- icon?: string,
22
- shadow?: boolean,
23
- underline?: boolean
24
- }
25
-
26
- const props = defineProps({
27
- ...useColors.props(),
28
- items: Array as PropType<Array<BreadcrumbItem>>,
29
- icon: {
30
- type: String,
31
- default: arrowRightIcon,
32
- },
33
- shadow: Boolean,
34
- underline: Boolean,
35
- })
38
+ const props = defineProps(breadcrumbsProps)
36
39
 
37
40
  const lastItem = computed(() => props.items && props.items.length > 0 ? props.items[props.items.length - 1] : undefined)
38
41
 
@@ -0,0 +1,3 @@
1
+ export { default as XBreadcrumbs } from './Breadcrumbs.vue'
2
+ export type { BreadcrumbsProps, BreadcrumbsItem } from './Breadcrumbs.vue'
3
+ export type { BreadcrumbsTheme } from './Breadcrumbs.theme'
@@ -1,9 +1,17 @@
1
- import type { ThemeParams } from '../../composables/theme'
1
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
2
+ import type { ButtonProps } from './Button.vue'
2
3
 
3
- export default {
4
+ type InternalClasses = 'wrapper' | 'iconLeft' | 'iconRight'
5
+ type InternalExtraData = { isButtonGroup: boolean; }
6
+
7
+ interface InternalTheme extends ThemeComponent<ButtonProps, InternalClasses, InternalExtraData> {}
8
+ export interface ButtonTheme extends Omit<InternalTheme, 'classes'> {
9
+ classes?: Partial<ThemeClasses<ButtonProps, InternalClasses, InternalExtraData>>;
10
+ }
11
+
12
+ const theme: InternalTheme = {
4
13
  classes: {
5
- wrapper({ props, slots, data }: ThemeParams) {
6
- /*tw*/
14
+ wrapper({ props, slots, data }) {
7
15
  const classes = ['relative transition duration-150 focus:outline-none inline-flex items-center justify-center font-medium whitespace-nowrap overflow-hidden align-middle active:!shadow-none border appearance-none']
8
16
 
9
17
  // radius
@@ -27,15 +35,15 @@ export default {
27
35
  return classes
28
36
  },
29
37
 
30
- iconLeft: ({ slots }: ThemeParams) => slots.default ? 'mr-2' : 'm-0.5',
38
+ iconLeft: ({ slots }) => slots.default ? 'mr-2' : 'm-0.5',
31
39
 
32
- iconRight: ({ slots }: ThemeParams) => slots.default ? 'ml-2' : 'm-0.5',
40
+ iconRight: ({ slots }) => slots.default ? 'ml-2' : 'm-0.5',
33
41
  },
34
42
 
35
- styles({ props, colors, css, data }: ThemeParams) {
43
+ styles({ props, colors, css, data }) {
36
44
  const gray = colors.getPalette('gray')
37
45
  const color = props.color ? colors.getPalette(props.color) : gray
38
- const vars: (object | string)[] = []
46
+ const vars = []
39
47
 
40
48
  const isLight = props.color && props.light
41
49
  const isDefault = !props.color && !props.ghost
@@ -70,10 +78,8 @@ export default {
70
78
  },
71
79
  }))
72
80
  }
73
- }
74
-
75
- // light
76
- else if (isLight) {
81
+ } else if (isLight) {
82
+ // light
77
83
  if (!props.outlined || props.disabled) vars.push(css.get('border', 'transparent'))
78
84
 
79
85
  if (props.disabled) {
@@ -103,10 +109,8 @@ export default {
103
109
  },
104
110
  }))
105
111
  }
106
- }
107
-
108
- // ghost
109
- else if (props.ghost) {
112
+ } else if (props.ghost) {
113
+ // ghost
110
114
  if (!props.outlined) vars.push(css.get('border', 'transparent'))
111
115
 
112
116
  if (props.color) {
@@ -162,9 +166,7 @@ export default {
162
166
  }
163
167
  }
164
168
  }
165
- }
166
-
167
- else {
169
+ } else {
168
170
  // outlined
169
171
  if (props.outlined) {
170
172
  if (props.disabled) {
@@ -232,3 +234,5 @@ export default {
232
234
  return vars
233
235
  },
234
236
  }
237
+
238
+ export default theme
@@ -1,21 +1,5 @@
1
1
  <script lang="ts">
2
- export default { name: 'XButton' }
3
- </script>
4
-
5
- <script setup lang="ts">
6
- import { computed, ref, inject, useAttrs, unref } from 'vue'
7
- import { useTheme } from '../../composables/theme'
8
- import { useColors } from '../../composables/colors'
9
- import { useCommon } from '../../composables/common'
10
- import { useInteractive } from '../../composables/interactive'
11
- import { injectButtonGroupKey } from '../../composables/keys'
12
-
13
- import XSpinner from '../spinner/Spinner.vue'
14
- import XIcon from '../icon/Icon.vue'
15
-
16
- import theme from './Button.theme'
17
-
18
- const props = defineProps({
2
+ const buttonProps = {
19
3
  ...useCommon.props(),
20
4
  ...useColors.props(),
21
5
  ...useInteractive.props(),
@@ -38,7 +22,32 @@ const props = defineProps({
38
22
  light: Boolean,
39
23
  block: Boolean,
40
24
  flat: Boolean,
41
- })
25
+ }
26
+
27
+ export type ButtonProps = ExtractPublicPropTypes<typeof buttonProps>
28
+
29
+ export default {
30
+ name: 'XButton',
31
+ validators: {
32
+ ...useCommon.validators(),
33
+ },
34
+ }
35
+ </script>
36
+
37
+ <script setup lang="ts">
38
+ import { computed, ref, inject, useAttrs, unref, type ExtractPublicPropTypes } from 'vue'
39
+ import { useTheme } from '../../composables/theme'
40
+ import { useColors } from '../../composables/colors'
41
+ import { useCommon } from '../../composables/common'
42
+ import { useInteractive } from '../../composables/interactive'
43
+ import { injectButtonGroupKey } from '../../composables/keys'
44
+
45
+ import XSpinner from '../spinner/Spinner.vue'
46
+ import XIcon from '../icon/Icon.vue'
47
+
48
+ import theme from './Button.theme'
49
+
50
+ const props = defineProps(buttonProps)
42
51
 
43
52
  const elRef = ref<HTMLElement | null>(null)
44
53
 
@@ -47,6 +56,7 @@ const buttonGroup = inject(injectButtonGroupKey, {
47
56
  isButtonGroup: false,
48
57
  groupProps: {},
49
58
  })
59
+
50
60
  const { isButtonGroup } = buttonGroup
51
61
  const computedSize = computed(() => buttonGroup.groupProps.size || props.size)
52
62
  const computedFlat = computed(() => buttonGroup.groupProps.flat || props.flat)
@@ -150,7 +160,8 @@ defineExpose({ focus, blur })
150
160
  border-color: var(--x-button-border-active, var(--x-button-border));
151
161
  }
152
162
 
153
- :global(.dark) &, &:global(.dark) {
163
+ :global(.dark) &,
164
+ &:global(.dark) {
154
165
  color: var(--x-button-dark-text, var(--x-button-text));
155
166
  background-color: var(--x-button-dark-bg, var(--x-button-bg));
156
167
  border-color: var(--x-button-dark-border, var(--x-button-border));
@@ -1,5 +1,18 @@
1
- export default {
1
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
2
+ import type { ButtonGroupProps } from './ButtonGroup.vue'
3
+
4
+ type InternalClasses = 'wrapper'
5
+ type InternalExtraData = { isButtonGroupGroup: boolean; }
6
+
7
+ interface InternalTheme extends ThemeComponent<ButtonGroupProps, InternalClasses, InternalExtraData> {}
8
+ export interface ButtonGroupTheme extends Omit<InternalTheme, 'classes'> {
9
+ classes?: Partial<ThemeClasses<ButtonGroupProps, InternalClasses, InternalExtraData>>;
10
+ }
11
+
12
+ const theme: InternalTheme = {
2
13
  classes: {
3
14
  wrapper: 'inline-flex align-middle relative -space-x-[1px]',
4
15
  },
5
16
  }
17
+
18
+ export default theme
@@ -1,18 +1,5 @@
1
1
  <script lang="ts">
2
- export default { name: 'XButtonGroup' }
3
- </script>
4
-
5
- <script setup lang="ts">
6
- import { provide } from 'vue'
7
- import { useTheme } from '../../composables/theme'
8
- import { useCommon } from '../../composables/common'
9
- import { useColors } from '../../composables/colors'
10
- import { useInteractive } from '../../composables/interactive'
11
- import { injectButtonGroupKey } from '../../composables/keys'
12
-
13
- import theme from './ButtonGroup.theme'
14
-
15
- const props = defineProps({
2
+ const buttonGroupProps = {
16
3
  ...useCommon.props(),
17
4
  ...useColors.props(),
18
5
  ...useInteractive.props(),
@@ -24,7 +11,34 @@ const props = defineProps({
24
11
  rounded: Boolean,
25
12
  ghost: Boolean,
26
13
  light: Boolean,
27
- })
14
+ flat: Boolean,
15
+ }
16
+
17
+ export type ButtonGroupProps = ExtractPublicPropTypes<typeof buttonGroupProps>
18
+ export type ButtonGroupInjection = {
19
+ groupProps: ButtonGroupProps;
20
+ isButtonGroup: boolean;
21
+ }
22
+
23
+ export default {
24
+ name: 'XButtonGroup',
25
+ validators: {
26
+ ...useCommon.validators(),
27
+ },
28
+ }
29
+ </script>
30
+
31
+ <script setup lang="ts">
32
+ import { provide, type ExtractPublicPropTypes } from 'vue'
33
+ import { useTheme } from '../../composables/theme'
34
+ import { useCommon } from '../../composables/common'
35
+ import { useColors } from '../../composables/colors'
36
+ import { useInteractive } from '../../composables/interactive'
37
+ import { injectButtonGroupKey } from '../../composables/keys'
38
+
39
+ import theme from './ButtonGroup.theme'
40
+
41
+ const props = defineProps(buttonGroupProps)
28
42
 
29
43
  provide(injectButtonGroupKey, {
30
44
  groupProps: props,
@@ -53,21 +67,21 @@ const { className, classes, styles } = useTheme('button-group', theme, props)
53
67
  .button-group {
54
68
  &:not(&--rounded) {
55
69
  > :first-child {
56
- @apply rounded-l-md
70
+ @apply rounded-l-md;
57
71
  }
58
72
 
59
73
  > :last-child {
60
- @apply rounded-r-md
74
+ @apply rounded-r-md;
61
75
  }
62
76
  }
63
77
 
64
78
  &--rounded {
65
79
  > :first-of-type {
66
- @apply rounded-l-full
80
+ @apply rounded-l-full;
67
81
  }
68
82
 
69
83
  > :last-child {
70
- @apply rounded-r-full
84
+ @apply rounded-r-full;
71
85
  }
72
86
  }
73
87
  }
@@ -0,0 +1,7 @@
1
+ export { default as XButton } from './Button.vue'
2
+ export type { ButtonProps } from './Button.vue'
3
+ export type { ButtonTheme } from './Button.theme'
4
+
5
+ export { default as XButtonGroup } from './ButtonGroup.vue'
6
+ export type { ButtonGroupProps, ButtonGroupInjection } from './ButtonGroup.vue'
7
+ export type { ButtonGroupTheme } from './ButtonGroup.theme'
@@ -1,7 +1,17 @@
1
- import type { ThemeParams } from '../../composables/theme'
1
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
2
+ import type { CardProps } from './Card.vue'
2
3
 
3
- export default {
4
+ type InternalClasses = 'wrapper'
5
+
6
+ interface InternalTheme extends ThemeComponent<CardProps, InternalClasses> {}
7
+ export interface CardTheme extends Omit<InternalTheme, 'classes'> {
8
+ classes?: Partial<ThemeClasses<CardProps, InternalClasses>>;
9
+ }
10
+
11
+ const theme: InternalTheme = {
4
12
  classes: {
5
- wrapper: ({ props }: ThemeParams) => `rounded bg-white dark:bg-gray-800${props.flat ? '' : ' shadow'}`,
13
+ wrapper: ({ props }) => `rounded bg-white dark:bg-gray-800${props.flat ? '' : ' shadow'}`,
6
14
  },
7
15
  }
16
+
17
+ export default theme