@indielayer/ui 1.0.0-alpha.9 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/README.md +6 -3
  2. package/lib/index.cjs.js +1 -15
  3. package/lib/index.es.js +4451 -3650
  4. package/lib/nuxt.js +2 -1
  5. package/package.json +16 -6
  6. package/src/common/icons.ts +15 -0
  7. package/src/common/utils.ts +68 -0
  8. package/src/components/alert/Alert.theme.ts +57 -0
  9. package/src/components/alert/Alert.vue +51 -127
  10. package/src/components/alert/__tests__/Alert.spec.ts +14 -0
  11. package/src/components/avatar/Avatar.theme.ts +39 -0
  12. package/src/components/avatar/Avatar.vue +58 -96
  13. package/src/components/avatar/__tests__/Avatar.spec.ts +11 -0
  14. package/src/components/badge/Badge.theme.ts +13 -0
  15. package/src/components/badge/Badge.vue +58 -65
  16. package/src/components/badge/__tests__/Badge.spec.ts +11 -0
  17. package/src/components/breadcrumbs/Breadcrumbs.theme.ts +9 -0
  18. package/src/components/breadcrumbs/Breadcrumbs.vue +34 -24
  19. package/src/components/breadcrumbs/__tests__/Breadcrumbs.spec.ts +11 -0
  20. package/src/components/button/Button.theme.ts +234 -0
  21. package/src/components/button/Button.vue +94 -356
  22. package/src/components/button/ButtonGroup.theme.ts +5 -0
  23. package/src/components/button/ButtonGroup.vue +30 -29
  24. package/src/components/button/__tests__/ Button.spec.ts +11 -0
  25. package/src/components/button/__tests__/ ButtonGroup.spec.ts +11 -0
  26. package/src/components/card/Card.theme.ts +7 -0
  27. package/src/components/card/Card.vue +18 -11
  28. package/src/components/card/__tests__/Card.spec.ts +11 -0
  29. package/src/components/checkbox/Checkbox.theme.ts +92 -0
  30. package/src/components/checkbox/Checkbox.vue +69 -156
  31. package/src/components/checkbox/__tests__/Checkbox.spec.ts +11 -0
  32. package/src/components/collapse/Collapse.theme.ts +11 -0
  33. package/src/components/collapse/Collapse.vue +99 -118
  34. package/src/components/collapse/__tests__/Collapse.spec.ts +11 -0
  35. package/src/components/container/Container.theme.ts +7 -0
  36. package/src/components/container/Container.vue +17 -9
  37. package/src/components/container/__tests__/Container.spec.ts +11 -0
  38. package/src/components/divider/Divider.theme.ts +11 -0
  39. package/src/components/divider/Divider.vue +22 -18
  40. package/src/components/divider/__tests__/Divider.spec.ts +11 -0
  41. package/src/components/drawer/Drawer.theme.ts +9 -0
  42. package/src/components/drawer/Drawer.vue +160 -177
  43. package/src/components/drawer/__tests__/Drawer.spec.ts +11 -0
  44. package/src/components/form/Form.theme.ts +7 -0
  45. package/src/components/form/Form.vue +90 -73
  46. package/src/components/form/__tests__/Form.spec.ts +11 -0
  47. package/src/components/helpers/InputError.tsx +14 -0
  48. package/src/components/icon/Icon.theme.ts +16 -0
  49. package/src/components/icon/Icon.vue +72 -88
  50. package/src/components/icon/__tests__/Icon.spec.ts +11 -0
  51. package/src/components/image/Image.theme.ts +7 -0
  52. package/src/components/image/Image.vue +22 -23
  53. package/src/components/image/__tests__/Image.spec.ts +11 -0
  54. package/src/components/index.ts +3 -3
  55. package/src/components/input/Input.theme.ts +44 -0
  56. package/src/components/input/Input.vue +97 -130
  57. package/src/components/input/__tests__/Input.spec.ts +11 -0
  58. package/src/components/link/Link.theme.ts +26 -0
  59. package/src/components/link/Link.vue +41 -66
  60. package/src/components/link/__tests__/Link.spec.ts +11 -0
  61. package/src/components/menu/Menu.theme.ts +7 -0
  62. package/src/components/menu/Menu.vue +54 -45
  63. package/src/components/menu/MenuItem.theme.ts +107 -0
  64. package/src/components/menu/MenuItem.vue +97 -199
  65. package/src/components/menu/__tests__/Menu.spec.ts +11 -0
  66. package/src/components/menu/__tests__/MenuItem.spec.ts +11 -0
  67. package/src/components/modal/Modal.theme.ts +29 -0
  68. package/src/components/modal/Modal.vue +78 -101
  69. package/src/components/modal/__tests__/Modal.spec.ts +11 -0
  70. package/src/components/notifications/Notifications.theme.ts +11 -0
  71. package/src/components/notifications/Notifications.vue +233 -249
  72. package/src/components/notifications/__tests__/Notifications.spec.ts +11 -0
  73. package/src/components/pagination/Pagination.theme.ts +27 -0
  74. package/src/components/pagination/Pagination.vue +142 -164
  75. package/src/components/pagination/PaginationItem.theme.ts +14 -0
  76. package/src/components/pagination/PaginationItem.vue +26 -33
  77. package/src/components/pagination/__tests__/Pagination.spec.ts +11 -0
  78. package/src/components/pagination/__tests__/PaginationItem.spec.ts +11 -0
  79. package/src/components/popover/Popover.theme.ts +9 -0
  80. package/src/components/popover/Popover.vue +153 -101
  81. package/src/components/popover/PopoverContainer.theme.ts +7 -0
  82. package/src/components/popover/PopoverContainer.vue +17 -9
  83. package/src/components/popover/__tests__/Popover.spec.ts +11 -0
  84. package/src/components/popover/__tests__/PopoverContainer.spec.ts +11 -0
  85. package/src/components/progress/Progress.theme.ts +26 -0
  86. package/src/components/progress/Progress.vue +29 -53
  87. package/src/components/progress/__tests__/Progress.spec.ts +11 -0
  88. package/src/components/radio/Radio.theme.ts +121 -0
  89. package/src/components/radio/Radio.vue +81 -158
  90. package/src/components/radio/__tests__/Radio.spec.ts +11 -0
  91. package/src/components/scroll/Scroll.theme.ts +7 -0
  92. package/src/components/scroll/Scroll.vue +34 -36
  93. package/src/components/scroll/__tests__/Scroll.spec.ts +11 -0
  94. package/src/components/select/Select.theme.ts +54 -0
  95. package/src/components/select/Select.vue +219 -273
  96. package/src/components/select/__tests__/Select.spec.ts +11 -0
  97. package/src/components/skeleton/Skeleton.theme.ts +7 -0
  98. package/src/components/skeleton/Skeleton.vue +17 -9
  99. package/src/components/skeleton/__tests__/Skeleton.spec.ts +11 -0
  100. package/src/components/slider/Slider.theme.ts +30 -0
  101. package/src/components/slider/Slider.vue +135 -168
  102. package/src/components/slider/__tests__/Slider.spec.ts +11 -0
  103. package/src/components/spacer/{Spacer.vue → Spacer.tsx} +3 -6
  104. package/src/components/spacer/__tests__/Spacer.spec.ts +11 -0
  105. package/src/components/spinner/Spinner.vue +10 -34
  106. package/src/components/spinner/__tests__/Spinner.spec.ts +11 -0
  107. package/src/components/tab/Tab.theme.ts +22 -0
  108. package/src/components/tab/Tab.vue +89 -93
  109. package/src/components/tab/TabGroup.theme.ts +43 -0
  110. package/src/components/tab/TabGroup.vue +94 -127
  111. package/src/components/tab/__tests__/Tab.spec.ts +11 -0
  112. package/src/components/tab/__tests__/TabGroup.spec.ts +11 -0
  113. package/src/components/table/Table.theme.ts +19 -0
  114. package/src/components/table/Table.vue +136 -147
  115. package/src/components/table/{TableBody.vue → TableBody.tsx} +3 -8
  116. package/src/components/table/TableCell.theme.ts +27 -0
  117. package/src/components/table/TableCell.vue +30 -58
  118. package/src/components/table/TableHead.tsx +14 -0
  119. package/src/components/table/TableHeader.vue +18 -20
  120. package/src/components/table/TableRow.vue +23 -20
  121. package/src/components/table/__tests__/Table.spec.ts +11 -0
  122. package/src/components/tag/Tag.theme.ts +32 -0
  123. package/src/components/tag/Tag.vue +40 -68
  124. package/src/components/tag/__tests__/Tag.spec.ts +11 -0
  125. package/src/components/textarea/Textarea.theme.ts +62 -0
  126. package/src/components/textarea/Textarea.vue +100 -115
  127. package/src/components/textarea/__tests__/Textarea.spec.ts +11 -0
  128. package/src/components/toggle/Toggle.theme.ts +51 -0
  129. package/src/components/toggle/Toggle.vue +51 -81
  130. package/src/components/toggle/__tests__/Toggle.spec.ts +11 -0
  131. package/src/components/tooltip/Tooltip.theme.ts +51 -0
  132. package/src/components/tooltip/Tooltip.vue +9 -14
  133. package/src/components/tooltip/__tests__/Tooltip.spec.ts +11 -0
  134. package/src/composables/colors-utils.ts +68 -68
  135. package/src/composables/colors.ts +18 -6
  136. package/src/composables/common.ts +1 -0
  137. package/src/composables/css.ts +7 -2
  138. package/src/composables/index.ts +1 -1
  139. package/src/composables/inputtable.ts +1 -1
  140. package/src/composables/interactive.ts +8 -4
  141. package/src/composables/keys.ts +1 -0
  142. package/src/composables/notifications.ts +10 -0
  143. package/src/composables/theme.ts +88 -0
  144. package/src/create.ts +8 -3
  145. package/src/exports/nuxt.js +2 -1
  146. package/src/version.ts +1 -1
  147. package/volar.d.ts +1 -0
  148. package/lib/components/alert/Alert.vue.d.ts +0 -42
  149. package/lib/components/avatar/Avatar.vue.d.ts +0 -49
  150. package/lib/components/badge/Badge.vue.d.ts +0 -75
  151. package/lib/components/breadcrumbs/Breadcrumbs.vue.d.ts +0 -30
  152. package/lib/components/button/Button.vue.d.ts +0 -87
  153. package/lib/components/button/ButtonGroup.vue.d.ts +0 -49
  154. package/lib/components/card/Card.vue.d.ts +0 -17
  155. package/lib/components/checkbox/Checkbox.vue.d.ts +0 -81
  156. package/lib/components/collapse/Collapse.vue.d.ts +0 -47
  157. package/lib/components/container/Container.vue.d.ts +0 -14
  158. package/lib/components/divider/Divider.vue.d.ts +0 -10
  159. package/lib/components/drawer/Drawer.vue.d.ts +0 -73
  160. package/lib/components/form/Form.vue.d.ts +0 -46
  161. package/lib/components/icon/Icon.vue.d.ts +0 -40
  162. package/lib/components/image/Image.vue.d.ts +0 -8
  163. package/lib/components/index.d.ts +0 -45
  164. package/lib/components/input/Input.vue.d.ts +0 -117
  165. package/lib/components/link/Link.vue.d.ts +0 -36
  166. package/lib/components/menu/Menu.vue.d.ts +0 -62
  167. package/lib/components/menu/MenuItem.vue.d.ts +0 -114
  168. package/lib/components/modal/Modal.vue.d.ts +0 -34
  169. package/lib/components/notifications/Notifications.vue.d.ts +0 -104
  170. package/lib/components/pagination/Pagination.vue.d.ts +0 -58
  171. package/lib/components/pagination/PaginationItem.vue.d.ts +0 -32
  172. package/lib/components/popover/Popover.vue.d.ts +0 -64
  173. package/lib/components/popover/PopoverContainer.vue.d.ts +0 -14
  174. package/lib/components/progress/Progress.vue.d.ts +0 -42
  175. package/lib/components/radio/Radio.vue.d.ts +0 -79
  176. package/lib/components/scroll/Scroll.vue.d.ts +0 -29
  177. package/lib/components/select/Select.vue.d.ts +0 -100
  178. package/lib/components/skeleton/Skeleton.vue.d.ts +0 -14
  179. package/lib/components/slider/Slider.vue.d.ts +0 -96
  180. package/lib/components/spacer/Spacer.vue.d.ts +0 -2
  181. package/lib/components/spinner/Spinner.vue.d.ts +0 -16
  182. package/lib/components/tab/Tab.vue.d.ts +0 -52
  183. package/lib/components/tab/TabGroup.vue.d.ts +0 -61
  184. package/lib/components/table/Table.vue.d.ts +0 -82
  185. package/lib/components/table/TableBody.vue.d.ts +0 -2
  186. package/lib/components/table/TableCell.vue.d.ts +0 -33
  187. package/lib/components/table/TableHead.vue.d.ts +0 -2
  188. package/lib/components/table/TableHeader.vue.d.ts +0 -33
  189. package/lib/components/table/TableRow.vue.d.ts +0 -23
  190. package/lib/components/tag/Tag.vue.d.ts +0 -45
  191. package/lib/components/textarea/Textarea.vue.d.ts +0 -106
  192. package/lib/components/toggle/Toggle.vue.d.ts +0 -79
  193. package/lib/components/tooltip/Tooltip.vue.d.ts +0 -2
  194. package/lib/composables/colors-utils.d.ts +0 -8
  195. package/lib/composables/colors.d.ts +0 -26
  196. package/lib/composables/common.d.ts +0 -14
  197. package/lib/composables/css.d.ts +0 -5
  198. package/lib/composables/index.d.ts +0 -7
  199. package/lib/composables/inputtable.d.ts +0 -37
  200. package/lib/composables/interactive.d.ts +0 -10
  201. package/lib/composables/keys.d.ts +0 -7
  202. package/lib/composables/notification.d.ts +0 -1
  203. package/lib/create.d.ts +0 -12
  204. package/lib/index.d.ts +0 -6
  205. package/lib/install.d.ts +0 -4
  206. package/lib/style.css +0 -1
  207. package/lib/version.d.ts +0 -2
  208. package/src/components/table/TableHead.vue +0 -15
  209. package/src/composables/notification.ts +0 -10
@@ -1,131 +1,109 @@
1
1
  <script lang="ts">
2
- import { computed, defineComponent, ref, watch, type PropType } from 'vue'
2
+ export default { name: 'XModal' }
3
+ </script>
3
4
 
5
+ <script setup lang="ts">
6
+ import { ref, watch, type PropType } from 'vue'
4
7
  import { onClickOutside, useEventListener } from '@vueuse/core'
8
+ import { useTheme } from '../../composables/theme'
9
+ import { closeIcon } from '../../common/icons'
10
+
11
+ import theme from './Modal.theme'
5
12
 
6
13
  import XScroll from '../../components/scroll/Scroll.vue'
7
14
  import XIcon from '../icon/Icon.vue'
8
15
 
9
- export default defineComponent({
10
- name: 'XModal',
11
-
12
- components: {
13
- XScroll,
14
- XIcon,
16
+ const props = defineProps({
17
+ size: {
18
+ type: String as PropType<'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full'>,
19
+ default: 'md',
15
20
  },
21
+ modelValue: Boolean,
22
+ showClose: Boolean,
23
+ backdrop: Boolean,
24
+ })
16
25
 
17
- props: {
18
- size: {
19
- type: String as PropType<'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full'>,
20
- default: 'md',
21
- },
22
- modelValue: Boolean,
23
- showClose: Boolean,
24
- backdrop: Boolean,
25
- },
26
+ const emit = defineEmits(['update:modelValue'])
27
+
28
+ const value = ref(props.modelValue)
29
+ const visible = ref(false)
30
+ const modalRef = ref<HTMLElement | null>(null)
26
31
 
27
- emits: ['update:modelValue'],
32
+ let stopClickOutside: undefined | (()=> void) = undefined
28
33
 
29
- expose: ['open', 'close'],
34
+ watch(value, (val) => {
35
+ if (stopClickOutside) {
36
+ stopClickOutside()
37
+ stopClickOutside = undefined
38
+ }
30
39
 
31
- setup(props, { emit }) {
32
- const value = ref(props.modelValue)
33
- const visible = ref(false)
34
- const modalRef = ref<HTMLElement | null>(null)
40
+ if (val) {
41
+ setTimeout(() => {
42
+ stopClickOutside = onClickOutside(modalRef, close)
43
+ })
44
+ }
45
+ })
35
46
 
36
- const classes = computed(() => {
37
- if (props.size === 'full') return 'w-full'
38
- else if (props.size === 'xs') return 'sm:max-w-xs w-full'
39
- else if (props.size === 'sm') return 'sm:max-w-sm w-full'
40
- else if (props.size === 'lg') return 'sm:max-w-xl w-full'
41
- else if (props.size === 'xl') return 'sm:max-w-3xl w-full'
47
+ watch(() => props.modelValue, (val) => {
48
+ if (val) {
49
+ value.value = val
42
50
 
43
- return 'sm:max-w-lg w-full'
51
+ setTimeout(() => {
52
+ visible.value = val
44
53
  })
54
+ } else {
55
+ visible.value = val
45
56
 
46
- let stopClickOutside: undefined | (()=> void) = undefined
57
+ setTimeout(() => {
58
+ value.value = val
59
+ }, 150)
60
+ }
61
+ })
47
62
 
48
- watch(value, (val) => {
49
- if (stopClickOutside) {
50
- stopClickOutside()
51
- stopClickOutside = undefined
52
- }
63
+ useEventListener(document, 'keydown', onKeyDown)
53
64
 
54
- if (val) {
55
- setTimeout(() => {
56
- stopClickOutside = onClickOutside(modalRef, close)
57
- })
58
- }
59
- })
65
+ function onKeyDown(event: KeyboardEvent) {
66
+ if (event.key === 'Escape' && value.value) close()
67
+ }
60
68
 
61
- watch(() => props.modelValue, (val) => {
62
- if (val) {
63
- value.value = val
69
+ function close() {
70
+ visible.value = false
64
71
 
65
- setTimeout(() => {
66
- visible.value = val
67
- })
68
- } else {
69
- visible.value = val
72
+ setTimeout(() => {
73
+ value.value = false
74
+ emit('update:modelValue', false)
75
+ }, 150)
76
+ }
70
77
 
71
- setTimeout(() => {
72
- value.value = val
73
- }, 150)
74
- }
75
- })
78
+ function open() {
79
+ value.value = true
80
+ emit('update:modelValue', true)
76
81
 
77
- useEventListener(document, 'keydown', onKeyDown)
78
-
79
- function onKeyDown(event: KeyboardEvent) {
80
- if (event.key === 'Escape' && value.value) close()
81
- }
82
-
83
- function close() {
84
- visible.value = false
85
-
86
- setTimeout(() => {
87
- value.value = false
88
- emit('update:modelValue', false)
89
- }, 150)
90
- }
91
-
92
- function open() {
93
- value.value = true
94
- emit('update:modelValue', true)
95
-
96
- setTimeout(() => {
97
- visible.value = true
98
- })
99
- }
100
-
101
- const closeIcon = '<path d="M6 18L18 6M6 6l12 12" />'
102
-
103
- return {
104
- closeIcon,
105
- modalRef,
106
- classes,
107
- visible,
108
- value,
109
- close,
110
- open,
111
- }
112
- },
113
- })
82
+ setTimeout(() => {
83
+ visible.value = true
84
+ })
85
+ }
86
+
87
+ const { styles, classes, className } = useTheme('modal', theme, props)
88
+
89
+ defineExpose({ open, close })
114
90
  </script>
115
91
 
116
92
  <template>
117
- <Teleport to="body">
93
+ <teleport to="body">
118
94
  <div
119
95
  v-if="value"
120
- class="fixed z-40 inset-0 overflow-y-auto transition-all"
96
+ :style="styles"
121
97
  :class="[
98
+ className,
99
+ classes.wrapper,
122
100
  visible ? 'visible' : 'invisible ease-in duration-100'
123
101
  ]"
124
102
  >
125
103
  <div
126
104
  v-if="backdrop"
127
- class="fixed inset-0 bg-gray-500 dark:bg-black transition-opacity"
128
105
  :class="[
106
+ classes.backdrop,
129
107
  visible ? 'ease-out duration-200 opacity-30 dark:opacity-70' : 'ease-in duration-100 opacity-0',
130
108
  ]"
131
109
  ></div>
@@ -133,9 +111,8 @@ export default defineComponent({
133
111
  <div class="flex items-end sm:items-center justify-center p-4 sm:p-6 h-screen">
134
112
  <div
135
113
  ref="modalRef"
136
- class="relative flex flex-col z-10 bg-white dark:bg-gray-900 rounded-md shadow-lg transform transition-all overflow-hidden max-h-full"
137
114
  :class="[
138
- classes,
115
+ classes.modal,
139
116
  visible ?
140
117
  'ease-out duration-200 opacity-100 translate-y-0 sm:scale-100'
141
118
  : 'ease-in duration-200 opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95',
@@ -146,8 +123,8 @@ export default defineComponent({
146
123
  >
147
124
  <div
148
125
  v-if="showClose"
149
- class="flex absolute p-1 top-4 z-10 right-4 rounded-full bg-opacity-10 hover:bg-opacity-30 cursor-pointer"
150
126
  :class="[
127
+ classes.closeIcon,
151
128
  $slots.image ? 'bg-gray-900 text-white' : 'bg-gray-500 text-gray-800 dark:text-gray-300'
152
129
  ]"
153
130
  @click="close"
@@ -155,7 +132,7 @@ export default defineComponent({
155
132
  <x-icon :icon="closeIcon"/>
156
133
  </div>
157
134
  <slot name="image"></slot>
158
- <div v-if="$slots.header" class="text-lg font-semibold px-6 py-4 border-b">
135
+ <div v-if="$slots.header" :class="classes.header">
159
136
  <slot name="header"></slot>
160
137
  </div>
161
138
  <x-scroll
@@ -163,15 +140,15 @@ export default defineComponent({
163
140
  :scrollbar="false"
164
141
  vertical
165
142
  >
166
- <div class="px-6 py-4">
143
+ <div :class="classes.content">
167
144
  <slot></slot>
168
145
  </div>
169
146
  </x-scroll>
170
- <div v-if="$slots.actions" class="bg-slate-50 dark:bg-gray-800 p-4">
147
+ <div v-if="$slots.actions" :class="classes.actions">
171
148
  <slot name="actions"></slot>
172
149
  </div>
173
150
  </div>
174
151
  </div>
175
152
  </div>
176
- </Teleport>
153
+ </teleport>
177
154
  </template>
@@ -0,0 +1,11 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { mount } from '@vue/test-utils'
3
+ import Modal from '../Modal.vue'
4
+
5
+ describe('Modal', () => {
6
+ it('renders without errors', () => {
7
+ const wrapper = mount(Modal)
8
+
9
+ expect(wrapper.vm).toBeTruthy()
10
+ })
11
+ })
@@ -0,0 +1,11 @@
1
+ import type { ThemeParams } from '../../composables/theme'
2
+
3
+ export default {
4
+ classes: {
5
+ wrapper: 'fixed z-40 w-full sm:w-auto overflow-y-auto max-h-screen',
6
+
7
+ list: 'flex flex-col items-end w-full sm:w-[520px] px-4',
8
+
9
+ item: 'w-full flex items-center rounded-md px-4 py-3 bg-gray-800 dark:bg-gray-50 text-white dark:text-gray-900',
10
+ },
11
+ }