@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,209 +1,175 @@
1
1
  <script lang="ts">
2
- import { computed, defineComponent, ref, watch } from 'vue'
3
- import { useCSS } from '../../composables/css'
2
+ export default { name: 'XSlider' }
3
+ </script>
4
+
5
+ <script setup lang="ts">
6
+ import { computed, ref, watch } from 'vue'
7
+ import { useEventListener } from '@vueuse/core'
4
8
  import { useCommon } from '../../composables/common'
5
9
  import { useColors } from '../../composables/colors'
6
10
  import { useInteractive } from '../../composables/interactive'
7
11
  import { useInputtable } from '../../composables/inputtable'
8
-
9
- import { useEventListener } from '@vueuse/core'
12
+ import { useTheme } from '../../composables/theme'
10
13
 
11
14
  import XProgress from '../../components/progress/Progress.vue'
12
15
 
13
- export default defineComponent({
14
- name: 'XSlider',
15
-
16
- components: {
17
- XProgress,
16
+ import theme from './Slider.theme'
17
+
18
+ const props = defineProps({
19
+ ...useCommon.props(),
20
+ ...useColors.props('primary'),
21
+ ...useInteractive.props(),
22
+ ...useInputtable.props(),
23
+ label: String,
24
+ min: Number,
25
+ max: Number,
26
+ step: {
27
+ type: Number,
28
+ default: 1,
18
29
  },
30
+ gradient: Boolean,
31
+ })
19
32
 
20
- validators: {
21
- ...useCommon.validators(),
22
- },
33
+ const emit = defineEmits(useInputtable.emits(false))
23
34
 
24
- props: {
25
- ...useCommon.props(),
26
- ...useColors.props('primary'),
27
- ...useInteractive.props(),
28
- ...useInputtable.props(),
29
- label: String,
30
- min: Number,
31
- max: Number,
32
- step: {
33
- type: Number,
34
- default: 1,
35
- },
36
- gradient: Boolean,
37
- },
35
+ const elRef = ref<HTMLElement | null>(null)
36
+ const dragRef = ref<HTMLElement | null>(null)
37
+ const progressRef = ref<HTMLElement | null>(null)
38
+ const value = ref<number>(Number(props.modelValue ?? 0))
38
39
 
39
- emits: useInputtable.emits(false),
40
-
41
- setup(props, { emit }) {
42
- const elRef = ref<HTMLElement>()
43
- const dragRef = ref<HTMLElement>()
44
- const progressRef = ref<HTMLElement>()
45
- const draggingElement = ref<HTMLElement>()
46
- const value = ref<number>(Number(props.modelValue ?? 0))
47
-
48
- const interactive = useInteractive(elRef)
49
-
50
- const labelClasses = computed(() => {
51
- if (props.size === 'xs') return 'text-xs'
52
- else if (props.size === 'sm') return 'text-sm'
53
- else if (props.size === 'lg') return 'text-lg'
54
- else if (props.size === 'xl') return 'text-xl'
55
-
56
- return ''
57
- })
58
-
59
- const css = useCSS('slider')
60
- const colors = useColors()
61
- const primary = colors.getPalette('primary')
62
- const style = computed(() => {
63
- const color = colors.getPalette(props.color)
64
-
65
- return css.variables({
66
- bg: color[500],
67
- border: primary[500],
68
- // width: value.value + '%',
69
- })
70
- })
71
-
72
- watch(() => props.modelValue, (val) => {
73
- value.value = Number(val ?? 0)
74
- })
75
-
76
- watch(value, (val) => {
77
- emit('update:modelValue', val)
78
- })
79
-
80
- const initial = ref()
81
- const position = ref()
82
- const isDragging = computed(() => !!initial.value)
83
-
84
- function startProgressDrag(e: PointerEvent) {
85
- e.stopPropagation()
86
- if (!dragRef.value || !progressRef.value) return
87
-
88
- interactive.focus()
89
-
90
- const maxWidth = progressRef.value.offsetWidth
91
- let percent = Math.floor(e.offsetX * 100 / maxWidth)
92
-
93
- console.log(e, e.offsetX, percent)
94
-
95
- if (percent < 0) percent = 0
96
- if (percent > 100) percent = 100
97
-
98
- value.value = percent
99
-
100
- setTimeout(() => {
101
- initial.value = {
102
- x: e.x,
103
- y: e.y,
104
- maxWidth,
105
- offsetX: dragRef.value?.offsetLeft,
106
- }
107
- })
108
- e.preventDefault()
109
- e.stopPropagation()
110
- }
40
+ const { focus, blur } = useInteractive(elRef)
41
+
42
+ watch(() => props.modelValue, (val) => {
43
+ value.value = Number(val ?? 0)
44
+ })
45
+
46
+ watch(value, (val) => {
47
+ emit('update:modelValue', val)
48
+ })
49
+
50
+ const initial = ref()
51
+ const isDragging = computed(() => !!initial.value)
111
52
 
112
- function startDrag(e: PointerEvent) {
113
- if (!dragRef.value || !progressRef.value) return
53
+ function startProgressDrag(e: PointerEvent) {
54
+ e.stopPropagation()
55
+ if (!dragRef.value || !progressRef.value) return
114
56
 
115
- interactive.focus()
57
+ focus()
116
58
 
117
- initial.value = {
118
- x: e.x,
119
- y: e.y,
120
- maxWidth: progressRef.value.offsetWidth,
121
- offsetX: dragRef.value.offsetLeft,
122
- }
59
+ const maxWidth = progressRef.value.offsetWidth
60
+ let percent = Math.floor(e.offsetX * 100 / maxWidth)
123
61
 
124
- e.preventDefault()
125
- e.stopPropagation()
62
+ if (percent < 0) percent = 0
63
+ if (percent > 100) percent = 100
64
+
65
+ value.value = percent
66
+
67
+ setTimeout(() => {
68
+ initial.value = {
69
+ x: e.x,
70
+ y: e.y,
71
+ maxWidth,
72
+ offsetX: dragRef.value?.offsetLeft,
126
73
  }
74
+ })
75
+ e.preventDefault()
76
+ e.stopPropagation()
77
+ }
127
78
 
128
- function moveDrag(e: PointerEvent) {
129
- if (!initial.value || !dragRef.value) return
79
+ function startDrag(e: PointerEvent) {
80
+ if (!dragRef.value || !progressRef.value) return
130
81
 
131
- const { x, maxWidth, offsetX } = initial.value
132
- const movedX = e.x - x
82
+ focus()
133
83
 
134
- if (movedX === 0) return
84
+ initial.value = {
85
+ x: e.x,
86
+ y: e.y,
87
+ maxWidth: progressRef.value.offsetWidth,
88
+ offsetX: dragRef.value.offsetLeft,
89
+ }
135
90
 
136
- const newMoveX = offsetX + movedX
137
- let percent = Math.floor(newMoveX * 100 / maxWidth)
91
+ e.preventDefault()
92
+ e.stopPropagation()
93
+ }
138
94
 
139
- if (percent < 0) percent = 0
140
- if (percent > 100) percent = 100
95
+ function moveDrag(e: PointerEvent) {
96
+ if (!initial.value || !dragRef.value) return
141
97
 
142
- value.value = percent
98
+ const { x, maxWidth, offsetX } = initial.value
99
+ const movedX = e.x - x
143
100
 
144
- e.preventDefault()
145
- e.stopPropagation()
146
- }
101
+ if (movedX === 0) return
147
102
 
148
- function endDrag(e: PointerEvent) {
149
- if (!initial.value) return
150
- initial.value = undefined
151
- e.preventDefault()
152
- e.stopPropagation()
153
- }
103
+ const newMoveX = offsetX + movedX
104
+ let percent = Math.floor(newMoveX * 100 / maxWidth)
154
105
 
155
- useEventListener(progressRef, 'pointerdown', startProgressDrag, false)
156
- useEventListener(dragRef, 'pointerdown', startDrag, false)
157
- useEventListener(window, 'pointermove', moveDrag, true)
158
- useEventListener(window, 'pointerup', endDrag, true)
106
+ if (percent < 0) percent = 0
107
+ if (percent > 100) percent = 100
159
108
 
160
- useEventListener(elRef, 'keydown', handleKeydown)
109
+ value.value = percent
161
110
 
162
- function handleKeydown(e: KeyboardEvent) {
163
- if (e.code === 'ArrowLeft') {
164
- const nextValue = value.value - 1
111
+ e.preventDefault()
112
+ e.stopPropagation()
113
+ }
165
114
 
166
- if (nextValue >= 0) value.value = nextValue
115
+ function endDrag(e: PointerEvent) {
116
+ if (!initial.value) return
117
+ initial.value = undefined
118
+ e.preventDefault()
119
+ e.stopPropagation()
120
+ }
167
121
 
168
- e.preventDefault()
169
- } else if (e.code === 'ArrowRight') {
170
- const nextValue = value.value + 1
122
+ useEventListener(progressRef, 'pointerdown', startProgressDrag, false)
123
+ useEventListener(dragRef, 'pointerdown', startDrag, false)
124
+ useEventListener(window, 'pointermove', moveDrag, true)
125
+ useEventListener(window, 'pointerup', endDrag, true)
171
126
 
172
- if (nextValue <= 100) value.value = nextValue
127
+ useEventListener(elRef, 'keydown', handleKeydown)
173
128
 
174
- e.preventDefault()
175
- }
176
- }
129
+ function handleKeydown(e: KeyboardEvent) {
130
+ if (e.code === 'ArrowLeft') {
131
+ const nextValue = value.value - 1
177
132
 
178
- return {
179
- ...interactive,
180
- ...useInputtable(props, { focus: interactive.focus, emit, withListeners: false }),
181
- labelClasses,
182
- draggingElement,
183
- value,
184
- elRef,
185
- dragRef,
186
- progressRef,
187
- style,
188
- isDragging,
189
- position,
190
- }
191
- },
192
- })
133
+ if (nextValue >= 0) value.value = nextValue
134
+
135
+ e.preventDefault()
136
+ } else if (e.code === 'ArrowRight') {
137
+ const nextValue = value.value + 1
138
+
139
+ if (nextValue <= 100) value.value = nextValue
140
+
141
+ e.preventDefault()
142
+ }
143
+ }
144
+
145
+ const {
146
+ errorInternal,
147
+ reset,
148
+ validate,
149
+ setError,
150
+ isInsideForm,
151
+ } = useInputtable(props, { focus, emit, withListeners: false })
152
+
153
+ const { styles, classes, className } = useTheme('slider', theme, props)
154
+
155
+ defineExpose({ focus, blur, reset, validate, setError })
193
156
  </script>
194
157
 
195
158
  <template>
196
159
  <label
197
160
  ref="elRef"
198
161
  tabindex="0"
199
- class="group inline-block relative align-bottom text-left focus:outline-none"
200
- :class="{ 'mb-3': isInsideForm }"
201
- :style="style"
162
+ class="group relative"
163
+ :class="[
164
+ className,
165
+ classes.wrapper,
166
+ { 'mb-3': isInsideForm }
167
+ ]"
168
+ :style="styles"
202
169
  >
203
170
  <p
204
171
  v-if="label"
205
- class="font-medium text-gray-800 dark:text-gray-200 mb-1"
206
- :class="labelClasses"
172
+ :class="classes.label"
207
173
  v-text="label"
208
174
  ></p>
209
175
 
@@ -225,10 +191,11 @@ export default defineComponent({
225
191
  </div>
226
192
  <div
227
193
  ref="dragRef"
228
- class="absolute w-[20px] h-[20px] -mt-[13px] -ml-[10px] rounded-full bg-white border shadow-sm
229
- group-focus:border-[color:var(--x-slider-border)]
230
- "
231
- :class="[isDragging ? 'cursor-grabbing' : 'cursor-grab']"
194
+ class="absolute group-focus:border-[color:var(--x-slider-border)]"
195
+ :class="[
196
+ classes.drag,
197
+ isDragging ? 'cursor-grabbing' : 'cursor-grab'
198
+ ]"
232
199
  :style="`left: ${value}%;`"
233
200
  ></div>
234
201
  </div>
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import Slider from '../Slider.vue'
4
+
5
+ describe('Slider', () => {
6
+ it('renders without errors', () => {
7
+ const wrapper = mount(Slider)
8
+
9
+ expect(wrapper.vm).toBeTruthy()
10
+ })
11
+ })
@@ -1,11 +1,8 @@
1
- <script lang="ts">
2
1
  import { defineComponent } from 'vue'
3
2
 
4
3
  export default defineComponent({
5
4
  name: 'XSpacer',
5
+ setup() {
6
+ return () => <div class="flex-grow"></div>
7
+ },
6
8
  })
7
- </script>
8
-
9
- <template>
10
- <div class="flex-grow"></div>
11
- </template>
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import Spacer from '../Spacer'
4
+
5
+ describe('Spacer', () => {
6
+ it('renders without errors', () => {
7
+ const wrapper = mount(Spacer)
8
+
9
+ expect(wrapper.classes()).toContain('flex-grow')
10
+ })
11
+ })
@@ -1,45 +1,21 @@
1
1
  <script lang="ts">
2
- import { defineComponent } from 'vue'
2
+ export default { name: 'XSpinner' }
3
+ </script>
4
+
5
+ <script setup lang="ts">
3
6
  import { useCommon } from '../../composables/common'
4
7
 
5
8
  import XIcon from '../../components/icon/Icon.vue'
6
9
 
7
- export default defineComponent({
8
- name: 'XSpinner',
9
-
10
- components: {
11
- XIcon,
12
- },
13
-
14
- props: {
15
- ...useCommon.props(),
16
- icon: String,
17
- },
18
-
19
- setup() {
20
- const defaultIcon = `<g fill="none" fill-rule="evenodd">
21
- <g transform="translate(1 1)" stroke-width="2">
22
- <circle stroke-opacity=".5" cx="18" cy="18" r="18"/>
23
- <path d="M36 18c0-9.94-8.06-18-18-18">
24
- <animateTransform
25
- attributeName="transform"
26
- type="rotate"
27
- from="0 18 18"
28
- to="360 18 18"
29
- dur="0.5s"
30
- repeatCount="indefinite"
31
- />
32
- </path>
33
- </g>
34
- </g>`
35
-
36
- return {
37
- defaultIcon,
38
- }
10
+ const props = defineProps({
11
+ ...useCommon.props(),
12
+ icon: {
13
+ type: String,
14
+ default: '<g fill="none" fill-rule="evenodd"><g transform="translate(1 1)" stroke-width="2"><circle stroke-opacity=".5" cx="18" cy="18" r="18"/><path d="M36 18c0-9.94-8.06-18-18-18"><animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="0.5s" repeatCount="indefinite"/></path></g></g>',
39
15
  },
40
16
  })
41
17
  </script>
42
18
 
43
19
  <template>
44
- <x-icon :icon="icon || defaultIcon" :size="size" view-box="0 0 38 38"/>
20
+ <x-icon :icon="icon" :size="size" view-box="0 0 38 38"/>
45
21
  </template>
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import Spinner from '../Spinner.vue'
4
+
5
+ describe('Spinner', () => {
6
+ it('renders without errors', () => {
7
+ const wrapper = mount(Spinner)
8
+
9
+ expect(wrapper.vm).toBeTruthy()
10
+ })
11
+ })
@@ -0,0 +1,22 @@
1
+ import type { ThemeParams } from '../../composables/theme'
2
+
3
+ export default {
4
+ classes: {
5
+ wrapper: ({ props, data }: ThemeParams) => {
6
+ const c = ['py-2 transition-colors duration-150 ease-in-out whitespace-nowrap text-center']
7
+
8
+ if (data.variant === 'block') c.push('px-8')
9
+
10
+ if (props.size === 'xs') c.push('text-xs')
11
+ else if (props.size === 'sm') c.push('text-sm')
12
+ else if (props.size === 'lg') c.push('text-lg')
13
+ else if (props.size === 'xl') c.push('text-xl')
14
+
15
+ return c
16
+ },
17
+
18
+ label: '',
19
+
20
+ icon: 'mr-1.5',
21
+ },
22
+ }