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 { computed, onBeforeUnmount, onMounted, ref
|
|
2
|
+
import { computed, onBeforeUnmount, onMounted, ref } from "vue";
|
|
3
3
|
import { useDocumentHidden } from "../../composables/use-document-hidden";
|
|
4
4
|
import { UPDATE_MESSAGE_EVENT_NAME } from "../../composables/use-message";
|
|
5
5
|
import { cachedOff, cachedOn } from "../../utils/event";
|
|
@@ -7,6 +7,9 @@ import { getCssUnitValue } from "../../utils/format";
|
|
|
7
7
|
import { isServer } from "../../utils/is";
|
|
8
8
|
import PMessageItem from "../message-item/index.vue";
|
|
9
9
|
import PTeleport from "../teleport/index.vue";
|
|
10
|
+
import { useGroupExpand } from "./composables/use-group-expand";
|
|
11
|
+
import { useMessageTimer } from "./composables/use-message-timer";
|
|
12
|
+
import { usePromiseMessage } from "./composables/use-promise-message";
|
|
10
13
|
defineOptions({
|
|
11
14
|
name: "PMessage",
|
|
12
15
|
inheritAttrs: false
|
|
@@ -19,15 +22,21 @@ const props = defineProps({
|
|
|
19
22
|
position: { type: null, required: false, default: "top" }
|
|
20
23
|
});
|
|
21
24
|
const emits = defineEmits(["close"]);
|
|
25
|
+
const groupMessages = ref([]);
|
|
26
|
+
const { setAutoCloseTimer, pauseMessage, resumeMessage, clearTimers, pauseAll, resumeAll } = useMessageTimer(closeMessageById);
|
|
27
|
+
const { handlePromiseMessage } = usePromiseMessage(setAutoCloseTimer);
|
|
28
|
+
const { groupExpand, collapse, onPointerEnter, onPointerLeave } = useGroupExpand({
|
|
29
|
+
expand: () => props.expand,
|
|
30
|
+
onPauseAll: () => pauseAll(groupMessages.value),
|
|
31
|
+
onResumeAll: () => resumeAll(groupMessages.value)
|
|
32
|
+
});
|
|
22
33
|
useDocumentHidden((isHidden) => {
|
|
23
34
|
if (isHidden) {
|
|
24
|
-
|
|
35
|
+
pauseAll(groupMessages.value);
|
|
25
36
|
} else {
|
|
26
|
-
|
|
37
|
+
resumeAll(groupMessages.value);
|
|
27
38
|
}
|
|
28
39
|
});
|
|
29
|
-
const groupExpand = ref(props.expand);
|
|
30
|
-
const groupMessages = ref([]);
|
|
31
40
|
const messageGroupStyle = computed(() => {
|
|
32
41
|
const frontHeight = groupMessages.value[0]?.height || 0;
|
|
33
42
|
const visibleItemCounts = Math.min(props.max, groupMessages.value.length);
|
|
@@ -51,43 +60,6 @@ function getMessageById(id) {
|
|
|
51
60
|
message
|
|
52
61
|
};
|
|
53
62
|
}
|
|
54
|
-
function setAutoCloseTimer(message) {
|
|
55
|
-
message._startedAtMs = Date.now();
|
|
56
|
-
if (message._remainingMs == null) {
|
|
57
|
-
message._remainingMs = message.durations;
|
|
58
|
-
}
|
|
59
|
-
if (message._timerId) {
|
|
60
|
-
clearTimeout(message._timerId);
|
|
61
|
-
}
|
|
62
|
-
message._timerId = setTimeout(() => {
|
|
63
|
-
closeMessageById(message.id);
|
|
64
|
-
}, message._remainingMs);
|
|
65
|
-
}
|
|
66
|
-
function pauseMessage(message) {
|
|
67
|
-
if (!message.durations || message.durations <= 0) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
if (message._timerId) {
|
|
71
|
-
clearTimeout(message._timerId);
|
|
72
|
-
message._timerId = void 0;
|
|
73
|
-
}
|
|
74
|
-
if (message._startedAtMs != null) {
|
|
75
|
-
const elapsed = Date.now() - message._startedAtMs;
|
|
76
|
-
const previousRemaining = message._remainingMs ?? message.durations;
|
|
77
|
-
message._remainingMs = Math.max(0, previousRemaining - elapsed);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
function resumeMessage(message) {
|
|
81
|
-
if (!message.durations || message.durations <= 0) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
const remaining = message._remainingMs ?? 0;
|
|
85
|
-
if (remaining <= 100) {
|
|
86
|
-
closeMessageById(message.id);
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
setAutoCloseTimer(message);
|
|
90
|
-
}
|
|
91
63
|
function pauseMessageById(id) {
|
|
92
64
|
if (!id) {
|
|
93
65
|
return;
|
|
@@ -117,63 +89,14 @@ function closeMessageById(id) {
|
|
|
117
89
|
}
|
|
118
90
|
groupMessages.value.splice(index, 1);
|
|
119
91
|
if (!props.expand && groupMessages.value.length === 0) {
|
|
120
|
-
|
|
92
|
+
collapse();
|
|
121
93
|
}
|
|
122
94
|
emits("close", id);
|
|
123
95
|
}
|
|
124
96
|
function clearMessage() {
|
|
125
|
-
groupMessages.value
|
|
126
|
-
if (m._timerId) {
|
|
127
|
-
clearTimeout(m._timerId);
|
|
128
|
-
m._timerId = void 0;
|
|
129
|
-
}
|
|
130
|
-
});
|
|
97
|
+
clearTimers(groupMessages.value);
|
|
131
98
|
groupMessages.value = [];
|
|
132
99
|
}
|
|
133
|
-
function resolvePromiseMessage(handler, data) {
|
|
134
|
-
if (!handler) {
|
|
135
|
-
return void 0;
|
|
136
|
-
}
|
|
137
|
-
if (typeof handler === "function") {
|
|
138
|
-
const result = handler(data);
|
|
139
|
-
return typeof result === "string" ? result : void 0;
|
|
140
|
-
}
|
|
141
|
-
return typeof handler === "string" ? handler : void 0;
|
|
142
|
-
}
|
|
143
|
-
function handlePromiseMessage(message) {
|
|
144
|
-
if (!message.promise) {
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
let promiseResult;
|
|
148
|
-
message.promise.then((data) => {
|
|
149
|
-
promiseResult = data;
|
|
150
|
-
message.type = "success";
|
|
151
|
-
const successMessage = resolvePromiseMessage(message.success, data);
|
|
152
|
-
if (successMessage) {
|
|
153
|
-
message.message = successMessage;
|
|
154
|
-
}
|
|
155
|
-
}).catch((err) => {
|
|
156
|
-
promiseResult = err;
|
|
157
|
-
message.type = "error";
|
|
158
|
-
const errorMessage = resolvePromiseMessage(message.error, err);
|
|
159
|
-
if (errorMessage) {
|
|
160
|
-
message.message = errorMessage;
|
|
161
|
-
}
|
|
162
|
-
}).finally(() => {
|
|
163
|
-
const finallyMessage = resolvePromiseMessage(message.finally, promiseResult);
|
|
164
|
-
if (finallyMessage) {
|
|
165
|
-
message.message = finallyMessage;
|
|
166
|
-
}
|
|
167
|
-
message.promise = void 0;
|
|
168
|
-
message.success = void 0;
|
|
169
|
-
message.error = void 0;
|
|
170
|
-
message.finally = void 0;
|
|
171
|
-
if (message.durations && message.durations > 0) {
|
|
172
|
-
message._remainingMs = message.durations;
|
|
173
|
-
setAutoCloseTimer(message);
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
100
|
function handleCreateMessage(data) {
|
|
178
101
|
if (!data || data.group !== props.group) {
|
|
179
102
|
return;
|
|
@@ -187,15 +110,6 @@ function handleCreateMessage(data) {
|
|
|
187
110
|
setAutoCloseTimer(message);
|
|
188
111
|
}
|
|
189
112
|
}
|
|
190
|
-
function handleRemoveMessage(data) {
|
|
191
|
-
if (!data || !data.id) {
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
closeMessageById(data.id);
|
|
195
|
-
}
|
|
196
|
-
function handleClearMessages() {
|
|
197
|
-
clearMessage();
|
|
198
|
-
}
|
|
199
113
|
function onUpdateMessage({ detail }) {
|
|
200
114
|
if (detail.group !== props.group) {
|
|
201
115
|
return;
|
|
@@ -208,60 +122,17 @@ function onUpdateMessage({ detail }) {
|
|
|
208
122
|
break;
|
|
209
123
|
case "remove":
|
|
210
124
|
if (detail.data) {
|
|
211
|
-
|
|
125
|
+
const { id } = detail.data;
|
|
126
|
+
if (id) {
|
|
127
|
+
closeMessageById(id);
|
|
128
|
+
}
|
|
212
129
|
}
|
|
213
130
|
break;
|
|
214
131
|
case "clear":
|
|
215
|
-
|
|
132
|
+
clearMessage();
|
|
216
133
|
break;
|
|
217
134
|
}
|
|
218
135
|
}
|
|
219
|
-
function pauseAllMessages() {
|
|
220
|
-
groupMessages.value.forEach(pauseMessage);
|
|
221
|
-
}
|
|
222
|
-
function resumeAllMessages() {
|
|
223
|
-
groupMessages.value.forEach(resumeMessage);
|
|
224
|
-
}
|
|
225
|
-
const TRANSITION_LOCK_MS = 250;
|
|
226
|
-
const LEAVE_DEBOUNCE_MS = 200;
|
|
227
|
-
let leaveTimeoutId;
|
|
228
|
-
let isTransitioning = false;
|
|
229
|
-
function onPointerEnter() {
|
|
230
|
-
clearTimeout(leaveTimeoutId);
|
|
231
|
-
if (groupExpand.value || isTransitioning) {
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
isTransitioning = true;
|
|
235
|
-
groupExpand.value = true;
|
|
236
|
-
pauseAllMessages();
|
|
237
|
-
setTimeout(() => {
|
|
238
|
-
isTransitioning = false;
|
|
239
|
-
}, TRANSITION_LOCK_MS);
|
|
240
|
-
}
|
|
241
|
-
function onPointerLeave() {
|
|
242
|
-
clearTimeout(leaveTimeoutId);
|
|
243
|
-
if (isTransitioning) {
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
leaveTimeoutId = setTimeout(() => {
|
|
247
|
-
resumeAllMessages();
|
|
248
|
-
if (props.expand) {
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
isTransitioning = true;
|
|
252
|
-
groupExpand.value = false;
|
|
253
|
-
setTimeout(() => {
|
|
254
|
-
isTransitioning = false;
|
|
255
|
-
}, TRANSITION_LOCK_MS);
|
|
256
|
-
}, LEAVE_DEBOUNCE_MS);
|
|
257
|
-
}
|
|
258
|
-
watch(
|
|
259
|
-
() => props.expand,
|
|
260
|
-
(isExpand) => {
|
|
261
|
-
groupExpand.value = isExpand;
|
|
262
|
-
},
|
|
263
|
-
{ immediate: true }
|
|
264
|
-
);
|
|
265
136
|
onMounted(() => {
|
|
266
137
|
if (isServer()) {
|
|
267
138
|
return;
|
|
@@ -297,10 +168,11 @@ defineExpose({
|
|
|
297
168
|
appear
|
|
298
169
|
tag="ol"
|
|
299
170
|
name="pxd-transition-message"
|
|
300
|
-
class="pxd-message--group min-w-16 p-0 m-0 flex h-auto w-full"
|
|
171
|
+
class="pxd-message--group min-w-16 p-0 m-0 flex h-auto w-full max-w-full"
|
|
301
172
|
:class="{ 'gap-3': groupExpand }"
|
|
302
173
|
@pointerenter="onPointerEnter"
|
|
303
174
|
@pointerleave="onPointerLeave"
|
|
175
|
+
@pointercancel="onPointerLeave"
|
|
304
176
|
>
|
|
305
177
|
<PMessageItem
|
|
306
178
|
v-for="(item, index) of groupMessages"
|
|
@@ -320,7 +192,6 @@ defineExpose({
|
|
|
320
192
|
--message-width: 356px;
|
|
321
193
|
|
|
322
194
|
.pxd-message--group {
|
|
323
|
-
max-width: 100vw;
|
|
324
195
|
align-items: center;
|
|
325
196
|
flex-direction: column;
|
|
326
197
|
}
|
|
@@ -384,22 +255,18 @@ defineExpose({
|
|
|
384
255
|
}
|
|
385
256
|
|
|
386
257
|
&[data-expand='true'] {
|
|
387
|
-
.pxd-message--group {
|
|
388
|
-
--message-placeholder-height: calc(var(--message-front-height) * (var(--message-items) + 1));
|
|
389
|
-
}
|
|
390
|
-
|
|
391
258
|
.pxd-message--item {
|
|
392
259
|
--message-item-transform: none;
|
|
393
260
|
position: relative;
|
|
394
261
|
will-change: transform, opacity, height;
|
|
395
262
|
}
|
|
396
|
-
}
|
|
397
263
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
--message-placeholder-height: calc(var(--message-front-height) + var(--message-items) * 12px);
|
|
264
|
+
.pxd-transition-message-move {
|
|
265
|
+
transition-property: transform, opacity;
|
|
401
266
|
}
|
|
267
|
+
}
|
|
402
268
|
|
|
269
|
+
&[data-expand='false'] {
|
|
403
270
|
.pxd-message--item {
|
|
404
271
|
--message-item-transform: translateZ(0)
|
|
405
272
|
translateY(calc(var(--item-offset) * var(--message-item-index)))
|
|
@@ -415,10 +282,13 @@ defineExpose({
|
|
|
415
282
|
}
|
|
416
283
|
}
|
|
417
284
|
}
|
|
285
|
+
|
|
286
|
+
.pxd-transition-message-move {
|
|
287
|
+
transition-duration: 0s;
|
|
288
|
+
}
|
|
418
289
|
}
|
|
419
290
|
|
|
420
291
|
&[data-expand] {
|
|
421
|
-
.pxd-transition-message-move,
|
|
422
292
|
.pxd-transition-message-enter-active,
|
|
423
293
|
.pxd-transition-message-leave-active {
|
|
424
294
|
transition-property: transform, opacity;
|
|
@@ -431,30 +301,8 @@ defineExpose({
|
|
|
431
301
|
.pxd-transition-message-enter-from,
|
|
432
302
|
.pxd-transition-message-leave-to {
|
|
433
303
|
opacity: 0;
|
|
434
|
-
--message-item-transform: translateZ(0) translateY(var(--starting-offset))
|
|
435
|
-
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
.pxd-message--icon {
|
|
439
|
-
&.info {
|
|
440
|
-
color: var(--color-gray-600);
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
&.error {
|
|
444
|
-
color: var(--color-red-700);
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
&.loading {
|
|
448
|
-
animation: spin 1s linear infinite;
|
|
449
|
-
color: var(--color-blue-700);
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
&.warning {
|
|
453
|
-
color: var(--color-amber-700);
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
&.success {
|
|
457
|
-
color: var(--color-green-700);
|
|
304
|
+
--message-item-transform: translateZ(0) translateY(var(--starting-offset))
|
|
305
|
+
scaleX(var(--popover-scale));
|
|
458
306
|
}
|
|
459
307
|
}
|
|
460
308
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MessageItemConfig } from '../../composables/use-message'
|
|
2
2
|
import type { ComponentPosition } from '../../types/shared'
|
|
3
3
|
|
|
4
4
|
export interface MessageProps {
|
|
@@ -10,5 +10,5 @@ export interface MessageProps {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
export interface MessageEmits {
|
|
13
|
-
close: [id:
|
|
13
|
+
close: [id: MessageItemConfig['id']]
|
|
14
14
|
}
|
|
@@ -45,8 +45,7 @@ function setItemHeightInfo() {
|
|
|
45
45
|
if (!itemRef.value) {
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
props.itemData.height = rect.height;
|
|
48
|
+
props.itemData.height = itemRef.value.offsetHeight;
|
|
50
49
|
}
|
|
51
50
|
watch(
|
|
52
51
|
() => props.itemData.message,
|
|
@@ -98,3 +97,28 @@ onMounted(() => {
|
|
|
98
97
|
</PButton>
|
|
99
98
|
</li>
|
|
100
99
|
</template>
|
|
100
|
+
|
|
101
|
+
<style lang="postcss">
|
|
102
|
+
.pxd-message--icon {
|
|
103
|
+
&.info {
|
|
104
|
+
color: var(--color-gray-600);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
&.error {
|
|
108
|
+
color: var(--color-red-700);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&.loading {
|
|
112
|
+
animation: spin 1s linear infinite;
|
|
113
|
+
color: var(--color-blue-700);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
&.warning {
|
|
117
|
+
color: var(--color-amber-700);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
&.success {
|
|
121
|
+
color: var(--color-green-700);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
</style>
|
|
@@ -13,23 +13,23 @@ type __VLS_Slots = {} & {
|
|
|
13
13
|
};
|
|
14
14
|
declare const __VLS_base: import("vue").DefineComponent<ModalProps, {}, {}, {}, {}, 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<ModalProps> & 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
|
-
closeOnPressEscape: boolean;
|
|
31
30
|
autoFocusElement: string | boolean;
|
|
32
31
|
appendToBody: boolean;
|
|
32
|
+
closeOnPressEscape: boolean;
|
|
33
33
|
closeOnClickOverlay: boolean;
|
|
34
34
|
defaultHeaderStyle: boolean;
|
|
35
35
|
defaultFooterStyle: boolean;
|
|
@@ -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
|
width: { type: [String, Number], required: false },
|
|
@@ -27,11 +28,14 @@ const props = defineProps({
|
|
|
27
28
|
closeOnPressEscape: { type: Boolean, required: false, default: false },
|
|
28
29
|
closeOnClickOverlay: { type: Boolean, required: false, default: false }
|
|
29
30
|
});
|
|
30
|
-
const emits = defineEmits(["show", "hide", "change", "
|
|
31
|
+
const emits = defineEmits(["show", "hide", "change", "outside-click", "visible-change", "update:modelValue"]);
|
|
31
32
|
const modalRef = shallowRef();
|
|
32
33
|
const isVisible = useModelValue(props, emits);
|
|
33
34
|
const computedStyle = computed(() => {
|
|
34
|
-
return {
|
|
35
|
+
return {
|
|
36
|
+
"--modal-index": props.zIndex,
|
|
37
|
+
"--modal-width": getCssUnitValue(props.width)
|
|
38
|
+
};
|
|
35
39
|
});
|
|
36
40
|
const defaultStyles = computed(() => ({
|
|
37
41
|
headerClass: props.defaultHeaderStyle ? "pb-4 sm:pb-6 border-b bg-background-200 dark:bg-background-100" : "",
|
|
@@ -85,7 +89,7 @@ watch(
|
|
|
85
89
|
tabindex="-1"
|
|
86
90
|
aria-modal="true"
|
|
87
91
|
:aria-expanded="isVisible"
|
|
88
|
-
class="pxd-modal group/modal left-0 translate-z-0 sm:top-1/2 sm:left-1/2 sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-xl sm:[--o:0] sm:[--t:scale(0.98)] sm:w-
|
|
92
|
+
class="pxd-modal group/modal left-0 translate-z-0 sm:top-1/2 sm:left-1/2 sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-xl sm:[--o:0] sm:[--t:scale(0.98)] sm:w-(--modal-width) max-sm:bottom-0 pointer-events-auto fixed z-(--modal-index) flex w-full max-w-full flex-col overflow-hidden rounded-t-lg bg-background-100 shadow-border-modal outline-none motion-safe:transition-appearance dark:bg-background-200"
|
|
89
93
|
:class="wrapperClass"
|
|
90
94
|
:style="computedStyle"
|
|
91
95
|
v-bind="$attrs"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ComponentClass, ComponentLabel } from '../../types/shared'
|
|
2
2
|
|
|
3
3
|
export interface ModalProps {
|
|
4
|
+
zIndex?: number
|
|
4
5
|
title?: ComponentLabel
|
|
5
6
|
subtitle?: ComponentLabel
|
|
6
7
|
width?: string | number
|
|
@@ -9,6 +10,9 @@ export interface ModalProps {
|
|
|
9
10
|
appendToBody?: boolean
|
|
10
11
|
wrapperClass?: ComponentClass
|
|
11
12
|
contentClass?: ComponentClass
|
|
13
|
+
/**
|
|
14
|
+
* Whether to automatically focus on the first or specified element.
|
|
15
|
+
*/
|
|
12
16
|
autoFocusElement?: string | boolean
|
|
13
17
|
defaultHeaderStyle?: boolean
|
|
14
18
|
defaultFooterStyle?: boolean
|
|
@@ -20,7 +24,7 @@ export interface ModalEmits {
|
|
|
20
24
|
show: []
|
|
21
25
|
hide: []
|
|
22
26
|
change: [boolean]
|
|
23
|
-
'
|
|
24
|
-
'
|
|
25
|
-
'update:modelValue': [boolean]
|
|
27
|
+
'outside-click': [PointerEvent]
|
|
28
|
+
'visible-change': [visible: boolean]
|
|
29
|
+
'update:modelValue': [visible: boolean]
|
|
26
30
|
}
|
|
@@ -39,7 +39,7 @@ const noteVariant = tv({
|
|
|
39
39
|
fill: "border-amber-100 bg-amber-200 text-amber-900"
|
|
40
40
|
},
|
|
41
41
|
default: {
|
|
42
|
-
base: "
|
|
42
|
+
base: "text-gray-900",
|
|
43
43
|
fill: "border-gray-100 bg-gray-200 text-gray-900"
|
|
44
44
|
},
|
|
45
45
|
primary: {
|
|
@@ -68,7 +68,7 @@ const noteVariant = tv({
|
|
|
68
68
|
{ variant: "warning", fill: true, class: "border-amber-100 bg-amber-200 text-amber-900" },
|
|
69
69
|
{ variant: "warning", fill: false, class: "border-amber-500 text-amber-900" },
|
|
70
70
|
{ variant: "default", fill: true, class: "border-gray-100 bg-gray-200 text-gray-900" },
|
|
71
|
-
{ variant: "default", fill: false, class: "
|
|
71
|
+
{ variant: "default", fill: false, class: "text-gray-900" },
|
|
72
72
|
{ variant: "primary", fill: true, class: "border-gray-100 bg-primary text-gray-100" },
|
|
73
73
|
{ variant: "primary", fill: false, class: "border-gray-alpha-400 text-primary" },
|
|
74
74
|
{ variant: "violet", fill: true, class: "text-violet-900 bg-violet-200 border-violet-100" },
|
|
@@ -10,22 +10,23 @@ type __VLS_Slots = {} & {
|
|
|
10
10
|
plusIcon?: (props: typeof __VLS_27) => any;
|
|
11
11
|
};
|
|
12
12
|
declare const __VLS_base: import("vue").DefineComponent<NumberInputProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
13
|
-
input: (args_0: number | null | undefined) => any;
|
|
14
13
|
change: (args_0: number | null | undefined, args_1: Event) => any;
|
|
15
14
|
"update:modelValue": (args_0: number | null | undefined) => any;
|
|
16
|
-
|
|
15
|
+
input: (args_0: number | null | undefined) => any;
|
|
17
16
|
focus: (args_0: FocusEvent) => any;
|
|
17
|
+
blur: (args_0: FocusEvent) => any;
|
|
18
18
|
}, string, import("vue").PublicProps, Readonly<NumberInputProps> & Readonly<{
|
|
19
|
-
onInput?: ((args_0: number | null | undefined) => any) | undefined;
|
|
20
19
|
onChange?: ((args_0: number | null | undefined, args_1: Event) => any) | undefined;
|
|
21
20
|
"onUpdate:modelValue"?: ((args_0: number | null | undefined) => any) | undefined;
|
|
22
|
-
|
|
21
|
+
onInput?: ((args_0: number | null | undefined) => any) | undefined;
|
|
23
22
|
onFocus?: ((args_0: FocusEvent) => any) | undefined;
|
|
23
|
+
onBlur?: ((args_0: FocusEvent) => any) | undefined;
|
|
24
24
|
}>, {
|
|
25
25
|
max: number;
|
|
26
26
|
min: number;
|
|
27
27
|
clearValue: number | null;
|
|
28
28
|
step: number;
|
|
29
|
+
controls: boolean;
|
|
29
30
|
thousandsSeparator: string;
|
|
30
31
|
scientific: boolean;
|
|
31
32
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -20,6 +20,7 @@ const props = defineProps({
|
|
|
20
20
|
step: { type: Number, required: false, default: 1 },
|
|
21
21
|
readonly: { type: Boolean, required: false },
|
|
22
22
|
disabled: { type: Boolean, required: false },
|
|
23
|
+
controls: { type: Boolean, required: false, default: true },
|
|
23
24
|
precision: { type: Number, required: false },
|
|
24
25
|
thousands: { type: Boolean, required: false },
|
|
25
26
|
thousandsSeparator: { type: String, required: false, default: "," },
|
|
@@ -221,6 +222,7 @@ watch(
|
|
|
221
222
|
>
|
|
222
223
|
<template #prefix>
|
|
223
224
|
<button
|
|
225
|
+
v-if="controls"
|
|
224
226
|
tabindex="-1"
|
|
225
227
|
class="flex aspect-square h-full cursor-pointer touch-manipulation appearance-none items-center justify-center border-r font-inherit text-foreground outline-none enabled:hover:bg-background-hover enabled:hover:text-gray-1000 enabled:active:bg-background-active disabled:cursor-not-allowed disabled:bg-gray-100 disabled:text-gray-700 motion-safe:transition-colors"
|
|
226
228
|
:disabled="decreaseDisabled"
|
|
@@ -241,6 +243,7 @@ watch(
|
|
|
241
243
|
<slot name="suffix" />
|
|
242
244
|
|
|
243
245
|
<button
|
|
246
|
+
v-if="controls"
|
|
244
247
|
tabindex="-1"
|
|
245
248
|
class="flex aspect-square h-full cursor-pointer touch-manipulation appearance-none items-center justify-center border-l font-inherit text-foreground outline-none enabled:hover:bg-background-hover enabled:hover:text-gray-1000 enabled:active:bg-background-active disabled:cursor-not-allowed disabled:bg-gray-100 disabled:text-gray-700 motion-safe:transition-colors"
|
|
246
249
|
:disabled="increaseDisabled"
|
|
@@ -4,17 +4,20 @@ type __VLS_Slots = {} & {
|
|
|
4
4
|
default?: (props: typeof __VLS_14) => any;
|
|
5
5
|
};
|
|
6
6
|
declare const __VLS_base: import("vue").DefineComponent<OverlayProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
7
|
-
click: (args_0: MouseEvent) => any;
|
|
8
7
|
"update:modelValue": (args_0: boolean) => any;
|
|
8
|
+
click: (args_0: PointerEvent) => any;
|
|
9
9
|
escape: (args_0: KeyboardEvent) => any;
|
|
10
10
|
}, string, import("vue").PublicProps, Readonly<OverlayProps> & Readonly<{
|
|
11
|
-
onClick?: ((args_0: MouseEvent) => any) | undefined;
|
|
12
11
|
"onUpdate:modelValue"?: ((args_0: boolean) => any) | undefined;
|
|
12
|
+
onClick?: ((args_0: PointerEvent) => any) | undefined;
|
|
13
13
|
onEscape?: ((args_0: KeyboardEvent) => any) | undefined;
|
|
14
14
|
}>, {
|
|
15
15
|
modelValue: boolean;
|
|
16
|
-
|
|
16
|
+
lockScrollOnVisible: boolean;
|
|
17
|
+
showOverlay: boolean;
|
|
17
18
|
appendToBody: boolean;
|
|
19
|
+
closeOnPressEscape: boolean;
|
|
20
|
+
closeOnClickOverlay: boolean;
|
|
18
21
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
22
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
20
23
|
declare const _default: typeof __VLS_export;
|