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.
Files changed (223) hide show
  1. package/LICENSE +21 -0
  2. package/dist/components/_internal/dismiss-container.d.vue.ts +28 -0
  3. package/dist/components/_internal/dismiss-container.vue +162 -0
  4. package/dist/components/_internal/popover-arrow.d.vue.ts +9 -0
  5. package/dist/components/_internal/popover-arrow.vue +38 -0
  6. package/dist/components/active-graph/index.vue +4 -4
  7. package/dist/components/avatar/index.vue +5 -7
  8. package/dist/components/avatar-group/index.d.vue.ts +0 -1
  9. package/dist/components/avatar-group/index.vue +1 -1
  10. package/dist/components/backtop/index.vue +1 -1
  11. package/dist/components/badge/index.d.vue.ts +5 -1
  12. package/dist/components/badge/index.vue +18 -4
  13. package/dist/components/badge/types.d.ts +5 -0
  14. package/dist/components/book/index.vue +1 -1
  15. package/dist/components/browser/index.vue +1 -1
  16. package/dist/components/bubble/index.d.vue.ts +22 -0
  17. package/dist/components/bubble/index.vue +59 -0
  18. package/dist/components/bubble/types.d.ts +6 -0
  19. package/dist/components/button/index.d.vue.ts +0 -2
  20. package/dist/components/button/index.vue +30 -21
  21. package/dist/components/button/types.d.ts +3 -2
  22. package/dist/components/button-group/index.d.vue.ts +14 -0
  23. package/dist/components/button-group/index.vue +26 -0
  24. package/dist/components/button-group/types.d.ts +9 -0
  25. package/dist/components/carousel/index.d.vue.ts +3 -3
  26. package/dist/components/carousel/index.vue +146 -113
  27. package/dist/components/carousel/types.d.ts +1 -1
  28. package/dist/components/carousel-item/index.vue +22 -17
  29. package/dist/components/checkbox/index.vue +6 -6
  30. package/dist/components/checkbox-group/index.d.vue.ts +1 -1
  31. package/dist/components/chip/index.d.vue.ts +1 -5
  32. package/dist/components/chip/index.vue +4 -4
  33. package/dist/components/color-selector/index.d.vue.ts +12 -0
  34. package/dist/components/color-selector/index.vue +64 -0
  35. package/dist/components/color-selector/types.d.ts +12 -0
  36. package/dist/components/command-menu/index.d.vue.ts +6 -6
  37. package/dist/components/command-menu/index.vue +23 -32
  38. package/dist/components/command-menu/types.d.ts +1 -1
  39. package/dist/components/command-menu-group/index.vue +15 -6
  40. package/dist/components/command-menu-group/types.d.ts +1 -1
  41. package/dist/components/countdown/index.d.vue.ts +11 -11
  42. package/dist/components/drawer/index.d.vue.ts +8 -8
  43. package/dist/components/drawer/index.vue +13 -10
  44. package/dist/components/drawer/types.d.ts +4 -3
  45. package/dist/components/ellipsis-text/index.d.vue.ts +4 -1
  46. package/dist/components/ellipsis-text/index.vue +84 -107
  47. package/dist/components/ellipsis-text/types.d.ts +2 -1
  48. package/dist/components/error/index.vue +1 -1
  49. package/dist/components/fader/index.vue +5 -9
  50. package/dist/components/gauge/index.vue +34 -29
  51. package/dist/components/grid/index.vue +1 -1
  52. package/dist/components/grid-item/index.vue +1 -1
  53. package/dist/components/hold-button/index.d.vue.ts +8 -10
  54. package/dist/components/hold-button/index.vue +20 -29
  55. package/dist/components/hold-button/types.d.ts +5 -6
  56. package/dist/components/index.d.ts +7 -0
  57. package/dist/components/index.js +7 -0
  58. package/dist/components/input/index.d.vue.ts +8 -8
  59. package/dist/components/input/index.vue +5 -4
  60. package/dist/components/intersection-observer/index.vue +4 -4
  61. package/dist/components/kbd/index.vue +1 -1
  62. package/dist/components/link-button/index.d.vue.ts +4 -4
  63. package/dist/components/link-button/index.vue +9 -8
  64. package/dist/components/link-button/types.d.ts +0 -3
  65. package/dist/components/list/index.d.vue.ts +10 -15
  66. package/dist/components/list/index.vue +58 -131
  67. package/dist/components/list/types.d.ts +4 -4
  68. package/dist/components/list-item/index.d.vue.ts +2 -2
  69. package/dist/components/list-item/index.vue +44 -39
  70. package/dist/components/loading-bar/index.vue +8 -7
  71. package/dist/components/material/index.vue +24 -46
  72. package/dist/components/menu/index.d.vue.ts +6 -8
  73. package/dist/components/menu/index.vue +18 -24
  74. package/dist/components/menu/types.d.ts +1 -2
  75. package/dist/components/message/composables/use-group-expand.d.ts +13 -0
  76. package/dist/components/message/composables/use-group-expand.js +50 -0
  77. package/dist/components/message/composables/use-message-timer.d.ts +9 -0
  78. package/dist/components/message/composables/use-message-timer.js +61 -0
  79. package/dist/components/message/composables/use-promise-message.d.ts +4 -0
  80. package/dist/components/message/composables/use-promise-message.js +49 -0
  81. package/dist/components/message/index.d.vue.ts +6 -33
  82. package/dist/components/message/index.vue +33 -185
  83. package/dist/components/message/types.d.ts +2 -2
  84. package/dist/components/message-item/index.vue +26 -2
  85. package/dist/components/modal/index.d.vue.ts +7 -7
  86. package/dist/components/modal/index.vue +7 -3
  87. package/dist/components/modal/types.d.ts +7 -3
  88. package/dist/components/note/index.vue +2 -2
  89. package/dist/components/number-input/index.d.vue.ts +5 -4
  90. package/dist/components/number-input/index.vue +3 -0
  91. package/dist/components/number-input/types.d.ts +1 -0
  92. package/dist/components/overlay/index.d.vue.ts +6 -3
  93. package/dist/components/overlay/index.vue +63 -68
  94. package/dist/components/overlay/types.d.ts +5 -4
  95. package/dist/components/pagination/index.vue +2 -2
  96. package/dist/components/pin-input/index.d.vue.ts +1 -1
  97. package/dist/components/pin-input/index.vue +7 -6
  98. package/dist/components/placeholder/index.vue +1 -1
  99. package/dist/components/popover/index.d.vue.ts +7 -8
  100. package/dist/components/popover/index.vue +149 -239
  101. package/dist/components/popover/types.d.ts +5 -5
  102. package/dist/components/progress/index.vue +1 -1
  103. package/dist/components/radio/index.vue +2 -2
  104. package/dist/components/resizable/index.vue +43 -51
  105. package/dist/components/resizable/types.d.ts +1 -1
  106. package/dist/components/resizable-handle/index.d.vue.ts +4 -1
  107. package/dist/components/resizable-handle/index.vue +29 -3
  108. package/dist/components/resizable-panel/index.vue +3 -7
  109. package/dist/components/scalable-text/index.d.vue.ts +9 -0
  110. package/dist/components/scalable-text/index.vue +147 -0
  111. package/dist/components/scalable-text/types.d.ts +12 -0
  112. package/dist/components/scrollable/index.d.vue.ts +2 -2
  113. package/dist/components/scrollable/index.vue +4 -3
  114. package/dist/components/separator/index.d.vue.ts +6 -0
  115. package/dist/components/separator/index.vue +18 -0
  116. package/dist/components/separator/types.d.ts +5 -0
  117. package/dist/components/skeleton/index.d.vue.ts +1 -1
  118. package/dist/components/slider/index.d.vue.ts +1 -1
  119. package/dist/components/slider/index.vue +39 -7
  120. package/dist/components/snippet/index.vue +16 -13
  121. package/dist/components/spinner/index.vue +3 -1
  122. package/dist/components/stack/index.d.vue.ts +1 -1
  123. package/dist/components/stack/index.vue +1 -1
  124. package/dist/components/switch/index.d.vue.ts +1 -1
  125. package/dist/components/switch/index.vue +4 -3
  126. package/dist/components/switch-item/index.vue +1 -1
  127. package/dist/components/tabs/index.d.vue.ts +12 -0
  128. package/dist/components/tabs/index.vue +270 -0
  129. package/dist/components/tabs/types.d.ts +12 -0
  130. package/dist/components/tabs-item/index.d.vue.ts +4 -0
  131. package/dist/components/tabs-item/index.vue +16 -0
  132. package/dist/components/tabs-item/types.d.ts +10 -0
  133. package/dist/components/text/index.vue +1 -1
  134. package/dist/components/textarea/index.d.vue.ts +2 -2
  135. package/dist/components/textarea/index.vue +1 -1
  136. package/dist/components/time-picker/index.d.vue.ts +3 -5
  137. package/dist/components/time-picker/index.vue +53 -45
  138. package/dist/components/time-picker/types.d.ts +1 -2
  139. package/dist/components/toggle/index.d.vue.ts +0 -2
  140. package/dist/components/toggle/index.vue +6 -6
  141. package/dist/components/toggle-button/index.vue +8 -6
  142. package/dist/components/tooltip/index.d.vue.ts +1 -1
  143. package/dist/components/tooltip/index.vue +19 -11
  144. package/dist/components/tooltip/types.d.ts +2 -2
  145. package/dist/components/virtual-list/index.d.vue.ts +8 -8
  146. package/dist/components/virtual-list/index.vue +27 -5
  147. package/dist/components/virtual-list/types.d.ts +3 -0
  148. package/dist/composables/index.d.ts +4 -1
  149. package/dist/composables/index.js +4 -1
  150. package/dist/composables/use-browser-observer.js +2 -2
  151. package/dist/composables/use-client-online.js +2 -2
  152. package/dist/composables/use-color-scheme.js +2 -2
  153. package/dist/composables/use-countdown.js +3 -2
  154. package/dist/composables/use-deferred-value.js +2 -2
  155. package/dist/composables/use-delay-destroy.js +11 -6
  156. package/dist/composables/use-document-hidden.js +2 -2
  157. package/dist/composables/use-focus-trap.js +2 -2
  158. package/dist/composables/use-list-filter.d.ts +11 -0
  159. package/dist/composables/use-list-filter.js +56 -0
  160. package/dist/composables/use-list-navigation.d.ts +27 -0
  161. package/dist/composables/use-list-navigation.js +159 -0
  162. package/dist/composables/use-lock-scroll.js +12 -12
  163. package/dist/composables/use-media-query.js +2 -2
  164. package/dist/composables/use-outside-click.d.ts +1 -1
  165. package/dist/composables/use-outside-click.js +8 -11
  166. package/dist/composables/use-overlay-manager.d.ts +18 -0
  167. package/dist/composables/use-overlay-manager.js +80 -0
  168. package/dist/composables/use-popover-responsive.d.ts +6 -8
  169. package/dist/composables/use-popover-responsive.js +9 -12
  170. package/dist/composables/use-repeat-action.js +2 -2
  171. package/dist/composables/use-swipe-gesture.d.ts +65 -0
  172. package/dist/composables/use-swipe-gesture.js +99 -0
  173. package/dist/composables/use-virtual-list.d.ts +5 -3
  174. package/dist/composables/use-virtual-list.js +25 -14
  175. package/dist/composables/use-window-size.js +2 -2
  176. package/dist/constants/size.d.ts +12 -0
  177. package/dist/constants/size.js +12 -0
  178. package/dist/contexts/button.d.ts +5 -0
  179. package/dist/contexts/button.js +5 -0
  180. package/dist/contexts/carousel.d.ts +2 -1
  181. package/dist/contexts/list.d.ts +23 -3
  182. package/dist/contexts/list.js +6 -2
  183. package/dist/contexts/resizable.d.ts +3 -11
  184. package/dist/contexts/tabs.d.ts +15 -0
  185. package/dist/contexts/tabs.js +2 -0
  186. package/dist/locales/en-us.d.ts +4 -4
  187. package/dist/locales/en-us.js +4 -4
  188. package/dist/locales/zh-cn.d.ts +4 -4
  189. package/dist/locales/zh-cn.js +4 -4
  190. package/dist/plugins/dayjs-millisecond-token.js +1 -1
  191. package/dist/styles/source.css +133 -128
  192. package/dist/styles/styles.css +2 -2
  193. package/dist/styles/tw.css +133 -128
  194. package/dist/types/shared/props.d.ts +1 -0
  195. package/dist/types/shared/utils.d.ts +1 -4
  196. package/dist/utils/date.d.ts +3 -3
  197. package/dist/utils/dom.d.ts +1 -0
  198. package/dist/utils/dom.js +4 -0
  199. package/dist/utils/event.d.ts +2 -1
  200. package/dist/utils/event.js +7 -1
  201. package/dist/utils/format.d.ts +3 -3
  202. package/dist/utils/format.js +5 -4
  203. package/dist/utils/fuzzy-search.d.ts +7 -0
  204. package/dist/utils/fuzzy-search.js +61 -0
  205. package/dist/utils/get.d.ts +2 -0
  206. package/dist/utils/get.js +15 -1
  207. package/dist/utils/index.d.ts +10 -11
  208. package/dist/utils/index.js +2 -3
  209. package/dist/utils/ref.d.ts +2 -2
  210. package/dist/utils/{throttle.d.ts → timing.d.ts} +1 -0
  211. package/dist/utils/{throttle.js → timing.js} +4 -2
  212. package/package.json +40 -37
  213. package/volar.d.ts +7 -0
  214. package/dist/components/overlay/overlay-stack.d.ts +0 -3
  215. package/dist/components/overlay/overlay-stack.js +0 -17
  216. package/dist/composables/use-pointer-gesture.d.ts +0 -180
  217. package/dist/composables/use-pointer-gesture.js +0 -406
  218. package/dist/utils/debounce.d.ts +0 -1
  219. package/dist/utils/debounce.js +0 -1
  220. package/dist/utils/regexp.d.ts +0 -8
  221. package/dist/utils/regexp.js +0 -8
  222. package/dist/utils/responsive.d.ts +0 -3
  223. package/dist/utils/responsive.js +0 -14
@@ -1,5 +1,5 @@
1
1
  <script setup>
2
- import { computed, onBeforeUnmount, onMounted, ref, watch } from "vue";
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
- pauseAllMessages();
35
+ pauseAll(groupMessages.value);
25
36
  } else {
26
- resumeAllMessages();
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
- groupExpand.value = false;
92
+ collapse();
121
93
  }
122
94
  emits("close", id);
123
95
  }
124
96
  function clearMessage() {
125
- groupMessages.value.forEach((m) => {
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
- handleRemoveMessage(detail.data);
125
+ const { id } = detail.data;
126
+ if (id) {
127
+ closeMessageById(id);
128
+ }
212
129
  }
213
130
  break;
214
131
  case "clear":
215
- handleClearMessages();
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
- &[data-expand='false'] {
399
- .pxd-message--group {
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)) scaleX(0.95);
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 { MessageItemType } from '../../composables/use-message'
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: MessageItemType['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
- const rect = itemRef.value.getBoundingClientRect();
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": (args_0: boolean) => any;
16
+ "update:modelValue": (visible: boolean) => any;
17
17
  show: () => any;
18
18
  hide: () => any;
19
- "visible-change": (args_0: boolean) => any;
20
- "outside-click": (args_0: MouseEvent) => any;
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"?: ((args_0: boolean) => any) | undefined;
23
+ "onUpdate:modelValue"?: ((visible: boolean) => any) | undefined;
24
24
  onShow?: (() => any) | undefined;
25
25
  onHide?: (() => any) | undefined;
26
- "onVisible-change"?: ((args_0: boolean) => any) | undefined;
27
- "onOutside-click"?: ((args_0: MouseEvent) => any) | undefined;
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", "visible-change", "outside-click", "update:modelValue"]);
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 { "--modal-width": getCssUnitValue(props.width) };
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-[var(--modal-width,540px)] max-sm:bottom-0 pointer-events-auto fixed z-10 flex w-full max-w-full flex-col overflow-hidden rounded-t-lg bg-background-100 shadow-border-modal outline-none motion-safe:transition-all dark:bg-background-200"
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
- 'visible-change': [boolean]
24
- 'outside-click': [MouseEvent]
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: "border-input text-gray-900",
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: "border-input text-gray-900" },
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
- blur: (args_0: FocusEvent) => any;
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
- onBlur?: ((args_0: FocusEvent) => any) | undefined;
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,6 +4,7 @@ export interface NumberInputProps {
4
4
  step?: number
5
5
  readonly?: boolean
6
6
  disabled?: boolean
7
+ controls?: boolean
7
8
  precision?: number
8
9
  thousands?: boolean
9
10
  thousandsSeparator?: string
@@ -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
- closeOnPressEscape: boolean;
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;