@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,30 +1,5 @@
1
1
  <script lang="ts">
2
- export default {
3
- name: 'XForm',
4
- inheritAttrs: false,
5
- }
6
- </script>
7
-
8
- <script setup lang="ts">
9
- import { provide, onMounted, watch, nextTick, type PropType } from 'vue'
10
- import { injectFormKey } from '../../composables/keys'
11
- import { useTheme } from '../../composables/theme'
12
-
13
- import theme from './Form.theme'
14
-
15
- export type FormError = {
16
- field: string
17
- msg: string
18
- }
19
-
20
- export type Form = {
21
- name: string,
22
- focus: ()=> void,
23
- validate: ()=> boolean,
24
- setError: (val: string)=> void,
25
- }
26
-
27
- const props = defineProps({
2
+ const formProps = {
28
3
  autoValidate: {
29
4
  type: Boolean,
30
5
  default: true,
@@ -38,22 +13,56 @@ const props = defineProps({
38
13
  type: [Array, Object] as PropType<[FormError[], FormError]>,
39
14
  default: () => ([]),
40
15
  },
41
- })
16
+ }
17
+
18
+ export type FormProps = ExtractPublicPropTypes<typeof formProps>
19
+
20
+ export type FormInjection = {
21
+ registerInput: (name: string, focus: () => void, validate: () => boolean, setError: (val: string) => void) => void;
22
+ unregisterInput: (name: string) => void;
23
+ isInsideForm: boolean;
24
+ }
25
+
26
+ export type FormError = {
27
+ field: string;
28
+ msg: string;
29
+ }
30
+
31
+ export type FormInput = {
32
+ name: string;
33
+ focus: () => void;
34
+ validate: (val?: any) => boolean;
35
+ setError: (val: string) => void;
36
+ }
37
+
38
+ export default {
39
+ name: 'XForm',
40
+ inheritAttrs: false,
41
+ }
42
+ </script>
43
+
44
+ <script setup lang="ts">
45
+ import { provide, onMounted, watch, nextTick, type PropType, type ExtractPublicPropTypes } from 'vue'
46
+ import { injectFormKey } from '../../composables/keys'
47
+ import { useTheme } from '../../composables/theme'
48
+
49
+ import theme from './Form.theme'
50
+
51
+ const props = defineProps(formProps)
42
52
 
43
53
  const emit = defineEmits(['submit'])
44
54
 
45
- const inputs: Form[] = []
55
+ const inputs: FormInput[] = []
46
56
 
47
57
  provide(injectFormKey, {
48
- registerInput: (name: string, focus: ()=> void, validate: ()=> boolean, setError: (val: string)=> void) => {
58
+ registerInput: (name: string, focus: () => void, validate: (val: any) => boolean, setError: (val: string) => void) => {
49
59
  const exists = inputs.find((i) => i.name === name)
50
60
 
51
61
  if (exists) {
52
62
  exists.focus = focus
53
63
  exists.validate = validate
54
64
  exists.setError = setError
55
- }
56
- else inputs.push({ name, focus, validate, setError })
65
+ } else inputs.push({ name, focus, validate, setError })
57
66
  },
58
67
  unregisterInput: (name: string) => {
59
68
  const index = inputs.findIndex((i) => i.name === name)
@@ -0,0 +1,3 @@
1
+ export { default as XForm } from './Form.vue'
2
+ export type { FormProps, FormError, FormInjection, FormInput } from './Form.vue'
3
+ export type { FormTheme } from './Form.theme'
@@ -8,7 +8,7 @@ export default defineComponent({
8
8
  },
9
9
  setup(props) {
10
10
  return () => props.error
11
- ? <p class="text-sm text-red-500 dark:text-red-400 mt-1">{props.error}</p>
12
- : props.helper ? <p class="text-sm text-gray-500 dark:text-gray-400 mt-1">{props.helper}</p> : ''
11
+ ? <p class="text-sm text-red-500 dark:text-red-400 mt-1">{props.error}</p>
12
+ : props.helper ? <p class="text-sm text-gray-500 dark:text-gray-400 mt-1">{props.helper}</p> : ''
13
13
  },
14
14
  })
@@ -1,8 +1,16 @@
1
- import type { ThemeParams } from '../../composables/theme'
1
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
2
+ import type { IconProps } from './Icon.vue'
2
3
 
3
- export default {
4
+ type InternalClasses = 'wrapper'
5
+
6
+ interface InternalTheme extends ThemeComponent<IconProps, InternalClasses> {}
7
+ export interface IconTheme extends Omit<InternalTheme, 'classes'> {
8
+ classes?: Partial<ThemeClasses<IconProps, InternalClasses>>;
9
+ }
10
+
11
+ const theme: InternalTheme = {
4
12
  classes: {
5
- wrapper: ({ props }: ThemeParams) => {
13
+ wrapper: ({ props }) => {
6
14
  const classes = 'inline'
7
15
 
8
16
  if (props.size === 'xs') return classes + ' h-3 w-3'
@@ -14,3 +22,5 @@ export default {
14
22
  },
15
23
  },
16
24
  }
25
+
26
+ export default theme
@@ -1,16 +1,5 @@
1
1
  <script lang="ts">
2
- export default { name: 'XIcon' }
3
- </script>
4
-
5
- <script setup lang="ts">
6
- import { inject, ref, watchEffect, normalizeStyle, unref, computed } from 'vue'
7
- import { useCommon } from '../../composables/common'
8
- import { injectIconsKey } from '../../composables/keys'
9
- import { useTheme } from '../../composables/theme'
10
-
11
- import theme from './Icon.theme'
12
-
13
- const props = defineProps({
2
+ const iconProps = {
14
3
  ...useCommon.props(),
15
4
  icon: {
16
5
  type: String,
@@ -21,7 +10,27 @@ const props = defineProps({
21
10
  type: String,
22
11
  default: '0 0 24 24',
23
12
  },
24
- })
13
+ }
14
+
15
+ export type IconProps = ExtractPublicPropTypes<typeof iconProps>
16
+
17
+ export default {
18
+ name: 'XIcon',
19
+ validators: {
20
+ ...useCommon.validators(),
21
+ },
22
+ }
23
+ </script>
24
+
25
+ <script setup lang="ts">
26
+ import { inject, ref, watchEffect, normalizeStyle, unref, computed, type ExtractPublicPropTypes } from 'vue'
27
+ import { useCommon } from '../../composables/common'
28
+ import { injectIconsKey } from '../../composables/keys'
29
+ import { useTheme } from '../../composables/theme'
30
+
31
+ import theme from './Icon.theme'
32
+
33
+ const props = defineProps(iconProps)
25
34
 
26
35
  const icons: any = inject(injectIconsKey, () => ({}))
27
36
 
@@ -32,7 +41,7 @@ const computedViewBox = ref(props.viewBox)
32
41
  const attrs = ref({})
33
42
 
34
43
  watchEffect(() => {
35
- const injectedIcon = icons && icons[props.icon]
44
+ const injectedIcon = icons && props.icon && icons[props.icon]
36
45
 
37
46
  isWrapSVG.value = false
38
47
  computedIcon.value = injectedIcon
@@ -56,7 +65,7 @@ watchEffect(() => {
56
65
  computedViewBox.value = injectedIcon.viewBox || injectedIcon.viewbox || props.viewBox
57
66
  }
58
67
  } else {
59
- computedIcon.value = props.icon
68
+ computedIcon.value = props.icon || ''
60
69
  }
61
70
  })
62
71
 
@@ -4,7 +4,11 @@ import Icon from '../Icon.vue'
4
4
 
5
5
  describe('Icon', () => {
6
6
  it('renders without errors', () => {
7
- const wrapper = mount(Icon)
7
+ const wrapper = mount(Icon, {
8
+ props: {
9
+ icon: 'star',
10
+ },
11
+ })
8
12
 
9
13
  expect(wrapper.vm).toBeTruthy()
10
14
  })
@@ -0,0 +1,3 @@
1
+ export { default as XIcon } from './Icon.vue'
2
+ export type { IconProps } from './Icon.vue'
3
+ export type { IconTheme } from './Icon.theme'
@@ -1,7 +1,17 @@
1
- import type { ThemeParams } from '../../composables/theme'
1
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
2
+ import type { ImageProps } from './Image.vue'
2
3
 
3
- export default {
4
+ type InternalClasses = 'wrapper'
5
+
6
+ interface InternalTheme extends ThemeComponent<ImageProps, InternalClasses> {}
7
+ export interface ImageTheme extends Omit<InternalTheme, 'classes'> {
8
+ classes?: Partial<ThemeClasses<ImageProps, InternalClasses>>;
9
+ }
10
+
11
+ const theme: InternalTheme = {
4
12
  classes: {
5
13
  wrapper: '',
6
14
  },
7
15
  }
16
+
17
+ export default theme
@@ -1,18 +1,22 @@
1
1
  <script lang="ts">
2
+ const imageProps = {
3
+ src: String,
4
+ }
5
+
6
+ export type ImageProps = ExtractPublicPropTypes<typeof imageProps>
7
+
2
8
  export default { name: 'XImage' }
3
9
  </script>
4
10
 
5
11
  <script setup lang="ts">
6
- import { watch, ref } from 'vue'
12
+ import { watch, ref, type ExtractPublicPropTypes } from 'vue'
7
13
  import { useTheme } from '../../composables/theme'
8
14
 
9
15
  import theme from './Image.theme'
10
16
 
11
17
  const fallback = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='
12
18
 
13
- const props = defineProps({
14
- src: String,
15
- })
19
+ const props = defineProps(imageProps)
16
20
 
17
21
  const source = ref<string | undefined>(fallback)
18
22
 
@@ -0,0 +1,3 @@
1
+ export { default as XImage } from './Image.vue'
2
+ export type { ImageProps } from './Image.vue'
3
+ export type { ImageTheme } from './Image.theme'
@@ -1,45 +1,35 @@
1
- export { default as XAlert } from './alert/Alert.vue'
2
- export { default as XAvatar } from './avatar/Avatar.vue'
3
- export { default as XBadge } from './badge/Badge.vue'
4
- export { default as XBreadcrumbs } from './breadcrumbs/Breadcrumbs.vue'
5
- export { default as XButton } from './button/Button.vue'
6
- export { default as XButtonGroup } from './button/ButtonGroup.vue'
7
- export { default as XCard } from './card/Card.vue'
8
- export { default as XCheckbox } from './checkbox/Checkbox.vue'
9
- export { default as XCollapse } from './collapse/Collapse.vue'
10
- export { default as XContainer } from './container/Container.vue'
11
- export { default as XDivider } from './divider/Divider.vue'
12
- export { default as XDrawer } from './drawer/Drawer.vue'
13
- export { default as XForm } from './form/Form.vue'
14
- export { default as XIcon } from './icon/Icon.vue'
15
- export { default as XImage } from './image/Image.vue'
16
- export { default as XInput } from './input/Input.vue'
17
- export { default as XLink } from './link/Link.vue'
18
- export { default as XMenu } from './menu/Menu.vue'
19
- export { default as XMenuItem } from './menu/MenuItem.vue'
20
- export { default as XModal } from './modal/Modal.vue'
21
- export { default as XNotifications } from './notifications/Notifications.vue'
22
- export { default as XPagination } from './pagination/Pagination.vue'
23
- export { default as XPaginationItem } from './pagination/PaginationItem.vue'
24
- export { default as XPopover } from './popover/Popover.vue'
25
- export { default as XPopoverContainer } from './popover/PopoverContainer.vue'
26
- export { default as XProgress } from './progress/Progress.vue'
27
- export { default as XRadio } from './radio/Radio.vue'
28
- export { default as XScroll } from './scroll/Scroll.vue'
29
- export { default as XSelect } from './select/Select.vue'
30
- export { default as XSkeleton } from './skeleton/Skeleton.vue'
31
- export { default as XSlider } from './slider/Slider.vue'
32
- export { default as XSpacer } from './spacer/Spacer'
33
- export { default as XSpinner } from './spinner/Spinner.vue'
34
- export { default as XTable } from './table/Table.vue'
35
- export { default as XTableBody } from './table/TableBody'
36
- export { default as XTableCell } from './table/TableCell.vue'
37
- export { default as XTableHead } from './table/TableHead'
38
- export { default as XTableHeader } from './table/TableHeader.vue'
39
- export { default as XTableRow } from './table/TableRow.vue'
40
- export { default as XTab } from './tab/Tab.vue'
41
- export { default as XTabGroup } from './tab/TabGroup.vue'
42
- export { default as XTag } from './tag/Tag.vue'
43
- export { default as XTextarea } from './textarea/Textarea.vue'
44
- export { default as XToggle } from './toggle/Toggle.vue'
45
- export { default as XTooltip } from './tooltip/Tooltip.vue'
1
+ export * from './alert'
2
+ export * from './avatar'
3
+ export * from './badge'
4
+ export * from './breadcrumbs'
5
+ export * from './button'
6
+ export * from './card'
7
+ export * from './checkbox'
8
+ export * from './collapse'
9
+ export * from './container'
10
+ export * from './divider'
11
+ export * from './drawer'
12
+ export * from './form'
13
+ export * from './icon'
14
+ export * from './image'
15
+ export * from './input'
16
+ export * from './link'
17
+ export * from './menu'
18
+ export * from './modal'
19
+ export * from './notifications'
20
+ export * from './pagination'
21
+ export * from './popover'
22
+ export * from './progress'
23
+ export * from './radio'
24
+ export * from './scroll'
25
+ export * from './select'
26
+ export * from './skeleton'
27
+ export * from './slider'
28
+ export * from './spacer'
29
+ export * from './spinner'
30
+ export * from './tab'
31
+ export * from './table'
32
+ export * from './tag'
33
+ export * from './textarea'
34
+ export * from './toggle'
35
+ export * from './tooltip'
@@ -1,10 +1,19 @@
1
- import type { ThemeParams } from '../../composables/theme'
1
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
2
+ import type { InputProps } from './Input.vue'
2
3
 
3
- export default {
4
+ type InternalClasses = 'wrapper' | 'label' | 'input' | 'icon'
5
+ type InternalExtraData = { errorInternal: any; }
6
+
7
+ interface InternalTheme extends ThemeComponent<InputProps, InternalClasses, InternalExtraData> {}
8
+ export interface InputTheme extends Omit<InternalTheme, 'classes'> {
9
+ classes?: Partial<ThemeClasses<InputProps, InternalClasses, InternalExtraData>>;
10
+ }
11
+
12
+ const theme: InternalTheme = {
4
13
  classes: {
5
14
  wrapper: 'inline-block align-bottom text-left',
6
15
 
7
- label: ({ props }: ThemeParams) => {
16
+ label: ({ props }) => {
8
17
  const classes = 'font-medium text-gray-800 dark:text-gray-200 mb-1'
9
18
 
10
19
  if (props.size === 'xs') return classes + ' text-xs'
@@ -12,10 +21,10 @@ export default {
12
21
  else if (props.size === 'lg') return classes + ' text-lg'
13
22
  else if (props.size === 'xl') return classes + ' text-xl'
14
23
 
15
- return classes // + ' text-sm'
24
+ return classes
16
25
  },
17
26
 
18
- input: ({ props, data }: ThemeParams) => {
27
+ input: ({ props, data }) => {
19
28
  const classes = ['appearance-none block w-full placeholder-gray-400 dark:placeholder-gray-500 outline-transparent outline outline-2 outline-offset-[-1px] transition-all duration-150 ease-in-out border-gray-300 dark:border-gray-700 border shadow-sm rounded-md']
20
29
 
21
30
  if (!data.errorInternal && !props.disabled) classes.push('hover:border-gray-400 dark:hover:border-gray-500')
@@ -36,9 +45,11 @@ export default {
36
45
  icon: 'text-gray-600 dark:text-gray-300 absolute my-auto inset-y-0',
37
46
  },
38
47
 
39
- styles: ({ colors, props, css }: ThemeParams) => {
48
+ styles: ({ colors, props, css }) => {
40
49
  const color = colors.getPalette(props.color)
41
50
 
42
51
  return css.get('border', color[400])
43
52
  },
44
53
  }
54
+
55
+ export default theme
@@ -1,22 +1,5 @@
1
1
  <script lang="ts">
2
- export default { name: 'XInput' }
3
- </script>
4
-
5
- <script setup lang="ts">
6
- import { computed, reactive, ref } from 'vue'
7
- import { useTheme } from '../../composables/theme'
8
- import { useColors } from '../../composables/colors'
9
- import { useCommon } from '../../composables/common'
10
- import { useInputtable } from '../../composables/inputtable'
11
- import { useInteractive } from '../../composables/interactive'
12
- import { eyeIcon, eyeVisibleIcon } from '../../common/icons'
13
-
14
- import XIcon from '../icon/Icon.vue'
15
- import XInputError from '../helpers/InputError'
16
-
17
- import theme from './Input.theme'
18
-
19
- const props = defineProps({
2
+ const inputProps = {
20
3
  ...useCommon.props(),
21
4
  ...useColors.props('primary'),
22
5
  ...useInteractive.props(),
@@ -28,7 +11,7 @@ const props = defineProps({
28
11
  helper: String,
29
12
  label: String,
30
13
  dir: {
31
- type: String,
14
+ type: String as PropType<'ltr' | 'rtl'>,
32
15
  default: 'ltr',
33
16
  },
34
17
  icon: String,
@@ -44,13 +27,41 @@ const props = defineProps({
44
27
  default: 'text',
45
28
  },
46
29
  block: Boolean,
47
- })
30
+ }
31
+
32
+ export type InputProps = ExtractPublicPropTypes<typeof inputProps>
33
+
34
+ export default {
35
+ name: 'XInput',
36
+ validators: {
37
+ ...useCommon.validators(),
38
+ },
39
+ }
40
+ </script>
41
+
42
+ <script setup lang="ts">
43
+ import { ref, type PropType, type ExtractPublicPropTypes, watch } from 'vue'
44
+ import { useTheme } from '../../composables/theme'
45
+ import { useColors } from '../../composables/colors'
46
+ import { useCommon } from '../../composables/common'
47
+ import { useInputtable } from '../../composables/inputtable'
48
+ import { useInteractive } from '../../composables/interactive'
49
+ import { eyeIcon, eyeVisibleIcon } from '../../common/icons'
50
+
51
+ import XIcon from '../icon/Icon.vue'
52
+ import XInputError from '../helpers/InputError'
53
+
54
+ import theme from './Input.theme'
55
+
56
+ const props = defineProps(inputProps)
48
57
 
49
58
  const emit = defineEmits(useInputtable.emits())
50
59
 
51
60
  const elRef = ref<HTMLInputElement | null>(null)
52
61
  const currentType = ref(props.type)
53
62
 
63
+ watch(() => props.type, (newValue) => { currentType.value = newValue })
64
+
54
65
  function onChange(e: Event) {
55
66
  if (!e.target) return
56
67
 
@@ -60,11 +71,11 @@ function onChange(e: Event) {
60
71
  const value = Number(target.value)
61
72
 
62
73
  if (typeof props.min !== 'undefined') {
63
- if (value < props.min) target.value = props.min.toString()
74
+ if (value < Number(props.min)) target.value = props.min.toString()
64
75
  }
65
76
 
66
77
  if (typeof props.max !== 'undefined') {
67
- if (value > props.max) target.value = props.max.toString()
78
+ if (value > Number(props.max)) target.value = props.max.toString()
68
79
  }
69
80
  }
70
81
  }
@@ -0,0 +1,3 @@
1
+ export { default as XInput } from './Input.vue'
2
+ export type { InputProps } from './Input.vue'
3
+ export type { InputTheme } from './Input.theme'
@@ -1,11 +1,19 @@
1
- import type { ThemeParams } from '../../composables/theme'
1
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
2
+ import type { LinkProps } from './Link.vue'
2
3
 
3
- export default {
4
+ type InternalClasses = 'wrapper'
5
+
6
+ interface InternalTheme extends ThemeComponent<LinkProps, InternalClasses> {}
7
+ export interface LinkTheme extends Omit<InternalTheme, 'classes'> {
8
+ classes?: Partial<ThemeClasses<LinkProps, InternalClasses>>;
9
+ }
10
+
11
+ const theme: InternalTheme = {
4
12
  classes: {
5
13
  wrapper: 'transition duration-300 ease-in-out cursor-pointer inline-flex',
6
14
  },
7
15
 
8
- styles: ({ colors, props, css }: ThemeParams) => {
16
+ styles: ({ colors, props, css }) => {
9
17
  const color = colors.getPalette(props.color || 'gray')
10
18
 
11
19
  return css.variables({
@@ -24,3 +32,5 @@ export default {
24
32
  })
25
33
  },
26
34
  }
35
+
36
+ export default theme
@@ -1,8 +1,23 @@
1
1
  <script lang="ts">
2
+ const linkProps = {
3
+ ...useColors.props(),
4
+ tag: {
5
+ type: String,
6
+ default: 'a',
7
+ },
8
+ to: [String, Object],
9
+ shadow: Boolean,
10
+ external: Boolean,
11
+ underline: Boolean,
12
+ }
13
+
14
+ export type LinkProps = ExtractPublicPropTypes<typeof linkProps>
15
+
2
16
  export default { name: 'XLink' }
3
17
  </script>
4
18
 
5
19
  <script setup lang="ts">
20
+ import type { ExtractPublicPropTypes } from 'vue'
6
21
  import { useColors } from '../../composables/colors'
7
22
  import { useTheme } from '../../composables/theme'
8
23
  import { externalIcon } from '../../common/icons'
@@ -11,17 +26,7 @@ import XIcon from '../icon/Icon.vue'
11
26
 
12
27
  import theme from './Link.theme'
13
28
 
14
- const props = defineProps({
15
- ...useColors.props(),
16
- tag: {
17
- type: String,
18
- default: 'a',
19
- },
20
- to: [String, Object],
21
- shadow: Boolean,
22
- external: Boolean,
23
- underline: Boolean,
24
- })
29
+ const props = defineProps(linkProps)
25
30
 
26
31
  const { styles, classes, className } = useTheme('link', theme, props)
27
32
  </script>
@@ -62,12 +67,14 @@ const { styles, classes, className } = useTheme('link', theme, props)
62
67
 
63
68
  &--shadow {
64
69
  box-shadow: inset 0 -0.315em 0 0 var(--x-link-shadow);
70
+
65
71
  &:hover {
66
72
  box-shadow: inset 0 -1.325em 0 0 var(--x-link-shadow);
67
73
  }
68
74
  }
69
75
 
70
- :global(.dark) &, &:global(.dark) {
76
+ :global(.dark) &,
77
+ &:global(.dark) {
71
78
  color: var(--x-link-dark-text);
72
79
 
73
80
  &:hover {
@@ -76,6 +83,7 @@ const { styles, classes, className } = useTheme('link', theme, props)
76
83
 
77
84
  &--shadow {
78
85
  box-shadow: inset 0 -0.315em 0 0 var(--x-link-dark-shadow);
86
+
79
87
  &:hover {
80
88
  box-shadow: inset 0 -1.325em 0 0 var(--x-link-dark-shadow);
81
89
  }
@@ -0,0 +1,3 @@
1
+ export { default as XLink } from './Link.vue'
2
+ export type { LinkProps } from './Link.vue'
3
+ export type { LinkTheme } from './Link.theme'
@@ -1,7 +1,17 @@
1
- import type { ThemeParams } from '../../composables/theme'
1
+ import type { ThemeClasses, ThemeComponent } from '../../composables/theme'
2
+ import type { MenuProps } from './Menu.vue'
2
3
 
3
- export default {
4
+ type InternalClasses = 'wrapper'
5
+
6
+ interface InternalTheme extends ThemeComponent<MenuProps, InternalClasses> {}
7
+ export interface MenuTheme extends Omit<InternalTheme, 'classes'> {
8
+ classes?: Partial<ThemeClasses<MenuProps, InternalClasses>>;
9
+ }
10
+
11
+ const theme: InternalTheme = {
4
12
  classes: {
5
13
  wrapper: '',
6
14
  },
7
15
  }
16
+
17
+ export default theme