@byyuurin/ui 0.0.11 → 0.2.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.
- package/README.md +170 -58
- package/dist/module.d.mts +4 -13
- package/dist/module.json +4 -4
- package/dist/module.mjs +54 -20
- package/dist/runtime/components/Accordion.vue +28 -23
- package/dist/runtime/components/Accordion.vue.d.ts +51 -29
- package/dist/runtime/components/Alert.vue +47 -27
- package/dist/runtime/components/Alert.vue.d.ts +37 -25
- package/dist/runtime/components/App.vue +9 -8
- package/dist/runtime/components/App.vue.d.ts +22 -20
- package/dist/runtime/components/Avatar.vue +65 -21
- package/dist/runtime/components/Avatar.vue.d.ts +27 -13
- package/dist/runtime/components/AvatarGroup.vue +14 -10
- package/dist/runtime/components/AvatarGroup.vue.d.ts +12 -9
- package/dist/runtime/components/Badge.vue +64 -32
- package/dist/runtime/components/Badge.vue.d.ts +30 -29
- package/dist/runtime/components/Breadcrumb.vue +40 -22
- package/dist/runtime/components/Breadcrumb.vue.d.ts +48 -21
- package/dist/runtime/components/Button.vue +113 -52
- package/dist/runtime/components/Button.vue.d.ts +36 -20
- package/dist/runtime/components/Calendar.vue +50 -43
- package/dist/runtime/components/Calendar.vue.d.ts +58 -31
- package/dist/runtime/components/Card.vue +18 -14
- package/dist/runtime/components/Card.vue.d.ts +18 -14
- package/dist/runtime/components/Carousel.vue +99 -46
- package/dist/runtime/components/Carousel.vue.d.ts +46 -25
- package/dist/runtime/components/Checkbox.vue +60 -35
- package/dist/runtime/components/Checkbox.vue.d.ts +35 -28
- package/dist/runtime/components/CheckboxGroup.vue +131 -0
- package/dist/runtime/components/CheckboxGroup.vue.d.ts +89 -0
- package/dist/runtime/components/Chip.vue +35 -32
- package/dist/runtime/components/Chip.vue.d.ts +33 -15
- package/dist/runtime/components/Collapsible.vue +13 -9
- package/dist/runtime/components/Collapsible.vue.d.ts +16 -8
- package/dist/runtime/components/Drawer.vue +80 -70
- package/dist/runtime/components/Drawer.vue.d.ts +51 -28
- package/dist/runtime/components/DropdownMenu.vue +23 -16
- package/dist/runtime/components/DropdownMenu.vue.d.ts +77 -36
- package/dist/runtime/components/DropdownMenuContent.vue +136 -106
- package/dist/runtime/components/DropdownMenuContent.vue.d.ts +38 -26
- package/dist/runtime/components/FieldGroup.vue +33 -0
- package/dist/runtime/components/FieldGroup.vue.d.ts +33 -0
- package/dist/runtime/components/Form.vue +172 -88
- package/dist/runtime/components/Form.vue.d.ts +69 -44
- package/dist/runtime/components/FormField.vue +108 -0
- package/dist/runtime/components/FormField.vue.d.ts +63 -0
- package/dist/runtime/components/Icon.vue +20 -0
- package/dist/runtime/components/Icon.vue.d.ts +9 -0
- package/dist/runtime/components/Input.vue +84 -79
- package/dist/runtime/components/Input.vue.d.ts +55 -43
- package/dist/runtime/components/InputNumber.vue +66 -52
- package/dist/runtime/components/InputNumber.vue.d.ts +50 -109
- package/dist/runtime/components/InputTags.vue +155 -0
- package/dist/runtime/components/InputTags.vue.d.ts +85 -0
- package/dist/runtime/components/Kbd.vue +11 -5
- package/dist/runtime/components/Kbd.vue.d.ts +17 -11
- package/dist/runtime/components/Link.vue +54 -197
- package/dist/runtime/components/Link.vue.d.ts +17 -17
- package/dist/runtime/components/LinkBase.vue +11 -33
- package/dist/runtime/components/LinkBase.vue.d.ts +8 -3
- package/dist/runtime/components/Marquee.vue +38 -0
- package/dist/runtime/components/Marquee.vue.d.ts +54 -0
- package/dist/runtime/components/Modal.vue +53 -39
- package/dist/runtime/components/Modal.vue.d.ts +64 -34
- package/dist/runtime/components/NavigationMenu.vue +345 -0
- package/dist/runtime/components/NavigationMenu.vue.d.ts +216 -0
- package/dist/runtime/components/OverlayProvider.vue +3 -3
- package/dist/runtime/components/OverlayProvider.vue.d.ts +2 -1
- package/dist/runtime/components/Pagination.vue +39 -47
- package/dist/runtime/components/Pagination.vue.d.ts +54 -31
- package/dist/runtime/components/PinInput.vue +46 -32
- package/dist/runtime/components/PinInput.vue.d.ts +40 -21
- package/dist/runtime/components/Popover.vue +33 -19
- package/dist/runtime/components/Popover.vue.d.ts +57 -32
- package/dist/runtime/components/Progress.vue +31 -26
- package/dist/runtime/components/Progress.vue.d.ts +32 -23
- package/dist/runtime/components/RadioGroup.vue +75 -48
- package/dist/runtime/components/RadioGroup.vue.d.ts +58 -36
- package/dist/runtime/components/ScrollArea.vue +33 -31
- package/dist/runtime/components/ScrollArea.vue.d.ts +9 -5
- package/dist/runtime/components/Select.vue +166 -76
- package/dist/runtime/components/Select.vue.d.ts +206 -65
- package/dist/runtime/components/Separator.vue +42 -16
- package/dist/runtime/components/Separator.vue.d.ts +35 -14
- package/dist/runtime/components/Skeleton.vue +18 -6
- package/dist/runtime/components/Skeleton.vue.d.ts +4 -4
- package/dist/runtime/components/Slider.vue +42 -24
- package/dist/runtime/components/Slider.vue.d.ts +43 -27
- package/dist/runtime/components/Switch.vue +40 -31
- package/dist/runtime/components/Switch.vue.d.ts +36 -27
- package/dist/runtime/components/Table.vue +329 -79
- package/dist/runtime/components/Table.vue.d.ts +152 -66
- package/dist/runtime/components/Tabs.vue +70 -23
- package/dist/runtime/components/Tabs.vue.d.ts +61 -29
- package/dist/runtime/components/Textarea.vue +102 -54
- package/dist/runtime/components/Textarea.vue.d.ts +57 -41
- package/dist/runtime/components/Timeline.vue +102 -0
- package/dist/runtime/components/Timeline.vue.d.ts +74 -0
- package/dist/runtime/components/Toast.vue +84 -38
- package/dist/runtime/components/Toast.vue.d.ts +48 -27
- package/dist/runtime/components/ToastProvider.vue +31 -22
- package/dist/runtime/components/ToastProvider.vue.d.ts +30 -17
- package/dist/runtime/components/Tooltip.vue +33 -21
- package/dist/runtime/components/Tooltip.vue.d.ts +37 -15
- package/dist/runtime/composables/defineShortcuts.d.ts +16 -0
- package/dist/runtime/composables/defineShortcuts.js +129 -0
- package/dist/runtime/composables/useAvatarGroup.d.ts +8 -3
- package/dist/runtime/composables/useAvatarGroup.js +10 -3
- package/dist/runtime/composables/useComponentIcons.d.ts +9 -6
- package/dist/runtime/composables/useComponentIcons.js +4 -4
- package/dist/runtime/composables/useFieldGroup.d.ts +8 -0
- package/dist/runtime/composables/useFieldGroup.js +14 -0
- package/dist/runtime/composables/useFormField.d.ts +62 -0
- package/dist/runtime/composables/useFormField.js +99 -0
- package/dist/runtime/composables/useKbd.d.ts +3 -2
- package/dist/runtime/composables/useKbd.js +3 -2
- package/dist/runtime/composables/useLocale.d.ts +68 -5
- package/dist/runtime/composables/useLocale.js +11 -11
- package/dist/runtime/composables/useOverlay.d.ts +51 -15
- package/dist/runtime/composables/useOverlay.js +44 -30
- package/dist/runtime/composables/usePortal.d.ts +6 -0
- package/dist/runtime/composables/usePortal.js +17 -0
- package/dist/runtime/composables/useToast.d.ts +12 -5
- package/dist/runtime/composables/useToast.js +12 -7
- package/dist/runtime/locale/en.d.ts +30 -1
- package/dist/runtime/locale/en.js +2 -1
- package/dist/runtime/locale/index.d.ts +2 -2
- package/dist/runtime/locale/index.js +1 -1
- package/dist/runtime/locale/zh_tw.d.ts +31 -0
- package/dist/runtime/locale/{zh-tw.js → zh_tw.js} +2 -1
- package/dist/runtime/plugins/colors.d.ts +2 -0
- package/dist/runtime/plugins/colors.js +50 -0
- package/dist/runtime/types/app.config.d.ts +6 -0
- package/dist/runtime/types/form.d.ts +58 -17
- package/dist/runtime/types/form.js +11 -0
- package/dist/runtime/types/index.d.ts +56 -8
- package/dist/runtime/types/index.js +49 -1
- package/dist/runtime/types/input.d.ts +8 -0
- package/dist/runtime/types/locale.d.ts +5 -0
- package/dist/runtime/types/style.d.ts +33 -0
- package/dist/runtime/types/style.js +0 -0
- package/dist/runtime/types/unocss.d.ts +4 -0
- package/dist/runtime/types/utils.d.ts +41 -37
- package/dist/runtime/utils/form.d.ts +5 -1
- package/dist/runtime/utils/form.js +49 -0
- package/dist/runtime/utils/index.d.ts +10 -13
- package/dist/runtime/utils/index.js +41 -48
- package/dist/runtime/utils/link.d.ts +3 -2
- package/dist/runtime/utils/link.js +16 -2
- package/dist/runtime/utils/locale.d.ts +5 -0
- package/dist/runtime/utils/locale.js +10 -0
- package/dist/runtime/utils/style.d.ts +94 -0
- package/dist/runtime/utils/style.js +37 -0
- package/dist/runtime/vue/components/Icon.vue +15 -0
- package/dist/runtime/vue/components/Icon.vue.d.ts +7 -0
- package/dist/runtime/vue/components/Link.vue +163 -0
- package/dist/runtime/vue/components/Link.vue.d.ts +95 -0
- package/dist/runtime/vue/composables/useAppConfig.d.ts +1 -0
- package/dist/runtime/vue/composables/useAppConfig.js +4 -0
- package/dist/runtime/vue/plugins/color-mode.d.ts +4 -0
- package/dist/runtime/vue/plugins/color-mode.js +6 -0
- package/dist/runtime/vue/plugins/head.d.ts +4 -0
- package/dist/runtime/vue/plugins/head.js +9 -0
- package/dist/runtime/vue/stubs.d.ts +16 -1
- package/dist/runtime/vue/stubs.js +32 -1
- package/dist/setup.d.mts +13 -0
- package/dist/setup.mjs +12 -0
- package/dist/shared/ui.CzIlLITK.mjs +51 -0
- package/dist/shared/ui.DLOxhmP0.mjs +4242 -0
- package/dist/shared/ui.DpbffTXs.d.mts +84 -0
- package/dist/shared/ui.IulR-OYx.d.mts +64 -0
- package/dist/types.d.mts +3 -1
- package/dist/unocss.d.mts +12 -52
- package/dist/unocss.mjs +144 -254
- package/dist/unplugin.d.mts +13 -26
- package/dist/unplugin.mjs +193 -18
- package/dist/vite.d.mts +10 -1
- package/dist/vite.mjs +12 -3
- package/package.json +154 -87
- package/vue-plugin.d.ts +5 -0
- package/dist/module.d.ts +0 -13
- package/dist/module.mjs.map +0 -1
- package/dist/runtime/app/injections.d.ts +0 -9331
- package/dist/runtime/app/injections.js +0 -61
- package/dist/runtime/components/ButtonGroup.vue +0 -26
- package/dist/runtime/components/ButtonGroup.vue.d.ts +0 -26
- package/dist/runtime/components/FormItem.vue +0 -90
- package/dist/runtime/components/FormItem.vue.d.ts +0 -60
- package/dist/runtime/composables/useButtonGroup.d.ts +0 -5
- package/dist/runtime/composables/useButtonGroup.js +0 -9
- package/dist/runtime/composables/useFormItem.d.ts +0 -27
- package/dist/runtime/composables/useFormItem.js +0 -64
- package/dist/runtime/composables/useTheme.d.ts +0 -9
- package/dist/runtime/composables/useTheme.js +0 -23
- package/dist/runtime/index.d.ts +0 -44
- package/dist/runtime/index.js +0 -44
- package/dist/runtime/locale/zh-tw.d.ts +0 -2
- package/dist/runtime/theme/accordion.d.ts +0 -50
- package/dist/runtime/theme/accordion.js +0 -28
- package/dist/runtime/theme/alert.d.ts +0 -119
- package/dist/runtime/theme/alert.js +0 -47
- package/dist/runtime/theme/app.d.ts +0 -19
- package/dist/runtime/theme/app.js +0 -19
- package/dist/runtime/theme/avatar-group.d.ts +0 -46
- package/dist/runtime/theme/avatar-group.js +0 -32
- package/dist/runtime/theme/avatar.d.ts +0 -50
- package/dist/runtime/theme/avatar.js +0 -34
- package/dist/runtime/theme/badge.d.ts +0 -76
- package/dist/runtime/theme/badge.js +0 -92
- package/dist/runtime/theme/breadcrumb.d.ts +0 -61
- package/dist/runtime/theme/breadcrumb.js +0 -44
- package/dist/runtime/theme/button-group.d.ts +0 -60
- package/dist/runtime/theme/button-group.js +0 -42
- package/dist/runtime/theme/button.d.ts +0 -184
- package/dist/runtime/theme/button.js +0 -164
- package/dist/runtime/theme/calendar.d.ts +0 -58
- package/dist/runtime/theme/calendar.js +0 -86
- package/dist/runtime/theme/card.d.ts +0 -56
- package/dist/runtime/theme/card.js +0 -37
- package/dist/runtime/theme/carousel.d.ts +0 -107
- package/dist/runtime/theme/carousel.js +0 -43
- package/dist/runtime/theme/checkbox.d.ts +0 -82
- package/dist/runtime/theme/checkbox.js +0 -54
- package/dist/runtime/theme/chip.d.ts +0 -61
- package/dist/runtime/theme/chip.js +0 -66
- package/dist/runtime/theme/collapsible.d.ts +0 -32
- package/dist/runtime/theme/collapsible.js +0 -10
- package/dist/runtime/theme/drawer.d.ts +0 -142
- package/dist/runtime/theme/drawer.js +0 -113
- package/dist/runtime/theme/dropdown-menu.d.ts +0 -65
- package/dist/runtime/theme/dropdown-menu.js +0 -83
- package/dist/runtime/theme/form-item.d.ts +0 -70
- package/dist/runtime/theme/form-item.js +0 -34
- package/dist/runtime/theme/form.d.ts +0 -2
- package/dist/runtime/theme/form.js +0 -7
- package/dist/runtime/theme/index.d.ts +0 -41
- package/dist/runtime/theme/index.js +0 -41
- package/dist/runtime/theme/input-number.d.ts +0 -115
- package/dist/runtime/theme/input-number.js +0 -95
- package/dist/runtime/theme/input.d.ts +0 -172
- package/dist/runtime/theme/input.js +0 -151
- package/dist/runtime/theme/kbd.d.ts +0 -33
- package/dist/runtime/theme/kbd.js +0 -26
- package/dist/runtime/theme/link.d.ts +0 -38
- package/dist/runtime/theme/link.js +0 -26
- package/dist/runtime/theme/modal.d.ts +0 -42
- package/dist/runtime/theme/modal.js +0 -55
- package/dist/runtime/theme/pagination.d.ts +0 -74
- package/dist/runtime/theme/pagination.js +0 -17
- package/dist/runtime/theme/pinInput.d.ts +0 -94
- package/dist/runtime/theme/pinInput.js +0 -111
- package/dist/runtime/theme/popover.d.ts +0 -32
- package/dist/runtime/theme/popover.js +0 -13
- package/dist/runtime/theme/progress.d.ts +0 -180
- package/dist/runtime/theme/progress.js +0 -95
- package/dist/runtime/theme/radio-group.d.ts +0 -104
- package/dist/runtime/theme/radio-group.js +0 -61
- package/dist/runtime/theme/scroll-area.d.ts +0 -67
- package/dist/runtime/theme/scroll-area.js +0 -33
- package/dist/runtime/theme/select.d.ts +0 -186
- package/dist/runtime/theme/select.js +0 -173
- package/dist/runtime/theme/separator.d.ts +0 -74
- package/dist/runtime/theme/separator.js +0 -53
- package/dist/runtime/theme/skeleton.d.ts +0 -2
- package/dist/runtime/theme/skeleton.js +0 -7
- package/dist/runtime/theme/slider.d.ts +0 -70
- package/dist/runtime/theme/slider.js +0 -52
- package/dist/runtime/theme/switch.d.ts +0 -116
- package/dist/runtime/theme/switch.js +0 -78
- package/dist/runtime/theme/table.d.ts +0 -86
- package/dist/runtime/theme/table.js +0 -36
- package/dist/runtime/theme/tabs.d.ts +0 -129
- package/dist/runtime/theme/tabs.js +0 -146
- package/dist/runtime/theme/textarea.d.ts +0 -90
- package/dist/runtime/theme/textarea.js +0 -116
- package/dist/runtime/theme/toast-provider.d.ts +0 -116
- package/dist/runtime/theme/toast-provider.js +0 -97
- package/dist/runtime/theme/toast.d.ts +0 -83
- package/dist/runtime/theme/toast.js +0 -35
- package/dist/runtime/theme/tooltip.d.ts +0 -38
- package/dist/runtime/theme/tooltip.js +0 -11
- package/dist/runtime/types/components.d.ts +0 -42
- package/dist/runtime/utils/extend-theme.d.ts +0 -9
- package/dist/runtime/utils/extend-theme.js +0 -27
- package/dist/runtime/utils/styler.d.ts +0 -4
- package/dist/runtime/utils/styler.js +0 -10
- package/dist/runtime/utils/translator.d.ts +0 -18
- package/dist/runtime/utils/translator.js +0 -8
- package/dist/shared/ui.D1BTWZFB.mjs +0 -5
- package/dist/shared/ui.D1BTWZFB.mjs.map +0 -1
- package/dist/unocss.d.ts +0 -52
- package/dist/unocss.mjs.map +0 -1
- package/dist/unplugin.d.ts +0 -26
- package/dist/unplugin.mjs.map +0 -1
- package/dist/vite.d.ts +0 -9
- package/dist/vite.mjs.map +0 -1
- /package/dist/runtime/types/{components.js → input.js} +0 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import type { MaybeArray, VariantProps } from '@byyuurin/ui-kit';
|
|
2
|
+
import type { AccordionRootProps, NavigationMenuContentEmits, NavigationMenuContentProps, NavigationMenuRootProps } from 'reka-ui';
|
|
3
|
+
import theme from '#build/ui/navigation-menu';
|
|
4
|
+
import type { AvatarProps, BadgeProps, ComponentBaseProps, ComponentStyler, ComponentUIProps, IconProps, LinkProps, PopoverProps, TooltipProps } from '../types';
|
|
5
|
+
import type { ArrayOrNested, DynamicSlots, EmitsToProps, GetItemKeys, MergeTypes, NestedItem, StaticSlot } from '../types/utils';
|
|
6
|
+
export interface NavigationMenuChildItem extends Omit<NavigationMenuItem, 'type' | 'ui'> {
|
|
7
|
+
/** Description is only used when `orientation` is `horizontal`. */
|
|
8
|
+
description?: string;
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
}
|
|
11
|
+
export interface NavigationMenuItem extends ComponentBaseProps, Omit<LinkProps, 'type' | 'raw' | 'custom'> {
|
|
12
|
+
label?: string;
|
|
13
|
+
icon?: IconProps['name'];
|
|
14
|
+
avatar?: AvatarProps;
|
|
15
|
+
/**
|
|
16
|
+
* Display a chip on the item.
|
|
17
|
+
* `{ size: 'xs', variant: 'outline' }`
|
|
18
|
+
*/
|
|
19
|
+
badge?: string | number | BadgeProps;
|
|
20
|
+
/**
|
|
21
|
+
* Display a tooltip on the item when the menu is collapsed with the label of the item.
|
|
22
|
+
*
|
|
23
|
+
* This has priority over the global `tooltip` prop.
|
|
24
|
+
*/
|
|
25
|
+
tooltip?: boolean | TooltipProps;
|
|
26
|
+
/**
|
|
27
|
+
* Display a popover on the item when the menu is collapsed with the children list.
|
|
28
|
+
*
|
|
29
|
+
* This has priority over the global `popover` prop.
|
|
30
|
+
*/
|
|
31
|
+
popover?: boolean | PopoverProps;
|
|
32
|
+
trailingIcon?: IconProps['name'];
|
|
33
|
+
/**
|
|
34
|
+
* The type of the item.
|
|
35
|
+
*
|
|
36
|
+
* The `label` type is only displayed in `vertical` orientation.
|
|
37
|
+
*
|
|
38
|
+
* The `trigger` type is used to force the item to be collapsible when its a link in `vertical` orientation.
|
|
39
|
+
* @default "link"
|
|
40
|
+
*/
|
|
41
|
+
type?: 'label' | 'trigger' | 'link';
|
|
42
|
+
slot?: string;
|
|
43
|
+
/**
|
|
44
|
+
* The value of the item. Avoid using `index` as the value to prevent conflicts in horizontal orientation with Reka UI.
|
|
45
|
+
* @default `item-${index}`
|
|
46
|
+
*/
|
|
47
|
+
value?: string;
|
|
48
|
+
children?: NavigationMenuChildItem[];
|
|
49
|
+
defaultOpen?: boolean;
|
|
50
|
+
open?: boolean;
|
|
51
|
+
onSelect?: (e: Event) => void;
|
|
52
|
+
ui?: Pick<ComponentUIProps<typeof theme>, 'item' | 'linkLeadingAvatarSize' | 'linkLeadingAvatar' | 'linkLeadingIcon' | 'linkLabel' | 'linkLabelExternalIcon' | 'linkTrailing' | 'linkTrailingBadgeSize' | 'linkTrailingBadge' | 'linkTrailingIcon' | 'label' | 'link' | 'content' | 'childList' | 'childLabel' | 'childItem' | 'childLink' | 'childLinkIcon' | 'childLinkWrapper' | 'childLinkLabel' | 'childLinkLabelExternalIcon' | 'childLinkDescription'>;
|
|
53
|
+
[key: string]: any;
|
|
54
|
+
}
|
|
55
|
+
type ThemeVariants = VariantProps<typeof theme>;
|
|
56
|
+
type SingleOrMultipleType = 'single' | 'multiple';
|
|
57
|
+
type Orientation = ThemeVariants['orientation'];
|
|
58
|
+
type NavigationMenuModelValue<K extends SingleOrMultipleType = SingleOrMultipleType, O extends Orientation = Orientation> = O extends 'horizontal' ? string : K extends 'single' ? string : K extends 'multiple' ? string[] : MaybeArray<string>;
|
|
59
|
+
export interface NavigationMenuProps<T extends ArrayOrNested<NavigationMenuItem> = ArrayOrNested<NavigationMenuItem>, K extends SingleOrMultipleType = SingleOrMultipleType, O extends Orientation = Orientation> extends ComponentBaseProps, Pick<NavigationMenuRootProps, 'delayDuration' | 'disableClickTrigger' | 'disableHoverTrigger' | 'skipDelayDuration' | 'disablePointerLeaveClose' | 'unmountOnHide'>, Pick<AccordionRootProps, 'disabled' | 'type' | 'collapsible'> {
|
|
60
|
+
/**
|
|
61
|
+
* The element or component this component should render as.
|
|
62
|
+
* @default "div"
|
|
63
|
+
*/
|
|
64
|
+
as?: NavigationMenuRootProps['as'];
|
|
65
|
+
/**
|
|
66
|
+
* Determines whether a "single" or "multiple" items can be selected at a time.
|
|
67
|
+
*
|
|
68
|
+
* Only works when `orientation` is `vertical`.
|
|
69
|
+
* @default "multiple"
|
|
70
|
+
*/
|
|
71
|
+
type?: K;
|
|
72
|
+
/**
|
|
73
|
+
* The controlled value of the active item(s).
|
|
74
|
+
* - In horizontal orientation: always `string`
|
|
75
|
+
* - In vertical orientation with `type="single"`: `string`
|
|
76
|
+
* - In vertical orientation with `type="multiple"`: `string[]`
|
|
77
|
+
*
|
|
78
|
+
* Use this when you need to control the state of the items. Can be binded with `v-model`
|
|
79
|
+
*/
|
|
80
|
+
modelValue?: NavigationMenuModelValue<K, O>;
|
|
81
|
+
/**
|
|
82
|
+
* The default active value of the item(s).
|
|
83
|
+
* - In horizontal orientation: always `string`
|
|
84
|
+
* - In vertical orientation with `type="single"`: `string`
|
|
85
|
+
* - In vertical orientation with `type="multiple"`: `string[]`
|
|
86
|
+
*
|
|
87
|
+
* Use when you do not need to control the state of the item(s).
|
|
88
|
+
*/
|
|
89
|
+
defaultValue?: NavigationMenuModelValue<K, O>;
|
|
90
|
+
/**
|
|
91
|
+
* The icon displayed to open the menu.
|
|
92
|
+
* @default app.icons.chevronDown
|
|
93
|
+
*/
|
|
94
|
+
trailingIcon?: IconProps['name'];
|
|
95
|
+
/**
|
|
96
|
+
* The icon displayed when the item is an external link.
|
|
97
|
+
* Set to `false` to hide the external icon.
|
|
98
|
+
* @default app.icons.external
|
|
99
|
+
*/
|
|
100
|
+
externalIcon?: boolean | IconProps['name'];
|
|
101
|
+
items?: T;
|
|
102
|
+
/** @default "primary" */
|
|
103
|
+
color?: ThemeVariants['color'];
|
|
104
|
+
/** @default "pill" */
|
|
105
|
+
variant?: ThemeVariants['variant'];
|
|
106
|
+
/**
|
|
107
|
+
* The orientation of the menu.
|
|
108
|
+
* @default "horizontal"
|
|
109
|
+
*/
|
|
110
|
+
orientation?: O;
|
|
111
|
+
/**
|
|
112
|
+
* Collapse the navigation menu to only show icons.
|
|
113
|
+
* Only works when `orientation` is `vertical`.
|
|
114
|
+
* @default false
|
|
115
|
+
*/
|
|
116
|
+
collapsed?: boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Display a tooltip on the items when the menu is collapsed with the label of the item.
|
|
119
|
+
* @default true
|
|
120
|
+
*/
|
|
121
|
+
tooltip?: boolean | TooltipProps;
|
|
122
|
+
/**
|
|
123
|
+
* Display a popover on the items when the menu is collapsed with the children list.
|
|
124
|
+
* @default true
|
|
125
|
+
*/
|
|
126
|
+
popover?: boolean | PopoverProps;
|
|
127
|
+
/** Display a line next to the active item. */
|
|
128
|
+
highlight?: boolean;
|
|
129
|
+
/** @default "primary" */
|
|
130
|
+
highlightColor?: ThemeVariants['color'];
|
|
131
|
+
/** The content of the menu. */
|
|
132
|
+
content?: Omit<NavigationMenuContentProps, 'as' | 'asChild' | 'forceMount'> & Partial<EmitsToProps<NavigationMenuContentEmits>>;
|
|
133
|
+
/**
|
|
134
|
+
* The orientation of the content.
|
|
135
|
+
* Only works when `orientation` is `horizontal`.
|
|
136
|
+
* @default "horizontal"
|
|
137
|
+
*/
|
|
138
|
+
contentOrientation?: ThemeVariants['contentOrientation'];
|
|
139
|
+
/**
|
|
140
|
+
* Display an arrow alongside the menu.
|
|
141
|
+
* @default false
|
|
142
|
+
*/
|
|
143
|
+
arrow?: boolean;
|
|
144
|
+
/**
|
|
145
|
+
* The key used to get the label from the item.
|
|
146
|
+
* @default "label"
|
|
147
|
+
*/
|
|
148
|
+
labelKey?: GetItemKeys<T>;
|
|
149
|
+
ui?: ComponentUIProps<typeof theme>;
|
|
150
|
+
}
|
|
151
|
+
export interface NavigationMenuEmits<K extends SingleOrMultipleType = SingleOrMultipleType, O extends Orientation = Orientation> {
|
|
152
|
+
/**
|
|
153
|
+
* Event handler called when the value changes.
|
|
154
|
+
* - In horizontal orientation: emits `string`
|
|
155
|
+
* - In vertical orientation with `type="single"`: emits `string | undefined`
|
|
156
|
+
* - In vertical orientation with `type="multiple"`: emits `string[] | undefined`
|
|
157
|
+
*/
|
|
158
|
+
'update:modelValue': [value: NavigationMenuModelValue<K, O> | undefined];
|
|
159
|
+
}
|
|
160
|
+
export type NavigationMenuSlots<A extends ArrayOrNested<NavigationMenuItem> = ArrayOrNested<NavigationMenuItem>, T extends NestedItem<A> = NestedItem<A>> = {
|
|
161
|
+
'item': StaticSlot<{
|
|
162
|
+
item: T;
|
|
163
|
+
index: number;
|
|
164
|
+
active: boolean;
|
|
165
|
+
ui: ComponentStyler<typeof theme>;
|
|
166
|
+
}>;
|
|
167
|
+
'item-leading': StaticSlot<{
|
|
168
|
+
item: T;
|
|
169
|
+
index: number;
|
|
170
|
+
active: boolean;
|
|
171
|
+
ui: ComponentStyler<typeof theme>;
|
|
172
|
+
}>;
|
|
173
|
+
'item-label': StaticSlot<{
|
|
174
|
+
item: T;
|
|
175
|
+
index: number;
|
|
176
|
+
active: boolean;
|
|
177
|
+
}>;
|
|
178
|
+
'item-trailing': StaticSlot<{
|
|
179
|
+
item: T;
|
|
180
|
+
index: number;
|
|
181
|
+
active: boolean;
|
|
182
|
+
ui: ComponentStyler<typeof theme>;
|
|
183
|
+
}>;
|
|
184
|
+
'item-content': StaticSlot<{
|
|
185
|
+
item: T;
|
|
186
|
+
index: number;
|
|
187
|
+
active: boolean;
|
|
188
|
+
ui: ComponentStyler<typeof theme>;
|
|
189
|
+
close: () => void;
|
|
190
|
+
}>;
|
|
191
|
+
'list-leading': StaticSlot;
|
|
192
|
+
'list-trailing': StaticSlot;
|
|
193
|
+
} & DynamicSlots<MergeTypes<T>, 'label', {
|
|
194
|
+
index: number;
|
|
195
|
+
active: boolean;
|
|
196
|
+
}> & DynamicSlots<MergeTypes<T>, 'leading' | 'trailing' | 'content', {
|
|
197
|
+
index: number;
|
|
198
|
+
active: boolean;
|
|
199
|
+
ui: ComponentStyler<typeof theme>;
|
|
200
|
+
}>;
|
|
201
|
+
declare const __VLS_export: <T extends ArrayOrNested<NavigationMenuItem>, K extends SingleOrMultipleType = SingleOrMultipleType, O extends Orientation = Orientation>(__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<{
|
|
202
|
+
props: __VLS_PrettifyLocal<NavigationMenuProps<T, K, O> & {
|
|
203
|
+
"onUpdate:modelValue"?: ((value: NavigationMenuModelValue<K, O> | undefined) => any) | undefined;
|
|
204
|
+
}> & import("vue").PublicProps;
|
|
205
|
+
expose: (exposed: {}) => void;
|
|
206
|
+
attrs: any;
|
|
207
|
+
slots: NavigationMenuSlots<T, NestedItem<T>>;
|
|
208
|
+
emit: (evt: "update:modelValue", value: NavigationMenuModelValue<K, O> | undefined) => void;
|
|
209
|
+
}>) => import("vue").VNode & {
|
|
210
|
+
__ctx?: Awaited<typeof __VLS_setup>;
|
|
211
|
+
};
|
|
212
|
+
declare const _default: typeof __VLS_export;
|
|
213
|
+
export default _default;
|
|
214
|
+
type __VLS_PrettifyLocal<T> = {
|
|
215
|
+
[K in keyof T as K]: T[K];
|
|
216
|
+
} & {};
|
|
@@ -3,7 +3,7 @@ import { computed } from "vue";
|
|
|
3
3
|
import { useOverlay } from "../composables/useOverlay";
|
|
4
4
|
const { overlays, unmount, close } = useOverlay();
|
|
5
5
|
const mountedOverlays = computed(() => overlays.filter((overlay) => overlay.isMounted));
|
|
6
|
-
function
|
|
6
|
+
function onAfterLeave(id) {
|
|
7
7
|
close(id);
|
|
8
8
|
unmount(id);
|
|
9
9
|
}
|
|
@@ -18,8 +18,8 @@ function onClose(id, value) {
|
|
|
18
18
|
v-for="overlay in mountedOverlays"
|
|
19
19
|
:key="overlay.id"
|
|
20
20
|
v-bind="overlay.props"
|
|
21
|
-
v-model:open="overlay.
|
|
21
|
+
v-model:open="overlay.isOpen"
|
|
22
22
|
@close="onClose(overlay.id, $event)"
|
|
23
|
-
@after-leave="
|
|
23
|
+
@after-leave="onAfterLeave(overlay.id)"
|
|
24
24
|
/>
|
|
25
25
|
</template>
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
declare const
|
|
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 {
|
|
11
|
+
import { cv, merge } from "../utils/style";
|
|
11
12
|
import Button from "./Button.vue";
|
|
12
13
|
const props = defineProps({
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
const
|
|
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="
|
|
49
|
-
<PaginationList v-slot="{ items }" :class="
|
|
50
|
-
<PaginationFirst v-if="props.showControls || !!slots.first" :class="
|
|
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="
|
|
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'" :
|
|
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:
|
|
75
|
+
:ui="{ label: ui.label({ class: props.ui?.label }) }"
|
|
76
|
+
square
|
|
70
77
|
/>
|
|
71
78
|
</slot>
|
|
72
79
|
</PaginationListItem>
|
|
73
80
|
|
|
74
|
-
<PaginationEllipsis
|
|
75
|
-
|
|
76
|
-
|
|
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="
|
|
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="
|
|
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
|
|
3
|
-
import type { ButtonProps,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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?:
|
|
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?:
|
|
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?:
|
|
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?:
|
|
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?:
|
|
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
|
|
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
|
-
|
|
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 {
|
|
10
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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, "
|
|
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
|
-
:
|
|
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
|
-
<
|
|
84
|
+
<PinInputInput
|
|
65
85
|
v-for="(ids, index) in looseToNumber(props.length)"
|
|
66
86
|
:key="ids"
|
|
67
|
-
:
|
|
68
|
-
:
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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>
|