@byyuurin/ui 0.0.10 → 0.0.11

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 (194) hide show
  1. package/README.md +2 -2
  2. package/dist/module.json +3 -3
  3. package/dist/module.mjs +1 -1
  4. package/dist/module.mjs.map +1 -1
  5. package/dist/runtime/app/injections.d.ts +388 -364
  6. package/dist/runtime/components/Accordion.vue +38 -67
  7. package/dist/runtime/components/Accordion.vue.d.ts +52 -0
  8. package/dist/runtime/components/Alert.vue +37 -75
  9. package/dist/runtime/components/Alert.vue.d.ts +59 -0
  10. package/dist/runtime/components/App.vue +25 -40
  11. package/dist/runtime/components/App.vue.d.ts +24 -0
  12. package/dist/runtime/components/Avatar.vue +31 -51
  13. package/dist/runtime/components/Avatar.vue.d.ts +25 -0
  14. package/dist/runtime/components/AvatarGroup.vue +38 -69
  15. package/dist/runtime/components/AvatarGroup.vue.d.ts +27 -0
  16. package/dist/runtime/components/Badge.vue +25 -51
  17. package/dist/runtime/components/Badge.vue.d.ts +44 -0
  18. package/dist/runtime/components/Breadcrumb.vue +36 -74
  19. package/dist/runtime/components/Breadcrumb.vue.d.ts +52 -0
  20. package/dist/runtime/components/Button.vue +62 -51
  21. package/dist/runtime/components/Button.vue.d.ts +29 -0
  22. package/dist/runtime/components/ButtonGroup.vue +17 -37
  23. package/dist/runtime/components/ButtonGroup.vue.d.ts +26 -0
  24. package/dist/runtime/components/Calendar.vue +75 -110
  25. package/dist/runtime/components/Calendar.vue.d.ts +75 -0
  26. package/dist/runtime/components/Card.vue +25 -42
  27. package/dist/runtime/components/Card.vue.d.ts +30 -0
  28. package/dist/runtime/components/Carousel.vue +118 -225
  29. package/dist/runtime/components/Carousel.vue.d.ts +104 -0
  30. package/dist/runtime/components/Checkbox.vue +46 -73
  31. package/dist/runtime/components/Checkbox.vue.d.ts +56 -0
  32. package/dist/runtime/components/Chip.vue +31 -48
  33. package/dist/runtime/components/Chip.vue.d.ts +30 -0
  34. package/dist/runtime/components/Collapsible.vue +22 -30
  35. package/dist/runtime/components/Collapsible.vue.d.ts +26 -0
  36. package/dist/runtime/components/Drawer.vue +51 -101
  37. package/dist/runtime/components/Drawer.vue.d.ts +80 -0
  38. package/dist/runtime/components/DropdownMenu.vue +37 -115
  39. package/dist/runtime/components/DropdownMenu.vue.d.ts +99 -0
  40. package/dist/runtime/components/DropdownMenuContent.vue +81 -77
  41. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +39 -0
  42. package/dist/runtime/components/Form.vue +140 -254
  43. package/dist/runtime/components/Form.vue.d.ts +78 -0
  44. package/dist/runtime/components/FormItem.vue +50 -89
  45. package/dist/runtime/components/FormItem.vue.d.ts +60 -0
  46. package/dist/runtime/components/Input.vue +79 -115
  47. package/dist/runtime/components/Input.vue.d.ts +64 -0
  48. package/dist/runtime/components/InputNumber.vue +74 -117
  49. package/dist/runtime/components/InputNumber.vue.d.ts +245 -0
  50. package/dist/runtime/components/Kbd.vue +18 -39
  51. package/dist/runtime/components/Kbd.vue.d.ts +28 -0
  52. package/dist/runtime/components/Link.vue +168 -257
  53. package/dist/runtime/components/Link.vue.d.ts +95 -0
  54. package/dist/runtime/components/LinkBase.vue +36 -54
  55. package/dist/runtime/components/LinkBase.vue.d.ts +28 -0
  56. package/dist/runtime/components/Modal.vue +49 -84
  57. package/dist/runtime/components/Modal.vue.d.ts +66 -0
  58. package/dist/runtime/components/OverlayProvider.vue +10 -14
  59. package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -0
  60. package/dist/runtime/components/Pagination.vue +55 -121
  61. package/dist/runtime/components/Pagination.vue.d.ts +93 -0
  62. package/dist/runtime/components/PinInput.vue +49 -58
  63. package/dist/runtime/components/PinInput.vue.d.ts +35 -0
  64. package/dist/runtime/components/Popover.vue +39 -68
  65. package/dist/runtime/components/Popover.vue.d.ts +45 -0
  66. package/dist/runtime/components/Progress.vue +68 -120
  67. package/dist/runtime/components/Progress.vue.d.ts +54 -0
  68. package/dist/runtime/components/RadioGroup.vue +67 -125
  69. package/dist/runtime/components/RadioGroup.vue.d.ts +74 -0
  70. package/dist/runtime/components/ScrollArea.vue +31 -31
  71. package/dist/runtime/components/ScrollArea.vue.d.ts +17 -0
  72. package/dist/runtime/components/Select.vue +114 -204
  73. package/dist/runtime/components/Select.vue.d.ts +119 -0
  74. package/dist/runtime/components/Separator.vue +26 -44
  75. package/dist/runtime/components/Separator.vue.d.ts +27 -0
  76. package/dist/runtime/components/Skeleton.vue +12 -21
  77. package/dist/runtime/components/Skeleton.vue.d.ts +19 -0
  78. package/dist/runtime/components/Slider.vue +52 -74
  79. package/dist/runtime/components/Slider.vue.d.ts +36 -0
  80. package/dist/runtime/components/Switch.vue +51 -71
  81. package/dist/runtime/components/Switch.vue.d.ts +49 -0
  82. package/dist/runtime/components/Table.vue +108 -194
  83. package/dist/runtime/components/Table.vue.d.ts +148 -0
  84. package/dist/runtime/components/Tabs.vue +36 -81
  85. package/dist/runtime/components/Tabs.vue.d.ts +65 -0
  86. package/dist/runtime/components/Textarea.vue +77 -124
  87. package/dist/runtime/components/Textarea.vue.d.ts +60 -0
  88. package/dist/runtime/components/Toast.vue +47 -75
  89. package/dist/runtime/components/Toast.vue.d.ts +131 -0
  90. package/dist/runtime/components/ToastProvider.vue +65 -101
  91. package/dist/runtime/components/ToastProvider.vue.d.ts +38 -0
  92. package/dist/runtime/components/Tooltip.vue +36 -47
  93. package/dist/runtime/components/Tooltip.vue.d.ts +31 -0
  94. package/dist/runtime/composables/useAvatarGroup.d.ts +1 -1
  95. package/dist/runtime/composables/useButtonGroup.d.ts +2 -2
  96. package/dist/runtime/composables/useFormItem.d.ts +2 -2
  97. package/dist/runtime/composables/useKbd.d.ts +1 -1
  98. package/dist/runtime/composables/useLocale.d.ts +3 -3
  99. package/dist/runtime/composables/useTheme.d.ts +1 -1
  100. package/dist/runtime/composables/useToast.d.ts +1 -1
  101. package/dist/runtime/locale/en.d.ts +1 -1
  102. package/dist/runtime/locale/zh-tw.d.ts +1 -1
  103. package/dist/runtime/theme/accordion.d.ts +45 -51
  104. package/dist/runtime/theme/accordion.js +1 -1
  105. package/dist/runtime/theme/alert.d.ts +115 -121
  106. package/dist/runtime/theme/alert.js +1 -1
  107. package/dist/runtime/theme/avatar-group.d.ts +42 -48
  108. package/dist/runtime/theme/avatar-group.js +1 -1
  109. package/dist/runtime/theme/avatar.d.ts +46 -52
  110. package/dist/runtime/theme/avatar.js +1 -1
  111. package/dist/runtime/theme/badge.d.ts +60 -66
  112. package/dist/runtime/theme/badge.js +1 -1
  113. package/dist/runtime/theme/breadcrumb.d.ts +52 -58
  114. package/dist/runtime/theme/breadcrumb.js +1 -1
  115. package/dist/runtime/theme/button-group.d.ts +36 -42
  116. package/dist/runtime/theme/button.d.ts +162 -168
  117. package/dist/runtime/theme/button.js +1 -1
  118. package/dist/runtime/theme/calendar.d.ts +52 -50
  119. package/dist/runtime/theme/calendar.js +20 -3
  120. package/dist/runtime/theme/card.d.ts +52 -58
  121. package/dist/runtime/theme/card.js +1 -1
  122. package/dist/runtime/theme/carousel.d.ts +98 -104
  123. package/dist/runtime/theme/carousel.js +1 -1
  124. package/dist/runtime/theme/checkbox.d.ts +77 -83
  125. package/dist/runtime/theme/checkbox.js +1 -1
  126. package/dist/runtime/theme/chip.d.ts +50 -56
  127. package/dist/runtime/theme/chip.js +1 -1
  128. package/dist/runtime/theme/collapsible.d.ts +29 -35
  129. package/dist/runtime/theme/collapsible.js +1 -1
  130. package/dist/runtime/theme/drawer.d.ts +120 -126
  131. package/dist/runtime/theme/drawer.js +1 -1
  132. package/dist/runtime/theme/dropdown-menu.d.ts +55 -61
  133. package/dist/runtime/theme/dropdown-menu.js +1 -1
  134. package/dist/runtime/theme/form-item.d.ts +63 -69
  135. package/dist/runtime/theme/form-item.js +1 -1
  136. package/dist/runtime/theme/form.d.ts +1 -7
  137. package/dist/runtime/theme/input-number.d.ts +98 -104
  138. package/dist/runtime/theme/input-number.js +1 -1
  139. package/dist/runtime/theme/input.d.ts +153 -159
  140. package/dist/runtime/theme/input.js +1 -1
  141. package/dist/runtime/theme/kbd.d.ts +30 -36
  142. package/dist/runtime/theme/link.d.ts +37 -43
  143. package/dist/runtime/theme/modal.d.ts +36 -42
  144. package/dist/runtime/theme/modal.js +1 -1
  145. package/dist/runtime/theme/pagination.d.ts +71 -77
  146. package/dist/runtime/theme/pagination.js +1 -1
  147. package/dist/runtime/theme/pinInput.d.ts +80 -86
  148. package/dist/runtime/theme/pinInput.js +1 -1
  149. package/dist/runtime/theme/popover.d.ts +29 -35
  150. package/dist/runtime/theme/popover.js +1 -1
  151. package/dist/runtime/theme/progress.d.ts +163 -169
  152. package/dist/runtime/theme/progress.js +1 -1
  153. package/dist/runtime/theme/radio-group.d.ts +99 -105
  154. package/dist/runtime/theme/radio-group.js +1 -1
  155. package/dist/runtime/theme/scroll-area.d.ts +62 -68
  156. package/dist/runtime/theme/scroll-area.js +1 -1
  157. package/dist/runtime/theme/select.d.ts +165 -171
  158. package/dist/runtime/theme/select.js +1 -1
  159. package/dist/runtime/theme/separator.d.ts +62 -68
  160. package/dist/runtime/theme/separator.js +1 -1
  161. package/dist/runtime/theme/skeleton.d.ts +1 -7
  162. package/dist/runtime/theme/slider.d.ts +62 -68
  163. package/dist/runtime/theme/slider.js +1 -1
  164. package/dist/runtime/theme/switch.d.ts +111 -117
  165. package/dist/runtime/theme/switch.js +1 -1
  166. package/dist/runtime/theme/table.d.ts +75 -81
  167. package/dist/runtime/theme/table.js +1 -1
  168. package/dist/runtime/theme/tabs.d.ts +114 -120
  169. package/dist/runtime/theme/tabs.js +1 -1
  170. package/dist/runtime/theme/textarea.d.ts +76 -82
  171. package/dist/runtime/theme/textarea.js +1 -1
  172. package/dist/runtime/theme/toast-provider.d.ts +106 -112
  173. package/dist/runtime/theme/toast-provider.js +1 -1
  174. package/dist/runtime/theme/toast.d.ts +74 -80
  175. package/dist/runtime/theme/toast.js +1 -1
  176. package/dist/runtime/theme/tooltip.d.ts +35 -41
  177. package/dist/runtime/theme/tooltip.js +1 -1
  178. package/dist/runtime/types/utils.d.ts +5 -5
  179. package/dist/runtime/utils/link.d.ts +3 -5
  180. package/dist/runtime/utils/styler.d.ts +2 -2
  181. package/dist/runtime/utils/styler.js +2 -2
  182. package/dist/shared/ui.D1BTWZFB.mjs +5 -0
  183. package/dist/shared/ui.D1BTWZFB.mjs.map +1 -0
  184. package/dist/types.d.mts +1 -1
  185. package/dist/unocss.mjs +5 -4
  186. package/dist/unocss.mjs.map +1 -1
  187. package/dist/unplugin.mjs +1 -1
  188. package/dist/unplugin.mjs.map +1 -1
  189. package/dist/vite.mjs +1 -1
  190. package/package.json +77 -75
  191. package/dist/module.cjs +0 -5
  192. package/dist/shared/ui.3e7fad19.mjs +0 -5
  193. package/dist/shared/ui.3e7fad19.mjs.map +0 -1
  194. package/dist/types.d.ts +0 -1
@@ -0,0 +1,80 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
2
+ import type { DialogContentEmits, DialogContentProps, DialogRootEmits, DialogRootProps } from 'reka-ui';
3
+ import type { drawer } from '../theme/index.js';
4
+ import type { ButtonProps, ComponentAttrs, EmitsToProps } from '../types/index.js';
5
+ export interface DrawerEmits extends DialogRootEmits {
6
+ 'after-leave': [];
7
+ }
8
+ export interface DrawerSlots {
9
+ default?: any;
10
+ content?: any;
11
+ header?: any;
12
+ title?: any;
13
+ description?: any;
14
+ close?: (props: {
15
+ ui: ComponentAttrs<typeof drawer>['ui'];
16
+ }) => any;
17
+ body?: any;
18
+ footer?: any;
19
+ }
20
+ type DrawerVariants = VariantProps<typeof drawer>;
21
+ export interface DrawerProps extends ComponentAttrs<typeof drawer>, DialogRootProps {
22
+ title?: string;
23
+ description?: string;
24
+ /** The content of the drawer. */
25
+ content?: Omit<DialogContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<DialogContentEmits>>;
26
+ /**
27
+ * Render an overlay behind the drawer.
28
+ * @default true
29
+ */
30
+ overlay?: boolean;
31
+ /** @default true */
32
+ transition?: boolean;
33
+ /**
34
+ * The direction of the drawer.
35
+ * @default "bottom"
36
+ */
37
+ direction?: DrawerVariants['direction'];
38
+ /**
39
+ * Whether to inset the drawer from the edges.
40
+ */
41
+ inset?: boolean;
42
+ /**
43
+ * Render the drawer in a portal.
44
+ * @default true
45
+ */
46
+ portal?: boolean;
47
+ /**
48
+ * Display a close button to dismiss the drawer.
49
+ * @default true
50
+ */
51
+ close?: ButtonProps | boolean;
52
+ /** @default app.icons.close */
53
+ closeIcon?: string;
54
+ /**
55
+ * When `false`, the drawer will not close when clicking outside or pressing escape.
56
+ * @default true
57
+ */
58
+ dismissible?: boolean;
59
+ }
60
+ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<DrawerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
61
+ "update:open": (value: boolean) => any;
62
+ "after-leave": () => any;
63
+ }, string, import("vue").PublicProps, Readonly<DrawerProps> & Readonly<{
64
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
65
+ "onAfter-leave"?: (() => any) | undefined;
66
+ }>, {
67
+ close: ButtonProps | boolean;
68
+ overlay: boolean;
69
+ direction: "top" | "bottom" | "left" | "right";
70
+ transition: boolean;
71
+ modal: boolean;
72
+ portal: boolean;
73
+ dismissible: boolean;
74
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, DrawerSlots>;
75
+ export default _default;
76
+ type __VLS_WithSlots<T, S> = T & {
77
+ new (): {
78
+ $slots: S;
79
+ };
80
+ };
@@ -1,118 +1,39 @@
1
- <script lang="ts">
2
- import type { VariantProps } from '@byyuurin/ui-kit'
3
- import type { DropdownMenuArrowProps, DropdownMenuContentEmits, DropdownMenuContentProps, DropdownMenuRootEmits, DropdownMenuRootProps } from 'reka-ui'
4
- import type { dropdownMenu } from '../theme'
5
- import type { ArrayOrNested, AvatarProps, ComponentAttrs, DynamicSlots, EmitsToProps, KbdProps, LinkProps, MergeTypes, NestedItem } from '../types'
1
+ <script>
6
2
 
7
- export interface DropdownMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'custom' | 'underline'> {
8
- icon?: string
9
- avatar?: AvatarProps
10
- content?: Omit<DropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<DropdownMenuContentEmits>>
11
- kbds?: Array<string | KbdProps['value']>
12
- /**
13
- * The item type.
14
- * @default 'link'
15
- */
16
- type?: 'label' | 'separator' | 'link' | 'checkbox'
17
- slot?: string
18
- loading?: boolean
19
- disabled?: boolean
20
- checked?: boolean
21
- open?: boolean
22
- defaultOpen?: boolean
23
- children?: ArrayOrNested<DropdownMenuItem>
24
- onSelect?: (e: Event) => void
25
- onUpdateChecked?: (checked: boolean) => void
26
- [key: string]: any
27
- }
28
-
29
- type SlotProps<T extends DropdownMenuItem> = (props: { item: T, active?: boolean, index: number }) => any
30
-
31
- export type DropdownMenuSlots<
32
- T extends ArrayOrNested<DropdownMenuItem> = ArrayOrNested<DropdownMenuItem>,
33
- I extends NestedItem<T> = NestedItem<T>,
34
- > = {
35
- 'default'?: (props: { open: boolean }) => any
36
- 'item'?: SlotProps<I>
37
- 'item-leading'?: SlotProps<I>
38
- 'item-label'?: SlotProps<I>
39
- 'item-trailing'?: SlotProps<I>
40
- } & DynamicSlots<MergeTypes<I>, 'leading' | 'label' | 'trailing', SlotProps<I>>
41
-
42
- export interface DropdownMenuEmits extends DropdownMenuRootEmits {}
43
-
44
- type DropdownMenuVariants = VariantProps<typeof dropdownMenu>
45
-
46
- export interface DropdownMenuProps<
47
- T extends ArrayOrNested<DropdownMenuItem> = ArrayOrNested<DropdownMenuItem>,
48
- > extends ComponentAttrs<typeof dropdownMenu>, Omit<DropdownMenuRootProps, 'dir'> {
49
- /** @default "md" */
50
- size?: DropdownMenuVariants['size']
51
- items?: T
52
- /**
53
- * The icon displayed when an item is checked.
54
- * @default app.icons.check
55
- */
56
- checkedIcon?: string
57
- /**
58
- * The icon displayed when an item is loading.
59
- * @default app.icons.loading
60
- */
61
- loadingIcon?: string
62
- /**
63
- * The icon displayed when the item is an external link.
64
- * Set to `false` to hide the external icon.
65
- * @default app.icons.external
66
- */
67
- externalIcon?: boolean | string
68
- /**
69
- * The content of the menu.
70
- * @default { side: 'bottom', sideOffset: 8, collisionPadding: 8 }
71
- */
72
- content?: Omit<DropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<DropdownMenuContentEmits>>
73
- /**
74
- * Display an arrow alongside the menu.
75
- * @default false
76
- */
77
- arrow?: boolean | Omit<DropdownMenuArrowProps, 'as' | 'asChild'>
78
- /**
79
- * Render the menu in a portal.
80
- * @default true
81
- */
82
- portal?: boolean
83
- /**
84
- * The key used to get the label from the item.
85
- * @default "label"
86
- */
87
- labelKey?: keyof NestedItem<T>
88
- disabled?: boolean
89
- }
90
3
  </script>
91
4
 
92
- <script setup lang="ts" generic="T extends ArrayOrNested<DropdownMenuItem>">
93
- import { reactivePick } from '@vueuse/core'
94
- import { DropdownMenuArrow, DropdownMenuRoot, DropdownMenuTrigger, useForwardPropsEmits } from 'reka-ui'
95
- import { computed, toRef } from 'vue'
96
- import { useTheme } from '../composables/useTheme'
97
- import { omit } from '../utils'
98
- import DropdownMenuContent from './DropdownMenuContent.vue'
99
-
100
- const props = withDefaults(defineProps<DropdownMenuProps<T>>(), {
101
- portal: true,
102
- modal: true,
103
- externalIcon: true,
104
- labelKey: 'label',
105
- })
106
- const emit = defineEmits<DropdownMenuEmits>()
107
- const slots = defineSlots<DropdownMenuSlots<T>>()
108
-
109
- const rootProps = useForwardPropsEmits(reactivePick(props, 'defaultOpen', 'open', 'modal'), emit)
110
- const contentProps = toRef(() => ({ side: 'bottom', sideOffset: 8, collisionPadding: 8, ...props.content }) as DropdownMenuContentProps)
111
- const arrowProps = toRef(() => props.arrow as DropdownMenuArrowProps)
112
- const proxySlots = omit(slots, ['default'])
113
-
114
- const { generateStyle } = useTheme()
115
- const style = computed(() => generateStyle('dropdownMenu', props))
5
+ <script setup>
6
+ import { reactivePick } from "@vueuse/core";
7
+ import { DropdownMenuArrow, DropdownMenuRoot, DropdownMenuTrigger, useForwardPropsEmits } from "reka-ui";
8
+ import { computed, toRef } from "vue";
9
+ import { useTheme } from "../composables/useTheme";
10
+ import { omit } from "../utils";
11
+ import DropdownMenuContent from "./DropdownMenuContent.vue";
12
+ const props = defineProps({
13
+ size: { type: null, required: false },
14
+ items: { type: null, required: false },
15
+ checkedIcon: { type: String, required: false },
16
+ loadingIcon: { type: String, required: false },
17
+ externalIcon: { type: [Boolean, String], required: false, default: true },
18
+ content: { type: Object, required: false },
19
+ arrow: { type: [Boolean, Object], required: false },
20
+ portal: { type: Boolean, required: false, default: true },
21
+ labelKey: { type: null, required: false, default: "label" },
22
+ disabled: { type: Boolean, required: false },
23
+ class: { type: null, required: false },
24
+ ui: { type: null, required: false },
25
+ defaultOpen: { type: Boolean, required: false },
26
+ open: { type: Boolean, required: false },
27
+ modal: { type: Boolean, required: false, default: true }
28
+ });
29
+ const emit = defineEmits(["update:open"]);
30
+ const slots = defineSlots();
31
+ const rootProps = useForwardPropsEmits(reactivePick(props, "defaultOpen", "open", "modal"), emit);
32
+ const contentProps = toRef(() => ({ side: "bottom", sideOffset: 8, collisionPadding: 8, ...props.content }));
33
+ const arrowProps = toRef(() => props.arrow);
34
+ const proxySlots = omit(slots, ["default"]);
35
+ const { generateStyle } = useTheme();
36
+ const style = computed(() => generateStyle("dropdownMenu", props));
116
37
  </script>
117
38
 
118
39
  <template>
@@ -123,21 +44,22 @@ const style = computed(() => generateStyle('dropdownMenu', props))
123
44
 
124
45
  <DropdownMenuContent
125
46
  :class="style.content({ class: [!slots.default && props.class, props.ui?.content] })"
47
+ data-part="content"
126
48
  :ui="props.ui"
127
49
  v-bind="contentProps"
128
50
  :size="props.size"
129
51
  :items="props.items"
130
52
  :portal="props.portal"
131
- :label-key="(props.labelKey as keyof NestedItem<T>)"
53
+ :label-key="props.labelKey"
132
54
  :checked-icon="props.checkedIcon"
133
55
  :loading-icon="props.loadingIcon"
134
56
  :external-icon="props.externalIcon"
135
57
  >
136
58
  <template v-for="(_, name) in proxySlots" #[name]="slotProps">
137
- <slot :name="(name as keyof DropdownMenuSlots<T>)" v-bind="slotProps"></slot>
59
+ <slot :name="name" v-bind="slotProps"></slot>
138
60
  </template>
139
61
 
140
- <DropdownMenuArrow v-if="props.arrow" v-bind="arrowProps" :class="style.arrow({ class: props.ui?.arrow })" />
62
+ <DropdownMenuArrow v-if="props.arrow" v-bind="arrowProps" :class="style.arrow({ class: props.ui?.arrow })" data-part="arrow" />
141
63
  </DropdownMenuContent>
142
64
  </DropdownMenuRoot>
143
65
  </template>
@@ -0,0 +1,99 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
2
+ import type { DropdownMenuArrowProps, DropdownMenuContentEmits, DropdownMenuContentProps, DropdownMenuRootEmits, DropdownMenuRootProps } from 'reka-ui';
3
+ import type { dropdownMenu } from '../theme/index.js';
4
+ import type { ArrayOrNested, AvatarProps, ComponentAttrs, DynamicSlots, EmitsToProps, KbdProps, LinkProps, MergeTypes, NestedItem } from '../types/index.js';
5
+ export interface DropdownMenuItem extends Omit<LinkProps, 'type' | 'raw' | 'custom' | 'underline'> {
6
+ icon?: string;
7
+ avatar?: AvatarProps;
8
+ content?: Omit<DropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<DropdownMenuContentEmits>>;
9
+ kbds?: Array<string | KbdProps['value']>;
10
+ /**
11
+ * The item type.
12
+ * @default 'link'
13
+ */
14
+ type?: 'label' | 'separator' | 'link' | 'checkbox';
15
+ slot?: string;
16
+ loading?: boolean;
17
+ disabled?: boolean;
18
+ checked?: boolean;
19
+ open?: boolean;
20
+ defaultOpen?: boolean;
21
+ children?: ArrayOrNested<DropdownMenuItem>;
22
+ onSelect?: (e: Event) => void;
23
+ onUpdateChecked?: (checked: boolean) => void;
24
+ [key: string]: any;
25
+ }
26
+ type SlotProps<T extends DropdownMenuItem> = (props: {
27
+ item: T;
28
+ active?: boolean;
29
+ index: number;
30
+ }) => any;
31
+ export type DropdownMenuSlots<T extends ArrayOrNested<DropdownMenuItem> = ArrayOrNested<DropdownMenuItem>, I extends NestedItem<T> = NestedItem<T>> = {
32
+ 'default'?: (props: {
33
+ open: boolean;
34
+ }) => any;
35
+ 'item'?: SlotProps<I>;
36
+ 'item-leading'?: SlotProps<I>;
37
+ 'item-label'?: SlotProps<I>;
38
+ 'item-trailing'?: SlotProps<I>;
39
+ } & DynamicSlots<MergeTypes<I>, 'leading' | 'label' | 'trailing', SlotProps<I>>;
40
+ export interface DropdownMenuEmits extends DropdownMenuRootEmits {
41
+ }
42
+ type DropdownMenuVariants = VariantProps<typeof dropdownMenu>;
43
+ export interface DropdownMenuProps<T extends ArrayOrNested<DropdownMenuItem> = ArrayOrNested<DropdownMenuItem>> extends ComponentAttrs<typeof dropdownMenu>, Omit<DropdownMenuRootProps, 'dir'> {
44
+ /** @default "md" */
45
+ size?: DropdownMenuVariants['size'];
46
+ items?: T;
47
+ /**
48
+ * The icon displayed when an item is checked.
49
+ * @default app.icons.check
50
+ */
51
+ checkedIcon?: string;
52
+ /**
53
+ * The icon displayed when an item is loading.
54
+ * @default app.icons.loading
55
+ */
56
+ loadingIcon?: string;
57
+ /**
58
+ * The icon displayed when the item is an external link.
59
+ * Set to `false` to hide the external icon.
60
+ * @default app.icons.external
61
+ */
62
+ externalIcon?: boolean | string;
63
+ /**
64
+ * The content of the menu.
65
+ * @default { side: 'bottom', sideOffset: 8, collisionPadding: 8 }
66
+ */
67
+ content?: Omit<DropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<DropdownMenuContentEmits>>;
68
+ /**
69
+ * Display an arrow alongside the menu.
70
+ * @default false
71
+ */
72
+ arrow?: boolean | Omit<DropdownMenuArrowProps, 'as' | 'asChild'>;
73
+ /**
74
+ * Render the menu in a portal.
75
+ * @default true
76
+ */
77
+ portal?: boolean;
78
+ /**
79
+ * The key used to get the label from the item.
80
+ * @default "label"
81
+ */
82
+ labelKey?: keyof NestedItem<T>;
83
+ disabled?: boolean;
84
+ }
85
+ declare const _default: <T extends ArrayOrNested<DropdownMenuItem>>(__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<{
86
+ props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
87
+ readonly "onUpdate:open"?: ((payload: boolean) => any) | undefined;
88
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onUpdate:open"> & DropdownMenuProps<T> & Partial<{}>> & import("vue").PublicProps;
89
+ expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
90
+ attrs: any;
91
+ slots: DropdownMenuSlots<T, NestedItem<T>>;
92
+ emit: (evt: "update:open", payload: boolean) => void;
93
+ }>) => import("vue").VNode & {
94
+ __ctx?: Awaited<typeof __VLS_setup>;
95
+ };
96
+ export default _default;
97
+ type __VLS_PrettifyLocal<T> = {
98
+ [K in keyof T]: T[K];
99
+ } & {};
@@ -1,104 +1,106 @@
1
- <script lang="ts">
2
- import type { VariantProps } from '@byyuurin/ui-kit'
3
- import type { DropdownMenuContentEmits as RekaDropdownMenuContentEmits, DropdownMenuContentProps as RekaDropdownMenuContentProps } from 'reka-ui'
4
- import type { dropdownMenu } from '../theme'
5
- import type { ArrayOrNested, ComponentAttrs, DropdownMenuItem, DropdownMenuSlots, NestedItem } from '../types'
1
+ <script>
6
2
 
7
- type ExtractItem<T extends ArrayOrNested<any>> = Extract<NestedItem<T>, { slot: string }>
8
-
9
- export type DropdownMenuContentSlots<T extends ArrayOrNested<DropdownMenuItem>> = Omit<DropdownMenuSlots<T>, 'default'> & {
10
- default?: any
11
- }
12
-
13
- export interface DropdownMenuContentEmits extends RekaDropdownMenuContentEmits {}
14
-
15
- type DropdownMenuVariants = VariantProps<typeof dropdownMenu>
16
-
17
- export interface DropdownMenuContentProps<T extends ArrayOrNested<DropdownMenuItem>> extends ComponentAttrs<typeof dropdownMenu>, Omit<RekaDropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'> {
18
- size?: DropdownMenuVariants['size']
19
- items?: T
20
- portal?: boolean
21
- sub?: boolean
22
- labelKey: keyof NestedItem<T>
23
- checkedIcon?: string
24
- loadingIcon?: string
25
- externalIcon?: boolean | string
26
- }
27
3
  </script>
28
4
 
29
- <script setup lang="ts" generic="T extends ArrayOrNested<DropdownMenuItem>">
30
- import { createReusableTemplate, reactiveOmit } from '@vueuse/core'
31
- import { useForwardPropsEmits } from 'reka-ui'
32
- import { DropdownMenu } from 'reka-ui/namespaced'
33
- import { computed } from 'vue'
34
- import { useTheme } from '../composables/useTheme'
35
- import { get, isArrayOfArray, omit } from '../utils'
36
- import { pickLinkProps } from '../utils/link'
37
- import Avatar from './Avatar.vue'
38
- // eslint-disable-next-line import/no-self-import
39
- import DropdownMenuContent from './DropdownMenuContent.vue'
40
- import Kbd from './Kbd.vue'
41
- import Link from './Link.vue'
42
- import LinkBase from './LinkBase.vue'
43
-
44
- const props = defineProps<DropdownMenuContentProps<T>>()
45
- const emit = defineEmits<DropdownMenuContentEmits>()
46
- const slots = defineSlots<DropdownMenuContentSlots<T>>()
47
-
48
- const contentProps = useForwardPropsEmits(reactiveOmit(props, 'sub', 'items', 'portal', 'labelKey', 'checkedIcon', 'loadingIcon', 'externalIcon', 'class', 'ui'), emit)
49
- // @ts-expect-error pass check
50
- const proxySlots = omit(slots, ['default']) as Record<string, DropdownMenuContentSlots<T>[string]>
51
-
52
- const [DefineItemTemplate, ReuseItemTemplate] = createReusableTemplate<{ item: DropdownMenuItem, active?: boolean, index: number }>()
53
-
5
+ <script setup>
6
+ import { createReusableTemplate, reactiveOmit } from "@vueuse/core";
7
+ import { useForwardPropsEmits } from "reka-ui";
8
+ import { DropdownMenu } from "reka-ui/namespaced";
9
+ import { computed } from "vue";
10
+ import { useTheme } from "../composables/useTheme";
11
+ import { get, isArrayOfArray, omit } from "../utils";
12
+ import { pickLinkProps } from "../utils/link";
13
+ import Avatar from "./Avatar.vue";
14
+ import DropdownMenuContent from "./DropdownMenuContent.vue";
15
+ import Kbd from "./Kbd.vue";
16
+ import Link from "./Link.vue";
17
+ import LinkBase from "./LinkBase.vue";
18
+ defineOptions({
19
+ inheritAttrs: false
20
+ });
21
+ const props = defineProps({
22
+ size: { type: null, required: false },
23
+ items: { type: null, required: false },
24
+ portal: { type: Boolean, required: false },
25
+ sub: { type: Boolean, required: false },
26
+ labelKey: { type: null, required: true },
27
+ checkedIcon: { type: String, required: false },
28
+ loadingIcon: { type: String, required: false },
29
+ externalIcon: { type: [Boolean, String], required: false },
30
+ class: { type: null, required: false },
31
+ ui: { type: null, required: false },
32
+ loop: { type: Boolean, required: false },
33
+ side: { type: null, required: false },
34
+ sideOffset: { type: Number, required: false },
35
+ align: { type: null, required: false },
36
+ alignOffset: { type: Number, required: false },
37
+ avoidCollisions: { type: Boolean, required: false },
38
+ collisionBoundary: { type: null, required: false },
39
+ collisionPadding: { type: [Number, Object], required: false },
40
+ arrowPadding: { type: Number, required: false },
41
+ sticky: { type: String, required: false },
42
+ hideWhenDetached: { type: Boolean, required: false },
43
+ positionStrategy: { type: String, required: false },
44
+ updatePositionStrategy: { type: String, required: false },
45
+ disableUpdateOnLayoutShift: { type: Boolean, required: false },
46
+ prioritizePosition: { type: Boolean, required: false },
47
+ reference: { type: null, required: false }
48
+ });
49
+ const emit = defineEmits(["escapeKeyDown", "pointerDownOutside", "focusOutside", "interactOutside", "closeAutoFocus"]);
50
+ const slots = defineSlots();
51
+ const contentProps = useForwardPropsEmits(reactiveOmit(props, "sub", "items", "portal", "labelKey", "checkedIcon", "loadingIcon", "externalIcon", "class", "ui"), emit);
52
+ const proxySlots = omit(slots, ["default"]);
53
+ const [DefineItemTemplate, ReuseItemTemplate] = createReusableTemplate();
54
54
  const groups = computed(
55
- () => props.items?.length
56
- ? isArrayOfArray(props.items) ? props.items : [props.items]
57
- : [],
58
- )
59
-
60
- const { theme, generateStyle } = useTheme()
61
- const style = computed(() => generateStyle('dropdownMenu', props))
55
+ () => props.items?.length ? isArrayOfArray(props.items) ? props.items : [props.items] : []
56
+ );
57
+ const { theme, generateStyle } = useTheme();
58
+ const style = computed(() => generateStyle("dropdownMenu", props));
62
59
  </script>
63
60
 
64
61
  <template>
65
62
  <DefineItemTemplate v-slot="{ item, active, index }">
66
- <slot :name="((item.slot || 'item') as keyof DropdownMenuContentSlots<T>)" :item="(item as ExtractItem<T>)" :index="index">
67
- <slot :name="(`${item.slot || 'item'}-leading` as keyof DropdownMenuContentSlots<T>)" :item="(item as ExtractItem<T>)" :active="active" :index="index">
63
+ <slot :name="item.slot || 'item'" :item="item" :index="index">
64
+ <slot :name="`${item.slot || 'item'}-leading`" :item="item" :active="active" :index="index">
68
65
  <span
69
66
  v-if="item.loading"
70
67
  :class="style.itemLeadingIcon({ class: [loadingIcon || theme.app.icons.loading, props.ui?.itemLeadingIcon], loading: true })"
68
+ data-part="item-leading-icon"
71
69
  ></span>
72
70
  <span
73
71
  v-else-if="item.icon"
74
72
  :class="style.itemLeadingIcon({ class: [item.icon, props.ui?.itemLeadingIcon], active })"
73
+ data-part="item-leading-icon"
75
74
  ></span>
76
75
  <Avatar
77
76
  v-else-if="item.avatar"
78
77
  v-bind="item.avatar"
79
78
  :size="item.avatar.size || props.size"
80
79
  :class="style.itemLeadingAvatar({ class: props.ui?.itemLeadingAvatar, active })"
80
+ data-part="item-leading-avatar"
81
81
  />
82
82
  </slot>
83
83
 
84
84
  <span
85
- v-if="get(item, props.labelKey as string) || !!slots[(`${item.slot || 'item'}-label` as keyof DropdownMenuContentSlots<T>)]"
85
+ v-if="get(item, props.labelKey) || !!slots[`${item.slot || 'item'}-label`]"
86
86
  :class="style.itemLabel({ class: props.ui?.itemLabel, active })"
87
+ data-part="item-label"
87
88
  >
88
- <slot :name="(`${item.slot || 'item'}-label` as keyof DropdownMenuContentSlots<T>)" :item="(item as ExtractItem<T>)" :active="active" :index="index">
89
- {{ get(item, props.labelKey as string) }}
89
+ <slot :name="`${item.slot || 'item'}-label`" :item="item" :active="active" :index="index">
90
+ {{ get(item, props.labelKey) }}
90
91
  </slot>
91
92
 
92
93
  <span
93
94
  v-if="item.target === '_blank' && externalIcon !== false"
94
95
  :class="style.itemLabelExternalIcon({ class: [typeof externalIcon === 'string' ? externalIcon : theme.app.icons.external, props.ui?.itemLabelExternalIcon], active })"
96
+ data-part="item-label-external-icon"
95
97
  ></span>
96
98
  </span>
97
99
 
98
- <span :class="style.itemTrailing({ class: props.ui?.itemTrailing })">
99
- <slot :name="(`${item.slot || 'item'}-trailing` as keyof DropdownMenuContentSlots<T>)" :item="(item as ExtractItem<T>)" :active="active" :index="index">
100
- <span v-if="item.children?.length" :class="style.itemTrailingIcon({ class: [theme.app.icons.chevronRight, props.ui?.itemTrailingIcon], active })"></span>
101
- <span v-else-if="item.kbds?.length" :class="style.itemTrailingKbds({ class: props.ui?.itemTrailingKbds })">
100
+ <span :class="style.itemTrailing({ class: props.ui?.itemTrailing })" data-part="item-trailing">
101
+ <slot :name="`${item.slot || 'item'}-trailing`" :item="item" :active="active" :index="index">
102
+ <span v-if="item.children?.length" :class="style.itemTrailingIcon({ class: [theme.app.icons.chevronRight, props.ui?.itemTrailingIcon], active })" data-part="item-trailing-icon"></span>
103
+ <span v-else-if="item.kbds?.length" :class="style.itemTrailingKbds({ class: props.ui?.itemTrailingKbds })" data-part="item-trailing-kbds">
102
104
  <Kbd
103
105
  v-for="(kbd, kbdIndex) in item.kbds"
104
106
  :key="kbdIndex"
@@ -109,27 +111,28 @@ const style = computed(() => generateStyle('dropdownMenu', props))
109
111
  </slot>
110
112
 
111
113
  <DropdownMenu.ItemIndicator as-child>
112
- <span :class="style.itemTrailingIcon({ class: [checkedIcon || theme.app.icons.check, props.ui?.itemTrailingIcon] })"></span>
114
+ <span :class="style.itemTrailingIcon({ class: [checkedIcon || theme.app.icons.check, props.ui?.itemTrailingIcon] })" data-part="item-trailing-icon"></span>
113
115
  </DropdownMenu.ItemIndicator>
114
116
  </span>
115
117
  </slot>
116
118
  </DefineItemTemplate>
117
119
 
118
120
  <DropdownMenu.Portal :disabled="!portal">
119
- <component :is="sub ? DropdownMenu.SubContent : DropdownMenu.Content" :class="props.class" v-bind="contentProps">
120
- <DropdownMenu.Group v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" :class="style.group({ class: props.ui?.group })">
121
+ <component :is="sub ? DropdownMenu.SubContent : DropdownMenu.Content" :class="props.class" :data-part="$attrs['data-part']" v-bind="contentProps">
122
+ <DropdownMenu.Group v-for="(group, groupIndex) in groups" :key="`group-${groupIndex}`" :class="style.group({ class: props.ui?.group })" data-part="group">
121
123
  <template v-for="(item, index) in group" :key="`group-${groupIndex}-${index}`">
122
- <DropdownMenu.Label v-if="item.type === 'label'" :class="style.label({ class: props.ui?.label })">
124
+ <DropdownMenu.Label v-if="item.type === 'label'" :class="style.label({ class: props.ui?.label })" data-part="label">
123
125
  <ReuseItemTemplate :item="item" :index="index" />
124
126
  </DropdownMenu.Label>
125
- <DropdownMenu.Separator v-else-if="item.type === 'separator'" :class="style.separator({ class: props.ui?.separator })" />
127
+ <DropdownMenu.Separator v-else-if="item.type === 'separator'" :class="style.separator({ class: props.ui?.separator })" data-part="separator" />
126
128
  <DropdownMenu.Sub v-else-if="item?.children?.length" :open="item.open" :default-open="item.defaultOpen">
127
129
  <DropdownMenu.SubTrigger
128
130
  as="button"
129
131
  type="button"
130
132
  :disabled="item.disabled"
131
- :text-value="get(item, props.labelKey as string)"
133
+ :text-value="get(item, props.labelKey)"
132
134
  :class="style.item({ class: props.ui?.item })"
135
+ data-part="item"
133
136
  >
134
137
  <ReuseItemTemplate :item="item" :index="index" />
135
138
  </DropdownMenu.SubTrigger>
@@ -151,7 +154,7 @@ const style = computed(() => generateStyle('dropdownMenu', props))
151
154
  v-bind="item.content"
152
155
  >
153
156
  <template v-for="(_, name) in proxySlots" #[name]="slotProps">
154
- <slot :name="(name as keyof DropdownMenuContentSlots<T>)" v-bind="slotProps"></slot>
157
+ <slot :name="name" v-bind="slotProps"></slot>
155
158
  </template>
156
159
  </DropdownMenuContent>
157
160
  </DropdownMenu.Sub>
@@ -159,8 +162,9 @@ const style = computed(() => generateStyle('dropdownMenu', props))
159
162
  v-else-if="item.type === 'checkbox'"
160
163
  :model-value="item.checked"
161
164
  :disabled="item.disabled"
162
- :text-value="get(item, props.labelKey as string)"
165
+ :text-value="get(item, props.labelKey)"
163
166
  :class="style.item({ class: [props.ui?.item, item.class] })"
167
+ data-part="item"
164
168
  @update:model-value="item.onUpdateChecked"
165
169
  @select="item.onSelect"
166
170
  >
@@ -170,11 +174,11 @@ const style = computed(() => generateStyle('dropdownMenu', props))
170
174
  v-else
171
175
  as-child
172
176
  :disabled="item.disabled"
173
- :text-value="get(item, props.labelKey as string)"
177
+ :text-value="get(item, props.labelKey)"
174
178
  @select="item.onSelect"
175
179
  >
176
- <Link v-slot="{ active, ...slotProps }" v-bind="pickLinkProps(item as Omit<DropdownMenuItem, 'type'>)" custom>
177
- <LinkBase v-bind="slotProps" :class="style.item({ class: [props.ui?.item, item.class], active })">
180
+ <Link v-slot="{ active, ...slotProps }" v-bind="pickLinkProps(item)" custom>
181
+ <LinkBase v-bind="slotProps" :class="style.item({ class: [props.ui?.item, item.class], active })" data-part="item">
178
182
  <ReuseItemTemplate :item="item" :active="active" :index="index" />
179
183
  </LinkBase>
180
184
  </Link>
@@ -0,0 +1,39 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
2
+ import type { DropdownMenuContentEmits as RekaDropdownMenuContentEmits, DropdownMenuContentProps as RekaDropdownMenuContentProps } from 'reka-ui';
3
+ import type { dropdownMenu } from '../theme/index.js';
4
+ import type { ArrayOrNested, ComponentAttrs, DropdownMenuItem, DropdownMenuSlots, NestedItem } from '../types/index.js';
5
+ export type DropdownMenuContentSlots<T extends ArrayOrNested<DropdownMenuItem>> = Omit<DropdownMenuSlots<T>, 'default'> & {
6
+ default?: any;
7
+ };
8
+ export interface DropdownMenuContentEmits extends RekaDropdownMenuContentEmits {
9
+ }
10
+ type DropdownMenuVariants = VariantProps<typeof dropdownMenu>;
11
+ export interface DropdownMenuContentProps<T extends ArrayOrNested<DropdownMenuItem>> extends ComponentAttrs<typeof dropdownMenu>, Omit<RekaDropdownMenuContentProps, 'as' | 'asChild' | 'forceMount'> {
12
+ size?: DropdownMenuVariants['size'];
13
+ items?: T;
14
+ portal?: boolean;
15
+ sub?: boolean;
16
+ labelKey: keyof NestedItem<T>;
17
+ checkedIcon?: string;
18
+ loadingIcon?: string;
19
+ externalIcon?: boolean | string;
20
+ }
21
+ declare const _default: <T extends ArrayOrNested<DropdownMenuItem>>(__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<{
22
+ props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
23
+ readonly onEscapeKeyDown?: ((event: KeyboardEvent) => any) | undefined;
24
+ readonly onPointerDownOutside?: ((event: import("reka-ui").PointerDownOutsideEvent) => any) | undefined;
25
+ readonly onFocusOutside?: ((event: import("reka-ui").FocusOutsideEvent) => any) | undefined;
26
+ readonly onInteractOutside?: ((event: import("reka-ui").PointerDownOutsideEvent | import("reka-ui").FocusOutsideEvent) => any) | undefined;
27
+ readonly onCloseAutoFocus?: ((event: Event) => any) | undefined;
28
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onEscapeKeyDown" | "onPointerDownOutside" | "onFocusOutside" | "onInteractOutside" | "onCloseAutoFocus"> & DropdownMenuContentProps<T> & Partial<{}>> & import("vue").PublicProps;
29
+ expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
30
+ attrs: any;
31
+ slots: DropdownMenuContentSlots<T>;
32
+ emit: ((evt: "escapeKeyDown", event: KeyboardEvent) => void) & ((evt: "pointerDownOutside", event: import("reka-ui").PointerDownOutsideEvent) => void) & ((evt: "focusOutside", event: import("reka-ui").FocusOutsideEvent) => void) & ((evt: "interactOutside", event: import("reka-ui").PointerDownOutsideEvent | import("reka-ui").FocusOutsideEvent) => void) & ((evt: "closeAutoFocus", event: Event) => void);
33
+ }>) => import("vue").VNode & {
34
+ __ctx?: Awaited<typeof __VLS_setup>;
35
+ };
36
+ export default _default;
37
+ type __VLS_PrettifyLocal<T> = {
38
+ [K in keyof T]: T[K];
39
+ } & {};