@indielayer/ui 1.0.10 → 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 (410) hide show
  1. package/lib/_virtual/_plugin-vue_export-helper.js +9 -0
  2. package/lib/common/icons.js +18 -0
  3. package/lib/common/utils.d.ts +4 -0
  4. package/lib/common/utils.js +25 -0
  5. package/lib/components/alert/Alert.theme.d.ts +10 -8
  6. package/lib/components/alert/Alert.theme.js +41 -0
  7. package/lib/components/alert/Alert.vue.d.ts +22 -5
  8. package/lib/components/alert/Alert.vue.js +9 -0
  9. package/lib/components/alert/Alert.vue2.js +62 -0
  10. package/lib/components/alert/Alert.vue3.js +8 -0
  11. package/lib/components/alert/index.d.ts +3 -0
  12. package/lib/components/avatar/Avatar.theme.d.ts +13 -7
  13. package/lib/components/avatar/Avatar.theme.js +25 -0
  14. package/lib/components/avatar/Avatar.vue.d.ts +24 -2
  15. package/lib/components/avatar/Avatar.vue.js +9 -0
  16. package/lib/components/avatar/Avatar.vue2.js +76 -0
  17. package/lib/components/avatar/Avatar.vue3.js +7 -0
  18. package/lib/components/avatar/index.d.ts +3 -0
  19. package/lib/components/badge/Badge.theme.d.ts +10 -8
  20. package/lib/components/badge/Badge.theme.js +12 -0
  21. package/lib/components/badge/Badge.vue.d.ts +45 -8
  22. package/lib/components/badge/Badge.vue.js +94 -0
  23. package/lib/components/badge/Badge.vue2.js +4 -0
  24. package/lib/components/badge/index.d.ts +3 -0
  25. package/lib/components/breadcrumbs/Breadcrumbs.theme.d.ts +10 -8
  26. package/lib/components/breadcrumbs/Breadcrumbs.theme.js +10 -0
  27. package/lib/components/breadcrumbs/Breadcrumbs.vue.d.ts +19 -5
  28. package/lib/components/breadcrumbs/Breadcrumbs.vue.js +79 -0
  29. package/lib/components/breadcrumbs/Breadcrumbs.vue2.js +4 -0
  30. package/lib/components/breadcrumbs/index.d.ts +3 -0
  31. package/lib/components/button/Button.theme.d.ts +12 -9
  32. package/lib/components/button/Button.theme.js +138 -0
  33. package/lib/components/button/Button.vue.d.ts +41 -7
  34. package/lib/components/button/Button.vue.js +9 -0
  35. package/lib/components/button/Button.vue2.js +115 -0
  36. package/lib/components/button/Button.vue3.js +8 -0
  37. package/lib/components/button/ButtonGroup.theme.d.ts +12 -5
  38. package/lib/components/button/ButtonGroup.theme.js +8 -0
  39. package/lib/components/button/ButtonGroup.vue.d.ts +36 -5
  40. package/lib/components/button/ButtonGroup.vue.js +9 -0
  41. package/lib/components/button/ButtonGroup.vue2.js +54 -0
  42. package/lib/components/button/ButtonGroup.vue3.js +7 -0
  43. package/lib/components/button/index.d.ts +6 -0
  44. package/lib/components/card/Card.theme.d.ts +10 -7
  45. package/lib/components/card/Card.theme.js +8 -0
  46. package/lib/components/card/Card.vue.d.ts +9 -0
  47. package/lib/components/card/Card.vue.js +31 -0
  48. package/lib/components/card/Card.vue2.js +4 -0
  49. package/lib/components/card/index.d.ts +3 -0
  50. package/lib/components/checkbox/Checkbox.theme.d.ts +13 -10
  51. package/lib/components/checkbox/Checkbox.theme.js +52 -0
  52. package/lib/components/checkbox/Checkbox.vue.d.ts +35 -4
  53. package/lib/components/checkbox/Checkbox.vue.js +9 -0
  54. package/lib/components/checkbox/Checkbox.vue2.js +108 -0
  55. package/lib/components/checkbox/Checkbox.vue3.js +6 -0
  56. package/lib/components/checkbox/index.d.ts +3 -0
  57. package/lib/components/collapse/Collapse.theme.d.ts +10 -9
  58. package/lib/components/collapse/Collapse.theme.js +10 -0
  59. package/lib/components/collapse/Collapse.vue.d.ts +17 -1
  60. package/lib/components/collapse/Collapse.vue.js +132 -0
  61. package/lib/components/collapse/Collapse.vue2.js +4 -0
  62. package/lib/components/collapse/index.d.ts +3 -0
  63. package/lib/components/container/Container.theme.d.ts +10 -6
  64. package/lib/components/container/Container.theme.js +8 -0
  65. package/lib/components/container/Container.vue.d.ts +8 -0
  66. package/lib/components/container/Container.vue.js +30 -0
  67. package/lib/components/container/Container.vue2.js +4 -0
  68. package/lib/components/container/index.d.ts +3 -0
  69. package/lib/components/divider/Divider.theme.d.ts +10 -9
  70. package/lib/components/divider/Divider.theme.js +10 -0
  71. package/lib/components/divider/Divider.vue.d.ts +6 -0
  72. package/lib/components/divider/Divider.vue.js +53 -0
  73. package/lib/components/divider/Divider.vue2.js +4 -0
  74. package/lib/components/divider/index.d.ts +3 -0
  75. package/lib/components/drawer/Drawer.theme.d.ts +10 -7
  76. package/lib/components/drawer/Drawer.theme.js +9 -0
  77. package/lib/components/drawer/Drawer.vue.d.ts +39 -12
  78. package/lib/components/drawer/Drawer.vue.js +171 -0
  79. package/lib/components/drawer/Drawer.vue2.js +4 -0
  80. package/lib/components/drawer/index.d.ts +3 -0
  81. package/lib/components/form/Form.theme.d.ts +10 -6
  82. package/lib/components/form/Form.theme.js +8 -0
  83. package/lib/components/form/Form.vue.d.ts +25 -4
  84. package/lib/components/form/Form.vue.js +79 -0
  85. package/lib/components/form/Form.vue2.js +4 -0
  86. package/lib/components/form/index.d.ts +3 -0
  87. package/lib/components/helpers/InputError.js +18 -0
  88. package/lib/components/icon/Icon.theme.d.ts +10 -7
  89. package/lib/components/icon/Icon.theme.js +11 -0
  90. package/lib/components/icon/Icon.vue.d.ts +21 -3
  91. package/lib/components/icon/Icon.vue.js +74 -0
  92. package/lib/components/icon/Icon.vue2.js +4 -0
  93. package/lib/components/icon/index.d.ts +3 -0
  94. package/lib/components/image/Image.theme.d.ts +10 -6
  95. package/lib/components/image/Image.theme.js +8 -0
  96. package/lib/components/image/Image.vue.d.ts +5 -0
  97. package/lib/components/image/Image.vue.js +32 -0
  98. package/lib/components/image/Image.vue2.js +4 -0
  99. package/lib/components/image/index.d.ts +3 -0
  100. package/lib/components/index.d.ts +35 -45
  101. package/lib/components/index.js +92 -0
  102. package/lib/components/input/Input.theme.d.ts +12 -10
  103. package/lib/components/input/Input.theme.js +21 -0
  104. package/lib/components/input/Input.vue.d.ts +70 -19
  105. package/lib/components/input/Input.vue.js +140 -0
  106. package/lib/components/input/Input.vue2.js +4 -0
  107. package/lib/components/input/index.d.ts +3 -0
  108. package/lib/components/link/Link.theme.d.ts +10 -8
  109. package/lib/components/link/Link.theme.js +25 -0
  110. package/lib/components/link/Link.vue.d.ts +17 -1
  111. package/lib/components/link/Link.vue.js +9 -0
  112. package/lib/components/link/Link.vue2.js +48 -0
  113. package/lib/components/link/Link.vue3.js +8 -0
  114. package/lib/components/link/index.d.ts +3 -0
  115. package/lib/components/menu/Menu.theme.d.ts +10 -6
  116. package/lib/components/menu/Menu.theme.js +8 -0
  117. package/lib/components/menu/Menu.vue.d.ts +61 -8
  118. package/lib/components/menu/Menu.vue.js +133 -0
  119. package/lib/components/menu/Menu.vue2.js +4 -0
  120. package/lib/components/menu/MenuItem.theme.d.ts +13 -7
  121. package/lib/components/menu/MenuItem.theme.js +86 -0
  122. package/lib/components/menu/MenuItem.vue.d.ts +55 -15
  123. package/lib/components/menu/MenuItem.vue.js +9 -0
  124. package/lib/components/menu/MenuItem.vue2.js +143 -0
  125. package/lib/components/menu/MenuItem.vue3.js +7 -0
  126. package/lib/components/menu/index.d.ts +6 -0
  127. package/lib/components/modal/Modal.theme.d.ts +10 -13
  128. package/lib/components/modal/Modal.theme.js +17 -0
  129. package/lib/components/modal/Modal.vue.d.ts +13 -1
  130. package/lib/components/modal/Modal.vue.js +127 -0
  131. package/lib/components/modal/Modal.vue2.js +4 -0
  132. package/lib/components/modal/index.d.ts +3 -0
  133. package/lib/components/notifications/Notifications.theme.d.ts +10 -8
  134. package/lib/components/notifications/Notifications.theme.js +10 -0
  135. package/lib/components/notifications/Notifications.vue.d.ts +46 -13
  136. package/lib/components/notifications/Notifications.vue.js +234 -0
  137. package/lib/components/notifications/Notifications.vue2.js +4 -0
  138. package/lib/components/notifications/index.d.ts +3 -0
  139. package/lib/components/pagination/Pagination.theme.d.ts +10 -9
  140. package/lib/components/pagination/Pagination.theme.js +13 -0
  141. package/lib/components/pagination/Pagination.vue.d.ts +27 -4
  142. package/lib/components/pagination/Pagination.vue.js +131 -0
  143. package/lib/components/pagination/Pagination.vue2.js +4 -0
  144. package/lib/components/pagination/PaginationItem.theme.d.ts +10 -7
  145. package/lib/components/pagination/PaginationItem.theme.js +8 -0
  146. package/lib/components/pagination/PaginationItem.vue.d.ts +16 -1
  147. package/lib/components/pagination/PaginationItem.vue.js +48 -0
  148. package/lib/components/pagination/PaginationItem.vue2.js +4 -0
  149. package/lib/components/pagination/index.d.ts +6 -0
  150. package/lib/components/popover/Popover.theme.d.ts +10 -7
  151. package/lib/components/popover/Popover.theme.js +9 -0
  152. package/lib/components/popover/Popover.vue.d.ts +40 -10
  153. package/lib/components/popover/Popover.vue.js +9 -0
  154. package/lib/components/popover/Popover.vue2.js +106 -0
  155. package/lib/components/popover/Popover.vue3.js +15 -0
  156. package/lib/components/popover/PopoverContainer.theme.d.ts +10 -6
  157. package/lib/components/popover/PopoverContainer.theme.js +8 -0
  158. package/lib/components/popover/PopoverContainer.vue.d.ts +8 -0
  159. package/lib/components/popover/PopoverContainer.vue.js +30 -0
  160. package/lib/components/popover/PopoverContainer.vue2.js +4 -0
  161. package/lib/components/popover/index.d.ts +6 -0
  162. package/lib/components/progress/Progress.theme.d.ts +10 -12
  163. package/lib/components/progress/Progress.theme.js +18 -0
  164. package/lib/components/progress/Progress.vue.d.ts +19 -0
  165. package/lib/components/progress/Progress.vue.js +51 -0
  166. package/lib/components/progress/Progress.vue2.js +4 -0
  167. package/lib/components/progress/index.d.ts +3 -0
  168. package/lib/components/radio/Radio.theme.d.ts +13 -11
  169. package/lib/components/radio/Radio.theme.js +67 -0
  170. package/lib/components/radio/Radio.vue.d.ts +38 -6
  171. package/lib/components/radio/Radio.vue.js +9 -0
  172. package/lib/components/radio/Radio.vue2.js +117 -0
  173. package/lib/components/radio/Radio.vue3.js +10 -0
  174. package/lib/components/radio/index.d.ts +3 -0
  175. package/lib/components/scroll/Scroll.theme.d.ts +10 -6
  176. package/lib/components/scroll/Scroll.theme.js +8 -0
  177. package/lib/components/scroll/Scroll.vue.d.ts +12 -1
  178. package/lib/components/scroll/Scroll.vue.js +9 -0
  179. package/lib/components/scroll/Scroll.vue2.js +64 -0
  180. package/lib/components/scroll/Scroll.vue3.js +17 -0
  181. package/lib/components/scroll/index.d.ts +3 -0
  182. package/lib/components/select/Select.theme.d.ts +13 -12
  183. package/lib/components/select/Select.theme.js +23 -0
  184. package/lib/components/select/Select.vue.d.ts +33 -4
  185. package/lib/components/select/Select.vue.js +269 -0
  186. package/lib/components/select/Select.vue2.js +4 -0
  187. package/lib/components/select/index.d.ts +3 -0
  188. package/lib/components/skeleton/Skeleton.theme.d.ts +10 -6
  189. package/lib/components/skeleton/Skeleton.theme.js +8 -0
  190. package/lib/components/skeleton/Skeleton.vue.d.ts +8 -0
  191. package/lib/components/skeleton/Skeleton.vue.js +30 -0
  192. package/lib/components/skeleton/Skeleton.vue2.js +4 -0
  193. package/lib/components/skeleton/index.d.ts +3 -0
  194. package/lib/components/slider/Slider.theme.d.ts +10 -10
  195. package/lib/components/slider/Slider.theme.js +20 -0
  196. package/lib/components/slider/Slider.vue.d.ts +40 -4
  197. package/lib/components/slider/Slider.vue.js +148 -0
  198. package/lib/components/slider/Slider.vue2.js +4 -0
  199. package/lib/components/slider/index.d.ts +2 -0
  200. package/lib/components/spacer/Spacer.js +12 -0
  201. package/lib/components/spacer/index.d.ts +1 -0
  202. package/lib/components/spinner/Spinner.vue.d.ts +13 -0
  203. package/lib/components/spinner/Spinner.vue.js +28 -0
  204. package/lib/components/spinner/Spinner.vue2.js +4 -0
  205. package/lib/components/spinner/index.d.ts +2 -0
  206. package/lib/components/tab/Tab.theme.d.ts +12 -9
  207. package/lib/components/tab/Tab.theme.js +13 -0
  208. package/lib/components/tab/Tab.vue.d.ts +31 -9
  209. package/lib/components/tab/Tab.vue.js +129 -0
  210. package/lib/components/tab/Tab.vue2.js +4 -0
  211. package/lib/components/tab/TabGroup.theme.d.ts +10 -10
  212. package/lib/components/tab/TabGroup.theme.js +27 -0
  213. package/lib/components/tab/TabGroup.vue.d.ts +53 -8
  214. package/lib/components/tab/TabGroup.vue.js +133 -0
  215. package/lib/components/tab/TabGroup.vue2.js +4 -0
  216. package/lib/components/tab/index.d.ts +4 -0
  217. package/lib/components/table/Table.theme.d.ts +10 -8
  218. package/lib/components/table/Table.theme.js +12 -0
  219. package/lib/components/table/Table.vue.d.ts +268 -57
  220. package/lib/components/table/Table.vue.js +147 -0
  221. package/lib/components/table/Table.vue2.js +4 -0
  222. package/lib/components/table/TableBody.js +15 -0
  223. package/lib/components/table/TableCell.theme.d.ts +10 -7
  224. package/lib/components/table/TableCell.theme.js +11 -0
  225. package/lib/components/table/TableCell.vue.d.ts +27 -5
  226. package/lib/components/table/TableCell.vue.js +43 -0
  227. package/lib/components/table/TableCell.vue2.js +4 -0
  228. package/lib/components/table/TableHead.js +19 -0
  229. package/lib/components/table/TableHeader.vue.d.ts +26 -8
  230. package/lib/components/table/TableHeader.vue.js +78 -0
  231. package/lib/components/table/TableHeader.vue2.js +4 -0
  232. package/lib/components/table/TableRow.vue.js +32 -0
  233. package/lib/components/table/TableRow.vue2.js +4 -0
  234. package/lib/components/table/index.d.ts +9 -0
  235. package/lib/components/tag/Tag.theme.d.ts +10 -9
  236. package/lib/components/tag/Tag.theme.js +23 -0
  237. package/lib/components/tag/Tag.vue.d.ts +23 -3
  238. package/lib/components/tag/Tag.vue.js +61 -0
  239. package/lib/components/tag/Tag.vue2.js +4 -0
  240. package/lib/components/tag/index.d.ts +2 -0
  241. package/lib/components/textarea/Textarea.theme.d.ts +13 -9
  242. package/lib/components/textarea/Textarea.theme.js +16 -0
  243. package/lib/components/textarea/Textarea.vue.d.ts +56 -14
  244. package/lib/components/textarea/Textarea.vue.js +110 -0
  245. package/lib/components/textarea/Textarea.vue2.js +4 -0
  246. package/lib/components/textarea/index.d.ts +2 -0
  247. package/lib/components/toggle/Toggle.theme.d.ts +10 -11
  248. package/lib/components/toggle/Toggle.theme.js +29 -0
  249. package/lib/components/toggle/Toggle.vue.d.ts +36 -4
  250. package/lib/components/toggle/Toggle.vue.js +110 -0
  251. package/lib/components/toggle/Toggle.vue2.js +4 -0
  252. package/lib/components/toggle/index.d.ts +2 -0
  253. package/lib/components/tooltip/Tooltip.vue.d.ts +3 -0
  254. package/lib/components/tooltip/Tooltip.vue.js +27 -0
  255. package/lib/components/tooltip/Tooltip.vue2.js +4 -0
  256. package/lib/components/tooltip/index.d.ts +2 -0
  257. package/lib/composables/colors-utils.js +19 -0
  258. package/lib/composables/colors.d.ts +2 -1
  259. package/lib/composables/colors.js +52 -0
  260. package/lib/composables/common.d.ts +1 -1
  261. package/lib/composables/common.js +17 -0
  262. package/lib/composables/css.js +26 -0
  263. package/lib/composables/inputtable.d.ts +4 -4
  264. package/lib/composables/inputtable.js +78 -0
  265. package/lib/composables/interactive.js +17 -0
  266. package/lib/composables/keys.d.ts +6 -3
  267. package/lib/composables/keys.js +10 -0
  268. package/lib/composables/notifications.js +9 -0
  269. package/lib/composables/theme.d.ts +13 -7
  270. package/lib/composables/theme.js +59 -0
  271. package/lib/create.js +19 -0
  272. package/lib/index.js +121 -0
  273. package/lib/index.umd.js +1 -0
  274. package/lib/install.js +10 -0
  275. package/lib/node_modules/.pnpm/@vueuse_core@10.2.0_vue@3.3.4/node_modules/@vueuse/core/index.js +379 -0
  276. package/lib/node_modules/.pnpm/@vueuse_shared@10.2.0_vue@3.3.4/node_modules/@vueuse/shared/index.js +90 -0
  277. package/lib/version.d.ts +1 -1
  278. package/lib/version.js +4 -0
  279. package/package.json +8 -8
  280. package/src/common/utils.ts +25 -2
  281. package/src/components/alert/Alert.theme.ts +15 -6
  282. package/src/components/alert/Alert.vue +24 -12
  283. package/src/components/alert/index.ts +3 -0
  284. package/src/components/avatar/Avatar.theme.ts +16 -4
  285. package/src/components/avatar/Avatar.vue +18 -14
  286. package/src/components/avatar/index.ts +3 -0
  287. package/src/components/badge/Badge.theme.ts +13 -3
  288. package/src/components/badge/Badge.vue +30 -15
  289. package/src/components/badge/index.ts +3 -0
  290. package/src/components/breadcrumbs/Breadcrumbs.theme.ts +12 -2
  291. package/src/components/breadcrumbs/Breadcrumbs.vue +24 -21
  292. package/src/components/breadcrumbs/index.ts +3 -0
  293. package/src/components/button/Button.theme.ts +18 -8
  294. package/src/components/button/Button.vue +28 -18
  295. package/src/components/button/ButtonGroup.theme.ts +14 -1
  296. package/src/components/button/ButtonGroup.vue +29 -15
  297. package/src/components/button/index.ts +7 -0
  298. package/src/components/card/Card.theme.ts +13 -3
  299. package/src/components/card/Card.vue +12 -7
  300. package/src/components/card/index.ts +3 -0
  301. package/src/components/checkbox/Checkbox.theme.ts +19 -7
  302. package/src/components/checkbox/Checkbox.vue +20 -11
  303. package/src/components/checkbox/index.ts +3 -0
  304. package/src/components/collapse/Collapse.theme.ts +13 -3
  305. package/src/components/collapse/Collapse.vue +16 -12
  306. package/src/components/collapse/index.ts +3 -0
  307. package/src/components/container/Container.theme.ts +12 -2
  308. package/src/components/container/Container.vue +11 -6
  309. package/src/components/container/index.ts +3 -0
  310. package/src/components/divider/Divider.theme.ts +13 -3
  311. package/src/components/divider/Divider.vue +9 -4
  312. package/src/components/divider/index.ts +3 -0
  313. package/src/components/drawer/Drawer.theme.ts +12 -2
  314. package/src/components/drawer/Drawer.vue +27 -18
  315. package/src/components/drawer/index.ts +3 -0
  316. package/src/components/form/Form.theme.ts +12 -2
  317. package/src/components/form/Form.vue +38 -28
  318. package/src/components/form/index.ts +3 -0
  319. package/src/components/helpers/InputError.tsx +2 -2
  320. package/src/components/icon/Icon.theme.ts +13 -3
  321. package/src/components/icon/Icon.vue +24 -15
  322. package/src/components/icon/__tests__/Icon.spec.ts +5 -1
  323. package/src/components/icon/index.ts +3 -0
  324. package/src/components/image/Image.theme.ts +12 -2
  325. package/src/components/image/Image.vue +8 -4
  326. package/src/components/image/index.ts +3 -0
  327. package/src/components/index.ts +35 -45
  328. package/src/components/input/Input.theme.ts +17 -6
  329. package/src/components/input/Input.vue +31 -20
  330. package/src/components/input/index.ts +3 -0
  331. package/src/components/link/Link.theme.ts +13 -3
  332. package/src/components/link/Link.vue +16 -11
  333. package/src/components/link/index.ts +3 -0
  334. package/src/components/menu/Menu.theme.ts +12 -2
  335. package/src/components/menu/Menu.vue +59 -23
  336. package/src/components/menu/MenuItem.theme.ts +17 -5
  337. package/src/components/menu/MenuItem.vue +56 -48
  338. package/src/components/menu/index.ts +7 -0
  339. package/src/components/modal/Modal.theme.ts +13 -3
  340. package/src/components/modal/Modal.vue +22 -11
  341. package/src/components/modal/index.ts +3 -0
  342. package/src/components/notifications/Notifications.theme.ts +12 -2
  343. package/src/components/notifications/Notifications.vue +53 -49
  344. package/src/components/notifications/index.ts +9 -0
  345. package/src/components/pagination/Pagination.theme.ts +15 -5
  346. package/src/components/pagination/Pagination.vue +24 -18
  347. package/src/components/pagination/PaginationItem.theme.ts +13 -3
  348. package/src/components/pagination/PaginationItem.vue +14 -10
  349. package/src/components/pagination/index.ts +7 -0
  350. package/src/components/popover/Popover.theme.ts +12 -2
  351. package/src/components/popover/Popover.vue +27 -21
  352. package/src/components/popover/PopoverContainer.theme.ts +12 -2
  353. package/src/components/popover/PopoverContainer.vue +11 -6
  354. package/src/components/popover/index.ts +7 -0
  355. package/src/components/progress/Progress.theme.ts +14 -4
  356. package/src/components/progress/Progress.vue +16 -16
  357. package/src/components/progress/index.ts +3 -0
  358. package/src/components/radio/Radio.theme.ts +19 -7
  359. package/src/components/radio/Radio.vue +21 -12
  360. package/src/components/radio/index.ts +3 -0
  361. package/src/components/scroll/Scroll.theme.ts +12 -2
  362. package/src/components/scroll/Scroll.vue +14 -10
  363. package/src/components/scroll/index.ts +3 -0
  364. package/src/components/select/Select.theme.ts +20 -6
  365. package/src/components/select/Select.vue +28 -19
  366. package/src/components/select/index.ts +3 -0
  367. package/src/components/skeleton/Skeleton.theme.ts +12 -2
  368. package/src/components/skeleton/Skeleton.vue +11 -6
  369. package/src/components/skeleton/index.ts +3 -0
  370. package/src/components/slider/Slider.theme.ts +14 -4
  371. package/src/components/slider/Slider.vue +24 -16
  372. package/src/components/slider/index.ts +2 -0
  373. package/src/components/spacer/index.ts +1 -0
  374. package/src/components/spinner/Spinner.vue +18 -8
  375. package/src/components/spinner/index.ts +2 -0
  376. package/src/components/tab/Tab.theme.ts +15 -3
  377. package/src/components/tab/Tab.vue +85 -68
  378. package/src/components/tab/TabGroup.theme.ts +15 -5
  379. package/src/components/tab/TabGroup.vue +67 -22
  380. package/src/components/tab/index.ts +5 -0
  381. package/src/components/table/Table.theme.ts +14 -4
  382. package/src/components/table/Table.vue +41 -31
  383. package/src/components/table/TableCell.theme.ts +13 -3
  384. package/src/components/table/TableCell.vue +22 -16
  385. package/src/components/table/TableHeader.vue +20 -17
  386. package/src/components/table/index.ts +10 -0
  387. package/src/components/tag/Tag.theme.ts +14 -4
  388. package/src/components/tag/Tag.vue +22 -13
  389. package/src/components/tag/index.ts +2 -0
  390. package/src/components/textarea/Textarea.theme.ts +18 -30
  391. package/src/components/textarea/Textarea.vue +28 -19
  392. package/src/components/textarea/index.ts +2 -0
  393. package/src/components/toggle/Toggle.theme.ts +16 -6
  394. package/src/components/toggle/Toggle.vue +21 -12
  395. package/src/components/toggle/index.ts +2 -0
  396. package/src/components/tooltip/Tooltip.vue +5 -0
  397. package/src/components/tooltip/index.ts +2 -0
  398. package/src/composables/colors-utils.ts +1 -78
  399. package/src/composables/colors.ts +6 -4
  400. package/src/composables/common.ts +1 -1
  401. package/src/composables/inputtable.ts +4 -4
  402. package/src/composables/keys.ts +6 -3
  403. package/src/composables/theme.ts +26 -23
  404. package/src/create.ts +1 -2
  405. package/src/version.ts +1 -1
  406. package/volar.d.ts +1 -1
  407. package/lib/components/tooltip/Tooltip.theme.d.ts +0 -11
  408. package/lib/index.cjs.js +0 -1
  409. package/lib/index.es.js +0 -5187
  410. package/src/components/tooltip/Tooltip.theme.ts +0 -51
@@ -1,20 +1,5 @@
1
1
  <script lang="ts">
2
- export default { name: 'XTab' }
3
- </script>
4
-
5
- <script setup lang="ts">
6
- import { inject, reactive, computed, ref, onMounted } from 'vue'
7
- import { useMutationObserver } from '@vueuse/core'
8
- import { injectTabKey } from '../../composables/keys'
9
- import { useCommon } from '../../composables/common'
10
- import { useTheme } from '../../composables/theme'
11
-
12
- import XIcon from '../icon/Icon.vue'
13
- import XLink from '../link/Link.vue'
14
-
15
- import theme from './Tab.theme'
16
-
17
- const props = defineProps({
2
+ const tabProps = {
18
3
  ...useCommon.props(),
19
4
  value: {
20
5
  type: [String, Number],
@@ -23,28 +8,53 @@ const props = defineProps({
23
8
  type: String,
24
9
  default: 'div',
25
10
  },
26
- to: String,
11
+ to: [String, Object],
27
12
  label: String,
28
13
  icon: String,
29
14
  disabled: Boolean,
30
15
  exact: Boolean,
31
- })
16
+ }
17
+
18
+ export type TabProps = ExtractPublicPropTypes<typeof tabProps>
19
+
20
+ export default {
21
+ name: 'XTab',
22
+ validators: {
23
+ ...useCommon.validators(),
24
+ },
25
+ }
26
+ </script>
32
27
 
33
- const computedValue = computed(() => props.to || props.value )
28
+ <script setup lang="ts">
29
+ import { inject, reactive, computed, ref, onMounted, type ExtractPublicPropTypes } from 'vue'
30
+ import { useMutationObserver } from '@vueuse/core'
31
+ import { injectTabKey } from '../../composables/keys'
32
+ import { useCommon, type Size } from '../../composables/common'
33
+ import { useTheme } from '../../composables/theme'
34
+
35
+ import XIcon from '../icon/Icon.vue'
36
+ import XLink from '../link/Link.vue'
37
+
38
+ import theme from './Tab.theme'
39
+ import type { TabGroupVariant } from './TabGroup.vue'
40
+
41
+ const props = defineProps(tabProps)
42
+
43
+ const computedValue = computed(() => (elRef.value as typeof XLink)?.$el?.href || props.value)
34
44
  const computedLabel = computed(() => props.label || props.value)
35
- const teleportTo = ref(null)
45
+ const teleportTo = ref<HTMLElement | null>(null)
36
46
  const elRef = ref<HTMLElement | typeof XLink | null>(null)
37
47
 
38
48
  const tabs = inject(injectTabKey, {
39
49
  tabsContentRef: ref(null),
40
50
  activateTab: () => {},
41
51
  state: reactive({
42
- active: false,
43
- variant: 'line',
52
+ active: undefined,
53
+ variant: 'line' as TabGroupVariant,
44
54
  ghost: false,
45
55
  grow: false,
46
56
  exact: false,
47
- size: 'md',
57
+ size: 'md' as Size,
48
58
  color: 'primary',
49
59
  }),
50
60
  })
@@ -76,8 +86,15 @@ const selected = computed(() => tabs.state.active === computedValue.value)
76
86
 
77
87
  const color = computed(() => tabs.state.color)
78
88
 
79
- function onClickTab() {
80
- if (!props.to) tabs.activateTab(computedValue.value)
89
+ function onClickTab(e: MouseEvent) {
90
+ if (props.disabled) {
91
+ e.preventDefault()
92
+ e.stopPropagation()
93
+
94
+ return
95
+ }
96
+
97
+ if (!props.to && computedValue.value) tabs.activateTab(computedValue.value)
81
98
  }
82
99
 
83
100
  const { styles, classes, className } = useTheme('tab', theme, ref({
@@ -88,53 +105,53 @@ const { styles, classes, className } = useTheme('tab', theme, ref({
88
105
  </script>
89
106
 
90
107
  <template>
91
- <li
108
+ <component
109
+ :is="to ? XLink : tag"
110
+ ref="elRef"
92
111
  :data-value="computedValue"
93
- :style="styles"
94
- class="shrink-0 font-medium"
112
+ :to="to"
113
+ :color="selected ? color : undefined"
114
+ :style="[
115
+ styles,
116
+ to && selected && tabs.state.variant === 'block'
117
+ ? '--x-link-text: var(--x-tabs-text); --x-link-text-hover: var(--x-tabs-text);'
118
+ : ''
119
+ ]"
95
120
  :class="[
96
121
  className,
97
- { 'flex-1': tabs.state.grow }
122
+ classes.wrapper,
123
+ 'shrink-0 font-medium',
124
+ {
125
+ 'flex-1': tabs.state.grow,
126
+ 'text-[color:var(--x-tabs-text)] dark:text-[color:var(--x-tabs-dark-text)]': selected,
127
+ 'cursor-pointer': !disabled,
128
+ 'cursor-not-allowed': disabled,
129
+ 'cursor-not-allowed text-gray-500': disabled && !selected,
130
+ },
98
131
  ]"
132
+ :aria-disabled="disabled ? 'true' : undefined"
133
+ :aria-selected="selected ? 'true' : 'false'"
134
+ @click="onClickTab"
99
135
  >
100
- <component
101
- :is="to ? XLink : tag"
102
- ref="elRef"
103
- :to="to"
104
- :color="selected ? color : undefined"
105
- :class="[
106
- classes.wrapper,
107
- {
108
- 'text-[color:var(--x-tabs-text)] dark:text-[color:var(--x-tabs-dark-text)]': selected,
109
- 'cursor-pointer': !disabled,
110
- 'cursor-not-allowed': disabled,
111
- 'cursor-not-allowed text-gray-500': disabled && !selected,
112
- },
113
- ]"
114
- :aria-disabled="disabled ? 'true' : undefined"
115
- :aria-selected="selected ? 'true' : 'false'"
116
- @click="onClickTab"
136
+ <slot
137
+ name="tab"
138
+ :label="label"
139
+ :value="value"
140
+ :size="computedSize"
141
+ :icon="icon"
117
142
  >
118
- <slot
119
- name="tab"
120
- :label="label"
121
- :value="value"
122
- :size="computedSize"
123
- :icon="icon"
124
- >
125
- <div class="flex items-center justify-center">
126
- <x-icon
127
- v-if="icon"
128
- :icon="icon"
129
- :size="computedSize"
130
- :class="classes.icon"
131
- />
132
- <div :class="classes.label">{{ computedLabel }}</div>
133
- </div>
134
- </slot>
135
- <teleport v-if="selected && teleportTo" :to="teleportTo">
136
- <slot></slot>
137
- </teleport>
138
- </component>
139
- </li>
143
+ <div class="flex items-center justify-center">
144
+ <x-icon
145
+ v-if="icon"
146
+ :icon="icon"
147
+ :size="computedSize"
148
+ :class="classes.icon"
149
+ />
150
+ <div :class="classes.label">{{ computedLabel }}</div>
151
+ </div>
152
+ </slot>
153
+ <teleport v-if="selected && teleportTo" :to="teleportTo">
154
+ <slot></slot>
155
+ </teleport>
156
+ </component>
140
157
  </template>
@@ -1,10 +1,18 @@
1
- import type { ThemeParams } from '../../composables/theme'
1
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
2
+ import type { TabGroupProps } from './TabGroup.vue'
2
3
 
3
- export default {
4
+ type InternalClasses = 'wrapper' | 'list' | 'tracker'
5
+
6
+ interface InternalTheme extends ThemeComponent<TabGroupProps, InternalClasses> {}
7
+ export interface TabGroupTheme extends Omit<InternalTheme, 'classes'> {
8
+ classes?: Partial<ThemeClasses<TabGroupProps, InternalClasses>>;
9
+ }
10
+
11
+ const theme: InternalTheme = {
4
12
  classes: {
5
13
  wrapper: '',
6
14
 
7
- list: ({ props, colors, css }: ThemeParams) => {
15
+ list: ({ props }) => {
8
16
  const c = ['flex min-w-full w-fit']
9
17
 
10
18
  if (props.variant === 'line') c.push('border-b border-gray-200 dark:border-gray-700')
@@ -16,7 +24,7 @@ export default {
16
24
  return c
17
25
  },
18
26
 
19
- tracker: ({ props }: ThemeParams) => {
27
+ tracker: ({ props }) => {
20
28
  const c = ['absolute transition-all duration-150']
21
29
 
22
30
  if (props.variant === 'line') c.push('h-[2px] -mt-[2px] bg-[color:var(--x-tabs-text)] dark:bg-[color:var(--x-tabs-dark-text)]')
@@ -27,7 +35,7 @@ export default {
27
35
  },
28
36
  },
29
37
 
30
- styles: ({ props, colors, css }: ThemeParams) => {
38
+ styles: ({ props, colors, css }) => {
31
39
  const gray = colors.getPalette('gray')
32
40
  const color = colors.getPalette(props.color)
33
41
 
@@ -41,3 +49,5 @@ export default {
41
49
  })
42
50
  },
43
51
  }
52
+
53
+ export default theme
@@ -1,20 +1,10 @@
1
1
  <script lang="ts">
2
- export default { name: 'XTabGroup' }
3
- </script>
4
-
5
- <script setup lang="ts">
6
- import { reactive, computed, provide, type PropType, ref, watch, onMounted, watchEffect } from 'vue'
7
- import { useResizeObserver, useThrottleFn } from '@vueuse/core'
8
- import { injectTabKey } from '../../composables/keys'
9
- import { useCommon } from '../../composables/common'
10
- import { useColors } from '../../composables/colors'
11
- import { useTheme } from '../../composables/theme'
12
-
13
- import XScroll from '../../components/scroll/Scroll.vue'
14
-
15
- import theme from './TabGroup.theme'
16
-
17
- const props = defineProps({
2
+ const validators = {
3
+ ...useCommon.validators(),
4
+ variant: ['line', 'block'] as const,
5
+ align: ['left', 'center', 'right'] as const,
6
+ }
7
+ const tabGroupProps = {
18
8
  ...useCommon.props(),
19
9
  ...useColors.props('primary'),
20
10
  modelValue: [String, Number],
@@ -29,7 +19,44 @@ const props = defineProps({
29
19
  ghost: Boolean,
30
20
  grow: Boolean,
31
21
  exact: Boolean,
32
- })
22
+ }
23
+
24
+ export type TabGroupInjection = {
25
+ tabsContentRef: Ref<HTMLElement | null>;
26
+ activateTab: (tab: string | number) => void;
27
+ state: {
28
+ active: string | number | undefined;
29
+ variant: TabGroupVariant;
30
+ ghost: boolean;
31
+ grow: boolean;
32
+ exact: boolean;
33
+ size: Size;
34
+ color: string;
35
+ };
36
+ }
37
+ export type TabGroupVariant = typeof validators.variant[number]
38
+ export type TabGroupAlign = typeof validators.align[number]
39
+ export type TabGroupProps = ExtractPublicPropTypes<typeof tabGroupProps>
40
+
41
+ export default {
42
+ name: 'XTabGroup',
43
+ validators,
44
+ }
45
+ </script>
46
+
47
+ <script setup lang="ts">
48
+ import { reactive, computed, provide, type PropType, ref, watch, onMounted, watchEffect, type ExtractPublicPropTypes, type Ref, nextTick } from 'vue'
49
+ import { useMutationObserver, useResizeObserver, useThrottleFn } from '@vueuse/core'
50
+ import { injectTabKey } from '../../composables/keys'
51
+ import { useCommon, type Size } from '../../composables/common'
52
+ import { useColors } from '../../composables/colors'
53
+ import { useTheme } from '../../composables/theme'
54
+
55
+ import XScroll from '../../components/scroll/Scroll.vue'
56
+
57
+ import theme from './TabGroup.theme'
58
+
59
+ const props = defineProps(tabGroupProps)
33
60
 
34
61
  const emit = defineEmits(['update:modelValue'])
35
62
 
@@ -55,7 +82,7 @@ const state = reactive({
55
82
  color: computed(() => props.color),
56
83
  })
57
84
 
58
- function activateTab(tab: string | number) {
85
+ function activateTab(tab: string | number | null) {
59
86
  active.value = tab
60
87
  emit('update:modelValue', tab)
61
88
  }
@@ -66,9 +93,11 @@ provide(injectTabKey, {
66
93
  state,
67
94
  })
68
95
 
69
- const updateTracker = useThrottleFn((value: string | number | undefined) => {
96
+ const updateTracker = useThrottleFn(async (value: string | number | undefined) => {
70
97
  if (typeof value === 'undefined') return
71
98
 
99
+ await nextTick()
100
+
72
101
  const tabEl = tabsRef.value?.querySelector(`[data-value="${value}"]`) as HTMLElement
73
102
 
74
103
  if (!tabEl || !trackerRef.value) return
@@ -84,13 +113,28 @@ const updateTracker = useThrottleFn((value: string | number | undefined) => {
84
113
  if (scrollRef.value.scrollEl) scrollRef.value.scrollEl.scrollTo({ left: center, behavior: 'smooth' })
85
114
  }, 100)
86
115
 
87
- useResizeObserver(wrapperRef, () => { updateTracker(active.value) })
116
+ const showTracker = ref(true)
117
+
118
+ function check() {
119
+ if (!tabsRef.value?.querySelector('.router-link-active')) {
120
+ activateTab(null)
121
+ showTracker.value = false
122
+ } else {
123
+ showTracker.value = true
124
+ }
125
+ }
88
126
 
89
127
  watch(() => active.value, (value) => {
90
128
  updateTracker(value)
91
129
  })
92
130
 
93
131
  onMounted(() => {
132
+ if (tabsRef.value?.querySelector('.x-link')) {
133
+ useMutationObserver(tabsRef.value, check, {
134
+ attributes: true, subtree: true,
135
+ attributeFilter: ['class'],
136
+ })
137
+ }
94
138
  updateTracker(active.value)
95
139
  })
96
140
 
@@ -118,14 +162,15 @@ const { styles, classes, className } = useTheme('tabs', theme, props)
118
162
  'bg-slate-100 dark:bg-gray-800 p-1': variant === 'block' && !ghost
119
163
  }"
120
164
  >
121
- <ul
165
+ <div
122
166
  ref="tabsRef"
123
167
  class="relative"
124
168
  :class="classes.list"
125
169
  >
126
170
  <slot></slot>
127
- </ul>
171
+ </div>
128
172
  <div
173
+ v-show="showTracker"
129
174
  ref="trackerRef"
130
175
  :class="classes.tracker"
131
176
  ></div>
@@ -0,0 +1,5 @@
1
+ export { default as XTab } from './Tab.vue'
2
+ export type { TabProps } from './Tab.vue'
3
+
4
+ export { default as XTabGroup } from './TabGroup.vue'
5
+ export type { TabGroupProps, TabGroupAlign, TabGroupInjection, TabGroupVariant } from './TabGroup.vue'
@@ -1,11 +1,19 @@
1
- import type { ThemeParams } from '../../composables/theme'
1
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
2
+ import type { TableProps } from './Table.vue'
2
3
 
3
- export default {
4
+ type InternalClasses = 'wrapper' | 'loadingWrapper'
5
+
6
+ interface InternalTheme extends ThemeComponent<TableProps, InternalClasses> {}
7
+ export interface TableTheme extends Omit<InternalTheme, 'classes'> {
8
+ classes?: Partial<ThemeClasses<TableProps, InternalClasses>>;
9
+ }
10
+
11
+ const theme: InternalTheme = {
4
12
  classes: {
5
- wrapper: ({ props, data }: ThemeParams) => {
13
+ wrapper: ({ props, data }) => {
6
14
  const c = ['w-full relative']
7
15
 
8
- if (props.scrollable === 'block') c.push('overflow-x-scroll sm:overflow-x-auto whitespace-wrap sm:whitespace-normal block sm:table')
16
+ if (props.scrollable) c.push('overflow-x-scroll sm:overflow-x-auto whitespace-wrap sm:whitespace-normal block sm:table')
9
17
 
10
18
  if (props.stickyHeader) c.push('relative')
11
19
 
@@ -17,3 +25,5 @@ export default {
17
25
  loadingWrapper: 'absolute inset-0 flex items-center justify-center z-40 bg-gray-300 dark:bg-gray-600 rounded opacity-50',
18
26
  },
19
27
  }
28
+
29
+ export default theme
@@ -1,32 +1,7 @@
1
1
  <script lang="ts">
2
- export default { name: 'XTable' }
3
- </script>
4
-
5
- <script setup lang="ts">
6
- import type { PropType } from 'vue'
7
- import { useTheme } from '../../composables/theme'
8
-
9
- import XTableHead from './TableHead'
10
- import XTableHeader, { type Sort, type Align } from './TableHeader.vue'
11
- import XTableBody from './TableBody'
12
- import XTableRow from './TableRow.vue'
13
- import XTableCell from './TableCell.vue'
14
- import XSpinner from '../spinner/Spinner.vue'
15
-
16
- import theme from './Table.theme'
17
-
18
- export type Header = {
19
- sortable?: boolean;
20
- sort?: string[];
21
- align?: Align;
22
- value?: string;
23
- text?: string;
24
- width?: string | number;
25
- }
26
-
27
- const props = defineProps({
2
+ const tableProps = {
28
3
  headers: {
29
- type: Array as PropType<Array<Header>>,
4
+ type: Array as PropType<TableHeader[]>,
30
5
  default: () => [],
31
6
  },
32
7
  items: {
@@ -34,7 +9,7 @@ const props = defineProps({
34
9
  default: () => [],
35
10
  },
36
11
  sort: {
37
- type: Array as PropType<Array<string>>,
12
+ type: Array as PropType<string[]>,
38
13
  default: () => [],
39
14
  },
40
15
  loading: Boolean,
@@ -50,11 +25,46 @@ const props = defineProps({
50
25
  type: Boolean,
51
26
  default: true,
52
27
  },
28
+ }
29
+
30
+ export type TableHeader = {
31
+ sortable?: boolean;
32
+ sort?: string[];
33
+ align?: TableHeaderAlign;
34
+ value?: string;
35
+ text?: string;
36
+ width?: string | number;
37
+ }
38
+
39
+ export type TableProps = ExtractPublicPropTypes<typeof tableProps>
40
+
41
+ export default { name: 'XTable' }
42
+ </script>
43
+
44
+ <script setup lang="ts" generic="T">
45
+ import type { ExtractPublicPropTypes, PropType } from 'vue'
46
+ import { useTheme } from '../../composables/theme'
47
+
48
+ import XTableHead from './TableHead'
49
+ import XTableHeader, { type TableHeaderSort, type TableHeaderAlign } from './TableHeader.vue'
50
+ import XTableBody from './TableBody'
51
+ import XTableRow from './TableRow.vue'
52
+ import XTableCell from './TableCell.vue'
53
+ import XSpinner from '../spinner/Spinner.vue'
54
+
55
+ import theme from './Table.theme'
56
+
57
+ const props = defineProps({
58
+ ...tableProps,
59
+ items: {
60
+ type: Array as PropType<T[]>,
61
+ default: () => [],
62
+ },
53
63
  })
54
64
 
55
65
  const emit = defineEmits(['update:sort', 'click-row'])
56
66
 
57
- function getSort(headerValue: string | undefined, sort: string[]): Sort {
67
+ function getSort(headerValue: string | undefined, sort: string[]): TableHeaderSort {
58
68
  if (!headerValue) return undefined
59
69
 
60
70
  for (let i = 0; i < sort.length; i++) {
@@ -69,7 +79,7 @@ function getSort(headerValue: string | undefined, sort: string[]): Sort {
69
79
  return undefined
70
80
  }
71
81
 
72
- function sortHeader(header: Header) {
82
+ function sortHeader(header: TableHeader) {
73
83
  // update sort array
74
84
  const sort = props.sort.slice(0)
75
85
  let exists = false
@@ -133,7 +143,7 @@ const { styles, classes, className } = useTheme('table', theme, props)
133
143
  </x-table-head>
134
144
  <x-table-body>
135
145
  <x-table-row
136
- v-for="(item, index) in items"
146
+ v-for="(item, index) in (items as T[])"
137
147
  :key="index"
138
148
  :pointer="pointer"
139
149
  :striped="striped"
@@ -1,8 +1,16 @@
1
- import type { ThemeParams } from '../../composables/theme'
1
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
2
+ import type { TableCellProps } from './TableCell.vue'
2
3
 
3
- export default {
4
+ type InternalClasses = 'wrapper'
5
+
6
+ interface InternalTheme extends ThemeComponent<TableCellProps, InternalClasses> {}
7
+ export interface TableCellTheme extends Omit<InternalTheme, 'classes'> {
8
+ classes?: Partial<ThemeClasses<TableCellProps, InternalClasses>>;
9
+ }
10
+
11
+ const theme: InternalTheme = {
4
12
  classes: {
5
- wrapper: ({ props }: ThemeParams) => {
13
+ wrapper: ({ props }) => {
6
14
  const c = ['last:pr-0 px-3']
7
15
 
8
16
  c.push(props.dense ? 'py-2' : 'py-4')
@@ -25,3 +33,5 @@ export default {
25
33
  },
26
34
  },
27
35
  }
36
+
37
+ export default theme
@@ -1,9 +1,27 @@
1
1
  <script lang="ts">
2
2
  const validators = {
3
- textAlign: [null, 'left', 'center', 'right', 'justify'],
4
- verticalAlign: [null, 'baseline', 'bottom', 'middle', 'text-bottom', 'text-top', 'top'],
3
+ textAlign: [null, 'left', 'center', 'right', 'justify'] as const,
4
+ verticalAlign: [null, 'baseline', 'bottom', 'middle', 'text-bottom', 'text-top', 'top'] as const,
5
+ }
6
+ const tableCellProps = {
7
+ textAlign: {
8
+ type: String as PropType<TableCellTextAlign>,
9
+ validator: (value: string) => validators.textAlign.includes(value as any),
10
+ },
11
+ truncate: Boolean,
12
+ dense: Boolean,
13
+ fixed: Boolean,
14
+ verticalAlign: {
15
+ type: String as PropType<TableCellVerticalAlign>,
16
+ default: 'middle',
17
+ validator: (value: string) => validators.verticalAlign.includes(value as any),
18
+ },
5
19
  }
6
20
 
21
+ export type TableCellTextAlign = typeof validators.textAlign[number]
22
+ export type TableCellVerticalAlign = typeof validators.verticalAlign[number]
23
+ export type TableCellProps = ExtractPublicPropTypes<typeof tableCellProps>
24
+
7
25
  export default {
8
26
  name: 'XTableCell',
9
27
  validators,
@@ -11,24 +29,12 @@ export default {
11
29
  </script>
12
30
 
13
31
  <script setup lang="ts">
32
+ import type { ExtractPublicPropTypes, PropType } from 'vue'
14
33
  import { useTheme } from '../../composables/theme'
15
34
 
16
35
  import theme from './TableCell.theme'
17
36
 
18
- const props = defineProps({
19
- textAlign: {
20
- type: String,
21
- validator: (value: string) => validators.textAlign.includes(value),
22
- },
23
- truncate: Boolean,
24
- dense: Boolean,
25
- fixed: Boolean,
26
- verticalAlign: {
27
- type: String,
28
- default: 'middle',
29
- validator: (value: string) => validators.verticalAlign.includes(value),
30
- },
31
- })
37
+ const props = defineProps(tableCellProps)
32
38
 
33
39
  if (props.truncate && !props.fixed) {
34
40
  console.warn('Table must have "fixed" property set to true when using TableCell "truncate" property')
@@ -1,31 +1,34 @@
1
1
  <script lang="ts">
2
2
  const validators = {
3
- sort: [1, -1],
4
- textAlign: ['left', 'center', 'right', 'justify'],
3
+ sort: [1, -1, undefined] as const,
4
+ textAlign: ['left', 'center', 'right', 'justify'] as const,
5
5
  }
6
6
 
7
- export default { name: 'XTableHeader', validators }
8
- </script>
9
-
10
- <script setup lang="ts">
11
- import type { PropType } from 'vue'
12
-
13
- export type Sort = 1 | -1 | undefined
14
- export type Align = 'left' | 'center' | 'right' | 'justify' | undefined
15
-
16
- const props = defineProps({
7
+ const tableHeaderProps = {
17
8
  sort: {
18
- type: Number as PropType<Sort>,
19
- validator: (value: number) => validators.sort.includes(value),
9
+ type: Number as PropType<TableHeaderSort>,
10
+ validator: (value: number) => validators.sort.includes(value as any),
20
11
  },
21
12
  sortable: Boolean,
22
13
  textAlign: {
23
- type: String as PropType<Align>,
14
+ type: String as PropType<TableHeaderAlign>,
24
15
  default: 'left',
25
- validator: (value: string) => validators.textAlign.includes(value),
16
+ validator: (value: string) => validators.textAlign.includes(value as any),
26
17
  },
27
18
  stickyHeader: Boolean,
28
- })
19
+ }
20
+
21
+ export type TableHeaderSort = typeof validators.sort[number]
22
+ export type TableHeaderAlign = typeof validators.textAlign[number]
23
+ export type TableHeaderProps = ExtractPublicPropTypes<typeof tableHeaderProps>
24
+
25
+ export default { name: 'XTableHeader', validators }
26
+ </script>
27
+
28
+ <script setup lang="ts">
29
+ import type { ExtractPublicPropTypes, PropType } from 'vue'
30
+
31
+ defineProps(tableHeaderProps)
29
32
  </script>
30
33
 
31
34
  <template>
@@ -0,0 +1,10 @@
1
+ export { default as XTable } from './Table.vue'
2
+ export { default as XTableBody } from './TableBody'
3
+ export { default as XTableCell } from './TableCell.vue'
4
+ export { default as XTableHead } from './TableHead'
5
+ export { default as XTableHeader } from './TableHeader.vue'
6
+ export { default as XTableRow } from './TableRow.vue'
7
+
8
+ export type { TableProps, TableHeader } from './Table.vue'
9
+ export type { TableHeaderProps, TableHeaderAlign, TableHeaderSort } from './TableHeader.vue'
10
+ export type { TableCellProps, TableCellTextAlign, TableCellVerticalAlign } from './TableCell.vue'