@indielayer/ui 1.0.0-alpha.8 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/README.md +6 -3
  2. package/lib/common/icons.d.ts +15 -0
  3. package/lib/common/utils.d.ts +32 -0
  4. package/lib/components/alert/Alert.theme.d.ts +8 -0
  5. package/lib/components/alert/Alert.vue.d.ts +1 -12
  6. package/lib/components/alert/__tests__/Alert.spec.d.ts +1 -0
  7. package/lib/components/avatar/Avatar.theme.d.ts +8 -0
  8. package/lib/components/avatar/Avatar.vue.d.ts +5 -8
  9. package/lib/components/avatar/__tests__/Avatar.spec.d.ts +1 -0
  10. package/lib/components/badge/Badge.theme.d.ts +8 -0
  11. package/lib/components/badge/Badge.vue.d.ts +5 -6
  12. package/lib/components/badge/__tests__/Badge.spec.d.ts +1 -0
  13. package/lib/components/breadcrumbs/Breadcrumbs.theme.d.ts +8 -0
  14. package/lib/components/breadcrumbs/Breadcrumbs.vue.d.ts +19 -8
  15. package/lib/components/breadcrumbs/__tests__/Breadcrumbs.spec.d.ts +1 -0
  16. package/lib/components/button/Button.theme.d.ts +10 -0
  17. package/lib/components/button/Button.vue.d.ts +10 -16
  18. package/lib/components/button/ButtonGroup.theme.d.ts +6 -0
  19. package/lib/components/button/ButtonGroup.vue.d.ts +5 -2
  20. package/lib/components/button/__tests__/ Button.spec.d.ts +1 -0
  21. package/lib/components/button/__tests__/ ButtonGroup.spec.d.ts +1 -0
  22. package/lib/components/card/Card.theme.d.ts +7 -0
  23. package/lib/components/card/Card.vue.d.ts +2 -2
  24. package/lib/components/card/__tests__/Card.spec.d.ts +1 -0
  25. package/lib/components/checkbox/Checkbox.theme.d.ts +11 -0
  26. package/lib/components/checkbox/Checkbox.vue.d.ts +10 -14
  27. package/lib/components/checkbox/__tests__/Checkbox.spec.d.ts +1 -0
  28. package/lib/components/collapse/Collapse.theme.d.ts +9 -0
  29. package/lib/components/collapse/Collapse.vue.d.ts +12 -19
  30. package/lib/components/collapse/__tests__/Collapse.spec.d.ts +1 -0
  31. package/lib/components/container/Container.theme.d.ts +6 -0
  32. package/lib/components/container/Container.vue.d.ts +1 -1
  33. package/lib/components/container/__tests__/Container.spec.d.ts +1 -0
  34. package/lib/components/divider/Divider.theme.d.ts +9 -0
  35. package/lib/components/divider/Divider.vue.d.ts +1 -1
  36. package/lib/components/divider/__tests__/Divider.spec.d.ts +1 -0
  37. package/lib/components/drawer/Drawer.theme.d.ts +7 -0
  38. package/lib/components/drawer/Drawer.vue.d.ts +3 -15
  39. package/lib/components/drawer/__tests__/Drawer.spec.d.ts +1 -0
  40. package/lib/components/form/Form.theme.d.ts +6 -0
  41. package/lib/components/form/Form.vue.d.ts +9 -7
  42. package/lib/components/form/__tests__/Form.spec.d.ts +1 -0
  43. package/lib/components/helpers/InputError.d.ts +8 -0
  44. package/lib/components/icon/Icon.theme.d.ts +7 -0
  45. package/lib/components/icon/Icon.vue.d.ts +4 -8
  46. package/lib/components/icon/__tests__/Icon.spec.d.ts +1 -0
  47. package/lib/components/image/Image.theme.d.ts +6 -0
  48. package/lib/components/image/Image.vue.d.ts +1 -3
  49. package/lib/components/image/__tests__/Image.spec.d.ts +1 -0
  50. package/lib/components/index.d.ts +3 -3
  51. package/lib/components/input/Input.theme.d.ts +11 -0
  52. package/lib/components/input/Input.vue.d.ts +27 -25
  53. package/lib/components/input/__tests__/Input.spec.d.ts +1 -0
  54. package/lib/components/link/Link.theme.d.ts +8 -0
  55. package/lib/components/link/Link.vue.d.ts +3 -5
  56. package/lib/components/link/__tests__/Link.spec.d.ts +1 -0
  57. package/lib/components/menu/Menu.theme.d.ts +6 -0
  58. package/lib/components/menu/Menu.vue.d.ts +6 -3
  59. package/lib/components/menu/MenuItem.theme.d.ts +8 -0
  60. package/lib/components/menu/MenuItem.vue.d.ts +5 -30
  61. package/lib/components/menu/__tests__/Menu.spec.d.ts +1 -0
  62. package/lib/components/menu/__tests__/MenuItem.spec.d.ts +1 -0
  63. package/lib/components/modal/Modal.theme.d.ts +13 -0
  64. package/lib/components/modal/Modal.vue.d.ts +1 -6
  65. package/lib/components/modal/__tests__/Modal.spec.d.ts +1 -0
  66. package/lib/components/notifications/Notifications.theme.d.ts +8 -0
  67. package/lib/components/notifications/Notifications.vue.d.ts +11 -24
  68. package/lib/components/notifications/__tests__/Notifications.spec.d.ts +1 -0
  69. package/lib/components/pagination/Pagination.theme.d.ts +9 -0
  70. package/lib/components/pagination/Pagination.vue.d.ts +7 -16
  71. package/lib/components/pagination/PaginationItem.theme.d.ts +7 -0
  72. package/lib/components/pagination/PaginationItem.vue.d.ts +4 -3
  73. package/lib/components/pagination/__tests__/Pagination.spec.d.ts +1 -0
  74. package/lib/components/pagination/__tests__/PaginationItem.spec.d.ts +1 -0
  75. package/lib/components/popover/Popover.theme.d.ts +7 -0
  76. package/lib/components/popover/Popover.vue.d.ts +13 -13
  77. package/lib/components/popover/PopoverContainer.theme.d.ts +6 -0
  78. package/lib/components/popover/PopoverContainer.vue.d.ts +1 -1
  79. package/lib/components/popover/__tests__/Popover.spec.d.ts +1 -0
  80. package/lib/components/popover/__tests__/PopoverContainer.spec.d.ts +1 -0
  81. package/lib/components/progress/Progress.theme.d.ts +10 -0
  82. package/lib/components/progress/Progress.vue.d.ts +1 -3
  83. package/lib/components/progress/__tests__/Progress.spec.d.ts +1 -0
  84. package/lib/components/radio/Radio.theme.d.ts +12 -0
  85. package/lib/components/radio/Radio.vue.d.ts +12 -13
  86. package/lib/components/radio/__tests__/Radio.spec.d.ts +1 -0
  87. package/lib/components/scroll/Scroll.theme.d.ts +6 -0
  88. package/lib/components/scroll/Scroll.vue.d.ts +1 -7
  89. package/lib/components/scroll/__tests__/Scroll.spec.d.ts +1 -0
  90. package/lib/components/select/Select.theme.d.ts +13 -0
  91. package/lib/components/select/Select.vue.d.ts +8 -28
  92. package/lib/components/select/__tests__/Select.spec.d.ts +1 -0
  93. package/lib/components/skeleton/Skeleton.theme.d.ts +6 -0
  94. package/lib/components/skeleton/Skeleton.vue.d.ts +1 -1
  95. package/lib/components/skeleton/__tests__/Skeleton.spec.d.ts +1 -0
  96. package/lib/components/slider/Slider.theme.d.ts +10 -0
  97. package/lib/components/slider/Slider.vue.d.ts +8 -17
  98. package/lib/components/slider/__tests__/Slider.spec.d.ts +1 -0
  99. package/lib/components/spacer/Spacer.d.ts +2 -0
  100. package/lib/components/spacer/__tests__/Spacer.spec.d.ts +1 -0
  101. package/lib/components/spinner/Spinner.vue.d.ts +15 -6
  102. package/lib/components/spinner/__tests__/Spinner.spec.d.ts +1 -0
  103. package/lib/components/tab/Tab.theme.d.ts +9 -0
  104. package/lib/components/tab/Tab.vue.d.ts +4 -13
  105. package/lib/components/tab/TabGroup.theme.d.ts +10 -0
  106. package/lib/components/tab/TabGroup.vue.d.ts +4 -8
  107. package/lib/components/tab/__tests__/Tab.spec.d.ts +1 -0
  108. package/lib/components/tab/__tests__/TabGroup.spec.d.ts +1 -0
  109. package/lib/components/table/Table.theme.d.ts +8 -0
  110. package/lib/components/table/Table.vue.d.ts +6 -10
  111. package/lib/components/table/TableBody.d.ts +2 -0
  112. package/lib/components/table/TableCell.theme.d.ts +7 -0
  113. package/lib/components/table/TableCell.vue.d.ts +1 -1
  114. package/lib/components/table/TableHead.d.ts +2 -0
  115. package/lib/components/table/TableHeader.vue.d.ts +2 -2
  116. package/lib/components/table/TableRow.vue.d.ts +1 -1
  117. package/lib/components/table/__tests__/Table.spec.d.ts +1 -0
  118. package/lib/components/tag/Tag.theme.d.ts +9 -0
  119. package/lib/components/tag/Tag.vue.d.ts +5 -5
  120. package/lib/components/tag/__tests__/Tag.spec.d.ts +1 -0
  121. package/lib/components/textarea/Textarea.theme.d.ts +10 -0
  122. package/lib/components/textarea/Textarea.vue.d.ts +18 -24
  123. package/lib/components/textarea/__tests__/Textarea.spec.d.ts +1 -0
  124. package/lib/components/toggle/Toggle.theme.d.ts +11 -0
  125. package/lib/components/toggle/Toggle.vue.d.ts +10 -11
  126. package/lib/components/toggle/__tests__/Toggle.spec.d.ts +1 -0
  127. package/lib/components/tooltip/Tooltip.theme.d.ts +11 -0
  128. package/lib/components/tooltip/__tests__/Tooltip.spec.d.ts +1 -0
  129. package/lib/composables/colors-utils.d.ts +0 -1
  130. package/lib/composables/colors.d.ts +8 -4
  131. package/lib/composables/common.d.ts +1 -0
  132. package/lib/composables/css.d.ts +6 -5
  133. package/lib/composables/index.d.ts +1 -1
  134. package/lib/composables/inputtable.d.ts +1 -1
  135. package/lib/composables/interactive.d.ts +7 -2
  136. package/lib/composables/keys.d.ts +1 -0
  137. package/lib/composables/notifications.d.ts +1 -0
  138. package/lib/composables/theme.d.ts +20 -0
  139. package/lib/create.d.ts +3 -2
  140. package/lib/index.cjs.js +1 -15
  141. package/lib/index.es.js +4451 -3649
  142. package/lib/nuxt.js +2 -1
  143. package/lib/version.d.ts +1 -1
  144. package/package.json +16 -6
  145. package/src/common/icons.ts +15 -0
  146. package/src/common/utils.ts +68 -0
  147. package/src/components/alert/Alert.theme.ts +57 -0
  148. package/src/components/alert/Alert.vue +51 -127
  149. package/src/components/alert/__tests__/Alert.spec.ts +14 -0
  150. package/src/components/avatar/Avatar.theme.ts +39 -0
  151. package/src/components/avatar/Avatar.vue +58 -96
  152. package/src/components/avatar/__tests__/Avatar.spec.ts +11 -0
  153. package/src/components/badge/Badge.theme.ts +13 -0
  154. package/src/components/badge/Badge.vue +58 -65
  155. package/src/components/badge/__tests__/Badge.spec.ts +11 -0
  156. package/src/components/breadcrumbs/Breadcrumbs.theme.ts +9 -0
  157. package/src/components/breadcrumbs/Breadcrumbs.vue +34 -24
  158. package/src/components/breadcrumbs/__tests__/Breadcrumbs.spec.ts +11 -0
  159. package/src/components/button/Button.theme.ts +234 -0
  160. package/src/components/button/Button.vue +94 -356
  161. package/src/components/button/ButtonGroup.theme.ts +5 -0
  162. package/src/components/button/ButtonGroup.vue +30 -29
  163. package/src/components/button/__tests__/ Button.spec.ts +11 -0
  164. package/src/components/button/__tests__/ ButtonGroup.spec.ts +11 -0
  165. package/src/components/card/Card.theme.ts +7 -0
  166. package/src/components/card/Card.vue +18 -11
  167. package/src/components/card/__tests__/Card.spec.ts +11 -0
  168. package/src/components/checkbox/Checkbox.theme.ts +92 -0
  169. package/src/components/checkbox/Checkbox.vue +69 -156
  170. package/src/components/checkbox/__tests__/Checkbox.spec.ts +11 -0
  171. package/src/components/collapse/Collapse.theme.ts +11 -0
  172. package/src/components/collapse/Collapse.vue +99 -118
  173. package/src/components/collapse/__tests__/Collapse.spec.ts +11 -0
  174. package/src/components/container/Container.theme.ts +7 -0
  175. package/src/components/container/Container.vue +17 -9
  176. package/src/components/container/__tests__/Container.spec.ts +11 -0
  177. package/src/components/divider/Divider.theme.ts +11 -0
  178. package/src/components/divider/Divider.vue +22 -18
  179. package/src/components/divider/__tests__/Divider.spec.ts +11 -0
  180. package/src/components/drawer/Drawer.theme.ts +9 -0
  181. package/src/components/drawer/Drawer.vue +160 -177
  182. package/src/components/drawer/__tests__/Drawer.spec.ts +11 -0
  183. package/src/components/form/Form.theme.ts +7 -0
  184. package/src/components/form/Form.vue +90 -73
  185. package/src/components/form/__tests__/Form.spec.ts +11 -0
  186. package/src/components/helpers/InputError.tsx +14 -0
  187. package/src/components/icon/Icon.theme.ts +16 -0
  188. package/src/components/icon/Icon.vue +72 -88
  189. package/src/components/icon/__tests__/Icon.spec.ts +11 -0
  190. package/src/components/image/Image.theme.ts +7 -0
  191. package/src/components/image/Image.vue +22 -23
  192. package/src/components/image/__tests__/Image.spec.ts +11 -0
  193. package/src/components/index.ts +3 -3
  194. package/src/components/input/Input.theme.ts +44 -0
  195. package/src/components/input/Input.vue +97 -130
  196. package/src/components/input/__tests__/Input.spec.ts +11 -0
  197. package/src/components/link/Link.theme.ts +26 -0
  198. package/src/components/link/Link.vue +41 -66
  199. package/src/components/link/__tests__/Link.spec.ts +11 -0
  200. package/src/components/menu/Menu.theme.ts +7 -0
  201. package/src/components/menu/Menu.vue +54 -45
  202. package/src/components/menu/MenuItem.theme.ts +107 -0
  203. package/src/components/menu/MenuItem.vue +97 -199
  204. package/src/components/menu/__tests__/Menu.spec.ts +11 -0
  205. package/src/components/menu/__tests__/MenuItem.spec.ts +11 -0
  206. package/src/components/modal/Modal.theme.ts +29 -0
  207. package/src/components/modal/Modal.vue +78 -101
  208. package/src/components/modal/__tests__/Modal.spec.ts +11 -0
  209. package/src/components/notifications/Notifications.theme.ts +11 -0
  210. package/src/components/notifications/Notifications.vue +233 -247
  211. package/src/components/notifications/__tests__/Notifications.spec.ts +11 -0
  212. package/src/components/pagination/Pagination.theme.ts +27 -0
  213. package/src/components/pagination/Pagination.vue +142 -164
  214. package/src/components/pagination/PaginationItem.theme.ts +14 -0
  215. package/src/components/pagination/PaginationItem.vue +26 -33
  216. package/src/components/pagination/__tests__/Pagination.spec.ts +11 -0
  217. package/src/components/pagination/__tests__/PaginationItem.spec.ts +11 -0
  218. package/src/components/popover/Popover.theme.ts +9 -0
  219. package/src/components/popover/Popover.vue +153 -101
  220. package/src/components/popover/PopoverContainer.theme.ts +7 -0
  221. package/src/components/popover/PopoverContainer.vue +17 -9
  222. package/src/components/popover/__tests__/Popover.spec.ts +11 -0
  223. package/src/components/popover/__tests__/PopoverContainer.spec.ts +11 -0
  224. package/src/components/progress/Progress.theme.ts +26 -0
  225. package/src/components/progress/Progress.vue +29 -53
  226. package/src/components/progress/__tests__/Progress.spec.ts +11 -0
  227. package/src/components/radio/Radio.theme.ts +121 -0
  228. package/src/components/radio/Radio.vue +81 -158
  229. package/src/components/radio/__tests__/Radio.spec.ts +11 -0
  230. package/src/components/scroll/Scroll.theme.ts +7 -0
  231. package/src/components/scroll/Scroll.vue +34 -36
  232. package/src/components/scroll/__tests__/Scroll.spec.ts +11 -0
  233. package/src/components/select/Select.theme.ts +54 -0
  234. package/src/components/select/Select.vue +219 -273
  235. package/src/components/select/__tests__/Select.spec.ts +11 -0
  236. package/src/components/skeleton/Skeleton.theme.ts +7 -0
  237. package/src/components/skeleton/Skeleton.vue +17 -9
  238. package/src/components/skeleton/__tests__/Skeleton.spec.ts +11 -0
  239. package/src/components/slider/Slider.theme.ts +30 -0
  240. package/src/components/slider/Slider.vue +135 -168
  241. package/src/components/slider/__tests__/Slider.spec.ts +11 -0
  242. package/src/components/spacer/{Spacer.vue → Spacer.tsx} +3 -6
  243. package/src/components/spacer/__tests__/Spacer.spec.ts +11 -0
  244. package/src/components/spinner/Spinner.vue +10 -34
  245. package/src/components/spinner/__tests__/Spinner.spec.ts +11 -0
  246. package/src/components/tab/Tab.theme.ts +22 -0
  247. package/src/components/tab/Tab.vue +89 -93
  248. package/src/components/tab/TabGroup.theme.ts +43 -0
  249. package/src/components/tab/TabGroup.vue +94 -127
  250. package/src/components/tab/__tests__/Tab.spec.ts +11 -0
  251. package/src/components/tab/__tests__/TabGroup.spec.ts +11 -0
  252. package/src/components/table/Table.theme.ts +19 -0
  253. package/src/components/table/Table.vue +136 -147
  254. package/src/components/table/{TableBody.vue → TableBody.tsx} +3 -8
  255. package/src/components/table/TableCell.theme.ts +27 -0
  256. package/src/components/table/TableCell.vue +30 -58
  257. package/src/components/table/TableHead.tsx +14 -0
  258. package/src/components/table/TableHeader.vue +18 -20
  259. package/src/components/table/TableRow.vue +23 -20
  260. package/src/components/table/__tests__/Table.spec.ts +11 -0
  261. package/src/components/tag/Tag.theme.ts +32 -0
  262. package/src/components/tag/Tag.vue +40 -68
  263. package/src/components/tag/__tests__/Tag.spec.ts +11 -0
  264. package/src/components/textarea/Textarea.theme.ts +62 -0
  265. package/src/components/textarea/Textarea.vue +100 -115
  266. package/src/components/textarea/__tests__/Textarea.spec.ts +11 -0
  267. package/src/components/toggle/Toggle.theme.ts +51 -0
  268. package/src/components/toggle/Toggle.vue +51 -81
  269. package/src/components/toggle/__tests__/Toggle.spec.ts +11 -0
  270. package/src/components/tooltip/Tooltip.theme.ts +51 -0
  271. package/src/components/tooltip/Tooltip.vue +9 -14
  272. package/src/components/tooltip/__tests__/Tooltip.spec.ts +11 -0
  273. package/src/composables/colors-utils.ts +68 -68
  274. package/src/composables/colors.ts +18 -6
  275. package/src/composables/common.ts +1 -0
  276. package/src/composables/css.ts +7 -2
  277. package/src/composables/index.ts +1 -1
  278. package/src/composables/inputtable.ts +1 -1
  279. package/src/composables/interactive.ts +8 -4
  280. package/src/composables/keys.ts +1 -0
  281. package/src/composables/notifications.ts +10 -0
  282. package/src/composables/theme.ts +88 -0
  283. package/src/create.ts +8 -3
  284. package/src/exports/nuxt.js +2 -1
  285. package/src/version.ts +1 -1
  286. package/volar.d.ts +1 -0
  287. package/lib/components/spacer/Spacer.vue.d.ts +0 -2
  288. package/lib/components/table/TableBody.vue.d.ts +0 -2
  289. package/lib/components/table/TableHead.vue.d.ts +0 -2
  290. package/lib/composables/notification.d.ts +0 -1
  291. package/lib/style.css +0 -1
  292. package/src/components/table/TableHead.vue +0 -15
  293. package/src/composables/notification.ts +0 -10
@@ -1,141 +1,69 @@
1
1
  <script lang="ts">
2
- import { defineComponent, computed, ref } from 'vue'
3
- import { useCSS } from '../../composables/css'
2
+ export default { name: 'XRadio' }
3
+ </script>
4
+
5
+ <script setup lang="ts">
6
+ import { computed, ref } from 'vue'
4
7
  import { useCommon } from '../../composables/common'
8
+ import { useTheme } from '../../composables/theme'
5
9
  import { useColors } from '../../composables/colors'
6
10
  import { useInteractive } from '../../composables/interactive'
7
11
  import { useInputtable } from '../../composables/inputtable'
8
12
 
9
13
  import XSpinner from '../../components/spinner/Spinner.vue'
14
+ import XInputError from '../helpers/InputError'
15
+
16
+ import theme from './Radio.theme'
17
+
18
+ const props = defineProps({
19
+ ...useCommon.props(),
20
+ ...useColors.props('primary'),
21
+ ...useInteractive.props(),
22
+ ...useInputtable.props(),
23
+ value: [String, Number, Boolean, Function, Object, Array],
24
+ label: String,
25
+ helper: String,
26
+ glow: Boolean,
27
+ })
10
28
 
11
- export default defineComponent({
12
- name: 'XRadio',
29
+ const emit = defineEmits(useInputtable.emits(false))
13
30
 
14
- components: {
15
- XSpinner,
16
- },
31
+ const elRef = ref<HTMLElement | null>(null)
17
32
 
18
- validators: {
19
- ...useCommon.validators(),
33
+ const selected = computed({
34
+ get() {
35
+ return props.value === props.modelValue
20
36
  },
21
-
22
- props: {
23
- ...useCommon.props(),
24
- ...useColors.props('primary'),
25
- ...useInteractive.props(),
26
- ...useInputtable.props(),
27
- value: [String, Number, Boolean, Function, Object, Array],
28
- label: String,
29
- glow: Boolean,
37
+ set() {
38
+ emit('update:modelValue', props.value)
30
39
  },
40
+ })
31
41
 
32
- emits: useInputtable.emits(false),
33
-
34
- setup(props, { attrs, emit }) {
35
- const elRef = ref<HTMLElement>()
36
-
37
- const selected = computed({
38
- get() {
39
- return props.value === props.modelValue
40
- },
41
- set() {
42
- emit('update:modelValue', props.value)
43
- },
44
- })
45
-
46
- const css = useCSS()
47
- const colors = useColors()
48
- const gray = colors.getPalette('gray')
49
-
50
- const styles = computed(() => {
51
- const color = colors.getPalette(props.color)
52
- const vars = []
53
-
54
- if (props.loading) {
55
- return css.variables({
56
- bg: 'transparent',
57
- border: 'transparent',
58
- dark: {
59
- bg: 'transparent',
60
- border: 'transparent',
61
- },
62
- })
63
- }
64
-
65
- if (props.disabled) {
66
- if (selected.value) {
67
- vars.push(css.variables({
68
- bg: 'transparent',
69
- border: gray[200],
70
- circle: gray[200],
71
- dark: {
72
- bg: 'transparent',
73
- border: gray[700],
74
- circle: gray[700],
75
- },
76
- }))
77
- } else {
78
- vars.push(css.variables({
79
- bg: gray[200],
80
- border: gray[200],
81
- dark: {
82
- bg: gray[700],
83
- border: gray[700],
84
- },
85
- }))
86
- }
87
- } else {
88
- if (selected.value) {
89
- vars.push(css.variables({
90
- bg: 'transparent',
91
- border: color[500],
92
- circle: color[500],
93
- dark: {
94
- bg: 'transparent',
95
- border: color[500],
96
- circle: color[500],
97
- },
98
- }))
99
- } else {
100
- vars.push(css.variables({
101
- bg: '#fff',
102
- border: props.glow ? color[300] : gray[300],
103
- dark: {
104
- bg: gray[900],
105
- border: props.glow ? color[300] : gray[300],
106
- },
107
- }))
108
- }
109
-
110
- if (props.glow) {
111
- vars.push(css.get('glow', colors.getColorOpacity(color[500], 0.5)))
112
- }
113
- }
42
+ const { focus, blur } = useInteractive(elRef)
114
43
 
115
- return vars
116
- })
44
+ const {
45
+ errorInternal,
46
+ reset,
47
+ validate,
48
+ setError,
49
+ } = useInputtable(props, { focus, emit, withListeners: false })
117
50
 
118
- const interactive = useInteractive(elRef)
51
+ const { styles, classes, className } = useTheme('radio', theme, props, { selected })
119
52
 
120
- return {
121
- ...interactive,
122
- ...useInputtable(props, { focus: interactive.focus, emit, withListeners: false }),
123
- selected,
124
- styles,
125
- elRef,
126
- }
127
- },
128
- })
53
+ defineExpose({ focus, blur, reset, validate, setError })
129
54
  </script>
130
55
 
131
56
  <template>
132
57
  <label
133
58
  ref="elRef"
134
59
  tabindex="0"
135
- class="inline-block mb-1 relative cursor-pointer focus:outline-none group"
136
60
  :aria-selected="selected ? 'true' : 'false'"
137
61
  :aria-disabled="(disabled || loading) ? 'true' : undefined"
138
62
  :style="styles"
63
+ :class="[
64
+ className,
65
+ classes.wrapper,
66
+ ]"
139
67
  @keypress.prevent.stop.space="$emit('update:modelValue', value)"
140
68
  >
141
69
  <div
@@ -151,70 +79,65 @@ export default defineComponent({
151
79
  class="invisible absolute"
152
80
  />
153
81
  <div
154
- class="rounded-full flex justify-center items-center flex-shrink-0 border-2 outline-offset-2 outline-slate-300 dark:outline-slate-500 group-focus:outline-1 group-focus:outline
155
- border-[color:var(--x-border)]
156
- bg-[color:var(--x-bg)]
157
- dark:border-[color:var(--x-dark-border)]
158
- dark:bg-[color:var(--x-dark-bg)]
159
- "
160
82
  :class="[
83
+ $style['radio'],
84
+ classes.circle,
161
85
  [glow && !disabled && !loading ? $style['radio--glow'] : ''],
162
- {
163
- 'h-4 w-4': size === 'sm' || size === 'xs',
164
- 'h-5 w-5': !size || !['xs', 'sm', 'xl'].includes(size),
165
- 'h-6 w-6': size === 'xl',
166
- },
167
86
  ]"
168
87
  >
169
88
  <x-spinner v-if="loading" :size="size" class="absolute" />
170
89
  <svg
171
90
  v-else
172
- class="fill-current text-[color:var(--x-circle)] dark:text-[color:var(--x-dark-circle)] w-full"
173
- :class="{
174
- 'opacity-0': !selected,
175
- 'h-2': size === 'sm' || size === 'xs',
176
- 'h-[0.6rem]': !size || !['xs', 'sm', 'lg', 'xl'].includes(size),
177
- 'h-2.5': size === 'lg',
178
- 'h-3': size === 'xl',
179
- }"
180
91
  viewBox="0 0 20 20"
92
+ class="fill-current w-full"
93
+ :class="[
94
+ classes.circleIcon,
95
+ $style['radio_circle']
96
+ ]"
181
97
  >
182
98
  <circle cx="10" cy="10" r="10"/>
183
99
  </svg>
184
100
  </div>
185
- <span
186
- v-if="label"
187
- class="font-medium text-gray-800 dark:text-gray-200 pl-2"
188
- :class="{
189
- 'text-xs': size === 'xs',
190
- 'text-sm': size === 'sm',
191
- 'text-lg': size === 'lg',
192
- 'text-xl': size === 'xl',
193
- }"
194
- v-text="label"
195
- ></span>
101
+ <div>
102
+ <div
103
+ v-if="label"
104
+ :class="classes.label"
105
+ v-text="label"
106
+ ></div>
107
+
108
+ <div
109
+ v-if="$slots.default"
110
+ :class="classes.content"
111
+ >
112
+ <slot></slot>
113
+ </div>
114
+ </div>
196
115
  </div>
197
116
 
198
- <div
199
- v-if="$slots.default"
200
- :class="{
201
- 'text-xs pl-6': size === 'xs',
202
- 'text-sm pl-6': size === 'sm',
203
- 'pl-7': !size || !['xs', 'sm', 'lg', 'xl'].includes(size),
204
- 'text-lg pl-7': size === 'lg',
205
- 'text-lg pl-8': size === 'xl',
206
- }"
207
- >
208
- <slot></slot>
209
- </div>
210
- <p v-if="errorInternal" class="text-sm text-red-500 mt-1" v-text="errorInternal"></p>
117
+ <x-input-error :error="errorInternal" :helper="helper"/>
211
118
  </label>
212
119
  </template>
213
120
 
214
- <style lang="postcss" module scoped>
121
+ <style lang="postcss" module>
215
122
  .radio {
123
+ border-color: var(--x-radio-border);
124
+ background-color: var(--x-radio-bg);
125
+
126
+ &_circle {
127
+ color: var(--x-radio-circle);
128
+ }
129
+
216
130
  &--glow {
217
- box-shadow: 0 0 #000, 0 0 #000, 0 10px 15px -3px var(--x-glow),0 4px 6px -4px var(--x-glow);
131
+ box-shadow: 0 0 #000, 0 0 #000, 0 10px 15px -3px var(--x-radio-glow),0 4px 6px -4px var(--x-radio-glow);
132
+ }
133
+
134
+ :global(.dark) &, &:global(.dark) {
135
+ border-color: var(--x-radio-dark-border);
136
+ background-color: var(--x-radio-dark-bg);
137
+
138
+ &_circle {
139
+ color: var(--x-radio-dark-circle);
140
+ }
218
141
  }
219
142
  }
220
143
  </style>
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import Radio from '../Radio.vue'
4
+
5
+ describe('Radio', () => {
6
+ it('renders without errors', () => {
7
+ const wrapper = mount(Radio)
8
+
9
+ expect(wrapper.vm).toBeTruthy()
10
+ })
11
+ })
@@ -0,0 +1,7 @@
1
+ import type { ThemeParams } from '../../composables/theme'
2
+
3
+ export default {
4
+ classes: {
5
+ wrapper: '',
6
+ },
7
+ }
@@ -1,55 +1,53 @@
1
1
  <script lang="ts">
2
- import { defineComponent, ref, toRefs } from 'vue'
2
+ export default { name: 'XScroll' }
3
+ </script>
4
+
5
+ <script setup lang="ts">
6
+ import { ref, toRefs } from 'vue'
3
7
  import { useScroll, useResizeObserver, useEventListener } from '@vueuse/core'
8
+ import { useTheme } from '../../composables/theme'
4
9
 
5
- export default defineComponent({
6
- name: 'XScroll',
7
-
8
- props: {
9
- shadow: Boolean,
10
- horizontal: Boolean,
11
- mousewheel: Boolean,
12
- scrollbar: {
13
- type: Boolean,
14
- default: true,
15
- },
10
+ import theme from './Scroll.theme'
11
+
12
+ const props = defineProps({
13
+ shadow: Boolean,
14
+ horizontal: Boolean,
15
+ mousewheel: Boolean,
16
+ scrollbar: {
17
+ type: Boolean,
18
+ default: true,
16
19
  },
20
+ })
17
21
 
18
- setup(props) {
19
- const scrollEl = ref<HTMLElement | null>(null)
22
+ const scrollEl = ref<HTMLElement | null>(null)
20
23
 
21
- const { x, y, isScrolling, arrivedState, directions } = useScroll(scrollEl)
22
- const { left, right, top, bottom } = toRefs(arrivedState)
24
+ const { x, y, isScrolling, arrivedState, directions } = useScroll(scrollEl)
25
+ const { left, right, top, bottom } = toRefs(arrivedState)
23
26
 
24
- useResizeObserver(scrollEl, triggerScroll)
27
+ useResizeObserver(scrollEl, triggerScroll)
25
28
 
26
- if (props.horizontal && props.mousewheel)
27
- useEventListener(scrollEl, 'wheel', (e: WheelEvent) => {
28
- if (!scrollEl.value || scrollEl.value.scrollWidth <= scrollEl.value.clientWidth) return
29
+ if (props.horizontal && props.mousewheel)
30
+ useEventListener(scrollEl, 'wheel', (e: WheelEvent) => {
31
+ if (!scrollEl.value || scrollEl.value.scrollWidth <= scrollEl.value.clientWidth) return
29
32
 
30
- e.preventDefault()
31
- scrollEl.value.scrollLeft += e.deltaY + e.deltaX
32
- })
33
+ e.preventDefault()
34
+ scrollEl.value.scrollLeft += e.deltaY + e.deltaX
35
+ })
33
36
 
34
- function triggerScroll() {
35
- scrollEl.value?.dispatchEvent(new CustomEvent('scroll'))
36
- }
37
+ function triggerScroll() {
38
+ scrollEl.value?.dispatchEvent(new CustomEvent('scroll'))
39
+ }
37
40
 
38
- return {
39
- scrollEl,
40
- left,
41
- right,
42
- top,
43
- bottom,
44
- }
45
- },
46
- })
41
+ const { styles, classes, className } = useTheme('scroll', theme, props)
47
42
  </script>
48
43
 
49
44
  <template>
50
45
  <div
51
46
  class="flex relative overflow-hidden"
47
+ :style="styles"
52
48
  :class="[
49
+ className,
50
+ classes.wrapper,
53
51
  $style.scrollWrap,
54
52
  horizontal ? [
55
53
  $style.horizontal,
@@ -81,7 +79,7 @@ export default defineComponent({
81
79
  </div>
82
80
  </template>
83
81
 
84
- <style lang="postcss" scoped module>
82
+ <style lang="postcss" module>
85
83
  .scrollWrap {
86
84
  &:before, &:after {
87
85
  content: "";
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import Scroll from '../Scroll.vue'
4
+
5
+ describe('Scroll', () => {
6
+ it('renders without errors', () => {
7
+ const wrapper = mount(Scroll)
8
+
9
+ expect(wrapper.vm).toBeTruthy()
10
+ })
11
+ })
@@ -0,0 +1,54 @@
1
+ import type { ThemeParams } from '../../composables/theme'
2
+
3
+ export default {
4
+ classes: {
5
+ wrapper: 'inline-block align-bottom text-left focus:outline-none',
6
+
7
+ label: ({ props }: ThemeParams) => {
8
+ let c = 'font-medium text-gray-800 dark:text-gray-200 mb-1'
9
+
10
+ if (props.size === 'xs') c += ' text-xs'
11
+ else if (props.size === 'sm') c += ' text-sm'
12
+ else if (props.size === 'lg') c += ' text-lg'
13
+ else if (props.size === 'xl') c += ' text-xl'
14
+
15
+ return c
16
+ },
17
+
18
+ box: ({ props, data }: ThemeParams) => {
19
+ let c = 'w-full border border-gray-300 dark:border-gray-700 pr-8 outline-transparent outline outline-2 outline-offset-[-1px] transition-all duration-150 ease-in-out rounded-md shadow-sm'
20
+
21
+ if (!data.errorInternal && !props.disabled) c += ' hover:border-gray-400 dark:hover:border-gray-500'
22
+
23
+ if (props.size === 'xs') c += ' px-2 py-1 text-xs'
24
+ else if (props.size === 'sm') c += ' px-2 py-2 text-sm'
25
+ else if (props.size === 'lg') c += ' px-4 py-3 text-lg'
26
+ else if (props.size === 'xl') c += ' px-5 py-4 text-xl'
27
+ else c += ' px-3 py-2'
28
+
29
+ c += props.disabled
30
+ ? ' bg-gray-100 dark:bg-gray-900 text-gray-500 cursor-not-allowed'
31
+ : ' bg-white dark:bg-gray-800 text-gray-700 dark:text-gray-200'
32
+
33
+ return c
34
+ },
35
+
36
+ content: 'py-1 max-h-72 overflow-scroll',
37
+
38
+ iconWrapper: 'pointer-events-none absolute inset-y-0 right-0 flex items-center px-2',
39
+
40
+ icon: ({ props }: ThemeParams) => {
41
+ if (props.size === 'sm' || props.size === 'xs') return 'h-3 w-3'
42
+ else if (props.size === 'lg') return 'h-6 w-6'
43
+ else if (props.size === 'xl') return 'h-7 w-7'
44
+
45
+ return 'h-5 w-5'
46
+ },
47
+ },
48
+
49
+ styles: ({ props, colors, css }: ThemeParams) => {
50
+ const color = colors.getPalette('primary')
51
+
52
+ return css.get('border', color[500])
53
+ },
54
+ }