@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,2 +1,3 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
2
3
  export default _default;
@@ -1,28 +1,31 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/pagination";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { reactivePick } from "@vueuse/core";
7
7
  import { PaginationEllipsis, PaginationFirst, PaginationLast, PaginationList, PaginationListItem, PaginationNext, PaginationPrev, PaginationRoot, useForwardPropsEmits } from "reka-ui";
8
8
  import { computed } from "vue";
9
+ import { useAppConfig } from "#imports";
9
10
  import { useLocale } from "../composables/useLocale";
10
- import { useTheme } from "../composables/useTheme";
11
+ import { cv, merge } from "../utils/style";
11
12
  import Button from "./Button.vue";
12
13
  const props = defineProps({
13
- firstIcon: { type: String, required: false },
14
- lastIcon: { type: String, required: false },
15
- prevIcon: { type: String, required: false },
16
- nextIcon: { type: String, required: false },
17
- ellipsisIcon: { type: String, required: false },
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" },
18
22
  size: { type: null, required: false },
19
23
  variant: { type: null, required: false, default: "outline" },
20
24
  activeVariant: { type: null, required: false, default: "solid" },
21
25
  showControls: { type: Boolean, required: false, default: true },
22
26
  to: { type: Function, required: false },
23
- class: { type: null, required: false },
24
27
  ui: { type: null, required: false },
25
- as: { type: null, required: false },
28
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
26
29
  defaultPage: { type: Number, required: false },
27
30
  disabled: { type: Boolean, required: false },
28
31
  itemsPerPage: { type: Number, required: true, default: 10 },
@@ -35,72 +38,61 @@ const emit = defineEmits(["update:page"]);
35
38
  const slots = defineSlots();
36
39
  const rootProps = useForwardPropsEmits(reactivePick(props, "as", "defaultPage", "disabled", "itemsPerPage", "page", "showEdges", "siblingCount", "total"), emit);
37
40
  const { dir } = useLocale();
38
- const { theme, generateStyle } = useTheme();
39
- const style = computed(() => generateStyle("pagination", props));
40
- const firstIcon = computed(() => props.firstIcon || (dir.value === "rtl" ? theme.value.app.icons.chevronDoubleRight : theme.value.app.icons.chevronDoubleLeft));
41
- const prevIcon = computed(() => props.prevIcon || (dir.value === "rtl" ? theme.value.app.icons.chevronRight : theme.value.app.icons.chevronLeft));
42
- const nextIcon = computed(() => props.nextIcon || (dir.value === "rtl" ? theme.value.app.icons.chevronLeft : theme.value.app.icons.chevronRight));
43
- const lastIcon = computed(() => props.lastIcon || (dir.value === "rtl" ? theme.value.app.icons.chevronDoubleLeft : theme.value.app.icons.chevronDoubleRight));
44
- const ellipsisIcon = computed(() => props.ellipsisIcon || theme.value.app.icons.ellipsis);
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));
45
50
  </script>
46
51
 
47
52
  <template>
48
- <PaginationRoot v-slot="{ page, pageCount }" v-bind="rootProps" :class="style.root({ class: [props.class, props.ui?.root] })" data-part="root">
49
- <PaginationList v-slot="{ items }" :class="style.list({ class: props.ui?.list })" data-part="list">
50
- <PaginationFirst v-if="props.showControls || !!slots.first" :class="style.first({ class: props.ui?.first })" data-part="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">
51
56
  <slot name="first">
52
- <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)" />
53
58
  </slot>
54
59
  </PaginationFirst>
55
- <PaginationPrev v-if="props.showControls || !!slots.prev" :class="style.prev({ class: props.ui?.prev })" data-part="perv" as-child>
60
+ <PaginationPrev v-if="props.showControls || !!slots.prev" :class="ui.prev({ class: props.ui?.prev })" as-child data-part="perv">
56
61
  <slot name="prev">
57
- <Button :variant="props.variant" :size="props.size" :icon="prevIcon" :to="page > 1 ? props.to?.(page - 1) : void 0" />
62
+ <Button :color="props.color" :variant="props.variant" :size="props.size" :icon="prevIcon" :to="page > 1 ? props.to?.(page - 1) : void 0" />
58
63
  </slot>
59
64
  </PaginationPrev>
60
65
 
61
- <template v-for="(item, index) in items">
62
- <PaginationListItem v-if="item.type === 'page'" :key="index" :value="item.value" :class="style.item({ class: props.ui?.item })" data-part="item" 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">
63
68
  <slot name="item" v-bind="{ item, index, page, pageCount }">
64
69
  <Button
70
+ :color="props.page === item.value ? props.activeColor : props.color"
65
71
  :variant="props.page === item.value ? props.activeVariant : props.variant"
66
72
  :size="props.size"
67
73
  :label="String(item.value)"
68
74
  :to="props.to?.(item.value)"
69
- :ui="{ label: style.label({ class: props.ui?.label }) }"
75
+ :ui="{ label: ui.label({ class: props.ui?.label }) }"
76
+ square
70
77
  />
71
78
  </slot>
72
79
  </PaginationListItem>
73
80
 
74
- <PaginationEllipsis
75
- v-else
76
- :key="item.type"
77
- :index="index"
78
- :disabled="props.disabled"
79
- :class="[
80
- style.item({ class: props.ui?.item }),
81
- style.ellipsis({ class: props.ui?.ellipsis })
82
- ]"
83
- data-part="ellipsis"
84
- as-child
85
- >
86
- <slot name="ellipsis">
87
- <Button
88
- :variant="props.variant"
89
- :size="props.size"
90
- :icon="ellipsisIcon"
91
- />
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" />
92
84
  </slot>
93
85
  </PaginationEllipsis>
94
86
  </template>
95
87
 
96
- <PaginationNext v-if="props.showControls || !!slots.next" :class="style.next({ class: props.ui?.next })" data-part="next" as-child>
88
+ <PaginationNext v-if="props.showControls || !!slots.next" :class="ui.next({ class: props.ui?.next })" as-child data-part="next">
97
89
  <slot name="next">
98
- <Button :variant="props.variant" :size="props.size" :icon="nextIcon" :to="page < pageCount ? props.to?.(page + 1) : void 0" />
90
+ <Button :color="props.color" :variant="props.variant" :size="props.size" :icon="nextIcon" :to="page < pageCount ? props.to?.(page + 1) : void 0" />
99
91
  </slot>
100
92
  </PaginationNext>
101
- <PaginationLast v-if="props.showControls || !!slots.last" :class="style.last({ class: props.ui?.last })" data-part="last" as-child>
93
+ <PaginationLast v-if="props.showControls || !!slots.last" :class="ui.last({ class: props.ui?.last })" as-child data-part="last">
102
94
  <slot name="last">
103
- <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)" />
104
96
  </slot>
105
97
  </PaginationLast>
106
98
  </PaginationList>
@@ -1,52 +1,48 @@
1
1
  import type { PaginationRootEmits, PaginationRootProps } from 'reka-ui';
2
- import type { pagination } from '../theme/index.js';
3
- import type { ButtonProps, ComponentAttrs } from '../types/index.js';
4
- export interface PaginationEmits extends PaginationRootEmits {
5
- }
6
- export interface PaginationSlots {
7
- first?: (props?: {}) => any;
8
- prev?: (props?: {}) => any;
9
- next?: (props?: {}) => any;
10
- last?: (props?: {}) => any;
11
- ellipsis?: (props?: {}) => any;
12
- item?: (props: {
13
- page: number;
14
- pageCount: number;
15
- item: {
16
- type: 'ellipsis';
17
- } | {
18
- type: 'page';
19
- value: number;
20
- };
21
- index: number;
22
- }) => any;
23
- }
24
- export interface PaginationProps extends ComponentAttrs<typeof pagination>, Pick<PaginationRootProps, 'as' | 'defaultPage' | 'disabled' | 'itemsPerPage' | 'page' | 'showEdges' | 'siblingCount' | 'total'> {
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'];
25
11
  /**
26
12
  * The icon to use for the first page control.
27
13
  * @default app.icons.doubleLeft
28
14
  */
29
- firstIcon?: string;
15
+ firstIcon?: IconProps['name'];
30
16
  /**
31
17
  * The icon to use for the last page control.
32
18
  * @default app.icons.doubleRight
33
19
  */
34
- lastIcon?: string;
20
+ lastIcon?: IconProps['name'];
35
21
  /**
36
22
  * The icon to use for the previous page control.
37
23
  * @default app.icons.chevronLeft
38
24
  */
39
- prevIcon?: string;
25
+ prevIcon?: IconProps['name'];
40
26
  /**
41
27
  * The icon to use for the next page control.
42
28
  * @default app.icons.chevronRight
43
29
  */
44
- nextIcon?: string;
30
+ nextIcon?: IconProps['name'];
45
31
  /**
46
32
  * The icon to use for the ellipsis control.
47
33
  * @default app.icons.ellipsis
48
34
  */
49
- ellipsisIcon?: string;
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'];
50
46
  /**
51
47
  * The size of the pagination controls.
52
48
  * @default "md"
@@ -69,22 +65,49 @@ export interface PaginationProps extends ComponentAttrs<typeof pagination>, Pick
69
65
  showControls?: boolean;
70
66
  /**
71
67
  * A function to render page controls as links.
68
+ * @param page The page number to navigate to.
72
69
  */
73
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
+ }>;
74
94
  }
75
- declare const _default: __VLS_WithSlots<import("vue").DefineComponent<PaginationProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
95
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<PaginationProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
76
96
  "update:page": (value: number) => any;
77
97
  }, string, import("vue").PublicProps, Readonly<PaginationProps> & Readonly<{
78
98
  "onUpdate:page"?: ((value: number) => any) | undefined;
79
99
  }>, {
80
- variant: "solid" | "outline" | "soft" | "soft-outline" | "link" | "ghost";
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";
81
104
  itemsPerPage: number;
82
105
  showEdges: boolean;
83
106
  siblingCount: number;
84
107
  total: number;
85
- activeVariant: "solid" | "outline" | "soft" | "soft-outline" | "link" | "ghost";
86
108
  showControls: boolean;
87
109
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, PaginationSlots>;
110
+ declare const _default: typeof __VLS_export;
88
111
  export default _default;
89
112
  type __VLS_WithSlots<T, S> = T & {
90
113
  new (): {
@@ -1,23 +1,26 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/pin-input";
3
3
  </script>
4
4
 
5
5
  <script setup>
6
6
  import { reactivePick } from "@vueuse/core";
7
7
  import { PinInputInput, PinInputRoot, useForwardPropsEmits } from "reka-ui";
8
- import { computed, ref } from "vue";
9
- import { useFormItem } from "../composables/useFormItem";
10
- import { useTheme } from "../composables/useTheme";
8
+ import { computed, onMounted, ref } from "vue";
9
+ import { useAppConfig } from "#imports";
10
+ import { useFormField } from "../composables/useFormField";
11
11
  import { looseToNumber } from "../utils";
12
+ import { cv, merge } from "../utils/style";
12
13
  const props = defineProps({
13
- variant: { type: null, required: false, default: "outline" },
14
+ as: { type: null, required: false },
15
+ variant: { type: null, required: false },
14
16
  size: { type: null, required: false },
17
+ color: { type: null, required: false },
15
18
  length: { type: [Number, String], required: false, default: 5 },
16
- underline: { type: Boolean, required: false },
19
+ autofocus: { type: Boolean, required: false },
20
+ autofocusDelay: { type: Number, required: false, default: 0 },
17
21
  highlight: { type: Boolean, required: false },
18
- class: { type: null, required: false },
19
22
  ui: { type: null, required: false },
20
- as: { type: null, required: false },
23
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
21
24
  defaultValue: { type: Array, required: false },
22
25
  disabled: { type: Boolean, required: false },
23
26
  id: { type: String, required: false },
@@ -30,15 +33,20 @@ const props = defineProps({
30
33
  type: { type: null, required: false, default: "text" }
31
34
  });
32
35
  const emit = defineEmits(["update:modelValue", "complete", "change", "blur"]);
33
- const rootProps = useForwardPropsEmits(reactivePick(props, "defaultValue", "disabled", "id", "mask", "modelValue", "name", "otp", "required", "type"), emit);
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([]);
34
49
  const completed = ref(false);
35
- const { id, name, size, highlight, disabled, ariaAttrs, emitFormInput, emitFormChange, emitFormFocus, emitFormBlur } = useFormItem(props);
36
- const { generateStyle } = useTheme();
37
- const style = computed(() => generateStyle("pinInput", {
38
- ...props,
39
- size: size.value,
40
- highlight: highlight.value
41
- }));
42
50
  function onComplete(value) {
43
51
  const event = new Event("change", { target: { value } });
44
52
  emit("change", event);
@@ -50,33 +58,39 @@ function onBlur(event) {
50
58
  emitFormBlur();
51
59
  }
52
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
+ });
53
71
  </script>
54
72
 
55
73
  <template>
56
74
  <PinInputRoot
57
75
  v-bind="{ ...rootProps, ...ariaAttrs, id, name }"
58
76
  :placeholder="props.placeholder"
59
- :class="style.root({ class: [props.class, props.ui?.root] })"
77
+ :model-value="modelValue"
78
+ :default-value="props.defaultValue"
79
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
60
80
  data-part="root"
61
81
  @update:model-value="emitFormInput"
62
82
  @complete="onComplete"
63
83
  >
64
- <span
84
+ <PinInputInput
65
85
  v-for="(ids, index) in looseToNumber(props.length)"
66
86
  :key="ids"
67
- :aria-disabled="disabled ? true : void 0"
68
- :class="style.container({ class: props.ui?.container })"
69
- data-part="container"
70
- >
71
- <PinInputInput
72
- v-bind="$attrs"
73
- :index="index"
74
- :disabled="disabled"
75
- :class="style.base({ class: props.ui?.base })"
76
- data-part="base"
77
- @blur="onBlur"
78
- @focus="emitFormFocus"
79
- />
80
- </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
+ />
81
95
  </PinInputRoot>
82
96
  </template>
@@ -1,35 +1,54 @@
1
+ import type { ComponentPublicInstance } from 'vue';
1
2
  import type { VariantProps } from '@byyuurin/ui-kit';
2
3
  import type { PinInputRootEmits, PinInputRootProps } from 'reka-ui';
3
- import type { pinInput } from '../theme/index.js';
4
- import type { ComponentAttrs } from '../types/index.js';
4
+ import theme from '#build/ui/pin-input';
5
+ import type { ComponentBaseProps, ComponentUIProps } from '../types';
5
6
  type PinInputType = 'text' | 'number';
6
- export type PinInputEmits<T extends PinInputType = 'text' | 'number'> = PinInputRootEmits<T> & {
7
- change: [payload: Event];
8
- blur: [payload: Event];
9
- };
10
- type PinInputVariants = VariantProps<typeof pinInput>;
11
- export interface PinInputProps<T extends PinInputType = 'text' | 'number'> extends ComponentAttrs<typeof pinInput>, Pick<PinInputRootProps<T>, 'as' | 'defaultValue' | 'disabled' | 'id' | 'mask' | 'modelValue' | 'name' | 'otp' | 'placeholder' | 'required' | 'type'> {
12
- variant?: PinInputVariants['variant'];
13
- size?: PinInputVariants['size'];
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
+ */
14
24
  length?: number | string;
15
- underline?: boolean;
25
+ autofocus?: boolean;
26
+ autofocusDelay?: number;
16
27
  highlight?: boolean;
28
+ ui?: ComponentUIProps<typeof theme>;
17
29
  }
18
- declare const _default: <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<{
19
- props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
20
- readonly onBlur?: ((payload: Event) => any) | undefined;
21
- readonly onChange?: ((payload: Event) => any) | undefined;
22
- readonly "onUpdate:modelValue"?: ((value: T extends "number" ? number[] : string[]) => any) | undefined;
23
- readonly onComplete?: ((value: T extends "number" ? number[] : string[]) => any) | undefined;
24
- } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onBlur" | "onChange" | "onUpdate:modelValue" | "onComplete"> & PinInputProps<T> & Partial<{}>> & import("vue").PublicProps;
25
- expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
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;
26
44
  attrs: any;
27
45
  slots: {};
28
- emit: ((evt: "blur", payload: Event) => void) & ((evt: "change", payload: Event) => void) & ((evt: "update:modelValue", value: T extends "number" ? number[] : string[]) => void) & ((evt: "complete", value: T extends "number" ? number[] : string[]) => void);
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);
29
47
  }>) => import("vue").VNode & {
30
48
  __ctx?: Awaited<typeof __VLS_setup>;
31
49
  };
50
+ declare const _default: typeof __VLS_export;
32
51
  export default _default;
33
52
  type __VLS_PrettifyLocal<T> = {
34
- [K in keyof T]: T[K];
53
+ [K in keyof T as K]: T[K];
35
54
  } & {};
@@ -1,5 +1,5 @@
1
1
  <script>
2
-
2
+ import theme from "#build/ui/popover";
3
3
  </script>
4
4
 
5
5
  <script setup>
@@ -8,57 +8,71 @@ import { defu } from "defu";
8
8
  import { useForwardPropsEmits } from "reka-ui";
9
9
  import { HoverCard, Popover } from "reka-ui/namespaced";
10
10
  import { computed, toRef } from "vue";
11
- import { useTheme } from "../composables/useTheme";
11
+ import { useAppConfig } from "#imports";
12
+ import { usePortal } from "../composables/usePortal";
13
+ import { cv, merge } from "../utils/style";
12
14
  const props = defineProps({
13
- mode: { type: String, required: false, default: "click" },
15
+ mode: { type: null, required: false, default: "click" },
14
16
  content: { type: Object, required: false },
15
17
  arrow: { type: [Boolean, Object], required: false },
16
- portal: { type: Boolean, required: false, default: true },
18
+ portal: { type: [Boolean, String], required: false, skipCheck: true, default: true },
19
+ reference: { type: null, required: false },
17
20
  dismissible: { type: Boolean, required: false, default: true },
18
- class: { type: null, required: false },
19
21
  ui: { type: null, required: false },
22
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true },
20
23
  defaultOpen: { type: Boolean, required: false },
21
24
  open: { type: Boolean, required: false },
22
25
  modal: { type: Boolean, required: false },
23
26
  openDelay: { type: Number, required: false, default: 0 },
24
27
  closeDelay: { type: Number, required: false, default: 0 }
25
28
  });
26
- const emit = defineEmits(["update:open"]);
29
+ const emit = defineEmits(["close-prevent", "update:open"]);
27
30
  const slots = defineSlots();
28
31
  const pick = props.mode === "hover" ? reactivePick(props, "defaultOpen", "open", "openDelay", "closeDelay") : reactivePick(props, "defaultOpen", "open", "modal");
29
32
  const rootProps = useForwardPropsEmits(pick, emit);
33
+ const portalProps = usePortal(toRef(() => props.portal));
30
34
  const contentProps = toRef(() => defu(props.content, { side: "bottom", sideOffset: 8, collisionPadding: 8 }));
31
35
  const contentEvents = computed(() => {
32
36
  if (props.dismissible)
33
37
  return {};
34
- return {
35
- pointerDownOutside: (e) => e.preventDefault(),
36
- interactOutside: (e) => e.preventDefault(),
37
- escapeKeyDown: (e) => e.preventDefault()
38
- };
38
+ const events = ["pointerDownOutside", "interactOutside", "escapeKeyDown"];
39
+ return events.reduce((acc, curr) => {
40
+ acc[curr] = (e) => {
41
+ e.preventDefault();
42
+ emit("close-prevent");
43
+ };
44
+ return acc;
45
+ }, {});
39
46
  });
40
47
  const arrowProps = toRef(() => props.arrow);
41
48
  const Component = computed(() => props.mode === "hover" ? HoverCard : Popover);
42
- const { generateStyle } = useTheme();
43
- const style = computed(() => generateStyle("popover", props));
49
+ const appConfig = useAppConfig();
50
+ const ui = computed(() => {
51
+ const styler = cv(merge(theme, appConfig.ui.popover));
52
+ return styler(props);
53
+ });
44
54
  </script>
45
55
 
46
56
  <template>
47
- <Component.Root v-slot="{ open }" v-bind="rootProps">
48
- <Component.Trigger v-if="!!slots.default" as-child :class="props.class">
57
+ <Component.Root v-slot="{ open, close }" v-bind="rootProps">
58
+ <Component.Trigger v-if="!!slots.default || !!props.reference" :reference="props.reference" as-child :class="props.class">
49
59
  <slot :open="open"></slot>
50
60
  </Component.Trigger>
51
61
 
52
- <Component.Portal :disabled="!portal">
62
+ <Component.Anchor v-if="'Anchor' in Component && !!slots.anchor" as-child>
63
+ <slot name="anchor" v-bind="close ? { close } : {}"></slot>
64
+ </Component.Anchor>
65
+
66
+ <Component.Portal v-bind="portalProps">
53
67
  <Component.Content
54
68
  v-bind="contentProps"
55
- :class="style.content({ class: [!slots.default && props.class, props.ui?.content] })"
69
+ :class="ui.content({ class: [props.ui?.content, !slots.default && props.class] })"
56
70
  data-part="content"
57
71
  v-on="contentEvents"
58
72
  >
59
- <slot name="content"></slot>
73
+ <slot name="content" v-bind="close ? { close } : {}"></slot>
60
74
 
61
- <Component.Arrow v-if="!!arrow" v-bind="arrowProps" :class="style.arrow({ class: props.ui?.arrow })" data-part="arrow" />
75
+ <Component.Arrow v-if="!!props.arrow" v-bind="arrowProps" :class="ui.arrow({ class: props.ui?.arrow })" data-part="arrow" />
62
76
  </Component.Content>
63
77
  </Component.Portal>
64
78
  </Component.Root>