@me-framework/me-ui-antdv-next 0.0.9 → 0.0.10

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.
@@ -0,0 +1,24 @@
1
+ interface DragScrollOptions {
2
+ canScroll: () => boolean;
3
+ translateX: {
4
+ value: number;
5
+ };
6
+ clampTranslateX: () => void;
7
+ updateArrowVisibility: () => void;
8
+ }
9
+ /**
10
+ * 拖动滚动 + 惯性滚动
11
+ * - 鼠标拖动
12
+ * - 触屏滑动
13
+ * - 惯性滚动(松手后继续滑行)
14
+ */
15
+ export declare function useNavDrag(options: DragScrollOptions): {
16
+ isDragging: import('vue').Ref<boolean, boolean>;
17
+ handleDragStart: (e: MouseEvent) => void;
18
+ handleTouchStart: (e: TouchEvent) => void;
19
+ setDragRefs: (scrollEl: HTMLElement | null, listEl: HTMLElement | null) => void;
20
+ getHasDragged: () => boolean;
21
+ resetHasDragged: () => void;
22
+ stopMomentum: () => void;
23
+ };
24
+ export {};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 导航滚动核心逻辑
3
+ * - 水平滚动位移管理
4
+ * - 左右箭头显示控制
5
+ * - 边界限制
6
+ */
7
+ export declare function useNavScroll(scrollRef: {
8
+ value: HTMLElement | null;
9
+ }, listRef: {
10
+ value: HTMLElement | null;
11
+ }): {
12
+ translateX: import('vue').Ref<number, number>;
13
+ showLeftArrow: import('vue').Ref<boolean, boolean>;
14
+ showRightArrow: import('vue').Ref<boolean, boolean>;
15
+ isSmooth: import('vue').Ref<boolean, boolean>;
16
+ isScrollable: import('vue').Ref<boolean, boolean>;
17
+ withSmooth: (action: () => void) => void;
18
+ updateArrowVisibility: () => void;
19
+ clampTranslateX: () => void;
20
+ scrollLeft: () => void;
21
+ scrollRight: () => void;
22
+ canScroll: () => boolean;
23
+ };
@@ -1,31 +1,75 @@
1
- import { MeNavProps, MeNavTabItemData } from './types';
2
- declare var __VLS_1: {}, __VLS_16: {
1
+ import { MeNavProps, MeNavTabItemData, MeNavMenuItem, MeNavBuiltinMenuItem } from './types';
2
+ declare var __VLS_1: {}, __VLS_8: {}, __VLS_10: {
3
3
  item: MeNavTabItemData;
4
- }, __VLS_38: {};
4
+ index: number;
5
+ active: boolean;
6
+ close: () => Promise<void>;
7
+ }, __VLS_12: {
8
+ item: MeNavTabItemData;
9
+ }, __VLS_35: {
10
+ item: MeNavTabItemData;
11
+ }, __VLS_47: {};
5
12
  type __VLS_Slots = {} & {
6
13
  left?: (props: typeof __VLS_1) => any;
7
14
  } & {
8
- icon?: (props: typeof __VLS_16) => any;
15
+ empty?: (props: typeof __VLS_8) => any;
16
+ } & {
17
+ tab?: (props: typeof __VLS_10) => any;
18
+ } & {
19
+ icon?: (props: typeof __VLS_12) => any;
20
+ } & {
21
+ 'close-icon'?: (props: typeof __VLS_35) => any;
9
22
  } & {
10
- right?: (props: typeof __VLS_38) => any;
23
+ right?: (props: typeof __VLS_47) => any;
11
24
  };
12
25
  declare const __VLS_base: import('vue').DefineComponent<MeNavProps, {
13
- scrollToTab: (key?: string) => void;
26
+ scrollToTab: (name?: string) => void;
27
+ scrollTo: (name?: string) => void;
28
+ scrollToStart: () => void;
29
+ scrollToEnd: () => void;
30
+ activeItem: import('vue').ComputedRef<MeNavTabItemData | undefined>;
14
31
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
15
32
  "update:modelValue": (value: string) => any;
16
- "tab-change": (value: string) => any;
17
- "tab-remove": (value: string) => any;
33
+ scroll: (translateX: number) => any;
34
+ contextmenu: (payload: import('./types').MeNavContextMenuPayload) => any;
35
+ refresh: (payload: import('./types').MeNavBuiltinMenuPayload) => any;
36
+ "close-current": (payload: import('./types').MeNavBuiltinMenuPayload) => any;
37
+ "close-others": (payload: import('./types').MeNavBuiltinMenuPayload) => any;
38
+ "close-left": (payload: import('./types').MeNavBuiltinMenuPayload) => any;
39
+ "close-right": (payload: import('./types').MeNavBuiltinMenuPayload) => any;
40
+ "close-all": (payload: import('./types').MeNavBuiltinMenuPayload) => any;
41
+ "tab-change": (payload: import('./types').MeNavTabChangePayload) => any;
42
+ "tab-remove": (payload: import('./types').MeNavTabRemovePayload) => any;
43
+ "toggle-lock": (payload: import('./types').MeNavToggleLockPayload) => any;
18
44
  }, string, import('vue').PublicProps, Readonly<MeNavProps> & Readonly<{
19
45
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
20
- "onTab-change"?: ((value: string) => any) | undefined;
21
- "onTab-remove"?: ((value: string) => any) | undefined;
46
+ onScroll?: ((translateX: number) => any) | undefined;
47
+ onContextmenu?: ((payload: import('./types').MeNavContextMenuPayload) => any) | undefined;
48
+ onRefresh?: ((payload: import('./types').MeNavBuiltinMenuPayload) => any) | undefined;
49
+ "onClose-current"?: ((payload: import('./types').MeNavBuiltinMenuPayload) => any) | undefined;
50
+ "onClose-others"?: ((payload: import('./types').MeNavBuiltinMenuPayload) => any) | undefined;
51
+ "onClose-left"?: ((payload: import('./types').MeNavBuiltinMenuPayload) => any) | undefined;
52
+ "onClose-right"?: ((payload: import('./types').MeNavBuiltinMenuPayload) => any) | undefined;
53
+ "onClose-all"?: ((payload: import('./types').MeNavBuiltinMenuPayload) => any) | undefined;
54
+ "onTab-change"?: ((payload: import('./types').MeNavTabChangePayload) => any) | undefined;
55
+ "onTab-remove"?: ((payload: import('./types').MeNavTabRemovePayload) => any) | undefined;
56
+ "onToggle-lock"?: ((payload: import('./types').MeNavToggleLockPayload) => any) | undefined;
22
57
  }>, {
23
58
  modelValue: string;
24
59
  width: number | string;
60
+ keyboard: boolean;
61
+ closable: boolean;
25
62
  tabList: MeNavTabItemData[];
26
- menuHandle: (item: MeNavTabItemData, index: number) => import('./types').MeNavMenuItem[];
63
+ contextMenu: MeNavMenuItem[] | ((item: MeNavTabItemData, index: number) => MeNavMenuItem[]);
64
+ menuHandle: (item: MeNavTabItemData, index: number) => MeNavMenuItem[];
27
65
  tabProps: import('./types').MeNavTabProps;
28
66
  scrollTargetOffset: number;
67
+ showLockMenu: boolean;
68
+ titleMaxWidth: number | string;
69
+ activeAfterRemove: import('./types').MeNavActiveAfterRemove;
70
+ builtinMenu: MeNavBuiltinMenuItem[];
71
+ beforeClose: (item: MeNavTabItemData, index: number) => boolean | Promise<boolean>;
72
+ edgeFade: boolean;
29
73
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
30
74
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
31
75
  declare const _default: typeof __VLS_export;
@@ -18,11 +18,14 @@ export interface MeNavTabItem {
18
18
  }
19
19
  /** Tab 属性映射配置,用于自定义数据字段名 */
20
20
  export interface MeNavTabProps {
21
- /** 唯一标识字段名,默认 'path' */
21
+ /** 唯一标识字段名(同时用作激活匹配),默认 'path' */
22
22
  key?: string;
23
23
  /** 标签显示字段名,默认 'title' */
24
24
  label?: string;
25
- /** 名称字段名,默认 'path' */
25
+ /**
26
+ * 名称字段名(已弃用,请用 key),默认 'path'
27
+ * @deprecated 与 key 含义相同,将在后续版本移除
28
+ */
26
29
  name?: string;
27
30
  /** 是否首页字段名,默认 'isHome' */
28
31
  isHome?: string;
@@ -37,15 +40,19 @@ export type MeNavTabItemData = Record<string, any>;
37
40
  export interface MeNavMenuItem {
38
41
  /** 菜单项标签 */
39
42
  label: string;
40
- /** 菜单项图标(Lucide 图标名称) */
41
- icon?: string;
43
+ /** 菜单项图标(Lucide 图标名称 或 自定义组件) */
44
+ icon?: string | Component;
42
45
  /** 是否禁用 */
43
46
  disabled?: boolean;
44
- /** 是否显示分割线 */
47
+ /** 菜单项上方是否显示分割线 */
45
48
  divided?: boolean;
46
49
  /** 点击回调 */
47
50
  onClick?: () => void;
48
51
  }
52
+ /** 内置菜单项类型 */
53
+ export type MeNavBuiltinMenuItem = 'refresh' | 'close-current' | 'close-others' | 'close-left' | 'close-right' | 'close-all';
54
+ /** 关闭 Tab 后激活策略 */
55
+ export type MeNavActiveAfterRemove = 'prev' | 'next' | 'none';
49
56
  /** MeNav 组件 Props */
50
57
  export interface MeNavProps {
51
58
  /**
@@ -53,10 +60,14 @@ export interface MeNavProps {
53
60
  */
54
61
  tabList: MeNavTabItemData[];
55
62
  /**
56
- * 右键菜单配置函数,返回菜单项数组
57
- * @param item - 当前 Tab 项数据
58
- * @param index - 当前 Tab 索引
59
- * @returns 右键菜单项数组
63
+ * 右键菜单配置,支持数组(静态菜单)或函数(动态菜单)
64
+ * - 数组:直接传入菜单项列表
65
+ * - 函数:接收当前 Tab 数据和索引,返回菜单项列表
66
+ */
67
+ contextMenu?: MeNavMenuItem[] | ((item: MeNavTabItemData, index: number) => MeNavMenuItem[]);
68
+ /**
69
+ * 已弃用,请使用 contextMenu
70
+ * @deprecated 请使用 contextMenu
60
71
  */
61
72
  menuHandle?: (item: MeNavTabItemData, index: number) => MeNavMenuItem[];
62
73
  /**
@@ -79,24 +90,135 @@ export interface MeNavProps {
79
90
  * @default 0.1
80
91
  */
81
92
  scrollTargetOffset?: number;
82
- }
83
- /** MeNav 组件 Emits */
84
- export interface MeNavEmits {
85
93
  /**
86
- * Tab 切换时触发
87
- * @param value - 当前激活的 Tab name
94
+ * 是否显示内置的锁定/解锁右键菜单项
95
+ * @default true
88
96
  */
89
- (e: 'update:modelValue', value: string): void;
97
+ showLockMenu?: boolean;
98
+ /**
99
+ * Tab 标题最大宽度,超出显示省略号 + tooltip
100
+ * - 数字:像素值
101
+ * - 字符串:如 '120px' / '10em'
102
+ * @default undefined
103
+ */
104
+ titleMaxWidth?: number | string;
105
+ /**
106
+ * 是否允许通过键盘方向键切换 Tab
107
+ * @default true
108
+ */
109
+ keyboard?: boolean;
110
+ /**
111
+ * 是否允许关闭 Tab(全局总开关)
112
+ * - 设为 false 则所有 Tab 都不可关闭,lock / isHome 不受影响
113
+ * @default true
114
+ */
115
+ closable?: boolean;
116
+ /**
117
+ * 关闭当前激活 Tab 后,激活哪一个
118
+ * - `'prev'` — 激活左边的 Tab
119
+ * - `'next'` — 激活右边的 Tab
120
+ * - `'none'` — 不自动切换,由父组件自行处理
121
+ * @default 'prev'
122
+ */
123
+ activeAfterRemove?: MeNavActiveAfterRemove;
124
+ /**
125
+ * 内置菜单项,快速开启常用右键菜单
126
+ * - `'refresh'` — 刷新当前
127
+ * - `'close-current'` — 关闭当前
128
+ * - `'close-others'` — 关闭其他
129
+ * - `'close-left'` — 关闭左侧
130
+ * - `'close-right'` — 关闭右侧
131
+ * - `'close-all'` — 关闭全部
132
+ */
133
+ builtinMenu?: MeNavBuiltinMenuItem[];
90
134
  /**
91
- * Tab 切换时触发
92
- * @param value - 当前激活的 Tab name
135
+ * 关闭前的确认函数,返回 false 或 rejected Promise 则阻止关闭
136
+ * - 同步:返回 boolean
137
+ * - 异步:返回 Promise<boolean>
138
+ * @default undefined
93
139
  */
94
- (e: 'tab-change', value: string): void;
140
+ beforeClose?: (item: MeNavTabItemData, index: number) => boolean | Promise<boolean>;
95
141
  /**
96
- * Tab 关闭时触发
97
- * @param value - 被关闭的 Tab name
142
+ * 是否显示边缘渐隐遮罩(暗示还有更多内容)
143
+ * @default true
98
144
  */
99
- (e: 'tab-remove', value: string): void;
145
+ edgeFade?: boolean;
146
+ }
147
+ /** tab-change 事件载荷 */
148
+ export interface MeNavTabChangePayload {
149
+ /** 激活的 Tab name */
150
+ name: string;
151
+ /** 激活的 Tab 数据 */
152
+ item: MeNavTabItemData;
153
+ /** 激活的 Tab 索引 */
154
+ index: number;
155
+ }
156
+ /** tab-remove 事件载荷 */
157
+ export interface MeNavTabRemovePayload {
158
+ /** 被关闭的 Tab name */
159
+ name: string;
160
+ /** 被关闭的 Tab 数据 */
161
+ item: MeNavTabItemData;
162
+ /** 被关闭的 Tab 索引 */
163
+ index: number;
164
+ }
165
+ /** toggle-lock 事件载荷 */
166
+ export interface MeNavToggleLockPayload {
167
+ /** 操作的 Tab name */
168
+ name: string;
169
+ /** 操作的 Tab 数据 */
170
+ item: MeNavTabItemData;
171
+ /** 操作的 Tab 索引 */
172
+ index: number;
173
+ /** 锁定状态(true 已锁定,false 已解锁) */
174
+ locked: boolean;
175
+ }
176
+ /** contextmenu 事件载荷 */
177
+ export interface MeNavContextMenuPayload {
178
+ /** 右键点击的 Tab name */
179
+ name: string;
180
+ /** 右键点击的 Tab 数据 */
181
+ item: MeNavTabItemData;
182
+ /** 右键点击的 Tab 索引 */
183
+ index: number;
184
+ /** 原始鼠标事件 */
185
+ event: MouseEvent;
186
+ }
187
+ /** 内置菜单操作事件载荷 */
188
+ export interface MeNavBuiltinMenuPayload {
189
+ /** 操作的 Tab name */
190
+ name: string;
191
+ /** 操作的 Tab 数据 */
192
+ item: MeNavTabItemData;
193
+ /** 操作的 Tab 索引 */
194
+ index: number;
195
+ }
196
+ /** MeNav 组件 Emits */
197
+ export interface MeNavEmits {
198
+ /** Tab 切换时触发(v-model 用) */
199
+ (e: 'update:modelValue', value: string): void;
200
+ /** Tab 切换时触发 */
201
+ (e: 'tab-change', payload: MeNavTabChangePayload): void;
202
+ /** Tab 关闭时触发 */
203
+ (e: 'tab-remove', payload: MeNavTabRemovePayload): void;
204
+ /** Tab 锁定/解锁时触发 */
205
+ (e: 'toggle-lock', payload: MeNavToggleLockPayload): void;
206
+ /** 滚动时触发 */
207
+ (e: 'scroll', translateX: number): void;
208
+ /** 右键点击 Tab 时触发(菜单显示前) */
209
+ (e: 'contextmenu', payload: MeNavContextMenuPayload): void;
210
+ /** 内置菜单 - 刷新当前 */
211
+ (e: 'refresh', payload: MeNavBuiltinMenuPayload): void;
212
+ /** 内置菜单 - 关闭当前 */
213
+ (e: 'close-current', payload: MeNavBuiltinMenuPayload): void;
214
+ /** 内置菜单 - 关闭其他 */
215
+ (e: 'close-others', payload: MeNavBuiltinMenuPayload): void;
216
+ /** 内置菜单 - 关闭左侧 */
217
+ (e: 'close-left', payload: MeNavBuiltinMenuPayload): void;
218
+ /** 内置菜单 - 关闭右侧 */
219
+ (e: 'close-right', payload: MeNavBuiltinMenuPayload): void;
220
+ /** 内置菜单 - 关闭全部 */
221
+ (e: 'close-all', payload: MeNavBuiltinMenuPayload): void;
100
222
  }
101
223
  /** MeNav 组件实例类型 */
102
224
  export type MeNavInstance = InstanceType<typeof import('./index.vue').default>;