@byyuurin/ui 0.0.11 → 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 +28 -23
  6. package/dist/runtime/components/Accordion.vue.d.ts +51 -29
  7. package/dist/runtime/components/Alert.vue +47 -27
  8. package/dist/runtime/components/Alert.vue.d.ts +37 -25
  9. package/dist/runtime/components/App.vue +9 -8
  10. package/dist/runtime/components/App.vue.d.ts +22 -20
  11. package/dist/runtime/components/Avatar.vue +65 -21
  12. package/dist/runtime/components/Avatar.vue.d.ts +27 -13
  13. package/dist/runtime/components/AvatarGroup.vue +14 -10
  14. package/dist/runtime/components/AvatarGroup.vue.d.ts +12 -9
  15. package/dist/runtime/components/Badge.vue +64 -32
  16. package/dist/runtime/components/Badge.vue.d.ts +30 -29
  17. package/dist/runtime/components/Breadcrumb.vue +40 -22
  18. package/dist/runtime/components/Breadcrumb.vue.d.ts +48 -21
  19. package/dist/runtime/components/Button.vue +113 -52
  20. package/dist/runtime/components/Button.vue.d.ts +36 -20
  21. package/dist/runtime/components/Calendar.vue +48 -39
  22. package/dist/runtime/components/Calendar.vue.d.ts +58 -31
  23. package/dist/runtime/components/Card.vue +18 -14
  24. package/dist/runtime/components/Card.vue.d.ts +18 -14
  25. package/dist/runtime/components/Carousel.vue +80 -46
  26. package/dist/runtime/components/Carousel.vue.d.ts +46 -25
  27. package/dist/runtime/components/Checkbox.vue +60 -35
  28. package/dist/runtime/components/Checkbox.vue.d.ts +35 -28
  29. package/dist/runtime/components/Chip.vue +35 -32
  30. package/dist/runtime/components/Chip.vue.d.ts +33 -15
  31. package/dist/runtime/components/Collapsible.vue +13 -9
  32. package/dist/runtime/components/Collapsible.vue.d.ts +16 -8
  33. package/dist/runtime/components/Drawer.vue +80 -70
  34. package/dist/runtime/components/Drawer.vue.d.ts +51 -28
  35. package/dist/runtime/components/DropdownMenu.vue +23 -16
  36. package/dist/runtime/components/DropdownMenu.vue.d.ts +77 -36
  37. package/dist/runtime/components/DropdownMenuContent.vue +133 -103
  38. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +38 -26
  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 +172 -88
  42. package/dist/runtime/components/Form.vue.d.ts +69 -44
  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 +82 -77
  48. package/dist/runtime/components/Input.vue.d.ts +55 -43
  49. package/dist/runtime/components/InputNumber.vue +65 -49
  50. package/dist/runtime/components/InputNumber.vue.d.ts +51 -105
  51. package/dist/runtime/components/Kbd.vue +11 -5
  52. package/dist/runtime/components/Kbd.vue.d.ts +17 -11
  53. package/dist/runtime/components/Link.vue +54 -197
  54. package/dist/runtime/components/Link.vue.d.ts +17 -17
  55. package/dist/runtime/components/LinkBase.vue +11 -33
  56. package/dist/runtime/components/LinkBase.vue.d.ts +8 -3
  57. package/dist/runtime/components/Modal.vue +53 -39
  58. package/dist/runtime/components/Modal.vue.d.ts +64 -34
  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 +3 -3
  62. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -1
  63. package/dist/runtime/components/Pagination.vue +39 -47
  64. package/dist/runtime/components/Pagination.vue.d.ts +54 -31
  65. package/dist/runtime/components/PinInput.vue +46 -32
  66. package/dist/runtime/components/PinInput.vue.d.ts +40 -21
  67. package/dist/runtime/components/Popover.vue +33 -19
  68. package/dist/runtime/components/Popover.vue.d.ts +57 -32
  69. package/dist/runtime/components/Progress.vue +31 -26
  70. package/dist/runtime/components/Progress.vue.d.ts +32 -23
  71. package/dist/runtime/components/RadioGroup.vue +75 -48
  72. package/dist/runtime/components/RadioGroup.vue.d.ts +58 -36
  73. package/dist/runtime/components/ScrollArea.vue +33 -31
  74. package/dist/runtime/components/ScrollArea.vue.d.ts +9 -5
  75. package/dist/runtime/components/Select.vue +166 -76
  76. package/dist/runtime/components/Select.vue.d.ts +206 -65
  77. package/dist/runtime/components/Separator.vue +42 -16
  78. package/dist/runtime/components/Separator.vue.d.ts +35 -14
  79. package/dist/runtime/components/Skeleton.vue +18 -6
  80. package/dist/runtime/components/Skeleton.vue.d.ts +4 -4
  81. package/dist/runtime/components/Slider.vue +42 -24
  82. package/dist/runtime/components/Slider.vue.d.ts +43 -27
  83. package/dist/runtime/components/Switch.vue +40 -31
  84. package/dist/runtime/components/Switch.vue.d.ts +36 -27
  85. package/dist/runtime/components/Table.vue +279 -51
  86. package/dist/runtime/components/Table.vue.d.ts +151 -65
  87. package/dist/runtime/components/Tabs.vue +70 -23
  88. package/dist/runtime/components/Tabs.vue.d.ts +61 -29
  89. package/dist/runtime/components/Textarea.vue +102 -54
  90. package/dist/runtime/components/Textarea.vue.d.ts +57 -41
  91. package/dist/runtime/components/Toast.vue +84 -38
  92. package/dist/runtime/components/Toast.vue.d.ts +48 -27
  93. package/dist/runtime/components/ToastProvider.vue +31 -22
  94. package/dist/runtime/components/ToastProvider.vue.d.ts +30 -17
  95. package/dist/runtime/components/Tooltip.vue +33 -21
  96. package/dist/runtime/components/Tooltip.vue.d.ts +37 -15
  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 +3 -2
  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 -254
  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 +154 -87
  172. package/vue-plugin.d.ts +5 -0
  173. package/dist/module.d.ts +0 -13
  174. package/dist/module.mjs.map +0 -1
  175. package/dist/runtime/app/injections.d.ts +0 -9331
  176. package/dist/runtime/app/injections.js +0 -61
  177. package/dist/runtime/components/ButtonGroup.vue +0 -26
  178. package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -26
  179. package/dist/runtime/components/FormItem.vue +0 -90
  180. package/dist/runtime/components/FormItem.vue.d.ts +0 -60
  181. package/dist/runtime/composables/useButtonGroup.d.ts +0 -5
  182. package/dist/runtime/composables/useButtonGroup.js +0 -9
  183. package/dist/runtime/composables/useFormItem.d.ts +0 -27
  184. package/dist/runtime/composables/useFormItem.js +0 -64
  185. package/dist/runtime/composables/useTheme.d.ts +0 -9
  186. package/dist/runtime/composables/useTheme.js +0 -23
  187. package/dist/runtime/index.d.ts +0 -44
  188. package/dist/runtime/index.js +0 -44
  189. package/dist/runtime/locale/zh-tw.d.ts +0 -2
  190. package/dist/runtime/theme/accordion.d.ts +0 -50
  191. package/dist/runtime/theme/accordion.js +0 -28
  192. package/dist/runtime/theme/alert.d.ts +0 -119
  193. package/dist/runtime/theme/alert.js +0 -47
  194. package/dist/runtime/theme/app.d.ts +0 -19
  195. package/dist/runtime/theme/app.js +0 -19
  196. package/dist/runtime/theme/avatar-group.d.ts +0 -46
  197. package/dist/runtime/theme/avatar-group.js +0 -32
  198. package/dist/runtime/theme/avatar.d.ts +0 -50
  199. package/dist/runtime/theme/avatar.js +0 -34
  200. package/dist/runtime/theme/badge.d.ts +0 -76
  201. package/dist/runtime/theme/badge.js +0 -92
  202. package/dist/runtime/theme/breadcrumb.d.ts +0 -61
  203. package/dist/runtime/theme/breadcrumb.js +0 -44
  204. package/dist/runtime/theme/button-group.d.ts +0 -60
  205. package/dist/runtime/theme/button-group.js +0 -42
  206. package/dist/runtime/theme/button.d.ts +0 -184
  207. package/dist/runtime/theme/button.js +0 -164
  208. package/dist/runtime/theme/calendar.d.ts +0 -58
  209. package/dist/runtime/theme/calendar.js +0 -86
  210. package/dist/runtime/theme/card.d.ts +0 -56
  211. package/dist/runtime/theme/card.js +0 -37
  212. package/dist/runtime/theme/carousel.d.ts +0 -107
  213. package/dist/runtime/theme/carousel.js +0 -43
  214. package/dist/runtime/theme/checkbox.d.ts +0 -82
  215. package/dist/runtime/theme/checkbox.js +0 -54
  216. package/dist/runtime/theme/chip.d.ts +0 -61
  217. package/dist/runtime/theme/chip.js +0 -66
  218. package/dist/runtime/theme/collapsible.d.ts +0 -32
  219. package/dist/runtime/theme/collapsible.js +0 -10
  220. package/dist/runtime/theme/drawer.d.ts +0 -142
  221. package/dist/runtime/theme/drawer.js +0 -113
  222. package/dist/runtime/theme/dropdown-menu.d.ts +0 -65
  223. package/dist/runtime/theme/dropdown-menu.js +0 -83
  224. package/dist/runtime/theme/form-item.d.ts +0 -70
  225. package/dist/runtime/theme/form-item.js +0 -34
  226. package/dist/runtime/theme/form.d.ts +0 -2
  227. package/dist/runtime/theme/form.js +0 -7
  228. package/dist/runtime/theme/index.d.ts +0 -41
  229. package/dist/runtime/theme/index.js +0 -41
  230. package/dist/runtime/theme/input-number.d.ts +0 -115
  231. package/dist/runtime/theme/input-number.js +0 -95
  232. package/dist/runtime/theme/input.d.ts +0 -172
  233. package/dist/runtime/theme/input.js +0 -151
  234. package/dist/runtime/theme/kbd.d.ts +0 -33
  235. package/dist/runtime/theme/kbd.js +0 -26
  236. package/dist/runtime/theme/link.d.ts +0 -38
  237. package/dist/runtime/theme/link.js +0 -26
  238. package/dist/runtime/theme/modal.d.ts +0 -42
  239. package/dist/runtime/theme/modal.js +0 -55
  240. package/dist/runtime/theme/pagination.d.ts +0 -74
  241. package/dist/runtime/theme/pagination.js +0 -17
  242. package/dist/runtime/theme/pinInput.d.ts +0 -94
  243. package/dist/runtime/theme/pinInput.js +0 -111
  244. package/dist/runtime/theme/popover.d.ts +0 -32
  245. package/dist/runtime/theme/popover.js +0 -13
  246. package/dist/runtime/theme/progress.d.ts +0 -180
  247. package/dist/runtime/theme/progress.js +0 -95
  248. package/dist/runtime/theme/radio-group.d.ts +0 -104
  249. package/dist/runtime/theme/radio-group.js +0 -61
  250. package/dist/runtime/theme/scroll-area.d.ts +0 -67
  251. package/dist/runtime/theme/scroll-area.js +0 -33
  252. package/dist/runtime/theme/select.d.ts +0 -186
  253. package/dist/runtime/theme/select.js +0 -173
  254. package/dist/runtime/theme/separator.d.ts +0 -74
  255. package/dist/runtime/theme/separator.js +0 -53
  256. package/dist/runtime/theme/skeleton.d.ts +0 -2
  257. package/dist/runtime/theme/skeleton.js +0 -7
  258. package/dist/runtime/theme/slider.d.ts +0 -70
  259. package/dist/runtime/theme/slider.js +0 -52
  260. package/dist/runtime/theme/switch.d.ts +0 -116
  261. package/dist/runtime/theme/switch.js +0 -78
  262. package/dist/runtime/theme/table.d.ts +0 -86
  263. package/dist/runtime/theme/table.js +0 -36
  264. package/dist/runtime/theme/tabs.d.ts +0 -129
  265. package/dist/runtime/theme/tabs.js +0 -146
  266. package/dist/runtime/theme/textarea.d.ts +0 -90
  267. package/dist/runtime/theme/textarea.js +0 -116
  268. package/dist/runtime/theme/toast-provider.d.ts +0 -116
  269. package/dist/runtime/theme/toast-provider.js +0 -97
  270. package/dist/runtime/theme/toast.d.ts +0 -83
  271. package/dist/runtime/theme/toast.js +0 -35
  272. package/dist/runtime/theme/tooltip.d.ts +0 -38
  273. package/dist/runtime/theme/tooltip.js +0 -11
  274. package/dist/runtime/types/components.d.ts +0 -42
  275. package/dist/runtime/utils/extend-theme.d.ts +0 -9
  276. package/dist/runtime/utils/extend-theme.js +0 -27
  277. package/dist/runtime/utils/styler.d.ts +0 -4
  278. package/dist/runtime/utils/styler.js +0 -10
  279. package/dist/runtime/utils/translator.d.ts +0 -18
  280. package/dist/runtime/utils/translator.js +0 -8
  281. package/dist/shared/ui.D1BTWZFB.mjs +0 -5
  282. package/dist/shared/ui.D1BTWZFB.mjs.map +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,92 +1,106 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/input-number";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
- import { reactivePick } from "@vueuse/core";
6
+ import { reactivePick, useVModel } from "@vueuse/core";
7
7
  import { NumberFieldDecrement, NumberFieldIncrement, NumberFieldInput, NumberFieldRoot, useForwardPropsEmits } from "reka-ui";
8
8
  import { computed, onMounted, ref } from "vue";
9
- import { useFormItem } from "../composables/useFormItem";
9
+ import { useAppConfig } from "#imports";
10
+ import { useFieldGroup } from "../composables/useFieldGroup";
11
+ import { useFormField } from "../composables/useFormField";
10
12
  import { useLocale } from "../composables/useLocale";
11
- import { useTheme } from "../composables/useTheme";
13
+ import { cv, merge } from "../utils/style";
12
14
  import Button from "./Button.vue";
13
- defineOptions({
14
- inheritAttrs: false
15
- });
15
+ defineOptions({ inheritAttrs: false });
16
16
  const props = defineProps({
17
+ as: { type: null, required: false },
17
18
  placeholder: { type: String, required: false },
18
19
  variant: { type: null, required: false },
20
+ color: { type: null, required: false },
19
21
  size: { type: null, required: false },
20
- underline: { type: Boolean, required: false },
21
22
  highlight: { type: Boolean, required: false },
22
23
  orientation: { type: null, required: false, default: "horizontal" },
23
- increment: { type: Object, required: false },
24
- incrementIcon: { type: String, required: false },
25
- decrement: { type: Object, required: false },
26
- decrementIcon: { type: String, required: false },
24
+ increment: { type: [Boolean, Object], required: false, default: true },
25
+ incrementIcon: { type: [String, Object], required: false },
26
+ incrementDisabled: { type: Boolean, required: false },
27
+ decrement: { type: [Boolean, Object], required: false, default: true },
28
+ decrementIcon: { type: [String, Object], required: false },
29
+ decrementDisabled: { type: Boolean, required: false },
27
30
  autofocus: { type: Boolean, required: false },
28
31
  autofocusDelay: { type: Number, required: false },
32
+ modelModifiers: { type: Object, required: false },
29
33
  locale: { type: String, required: false },
30
- class: { type: null, required: false },
31
34
  ui: { type: null, required: false },
32
- as: { type: null, required: false },
35
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
33
36
  modelValue: { type: [Number, null], required: false },
34
37
  defaultValue: { type: Number, required: false },
35
38
  min: { type: Number, required: false },
36
39
  max: { type: Number, required: false },
37
40
  step: { type: Number, required: false },
41
+ stepSnapping: { type: Boolean, required: false },
38
42
  disabled: { type: Boolean, required: false },
39
43
  required: { type: Boolean, required: false },
40
44
  id: { type: String, required: false },
41
45
  name: { type: String, required: false },
42
- formatOptions: { type: null, required: false }
46
+ formatOptions: { type: null, required: false },
47
+ disableWheelChange: { type: Boolean, required: false },
48
+ invertWheelChange: { type: Boolean, required: false },
49
+ readonly: { type: Boolean, required: false }
43
50
  });
44
51
  const emit = defineEmits(["update:modelValue", "blur", "change"]);
45
52
  defineSlots();
46
- const rootProps = useForwardPropsEmits(reactivePick(props, "as", "modelValue", "defaultValue", "min", "max", "step", "formatOptions"), emit);
47
- const inputRef = ref(null);
53
+ const modelValue = useVModel(props, "modelValue", emit, { defaultValue: props.defaultValue });
54
+ const rootProps = useForwardPropsEmits(reactivePick(props, "as", "defaultValue", "min", "max", "step", "stepSnapping", "formatOptions", "disableWheelChange", "invertWheelChange", "readonly"), emit);
48
55
  const { t, code: codeLocale } = useLocale();
49
56
  const locale = computed(() => props.locale || codeLocale.value);
50
- const { id, name, size, highlight, disabled, ariaAttrs, emitFormBlur, emitFormFocus, emitFormInput, emitFormChange } = useFormItem(props);
51
- const { theme, generateStyle } = useTheme();
52
- const incrementIcon = computed(() => props.incrementIcon || (props.orientation === "horizontal" ? theme.value.app.icons.plus : theme.value.app.icons.chevronUp));
53
- const decrementIcon = computed(() => props.decrementIcon || (props.orientation === "horizontal" ? theme.value.app.icons.minus : theme.value.app.icons.chevronDown));
54
- const style = computed(() => generateStyle("inputNumber", {
55
- ...props,
56
- size: size.value,
57
- highlight: highlight.value
58
- }));
59
- onMounted(() => {
60
- setTimeout(() => {
61
- autoFocus();
62
- }, props.autofocusDelay);
57
+ const { id, name, size: formFieldSize, color, highlight, disabled, ariaAttrs, emitFormBlur, emitFormFocus, emitFormInput, emitFormChange } = useFormField(props);
58
+ const { size: fieldGroupSize, orientation } = useFieldGroup(props);
59
+ const appConfig = useAppConfig();
60
+ const ui = computed(() => {
61
+ const styler = cv(merge(theme, appConfig.ui.inputNumber));
62
+ return styler({
63
+ ...props,
64
+ size: fieldGroupSize.value || formFieldSize.value,
65
+ color: color.value,
66
+ highlight: highlight.value,
67
+ fieldGroup: orientation.value,
68
+ increment: props.orientation === "vertical" ? !!props.increment || !!props.decrement : !!props.increment,
69
+ decrement: props.orientation === "vertical" ? false : !!props.decrement
70
+ });
63
71
  });
64
- defineExpose({
65
- inputRef
66
- });
67
- function autoFocus() {
68
- if (props.autofocus)
69
- inputRef.value?.$el?.focus();
70
- }
72
+ const incrementIcon = computed(() => props.incrementIcon || (props.orientation === "horizontal" ? appConfig.ui.icons.plus : appConfig.ui.icons.chevronUp));
73
+ const decrementIcon = computed(() => props.decrementIcon || (props.orientation === "horizontal" ? appConfig.ui.icons.minus : appConfig.ui.icons.chevronDown));
74
+ const inputRef = ref(null);
71
75
  function onUpdate(value) {
76
+ if (props.modelModifiers?.optional)
77
+ value ??= void 0;
72
78
  const event = new Event("change", { target: { value } });
73
79
  emit("change", event);
74
80
  emitFormChange();
75
81
  emitFormInput();
76
82
  }
77
83
  function onBlur(event) {
78
- emit("blur", event);
79
84
  emitFormBlur();
85
+ emit("blur", event);
86
+ }
87
+ function autoFocus() {
88
+ if (props.autofocus)
89
+ inputRef.value?.$el?.focus();
80
90
  }
91
+ onMounted(() => {
92
+ setTimeout(() => autoFocus(), props.autofocusDelay);
93
+ });
94
+ defineExpose({
95
+ inputRef
96
+ });
81
97
  </script>
82
98
 
83
99
  <template>
84
100
  <NumberFieldRoot
85
- v-bind="{ ...rootProps, id, name, disabled }"
86
- :locale="locale"
87
- :aria-disabled="disabled ? true : void 0"
88
- :class="style.base({ class: [props.class, props.ui?.base] })"
89
- :data-part="$attrs['data-part'] ?? 'base'"
101
+ v-bind="{ ...rootProps, id, name, disabled, locale, modelValue }"
102
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
103
+ data-part="root"
90
104
  @update:model-value="onUpdate"
91
105
  >
92
106
  <NumberFieldInput
@@ -94,18 +108,19 @@ function onBlur(event) {
94
108
  ref="inputRef"
95
109
  :placeholder="props.placeholder"
96
110
  :required="props.required"
97
- :class="style.input({ class: props.ui?.input })"
98
- data-part="input"
111
+ :class="ui.base({ class: props.ui?.base })"
112
+ data-part="base"
99
113
  @blur="onBlur"
100
114
  @focus="emitFormFocus"
101
115
  />
102
116
 
103
- <div :class="style.increment({ class: props.ui?.increment })" data-part="increment">
104
- <NumberFieldIncrement as-child :disabled="disabled">
117
+ <div v-if="props.increment" :class="ui.increment({ class: props.ui?.increment })" data-part="increment">
118
+ <NumberFieldIncrement :disabled="disabled || incrementDisabled" as-child>
105
119
  <slot name="increment">
106
120
  <Button
107
121
  :icon="incrementIcon"
108
122
  :size="props.size"
123
+ :color="color"
109
124
  variant="link"
110
125
  :aria-label="t('inputNumber.increment')"
111
126
  v-bind="typeof props.increment === 'object' ? props.increment : void 0"
@@ -114,12 +129,13 @@ function onBlur(event) {
114
129
  </NumberFieldIncrement>
115
130
  </div>
116
131
 
117
- <div :class="style.decrement({ class: props.ui?.decrement })" data-part="decrement">
118
- <NumberFieldDecrement as-child :disabled="disabled">
132
+ <div v-if="props.decrement" :class="ui.decrement({ class: props.ui?.decrement })" data-part="decrement">
133
+ <NumberFieldDecrement :disabled="disabled || decrementDisabled" as-child>
119
134
  <slot name="decrement">
120
135
  <Button
121
136
  :icon="decrementIcon"
122
137
  :size="props.size"
138
+ :color="color"
123
139
  variant="link"
124
140
  :aria-label="t('inputNumber.decrement')"
125
141
  v-bind="typeof props.decrement === 'object' ? props.decrement : void 0"
@@ -1,59 +1,76 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
2
  import type { NumberFieldRootProps } from 'reka-ui';
3
- import type { inputNumber } from '../theme/index.js';
4
- import type { ButtonProps, ComponentAttrs } from '../types/index.js';
5
- export interface InputNumberEmits {
6
- 'update:modelValue': [payload: number];
7
- 'blur': [event: FocusEvent];
8
- 'change': [payload: Event];
9
- }
10
- export interface InputNumberSlots {
11
- increment?: (props?: {}) => any;
12
- decrement?: (props?: {}) => any;
13
- }
14
- type InputNumberVariants = VariantProps<typeof inputNumber>;
15
- export interface InputNumberProps extends ComponentAttrs<typeof inputNumber>, Pick<NumberFieldRootProps, 'as' | 'modelValue' | 'defaultValue' | 'min' | 'max' | 'step' | 'disabled' | 'required' | 'id' | 'name' | 'formatOptions'> {
3
+ import theme from '#build/ui/input-number';
4
+ import type { ButtonProps, ComponentBaseProps, ComponentUIProps, IconProps } from '../types';
5
+ import type { ModelModifiers } from '../types/input';
6
+ import type { MaybeNull, StaticSlot } from '../types/utils';
7
+ type ThemeVariants = VariantProps<typeof theme>;
8
+ export interface InputNumberProps extends ComponentBaseProps, Pick<NumberFieldRootProps, 'modelValue' | 'defaultValue' | 'min' | 'max' | 'step' | 'stepSnapping' | 'disabled' | 'required' | 'id' | 'name' | 'formatOptions' | 'disableWheelChange' | 'invertWheelChange' | 'readonly'> {
9
+ /**
10
+ * The element or component this component should render as.
11
+ * @default "div"
12
+ */
13
+ as?: NumberFieldRootProps['as'];
16
14
  /** The placeholder text when the input is empty. */
17
15
  placeholder?: string;
18
- variant?: InputNumberVariants['variant'];
19
- size?: InputNumberVariants['size'];
20
- underline?: boolean;
16
+ /** @default "outline" */
17
+ variant?: ThemeVariants['variant'];
18
+ /** @default "primary" */
19
+ color?: ThemeVariants['color'];
20
+ /** @default "md" */
21
+ size?: ThemeVariants['size'];
21
22
  /** Highlight the ring color like a focus state. */
22
23
  highlight?: boolean;
23
24
  /**
24
25
  * The orientation of the input menu.
25
26
  * @default "horizontal"
26
27
  */
27
- orientation?: InputNumberVariants['orientation'];
28
+ orientation?: ThemeVariants['orientation'];
28
29
  /**
29
30
  * Configure the increment button. The `color` and `size` are inherited.
30
31
  * @default { variant: 'link' }
31
32
  */
32
- increment?: ButtonProps;
33
+ increment?: boolean | ButtonProps;
33
34
  /**
34
35
  * The icon displayed to increment the value.
35
36
  * @default app.icons.plus
36
37
  */
37
- incrementIcon?: string;
38
+ incrementIcon?: IconProps['name'];
39
+ /** Disable the increment button. */
40
+ incrementDisabled?: boolean;
38
41
  /**
39
42
  * Configure the decrement button. The `color` and `size` are inherited.
40
43
  * @default { variant: 'link' }
41
44
  */
42
- decrement?: ButtonProps;
45
+ decrement?: boolean | ButtonProps;
43
46
  /**
44
47
  * The icon displayed to decrement the value.
45
48
  * @default app.icons.minus
46
49
  */
47
- decrementIcon?: string;
50
+ decrementIcon?: IconProps['name'];
51
+ /** Disable the decrement button. */
52
+ decrementDisabled?: boolean;
48
53
  autofocus?: boolean;
49
54
  autofocusDelay?: number;
55
+ modelModifiers?: Pick<ModelModifiers, 'optional'>;
50
56
  /**
51
57
  * The locale to use for formatting and parsing numbers.
58
+ * @default App.locale.code
52
59
  */
53
60
  locale?: string;
61
+ ui?: ComponentUIProps<typeof theme>;
62
+ }
63
+ export interface InputNumberEmits {
64
+ 'update:modelValue': [value: number];
65
+ 'blur': [event: FocusEvent];
66
+ 'change': [event: Event];
67
+ }
68
+ export interface InputNumberSlots {
69
+ increment: StaticSlot;
70
+ decrement: StaticSlot;
54
71
  }
55
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<InputNumberProps, {
56
- inputRef: import("vue").Ref<({
72
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<InputNumberProps, {
73
+ inputRef: import("vue").Ref<MaybeNull<{
57
74
  $: import("vue").ComponentInternalInstance;
58
75
  $data: {};
59
76
  $props: {
@@ -65,43 +82,6 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<InputNumbe
65
82
  };
66
83
  $refs: {
67
84
  [x: string]: unknown;
68
- } & {
69
- primitiveElement: import("vue").CreateComponentPublicInstanceWithMixins<Readonly<import("vue").ExtractPropTypes<{
70
- asChild: {
71
- type: BooleanConstructor;
72
- default: boolean;
73
- };
74
- as: {
75
- type: import("vue").PropType<import("reka-ui").AsTag | import("vue").Component>;
76
- default: string;
77
- };
78
- }>> & Readonly<{}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
79
- [key: string]: any;
80
- }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, import("vue").PublicProps, {
81
- asChild: boolean;
82
- as: import("reka-ui").AsTag | import("vue").Component;
83
- }, true, {}, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
84
- P: {};
85
- B: {};
86
- D: {};
87
- C: {};
88
- M: {};
89
- Defaults: {};
90
- }, Readonly<import("vue").ExtractPropTypes<{
91
- asChild: {
92
- type: BooleanConstructor;
93
- default: boolean;
94
- };
95
- as: {
96
- type: import("vue").PropType<import("reka-ui").AsTag | import("vue").Component>;
97
- default: string;
98
- };
99
- }>> & Readonly<{}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
100
- [key: string]: any;
101
- }>, {}, {}, {}, {
102
- asChild: boolean;
103
- as: import("reka-ui").AsTag | import("vue").Component;
104
- }> | null;
105
85
  };
106
86
  $slots: Readonly<{
107
87
  [name: string]: import("vue").Slot<any> | undefined;
@@ -137,9 +117,9 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<InputNumbe
137
117
  as: import("reka-ui").AsTag | import("vue").Component;
138
118
  }> & Omit<Readonly<import("reka-ui").NumberFieldInputProps> & Readonly<{}>, "as"> & import("vue").ShallowUnwrapRef<{}> & {} & import("vue").ComponentCustomProperties & {} & {
139
119
  $slots: {
140
- default?(_: {}): any;
120
+ default?: (props: {}) => any;
141
121
  };
142
- }) | null, ({
122
+ }>, MaybeNull<{
143
123
  $: import("vue").ComponentInternalInstance;
144
124
  $data: {};
145
125
  $props: {
@@ -151,43 +131,6 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<InputNumbe
151
131
  };
152
132
  $refs: {
153
133
  [x: string]: unknown;
154
- } & {
155
- primitiveElement: import("vue").CreateComponentPublicInstanceWithMixins<Readonly<import("vue").ExtractPropTypes<{
156
- asChild: {
157
- type: BooleanConstructor;
158
- default: boolean;
159
- };
160
- as: {
161
- type: import("vue").PropType<import("reka-ui").AsTag | import("vue").Component>;
162
- default: string;
163
- };
164
- }>> & Readonly<{}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
165
- [key: string]: any;
166
- }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, import("vue").PublicProps, {
167
- asChild: boolean;
168
- as: import("reka-ui").AsTag | import("vue").Component;
169
- }, true, {}, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
170
- P: {};
171
- B: {};
172
- D: {};
173
- C: {};
174
- M: {};
175
- Defaults: {};
176
- }, Readonly<import("vue").ExtractPropTypes<{
177
- asChild: {
178
- type: BooleanConstructor;
179
- default: boolean;
180
- };
181
- as: {
182
- type: import("vue").PropType<import("reka-ui").AsTag | import("vue").Component>;
183
- default: string;
184
- };
185
- }>> & Readonly<{}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
186
- [key: string]: any;
187
- }>, {}, {}, {}, {
188
- asChild: boolean;
189
- as: import("reka-ui").AsTag | import("vue").Component;
190
- }> | null;
191
134
  };
192
135
  $slots: Readonly<{
193
136
  [name: string]: import("vue").Slot<any> | undefined;
@@ -223,20 +166,23 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<InputNumbe
223
166
  as: import("reka-ui").AsTag | import("vue").Component;
224
167
  }> & Omit<Readonly<import("reka-ui").NumberFieldInputProps> & Readonly<{}>, "as"> & import("vue").ShallowUnwrapRef<{}> & {} & import("vue").ComponentCustomProperties & {} & {
225
168
  $slots: {
226
- default?(_: {}): any;
169
+ default?: (props: {}) => any;
227
170
  };
228
- }) | null>;
171
+ }>>;
229
172
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
173
+ change: (event: Event) => any;
230
174
  blur: (event: FocusEvent) => any;
231
- change: (payload: Event) => any;
232
- "update:modelValue": (payload: number) => any;
175
+ "update:modelValue": (value: number) => any;
233
176
  }, string, import("vue").PublicProps, Readonly<InputNumberProps> & Readonly<{
177
+ onChange?: ((event: Event) => any) | undefined;
234
178
  onBlur?: ((event: FocusEvent) => any) | undefined;
235
- onChange?: ((payload: Event) => any) | undefined;
236
- "onUpdate:modelValue"?: ((payload: number) => any) | undefined;
179
+ "onUpdate:modelValue"?: ((value: number) => any) | undefined;
237
180
  }>, {
238
181
  orientation: "horizontal" | "vertical";
182
+ increment: boolean | ButtonProps;
183
+ decrement: boolean | ButtonProps;
239
184
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, InputNumberSlots>;
185
+ declare const _default: typeof __VLS_export;
240
186
  export default _default;
241
187
  type __VLS_WithSlots<T, S> = T & {
242
188
  new (): {
@@ -1,26 +1,32 @@
1
1
  <script>
2
2
  import { computed } from "vue";
3
+ import theme from "#build/ui/kbd";
3
4
  </script>
4
5
 
5
6
  <script setup>
6
7
  import { Primitive } from "reka-ui";
8
+ import { useAppConfig } from "#imports";
7
9
  import { useKbd } from "../composables/useKbd";
8
- import { useTheme } from "../composables/useTheme";
10
+ import { cv, merge } from "../utils/style";
9
11
  const props = defineProps({
10
12
  as: { type: null, required: false, default: "kbd" },
11
13
  variant: { type: null, required: false },
12
14
  size: { type: null, required: false },
15
+ color: { type: null, required: false },
13
16
  value: { type: null, required: false },
14
- class: { type: null, required: false }
17
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true }
15
18
  });
16
19
  defineSlots();
17
20
  const { getKbdKey } = useKbd();
18
- const { generateStyle } = useTheme();
19
- const style = computed(() => generateStyle("kbd", props));
21
+ const appConfig = useAppConfig();
22
+ const ui = computed(() => {
23
+ const styler = cv(merge(theme, appConfig.ui.kbd));
24
+ return styler(props);
25
+ });
20
26
  </script>
21
27
 
22
28
  <template>
23
- <Primitive :as="props.as" :class="style.base()" data-part="base">
29
+ <Primitive :as="props.as" :class="ui.base({ class: props.class })" data-part="base">
24
30
  <slot>{{ getKbdKey(props.value) }}</slot>
25
31
  </Primitive>
26
32
  </template>
@@ -1,25 +1,31 @@
1
1
  import type { VariantProps } from '@byyuurin/ui-kit';
2
2
  import type { PrimitiveProps } from 'reka-ui';
3
- import type { KbdKey } from '../composables/useKbd.js';
4
- import type { kbd } from '../theme/index.js';
5
- import type { ComponentAttrs } from '../types/index.js';
6
- export interface KbdSlots {
7
- default?: (props?: {}) => any;
8
- }
9
- type KbdVariants = VariantProps<typeof kbd>;
10
- export interface KbdProps extends Omit<ComponentAttrs<typeof kbd>, 'ui'> {
3
+ import theme from '#build/ui/kbd';
4
+ import type { KbdKey } from '../composables/useKbd';
5
+ import type { ComponentBaseProps } from '../types';
6
+ import type { StaticSlot } from '../types/utils';
7
+ type ThemeVariants = VariantProps<typeof theme>;
8
+ export interface KbdProps extends ComponentBaseProps {
11
9
  /**
12
10
  * The element or component this component should render as.
13
11
  * @default "kbd"
14
12
  */
15
13
  as?: PrimitiveProps['as'];
16
- variant?: KbdVariants['variant'];
17
- size?: KbdVariants['size'];
14
+ /** @default "outline" */
15
+ variant?: ThemeVariants['variant'];
16
+ /** @default "md" */
17
+ size?: ThemeVariants['size'];
18
+ /** @default "neutral" */
19
+ color?: ThemeVariants['color'];
18
20
  value?: KbdKey | (string & {});
19
21
  }
20
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<KbdProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<KbdProps> & Readonly<{}>, {
22
+ export interface KbdSlots {
23
+ default: StaticSlot;
24
+ }
25
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<KbdProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<KbdProps> & Readonly<{}>, {
21
26
  as: import("reka-ui").AsTag | import("vue").Component;
22
27
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, KbdSlots>;
28
+ declare const _default: typeof __VLS_export;
23
29
  export default _default;
24
30
  type __VLS_WithSlots<T, S> = T & {
25
31
  new (): {