pxd 0.0.60 → 0.0.62
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/LICENSE +21 -0
- package/dist/components/_internal/dismiss-container.d.vue.ts +28 -0
- package/dist/components/_internal/dismiss-container.vue +162 -0
- package/dist/components/_internal/popover-arrow.d.vue.ts +9 -0
- package/dist/components/_internal/popover-arrow.vue +38 -0
- package/dist/components/active-graph/index.vue +5 -5
- package/dist/components/avatar/index.vue +5 -7
- package/dist/components/avatar-group/index.d.vue.ts +0 -1
- package/dist/components/avatar-group/index.vue +1 -1
- package/dist/components/backtop/index.vue +1 -1
- package/dist/components/badge/index.d.vue.ts +6 -2
- package/dist/components/badge/index.vue +19 -5
- package/dist/components/badge/types.d.ts +5 -0
- package/dist/components/book/index.vue +1 -1
- package/dist/components/browser/index.vue +1 -1
- package/dist/components/bubble/index.d.vue.ts +22 -0
- package/dist/components/bubble/index.vue +59 -0
- package/dist/components/bubble/types.d.ts +6 -0
- package/dist/components/button/index.d.vue.ts +0 -2
- package/dist/components/button/index.vue +31 -22
- package/dist/components/button/types.d.ts +3 -2
- package/dist/components/button-group/index.d.vue.ts +14 -0
- package/dist/components/button-group/index.vue +26 -0
- package/dist/components/button-group/types.d.ts +9 -0
- package/dist/components/carousel/index.d.vue.ts +3 -3
- package/dist/components/carousel/index.vue +146 -113
- package/dist/components/carousel/types.d.ts +1 -1
- package/dist/components/carousel-item/index.vue +22 -17
- package/dist/components/checkbox/index.vue +7 -7
- package/dist/components/checkbox-group/index.d.vue.ts +1 -1
- package/dist/components/chip/index.d.vue.ts +1 -5
- package/dist/components/chip/index.vue +5 -5
- package/dist/components/choicebox/index.vue +1 -1
- package/dist/components/collapse-group/index.vue +1 -1
- package/dist/components/color-selector/index.d.vue.ts +12 -0
- package/dist/components/color-selector/index.vue +64 -0
- package/dist/components/color-selector/types.d.ts +12 -0
- package/dist/components/command-menu/index.d.vue.ts +6 -6
- package/dist/components/command-menu/index.vue +24 -33
- package/dist/components/command-menu/types.d.ts +1 -1
- package/dist/components/command-menu-group/index.vue +15 -6
- package/dist/components/command-menu-group/types.d.ts +1 -1
- package/dist/components/config-provider/index.d.vue.ts +1 -1
- package/dist/components/countdown/index.d.vue.ts +11 -11
- package/dist/components/drawer/index.d.vue.ts +8 -8
- package/dist/components/drawer/index.vue +13 -10
- package/dist/components/drawer/types.d.ts +4 -3
- package/dist/components/ellipsis-text/index.d.vue.ts +4 -1
- package/dist/components/ellipsis-text/index.vue +86 -109
- package/dist/components/ellipsis-text/types.d.ts +2 -1
- package/dist/components/error/index.vue +2 -2
- package/dist/components/fader/index.vue +5 -9
- package/dist/components/gauge/index.vue +34 -29
- package/dist/components/grid/index.vue +1 -1
- package/dist/components/grid-item/index.vue +1 -1
- package/dist/components/hold-button/index.d.vue.ts +8 -10
- package/dist/components/hold-button/index.vue +15 -27
- package/dist/components/hold-button/types.d.ts +5 -6
- package/dist/components/index.d.ts +7 -0
- package/dist/components/index.js +7 -0
- package/dist/components/input/index.d.vue.ts +8 -8
- package/dist/components/input/index.vue +7 -6
- package/dist/components/intersection-observer/index.vue +4 -4
- package/dist/components/kbd/index.vue +2 -2
- package/dist/components/link-button/index.d.vue.ts +4 -4
- package/dist/components/link-button/index.vue +5 -7
- package/dist/components/link-button/types.d.ts +0 -3
- package/dist/components/list/index.d.vue.ts +10 -15
- package/dist/components/list/index.vue +58 -131
- package/dist/components/list/types.d.ts +4 -4
- package/dist/components/list-item/index.d.vue.ts +2 -2
- package/dist/components/list-item/index.vue +45 -40
- package/dist/components/loading-bar/index.vue +9 -8
- package/dist/components/material/index.vue +24 -46
- package/dist/components/menu/index.d.vue.ts +6 -8
- package/dist/components/menu/index.vue +18 -24
- package/dist/components/menu/types.d.ts +1 -2
- package/dist/components/message/composables/use-group-expand.d.ts +13 -0
- package/dist/components/message/composables/use-group-expand.js +50 -0
- package/dist/components/message/composables/use-message-timer.d.ts +9 -0
- package/dist/components/message/composables/use-message-timer.js +61 -0
- package/dist/components/message/composables/use-promise-message.d.ts +4 -0
- package/dist/components/message/composables/use-promise-message.js +49 -0
- package/dist/components/message/index.d.vue.ts +6 -33
- package/dist/components/message/index.vue +33 -185
- package/dist/components/message/types.d.ts +2 -2
- package/dist/components/message-item/index.vue +26 -2
- package/dist/components/modal/index.d.vue.ts +7 -7
- package/dist/components/modal/index.vue +7 -3
- package/dist/components/modal/types.d.ts +7 -3
- package/dist/components/note/index.vue +3 -3
- package/dist/components/number-input/index.d.vue.ts +5 -4
- package/dist/components/number-input/index.vue +3 -0
- package/dist/components/number-input/types.d.ts +1 -0
- package/dist/components/overlay/index.d.vue.ts +6 -3
- package/dist/components/overlay/index.vue +63 -68
- package/dist/components/overlay/types.d.ts +5 -4
- package/dist/components/pagination/index.vue +2 -2
- package/dist/components/pin-input/index.d.vue.ts +2 -2
- package/dist/components/pin-input/index.vue +9 -8
- package/dist/components/placeholder/index.vue +14 -12
- package/dist/components/popover/index.d.vue.ts +8 -9
- package/dist/components/popover/index.vue +150 -240
- package/dist/components/popover/types.d.ts +6 -7
- package/dist/components/progress/index.vue +3 -3
- package/dist/components/project-banner/index.vue +1 -1
- package/dist/components/radio/index.vue +3 -3
- package/dist/components/radio-group/index.vue +1 -1
- package/dist/components/resizable/index.vue +43 -51
- package/dist/components/resizable/types.d.ts +1 -1
- package/dist/components/resizable-handle/index.d.vue.ts +4 -1
- package/dist/components/resizable-handle/index.vue +29 -3
- package/dist/components/resizable-panel/index.vue +3 -7
- package/dist/components/scalable-text/index.d.vue.ts +9 -0
- package/dist/components/scalable-text/index.vue +147 -0
- package/dist/components/scalable-text/types.d.ts +12 -0
- package/dist/components/scrollable/index.d.vue.ts +2 -2
- package/dist/components/scrollable/index.vue +4 -3
- package/dist/components/scrollable/types.d.ts +1 -2
- package/dist/components/separator/index.d.vue.ts +6 -0
- package/dist/components/separator/index.vue +18 -0
- package/dist/components/separator/types.d.ts +5 -0
- package/dist/components/skeleton/index.d.vue.ts +1 -1
- package/dist/components/skeleton/index.vue +1 -1
- package/dist/components/slider/index.d.vue.ts +1 -1
- package/dist/components/slider/index.vue +41 -9
- package/dist/components/snippet/index.vue +18 -15
- package/dist/components/spinner/index.vue +3 -1
- package/dist/components/stack/index.d.vue.ts +1 -1
- package/dist/components/stack/index.vue +2 -2
- package/dist/components/switch/index.d.vue.ts +1 -1
- package/dist/components/switch/index.vue +5 -4
- package/dist/components/switch-item/index.vue +3 -3
- package/dist/components/tabs/index.d.vue.ts +12 -0
- package/dist/components/tabs/index.vue +270 -0
- package/dist/components/tabs/types.d.ts +12 -0
- package/dist/components/tabs-item/index.d.vue.ts +4 -0
- package/dist/components/tabs-item/index.vue +16 -0
- package/dist/components/tabs-item/types.d.ts +10 -0
- package/dist/components/text/index.vue +2 -2
- package/dist/components/textarea/index.d.vue.ts +2 -2
- package/dist/components/textarea/index.vue +3 -3
- package/dist/components/time-picker/index.d.vue.ts +3 -5
- package/dist/components/time-picker/index.vue +54 -46
- package/dist/components/time-picker/types.d.ts +1 -2
- package/dist/components/toggle/index.d.vue.ts +0 -2
- package/dist/components/toggle/index.vue +7 -7
- package/dist/components/toggle-button/index.vue +11 -9
- package/dist/components/toggle-button-group/index.vue +3 -3
- package/dist/components/tooltip/index.d.vue.ts +1 -1
- package/dist/components/tooltip/index.vue +19 -11
- package/dist/components/tooltip/types.d.ts +2 -3
- package/dist/components/virtual-list/index.d.vue.ts +8 -8
- package/dist/components/virtual-list/index.vue +29 -7
- package/dist/components/virtual-list/types.d.ts +3 -0
- package/dist/composables/index.d.ts +4 -1
- package/dist/composables/index.js +4 -1
- package/dist/composables/use-browser-observer.d.ts +1 -1
- package/dist/composables/use-browser-observer.js +2 -2
- package/dist/composables/use-client-online.js +2 -2
- package/dist/composables/use-color-scheme.js +2 -2
- package/dist/composables/use-countdown.js +3 -2
- package/dist/composables/use-deferred-value.js +2 -2
- package/dist/composables/use-delay-destroy.d.ts +1 -1
- package/dist/composables/use-delay-destroy.js +11 -6
- package/dist/composables/use-document-hidden.js +2 -2
- package/dist/composables/use-focus-trap.d.ts +1 -1
- package/dist/composables/use-focus-trap.js +2 -2
- package/dist/composables/use-list-filter.d.ts +11 -0
- package/dist/composables/use-list-filter.js +56 -0
- package/dist/composables/use-list-navigation.d.ts +27 -0
- package/dist/composables/use-list-navigation.js +159 -0
- package/dist/composables/use-lock-scroll.js +12 -12
- package/dist/composables/use-media-query.js +2 -2
- package/dist/composables/use-message.d.ts +1 -1
- package/dist/composables/use-outside-click.d.ts +1 -1
- package/dist/composables/use-outside-click.js +8 -11
- package/dist/composables/use-overlay-manager.d.ts +18 -0
- package/dist/composables/use-overlay-manager.js +80 -0
- package/dist/composables/use-popover-responsive.d.ts +6 -8
- package/dist/composables/use-popover-responsive.js +9 -12
- package/dist/composables/use-repeat-action.d.ts +1 -1
- package/dist/composables/use-repeat-action.js +2 -2
- package/dist/composables/use-swipe-gesture.d.ts +65 -0
- package/dist/composables/use-swipe-gesture.js +99 -0
- package/dist/composables/use-virtual-list.d.ts +6 -4
- package/dist/composables/use-virtual-list.js +25 -14
- package/dist/composables/use-window-size.js +2 -2
- package/dist/constants/size.d.ts +12 -0
- package/dist/constants/size.js +12 -0
- package/dist/contexts/button.d.ts +5 -0
- package/dist/contexts/button.js +5 -0
- package/dist/contexts/carousel.d.ts +3 -2
- package/dist/contexts/checkbox.d.ts +1 -1
- package/dist/contexts/choicebox.d.ts +1 -1
- package/dist/contexts/collapse.d.ts +1 -1
- package/dist/contexts/list.d.ts +23 -3
- package/dist/contexts/list.js +6 -2
- package/dist/contexts/radio.d.ts +1 -1
- package/dist/contexts/resizable.d.ts +3 -11
- package/dist/contexts/switch.d.ts +1 -1
- package/dist/contexts/tabs.d.ts +15 -0
- package/dist/contexts/tabs.js +2 -0
- package/dist/contexts/toggle-button.d.ts +1 -1
- package/dist/locales/en-us.d.ts +4 -4
- package/dist/locales/en-us.js +4 -4
- package/dist/locales/zh-cn.d.ts +4 -4
- package/dist/locales/zh-cn.js +4 -4
- package/dist/plugins/dayjs-millisecond-token.js +1 -1
- package/dist/styles/source.css +133 -128
- package/dist/styles/styles.css +2 -2
- package/dist/styles/tw.css +133 -128
- package/dist/types/shared/props.d.ts +1 -0
- package/dist/types/shared/utils.d.ts +1 -4
- package/dist/utils/date.d.ts +3 -3
- package/dist/utils/dom.d.ts +1 -0
- package/dist/utils/dom.js +4 -0
- package/dist/utils/event.d.ts +2 -1
- package/dist/utils/event.js +7 -1
- package/dist/utils/format.d.ts +3 -3
- package/dist/utils/format.js +5 -4
- package/dist/utils/fuzzy-search.d.ts +7 -0
- package/dist/utils/fuzzy-search.js +61 -0
- package/dist/utils/get.d.ts +2 -0
- package/dist/utils/get.js +15 -1
- package/dist/utils/index.d.ts +10 -11
- package/dist/utils/index.js +2 -3
- package/dist/utils/ref.d.ts +2 -2
- package/dist/utils/{throttle.d.ts → timing.d.ts} +1 -0
- package/dist/utils/{throttle.js → timing.js} +4 -2
- package/package.json +67 -63
- package/volar.d.ts +7 -0
- package/dist/components/overlay/overlay-stack.d.ts +0 -3
- package/dist/components/overlay/overlay-stack.js +0 -17
- package/dist/composables/use-pointer-gesture.d.ts +0 -180
- package/dist/composables/use-pointer-gesture.js +0 -406
- package/dist/utils/debounce.d.ts +0 -1
- package/dist/utils/debounce.js +0 -1
- package/dist/utils/regexp.d.ts +0 -8
- package/dist/utils/regexp.js +0 -8
- package/dist/utils/responsive.d.ts +0 -3
- package/dist/utils/responsive.js +0 -14
|
@@ -1,32 +1,34 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
+
import { tv } from "tailwind-variants";
|
|
2
3
|
import { computed } from "vue";
|
|
4
|
+
import { BASIC_HEIGHTS } from "../../constants/size";
|
|
5
|
+
import { useButtonGroupContext } from "../../contexts/button";
|
|
3
6
|
import { useConfigProvider } from "../../contexts/config-provider";
|
|
4
7
|
import { isTruthyProp } from "../../utils/format";
|
|
5
8
|
import PSpinner from "../spinner/index.vue";
|
|
6
|
-
import { tv } from "tailwind-variants";
|
|
7
9
|
defineOptions({
|
|
8
10
|
name: "PButton",
|
|
9
11
|
inheritAttrs: false
|
|
10
12
|
});
|
|
11
13
|
const props = defineProps({
|
|
12
14
|
as: { type: [String, Object], required: false, default: "button" },
|
|
13
|
-
variant: { type: String, required: false
|
|
15
|
+
variant: { type: String, required: false },
|
|
14
16
|
size: { type: String, required: false },
|
|
15
17
|
shape: { type: String, required: false },
|
|
16
|
-
align: { type: String, required: false
|
|
18
|
+
align: { type: String, required: false },
|
|
17
19
|
icon: { type: Boolean, required: false, default: false },
|
|
18
20
|
loading: { type: Boolean, required: false },
|
|
19
21
|
disabled: { type: Boolean, required: false },
|
|
20
22
|
fullWidth: { type: Boolean, required: false }
|
|
21
23
|
});
|
|
22
24
|
const buttonVariants = tv({
|
|
23
|
-
base: "pxd-button inline-flex shrink-0 cursor-pointer touch-manipulation items-center font-inherit select-none motion-safe:transition-
|
|
25
|
+
base: "pxd-button inline-flex shrink-0 cursor-pointer touch-manipulation items-center font-inherit select-none motion-safe:transition-appearance [[data-button-group]>&]:-ml-px [[data-button-group]>&]:not-first:rounded-l-none [[data-button-group]>&]:not-last:rounded-r-none [[data-button-group]>&]:enabled:hover:z-1",
|
|
24
26
|
variants: {
|
|
25
27
|
size: {
|
|
26
|
-
xs:
|
|
27
|
-
sm:
|
|
28
|
-
md:
|
|
29
|
-
lg:
|
|
28
|
+
xs: `${BASIC_HEIGHTS.xs} px-1 text-xs rounded-sm`,
|
|
29
|
+
sm: `${BASIC_HEIGHTS.sm} px-1.5 text-sm rounded-md`,
|
|
30
|
+
md: `${BASIC_HEIGHTS.md} px-2.5 text-sm rounded-md`,
|
|
31
|
+
lg: `${BASIC_HEIGHTS.lg} px-3.5 text-base rounded-lg`
|
|
30
32
|
},
|
|
31
33
|
shape: {
|
|
32
34
|
square: "rounded-none",
|
|
@@ -40,9 +42,8 @@ const buttonVariants = tv({
|
|
|
40
42
|
},
|
|
41
43
|
variant: {
|
|
42
44
|
simple: "",
|
|
43
|
-
icon: "p-0! aspect-square",
|
|
44
45
|
link: "font-medium hover:underline hover:opacity-70 active:opacity-90 motion-safe:transition-opacity",
|
|
45
|
-
default: "
|
|
46
|
+
default: "bg-background-100 text-foreground hover:bg-background-hover active:bg-background-active",
|
|
46
47
|
ghost: "border-transparent bg-transparent text-foreground hover:bg-background-hover active:bg-background-active",
|
|
47
48
|
primary: "border-transparent bg-primary text-gray-100 hover:bg-primary-hover active:bg-primary-active",
|
|
48
49
|
error: "text-white border-transparent bg-red-800 hover:bg-red-700 active:bg-red-900",
|
|
@@ -56,7 +57,8 @@ const buttonVariants = tv({
|
|
|
56
57
|
true: "w-full"
|
|
57
58
|
},
|
|
58
59
|
icon: {
|
|
59
|
-
true: "p-0
|
|
60
|
+
true: "p-0 aspect-square",
|
|
61
|
+
false: "[[data-button-group]>&]:flex-1"
|
|
60
62
|
},
|
|
61
63
|
loading: {
|
|
62
64
|
true: ""
|
|
@@ -66,25 +68,23 @@ const buttonVariants = tv({
|
|
|
66
68
|
{
|
|
67
69
|
variant: ["default", "ghost", "primary", "error", "warning", "success"],
|
|
68
70
|
class: "border self-focus-ring outline-none"
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
icon: true,
|
|
72
|
-
class: "p-0! aspect-square"
|
|
73
71
|
}
|
|
74
72
|
]
|
|
75
73
|
});
|
|
76
74
|
const configProvider = useConfigProvider();
|
|
75
|
+
const buttonGroupContext = useButtonGroupContext();
|
|
77
76
|
const isDisabled = computed(
|
|
78
|
-
() => isTruthyProp(props.disabled) || isTruthyProp(props.loading)
|
|
77
|
+
() => isTruthyProp(props.disabled) || isTruthyProp(props.loading) || buttonGroupContext?.props.disabled || false
|
|
79
78
|
);
|
|
80
79
|
const computedClasses = computed(() => {
|
|
81
|
-
const { size
|
|
80
|
+
const { size, shape, align, variant, fullWidth, icon } = props;
|
|
81
|
+
const internalAlign = icon ? "center" : align;
|
|
82
82
|
return buttonVariants({
|
|
83
83
|
icon,
|
|
84
|
-
size,
|
|
85
|
-
shape,
|
|
86
|
-
align,
|
|
87
|
-
variant,
|
|
84
|
+
size: size || buttonGroupContext?.props.size || configProvider.size,
|
|
85
|
+
shape: buttonGroupContext ? "default" : shape,
|
|
86
|
+
align: internalAlign || buttonGroupContext?.props.align || "center",
|
|
87
|
+
variant: variant || buttonGroupContext?.props.variant || "default",
|
|
88
88
|
fullWidth,
|
|
89
89
|
disabled: isDisabled.value
|
|
90
90
|
});
|
|
@@ -92,7 +92,16 @@ const computedClasses = computed(() => {
|
|
|
92
92
|
</script>
|
|
93
93
|
|
|
94
94
|
<template>
|
|
95
|
-
<Component
|
|
95
|
+
<Component
|
|
96
|
+
:is="as"
|
|
97
|
+
tabindex="0"
|
|
98
|
+
aria-label="Action"
|
|
99
|
+
:aria-busy="loading"
|
|
100
|
+
:aria-disabled="isDisabled"
|
|
101
|
+
:class="computedClasses"
|
|
102
|
+
:disabled="isDisabled"
|
|
103
|
+
v-bind="$attrs"
|
|
104
|
+
>
|
|
96
105
|
<PSpinner v-if="loading" />
|
|
97
106
|
|
|
98
107
|
<slot name="prefix" />
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
ComponentAs,
|
|
3
|
+
ComponentAlign,
|
|
3
4
|
ComponentShape,
|
|
4
5
|
ComponentSizeWithXs,
|
|
5
6
|
ComponentVariantWithDefault,
|
|
6
7
|
} from '../../types/shared'
|
|
7
8
|
|
|
8
|
-
export type ButtonVariant = ComponentVariantWithDefault | 'ghost' | 'simple' | '
|
|
9
|
+
export type ButtonVariant = ComponentVariantWithDefault | 'ghost' | 'simple' | 'link'
|
|
9
10
|
|
|
10
11
|
export interface ButtonProps {
|
|
11
12
|
as?: ComponentAs
|
|
12
13
|
variant?: ButtonVariant
|
|
13
14
|
size?: ComponentSizeWithXs
|
|
14
15
|
shape?: ComponentShape
|
|
15
|
-
align?:
|
|
16
|
+
align?: ComponentAlign
|
|
16
17
|
icon?: boolean
|
|
17
18
|
loading?: boolean
|
|
18
19
|
disabled?: boolean
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ButtonGroupProps } from './types';
|
|
2
|
+
declare var __VLS_1: {};
|
|
3
|
+
type __VLS_Slots = {} & {
|
|
4
|
+
default?: (props: typeof __VLS_1) => any;
|
|
5
|
+
};
|
|
6
|
+
declare const __VLS_base: import("vue").DefineComponent<ButtonGroupProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ButtonGroupProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
8
|
+
declare const _default: typeof __VLS_export;
|
|
9
|
+
export default _default;
|
|
10
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
11
|
+
new (): {
|
|
12
|
+
$slots: S;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { provideButtonGroupContext } from "../../contexts/button";
|
|
3
|
+
defineOptions({
|
|
4
|
+
name: "PButtonGroup",
|
|
5
|
+
inheritAttrs: false
|
|
6
|
+
});
|
|
7
|
+
const props = defineProps({
|
|
8
|
+
size: { type: String, required: false },
|
|
9
|
+
align: { type: String, required: false },
|
|
10
|
+
variant: { type: String, required: false },
|
|
11
|
+
disabled: { type: Boolean, required: false }
|
|
12
|
+
});
|
|
13
|
+
provideButtonGroupContext({ props });
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<template>
|
|
17
|
+
<div
|
|
18
|
+
role="group"
|
|
19
|
+
aria-label="Actions"
|
|
20
|
+
data-button-group
|
|
21
|
+
class="pxd-button-group flex max-w-full"
|
|
22
|
+
v-bind="$attrs"
|
|
23
|
+
>
|
|
24
|
+
<slot />
|
|
25
|
+
</div>
|
|
26
|
+
</template>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ComponentSizeWithXs, ComponentAlign } from '../../types/shared'
|
|
2
|
+
import type { ButtonVariant } from '../button/types'
|
|
3
|
+
|
|
4
|
+
export interface ButtonGroupProps {
|
|
5
|
+
size?: ComponentSizeWithXs
|
|
6
|
+
align?: ComponentAlign
|
|
7
|
+
variant?: ButtonVariant
|
|
8
|
+
disabled?: boolean
|
|
9
|
+
}
|
|
@@ -13,16 +13,16 @@ declare const __VLS_base: import("vue").DefineComponent<CarouselProps, {}, {}, {
|
|
|
13
13
|
}, string, import("vue").PublicProps, Readonly<CarouselProps> & Readonly<{
|
|
14
14
|
onChange?: ((index: number) => any) | undefined;
|
|
15
15
|
}>, {
|
|
16
|
-
|
|
16
|
+
direction: import("../../types/shared").ComponentDirection;
|
|
17
17
|
height: number | string;
|
|
18
|
+
index: number;
|
|
18
19
|
loop: boolean;
|
|
19
20
|
arrow: boolean;
|
|
20
21
|
autoplay: boolean;
|
|
21
22
|
interval: number;
|
|
22
23
|
indicator: boolean;
|
|
23
|
-
direction: import("../../types/shared").ComponentDirection;
|
|
24
24
|
indicatorType: "dot" | "line";
|
|
25
|
-
indicatorPosition: import("../../types/shared").BasePosition;
|
|
25
|
+
indicatorPosition: import("../../types/shared").BasePosition | "center";
|
|
26
26
|
pauseOnHover: boolean;
|
|
27
27
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
28
28
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
<script setup>
|
|
2
2
|
import ChevronRightIcon from "@gdsicon/vue/chevron-right";
|
|
3
3
|
import { computed, nextTick, onBeforeUnmount, onMounted, ref, shallowRef } from "vue";
|
|
4
|
+
import { useSwipeGesture } from "../../composables/use-swipe-gesture";
|
|
4
5
|
import { provideCarouselContext } from "../../contexts/carousel";
|
|
6
|
+
import { awaitAnimationEnd } from "../../utils/dom";
|
|
5
7
|
import { getCssUnitValue } from "../../utils/format";
|
|
6
8
|
defineOptions({
|
|
7
9
|
name: "PCarousel",
|
|
@@ -16,67 +18,100 @@ const props = defineProps({
|
|
|
16
18
|
interval: { type: Number, required: false, default: 3e3 },
|
|
17
19
|
indicator: { type: Boolean, required: false, default: true },
|
|
18
20
|
direction: { type: String, required: false, default: "horizontal" },
|
|
19
|
-
indicatorType: { type: String, required: false, default: "
|
|
20
|
-
indicatorPosition: { type: String, required: false, default: "
|
|
21
|
+
indicatorType: { type: String, required: false, default: "dot" },
|
|
22
|
+
indicatorPosition: { type: String, required: false, default: "center" },
|
|
21
23
|
pauseOnHover: { type: Boolean, required: false, default: true },
|
|
22
24
|
toggleOnWheel: { type: Boolean, required: false }
|
|
23
25
|
});
|
|
24
26
|
const emits = defineEmits(["change"]);
|
|
25
|
-
|
|
26
|
-
let
|
|
27
|
-
let
|
|
27
|
+
let isToggling = false;
|
|
28
|
+
let pendingDelta = null;
|
|
29
|
+
let autoPlayTimerId = null;
|
|
28
30
|
let isPointerEntering = false;
|
|
29
|
-
let
|
|
31
|
+
let maxDrag = 0;
|
|
30
32
|
const carousels = ref([]);
|
|
31
33
|
const sliderRef = shallowRef();
|
|
32
34
|
const virtualIndex = shallowRef(props.index);
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
const gestureMoveOffset = shallowRef(0);
|
|
36
|
+
const displayIndex = computed(() => {
|
|
37
|
+
const length = carousels.value.length;
|
|
38
|
+
if (length === 0) {
|
|
36
39
|
return 0;
|
|
37
40
|
}
|
|
38
|
-
|
|
39
|
-
return carousels.value.length - 1;
|
|
40
|
-
}
|
|
41
|
-
return index;
|
|
41
|
+
return (virtualIndex.value % length + length) % length;
|
|
42
42
|
});
|
|
43
|
+
const isAtFirst = computed(() => displayIndex.value === 0);
|
|
44
|
+
const isAtLast = computed(() => displayIndex.value === carousels.value.length - 1);
|
|
45
|
+
const isHorizontal = computed(() => props.direction === "horizontal");
|
|
43
46
|
const computedStyle = computed(() => {
|
|
44
|
-
const translateValue = virtualIndex.value * -100
|
|
45
|
-
|
|
46
|
-
transform:
|
|
47
|
+
const translateValue = `calc(${virtualIndex.value * -100}% + ${gestureMoveOffset.value}px)`;
|
|
48
|
+
return {
|
|
49
|
+
transform: `translate${isHorizontal.value ? "X" : "Y"}(${translateValue})`
|
|
47
50
|
};
|
|
48
|
-
return styles;
|
|
49
51
|
});
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
52
|
+
useSwipeGesture(sliderRef, {
|
|
53
|
+
direction: () => props.direction,
|
|
54
|
+
onPress: ({ size }) => {
|
|
55
|
+
maxDrag = size;
|
|
56
|
+
gestureMoveOffset.value = 0;
|
|
57
|
+
onPointerEnter();
|
|
58
|
+
},
|
|
59
|
+
onFollow: (ev) => {
|
|
60
|
+
if (!props.loop && (isAtFirst.value && ev.delta > 0 || isAtLast.value && ev.delta < 0)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
gestureMoveOffset.value = Math.max(-maxDrag, Math.min(maxDrag, ev.displacement));
|
|
64
|
+
},
|
|
65
|
+
onRelease: ({ swiped, direction }) => {
|
|
66
|
+
gestureMoveOffset.value = 0;
|
|
67
|
+
onPointerLeave();
|
|
68
|
+
if (!swiped || !direction) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (isHorizontal.value) {
|
|
72
|
+
performToggle(direction === "left" ? 1 : -1);
|
|
73
|
+
} else {
|
|
74
|
+
performToggle(direction === "top" ? 1 : -1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
});
|
|
59
78
|
async function performToggle(delta) {
|
|
60
79
|
const length = carousels.value.length;
|
|
61
80
|
if (length === 0) {
|
|
62
81
|
return;
|
|
63
82
|
}
|
|
64
|
-
await awaitAnimationEnd();
|
|
83
|
+
await awaitAnimationEnd(sliderRef.value);
|
|
65
84
|
if (props.loop) {
|
|
66
85
|
virtualIndex.value += delta;
|
|
67
|
-
|
|
86
|
+
await nextTick();
|
|
87
|
+
await awaitAnimationEnd(sliderRef.value);
|
|
88
|
+
if (virtualIndex.value >= length) {
|
|
89
|
+
await resetSliderPosition(0);
|
|
90
|
+
} else if (virtualIndex.value <= -1) {
|
|
91
|
+
await resetSliderPosition(length - 1);
|
|
92
|
+
}
|
|
68
93
|
} else {
|
|
69
94
|
virtualIndex.value = Math.max(0, Math.min(virtualIndex.value + delta, length - 1));
|
|
70
95
|
}
|
|
71
|
-
emits("change",
|
|
72
|
-
|
|
96
|
+
emits("change", virtualIndex.value);
|
|
97
|
+
restartAutoPlay();
|
|
73
98
|
}
|
|
74
|
-
function onToggleClick(delta) {
|
|
75
|
-
|
|
76
|
-
|
|
99
|
+
async function onToggleClick(delta) {
|
|
100
|
+
if (isToggling) {
|
|
101
|
+
pendingDelta = delta;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
isToggling = true;
|
|
105
|
+
try {
|
|
77
106
|
await performToggle(delta);
|
|
78
|
-
|
|
79
|
-
|
|
107
|
+
while (pendingDelta != null) {
|
|
108
|
+
const next = pendingDelta;
|
|
109
|
+
pendingDelta = null;
|
|
110
|
+
await performToggle(next);
|
|
111
|
+
}
|
|
112
|
+
} finally {
|
|
113
|
+
isToggling = false;
|
|
114
|
+
}
|
|
80
115
|
}
|
|
81
116
|
function onWheelToggle(ev) {
|
|
82
117
|
if (!props.toggleOnWheel) {
|
|
@@ -87,11 +122,9 @@ function onWheelToggle(ev) {
|
|
|
87
122
|
return;
|
|
88
123
|
}
|
|
89
124
|
const delta = ev.deltaY > 0 ? 1 : -1;
|
|
90
|
-
const indexBefore = virtualIndex.value;
|
|
91
|
-
const lastIndex = length - 1;
|
|
92
125
|
if (!props.loop) {
|
|
93
|
-
const isAtFirstAndGoPrev =
|
|
94
|
-
const isAtLastAndGoNext =
|
|
126
|
+
const isAtFirstAndGoPrev = isAtFirst.value && delta < 0;
|
|
127
|
+
const isAtLastAndGoNext = isAtLast.value && delta > 0;
|
|
95
128
|
if (isAtFirstAndGoPrev || isAtLastAndGoNext) {
|
|
96
129
|
return;
|
|
97
130
|
}
|
|
@@ -101,51 +134,31 @@ function onWheelToggle(ev) {
|
|
|
101
134
|
}
|
|
102
135
|
onToggleClick(delta);
|
|
103
136
|
}
|
|
104
|
-
function
|
|
105
|
-
const
|
|
106
|
-
|
|
107
|
-
virtualIndex.value = resetIndex;
|
|
108
|
-
translateItems();
|
|
109
|
-
setTimeout(() => {
|
|
110
|
-
containerClassList.add(...TRANSITION_CLASSES);
|
|
111
|
-
}, 0);
|
|
112
|
-
}
|
|
113
|
-
function onTransitionsEnd(ev) {
|
|
114
|
-
if (ev.propertyName !== "transform" || ev.target !== sliderRef.value) {
|
|
137
|
+
async function resetSliderPosition(resetIndex) {
|
|
138
|
+
const el = sliderRef.value;
|
|
139
|
+
if (!el) {
|
|
115
140
|
return;
|
|
116
141
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
} else if (virtualIndex.value <= -1) {
|
|
123
|
-
resetContainerPosition(carousels.value.length - 1);
|
|
124
|
-
}
|
|
142
|
+
el.style.transition = "none";
|
|
143
|
+
virtualIndex.value = resetIndex;
|
|
144
|
+
await nextTick();
|
|
145
|
+
void el.offsetHeight;
|
|
146
|
+
el.style.transition = "";
|
|
125
147
|
}
|
|
126
148
|
function clearAutoPlayTimer() {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
autoPlayRafId = null;
|
|
149
|
+
if (autoPlayTimerId != null) {
|
|
150
|
+
clearTimeout(autoPlayTimerId);
|
|
151
|
+
autoPlayTimerId = null;
|
|
131
152
|
}
|
|
132
153
|
}
|
|
133
|
-
function
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const elapsedTime = currentTime - startTime;
|
|
142
|
-
if (elapsedTime >= props.interval) {
|
|
143
|
-
onToggleClick(1);
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
autoPlayRafId = requestAnimationFrame(onAnimationFrame);
|
|
147
|
-
};
|
|
148
|
-
autoPlayRafId = requestAnimationFrame(onAnimationFrame);
|
|
154
|
+
function restartAutoPlay() {
|
|
155
|
+
clearAutoPlayTimer();
|
|
156
|
+
if (!props.autoplay || isPointerEntering) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
autoPlayTimerId = setTimeout(() => {
|
|
160
|
+
onToggleClick(1);
|
|
161
|
+
}, props.interval);
|
|
149
162
|
}
|
|
150
163
|
function onPointerEnter() {
|
|
151
164
|
if (props.pauseOnHover) {
|
|
@@ -155,41 +168,43 @@ function onPointerEnter() {
|
|
|
155
168
|
}
|
|
156
169
|
function onPointerLeave() {
|
|
157
170
|
isPointerEntering = false;
|
|
158
|
-
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
clearAutoPlayTimer();
|
|
162
|
-
setAutoPlayTimer();
|
|
171
|
+
restartAutoPlay();
|
|
163
172
|
}
|
|
164
173
|
function onIndicatorClick(ev) {
|
|
165
|
-
clearAutoPlayTimer();
|
|
166
174
|
const targetEl = ev.target.closest("[data-index]");
|
|
167
175
|
const targetIndex = Number(targetEl?.dataset.index);
|
|
168
176
|
if (Number.isNaN(targetIndex)) {
|
|
169
177
|
return;
|
|
170
178
|
}
|
|
171
|
-
const deltaIndex = targetIndex -
|
|
179
|
+
const deltaIndex = targetIndex - displayIndex.value;
|
|
172
180
|
if (deltaIndex !== 0) {
|
|
181
|
+
clearAutoPlayTimer();
|
|
173
182
|
onToggleClick(deltaIndex);
|
|
174
183
|
}
|
|
175
|
-
|
|
184
|
+
}
|
|
185
|
+
function updateItemIndex() {
|
|
186
|
+
carousels.value.forEach((carousel, i) => {
|
|
187
|
+
carousel.updateItemIndex(i);
|
|
188
|
+
});
|
|
176
189
|
}
|
|
177
190
|
function registerCarousel(state) {
|
|
178
191
|
carousels.value.push(state);
|
|
192
|
+
updateItemIndex();
|
|
179
193
|
}
|
|
180
194
|
function unregisterCarousel(id) {
|
|
181
195
|
carousels.value = carousels.value.filter(({ uid }) => uid !== id);
|
|
196
|
+
updateItemIndex();
|
|
182
197
|
}
|
|
183
198
|
provideCarouselContext({
|
|
184
199
|
props,
|
|
185
200
|
carousels,
|
|
201
|
+
virtualIndex,
|
|
186
202
|
registerCarousel,
|
|
187
203
|
unregisterCarousel
|
|
188
204
|
});
|
|
189
205
|
onMounted(async () => {
|
|
190
|
-
onPointerLeave();
|
|
191
206
|
await nextTick();
|
|
192
|
-
|
|
207
|
+
restartAutoPlay();
|
|
193
208
|
});
|
|
194
209
|
onBeforeUnmount(() => {
|
|
195
210
|
clearAutoPlayTimer();
|
|
@@ -200,7 +215,7 @@ onBeforeUnmount(() => {
|
|
|
200
215
|
<template>
|
|
201
216
|
<div
|
|
202
217
|
v-bind="$attrs"
|
|
203
|
-
:data-
|
|
218
|
+
:data-orientation="direction"
|
|
204
219
|
:data-indicator-type="indicatorType"
|
|
205
220
|
:data-indicator-position="indicatorPosition"
|
|
206
221
|
class="pxd-carousel group relative w-full touch-none overflow-hidden"
|
|
@@ -209,13 +224,11 @@ onBeforeUnmount(() => {
|
|
|
209
224
|
@pointerleave="onPointerLeave"
|
|
210
225
|
@wheel="onWheelToggle"
|
|
211
226
|
>
|
|
212
|
-
<div class="pxd-carousel--container size-full">
|
|
227
|
+
<div class="pxd-carousel--container size-full overflow-clip">
|
|
213
228
|
<div
|
|
214
229
|
ref="sliderRef"
|
|
215
|
-
class="pxd-carousel--slider translate-z-0 size-full"
|
|
230
|
+
class="pxd-carousel--slider translate-z-0 size-full active:transition-none motion-safe:transition-transform"
|
|
216
231
|
:style="computedStyle"
|
|
217
|
-
:class="TRANSITION_CLASSES"
|
|
218
|
-
@transitionend="onTransitionsEnd"
|
|
219
232
|
>
|
|
220
233
|
<slot />
|
|
221
234
|
</div>
|
|
@@ -223,37 +236,39 @@ onBeforeUnmount(() => {
|
|
|
223
236
|
|
|
224
237
|
<div
|
|
225
238
|
v-if="indicator"
|
|
226
|
-
class="pxd-carousel--indicator gap-2 absolute flex w-max items-center"
|
|
239
|
+
class="pxd-carousel--indicator gap-2 absolute z-1 flex w-max items-center"
|
|
227
240
|
@click="onIndicatorClick"
|
|
228
241
|
>
|
|
229
|
-
<slot name="indicator" :current="
|
|
242
|
+
<slot name="indicator" :current="displayIndex" :total="carousels.length">
|
|
230
243
|
<button
|
|
231
244
|
v-for="(_, i) in carousels.length"
|
|
232
245
|
:key="i"
|
|
233
246
|
:data-index="i"
|
|
234
247
|
class="pxd-carousel--indicator-item relative h-(--carousel-dot-height) w-(--carousel-dot-width) cursor-pointer appearance-none rounded-full bg-gray-alpha-200 font-inherit self-focus-ring outline-none hover:bg-gray-alpha-400 motion-safe:transition-colors"
|
|
235
|
-
:class="{ 'bg-primary!': i ===
|
|
248
|
+
:class="{ 'bg-primary!': i === displayIndex }"
|
|
236
249
|
/>
|
|
237
250
|
</slot>
|
|
238
251
|
</div>
|
|
239
252
|
|
|
240
|
-
<div v-if="arrow" class="pxd-carousel--toggler gap-2 absolute flex">
|
|
253
|
+
<div v-if="arrow" class="pxd-carousel--toggler gap-2 pointer-events-none absolute z-1 flex">
|
|
241
254
|
<button
|
|
242
255
|
type="button"
|
|
243
256
|
aria-label="Carousel arrow left"
|
|
244
|
-
|
|
257
|
+
:disabled="!loop && isAtFirst"
|
|
258
|
+
class="pxd-carousel--prev-btn p-1.5 pointer-events-auto cursor-pointer appearance-none rounded-md bg-gray-alpha-100 font-inherit text-foreground-secondary self-focus-ring outline-none enabled:hover:bg-background-hover enabled:active:bg-background-active disabled:cursor-not-allowed disabled:opacity-50 motion-safe:transition-colors"
|
|
245
259
|
@click="onToggleClick(-1)"
|
|
246
260
|
>
|
|
247
|
-
<ChevronRightIcon class="rotate-180" />
|
|
261
|
+
<ChevronRightIcon class="pointer-events-none rotate-180" />
|
|
248
262
|
</button>
|
|
249
263
|
|
|
250
264
|
<button
|
|
251
265
|
type="button"
|
|
252
266
|
aria-label="Carousel arrow right"
|
|
253
|
-
|
|
267
|
+
:disabled="!loop && isAtLast"
|
|
268
|
+
class="pxd-carousel--next-btn p-1.5 pointer-events-auto cursor-pointer appearance-none rounded-md bg-gray-alpha-100 font-inherit text-foreground-secondary self-focus-ring outline-none enabled:hover:bg-background-hover enabled:active:bg-background-active disabled:cursor-not-allowed disabled:opacity-50 motion-safe:transition-colors"
|
|
254
269
|
@click="onToggleClick(1)"
|
|
255
270
|
>
|
|
256
|
-
<ChevronRightIcon />
|
|
271
|
+
<ChevronRightIcon class="pointer-events-none" />
|
|
257
272
|
</button>
|
|
258
273
|
</div>
|
|
259
274
|
</div>
|
|
@@ -268,7 +283,8 @@ onBeforeUnmount(() => {
|
|
|
268
283
|
|
|
269
284
|
&[data-indicator-type='line'] {
|
|
270
285
|
&[data-indicator-position='top'],
|
|
271
|
-
&[data-indicator-position='bottom']
|
|
286
|
+
&[data-indicator-position='bottom'],
|
|
287
|
+
&[data-indicator-position='center'] {
|
|
272
288
|
--carousel-dot-width: 1rem;
|
|
273
289
|
--carousel-dot-height: 0.25rem;
|
|
274
290
|
}
|
|
@@ -282,7 +298,7 @@ onBeforeUnmount(() => {
|
|
|
282
298
|
|
|
283
299
|
&[data-indicator-position='top'] {
|
|
284
300
|
.pxd-carousel--indicator {
|
|
285
|
-
left:
|
|
301
|
+
left: 0.75rem;
|
|
286
302
|
top: 0.5rem;
|
|
287
303
|
}
|
|
288
304
|
|
|
@@ -294,7 +310,7 @@ onBeforeUnmount(() => {
|
|
|
294
310
|
|
|
295
311
|
&[data-indicator-position='bottom'] {
|
|
296
312
|
.pxd-carousel--indicator {
|
|
297
|
-
left:
|
|
313
|
+
left: 0.75rem;
|
|
298
314
|
bottom: 0.5rem;
|
|
299
315
|
}
|
|
300
316
|
|
|
@@ -307,7 +323,7 @@ onBeforeUnmount(() => {
|
|
|
307
323
|
&[data-indicator-position='left'] {
|
|
308
324
|
.pxd-carousel--indicator {
|
|
309
325
|
left: 0.5rem;
|
|
310
|
-
top:
|
|
326
|
+
top: 0.75rem;
|
|
311
327
|
}
|
|
312
328
|
|
|
313
329
|
.pxd-carousel--toggler {
|
|
@@ -319,7 +335,7 @@ onBeforeUnmount(() => {
|
|
|
319
335
|
&[data-indicator-position='right'] {
|
|
320
336
|
.pxd-carousel--indicator {
|
|
321
337
|
right: 0.5rem;
|
|
322
|
-
top:
|
|
338
|
+
top: 0.75rem;
|
|
323
339
|
}
|
|
324
340
|
|
|
325
341
|
.pxd-carousel--toggler {
|
|
@@ -328,14 +344,20 @@ onBeforeUnmount(() => {
|
|
|
328
344
|
}
|
|
329
345
|
}
|
|
330
346
|
|
|
331
|
-
&[data-
|
|
332
|
-
|
|
333
|
-
|
|
347
|
+
&[data-indicator-position='center'] {
|
|
348
|
+
.pxd-carousel--indicator {
|
|
349
|
+
left: 50%;
|
|
350
|
+
bottom: 0.5rem;
|
|
351
|
+
transform: translateX(-50%);
|
|
352
|
+
}
|
|
334
353
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
354
|
+
.pxd-carousel--toggler {
|
|
355
|
+
left: 0;
|
|
356
|
+
top: 50%;
|
|
357
|
+
width: 100%;
|
|
358
|
+
padding-inline: 1rem;
|
|
359
|
+
justify-content: space-between;
|
|
360
|
+
transform: translateY(-50%);
|
|
339
361
|
}
|
|
340
362
|
}
|
|
341
363
|
|
|
@@ -346,6 +368,17 @@ onBeforeUnmount(() => {
|
|
|
346
368
|
flex-direction: column;
|
|
347
369
|
}
|
|
348
370
|
}
|
|
371
|
+
|
|
372
|
+
&[data-orientation='horizontal'] .pxd-carousel--slider {
|
|
373
|
+
display: flex;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
&[data-orientation='vertical'] {
|
|
377
|
+
.pxd-carousel--prev-btn,
|
|
378
|
+
.pxd-carousel--next-btn {
|
|
379
|
+
transform: rotate(90deg);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
349
382
|
}
|
|
350
383
|
|
|
351
384
|
.pxd-carousel--indicator-item::before {
|
|
@@ -10,7 +10,7 @@ export interface CarouselProps {
|
|
|
10
10
|
indicator?: boolean
|
|
11
11
|
direction?: ComponentDirection
|
|
12
12
|
indicatorType?: 'dot' | 'line'
|
|
13
|
-
indicatorPosition?: BasePosition
|
|
13
|
+
indicatorPosition?: BasePosition | 'center'
|
|
14
14
|
pauseOnHover?: boolean
|
|
15
15
|
toggleOnWheel?: boolean
|
|
16
16
|
}
|