@indielayer/ui 1.0.0-alpha.9 → 1.0.2

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 +4479 -3667
  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 +61 -97
  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 +167 -179
  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 -249
  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 +137 -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,78 +1,66 @@
1
1
  <script lang="ts">
2
- import { computed, defineComponent, ref } from 'vue'
3
- import { useCSS } from '../../composables/css'
2
+ export default { name: 'XToggle' }
3
+ </script>
4
+
5
+ <script setup lang="ts">
6
+ import { computed, ref } from 'vue'
7
+ import { useTheme } from '../../composables/theme'
4
8
  import { useCommon } from '../../composables/common'
5
9
  import { useColors } from '../../composables/colors'
6
10
  import { useInputtable } from '../../composables/inputtable'
7
11
  import { useInteractive } from '../../composables/interactive'
8
12
 
9
13
  import XSpinner from '../../components/spinner/Spinner.vue'
14
+ import XInputError from '../helpers/InputError'
10
15
 
11
- export default defineComponent({
12
- name: 'XToggle',
13
-
14
- components: {
15
- XSpinner,
16
- },
17
-
18
- validators: {
19
- ...useCommon.validators(),
20
- },
16
+ import theme from './Toggle.theme'
21
17
 
22
- props: {
23
- ...useCommon.props(),
24
- ...useColors.props('primary'),
25
- ...useInteractive.props(),
26
- ...useInputtable.props(),
27
- id: String,
28
- label: String,
29
- glow: Boolean,
30
- },
18
+ const props = defineProps({
19
+ ...useCommon.props(),
20
+ ...useColors.props('primary'),
21
+ ...useInteractive.props(),
22
+ ...useInputtable.props(),
23
+ id: String,
24
+ label: String,
25
+ helper: String,
26
+ glow: Boolean,
27
+ })
31
28
 
32
- emits: useInputtable.emits(false),
29
+ const emit = defineEmits(useInputtable.emits(false))
33
30
 
34
- setup(props, { emit }) {
35
- const elRef = ref<HTMLElement>()
36
- const checked = computed({
37
- get(): boolean {
38
- return !!props.modelValue
39
- },
40
- set(val: boolean) {
41
- emit('update:modelValue', val)
42
- },
43
- })
31
+ const elRef = ref<HTMLElement | null>(null)
44
32
 
45
- const css = useCSS()
46
- const colors = useColors()
33
+ const checked = computed({
34
+ get(): boolean {
35
+ return !!props.modelValue
36
+ },
37
+ set(val: boolean) {
38
+ emit('update:modelValue', val)
39
+ },
40
+ })
47
41
 
48
- const styles = computed(() => {
49
- const color = colors.getPalette(props.color)
42
+ const { focus, blur } = useInteractive(elRef)
50
43
 
51
- return css.variables({
52
- bg: color[500],
53
- dark: {
54
- bg: color[600],
55
- },
56
- })
57
- })
44
+ const {
45
+ errorInternal,
46
+ reset,
47
+ validate,
48
+ setError,
49
+ } = useInputtable(props, { focus, emit, withListeners: false })
58
50
 
59
- const interactive = useInteractive(elRef)
51
+ const { styles, classes, className } = useTheme('toggle', theme, props)
60
52
 
61
- return {
62
- ...interactive,
63
- ...useInputtable(props, { focus: interactive.focus, emit, withListeners: false }),
64
- elRef,
65
- checked,
66
- styles,
67
- }
68
- },
69
- })
53
+ defineExpose({ focus, blur, reset, validate, setError })
70
54
  </script>
71
55
 
72
56
  <template>
73
57
  <label
74
58
  class="inline-block"
75
- :class="[!disabled ? 'cursor-pointer' : 'cursor-not-allowed']"
59
+ :class="[
60
+ className,
61
+ classes.wrapper,
62
+ disabled ? 'cursor-not-allowed' : 'cursor-pointer'
63
+ ]"
76
64
  >
77
65
  <div class="flex items-center">
78
66
  <div
@@ -82,20 +70,10 @@ export default defineComponent({
82
70
  [`shadow-lg shadow-${color}-500/50`]: glow && modelValue,
83
71
  'bg-gray-300 dark:bg-gray-500': !disabled && !checked && !loading,
84
72
  'bg-gray-100 dark:bg-gray-700': disabled || loading,
85
- 'bg-[color:var(--x-bg)]': !disabled && checked,
73
+ 'bg-[color:var(--x-toggle-bg)] dark:bg-[color:var(--x-toggle-dark-bg)]': !disabled && checked,
86
74
  }"
87
75
  >
88
- <div
89
- class="relative shrink-0"
90
- :class="[
91
- {
92
- 'w-6': size === 'sm' || size === 'xs',
93
- 'w-8': !size || !['xs', 'sm', 'lg', 'xl'].includes(size),
94
- 'w-10': size === 'lg',
95
- 'w-12': size === 'xl',
96
- }
97
- ]"
98
- >
76
+ <div :class="classes.buttonWrapper">
99
77
  <input
100
78
  :id="id"
101
79
  ref="elRef"
@@ -110,35 +88,27 @@ export default defineComponent({
110
88
  :value="modelValue"
111
89
  />
112
90
  <div
113
- class="rounded-full shadow transform transition duration-300 flex-shrink-0"
114
91
  :class="[
92
+ classes.button,
115
93
  {
116
- 'h-3 w-3': size === 'sm' || size === 'xs',
117
- 'h-4 w-4': !size || !['xs', 'sm', 'lg', 'xl'].includes(size),
118
- 'h-5 w-5': size === 'lg',
119
- 'h-6 w-6': size === 'xl',
120
94
  'translate-x-full': checked,
121
- 'bg-gray-shadow-md': !disabled
95
+ 'shadow': !disabled
122
96
  },
123
- [disabled ? 'bg-gray-50 dark:bg-gray-800' : 'bg-white dark:bg-gray-800']
97
+ disabled ? 'bg-gray-50 dark:bg-gray-800' : 'bg-white dark:bg-gray-800'
124
98
  ]"
125
99
  ></div>
126
100
  </div>
127
101
  </div>
128
102
  <span
129
103
  v-if="label"
130
- class="pl-2 font-medium text-gray-800 dark:text-gray-200"
131
- :class="{
132
- 'text-xs': size === 'xs',
133
- 'text-sm': size === 'sm',
134
- 'text-lg': size === 'lg',
135
- 'text-xl': size === 'xl',
136
- }"
104
+ class="ml-2"
105
+ :class="classes.label"
137
106
  v-text="label"
138
107
  >
139
108
  </span>
140
109
  <x-spinner v-if="loading" :size="size" class="ml-1" />
141
110
  </div>
142
- <p v-if="errorInternal" class="text-sm text-red-500 mt-1" v-text="errorInternal"></p>
111
+
112
+ <x-input-error :error="errorInternal" :helper="helper"/>
143
113
  </label>
144
114
  </template>
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import Toggle from '../Toggle.vue'
4
+
5
+ describe('Toggle', () => {
6
+ it('renders without errors', () => {
7
+ const wrapper = mount(Toggle)
8
+
9
+ expect(wrapper.vm).toBeTruthy()
10
+ })
11
+ })
@@ -0,0 +1,51 @@
1
+ import type { ThemeParams } from '../../composables/theme'
2
+
3
+ export default {
4
+ classes: {
5
+ wrapper: '',
6
+
7
+ label: ({ props }: ThemeParams) => {
8
+ const c = 'font-medium text-gray-800 dark:text-gray-200'
9
+
10
+ if (props.size === 'xs') return c + ' text-xs'
11
+ else if (props.size === 'sm') return c + ' text-sm'
12
+ else if (props.size === 'lg') return c + ' text-lg'
13
+ else if (props.size === 'xl') return c + ' text-xl'
14
+
15
+ return c + ' text-sm'
16
+ },
17
+
18
+ buttonWrapper: ({ props }: ThemeParams) => {
19
+ let c = 'relative shrink-0'
20
+
21
+ if (props.size === 'sm' || props.size === 'xs') c += ' w-6'
22
+ else if (props.size === 'lg') c += ' w-10'
23
+ else if (props.size === 'xl') c += ' w-12'
24
+ else c += ' w-8'
25
+
26
+ return c
27
+ },
28
+
29
+ button: ({ props }: ThemeParams) => {
30
+ let c = 'rounded-full shadow transform transition duration-300 shrink-0'
31
+
32
+ if (props.size === 'sm' || props.size === 'xs') c += ' h-3 w-3'
33
+ else if (props.size === 'lg') c += ' h-5 w-5'
34
+ else if (props.size === 'xl') c += ' h-6 w-6'
35
+ else c += ' h-4 w-4'
36
+
37
+ return c
38
+ },
39
+ },
40
+
41
+ styles: ({ colors, props, css }: ThemeParams) => {
42
+ const color = colors.getPalette(props.color)
43
+
44
+ return css.variables({
45
+ bg: color[500],
46
+ dark: {
47
+ bg: color[600],
48
+ },
49
+ })
50
+ },
51
+ }
@@ -1,26 +1,21 @@
1
1
  <script lang="ts">
2
- import { defineComponent } from 'vue'
2
+ export default { name: 'XTooltip' }
3
+ </script>
3
4
 
5
+ <script setup lang="ts">
4
6
  import XPopover from '../../components/popover/Popover.vue'
5
7
  import XPopoverContainer from '../../components/popover/PopoverContainer.vue'
6
-
7
- export default defineComponent({
8
- name: 'XTooltip',
9
-
10
- components: {
11
- XPopover,
12
- XPopoverContainer,
13
- },
14
- })
15
8
  </script>
16
9
 
17
10
  <template>
18
- <x-popover hover class="dark">
11
+ <x-popover hover>
19
12
  <slot></slot>
20
13
  <template #content>
21
- <x-popover-container class="p-2 text-white text-sm">
22
- <slot name="tooltip"></slot>
23
- </x-popover-container>
14
+ <div class="dark">
15
+ <x-popover-container class="p-2 text-white text-sm w-max max-w-xs">
16
+ <slot name="tooltip"></slot>
17
+ </x-popover-container>
18
+ </div>
24
19
  </template>
25
20
  </x-popover>
26
21
  </template>
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import Tooltip from '../Tooltip.vue'
4
+
5
+ describe('Tooltip', () => {
6
+ it('renders without errors', () => {
7
+ const wrapper = mount(Tooltip)
8
+
9
+ expect(wrapper.vm).toBeTruthy()
10
+ })
11
+ })
@@ -34,81 +34,81 @@ export const shades: Tone[] = ['50', '100', '200', '300', '400', '500', '600', '
34
34
  export const indielayerColors = ['primary', 'secondary', 'success', 'warning', 'error']
35
35
 
36
36
  // calculate custom colors
37
- export function calculateColors(): ColorLibrary {
38
- const cc = computedColors
39
- const customColors: ColorLibrary = {}
40
- const e = document.createElement('div')
37
+ // export function calculateColors(): ColorLibrary {
38
+ // const cc = computedColors
39
+ // const customColors: ColorLibrary = {}
40
+ // const e = document.createElement('div')
41
41
 
42
- document.body.appendChild(e)
42
+ // document.body.appendChild(e)
43
43
 
44
- indielayerColors.forEach((color) => {
45
- const c: ColorPalette = { ...tailwindColors.gray }
44
+ // indielayerColors.forEach((color) => {
45
+ // const c: ColorPalette = { ...tailwindColors.gray }
46
46
 
47
- shades.forEach((shade) => {
48
- e.className = `bg-${color}-${shade}`
49
- c[shade] = window.getComputedStyle(e ,null).getPropertyValue('background-color')
50
- })
47
+ // shades.forEach((shade) => {
48
+ // e.className = `bg-${color}-${shade}`
49
+ // c[shade] = window.getComputedStyle(e ,null).getPropertyValue('background-color')
50
+ // })
51
51
 
52
- customColors[color] = c
53
- })
52
+ // customColors[color] = c
53
+ // })
54
54
 
55
- e.remove()
55
+ // e.remove()
56
56
 
57
- return customColors
58
- }
57
+ // return customColors
58
+ // }
59
59
 
60
- const computedColors = Object.freeze([
61
- 'bg-primary-50',
62
- 'bg-primary-100',
63
- 'bg-primary-200',
64
- 'bg-primary-300',
65
- 'bg-primary-400',
66
- 'bg-primary-500',
67
- 'bg-primary-600',
68
- 'bg-primary-700',
69
- 'bg-primary-800',
70
- 'bg-primary-900',
71
- 'bg-secondary-50',
72
- 'bg-secondary-100',
73
- 'bg-secondary-200',
74
- 'bg-secondary-300',
75
- 'bg-secondary-400',
76
- 'bg-secondary-500',
77
- 'bg-secondary-600',
78
- 'bg-secondary-700',
79
- 'bg-secondary-800',
80
- 'bg-secondary-900',
81
- 'bg-error-50',
82
- 'bg-error-100',
83
- 'bg-error-200',
84
- 'bg-error-300',
85
- 'bg-error-400',
86
- 'bg-error-500',
87
- 'bg-error-600',
88
- 'bg-error-700',
89
- 'bg-error-800',
90
- 'bg-error-900',
91
- 'bg-warning-50',
92
- 'bg-warning-100',
93
- 'bg-warning-200',
94
- 'bg-warning-300',
95
- 'bg-warning-400',
96
- 'bg-warning-500',
97
- 'bg-warning-600',
98
- 'bg-warning-700',
99
- 'bg-warning-800',
100
- 'bg-warning-900',
101
- 'bg-success-50',
102
- 'bg-success-100',
103
- 'bg-success-200',
104
- 'bg-success-300',
105
- 'bg-success-400',
106
- 'bg-success-500',
107
- 'bg-success-600',
108
- 'bg-success-700',
109
- 'bg-success-800',
110
- 'bg-success-900',
111
- ])
60
+ // const computedColors = Object.freeze([
61
+ // 'bg-primary-50',
62
+ // 'bg-primary-100',
63
+ // 'bg-primary-200',
64
+ // 'bg-primary-300',
65
+ // 'bg-primary-400',
66
+ // 'bg-primary-500',
67
+ // 'bg-primary-600',
68
+ // 'bg-primary-700',
69
+ // 'bg-primary-800',
70
+ // 'bg-primary-900',
71
+ // 'bg-secondary-50',
72
+ // 'bg-secondary-100',
73
+ // 'bg-secondary-200',
74
+ // 'bg-secondary-300',
75
+ // 'bg-secondary-400',
76
+ // 'bg-secondary-500',
77
+ // 'bg-secondary-600',
78
+ // 'bg-secondary-700',
79
+ // 'bg-secondary-800',
80
+ // 'bg-secondary-900',
81
+ // 'bg-error-50',
82
+ // 'bg-error-100',
83
+ // 'bg-error-200',
84
+ // 'bg-error-300',
85
+ // 'bg-error-400',
86
+ // 'bg-error-500',
87
+ // 'bg-error-600',
88
+ // 'bg-error-700',
89
+ // 'bg-error-800',
90
+ // 'bg-error-900',
91
+ // 'bg-warning-50',
92
+ // 'bg-warning-100',
93
+ // 'bg-warning-200',
94
+ // 'bg-warning-300',
95
+ // 'bg-warning-400',
96
+ // 'bg-warning-500',
97
+ // 'bg-warning-600',
98
+ // 'bg-warning-700',
99
+ // 'bg-warning-800',
100
+ // 'bg-warning-900',
101
+ // 'bg-success-50',
102
+ // 'bg-success-100',
103
+ // 'bg-success-200',
104
+ // 'bg-success-300',
105
+ // 'bg-success-400',
106
+ // 'bg-success-500',
107
+ // 'bg-success-600',
108
+ // 'bg-success-700',
109
+ // 'bg-success-800',
110
+ // 'bg-success-900',
111
+ // ])
112
112
 
113
113
  export const tailwindColors: ColorLibrary = Object.freeze({
114
114
  slate: {
@@ -1,5 +1,6 @@
1
- import { inject } from 'vue'
2
- import { injectColorsKey } from './keys'
1
+ import * as R from 'ramda'
2
+ import { computed, inject, unref } from 'vue'
3
+ import { injectThemeKey } from './keys'
3
4
  import { isValidColor, tailwindColors, colorShade, setOpacity } from './colors-utils'
4
5
 
5
6
  export type Tone = '50' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'
@@ -19,6 +20,15 @@ export interface ColorPalette {
19
20
 
20
21
  export type ColorLibrary = Record<string, ColorPalette>
21
22
 
23
+ export interface ColorsProps {
24
+ color?: string
25
+ }
26
+
27
+ export interface ColorComposition {
28
+ getPalette: (color: string)=> ColorPalette
29
+ getColorOpacity: (color: string, opacity: number)=> string
30
+ }
31
+
22
32
  const colorCache: ColorLibrary = {}
23
33
 
24
34
  const defaultColors = {
@@ -29,20 +39,22 @@ const defaultColors = {
29
39
  error: tailwindColors.red,
30
40
  }
31
41
 
32
- export const useColors = () => {
33
- const customColors = inject(injectColorsKey) || defaultColors
34
- // if (Object.keys(customColors).length === 0) customColors = calculateColors()
42
+ export const useColors = (): ColorComposition => {
43
+ const globalTheme = inject(injectThemeKey, {})
44
+ const customColors = computed(() => R.mergeRight(defaultColors, unref(globalTheme).colors))
35
45
 
36
46
  const getTailwindColor = (color: string) => tailwindColors[color]
37
47
 
38
48
  const getColorOpacity = (color: string, opacity: number) => setOpacity(color, opacity)
39
49
 
40
50
  const getPalette = (color: string): ColorPalette => {
51
+ if (!color) return getTailwindColor('gray')
52
+
41
53
  const twColor = getTailwindColor(color)
42
54
 
43
55
  if (twColor) return twColor
44
56
  if (colorCache[color]) return colorCache[color]
45
- if (customColors[color]) return customColors[color]
57
+ if (customColors.value[color]) return customColors.value[color]
46
58
 
47
59
  if (!isValidColor(color)) {
48
60
  console.warn(`Invalid color: ${color}`)
@@ -11,6 +11,7 @@ const validators = Object.freeze({
11
11
  useCommon.props = () => ({
12
12
  size: {
13
13
  type: String as PropType<Size>,
14
+ default: 'md',
14
15
  validator: (value: string) => validators.size.includes(value),
15
16
  },
16
17
  } as const)
@@ -4,12 +4,17 @@ const modifiers = ['hover', 'active', 'focus', 'visited']
4
4
  const isTheme = (theme: string) => themes.includes(theme)
5
5
  const isModifier = (modifier: string) => modifiers.includes(modifier)
6
6
 
7
- export const useCSS = (namespace?: string) => {
7
+ export interface CSSComposition {
8
+ get: (name: string, value: string, theme?: string, modifier?: string)=> string
9
+ variable: (name: string, theme?: string, modifier?: string)=> string
10
+ variables: (object: Record<string, string | object>, theme?: string, modifier?: string)=> Record<string, string>
11
+ }
8
12
 
13
+ export const useCSS = (namespace?: string): CSSComposition => {
9
14
  const get = (name: string, value: string, theme?: string, modifier?: string) => `${variable(name,theme,modifier)}: ${value}`
10
15
 
11
16
  const variable = (name: string, theme?: string, modifier?: string) =>
12
- `--x${theme ? `-${theme}` : ''}${namespace ? `-${namespace}` : ''}-${name}${modifier ? `-${modifier}` : ''}`
17
+ `--x${namespace ? `-${namespace}` : ''}${theme ? `-${theme}` : ''}-${name}${modifier ? `-${modifier}` : ''}`
13
18
 
14
19
  const variables = (object: Record<string, string | object>, theme?: string, modifier?: string) => {
15
20
  let styles: Record<string, string> = {}
@@ -4,4 +4,4 @@ export * from './colors'
4
4
  export * from './css'
5
5
  export * from './inputtable'
6
6
  export * from './interactive'
7
- export * from './notification'
7
+ export * from './notifications'
@@ -112,7 +112,7 @@ useInputtable.emits = (withListeners = true): string[] => {
112
112
  }
113
113
 
114
114
  useInputtable.props = () => ({
115
- modelValue: [String, Number, Boolean, Object, Array] as PropType<[string, number, boolean, object, []]>,
115
+ modelValue: [String, Number, Boolean, Object, Array] as PropType<string | number | boolean | object | any[] | undefined>,
116
116
  name: String,
117
117
  readonly: Boolean,
118
118
  required: Boolean,
@@ -1,12 +1,16 @@
1
1
  import type { Ref } from 'vue'
2
2
 
3
+ export interface InteractiveProps {
4
+ disabled?: boolean
5
+ loading?: boolean
6
+ }
7
+
3
8
  export const useInteractive = (
4
- el: Ref<HTMLElement | undefined>,
9
+ el: Ref<HTMLElement | null>,
5
10
  ) => {
6
11
  return {
7
- focus: () => {
8
- el.value?.focus?.()
9
- },
12
+ focus: () => el.value?.focus?.(),
13
+ blur: () => el.value?.blur?.(),
10
14
  }
11
15
  }
12
16
 
@@ -2,6 +2,7 @@ import type { InjectionKey } from 'vue'
2
2
 
3
3
  export const injectTabKey = Symbol() as InjectionKey<any>
4
4
  export const injectFormKey = Symbol() as InjectionKey<any>
5
+ export const injectThemeKey = Symbol() as InjectionKey<any>
5
6
  export const injectIconsKey = Symbol() as InjectionKey<any>
6
7
  export const injectColorsKey = Symbol() as InjectionKey<any>
7
8
  export const injectButtonGroupKey = Symbol() as InjectionKey<any>
@@ -0,0 +1,10 @@
1
+ import { inject } from 'vue'
2
+ import { injectNotificationKey } from './keys'
3
+
4
+ export const useNotifications = (key?: symbol | string) => {
5
+ const notifications = inject(key || injectNotificationKey)
6
+
7
+ if (!notifications) console.warn('useNotifications must have a parent wrapped with Notifications component')
8
+
9
+ return notifications
10
+ }