pxd 0.0.61 → 0.0.63
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 +4 -4
- 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 +5 -1
- package/dist/components/badge/index.vue +18 -4
- 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 +30 -21
- 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 +6 -6
- 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 +4 -4
- 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 +23 -32
- 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/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 +84 -107
- package/dist/components/ellipsis-text/types.d.ts +2 -1
- package/dist/components/error/index.vue +1 -1
- 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 +20 -29
- 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 +5 -4
- package/dist/components/intersection-observer/index.vue +4 -4
- package/dist/components/kbd/index.vue +1 -1
- package/dist/components/link-button/index.d.vue.ts +4 -4
- package/dist/components/link-button/index.vue +9 -8
- 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 +44 -39
- package/dist/components/loading-bar/index.vue +8 -7
- 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 +2 -2
- 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 +1 -1
- package/dist/components/pin-input/index.vue +7 -6
- package/dist/components/placeholder/index.vue +1 -1
- package/dist/components/popover/index.d.vue.ts +7 -8
- package/dist/components/popover/index.vue +149 -239
- package/dist/components/popover/types.d.ts +5 -5
- package/dist/components/progress/index.vue +1 -1
- package/dist/components/radio/index.vue +2 -2
- 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/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/slider/index.d.vue.ts +1 -1
- package/dist/components/slider/index.vue +39 -7
- package/dist/components/snippet/index.vue +16 -13
- package/dist/components/spinner/index.vue +3 -1
- package/dist/components/stack/index.d.vue.ts +1 -1
- package/dist/components/stack/index.vue +1 -1
- package/dist/components/switch/index.d.vue.ts +1 -1
- package/dist/components/switch/index.vue +4 -3
- package/dist/components/switch-item/index.vue +1 -1
- 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 +1 -1
- package/dist/components/textarea/index.d.vue.ts +2 -2
- package/dist/components/textarea/index.vue +1 -1
- package/dist/components/time-picker/index.d.vue.ts +3 -5
- package/dist/components/time-picker/index.vue +53 -45
- 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 +6 -6
- package/dist/components/toggle-button/index.vue +8 -6
- 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 -2
- package/dist/components/virtual-list/index.d.vue.ts +8 -8
- package/dist/components/virtual-list/index.vue +27 -5
- 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.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.js +11 -6
- package/dist/composables/use-document-hidden.js +2 -2
- 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-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.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 +5 -3
- 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 +2 -1
- package/dist/contexts/list.d.ts +23 -3
- package/dist/contexts/list.js +6 -2
- package/dist/contexts/resizable.d.ts +3 -11
- package/dist/contexts/tabs.d.ts +15 -0
- package/dist/contexts/tabs.js +2 -0
- 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 +40 -37
- 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,5 +1,5 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import { onBeforeUnmount, onMounted, shallowRef } from "vue";
|
|
2
|
+
import { onBeforeUnmount, onMounted, computed, shallowRef } from "vue";
|
|
3
3
|
import { useCarouselContext } from "../../contexts/carousel";
|
|
4
4
|
import { getUniqueId } from "../../utils/uid";
|
|
5
5
|
defineOptions({
|
|
@@ -7,30 +7,35 @@ defineOptions({
|
|
|
7
7
|
inheritAttrs: false
|
|
8
8
|
});
|
|
9
9
|
const uniqueId = getUniqueId();
|
|
10
|
-
const
|
|
10
|
+
const itemIndex = shallowRef(0);
|
|
11
11
|
const carouselContext = useCarouselContext();
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
function translateItem(index, activeIndex) {
|
|
20
|
-
const maxLength = carouselContext.carousels.value.length;
|
|
12
|
+
const transformStyle = computed(() => {
|
|
13
|
+
if (!carouselContext.props.loop) {
|
|
14
|
+
return "";
|
|
15
|
+
}
|
|
16
|
+
const { carousels, virtualIndex } = carouselContext;
|
|
17
|
+
const maxLength = carousels.value.length;
|
|
21
18
|
const lastIndex = maxLength - 1;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
const activeIndex = virtualIndex.value;
|
|
20
|
+
if (itemIndex.value === 0 && activeIndex >= lastIndex) {
|
|
21
|
+
return getTranslateValue(maxLength * 100);
|
|
22
|
+
} else if (itemIndex.value === lastIndex && activeIndex <= 0) {
|
|
23
|
+
return getTranslateValue(-maxLength * 100);
|
|
26
24
|
} else {
|
|
27
|
-
|
|
25
|
+
return "";
|
|
28
26
|
}
|
|
27
|
+
});
|
|
28
|
+
function updateItemIndex(index) {
|
|
29
|
+
itemIndex.value = index;
|
|
30
|
+
}
|
|
31
|
+
function getTranslateValue(translate) {
|
|
32
|
+
const isHorizontal = carouselContext.props.direction === "horizontal";
|
|
33
|
+
return `translate${isHorizontal ? "X" : "Y"}(${translate}%)`;
|
|
29
34
|
}
|
|
30
35
|
onMounted(() => {
|
|
31
36
|
carouselContext?.registerCarousel({
|
|
32
37
|
uid: uniqueId,
|
|
33
|
-
|
|
38
|
+
updateItemIndex
|
|
34
39
|
});
|
|
35
40
|
});
|
|
36
41
|
onBeforeUnmount(() => {
|
|
@@ -24,10 +24,10 @@ const props = defineProps({
|
|
|
24
24
|
});
|
|
25
25
|
const emits = defineEmits(["change", "update:modelValue"]);
|
|
26
26
|
const checkboxVariant = tv({
|
|
27
|
-
base: "pxd-checkbox--inner size-4 p-0.5 inline-flex shrink-0 transform-gpu items-center justify-center overflow-hidden border peer-focus-ring motion-safe:transition-colors",
|
|
27
|
+
base: "pxd-checkbox--inner size-4 p-0.5 pointer-events-none inline-flex shrink-0 transform-gpu items-center justify-center overflow-hidden border peer-focus-ring motion-safe:transition-colors",
|
|
28
28
|
variants: {
|
|
29
29
|
checked: {
|
|
30
|
-
true: "",
|
|
30
|
+
true: "text-gray-100",
|
|
31
31
|
false: ""
|
|
32
32
|
},
|
|
33
33
|
disabled: {
|
|
@@ -121,12 +121,12 @@ function onInputChange(event) {
|
|
|
121
121
|
/>
|
|
122
122
|
|
|
123
123
|
<span aria-hidden="true" :class="computedClasses">
|
|
124
|
-
<CheckIcon v-if="isChecked" class="size-3
|
|
125
|
-
<MinusIcon v-else-if="indeterminate" class="size-3
|
|
126
|
-
<span v-else class="size-3
|
|
124
|
+
<CheckIcon v-if="isChecked" class="size-3" />
|
|
125
|
+
<MinusIcon v-else-if="indeterminate" class="size-3" />
|
|
126
|
+
<span v-else class="size-3" />
|
|
127
127
|
</span>
|
|
128
128
|
|
|
129
|
-
<span class="text-sm flex-1 shrink-0 empty:hidden">
|
|
129
|
+
<span class="text-sm flex-1 shrink-0 leading-none empty:hidden">
|
|
130
130
|
<slot>
|
|
131
131
|
{{ label }}
|
|
132
132
|
</slot>
|
|
@@ -10,8 +10,8 @@ declare const __VLS_base: import("vue").DefineComponent<CheckboxGroupProps, {},
|
|
|
10
10
|
onChange?: ((args_0: import("../../types/shared").ComponentValue[]) => any) | undefined;
|
|
11
11
|
"onUpdate:modelValue"?: ((args_0: import("../../types/shared").ComponentValue[]) => any) | undefined;
|
|
12
12
|
}>, {
|
|
13
|
-
options: import("../../types/shared").ComponentOption[];
|
|
14
13
|
modelValue: import("../../types/shared").ComponentValue[];
|
|
14
|
+
options: import("../../types/shared").ComponentOption[];
|
|
15
15
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
16
16
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
17
17
|
declare const _default: typeof __VLS_export;
|
|
@@ -3,11 +3,7 @@ declare var __VLS_1: {};
|
|
|
3
3
|
type __VLS_Slots = {} & {
|
|
4
4
|
default?: (props: typeof __VLS_1) => any;
|
|
5
5
|
};
|
|
6
|
-
declare const __VLS_base: import("vue").DefineComponent<ChipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ChipProps> & Readonly<{}>, {
|
|
7
|
-
label: import("../../types/shared").ComponentLabel;
|
|
8
|
-
size: number | string;
|
|
9
|
-
variant: import("../../types/shared").ComponentVariant | "secondary";
|
|
10
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
6
|
+
declare const __VLS_base: import("vue").DefineComponent<ChipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ChipProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
11
7
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
12
8
|
declare const _default: typeof __VLS_export;
|
|
13
9
|
export default _default;
|
|
@@ -7,13 +7,13 @@ defineOptions({
|
|
|
7
7
|
inheritAttrs: false
|
|
8
8
|
});
|
|
9
9
|
const props = defineProps({
|
|
10
|
-
size: { type: [Number, String], required: false
|
|
10
|
+
size: { type: [Number, String], required: false },
|
|
11
11
|
inset: { type: Boolean, required: false },
|
|
12
|
-
label: { type: [String, Number, Array, null], required: false
|
|
13
|
-
variant: { type: String, required: false
|
|
12
|
+
label: { type: [String, Number, Array, null], required: false },
|
|
13
|
+
variant: { type: String, required: false }
|
|
14
14
|
});
|
|
15
15
|
const chipVariant = tv({
|
|
16
|
-
base: "pxd-chip--label text-xs top-0 right-0 absolute rounded-full border border-background-100 motion-safe:transition-
|
|
16
|
+
base: "pxd-chip--label text-xs top-0 right-0 absolute rounded-full border border-background-100 motion-safe:transition-appearance",
|
|
17
17
|
variants: {
|
|
18
18
|
variant: {
|
|
19
19
|
primary: "bg-primary text-background-100",
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ColorSelectorProps } from './types';
|
|
2
|
+
declare const __VLS_export: import("vue").DefineComponent<ColorSelectorProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
3
|
+
change: (args_0: string) => any;
|
|
4
|
+
"update:modelValue": (args_0: string) => any;
|
|
5
|
+
}, string, import("vue").PublicProps, Readonly<ColorSelectorProps> & Readonly<{
|
|
6
|
+
onChange?: ((args_0: string) => any) | undefined;
|
|
7
|
+
"onUpdate:modelValue"?: ((args_0: string) => any) | undefined;
|
|
8
|
+
}>, {
|
|
9
|
+
colors: string[];
|
|
10
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
11
|
+
declare const _default: typeof __VLS_export;
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { tv } from "tailwind-variants";
|
|
3
|
+
import { computed } from "vue";
|
|
4
|
+
import { useModelValue } from "../../composables/use-model-value";
|
|
5
|
+
import { useConfigProvider } from "../../contexts/config-provider";
|
|
6
|
+
import { getUniqueId } from "../../utils/uid";
|
|
7
|
+
defineOptions({
|
|
8
|
+
name: "PColorSelector",
|
|
9
|
+
inheritAttrs: false,
|
|
10
|
+
model: {
|
|
11
|
+
prop: "modelValue",
|
|
12
|
+
event: "update:modelValue"
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
const props = defineProps({
|
|
16
|
+
size: { type: String, required: false },
|
|
17
|
+
colors: { type: Array, required: false, default: () => ["#000000", "#FFFFFF", "#FF0000", "#00FF00", "#0000FF"] },
|
|
18
|
+
modelValue: { type: String, required: false }
|
|
19
|
+
});
|
|
20
|
+
const emits = defineEmits(["change", "update:modelValue"]);
|
|
21
|
+
const uniqueName = getUniqueId("color-selector");
|
|
22
|
+
const colorSelectorVariants = tv({
|
|
23
|
+
base: "pxd-color-selector--item size-5 cursor-pointer appearance-none rounded-full border-2 border-transparent bg-current self-focus-ring checked:border-current active:scale-85 motion-safe:transition-appearance",
|
|
24
|
+
variants: {
|
|
25
|
+
size: {
|
|
26
|
+
sm: "size-4",
|
|
27
|
+
md: "size-5",
|
|
28
|
+
lg: "size-6"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
const configProvider = useConfigProvider();
|
|
33
|
+
const modelValue = useModelValue(props, emits);
|
|
34
|
+
const computedClasses = computed(
|
|
35
|
+
() => colorSelectorVariants({
|
|
36
|
+
size: props.size || configProvider.size
|
|
37
|
+
})
|
|
38
|
+
);
|
|
39
|
+
function isActive(color) {
|
|
40
|
+
return modelValue.value === color;
|
|
41
|
+
}
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
<template>
|
|
45
|
+
<div role="tabpanel" class="pxd-color-selector gap-2 flex" v-bind="$attrs">
|
|
46
|
+
<template v-for="color in colors" :key="color">
|
|
47
|
+
<input
|
|
48
|
+
type="radio"
|
|
49
|
+
:name="uniqueName"
|
|
50
|
+
:value="color"
|
|
51
|
+
:style="{ color }"
|
|
52
|
+
:class="computedClasses"
|
|
53
|
+
:aria-selected="isActive(color)"
|
|
54
|
+
:checked="isActive(color)"
|
|
55
|
+
:tabindex="isActive(color) ? 0 : -1"
|
|
56
|
+
@change="modelValue = color"
|
|
57
|
+
/>
|
|
58
|
+
</template>
|
|
59
|
+
</div>
|
|
60
|
+
</template>
|
|
61
|
+
|
|
62
|
+
<style>
|
|
63
|
+
.pxd-color-selector--item:checked{box-shadow:inset 0 0 0 2px var(--color-background-100)}
|
|
64
|
+
</style>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ComponentSize } from '../../types/shared/props'
|
|
2
|
+
|
|
3
|
+
export interface ColorSelectorProps {
|
|
4
|
+
size?: ComponentSize
|
|
5
|
+
colors?: string[]
|
|
6
|
+
modelValue?: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface ColorSelectorEmits {
|
|
10
|
+
change: [NonNullable<ColorSelectorProps['modelValue']>]
|
|
11
|
+
'update:modelValue': [NonNullable<ColorSelectorProps['modelValue']>]
|
|
12
|
+
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import type { ListOptionSelected } from '../list/types';
|
|
2
2
|
import type { CommandMenuProps } from './types';
|
|
3
|
-
declare var
|
|
3
|
+
declare var __VLS_20: {}, __VLS_22: {};
|
|
4
4
|
type __VLS_Slots = {} & {
|
|
5
|
-
default?: (props: typeof
|
|
5
|
+
default?: (props: typeof __VLS_20) => any;
|
|
6
6
|
} & {
|
|
7
|
-
footer?: (props: typeof
|
|
7
|
+
footer?: (props: typeof __VLS_22) => any;
|
|
8
8
|
};
|
|
9
9
|
declare const __VLS_base: import("vue").DefineComponent<CommandMenuProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
10
|
-
select: (args_0: MouseEvent, args_1: ListOptionSelected) => any;
|
|
11
10
|
change: (args_0: boolean) => any;
|
|
12
11
|
"update:modelValue": (args_0: boolean) => any;
|
|
12
|
+
select: (args_0: ListOptionSelected, args_1: MouseEvent) => any;
|
|
13
13
|
show: () => any;
|
|
14
14
|
hide: () => any;
|
|
15
15
|
}, string, import("vue").PublicProps, Readonly<CommandMenuProps> & Readonly<{
|
|
16
|
-
onSelect?: ((args_0: MouseEvent, args_1: ListOptionSelected) => any) | undefined;
|
|
17
16
|
onChange?: ((args_0: boolean) => any) | undefined;
|
|
18
17
|
"onUpdate:modelValue"?: ((args_0: boolean) => any) | undefined;
|
|
18
|
+
onSelect?: ((args_0: ListOptionSelected, args_1: MouseEvent) => any) | undefined;
|
|
19
19
|
onShow?: (() => any) | undefined;
|
|
20
20
|
onHide?: (() => any) | undefined;
|
|
21
21
|
}>, {
|
|
22
|
-
placeholder: string;
|
|
23
22
|
modelValue: boolean;
|
|
23
|
+
placeholder: string;
|
|
24
24
|
closeOnPressEscape: boolean;
|
|
25
25
|
closeOnClickOverlay: boolean;
|
|
26
26
|
closeOnSelectItem: boolean;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { computed, shallowRef } from "vue";
|
|
3
|
+
import { useListFilter } from "../../composables/use-list-filter";
|
|
4
4
|
import { PRESET_MEDIA_QUERIES, useMediaQuery } from "../../composables/use-media-query";
|
|
5
5
|
import { useModelValue } from "../../composables/use-model-value";
|
|
6
6
|
import { useConfigProvider } from "../../contexts/config-provider";
|
|
7
|
-
import {
|
|
7
|
+
import { provideListFilterContext } from "../../contexts/list";
|
|
8
8
|
import { getUniqueId } from "../../utils/uid";
|
|
9
|
-
import PButton from "../button/index.vue";
|
|
10
9
|
import PList from "../list/index.vue";
|
|
11
10
|
import PModal from "../modal/index.vue";
|
|
12
11
|
defineOptions({
|
|
@@ -29,20 +28,10 @@ const emits = defineEmits(["update:modelValue", "select", "change", "show", "hid
|
|
|
29
28
|
const uniqueId = getUniqueId();
|
|
30
29
|
const configProvider = useConfigProvider();
|
|
31
30
|
const modelValue = useModelValue(props, emits);
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
async valueChange(v) {
|
|
37
|
-
if (!v) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
await nextTick();
|
|
41
|
-
listRef.value.updateListItem();
|
|
42
|
-
listRef.value.setFirstAsActive();
|
|
43
|
-
isEmptyResult.value = listRef.value.isNoVisibleItem();
|
|
44
|
-
}
|
|
45
|
-
});
|
|
31
|
+
const filterKeyword = shallowRef("");
|
|
32
|
+
const filterContext = useListFilter({ keyword: filterKeyword });
|
|
33
|
+
const isSmallScreen = useMediaQuery(PRESET_MEDIA_QUERIES.IS_XS);
|
|
34
|
+
const isEmptyResult = computed(() => filterKeyword.value && filterContext.visibleCount.value === 0);
|
|
46
35
|
function hideModal() {
|
|
47
36
|
filterKeyword.value = "";
|
|
48
37
|
emits("hide");
|
|
@@ -53,23 +42,23 @@ function showModal() {
|
|
|
53
42
|
function closeModal() {
|
|
54
43
|
modelValue.value = false;
|
|
55
44
|
}
|
|
56
|
-
function onListItemSelect(
|
|
57
|
-
emits("select",
|
|
45
|
+
function onListItemSelect(item, ev) {
|
|
46
|
+
emits("select", item, ev);
|
|
58
47
|
if (props.closeOnSelectItem) {
|
|
59
48
|
closeModal();
|
|
60
49
|
}
|
|
61
50
|
}
|
|
62
|
-
|
|
51
|
+
provideListFilterContext(filterContext);
|
|
63
52
|
</script>
|
|
64
53
|
|
|
65
54
|
<template>
|
|
66
55
|
<PModal
|
|
67
56
|
v-model="modelValue"
|
|
68
57
|
width="640px"
|
|
69
|
-
class="pxd-command-menu max-sm:
|
|
58
|
+
class="pxd-command-menu max-sm:h-full"
|
|
70
59
|
content-class="!p-0 overflow-hidden"
|
|
71
60
|
wrapper-class="sm:top-1/8 sm:translate-y-0"
|
|
72
|
-
:auto-focus-element="
|
|
61
|
+
:auto-focus-element="!isSmallScreen"
|
|
73
62
|
:close-on-press-escape="closeOnPressEscape"
|
|
74
63
|
:close-on-click-overlay="closeOnClickOverlay"
|
|
75
64
|
v-bind="$attrs"
|
|
@@ -98,29 +87,31 @@ provideListFilterValue(deferredFilterKeyword);
|
|
|
98
87
|
class="h-7 flex-1 shrink-0 appearance-none border-none bg-transparent font-inherit text-foreground outline-none"
|
|
99
88
|
/>
|
|
100
89
|
|
|
101
|
-
<
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
class="px-0! text-xs shrink-0"
|
|
90
|
+
<button
|
|
91
|
+
type="button"
|
|
92
|
+
class="px-1.5 h-5 text-xs shrink-0 cursor-pointer appearance-none rounded-sm border bg-background-100 self-focus-ring hover:bg-background-hover active:bg-background-active motion-safe:transition-colors"
|
|
105
93
|
@click="closeModal"
|
|
106
94
|
>
|
|
107
95
|
Esc
|
|
108
|
-
</
|
|
96
|
+
</button>
|
|
109
97
|
</label>
|
|
110
98
|
</template>
|
|
111
99
|
|
|
112
100
|
<PList
|
|
113
|
-
ref="listRef"
|
|
114
101
|
:loop="false"
|
|
115
102
|
class="sm:max-h-110 h-full"
|
|
103
|
+
:default-active-index="0"
|
|
116
104
|
:toggle-on-key-press="modelValue"
|
|
117
105
|
@select="onListItemSelect"
|
|
118
106
|
>
|
|
119
107
|
<slot />
|
|
120
108
|
|
|
121
|
-
<p
|
|
122
|
-
|
|
123
|
-
|
|
109
|
+
<p
|
|
110
|
+
v-if="filterKeyword && isEmptyResult"
|
|
111
|
+
class="py-7.5 text-sm text-center text-foreground-secondary"
|
|
112
|
+
>
|
|
113
|
+
{{ configProvider.locale.results.searchText }}
|
|
114
|
+
<span class="whitespace-pre text-foreground">"{{ filterKeyword }}"</span>
|
|
124
115
|
</p>
|
|
125
116
|
</PList>
|
|
126
117
|
|
|
@@ -1,19 +1,28 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
+
import { computed } from "vue";
|
|
3
|
+
import { provideListFilterGroupId, useListFilterContext } from "../../contexts/list";
|
|
4
|
+
import { getUniqueId } from "../../utils/uid";
|
|
2
5
|
defineOptions({
|
|
3
6
|
name: "PCommandMenuGroup",
|
|
4
7
|
inheritAttrs: false
|
|
5
8
|
});
|
|
6
9
|
defineProps({
|
|
7
|
-
label: { type: [String, Number, Array, null], required:
|
|
10
|
+
label: { type: [String, Number, Array, null], required: true }
|
|
8
11
|
});
|
|
12
|
+
const groupId = getUniqueId("list-group");
|
|
13
|
+
const listFilterContext = useListFilterContext(null);
|
|
14
|
+
const isHidden = computed(() => {
|
|
15
|
+
if (!listFilterContext || !listFilterContext.searchValue.value.trim()) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return !listFilterContext.isGroupVisible(groupId);
|
|
19
|
+
});
|
|
20
|
+
provideListFilterGroupId(groupId);
|
|
9
21
|
</script>
|
|
10
22
|
|
|
11
23
|
<template>
|
|
12
|
-
<div class="pxd-command-menu-group" role="presentation" v-bind="$attrs">
|
|
13
|
-
<div
|
|
14
|
-
aria-hidden="true"
|
|
15
|
-
class="h-10 px-2 flex items-center text-13px text-foreground-secondary only:hidden empty:hidden"
|
|
16
|
-
>
|
|
24
|
+
<div class="pxd-command-menu-group" role="presentation" :hidden="isHidden" v-bind="$attrs">
|
|
25
|
+
<div aria-hidden="true" class="h-10 px-2 flex items-center text-13 text-gray-900">
|
|
17
26
|
{{ label }}
|
|
18
27
|
</div>
|
|
19
28
|
|
|
@@ -2,11 +2,11 @@ import type { CountdownProps } from './types';
|
|
|
2
2
|
declare var __VLS_1: {
|
|
3
3
|
active: boolean;
|
|
4
4
|
times: {
|
|
5
|
-
dd:
|
|
6
|
-
hh:
|
|
7
|
-
mm:
|
|
8
|
-
ss:
|
|
9
|
-
ms:
|
|
5
|
+
dd: string;
|
|
6
|
+
hh: string;
|
|
7
|
+
mm: string;
|
|
8
|
+
ss: string;
|
|
9
|
+
ms: string;
|
|
10
10
|
};
|
|
11
11
|
};
|
|
12
12
|
type __VLS_Slots = {} & {
|
|
@@ -15,11 +15,11 @@ type __VLS_Slots = {} & {
|
|
|
15
15
|
declare const __VLS_base: import("vue").DefineComponent<CountdownProps, {
|
|
16
16
|
reset: () => void;
|
|
17
17
|
times: import("vue").ComputedRef<{
|
|
18
|
-
dd:
|
|
19
|
-
hh:
|
|
20
|
-
mm:
|
|
21
|
-
ss:
|
|
22
|
-
ms:
|
|
18
|
+
dd: string;
|
|
19
|
+
hh: string;
|
|
20
|
+
mm: string;
|
|
21
|
+
ss: string;
|
|
22
|
+
ms: string;
|
|
23
23
|
}>;
|
|
24
24
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
25
25
|
change: (active: boolean) => any;
|
|
@@ -31,12 +31,12 @@ declare const __VLS_base: import("vue").DefineComponent<CountdownProps, {
|
|
|
31
31
|
onFinish?: (() => any) | undefined;
|
|
32
32
|
}>, {
|
|
33
33
|
format: string;
|
|
34
|
+
millisecond: boolean;
|
|
34
35
|
endTime: number;
|
|
35
36
|
durations: number;
|
|
36
37
|
active: boolean;
|
|
37
38
|
autoReset: boolean;
|
|
38
39
|
precision: number;
|
|
39
|
-
millisecond: boolean;
|
|
40
40
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
41
41
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
42
42
|
declare const _default: typeof __VLS_export;
|
|
@@ -13,27 +13,27 @@ type __VLS_Slots = {} & {
|
|
|
13
13
|
};
|
|
14
14
|
declare const __VLS_base: import("vue").DefineComponent<DrawerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
15
15
|
change: (args_0: boolean) => any;
|
|
16
|
-
"update:modelValue": (
|
|
16
|
+
"update:modelValue": (visible: boolean) => any;
|
|
17
17
|
show: () => any;
|
|
18
18
|
hide: () => any;
|
|
19
|
-
"
|
|
20
|
-
"
|
|
19
|
+
"outside-click": (args_0: PointerEvent) => any;
|
|
20
|
+
"visible-change": (visible: boolean) => any;
|
|
21
21
|
}, string, import("vue").PublicProps, Readonly<DrawerProps> & Readonly<{
|
|
22
22
|
onChange?: ((args_0: boolean) => any) | undefined;
|
|
23
|
-
"onUpdate:modelValue"?: ((
|
|
23
|
+
"onUpdate:modelValue"?: ((visible: boolean) => any) | undefined;
|
|
24
24
|
onShow?: (() => any) | undefined;
|
|
25
25
|
onHide?: (() => any) | undefined;
|
|
26
|
-
"
|
|
27
|
-
"
|
|
26
|
+
"onOutside-click"?: ((args_0: PointerEvent) => any) | undefined;
|
|
27
|
+
"onVisible-change"?: ((visible: boolean) => any) | undefined;
|
|
28
28
|
}>, {
|
|
29
29
|
modelValue: boolean;
|
|
30
|
-
|
|
30
|
+
position: import("../../types/shared").BasePosition;
|
|
31
31
|
autoFocusElement: string | boolean;
|
|
32
32
|
appendToBody: boolean;
|
|
33
|
+
closeOnPressEscape: boolean;
|
|
33
34
|
closeOnClickOverlay: boolean;
|
|
34
35
|
defaultHeaderStyle: boolean;
|
|
35
36
|
defaultFooterStyle: boolean;
|
|
36
|
-
position: import("../../types/shared").BasePosition;
|
|
37
37
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
38
38
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
39
39
|
declare const _default: typeof __VLS_export;
|
|
@@ -13,6 +13,7 @@ defineOptions({
|
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
15
|
const props = defineProps({
|
|
16
|
+
zIndex: { type: Number, required: false },
|
|
16
17
|
title: { type: [String, Number, Array, null], required: false },
|
|
17
18
|
subtitle: { type: [String, Number, Array, null], required: false },
|
|
18
19
|
size: { type: [Number, String], required: false },
|
|
@@ -43,13 +44,10 @@ const defaultStyles = computed(() => ({
|
|
|
43
44
|
footerClass: props.defaultFooterStyle ? "border-t pt-4 bg-background-200 dark:bg-background-100" : ""
|
|
44
45
|
}));
|
|
45
46
|
const transitionName = computed(() => `pxd-transition--drawer-${ensurePosition.value}`);
|
|
46
|
-
const computedStyle = computed(() => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
return styles;
|
|
52
|
-
});
|
|
47
|
+
const computedStyle = computed(() => ({
|
|
48
|
+
"--modal-index": props.zIndex,
|
|
49
|
+
"--drawer-size": getCssUnitValue(props.size)
|
|
50
|
+
}));
|
|
53
51
|
const focusTrapOptions = computed(() => ({
|
|
54
52
|
autoFocusElement: props.autoFocusElement,
|
|
55
53
|
escapeDeactivates: props.closeOnPressEscape,
|
|
@@ -90,7 +88,12 @@ watch(
|
|
|
90
88
|
@escape="closeOverlayIfNeed"
|
|
91
89
|
@click="onOverlayClick"
|
|
92
90
|
>
|
|
93
|
-
<Transition
|
|
91
|
+
<Transition
|
|
92
|
+
appear
|
|
93
|
+
mode="out-in"
|
|
94
|
+
:name="transitionName"
|
|
95
|
+
class="default-transition-duration default-transition-timing-function"
|
|
96
|
+
>
|
|
94
97
|
<div
|
|
95
98
|
v-if="isVisible"
|
|
96
99
|
ref="drawerRef"
|
|
@@ -98,7 +101,7 @@ watch(
|
|
|
98
101
|
tabindex="-1"
|
|
99
102
|
aria-modal="true"
|
|
100
103
|
:aria-expanded="isVisible"
|
|
101
|
-
class="pxd-drawer group/drawer translate-z-0
|
|
104
|
+
class="pxd-drawer group/drawer translate-z-0 pointer-events-auto fixed z-(--modal-index) flex max-h-full max-w-full flex-col bg-background-100 shadow-border-modal outline-none"
|
|
102
105
|
:class="wrapperClass"
|
|
103
106
|
:style="computedStyle"
|
|
104
107
|
:data-position="ensurePosition"
|
|
@@ -146,5 +149,5 @@ watch(
|
|
|
146
149
|
</template>
|
|
147
150
|
|
|
148
151
|
<style>
|
|
149
|
-
.pxd-drawer[data-position=left]{bottom:0;left:0;top:0}.pxd-drawer[data-position=top]{left:0;right:0;top:0}.pxd-drawer[data-position=right]{bottom:0;right:0;top:0}.pxd-drawer[data-position=bottom]{bottom:0;left:0;right:0}.pxd-drawer[data-position=left],.pxd-drawer[data-position=right]{width:var(--drawer-size,
|
|
152
|
+
.pxd-drawer[data-position=left]{bottom:0;left:0;top:0}.pxd-drawer[data-position=top]{left:0;right:0;top:0}.pxd-drawer[data-position=right]{bottom:0;right:0;top:0}.pxd-drawer[data-position=bottom]{bottom:0;left:0;right:0}.pxd-drawer[data-position=left],.pxd-drawer[data-position=right]{width:var(--drawer-size,30vw)}.pxd-drawer[data-position=bottom],.pxd-drawer[data-position=top]{height:var(--drawer-size,30vh)}.pxd-transition--drawer-bottom-enter-active,.pxd-transition--drawer-bottom-leave-active,.pxd-transition--drawer-left-enter-active,.pxd-transition--drawer-left-leave-active,.pxd-transition--drawer-right-enter-active,.pxd-transition--drawer-right-leave-active,.pxd-transition--drawer-top-enter-active,.pxd-transition--drawer-top-leave-active{transition-property:transform}.pxd-transition--drawer-right-enter-from,.pxd-transition--drawer-right-leave-to{transform:translateX(100%)}.pxd-transition--drawer-left-enter-from,.pxd-transition--drawer-left-leave-to{transform:translateX(-100%)}.pxd-transition--drawer-top-enter-from,.pxd-transition--drawer-top-leave-to{transform:translateY(-100%)}.pxd-transition--drawer-bottom-enter-from,.pxd-transition--drawer-bottom-leave-to{transform:translateY(100%)}
|
|
150
153
|
</style>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { BasePosition, ComponentClass, ComponentLabel } from '../../types/shared'
|
|
2
2
|
|
|
3
3
|
export interface DrawerProps {
|
|
4
|
+
zIndex?: number
|
|
4
5
|
title?: ComponentLabel
|
|
5
6
|
subtitle?: ComponentLabel
|
|
6
7
|
size?: number | string
|
|
@@ -21,7 +22,7 @@ export interface DrawerEmits {
|
|
|
21
22
|
show: []
|
|
22
23
|
hide: []
|
|
23
24
|
change: [boolean]
|
|
24
|
-
'outside-click': [
|
|
25
|
-
'visible-change': [boolean]
|
|
26
|
-
'update:modelValue': [boolean]
|
|
25
|
+
'outside-click': [PointerEvent]
|
|
26
|
+
'visible-change': [visible: boolean]
|
|
27
|
+
'update:modelValue': [visible: boolean]
|
|
27
28
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { EllipsisTextProps } from './types';
|
|
2
|
-
declare const __VLS_export: import("vue").DefineComponent<EllipsisTextProps, {
|
|
2
|
+
declare const __VLS_export: import("vue").DefineComponent<EllipsisTextProps, {
|
|
3
|
+
isExpanded: import("vue").ShallowRef<boolean, boolean>;
|
|
4
|
+
isOverflow: import("vue").ShallowRef<boolean, boolean>;
|
|
5
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
3
6
|
toggle: (expanded: boolean) => any;
|
|
4
7
|
}, string, import("vue").PublicProps, Readonly<EllipsisTextProps> & Readonly<{
|
|
5
8
|
onToggle?: ((expanded: boolean) => any) | undefined;
|