@byyuurin/ui 0.0.10 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +170 -58
  2. package/dist/module.d.mts +4 -13
  3. package/dist/module.json +4 -4
  4. package/dist/module.mjs +54 -20
  5. package/dist/runtime/components/Accordion.vue +48 -72
  6. package/dist/runtime/components/Accordion.vue.d.ts +74 -0
  7. package/dist/runtime/components/Alert.vue +65 -83
  8. package/dist/runtime/components/Alert.vue.d.ts +71 -0
  9. package/dist/runtime/components/App.vue +28 -42
  10. package/dist/runtime/components/App.vue.d.ts +26 -0
  11. package/dist/runtime/components/Avatar.vue +82 -58
  12. package/dist/runtime/components/Avatar.vue.d.ts +39 -0
  13. package/dist/runtime/components/AvatarGroup.vue +43 -70
  14. package/dist/runtime/components/AvatarGroup.vue.d.ts +30 -0
  15. package/dist/runtime/components/Badge.vue +70 -64
  16. package/dist/runtime/components/Badge.vue.d.ts +45 -0
  17. package/dist/runtime/components/Breadcrumb.vue +56 -76
  18. package/dist/runtime/components/Breadcrumb.vue.d.ts +79 -0
  19. package/dist/runtime/components/Button.vue +150 -78
  20. package/dist/runtime/components/Button.vue.d.ts +45 -0
  21. package/dist/runtime/components/Calendar.vue +99 -125
  22. package/dist/runtime/components/Calendar.vue.d.ts +102 -0
  23. package/dist/runtime/components/Card.vue +33 -46
  24. package/dist/runtime/components/Card.vue.d.ts +34 -0
  25. package/dist/runtime/components/Carousel.vue +164 -237
  26. package/dist/runtime/components/Carousel.vue.d.ts +125 -0
  27. package/dist/runtime/components/Checkbox.vue +86 -88
  28. package/dist/runtime/components/Checkbox.vue.d.ts +63 -0
  29. package/dist/runtime/components/Chip.vue +44 -58
  30. package/dist/runtime/components/Chip.vue.d.ts +48 -0
  31. package/dist/runtime/components/Collapsible.vue +29 -33
  32. package/dist/runtime/components/Collapsible.vue.d.ts +34 -0
  33. package/dist/runtime/components/Drawer.vue +110 -150
  34. package/dist/runtime/components/Drawer.vue.d.ts +103 -0
  35. package/dist/runtime/components/DropdownMenu.vue +49 -120
  36. package/dist/runtime/components/DropdownMenu.vue.d.ts +140 -0
  37. package/dist/runtime/components/DropdownMenuContent.vue +177 -143
  38. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +51 -0
  39. package/dist/runtime/components/FieldGroup.vue +33 -0
  40. package/dist/runtime/components/FieldGroup.vue.d.ts +33 -0
  41. package/dist/runtime/components/Form.vue +245 -275
  42. package/dist/runtime/components/Form.vue.d.ts +103 -0
  43. package/dist/runtime/components/FormField.vue +108 -0
  44. package/dist/runtime/components/FormField.vue.d.ts +63 -0
  45. package/dist/runtime/components/Icon.vue +20 -0
  46. package/dist/runtime/components/Icon.vue.d.ts +9 -0
  47. package/dist/runtime/components/Input.vue +125 -156
  48. package/dist/runtime/components/Input.vue.d.ts +76 -0
  49. package/dist/runtime/components/InputNumber.vue +103 -130
  50. package/dist/runtime/components/InputNumber.vue.d.ts +191 -0
  51. package/dist/runtime/components/Kbd.vue +24 -39
  52. package/dist/runtime/components/Kbd.vue.d.ts +34 -0
  53. package/dist/runtime/components/Link.vue +105 -337
  54. package/dist/runtime/components/Link.vue.d.ts +95 -0
  55. package/dist/runtime/components/LinkBase.vue +31 -71
  56. package/dist/runtime/components/LinkBase.vue.d.ts +33 -0
  57. package/dist/runtime/components/Modal.vue +82 -103
  58. package/dist/runtime/components/Modal.vue.d.ts +96 -0
  59. package/dist/runtime/components/NavigationMenu.vue +336 -0
  60. package/dist/runtime/components/NavigationMenu.vue.d.ts +181 -0
  61. package/dist/runtime/components/OverlayProvider.vue +12 -16
  62. package/dist/runtime/components/OverlayProvider.vue.d.ts +3 -0
  63. package/dist/runtime/components/Pagination.vue +65 -139
  64. package/dist/runtime/components/Pagination.vue.d.ts +116 -0
  65. package/dist/runtime/components/PinInput.vue +78 -73
  66. package/dist/runtime/components/PinInput.vue.d.ts +54 -0
  67. package/dist/runtime/components/Popover.vue +60 -75
  68. package/dist/runtime/components/Popover.vue.d.ts +70 -0
  69. package/dist/runtime/components/Progress.vue +79 -126
  70. package/dist/runtime/components/Progress.vue.d.ts +63 -0
  71. package/dist/runtime/components/RadioGroup.vue +109 -140
  72. package/dist/runtime/components/RadioGroup.vue.d.ts +96 -0
  73. package/dist/runtime/components/ScrollArea.vue +50 -48
  74. package/dist/runtime/components/ScrollArea.vue.d.ts +21 -0
  75. package/dist/runtime/components/Select.vue +221 -221
  76. package/dist/runtime/components/Select.vue.d.ts +260 -0
  77. package/dist/runtime/components/Separator.vue +55 -47
  78. package/dist/runtime/components/Separator.vue.d.ts +48 -0
  79. package/dist/runtime/components/Skeleton.vue +25 -22
  80. package/dist/runtime/components/Skeleton.vue.d.ts +19 -0
  81. package/dist/runtime/components/Slider.vue +73 -77
  82. package/dist/runtime/components/Slider.vue.d.ts +52 -0
  83. package/dist/runtime/components/Switch.vue +66 -77
  84. package/dist/runtime/components/Switch.vue.d.ts +58 -0
  85. package/dist/runtime/components/Table.vue +357 -215
  86. package/dist/runtime/components/Table.vue.d.ts +234 -0
  87. package/dist/runtime/components/Tabs.vue +90 -88
  88. package/dist/runtime/components/Tabs.vue.d.ts +97 -0
  89. package/dist/runtime/components/Textarea.vue +147 -146
  90. package/dist/runtime/components/Textarea.vue.d.ts +76 -0
  91. package/dist/runtime/components/Toast.vue +108 -90
  92. package/dist/runtime/components/Toast.vue.d.ts +152 -0
  93. package/dist/runtime/components/ToastProvider.vue +82 -109
  94. package/dist/runtime/components/ToastProvider.vue.d.ts +51 -0
  95. package/dist/runtime/components/Tooltip.vue +54 -53
  96. package/dist/runtime/components/Tooltip.vue.d.ts +53 -0
  97. package/dist/runtime/composables/defineShortcuts.d.ts +16 -0
  98. package/dist/runtime/composables/defineShortcuts.js +129 -0
  99. package/dist/runtime/composables/useAvatarGroup.d.ts +8 -3
  100. package/dist/runtime/composables/useAvatarGroup.js +10 -3
  101. package/dist/runtime/composables/useComponentIcons.d.ts +9 -6
  102. package/dist/runtime/composables/useComponentIcons.js +4 -4
  103. package/dist/runtime/composables/useFieldGroup.d.ts +8 -0
  104. package/dist/runtime/composables/useFieldGroup.js +14 -0
  105. package/dist/runtime/composables/useFormField.d.ts +62 -0
  106. package/dist/runtime/composables/useFormField.js +99 -0
  107. package/dist/runtime/composables/useKbd.d.ts +3 -2
  108. package/dist/runtime/composables/useKbd.js +3 -2
  109. package/dist/runtime/composables/useLocale.d.ts +68 -5
  110. package/dist/runtime/composables/useLocale.js +11 -11
  111. package/dist/runtime/composables/useOverlay.d.ts +51 -15
  112. package/dist/runtime/composables/useOverlay.js +44 -30
  113. package/dist/runtime/composables/usePortal.d.ts +6 -0
  114. package/dist/runtime/composables/usePortal.js +17 -0
  115. package/dist/runtime/composables/useToast.d.ts +12 -5
  116. package/dist/runtime/composables/useToast.js +12 -7
  117. package/dist/runtime/locale/en.d.ts +30 -1
  118. package/dist/runtime/locale/en.js +2 -1
  119. package/dist/runtime/locale/index.d.ts +2 -2
  120. package/dist/runtime/locale/index.js +1 -1
  121. package/dist/runtime/locale/zh_tw.d.ts +31 -0
  122. package/dist/runtime/locale/{zh-tw.js → zh_tw.js} +2 -1
  123. package/dist/runtime/plugins/colors.d.ts +2 -0
  124. package/dist/runtime/plugins/colors.js +50 -0
  125. package/dist/runtime/types/app.config.d.ts +6 -0
  126. package/dist/runtime/types/form.d.ts +58 -17
  127. package/dist/runtime/types/form.js +11 -0
  128. package/dist/runtime/types/index.d.ts +51 -8
  129. package/dist/runtime/types/index.js +45 -2
  130. package/dist/runtime/types/input.d.ts +8 -0
  131. package/dist/runtime/types/locale.d.ts +5 -0
  132. package/dist/runtime/types/style.d.ts +33 -0
  133. package/dist/runtime/types/style.js +0 -0
  134. package/dist/runtime/types/unocss.d.ts +4 -0
  135. package/dist/runtime/types/utils.d.ts +38 -37
  136. package/dist/runtime/utils/form.d.ts +5 -1
  137. package/dist/runtime/utils/form.js +49 -0
  138. package/dist/runtime/utils/index.d.ts +10 -13
  139. package/dist/runtime/utils/index.js +41 -48
  140. package/dist/runtime/utils/link.d.ts +5 -6
  141. package/dist/runtime/utils/link.js +16 -2
  142. package/dist/runtime/utils/locale.d.ts +5 -0
  143. package/dist/runtime/utils/locale.js +10 -0
  144. package/dist/runtime/utils/style.d.ts +94 -0
  145. package/dist/runtime/utils/style.js +37 -0
  146. package/dist/runtime/vue/components/Icon.vue +15 -0
  147. package/dist/runtime/vue/components/Icon.vue.d.ts +7 -0
  148. package/dist/runtime/vue/components/Link.vue +163 -0
  149. package/dist/runtime/vue/components/Link.vue.d.ts +95 -0
  150. package/dist/runtime/vue/composables/useAppConfig.d.ts +1 -0
  151. package/dist/runtime/vue/composables/useAppConfig.js +4 -0
  152. package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
  153. package/dist/runtime/vue/plugins/color-mode.js +6 -0
  154. package/dist/runtime/vue/plugins/head.d.ts +4 -0
  155. package/dist/runtime/vue/plugins/head.js +9 -0
  156. package/dist/runtime/vue/stubs.d.ts +16 -1
  157. package/dist/runtime/vue/stubs.js +32 -1
  158. package/dist/setup.d.mts +13 -0
  159. package/dist/setup.mjs +12 -0
  160. package/dist/shared/ui.CzIlLITK.mjs +51 -0
  161. package/dist/shared/ui.DSyJHSTk.mjs +3787 -0
  162. package/dist/shared/ui.DpbffTXs.d.mts +84 -0
  163. package/dist/shared/ui.IulR-OYx.d.mts +64 -0
  164. package/dist/types.d.mts +3 -1
  165. package/dist/unocss.d.mts +12 -52
  166. package/dist/unocss.mjs +144 -253
  167. package/dist/unplugin.d.mts +13 -26
  168. package/dist/unplugin.mjs +193 -18
  169. package/dist/vite.d.mts +10 -1
  170. package/dist/vite.mjs +12 -3
  171. package/package.json +156 -87
  172. package/vue-plugin.d.ts +5 -0
  173. package/dist/module.cjs +0 -5
  174. package/dist/module.d.ts +0 -13
  175. package/dist/module.mjs.map +0 -1
  176. package/dist/runtime/app/injections.d.ts +0 -9307
  177. package/dist/runtime/app/injections.js +0 -61
  178. package/dist/runtime/components/ButtonGroup.vue +0 -46
  179. package/dist/runtime/components/FormItem.vue +0 -129
  180. package/dist/runtime/composables/useButtonGroup.d.ts +0 -5
  181. package/dist/runtime/composables/useButtonGroup.js +0 -9
  182. package/dist/runtime/composables/useFormItem.d.ts +0 -27
  183. package/dist/runtime/composables/useFormItem.js +0 -64
  184. package/dist/runtime/composables/useTheme.d.ts +0 -9
  185. package/dist/runtime/composables/useTheme.js +0 -23
  186. package/dist/runtime/index.d.ts +0 -44
  187. package/dist/runtime/index.js +0 -44
  188. package/dist/runtime/locale/zh-tw.d.ts +0 -2
  189. package/dist/runtime/theme/accordion.d.ts +0 -56
  190. package/dist/runtime/theme/accordion.js +0 -28
  191. package/dist/runtime/theme/alert.d.ts +0 -125
  192. package/dist/runtime/theme/alert.js +0 -47
  193. package/dist/runtime/theme/app.d.ts +0 -19
  194. package/dist/runtime/theme/app.js +0 -19
  195. package/dist/runtime/theme/avatar-group.d.ts +0 -52
  196. package/dist/runtime/theme/avatar-group.js +0 -32
  197. package/dist/runtime/theme/avatar.d.ts +0 -56
  198. package/dist/runtime/theme/avatar.js +0 -34
  199. package/dist/runtime/theme/badge.d.ts +0 -82
  200. package/dist/runtime/theme/badge.js +0 -92
  201. package/dist/runtime/theme/breadcrumb.d.ts +0 -67
  202. package/dist/runtime/theme/breadcrumb.js +0 -44
  203. package/dist/runtime/theme/button-group.d.ts +0 -66
  204. package/dist/runtime/theme/button-group.js +0 -42
  205. package/dist/runtime/theme/button.d.ts +0 -190
  206. package/dist/runtime/theme/button.js +0 -164
  207. package/dist/runtime/theme/calendar.d.ts +0 -56
  208. package/dist/runtime/theme/calendar.js +0 -69
  209. package/dist/runtime/theme/card.d.ts +0 -62
  210. package/dist/runtime/theme/card.js +0 -37
  211. package/dist/runtime/theme/carousel.d.ts +0 -113
  212. package/dist/runtime/theme/carousel.js +0 -43
  213. package/dist/runtime/theme/checkbox.d.ts +0 -88
  214. package/dist/runtime/theme/checkbox.js +0 -54
  215. package/dist/runtime/theme/chip.d.ts +0 -67
  216. package/dist/runtime/theme/chip.js +0 -66
  217. package/dist/runtime/theme/collapsible.d.ts +0 -38
  218. package/dist/runtime/theme/collapsible.js +0 -10
  219. package/dist/runtime/theme/drawer.d.ts +0 -148
  220. package/dist/runtime/theme/drawer.js +0 -113
  221. package/dist/runtime/theme/dropdown-menu.d.ts +0 -71
  222. package/dist/runtime/theme/dropdown-menu.js +0 -83
  223. package/dist/runtime/theme/form-item.d.ts +0 -76
  224. package/dist/runtime/theme/form-item.js +0 -34
  225. package/dist/runtime/theme/form.d.ts +0 -8
  226. package/dist/runtime/theme/form.js +0 -7
  227. package/dist/runtime/theme/index.d.ts +0 -41
  228. package/dist/runtime/theme/index.js +0 -41
  229. package/dist/runtime/theme/input-number.d.ts +0 -121
  230. package/dist/runtime/theme/input-number.js +0 -95
  231. package/dist/runtime/theme/input.d.ts +0 -178
  232. package/dist/runtime/theme/input.js +0 -151
  233. package/dist/runtime/theme/kbd.d.ts +0 -39
  234. package/dist/runtime/theme/kbd.js +0 -26
  235. package/dist/runtime/theme/link.d.ts +0 -44
  236. package/dist/runtime/theme/link.js +0 -26
  237. package/dist/runtime/theme/modal.d.ts +0 -48
  238. package/dist/runtime/theme/modal.js +0 -55
  239. package/dist/runtime/theme/pagination.d.ts +0 -80
  240. package/dist/runtime/theme/pagination.js +0 -17
  241. package/dist/runtime/theme/pinInput.d.ts +0 -100
  242. package/dist/runtime/theme/pinInput.js +0 -111
  243. package/dist/runtime/theme/popover.d.ts +0 -38
  244. package/dist/runtime/theme/popover.js +0 -13
  245. package/dist/runtime/theme/progress.d.ts +0 -186
  246. package/dist/runtime/theme/progress.js +0 -95
  247. package/dist/runtime/theme/radio-group.d.ts +0 -110
  248. package/dist/runtime/theme/radio-group.js +0 -61
  249. package/dist/runtime/theme/scroll-area.d.ts +0 -73
  250. package/dist/runtime/theme/scroll-area.js +0 -33
  251. package/dist/runtime/theme/select.d.ts +0 -192
  252. package/dist/runtime/theme/select.js +0 -173
  253. package/dist/runtime/theme/separator.d.ts +0 -80
  254. package/dist/runtime/theme/separator.js +0 -53
  255. package/dist/runtime/theme/skeleton.d.ts +0 -8
  256. package/dist/runtime/theme/skeleton.js +0 -7
  257. package/dist/runtime/theme/slider.d.ts +0 -76
  258. package/dist/runtime/theme/slider.js +0 -52
  259. package/dist/runtime/theme/switch.d.ts +0 -122
  260. package/dist/runtime/theme/switch.js +0 -78
  261. package/dist/runtime/theme/table.d.ts +0 -92
  262. package/dist/runtime/theme/table.js +0 -36
  263. package/dist/runtime/theme/tabs.d.ts +0 -135
  264. package/dist/runtime/theme/tabs.js +0 -146
  265. package/dist/runtime/theme/textarea.d.ts +0 -96
  266. package/dist/runtime/theme/textarea.js +0 -116
  267. package/dist/runtime/theme/toast-provider.d.ts +0 -122
  268. package/dist/runtime/theme/toast-provider.js +0 -97
  269. package/dist/runtime/theme/toast.d.ts +0 -89
  270. package/dist/runtime/theme/toast.js +0 -35
  271. package/dist/runtime/theme/tooltip.d.ts +0 -44
  272. package/dist/runtime/theme/tooltip.js +0 -11
  273. package/dist/runtime/types/components.d.ts +0 -42
  274. package/dist/runtime/utils/extend-theme.d.ts +0 -9
  275. package/dist/runtime/utils/extend-theme.js +0 -27
  276. package/dist/runtime/utils/styler.d.ts +0 -4
  277. package/dist/runtime/utils/styler.js +0 -10
  278. package/dist/runtime/utils/translator.d.ts +0 -18
  279. package/dist/runtime/utils/translator.js +0 -8
  280. package/dist/shared/ui.3e7fad19.mjs +0 -5
  281. package/dist/shared/ui.3e7fad19.mjs.map +0 -1
  282. package/dist/types.d.ts +0 -1
  283. package/dist/unocss.d.ts +0 -52
  284. package/dist/unocss.mjs.map +0 -1
  285. package/dist/unplugin.d.ts +0 -26
  286. package/dist/unplugin.mjs.map +0 -1
  287. package/dist/vite.d.ts +0 -9
  288. package/dist/vite.mjs.map +0 -1
  289. /package/dist/runtime/types/{components.js → input.js} +0 -0
@@ -1,172 +1,98 @@
1
- <script lang="ts">
2
- import type { PaginationRootEmits, PaginationRootProps } from 'reka-ui'
3
- import type { pagination } from '../theme'
4
- import type { ButtonProps, ComponentAttrs } from '../types'
5
-
6
- export interface PaginationEmits extends PaginationRootEmits {}
7
-
8
- export interface PaginationSlots {
9
- first?: (props?: {}) => any
10
- prev?: (props?: {}) => any
11
- next?: (props?: {}) => any
12
- last?: (props?: {}) => any
13
- ellipsis?: (props?: {}) => any
14
- item?: (props: {
15
- page: number
16
- pageCount: number
17
- item: {
18
- type: 'ellipsis'
19
- } | {
20
- type: 'page'
21
- value: number
22
- }
23
- index: number
24
- }) => any
25
- }
26
-
27
- export interface PaginationProps extends ComponentAttrs<typeof pagination>, Pick<PaginationRootProps, 'as' | 'defaultPage' | 'disabled' | 'itemsPerPage' | 'page' | 'showEdges' | 'siblingCount' | 'total'> {
28
- /**
29
- * The icon to use for the first page control.
30
- * @default app.icons.doubleLeft
31
- */
32
- firstIcon?: string
33
- /**
34
- * The icon to use for the last page control.
35
- * @default app.icons.doubleRight
36
- */
37
- lastIcon?: string
38
- /**
39
- * The icon to use for the previous page control.
40
- * @default app.icons.chevronLeft
41
- */
42
- prevIcon?: string
43
- /**
44
- * The icon to use for the next page control.
45
- * @default app.icons.chevronRight
46
- */
47
- nextIcon?: string
48
- /**
49
- * The icon to use for the ellipsis control.
50
- * @default app.icons.ellipsis
51
- */
52
- ellipsisIcon?: string
53
- /**
54
- * The size of the pagination controls.
55
- * @default "md"
56
- */
57
- size?: ButtonProps['size']
58
- /**
59
- * The variant of the pagination controls.
60
- * @default "outline"
61
- */
62
- variant?: ButtonProps['variant']
63
- /**
64
- * The variant of the active pagination control.
65
- * @default "solid"
66
- */
67
- activeVariant?: ButtonProps['variant']
68
- /**
69
- * Whether to show the first, previous, next, and last controls.
70
- * @default true
71
- */
72
- showControls?: boolean
73
- /**
74
- * A function to render page controls as links.
75
- */
76
- to?: (page: number) => ButtonProps['to']
77
- }
1
+ <script>
2
+ import theme from "#build/ui/pagination";
78
3
  </script>
79
4
 
80
- <script setup lang="ts">
81
- import { reactivePick } from '@vueuse/core'
82
- import { PaginationEllipsis, PaginationFirst, PaginationLast, PaginationList, PaginationListItem, PaginationNext, PaginationPrev, PaginationRoot, useForwardPropsEmits } from 'reka-ui'
83
- import { computed } from 'vue'
84
- import { useLocale } from '../composables/useLocale'
85
- import { useTheme } from '../composables/useTheme'
86
- import Button from './Button.vue'
87
-
88
- const props = withDefaults(defineProps<PaginationProps>(), {
89
- variant: 'outline',
90
- activeVariant: 'solid',
91
- showControls: true,
92
- showEdges: false,
93
- itemsPerPage: 10,
94
- siblingCount: 2,
95
- total: 0,
96
- })
97
-
98
- const emit = defineEmits<PaginationEmits>()
99
- const slots = defineSlots<PaginationSlots>()
100
-
101
- const rootProps = useForwardPropsEmits(reactivePick(props, 'as', 'defaultPage', 'disabled', 'itemsPerPage', 'page', 'showEdges', 'siblingCount', 'total'), emit)
102
-
103
- const { dir } = useLocale()
104
- const { theme, generateStyle } = useTheme()
105
- const style = computed(() => generateStyle('pagination', props))
106
-
107
- const firstIcon = computed(() => props.firstIcon || (dir.value === 'rtl' ? theme.value.app.icons.chevronDoubleRight : theme.value.app.icons.chevronDoubleLeft))
108
- const prevIcon = computed(() => props.prevIcon || (dir.value === 'rtl' ? theme.value.app.icons.chevronRight : theme.value.app.icons.chevronLeft))
109
- const nextIcon = computed(() => props.nextIcon || (dir.value === 'rtl' ? theme.value.app.icons.chevronLeft : theme.value.app.icons.chevronRight))
110
- const lastIcon = computed(() => props.lastIcon || (dir.value === 'rtl' ? theme.value.app.icons.chevronDoubleLeft : theme.value.app.icons.chevronDoubleRight))
111
- const ellipsisIcon = computed(() => props.ellipsisIcon || theme.value.app.icons.ellipsis)
5
+ <script setup>
6
+ import { reactivePick } from "@vueuse/core";
7
+ import { PaginationEllipsis, PaginationFirst, PaginationLast, PaginationList, PaginationListItem, PaginationNext, PaginationPrev, PaginationRoot, useForwardPropsEmits } from "reka-ui";
8
+ import { computed } from "vue";
9
+ import { useAppConfig } from "#imports";
10
+ import { useLocale } from "../composables/useLocale";
11
+ import { cv, merge } from "../utils/style";
12
+ import Button from "./Button.vue";
13
+ const props = defineProps({
14
+ as: { type: null, required: false },
15
+ firstIcon: { type: [String, Object], required: false },
16
+ lastIcon: { type: [String, Object], required: false },
17
+ prevIcon: { type: [String, Object], required: false },
18
+ nextIcon: { type: [String, Object], required: false },
19
+ ellipsisIcon: { type: [String, Object], required: false },
20
+ color: { type: null, required: false, default: "neutral" },
21
+ activeColor: { type: null, required: false, default: "primary" },
22
+ size: { type: null, required: false },
23
+ variant: { type: null, required: false, default: "outline" },
24
+ activeVariant: { type: null, required: false, default: "solid" },
25
+ showControls: { type: Boolean, required: false, default: true },
26
+ to: { type: Function, required: false },
27
+ ui: { type: null, required: false },
28
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
29
+ defaultPage: { type: Number, required: false },
30
+ disabled: { type: Boolean, required: false },
31
+ itemsPerPage: { type: Number, required: true, default: 10 },
32
+ page: { type: Number, required: false },
33
+ showEdges: { type: Boolean, required: false, default: false },
34
+ siblingCount: { type: Number, required: false, default: 2 },
35
+ total: { type: Number, required: false, default: 0 }
36
+ });
37
+ const emit = defineEmits(["update:page"]);
38
+ const slots = defineSlots();
39
+ const rootProps = useForwardPropsEmits(reactivePick(props, "as", "defaultPage", "disabled", "itemsPerPage", "page", "showEdges", "siblingCount", "total"), emit);
40
+ const { dir } = useLocale();
41
+ const appConfig = useAppConfig();
42
+ const ui = computed(() => {
43
+ const styler = cv(merge(theme, appConfig.ui.pagination));
44
+ return styler(props);
45
+ });
46
+ const firstIcon = computed(() => props.firstIcon || (dir.value === "rtl" ? appConfig.ui.icons.chevronDoubleRight : appConfig.ui.icons.chevronDoubleLeft));
47
+ const prevIcon = computed(() => props.prevIcon || (dir.value === "rtl" ? appConfig.ui.icons.chevronRight : appConfig.ui.icons.chevronLeft));
48
+ const nextIcon = computed(() => props.nextIcon || (dir.value === "rtl" ? appConfig.ui.icons.chevronLeft : appConfig.ui.icons.chevronRight));
49
+ const lastIcon = computed(() => props.lastIcon || (dir.value === "rtl" ? appConfig.ui.icons.chevronDoubleLeft : appConfig.ui.icons.chevronDoubleRight));
112
50
  </script>
113
51
 
114
52
  <template>
115
- <PaginationRoot v-slot="{ page, pageCount }" v-bind="rootProps" :class="style.root({ class: [props.class, props.ui?.root] })">
116
- <PaginationList v-slot="{ items }" :class="style.list({ class: props.ui?.list })">
117
- <PaginationFirst v-if="props.showControls || !!slots.first" :class="style.first({ class: props.ui?.first })" as-child>
53
+ <PaginationRoot v-slot="{ page, pageCount }" v-bind="rootProps" :class="ui.root({ class: [props.ui?.root, props.class] })" data-part="root">
54
+ <PaginationList v-slot="{ items }" :class="ui.list({ class: props.ui?.list })" data-part="list">
55
+ <PaginationFirst v-if="props.showControls || !!slots.first" :class="ui.first({ class: props.ui?.first })" as-child data-part="first">
118
56
  <slot name="first">
119
- <Button :variant="props.variant" :size="props.size" :icon="firstIcon" :to="props.to?.(1)" />
57
+ <Button :color="props.color" :variant="props.variant" :size="props.size" :icon="firstIcon" :to="props.to?.(1)" />
120
58
  </slot>
121
59
  </PaginationFirst>
122
- <PaginationPrev v-if="props.showControls || !!slots.prev" :class="style.prev({ class: props.ui?.prev })" as-child>
60
+ <PaginationPrev v-if="props.showControls || !!slots.prev" :class="ui.prev({ class: props.ui?.prev })" as-child data-part="perv">
123
61
  <slot name="prev">
124
- <Button :variant="props.variant" :size="props.size" :icon="prevIcon" :to="page > 1 ? props.to?.(page - 1) : undefined" />
62
+ <Button :color="props.color" :variant="props.variant" :size="props.size" :icon="prevIcon" :to="page > 1 ? props.to?.(page - 1) : void 0" />
125
63
  </slot>
126
64
  </PaginationPrev>
127
65
 
128
- <template v-for="(item, index) in items">
129
- <PaginationListItem v-if="item.type === 'page'" :key="index" :class="style.item({ class: props.ui?.item })" :value="item.value" as-child>
66
+ <template v-for="(item, index) in items" :key="index">
67
+ <PaginationListItem v-if="item.type === 'page'" :value="item.value" :class="ui.item({ class: props.ui?.item })" as-child data-part="item">
130
68
  <slot name="item" v-bind="{ item, index, page, pageCount }">
131
69
  <Button
70
+ :color="props.page === item.value ? props.activeColor : props.color"
132
71
  :variant="props.page === item.value ? props.activeVariant : props.variant"
133
72
  :size="props.size"
134
73
  :label="String(item.value)"
135
74
  :to="props.to?.(item.value)"
136
- :ui="{ label: style.label({ class: props.ui?.label }) }"
75
+ :ui="{ label: ui.label({ class: props.ui?.label }) }"
76
+ square
137
77
  />
138
78
  </slot>
139
79
  </PaginationListItem>
140
80
 
141
- <PaginationEllipsis
142
- v-else
143
- :key="item.type"
144
- :class="[
145
- style.item({ class: props.ui?.item }),
146
- style.ellipsis({ class: props.ui?.ellipsis }),
147
- ]"
148
- :index="index"
149
- :disabled="props.disabled"
150
- as-child
151
- >
152
- <slot name="ellipsis">
153
- <Button
154
- :variant="props.variant"
155
- :size="props.size"
156
- :icon="ellipsisIcon"
157
- />
81
+ <PaginationEllipsis v-else :class="ui.ellipsis({ class: props.ui?.ellipsis })" as-child data-part="ellipsis">
82
+ <slot name="ellipsis" :ui="ui">
83
+ <Button as="div" :color="props.color" :variant="props.variant" :size="props.size" :icon="ellipsisIcon || appConfig.ui.icons.ellipsis" />
158
84
  </slot>
159
85
  </PaginationEllipsis>
160
86
  </template>
161
87
 
162
- <PaginationNext v-if="props.showControls || !!slots.next" :class="style.next({ class: props.ui?.next })" as-child>
88
+ <PaginationNext v-if="props.showControls || !!slots.next" :class="ui.next({ class: props.ui?.next })" as-child data-part="next">
163
89
  <slot name="next">
164
- <Button :variant="props.variant" :size="props.size" :icon="nextIcon" :to="page < pageCount ? props.to?.(page + 1) : undefined" />
90
+ <Button :color="props.color" :variant="props.variant" :size="props.size" :icon="nextIcon" :to="page < pageCount ? props.to?.(page + 1) : void 0" />
165
91
  </slot>
166
92
  </PaginationNext>
167
- <PaginationLast v-if="props.showControls || !!slots.last" :class="style.last({ class: props.ui?.last })" as-child>
93
+ <PaginationLast v-if="props.showControls || !!slots.last" :class="ui.last({ class: props.ui?.last })" as-child data-part="last">
168
94
  <slot name="last">
169
- <Button :variant="props.variant" :size="props.size" :icon="lastIcon" :to="props.to?.(pageCount)" />
95
+ <Button :color="props.color" :variant="props.variant" :size="props.size" :icon="lastIcon" :to="props.to?.(pageCount)" />
170
96
  </slot>
171
97
  </PaginationLast>
172
98
  </PaginationList>
@@ -0,0 +1,116 @@
1
+ import type { PaginationRootEmits, PaginationRootProps } from 'reka-ui';
2
+ import theme from '#build/ui/pagination';
3
+ import type { ButtonProps, ComponentBaseProps, ComponentStyler, ComponentUIProps, IconProps } from '../types';
4
+ import type { StaticSlot } from '../types/utils';
5
+ export interface PaginationProps extends ComponentBaseProps, Pick<PaginationRootProps, 'defaultPage' | 'disabled' | 'itemsPerPage' | 'page' | 'showEdges' | 'siblingCount' | 'total'> {
6
+ /**
7
+ * The element or component this component should render as.
8
+ * @default "div"
9
+ */
10
+ as?: PaginationRootProps['as'];
11
+ /**
12
+ * The icon to use for the first page control.
13
+ * @default app.icons.doubleLeft
14
+ */
15
+ firstIcon?: IconProps['name'];
16
+ /**
17
+ * The icon to use for the last page control.
18
+ * @default app.icons.doubleRight
19
+ */
20
+ lastIcon?: IconProps['name'];
21
+ /**
22
+ * The icon to use for the previous page control.
23
+ * @default app.icons.chevronLeft
24
+ */
25
+ prevIcon?: IconProps['name'];
26
+ /**
27
+ * The icon to use for the next page control.
28
+ * @default app.icons.chevronRight
29
+ */
30
+ nextIcon?: IconProps['name'];
31
+ /**
32
+ * The icon to use for the ellipsis control.
33
+ * @default app.icons.ellipsis
34
+ */
35
+ ellipsisIcon?: IconProps['name'];
36
+ /**
37
+ * The color of the pagination controls.
38
+ * @default "neutral"
39
+ */
40
+ color?: ButtonProps['color'];
41
+ /**
42
+ * The color of the active pagination control.
43
+ * @default "primary"
44
+ */
45
+ activeColor?: ButtonProps['color'];
46
+ /**
47
+ * The size of the pagination controls.
48
+ * @default "md"
49
+ */
50
+ size?: ButtonProps['size'];
51
+ /**
52
+ * The variant of the pagination controls.
53
+ * @default "outline"
54
+ */
55
+ variant?: ButtonProps['variant'];
56
+ /**
57
+ * The variant of the active pagination control.
58
+ * @default "solid"
59
+ */
60
+ activeVariant?: ButtonProps['variant'];
61
+ /**
62
+ * Whether to show the first, previous, next, and last controls.
63
+ * @default true
64
+ */
65
+ showControls?: boolean;
66
+ /**
67
+ * A function to render page controls as links.
68
+ * @param page The page number to navigate to.
69
+ */
70
+ to?: (page: number) => ButtonProps['to'];
71
+ ui?: ComponentUIProps<typeof theme>;
72
+ }
73
+ export interface PaginationEmits extends PaginationRootEmits {
74
+ }
75
+ export interface PaginationSlots {
76
+ first: StaticSlot;
77
+ prev: StaticSlot;
78
+ next: StaticSlot;
79
+ last: StaticSlot;
80
+ ellipsis: StaticSlot<{
81
+ ui: ComponentStyler<typeof theme>;
82
+ }>;
83
+ item: StaticSlot<{
84
+ page: number;
85
+ pageCount: number;
86
+ item: {
87
+ type: 'ellipsis';
88
+ } | {
89
+ type: 'page';
90
+ value: number;
91
+ };
92
+ index: number;
93
+ }>;
94
+ }
95
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<PaginationProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
96
+ "update:page": (value: number) => any;
97
+ }, string, import("vue").PublicProps, Readonly<PaginationProps> & Readonly<{
98
+ "onUpdate:page"?: ((value: number) => any) | undefined;
99
+ }>, {
100
+ color: "error" | "info" | "primary" | "secondary" | "success" | "warning" | "neutral";
101
+ variant: "link" | "solid" | "outline" | "soft" | "subtle" | "ghost";
102
+ activeVariant: "link" | "solid" | "outline" | "soft" | "subtle" | "ghost";
103
+ activeColor: "error" | "info" | "primary" | "secondary" | "success" | "warning" | "neutral";
104
+ itemsPerPage: number;
105
+ showEdges: boolean;
106
+ siblingCount: number;
107
+ total: number;
108
+ showControls: boolean;
109
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, PaginationSlots>;
110
+ declare const _default: typeof __VLS_export;
111
+ export default _default;
112
+ type __VLS_WithSlots<T, S> = T & {
113
+ new (): {
114
+ $slots: S;
115
+ };
116
+ };
@@ -1,91 +1,96 @@
1
- <script lang="ts">
2
- import type { VariantProps } from '@byyuurin/ui-kit'
3
- import type { PinInputRootProps } from 'reka-ui'
4
- import type { pinInput } from '../theme'
5
- import type { ComponentAttrs } from '../types'
6
-
7
- export interface PinInputEmits {
8
- 'update:modelValue': [value: string[]]
9
- 'complete': [value: string[]]
10
- 'change': [payload: Event]
11
- 'blur': [payload: Event]
12
- }
13
-
14
- type PinInputVariants = VariantProps<typeof pinInput>
15
-
16
- export interface PinInputProps extends ComponentAttrs<typeof pinInput>, Pick<PinInputRootProps, 'as' | 'defaultValue' | 'disabled' | 'id' | 'mask' | 'modelValue' | 'name' | 'otp' | 'placeholder' | 'required' | 'type'> {
17
- variant?: PinInputVariants['variant']
18
- size?: PinInputVariants['size']
19
- length?: number | string
20
- underline?: boolean
21
- highlight?: boolean
22
- }
1
+ <script>
2
+ import theme from "#build/ui/pin-input";
23
3
  </script>
24
4
 
25
- <script setup lang="ts">
26
- import { reactivePick } from '@vueuse/core'
27
- import { PinInputInput, PinInputRoot, useForwardPropsEmits } from 'reka-ui'
28
- import { computed, ref } from 'vue'
29
- import { useFormItem } from '../composables/useFormItem'
30
- import { useTheme } from '../composables/useTheme'
31
- import { looseToNumber } from '../utils'
32
-
33
- const props = withDefaults(defineProps<PinInputProps>(), {
34
- variant: 'outline',
35
- length: 5,
36
- type: 'text',
37
- })
38
-
39
- const emit = defineEmits<PinInputEmits>()
40
-
41
- const rootProps = useForwardPropsEmits(reactivePick(props, 'defaultValue', 'disabled', 'id', 'mask', 'modelValue', 'name', 'otp', 'placeholder', 'required', 'type'), emit)
42
-
43
- const completed = ref(false)
44
-
45
- const { id, name, size, highlight, disabled, ariaAttrs, emitFormInput, emitFormChange, emitFormFocus, emitFormBlur } = useFormItem<PinInputProps>(props)
46
- const { generateStyle } = useTheme()
47
- const style = computed(() => generateStyle('pinInput', {
48
- ...props,
49
- size: size.value,
50
- highlight: highlight.value,
51
- }))
52
-
53
- function onComplete(value: string[]) {
54
- // @ts-expect-error - 'target' does not exist in type 'EventInit'
55
- const event = new Event('change', { target: { value } })
56
- emit('change', event)
57
- emitFormChange()
5
+ <script setup>
6
+ import { reactivePick } from "@vueuse/core";
7
+ import { PinInputInput, PinInputRoot, useForwardPropsEmits } from "reka-ui";
8
+ import { computed, onMounted, ref } from "vue";
9
+ import { useAppConfig } from "#imports";
10
+ import { useFormField } from "../composables/useFormField";
11
+ import { looseToNumber } from "../utils";
12
+ import { cv, merge } from "../utils/style";
13
+ const props = defineProps({
14
+ as: { type: null, required: false },
15
+ variant: { type: null, required: false },
16
+ size: { type: null, required: false },
17
+ color: { type: null, required: false },
18
+ length: { type: [Number, String], required: false, default: 5 },
19
+ autofocus: { type: Boolean, required: false },
20
+ autofocusDelay: { type: Number, required: false, default: 0 },
21
+ highlight: { type: Boolean, required: false },
22
+ ui: { type: null, required: false },
23
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
24
+ defaultValue: { type: Array, required: false },
25
+ disabled: { type: Boolean, required: false },
26
+ id: { type: String, required: false },
27
+ mask: { type: Boolean, required: false },
28
+ modelValue: { type: null, required: false },
29
+ name: { type: String, required: false },
30
+ otp: { type: Boolean, required: false },
31
+ placeholder: { type: String, required: false },
32
+ required: { type: Boolean, required: false },
33
+ type: { type: null, required: false, default: "text" }
34
+ });
35
+ const emit = defineEmits(["update:modelValue", "complete", "change", "blur"]);
36
+ const rootProps = useForwardPropsEmits(reactivePick(props, "disabled", "id", "mask", "name", "otp", "required", "type"), emit);
37
+ const { id, name, size, color, highlight, disabled, ariaAttrs, emitFormInput, emitFormChange, emitFormFocus, emitFormBlur } = useFormField(props);
38
+ const appConfig = useAppConfig();
39
+ const ui = computed(() => {
40
+ const styler = cv(merge(theme, appConfig.ui.pinInput));
41
+ return styler({
42
+ ...props,
43
+ size: size.value,
44
+ color: color.value,
45
+ highlight: highlight.value
46
+ });
47
+ });
48
+ const inputsRef = ref([]);
49
+ const completed = ref(false);
50
+ function onComplete(value) {
51
+ const event = new Event("change", { target: { value } });
52
+ emit("change", event);
53
+ emitFormChange();
58
54
  }
59
-
60
- function onBlur(event: FocusEvent) {
55
+ function onBlur(event) {
61
56
  if (!event.relatedTarget || completed.value) {
62
- emit('blur', event)
63
- emitFormBlur()
57
+ emit("blur", event);
58
+ emitFormBlur();
64
59
  }
65
60
  }
61
+ function autoFocus() {
62
+ if (props.autofocus)
63
+ inputsRef.value[0]?.$el?.focus();
64
+ }
65
+ onMounted(() => {
66
+ setTimeout(() => autoFocus(), props.autofocusDelay);
67
+ });
68
+ defineExpose({
69
+ inputsRef
70
+ });
66
71
  </script>
67
72
 
68
73
  <template>
69
74
  <PinInputRoot
70
75
  v-bind="{ ...rootProps, ...ariaAttrs, id, name }"
71
- :class="style.root({ class: [props.class, props.ui?.root] })"
76
+ :placeholder="props.placeholder"
77
+ :model-value="modelValue"
78
+ :default-value="props.defaultValue"
79
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
80
+ data-part="root"
72
81
  @update:model-value="emitFormInput"
73
82
  @complete="onComplete"
74
83
  >
75
- <span
84
+ <PinInputInput
76
85
  v-for="(ids, index) in looseToNumber(props.length)"
77
86
  :key="ids"
78
- :class="style.container({ class: props.ui?.container })"
79
- :aria-disabled="disabled ? true : undefined"
80
- >
81
- <PinInputInput
82
- v-bind="$attrs"
83
- :class="style.base({ class: props.ui?.base })"
84
- :index="index"
85
- :disabled="disabled"
86
- @blur="onBlur"
87
- @focus="emitFormFocus"
88
- />
89
- </span>
87
+ :ref="(el) => inputsRef[index] = el"
88
+ :index="index"
89
+ :disabled="disabled"
90
+ :class="ui.base({ class: props.ui?.base })"
91
+ data-part="base"
92
+ @blur="onBlur"
93
+ @focus="emitFormFocus"
94
+ />
90
95
  </PinInputRoot>
91
96
  </template>
@@ -0,0 +1,54 @@
1
+ import type { ComponentPublicInstance } from 'vue';
2
+ import type { VariantProps } from '@byyuurin/ui-kit';
3
+ import type { PinInputRootEmits, PinInputRootProps } from 'reka-ui';
4
+ import theme from '#build/ui/pin-input';
5
+ import type { ComponentBaseProps, ComponentUIProps } from '../types';
6
+ type PinInputType = 'text' | 'number';
7
+ type ThemeVariants = VariantProps<typeof theme>;
8
+ export interface PinInputProps<T extends PinInputType = 'text'> extends ComponentBaseProps, Pick<PinInputRootProps<T>, 'defaultValue' | 'disabled' | 'id' | 'mask' | 'modelValue' | 'name' | 'otp' | 'placeholder' | 'required' | 'type'> {
9
+ /**
10
+ * The element or component this component should render as.
11
+ * @default "div"
12
+ */
13
+ as?: PinInputRootProps<T>['as'];
14
+ /** @default "solid" */
15
+ variant?: ThemeVariants['variant'];
16
+ /** @default "md" */
17
+ size?: ThemeVariants['size'];
18
+ /** @default "primary" */
19
+ color?: ThemeVariants['color'];
20
+ /**
21
+ * The number of input fields.
22
+ * @default 5
23
+ */
24
+ length?: number | string;
25
+ autofocus?: boolean;
26
+ autofocusDelay?: number;
27
+ highlight?: boolean;
28
+ ui?: ComponentUIProps<typeof theme>;
29
+ }
30
+ export type PinInputEmits<T extends PinInputType = 'text'> = PinInputRootEmits<T> & {
31
+ change: [event: Event];
32
+ blur: [event: Event];
33
+ };
34
+ declare const __VLS_export: <T extends PinInputType = "text" | "number">(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
35
+ props: __VLS_PrettifyLocal<PinInputProps<T> & {
36
+ onChange?: ((event: Event) => any) | undefined;
37
+ onBlur?: ((event: Event) => any) | undefined;
38
+ "onUpdate:modelValue"?: ((value: [T] extends ["number"] ? number[] : string[]) => any) | undefined;
39
+ onComplete?: ((value: [T] extends ["number"] ? number[] : string[]) => any) | undefined;
40
+ }> & import("vue").PublicProps;
41
+ expose: (exposed: import("vue").ShallowUnwrapRef<{
42
+ inputsRef: import("vue").Ref<ComponentPublicInstance[], ComponentPublicInstance[]>;
43
+ }>) => void;
44
+ attrs: any;
45
+ slots: {};
46
+ emit: ((evt: "change", event: Event) => void) & ((evt: "blur", event: Event) => void) & ((evt: "update:modelValue", value: [T] extends ["number"] ? number[] : string[]) => void) & ((evt: "complete", value: [T] extends ["number"] ? number[] : string[]) => void);
47
+ }>) => import("vue").VNode & {
48
+ __ctx?: Awaited<typeof __VLS_setup>;
49
+ };
50
+ declare const _default: typeof __VLS_export;
51
+ export default _default;
52
+ type __VLS_PrettifyLocal<T> = {
53
+ [K in keyof T as K]: T[K];
54
+ } & {};