@gx-design-vue/pro-layout 0.1.0-alpha.21 → 0.1.0-alpha.23

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.
@@ -66,7 +66,6 @@ const ProAppPage = /* @__PURE__ */ defineComponent({
66
66
  });
67
67
  const rootClassNames = computed(() => classNames(prefixCls.value, hashId.value, cssVarCls.value, rootCls.value, loading.value && `${prefixCls.value}-loading`, props.class));
68
68
  const maskStyle = computed(() => ({
69
- zIndex: props.spinning?.blur ? 999 : void 0,
70
69
  backgroundColor: props.spinning?.blur ? void 0 : "unset",
71
70
  ...props.spinning?.style || {}
72
71
  }));
@@ -15,6 +15,7 @@ const genAppPageStyle = (token) => {
15
15
  },
16
16
  "&-blur": {
17
17
  position: "absolute",
18
+ zIndex: 999,
18
19
  top: 0,
19
20
  left: 0,
20
21
  width: "100%",
@@ -25,7 +26,7 @@ const genAppPageStyle = (token) => {
25
26
  top: "50%",
26
27
  left: "50%",
27
28
  transform: "translate(-50%, -50%)",
28
- [`${componentCls}-spin-dot,.anticon`]: {
29
+ [`${componentCls}-spin-dot,.anticon,.pro-anticon`]: {
29
30
  fontSize: 32,
30
31
  [`${token.antCls}-spin-dot,.gx-spin-icon`]: { animationDuration: "0.75s" }
31
32
  },
@@ -48,8 +48,8 @@ declare const GPageTransition: import("vue").DefineComponent<import("vue").Extra
48
48
  default: string;
49
49
  };
50
50
  }>> & Readonly<{}>, {
51
- reverse: boolean;
52
51
  direction: string;
52
+ reverse: boolean;
53
53
  name: string;
54
54
  disabled: boolean;
55
55
  }, SlotsType<GPageTransitionSlots>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -14,7 +14,9 @@ interface TabDragItemProps {
14
14
  /**
15
15
  * 页签拖拽排序 —— 精简复刻 dnd-kit 的 useDraggable + sortable 实时让位。
16
16
  *
17
- * - 移动阈值(3px)区分点击与拖拽:未超阈值视为点击,让原生 click 走切换
17
+ * - 按住延迟(200ms)区分点击与拖拽:未超时松手视为点击,让原生 click 走切换
18
+ * - 延迟期间位移超过容差(10px)→ 取消拖拽意图(视为滑动/滚动)
19
+ * - 计时器触发后:draggingKey 赋值 → 拖拽样式出现(cursor: grabbing + 阴影)
18
20
  * - 拖拽项 `transform: translateX(delta)` 跟随指针
19
21
  * - 同组其他 tab 按虚拟插入位置实时 `translate` 让位(CSS translate 属性)
20
22
  * - drop 锚点只在 `item.group === dragGroup` 内查找 → 天然不跨级
@@ -4,8 +4,13 @@ import { nextTick, ref } from "vue";
4
4
  import { useEventListener } from "@vueuse/core";
5
5
  //#region src/components/Tabs/hooks/useTabDrag.ts
6
6
  const IGNORE_SELECTOR = "button, a, input, [data-drag-ignore=\"true\"]";
7
- /** 移动阈值(px),超过才视为拖拽,避免误触影响点击切换 */
8
- const DRAG_THRESHOLD = 3;
7
+ /**
8
+ * 按住延迟(ms),参考 dnd-kit DelayConstraint 默认值。
9
+ * 在此时间内未松手且未发生大位移 → 激活拖拽;否则视为点击或滑动。
10
+ */
11
+ const DRAG_DELAY = 200;
12
+ /** 延迟期间允许的最大位移(px),超过则取消拖拽意图(视为滑动/滚动) */
13
+ const DRAG_DELAY_TOLERANCE = 10;
9
14
  const SCROLL_RESTORE_FRAMES = 2;
10
15
  const DISPLACEMENT_DURATION = 160;
11
16
  const DISPLACEMENT_EASING = "cubic-bezier(0.2, 0, 0, 1)";
@@ -15,7 +20,9 @@ function isIgnoredTarget(target) {
15
20
  /**
16
21
  * 页签拖拽排序 —— 精简复刻 dnd-kit 的 useDraggable + sortable 实时让位。
17
22
  *
18
- * - 移动阈值(3px)区分点击与拖拽:未超阈值视为点击,让原生 click 走切换
23
+ * - 按住延迟(200ms)区分点击与拖拽:未超时松手视为点击,让原生 click 走切换
24
+ * - 延迟期间位移超过容差(10px)→ 取消拖拽意图(视为滑动/滚动)
25
+ * - 计时器触发后:draggingKey 赋值 → 拖拽样式出现(cursor: grabbing + 阴影)
19
26
  * - 拖拽项 `transform: translateX(delta)` 跟随指针
20
27
  * - 同组其他 tab 按虚拟插入位置实时 `translate` 让位(CSS translate 属性)
21
28
  * - drop 锚点只在 `item.group === dragGroup` 内查找 → 天然不跨级
@@ -36,6 +43,8 @@ function useTabDrag(options) {
36
43
  let groupRects = /* @__PURE__ */ new Map();
37
44
  let pendingKey = "";
38
45
  let pendingStartX = 0;
46
+ /** 按住延迟计时器(参考 dnd-kit DelayConstraint) */
47
+ let dragDelayTimer;
39
48
  const { scroll: scrollOnDragMove, start: startAutoScroll, stop: stopAutoScroll } = useAutoScroll(scrollEl, () => pointerClientX, { onScroll: updateDragPosition });
40
49
  function getGroupItems() {
41
50
  return items.value.filter((item) => item.group === dragGroup);
@@ -149,8 +158,8 @@ function useTabDrag(options) {
149
158
  function beginDrag(clientX) {
150
159
  isDragging.value = true;
151
160
  dragStartClientX = clientX;
152
- dragStartScrollLeft = scrollEl.value?.scrollLeft ?? 0;
153
161
  pointerClientX = clientX;
162
+ dragStartScrollLeft = scrollEl.value?.scrollLeft ?? 0;
154
163
  dragEl = queryTabEl(draggingKey.value);
155
164
  recordGroupRects();
156
165
  const dragRect = groupRects.get(draggingKey.value);
@@ -176,16 +185,25 @@ function useTabDrag(options) {
176
185
  if (isIgnoredTarget(event.target)) return;
177
186
  if (enabled && !enabled.value) return;
178
187
  event.preventDefault();
188
+ clearPendingDrag();
179
189
  pendingKey = item.key;
180
190
  pendingStartX = event.clientX;
181
- draggingKey.value = item.key;
182
191
  dragGroup = item.group;
192
+ dragDelayTimer = setTimeout(() => {
193
+ if (!pendingKey) return;
194
+ draggingKey.value = pendingKey;
195
+ pointerClientX = pendingStartX;
196
+ beginDrag(pendingStartX);
197
+ }, DRAG_DELAY);
183
198
  }
184
199
  function handleMousemove(event) {
185
200
  if (!isDragging.value) {
186
201
  if (!pendingKey) return;
187
- if (Math.abs(event.clientX - pendingStartX) < DRAG_THRESHOLD) return;
188
- beginDrag(pendingStartX);
202
+ if (Math.abs(event.clientX - pendingStartX) > DRAG_DELAY_TOLERANCE) {
203
+ clearPendingDrag();
204
+ return;
205
+ }
206
+ return;
189
207
  }
190
208
  pointerClientX = event.clientX;
191
209
  updateDragPosition();
@@ -222,16 +240,22 @@ function useTabDrag(options) {
222
240
  dragEl = null;
223
241
  groupRects = /* @__PURE__ */ new Map();
224
242
  dragPointerOffsetX = 0;
243
+ dragGroup = void 0;
244
+ clearPendingDrag();
245
+ }
246
+ /** 清理延迟计时器与待定状态 */
247
+ function clearPendingDrag() {
248
+ if (dragDelayTimer != null) {
249
+ clearTimeout(dragDelayTimer);
250
+ dragDelayTimer = void 0;
251
+ }
225
252
  pendingKey = "";
253
+ draggingKey.value = "";
226
254
  dragGroup = void 0;
227
255
  }
228
256
  function handleMouseup() {
229
257
  if (isDragging.value) endDrag();
230
- else if (pendingKey) {
231
- pendingKey = "";
232
- draggingKey.value = "";
233
- dragGroup = void 0;
234
- }
258
+ else if (pendingKey) clearPendingDrag();
235
259
  }
236
260
  const documentTarget = typeof document === "undefined" ? void 0 : document;
237
261
  useEventListener(documentTarget, "mousemove", handleMousemove);
@@ -38,14 +38,14 @@ declare function useLayoutBase(props?: {
38
38
  selectedKeys: import("vue").ComputedRef<string[]>;
39
39
  openKeys: import("vue").ComputedRef<string[]>;
40
40
  proClasses: import("vue").ComputedRef<{
41
- siderHeader?: string;
42
- siderFooter?: string;
43
- footer?: string;
41
+ content?: string;
44
42
  header?: string;
45
- breadcrumb?: string;
46
43
  sider?: string;
44
+ breadcrumb?: string;
47
45
  logo?: string;
48
- content?: string;
46
+ siderHeader?: string;
47
+ siderFooter?: string;
48
+ footer?: string;
49
49
  root?: string;
50
50
  siderChildren?: string;
51
51
  logoImage?: string;
@@ -53,14 +53,14 @@ declare function useLayoutBase(props?: {
53
53
  tabs?: string;
54
54
  }>;
55
55
  proStyles: import("vue").ComputedRef<{
56
- siderHeader?: import("vue").CSSProperties;
57
- siderFooter?: import("vue").CSSProperties;
58
- footer?: import("vue").CSSProperties;
56
+ content?: import("vue").CSSProperties;
59
57
  header?: import("vue").CSSProperties;
60
- breadcrumb?: import("vue").CSSProperties;
61
58
  sider?: import("vue").CSSProperties;
59
+ breadcrumb?: import("vue").CSSProperties;
62
60
  logo?: import("vue").CSSProperties;
63
- content?: import("vue").CSSProperties;
61
+ siderHeader?: import("vue").CSSProperties;
62
+ siderFooter?: import("vue").CSSProperties;
63
+ footer?: import("vue").CSSProperties;
64
64
  root?: import("vue").CSSProperties;
65
65
  siderChildren?: import("vue").CSSProperties;
66
66
  logoImage?: import("vue").CSSProperties;