@koi-design/uxd-ui 14.0.43 → 14.0.45

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 (59) hide show
  1. package/README.md +194 -0
  2. package/es/components/Anchor/Anchor.mjs +4 -4
  3. package/es/components/Anchor/Anchor.mjs.map +1 -1
  4. package/es/components/Anchor/AnchorLink.mjs +1 -1
  5. package/es/components/Anchor/AnchorLink.mjs.map +1 -1
  6. package/es/components/Table/BaseTable.mjs +0 -1
  7. package/es/components/Table/BaseTable.mjs.map +1 -1
  8. package/es/components/Table/hooks/useDraggable.mjs +37 -6
  9. package/es/components/Table/hooks/useDraggable.mjs.map +1 -1
  10. package/es/components/Table/tableUnits/DraggableIcon.mjs +17 -3
  11. package/es/components/Table/tableUnits/DraggableIcon.mjs.map +1 -1
  12. package/es/components/Table/tableUnits/DraggableIcon.vue.d.ts +1 -0
  13. package/lib/components/Anchor/Anchor.js +4 -4
  14. package/lib/components/Anchor/Anchor.js.map +1 -1
  15. package/lib/components/Anchor/AnchorLink.js +1 -1
  16. package/lib/components/Anchor/AnchorLink.js.map +1 -1
  17. package/lib/components/Table/BaseTable.js +0 -1
  18. package/lib/components/Table/BaseTable.js.map +1 -1
  19. package/lib/components/Table/hooks/useDraggable.js +37 -6
  20. package/lib/components/Table/hooks/useDraggable.js.map +1 -1
  21. package/lib/components/Table/tableUnits/DraggableIcon.js +17 -3
  22. package/lib/components/Table/tableUnits/DraggableIcon.js.map +1 -1
  23. package/lib/components/Table/tableUnits/DraggableIcon.vue.d.ts +1 -0
  24. package/package.json +2 -2
  25. package/styles/components/alert/index.css +1 -1
  26. package/styles/components/anchor/index.css +1 -1
  27. package/styles/components/anchor/index.less +55 -54
  28. package/styles/components/autoComplete/index.css +1 -1
  29. package/styles/components/avatar/index.css +1 -1
  30. package/styles/components/backTop/index.css +1 -1
  31. package/styles/components/backTop/var.less +1 -1
  32. package/styles/components/button/index.css +1 -1
  33. package/styles/components/carousel/index.css +1 -1
  34. package/styles/components/cascader/index.css +1 -1
  35. package/styles/components/datePicker/index.css +1 -1
  36. package/styles/components/form/index.css +1 -1
  37. package/styles/components/icon/index.css +1 -1
  38. package/styles/components/input/index.css +1 -1
  39. package/styles/components/inputNumber/index.css +1 -1
  40. package/styles/components/link/index.css +1 -1
  41. package/styles/components/mentions/index.css +1 -1
  42. package/styles/components/modal/index.css +1 -1
  43. package/styles/components/modal/modal.less +1 -1
  44. package/styles/components/progress/index.css +1 -1
  45. package/styles/components/progress/var.less +1 -1
  46. package/styles/components/result/index.css +1 -1
  47. package/styles/components/result/var.less +3 -3
  48. package/styles/components/select/index.css +1 -1
  49. package/styles/components/spin/index.css +1 -1
  50. package/styles/components/timePicker/index.css +1 -1
  51. package/styles/cssVariable.css +1 -1
  52. package/styles/cssVariable.less +4 -1
  53. package/styles/index.css +1 -1
  54. package/types/components/Table/tableUnits/DraggableIcon.vue.d.ts +1 -0
  55. package/uxd-ui.css +1 -1
  56. package/uxd-ui.esm.min.mjs +6 -6
  57. package/uxd-ui.esm.mjs +60 -16
  58. package/uxd-ui.umd.js +60 -16
  59. package/uxd-ui.umd.min.js +6 -6
package/README.md ADDED
@@ -0,0 +1,194 @@
1
+ # UXD-UI
2
+
3
+ [English](./README-en.md) | 简体中文
4
+
5
+ 一个基于 Vue 3 的现代化 UI 组件库。
6
+
7
+ ## ✨ 特性
8
+
9
+ - 🎨 **现代化设计** - 精心设计的组件外观,提供多种主题色和风格
10
+ - 🚀 **Vue 3 + TypeScript** - 完整的 TypeScript 类型支持
11
+ - 📦 **按需加载** - 支持 Tree Shaking,减小打包体积
12
+ - 🎯 **易于使用** - 简洁直观的 API 设计
13
+ - 🌈 **主题定制** - 灵活的 CSS 变量系统,轻松定制主题
14
+ - 📱 **响应式设计** - 完美适配各种屏幕尺寸
15
+ - 🌍 **国际化** - 内置中英文支持,可扩展至其他语言
16
+
17
+ ## 📦 安装
18
+
19
+ ```bash
20
+ npm install @koi-design/uxd-ui
21
+ ```
22
+
23
+ 或使用 yarn / pnpm:
24
+
25
+ ```bash
26
+ yarn add @koi-design/uxd-ui
27
+ pnpm add @koi-design/uxd-ui
28
+ ```
29
+
30
+ ## 🔨 使用
31
+
32
+ ### 完整引入
33
+
34
+ ```javascript
35
+ import { createApp } from 'vue';
36
+ import UxdUI from '@koi-design/uxd-ui';
37
+ import '@koi-design/uxd-ui/dist/index.css';
38
+ import App from './App.vue';
39
+
40
+ const app = createApp(App);
41
+ app.use(UxdUI);
42
+ app.mount('#app');
43
+ ```
44
+
45
+ ### 按需引入
46
+
47
+ ```vue
48
+ <template>
49
+ <UButton type="primary">按钮</UButton>
50
+ <UInput v-model="value" placeholder="请输入" />
51
+ </template>
52
+
53
+ <script setup>
54
+ import { ref } from 'vue';
55
+ import { UButton, UInput } from '@koi-design/uxd-ui';
56
+ import '@koi-design/uxd-ui/dist/index.css';
57
+
58
+ const value = ref('');
59
+ </script>
60
+ ```
61
+
62
+ ## 📚 文档
63
+
64
+ ### 在线文档
65
+
66
+ - [中文文档](https://your-site.com/zh)
67
+ - [English Documentation](https://your-site.com/en)
68
+
69
+ ### 本地文档
70
+
71
+ 本仓库包含完整的组件文档:
72
+
73
+ - **中文文档**: [component-docs-zh/README.md](./component-docs-zh/README.md)
74
+ - **English Docs**: [component-docs-en/README.md](./component-docs-en/README.md)
75
+
76
+ ### 组件列表
77
+
78
+ #### 基础组件
79
+ Button, Icon, Link, Text
80
+
81
+ #### 布局组件
82
+ Grid, Layout, Space, Divider
83
+
84
+ #### 导航组件
85
+ Affix, Anchor, BackTop, Breadcrumb, Dropdown, Menu, PageHeader, Pagination, Steps, Tabs, TabNav
86
+
87
+ #### 数据录入组件
88
+ AutoComplete, Cascader, Checkbox, ColorPicker, DatePicker, Form, Input, InputNumber, Mention, Radio, Rate, Select, Slider, Switch, TimePicker, Transfer, TreeSelect, Upload
89
+
90
+ #### 数据展示组件
91
+ Avatar, Badge, Calendar, Card, Carousel, Collapse, Comment, Empty, Image, InfoView, List, Popover, Scrollbar, Statistic, Table, Tag, Timeline, Tooltip, Tree
92
+
93
+ #### 反馈组件
94
+ Alert, Drawer, LoadingBar, Message, Modal, Notice, Notification, PopConfirm, Progress, Result, Skeleton, Spin
95
+
96
+ #### 其他组件
97
+ ConfigProvider, InfiniteScroll, Mask
98
+
99
+ ## 🎨 主题定制
100
+
101
+ UXD-UI 支持通过 CSS 变量进行主题定制:
102
+
103
+ ```css
104
+ :root {
105
+ --u-primary-color: #1890ff;
106
+ --u-success-color: #52c41a;
107
+ --u-warning-color: #faad14;
108
+ --u-danger-color: #ff4d4f;
109
+
110
+ --u-font-size-base: 14px;
111
+ --u-border-radius-base: 4px;
112
+ }
113
+ ```
114
+
115
+ ## 🌍 国际化
116
+
117
+ ```vue
118
+ <template>
119
+ <UConfigProvider :locale="locale">
120
+ <App />
121
+ </UConfigProvider>
122
+ </template>
123
+
124
+ <script setup>
125
+ import { UConfigProvider } from '@koi-design/uxd-ui';
126
+ import zhCN from '@koi-design/uxd-ui/lang/zh-cn';
127
+ import enUS from '@koi-design/uxd-ui/lang/en-us';
128
+
129
+ const locale = zhCN; // 或 enUS
130
+ </script>
131
+ ```
132
+
133
+ ## 🔧 开发
134
+
135
+ ### 环境要求
136
+
137
+ - Node.js >= 16
138
+ - pnpm >= 8
139
+
140
+ ### 本地开发
141
+
142
+ ```bash
143
+ # 克隆仓库
144
+ git clone http://git.100credit.cn/fe/public/uxd/uxd-ui.git
145
+
146
+ # 安装依赖
147
+ pnpm install
148
+
149
+ # 启动开发服务器
150
+ pnpm dev
151
+
152
+ # 构建文档
153
+ pnpm docs:build
154
+
155
+ # 构建组件库
156
+ pnpm build
157
+ ```
158
+
159
+ ### 生成文档
160
+
161
+ 本项目提供了文档生成工具:
162
+
163
+ ```bash
164
+ # 生成中英文文档
165
+ node generate-docs-bilingual.js
166
+
167
+ # 生成中文文档(使用原始脚本)
168
+ node generate-docs-enhanced.js
169
+ ```
170
+
171
+ ## 🤝 贡献
172
+
173
+ 我们欢迎所有形式的贡献!
174
+
175
+ 在提交 Pull Request 之前,请确保:
176
+
177
+ 1. 代码符合项目的编码规范
178
+ 2. 添加了必要的测试用例
179
+ 3. 更新了相关文档
180
+ 4. 所有测试都通过
181
+
182
+ 详见 [贡献指南](./CONTRIBUTING.md)
183
+
184
+ ## 📄 许可证
185
+
186
+ [MIT License](./LICENSE)
187
+
188
+ ## 🙏 致谢
189
+
190
+ 感谢所有为这个项目做出贡献的开发者!
191
+
192
+ ---
193
+
194
+ **Made with ❤️ by UXD-UI Team**
@@ -213,17 +213,17 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
213
213
  }, {
214
214
  default: withCtx(() => [
215
215
  createElementVNode("div", {
216
- class: normalizeClass(`${_ctx.containerClass} ${_ctx.prefixCls}-wrapper`),
216
+ class: normalizeClass(`${_ctx.containerClass} ${_ctx.prefixCls}`),
217
217
  style: normalizeStyle(_ctx.wrapperStyle)
218
218
  }, [
219
219
  createElementVNode("div", {
220
- class: normalizeClass(`${_ctx.prefixCls}`)
220
+ class: normalizeClass(`${_ctx.prefixCls}-inner`)
221
221
  }, [
222
222
  createElementVNode("div", {
223
- class: normalizeClass(`${_ctx.prefixCls}-ink`)
223
+ class: normalizeClass(`${_ctx.prefixCls}-inner-ink`)
224
224
  }, [
225
225
  withDirectives(createElementVNode("span", {
226
- class: normalizeClass(`${_ctx.prefixCls}-ink-ball`),
226
+ class: normalizeClass(`${_ctx.prefixCls}-inner-ink-ball`),
227
227
  style: normalizeStyle({ top: `${_ctx.inkTop}px` })
228
228
  }, null, 6), [
229
229
  [vShow, _ctx.showInk]
@@ -1 +1 @@
1
- {"version":3,"file":"Anchor.mjs","sources":["../../../../src/components/Anchor/Anchor.vue"],"sourcesContent":["<template>\n <component :is=\"wrapperComponent\" :container=\"container\" :offset-top=\"offsetTop\" :offset-bottom=\"offsetBottom\" @on-change=\"handleAffixStateChange\">\n <div :class=\"`${containerClass} ${prefixCls}-wrapper`\" :style=\"wrapperStyle\">\n <div :class=\"`${prefixCls}`\">\n <div :class=\"`${prefixCls}-ink`\">\n <span v-show=\"showInk\" :class=\"`${prefixCls}-ink-ball`\" :style=\"{ top: `${inkTop}px` }\" />\n </div>\n <slot />\n </div>\n </div>\n </component>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, onBeforeUnmount, onMounted, provide, ref, toRefs, watch } from 'vue';\n\nimport useGlobalConfig from '../base/hooks/useGlobalConfig';\nimport { addEventListener, scrollTop } from '../../utils/dom';\nimport type { addEventListenerReturn } from '../../utils/dom';\nimport { anchorProps, anchorEmits } from './Anchor.type';\nimport type { LinkOffset } from './Anchor.type';\n\nexport default defineComponent({\n name: 'UAnchor',\n props: anchorProps,\n emits: anchorEmits,\n setup(props, { emit }) {\n const { scrollOffset } = toRefs(props);\n const { prefixCls } = useGlobalConfig('anchor');\n const isAffixed = ref(false);\n const inkTop = ref(0);\n const currentLink = ref('');\n let currentId = ''; // current show title id => #href -> currentId = href\n let titlesOffsetArr: LinkOffset[] = [];\n const links: string[] = [];\n let wrapperTop = 0;\n let scrollElement: HTMLElement | null = null;\n let hashChangeEvent: addEventListenerReturn | null = null;\n let scrollEvent: addEventListenerReturn | null = null;\n let animating = false;\n\n const wrapperComponent = computed(() => {\n return props.affix ? 'UAffix' : 'div';\n });\n\n const wrapperStyle = computed(() => {\n let offset = '100vh';\n if (props.offsetBottom || props.offsetBottom === 0) {\n offset = `calc(100vh - ${props.offsetBottom}px)`;\n } else if (props.offsetTop || props.offsetTop === 0) {\n offset = `calc(100vh - ${props.offsetTop}px)`;\n }\n return {\n maxHeight: offset,\n ...props.containerStyle\n };\n });\n\n watch(currentLink, (nv, ov) => {\n emit('change', nv, ov);\n });\n\n const handleAffixStateChange = (state: boolean) => {\n isAffixed.value = props.affix && state;\n };\n\n const handleSetInkTop = () => {\n const currentLinkElementA = document.querySelector<HTMLElement>(`a[data-href=\"${currentLink.value}\"]`);\n if (!currentLinkElementA) return;\n const elementATop = currentLinkElementA.offsetTop;\n inkTop.value = elementATop < 0 ? props.offsetTop : elementATop;\n };\n\n const handleScrollTo = () => {\n const anchor = document.getElementById(currentId);\n const currentLinkElementA = document.querySelector(`a[data-href=\"${currentLink.value}\"]`);\n let offset = props.scrollOffset;\n if (currentLinkElementA) {\n offset = parseFloat(currentLinkElementA.getAttribute('data-scroll-offset')?.toString() || '0');\n }\n if (!anchor) return;\n const offsetTop = anchor.offsetTop - wrapperTop - offset;\n animating = true;\n if (scrollElement) {\n scrollTop(scrollElement, offsetTop, props.duration, () => {\n animating = false;\n });\n }\n\n handleSetInkTop();\n };\n\n const updateTitleOffset = () => {\n const offsetArr: LinkOffset[] = [];\n links.forEach((link) => {\n const titleEle = document.getElementById(link.split('#')[1]);\n if (titleEle)\n offsetArr.push({\n link,\n offset: titleEle.offsetTop - (scrollElement?.offsetTop || 0)\n });\n });\n titlesOffsetArr = offsetArr;\n };\n\n const getCurrentScrollAtTitleId = (top: number) => {\n let _scrollTop = top;\n let i = 0;\n const len = titlesOffsetArr.length;\n let titleItem = {\n link: '#',\n offset: 0\n };\n _scrollTop += props.bounds;\n while (i < len) {\n const currentEle = titlesOffsetArr[i];\n const nextEle = titlesOffsetArr[i + 1];\n if (_scrollTop >= currentEle.offset && _scrollTop < ((nextEle && nextEle.offset) || Infinity)) {\n titleItem = titlesOffsetArr[i];\n break;\n }\n i += 1;\n }\n currentLink.value = titleItem.link;\n handleSetInkTop();\n };\n\n const handleScroll = (e: any) => {\n if (animating) return;\n updateTitleOffset();\n\n const _scrollTop = document.documentElement.scrollTop || document.body.scrollTop || e.target.scrollTop;\n getCurrentScrollAtTitleId(_scrollTop);\n };\n\n const handleHashChange = (toHash?: Record<string, any> | string) => {\n const url = typeof toHash === 'object' ? toHash.newURL : toHash || currentLink.value; // window.location.href;\n const sharpMatcherRegx = /#([^#]+)$/;\n const sharpLinkMatch = sharpMatcherRegx.exec(url);\n if (!sharpLinkMatch) return;\n currentLink.value = sharpLinkMatch[0];\n currentId = sharpLinkMatch[1];\n\n nextTick(() => {\n handleScrollTo();\n });\n };\n\n const removeListener = () => {\n hashChangeEvent && hashChangeEvent.remove();\n scrollEvent && scrollEvent.remove();\n };\n\n const setCurrentLink = (link: string) => {\n if (link) {\n handleHashChange(link);\n // handleScrollTo();\n // if (props.showHash && route) {\n // // ctx.$router.push(href.value, () => {});\n // route.push(currentLink.value, () => {});\n // } else if(props.showHash) {\n // window.location.href = currentLink.value;\n // }\n if (props.showHash) {\n const sharpMatcherRegx = /#([^#]+)$/;\n const sharpLinkMatch = sharpMatcherRegx.exec(window.location.hash);\n if (sharpLinkMatch && sharpLinkMatch.length > 0) {\n if (!links.includes(sharpLinkMatch[0] || '')) {\n window.location.hash += currentLink.value;\n } else {\n window.location.hash = window.location.hash.replace(sharpLinkMatch[0], currentLink.value);\n }\n }\n }\n }\n };\n\n const registerLink = (link: string) => {\n if (!links.includes(link)) {\n links.push(link);\n }\n };\n\n const unregisterLink = (link: string) => {\n const index = links.indexOf(link);\n if (index !== -1) {\n links.splice(index, 1);\n }\n };\n\n const init = () => {\n handleHashChange();\n nextTick(() => {\n removeListener();\n wrapperTop = 0;\n if (props.container) {\n scrollElement = typeof props.container === 'string' ? document.querySelector<HTMLElement>(props.container) : props.container();\n\n if (scrollElement instanceof HTMLElement) {\n wrapperTop = scrollElement.offsetTop;\n }\n } else {\n scrollElement = document.documentElement || document.body;\n }\n handleScrollTo();\n handleSetInkTop();\n updateTitleOffset();\n scrollEvent = addEventListener(scrollElement || window, 'scroll', handleScroll);\n hashChangeEvent = addEventListener(window, 'hashchange', (e: Event) => {\n handleHashChange(e as Record<string, any>);\n });\n });\n };\n\n watch(\n () => props.container,\n () => {\n init();\n }\n );\n\n provide('anchorContext', {\n scrollOffset,\n registerLink,\n unregisterLink,\n setCurrentLink,\n currentLink\n });\n\n onMounted(() => {\n nextTick(() => {\n init();\n });\n });\n\n // beforeDestroy\n onBeforeUnmount(() => {\n removeListener();\n });\n\n return {\n prefixCls,\n wrapperComponent,\n handleAffixStateChange,\n wrapperStyle,\n inkTop\n };\n }\n});\n</script>\n"],"names":["_createBlock","_resolveDynamicComponent","_createElementVNode","_normalizeClass","_normalizeStyle","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"Anchor.mjs","sources":["../../../../src/components/Anchor/Anchor.vue"],"sourcesContent":["<template>\n <component :is=\"wrapperComponent\" :container=\"container\" :offset-top=\"offsetTop\" :offset-bottom=\"offsetBottom\" @on-change=\"handleAffixStateChange\">\n <div :class=\"`${containerClass} ${prefixCls}`\" :style=\"wrapperStyle\">\n <div :class=\"`${prefixCls}-inner`\">\n <div :class=\"`${prefixCls}-inner-ink`\">\n <span v-show=\"showInk\" :class=\"`${prefixCls}-inner-ink-ball`\" :style=\"{ top: `${inkTop}px` }\" />\n </div>\n <slot />\n </div>\n </div>\n </component>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, onBeforeUnmount, onMounted, provide, ref, toRefs, watch } from 'vue';\n\nimport useGlobalConfig from '../base/hooks/useGlobalConfig';\nimport { addEventListener, scrollTop } from '../../utils/dom';\nimport type { addEventListenerReturn } from '../../utils/dom';\nimport { anchorProps, anchorEmits } from './Anchor.type';\nimport type { LinkOffset } from './Anchor.type';\n\nexport default defineComponent({\n name: 'UAnchor',\n props: anchorProps,\n emits: anchorEmits,\n setup(props, { emit }) {\n const { scrollOffset } = toRefs(props);\n const { prefixCls } = useGlobalConfig('anchor');\n const isAffixed = ref(false);\n const inkTop = ref(0);\n const currentLink = ref('');\n let currentId = ''; // current show title id => #href -> currentId = href\n let titlesOffsetArr: LinkOffset[] = [];\n const links: string[] = [];\n let wrapperTop = 0;\n let scrollElement: HTMLElement | null = null;\n let hashChangeEvent: addEventListenerReturn | null = null;\n let scrollEvent: addEventListenerReturn | null = null;\n let animating = false;\n\n const wrapperComponent = computed(() => {\n return props.affix ? 'UAffix' : 'div';\n });\n\n const wrapperStyle = computed(() => {\n let offset = '100vh';\n if (props.offsetBottom || props.offsetBottom === 0) {\n offset = `calc(100vh - ${props.offsetBottom}px)`;\n } else if (props.offsetTop || props.offsetTop === 0) {\n offset = `calc(100vh - ${props.offsetTop}px)`;\n }\n return {\n maxHeight: offset,\n ...props.containerStyle\n };\n });\n\n watch(currentLink, (nv, ov) => {\n emit('change', nv, ov);\n });\n\n const handleAffixStateChange = (state: boolean) => {\n isAffixed.value = props.affix && state;\n };\n\n const handleSetInkTop = () => {\n const currentLinkElementA = document.querySelector<HTMLElement>(`a[data-href=\"${currentLink.value}\"]`);\n if (!currentLinkElementA) return;\n const elementATop = currentLinkElementA.offsetTop;\n inkTop.value = elementATop < 0 ? props.offsetTop : elementATop;\n };\n\n const handleScrollTo = () => {\n const anchor = document.getElementById(currentId);\n const currentLinkElementA = document.querySelector(`a[data-href=\"${currentLink.value}\"]`);\n let offset = props.scrollOffset;\n if (currentLinkElementA) {\n offset = parseFloat(currentLinkElementA.getAttribute('data-scroll-offset')?.toString() || '0');\n }\n if (!anchor) return;\n const offsetTop = anchor.offsetTop - wrapperTop - offset;\n animating = true;\n if (scrollElement) {\n scrollTop(scrollElement, offsetTop, props.duration, () => {\n animating = false;\n });\n }\n\n handleSetInkTop();\n };\n\n const updateTitleOffset = () => {\n const offsetArr: LinkOffset[] = [];\n links.forEach((link) => {\n const titleEle = document.getElementById(link.split('#')[1]);\n if (titleEle)\n offsetArr.push({\n link,\n offset: titleEle.offsetTop - (scrollElement?.offsetTop || 0)\n });\n });\n titlesOffsetArr = offsetArr;\n };\n\n const getCurrentScrollAtTitleId = (top: number) => {\n let _scrollTop = top;\n let i = 0;\n const len = titlesOffsetArr.length;\n let titleItem = {\n link: '#',\n offset: 0\n };\n _scrollTop += props.bounds;\n while (i < len) {\n const currentEle = titlesOffsetArr[i];\n const nextEle = titlesOffsetArr[i + 1];\n if (_scrollTop >= currentEle.offset && _scrollTop < ((nextEle && nextEle.offset) || Infinity)) {\n titleItem = titlesOffsetArr[i];\n break;\n }\n i += 1;\n }\n currentLink.value = titleItem.link;\n handleSetInkTop();\n };\n\n const handleScroll = (e: any) => {\n if (animating) return;\n updateTitleOffset();\n\n const _scrollTop = document.documentElement.scrollTop || document.body.scrollTop || e.target.scrollTop;\n getCurrentScrollAtTitleId(_scrollTop);\n };\n\n const handleHashChange = (toHash?: Record<string, any> | string) => {\n const url = typeof toHash === 'object' ? toHash.newURL : toHash || currentLink.value; // window.location.href;\n const sharpMatcherRegx = /#([^#]+)$/;\n const sharpLinkMatch = sharpMatcherRegx.exec(url);\n if (!sharpLinkMatch) return;\n currentLink.value = sharpLinkMatch[0];\n currentId = sharpLinkMatch[1];\n\n nextTick(() => {\n handleScrollTo();\n });\n };\n\n const removeListener = () => {\n hashChangeEvent && hashChangeEvent.remove();\n scrollEvent && scrollEvent.remove();\n };\n\n const setCurrentLink = (link: string) => {\n if (link) {\n handleHashChange(link);\n // handleScrollTo();\n // if (props.showHash && route) {\n // // ctx.$router.push(href.value, () => {});\n // route.push(currentLink.value, () => {});\n // } else if(props.showHash) {\n // window.location.href = currentLink.value;\n // }\n if (props.showHash) {\n const sharpMatcherRegx = /#([^#]+)$/;\n const sharpLinkMatch = sharpMatcherRegx.exec(window.location.hash);\n if (sharpLinkMatch && sharpLinkMatch.length > 0) {\n if (!links.includes(sharpLinkMatch[0] || '')) {\n window.location.hash += currentLink.value;\n } else {\n window.location.hash = window.location.hash.replace(sharpLinkMatch[0], currentLink.value);\n }\n }\n }\n }\n };\n\n const registerLink = (link: string) => {\n if (!links.includes(link)) {\n links.push(link);\n }\n };\n\n const unregisterLink = (link: string) => {\n const index = links.indexOf(link);\n if (index !== -1) {\n links.splice(index, 1);\n }\n };\n\n const init = () => {\n handleHashChange();\n nextTick(() => {\n removeListener();\n wrapperTop = 0;\n if (props.container) {\n scrollElement = typeof props.container === 'string' ? document.querySelector<HTMLElement>(props.container) : props.container();\n\n if (scrollElement instanceof HTMLElement) {\n wrapperTop = scrollElement.offsetTop;\n }\n } else {\n scrollElement = document.documentElement || document.body;\n }\n handleScrollTo();\n handleSetInkTop();\n updateTitleOffset();\n scrollEvent = addEventListener(scrollElement || window, 'scroll', handleScroll);\n hashChangeEvent = addEventListener(window, 'hashchange', (e: Event) => {\n handleHashChange(e as Record<string, any>);\n });\n });\n };\n\n watch(\n () => props.container,\n () => {\n init();\n }\n );\n\n provide('anchorContext', {\n scrollOffset,\n registerLink,\n unregisterLink,\n setCurrentLink,\n currentLink\n });\n\n onMounted(() => {\n nextTick(() => {\n init();\n });\n });\n\n // beforeDestroy\n onBeforeUnmount(() => {\n removeListener();\n });\n\n return {\n prefixCls,\n wrapperComponent,\n handleAffixStateChange,\n wrapperStyle,\n inkTop\n };\n }\n});\n</script>\n"],"names":["_createBlock","_resolveDynamicComponent","_createElementVNode","_normalizeClass","_normalizeStyle","_renderSlot"],"mappings":";;;;;;AAsBA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM,OAAO,EAAE,QAAQ;UACf,EAAE,iBAAiB,OAAO,KAAK;UAC/B,EAAE,cAAc,gBAAgB,QAAQ;UACxC,YAAY,IAAI,KAAK;UACrB,SAAS,IAAI,CAAC;UACd,cAAc,IAAI,EAAE;QACtB,YAAY;QACZ,kBAAgC;UAC9B,QAAkB;QACpB,aAAa;QACb,gBAAoC;QACpC,kBAAiD;QACjD,cAA6C;QAC7C,YAAY;UAEV,mBAAmB,SAAS,MAAM;aAC/B,MAAM,QAAQ,WAAW;AAAA,KACjC;UAEK,eAAe,SAAS,MAAM;UAC9B,SAAS;UACT,MAAM,gBAAgB,MAAM,iBAAiB,GAAG;iBACzC,gBAAgB,MAAM;AAAA,iBACtB,MAAM,aAAa,MAAM,cAAc,GAAG;iBAC1C,gBAAgB,MAAM;AAAA;aAE1B;AAAA,QACL,WAAW;AAAA,QACX,GAAG,MAAM;AAAA;AACX,KACD;UAEK,aAAa,CAAC,IAAI,OAAO;WACxB,UAAU,IAAI,EAAE;AAAA,KACtB;UAEK,yBAAyB,CAAC,UAAmB;gBACvC,QAAQ,MAAM,SAAS;AAAA;UAG7B,kBAAkB,MAAM;YACtB,sBAAsB,SAAS,cAA2B,gBAAgB,YAAY,SAAS;UACjG,CAAC;;YACC,cAAc,oBAAoB;aACjC,QAAQ,cAAc,IAAI,MAAM,YAAY;AAAA;UAG/C,iBAAiB,MAAM;AA3DjC;YA4DY,SAAS,SAAS,eAAe,SAAS;YAC1C,sBAAsB,SAAS,cAAc,gBAAgB,YAAY,SAAS;UACpF,SAAS,MAAM;UACf,qBAAqB;iBACd,aAAW,yBAAoB,aAAa,oBAAoB,MAArD,mBAAwD,eAAc,GAAG;AAAA;UAE3F,CAAC;;YACC,YAAY,OAAO,YAAY,aAAa;kBACtC;UACR,eAAe;kBACP,eAAe,WAAW,MAAM,UAAU,MAAM;sBAC5C;AAAA,SACb;AAAA;;AAGa;UAGZ,oBAAoB,MAAM;YACxB,YAA0B;YAC1B,QAAQ,CAAC,SAAS;cAChB,WAAW,SAAS,eAAe,KAAK,MAAM,GAAG,EAAE,EAAE;YACvD;oBACQ,KAAK;AAAA,YACb;AAAA,YACA,QAAQ,SAAS,cAAa,+CAAe,cAAa;AAAA,WAC3D;AAAA,OACJ;wBACiB;AAAA;UAGd,4BAA4B,CAAC,QAAgB;UAC7C,aAAa;UACb,IAAI;YACF,MAAM,gBAAgB;UACxB,YAAY;AAAA,QACd,MAAM;AAAA,QACN,QAAQ;AAAA;oBAEI,MAAM;aACb,IAAI,KAAK;cACR,aAAa,gBAAgB;cAC7B,UAAU,gBAAgB,IAAI;YAChC,cAAc,WAAW,UAAU,cAAe,WAAW,QAAQ,UAAW,WAAW;sBACjF,gBAAgB;;;aAGzB;AAAA;kBAEK,QAAQ,UAAU;;AACd;UAGZ,eAAe,CAAC,MAAW;UAC3B;;;YAGE,aAAa,SAAS,gBAAgB,aAAa,SAAS,KAAK,aAAa,EAAE,OAAO;gCACnE,UAAU;AAAA;UAGhC,mBAAmB,CAAC,WAA0C;YAC5D,MAAM,OAAO,WAAW,WAAW,OAAO,SAAS,UAAU,YAAY;YACzE,mBAAmB;YACnB,iBAAiB,iBAAiB,KAAK,GAAG;UAC5C,CAAC;;kBACO,QAAQ,eAAe;kBACvB,eAAe;eAElB,MAAM;;AACE,OAChB;AAAA;UAGG,iBAAiB,MAAM;yBACR,gBAAgB;qBACpB,YAAY;AAAO;UAG9B,iBAAiB,CAAC,SAAiB;UACnC,MAAM;yBACS,IAAI;YAQjB,MAAM,UAAU;gBACZ,mBAAmB;gBACnB,iBAAiB,iBAAiB,KAAK,OAAO,SAAS,IAAI;cAC7D,kBAAkB,eAAe,SAAS,GAAG;gBAC3C,CAAC,MAAM,SAAS,eAAe,MAAM,EAAE,GAAG;qBACrC,SAAS,QAAQ,YAAY;AAAA,mBAC/B;qBACE,SAAS,OAAO,OAAO,SAAS,KAAK,QAAQ,eAAe,IAAI,YAAY,KAAK;AAAA;AAC1F;AACF;AACF;AACF;UAGI,eAAe,CAAC,SAAiB;UACjC,CAAC,MAAM,SAAS,IAAI,GAAG;cACnB,KAAK,IAAI;AAAA;AACjB;UAGI,iBAAiB,CAAC,SAAiB;YACjC,QAAQ,MAAM,QAAQ,IAAI;UAC5B,UAAU,IAAI;cACV,OAAO,OAAO,CAAC;AAAA;AACvB;UAGI,OAAO,MAAM;;eAER,MAAM;;qBAEA;YACT,MAAM,WAAW;0BACH,OAAO,MAAM,cAAc,WAAW,SAAS,cAA2B,MAAM,SAAS,IAAI,MAAM;cAE/G,yBAAyB,aAAa;yBAC3B,cAAc;AAAA;AAC7B,eACK;0BACW,SAAS,mBAAmB,SAAS;AAAA;;;;sBAKzC,iBAAiB,iBAAiB,QAAQ,UAAU,YAAY;0BAC5D,iBAAiB,QAAQ,cAAc,CAAC,MAAa;2BACpD,CAAwB;AAAA,SAC1C;AAAA,OACF;AAAA;;MAID,MAAM,MAAM;AAAA,MACZ,MAAM;;AACC;AACP;YAGM,iBAAiB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,KACD;cAES,MAAM;eACL,MAAM;;AACR,OACN;AAAA,KACF;oBAGe,MAAM;;AACL,KAChB;WAEM;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC;;sBAvPCA,YASYC,wBATI,qBAAgB;IAAG,WAAW;IAAY,cAAY;IAAY,iBAAe;IAAe,YAAW;;qBACzH,MAOM;AAAA,MAPNC,mBAOM;QAPA,OAAKC,kBAAK,uBAAkB,gBAAS;AAAA,QAAK,OAAKC,eAAE,iBAAY;AAAA;QACjEF,mBAKM;UALA,OAAKC,kBAAK,sBAAS;AAAA;UACvBD,mBAEM;YAFA,OAAKC,kBAAK,0BAAS;AAAA;2BACvBD,mBAAgG;cAAxE,OAAKC,kBAAK,+BAAS;AAAA,cAAoB,OAAKC,yBAAY;;sBAAlE,YAAO;AAAA;;UAEvBC,WAAQ;;;;;;;;;;;"}
@@ -8,7 +8,7 @@ const _sfc_main = defineComponent({
8
8
  props: anchorLinkProps,
9
9
  emits: anchorLinkEmits,
10
10
  setup(props, { emit }) {
11
- const { prefixCls } = useGlobalConfig("anchor-link");
11
+ const { prefixCls } = useGlobalConfig("anchor-inner-link");
12
12
  const anchorContext = inject("anchorContext", {});
13
13
  const defaultScrollOffset = props.scrollOffset || (anchorContext == null ? void 0 : anchorContext.scrollOffset);
14
14
  const anchorLinkClasses = computed(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"AnchorLink.mjs","sources":["../../../../src/components/Anchor/AnchorLink.vue"],"sourcesContent":["<template>\n <div :class=\"[`${prefixCls}`, { [`${prefixCls}-active`]: !!anchorLinkClasses }]\">\n <a\n :class=\"[`${prefixCls}-title`]\"\n :href=\"href\"\n :data-scroll-offset=\"defaultScrollOffset\"\n :data-href=\"href\"\n :title=\"title\"\n @click.prevent=\"goAnchor\"\n >\n {{ title }}\n </a>\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, nextTick, onBeforeUnmount, onMounted, watch } from 'vue';\n\nimport useGlobalConfig from '../base/hooks/useGlobalConfig';\nimport { anchorLinkProps, anchorLinkEmits } from './Anchor.type';\nimport type { AnchorContext } from './Anchor.type';\n\nexport default defineComponent({\n name: 'UAnchorLink',\n props: anchorLinkProps,\n emits: anchorLinkEmits,\n setup(props, { emit }) {\n const { prefixCls } = useGlobalConfig('anchor-link');\n const anchorContext = inject<AnchorContext>('anchorContext', {} as AnchorContext);\n\n const defaultScrollOffset = props.scrollOffset || anchorContext?.scrollOffset;\n\n const anchorLinkClasses = computed(() => {\n return anchorContext?.currentLink.value === props.href ? `${prefixCls}-active` : '';\n });\n\n watch(\n () => props.href,\n (nv, ov) => {\n nextTick(() => {\n anchorContext.unregisterLink(ov);\n anchorContext.registerLink(nv);\n });\n }\n );\n\n const goAnchor = (event: Event) => {\n // const value = event.target.href; // href: \"http://localhost:8090/sample/anchor#Anchor_props\"\n // const title = event.target.title;\n const { hash } = (event as any).target; // #Anchor_props\n anchorContext.setCurrentLink(hash);\n emit('change', props.href, event);\n };\n\n onMounted(() => {\n anchorContext.registerLink(props.href);\n });\n\n onBeforeUnmount(() => {\n anchorContext.unregisterLink(props.href);\n });\n\n return {\n prefixCls,\n anchorLinkClasses,\n defaultScrollOffset,\n goAnchor\n };\n }\n});\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_renderSlot"],"mappings":";;;;;AAuBA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM,OAAO,EAAE,QAAQ;UACf,EAAE,cAAc,gBAAgB,aAAa;UAC7C,gBAAgB,OAAsB,iBAAiB,EAAmB;UAE1E,sBAAsB,MAAM,iBAAgB,+CAAe;UAE3D,oBAAoB,SAAS,MAAM;cAChC,+CAAe,YAAY,WAAU,MAAM,OAAO,GAAG,qBAAqB;AAAA,KAClF;;MAGC,MAAM,MAAM;AAAA,MACZ,CAAC,IAAI,OAAO;iBACD,MAAM;wBACC,eAAe,EAAE;wBACjB,aAAa,EAAE;AAAA,SAC9B;AAAA;AACH;UAGI,WAAW,CAAC,UAAiB;YAG3B,EAAE,SAAU,MAAc;oBAClB,eAAe,IAAI;WAC5B,UAAU,MAAM,MAAM,KAAK;AAAA;cAGxB,MAAM;oBACA,aAAa,MAAM,IAAI;AAAA,KACtC;oBAEe,MAAM;oBACN,eAAe,MAAM,IAAI;AAAA,KACxC;WAEM;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC;;;sBArECA,mBAYM;IAZA,OAAKC,mBAAM,kBAAS,MAAU,0BAAS,EAAc;;IACzDC,mBASI;MARD,OAAKD,mBAAM,sBAAS;MACpB,MAAM;MACN,sBAAoB;MACpB,aAAW;MACX,OAAO;MACP,SAAK,qDAAU,yCAAQ;uBAErB,UAAK;IAEVE,WAAQ;;;;;;;"}
1
+ {"version":3,"file":"AnchorLink.mjs","sources":["../../../../src/components/Anchor/AnchorLink.vue"],"sourcesContent":["<template>\n <div :class=\"[`${prefixCls}`, { [`${prefixCls}-active`]: !!anchorLinkClasses }]\">\n <a\n :class=\"[`${prefixCls}-title`]\"\n :href=\"href\"\n :data-scroll-offset=\"defaultScrollOffset\"\n :data-href=\"href\"\n :title=\"title\"\n @click.prevent=\"goAnchor\"\n >\n {{ title }}\n </a>\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, inject, nextTick, onBeforeUnmount, onMounted, watch } from 'vue';\n\nimport useGlobalConfig from '../base/hooks/useGlobalConfig';\nimport { anchorLinkProps, anchorLinkEmits } from './Anchor.type';\nimport type { AnchorContext } from './Anchor.type';\n\nexport default defineComponent({\n name: 'UAnchorLink',\n props: anchorLinkProps,\n emits: anchorLinkEmits,\n setup(props, { emit }) {\n const { prefixCls } = useGlobalConfig('anchor-inner-link');\n const anchorContext = inject<AnchorContext>('anchorContext', {} as AnchorContext);\n\n const defaultScrollOffset = props.scrollOffset || anchorContext?.scrollOffset;\n\n const anchorLinkClasses = computed(() => {\n return anchorContext?.currentLink.value === props.href ? `${prefixCls}-active` : '';\n });\n\n watch(\n () => props.href,\n (nv, ov) => {\n nextTick(() => {\n anchorContext.unregisterLink(ov);\n anchorContext.registerLink(nv);\n });\n }\n );\n\n const goAnchor = (event: Event) => {\n // const value = event.target.href; // href: \"http://localhost:8090/sample/anchor#Anchor_props\"\n // const title = event.target.title;\n const { hash } = (event as any).target; // #Anchor_props\n anchorContext.setCurrentLink(hash);\n emit('change', props.href, event);\n };\n\n onMounted(() => {\n anchorContext.registerLink(props.href);\n });\n\n onBeforeUnmount(() => {\n anchorContext.unregisterLink(props.href);\n });\n\n return {\n prefixCls,\n anchorLinkClasses,\n defaultScrollOffset,\n goAnchor\n };\n }\n});\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_renderSlot"],"mappings":";;;;;AAuBA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM,OAAO,EAAE,QAAQ;UACf,EAAE,cAAc,gBAAgB,mBAAmB;UACnD,gBAAgB,OAAsB,iBAAiB,EAAmB;UAE1E,sBAAsB,MAAM,iBAAgB,+CAAe;UAE3D,oBAAoB,SAAS,MAAM;cAChC,+CAAe,YAAY,WAAU,MAAM,OAAO,GAAG,qBAAqB;AAAA,KAClF;;MAGC,MAAM,MAAM;AAAA,MACZ,CAAC,IAAI,OAAO;iBACD,MAAM;wBACC,eAAe,EAAE;wBACjB,aAAa,EAAE;AAAA,SAC9B;AAAA;AACH;UAGI,WAAW,CAAC,UAAiB;YAG3B,EAAE,SAAU,MAAc;oBAClB,eAAe,IAAI;WAC5B,UAAU,MAAM,MAAM,KAAK;AAAA;cAGxB,MAAM;oBACA,aAAa,MAAM,IAAI;AAAA,KACtC;oBAEe,MAAM;oBACN,eAAe,MAAM,IAAI;AAAA,KACxC;WAEM;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC;;;sBArECA,mBAYM;IAZA,OAAKC,mBAAM,kBAAS,MAAU,0BAAS,EAAc;;IACzDC,mBASI;MARD,OAAKD,mBAAM,sBAAS;MACpB,MAAM;MACN,sBAAoB;MACpB,aAAW;MACX,OAAO;MACP,SAAK,qDAAU,yCAAQ;uBAErB,UAAK;IAEVE,WAAQ;;;;;;;"}
@@ -76,7 +76,6 @@ const _sfc_main = defineComponent({
76
76
  rst.className = `${rst.className || ""} ${prefixCls.value}-fixed-column-${column.fixed}-first`;
77
77
  }
78
78
  }
79
- console.log(rst);
80
79
  return rst;
81
80
  });
82
81
  });
@@ -1 +1 @@
1
- {"version":3,"file":"BaseTable.mjs","sources":["../../../../src/components/Table/BaseTable.vue"],"sourcesContent":["<template>\n <table ref=\"tableRef\" :style=\"tableStyle\">\n <ColGroup :columns=\"columns\" :is-head-table=\"!showBody\" />\n <TableHeader v-if=\"showHeader\" :columns=\"computedColumns\" />\n <TableBody v-if=\"showBody\" :columns=\"computedColumns\" />\n </table>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, inject, ref } from 'vue';\nimport type { PropType, CSSProperties } from 'vue';\nimport ColGroup from './tableUnits/ColGroup.vue';\nimport TableHeader from './tableUnits/TableHeader.vue';\nimport TableBody from './tableUnits/TableBody.vue';\n// import useResizeObserver from '../base/hooks/useResizeObserver';\nimport type { InnerColumn, TableContext } from './Table.type';\nimport { getWidth } from './hooks/useTableResize';\n// import { debounce } from '../../utils/tools';\n\nexport default defineComponent({\n name: 'BaseTable',\n components: {\n ColGroup,\n TableHeader,\n TableBody\n },\n props: {\n showHeader: {\n type: Boolean,\n default: false\n },\n showBody: {\n type: Boolean,\n default: false\n },\n columns: {\n type: Array as PropType<InnerColumn[]>,\n default: () => [] as InnerColumn[]\n }\n },\n setup(props) {\n const {\n prefixCls,\n props: { width },\n size: { tableWidth, columnWidths }\n } = inject<TableContext>('tableContext', {} as TableContext);\n const tableRef = ref<HTMLElement | null>(null);\n\n const tableStyle = computed(() => {\n const style = {} as CSSProperties;\n if (width.value) {\n style.width = typeof width.value === 'number' ? `${width.value}px` : width.value;\n } else if (props.columns.some((x) => x.fixed)) {\n // style.width = 'max-content';\n style.minWidth = '100%';\n }\n if (props.columns.some((x) => x.ellipsis) || props.columns.some((x) => x.resizable) || props.columns.some((x) => x.fixed)) {\n style.tableLayout = 'fixed';\n } else {\n style.tableLayout = 'auto';\n }\n\n return style;\n });\n\n const computedColumns = computed(() => {\n let left = 0;\n let right = props.columns\n .filter((x) => x.fixed === 'right')\n .reduce((sum, column) => {\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n return sum + w;\n }, 0);\n return props.columns.map((column) => {\n const rst = {\n ...column,\n className: column.fixed\n ? `${column.className || ''} ${prefixCls.value}-fixed-column ${prefixCls.value}-fixed-column-${column.fixed}`\n : column.className\n };\n if (column.fixed === 'left') {\n rst.left = left;\n const w = getWidth(columnWidths.value[column.key] ?? column.width ?? column.minWidth, tableWidth.value);\n left += w;\n if (column.lastLeft) {\n rst.className = `${rst.className || ''} ${prefixCls.value}-fixed-column-${column.fixed}-last`;\n }\n }\n if (column.fixed === 'right') {\n const w = getWidth(columnWidths.value[column.key] ?? column.width ?? column.minWidth, tableWidth.value);\n right -= w;\n rst.right = right;\n if (column.firstRight) {\n rst.className = `${rst.className || ''} ${prefixCls.value}-fixed-column-${column.fixed}-first`;\n }\n }\n console.log(rst);\n return rst;\n });\n });\n\n // const debouncedHandleResize = debounce(syncFixedTableRowHeight, 150);\n // useResizeObserver(tableRef, debouncedHandleResize);\n\n return {\n tableRef,\n prefixCls,\n tableStyle,\n computedColumns\n };\n }\n});\n</script>\n"],"names":["_createElementBlock","_normalizeStyle","_createVNode","_createBlock"],"mappings":";;;;;;;AAmBA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA;AACF,EACA,OAAO;AAAA,IACL,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM;AAAC;AAClB;AACF,EACA,MAAM,OAAO;UACL;AAAA,MACJ;AAAA,MACA,OAAO,EAAE;AAAM,MACf,MAAM,EAAE,YAAY;AAAa,QAC/B,OAAqB,gBAAgB,EAAkB;UACrD,WAAW,IAAwB,IAAI;UAEvC,aAAa,SAAS,MAAM;YAC1B,QAAQ;UACV,MAAM,OAAO;cACT,QAAQ,OAAO,MAAM,UAAU,WAAW,GAAG,MAAM,YAAY,MAAM;AAAA,iBAClE,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG;cAEvC,WAAW;AAAA;UAEf,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,KAAK,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG;cACnH,cAAc;AAAA,aACf;cACC,cAAc;AAAA;aAGf;AAAA,KACR;UAEK,kBAAkB,SAAS,MAAM;UACjC,OAAO;UACP,QAAQ,MAAM,QACf,OAAO,CAAC,MAAM,EAAE,UAAU,OAAO,EACjC,OAAO,CAAC,KAAK,WAAW;AA5DjC;cA6DgB,IAAI,UAAS,YAAO,UAAP,YAAgB,OAAO,UAAU,WAAW,KAAK;eAC7D,MAAM;AAAA,SACZ,CAAC;aACC,MAAM,QAAQ,IAAI,CAAC,WAAW;AAhE3C;cAiEc,MAAM;AAAA,UACV,GAAG;AAAA,UACH,WAAW,OAAO,QACd,GAAG,OAAO,aAAa,MAAM,UAAU,sBAAsB,UAAU,sBAAsB,OAAO,UACpG,OAAO;AAAA;YAET,OAAO,UAAU,QAAQ;cACvB,OAAO;gBACL,IAAI,UAAS,wBAAa,MAAM,OAAO,SAA1B,YAAkC,OAAO,UAAzC,YAAkD,OAAO,UAAU,WAAW,KAAK;kBAC9F;cACJ,OAAO,UAAU;gBACf,YAAY,GAAG,IAAI,aAAa,MAAM,UAAU,sBAAsB,OAAO;AAAA;AACnF;YAEE,OAAO,UAAU,SAAS;gBACtB,IAAI,UAAS,wBAAa,MAAM,OAAO,SAA1B,YAAkC,OAAO,UAAzC,YAAkD,OAAO,UAAU,WAAW,KAAK;mBAC7F;cACL,QAAQ;cACR,OAAO,YAAY;gBACjB,YAAY,GAAG,IAAI,aAAa,MAAM,UAAU,sBAAsB,OAAO;AAAA;AACnF;gBAEM,IAAI,GAAG;eACR;AAAA,OACR;AAAA,KACF;WAKM;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC;;;;;sBA9GCA,mBAIQ;IAJD,KAAI;AAAA,IAAY,OAAKC,eAAE,eAAU;AAAA;IACtCC,YAA0D;MAA/C,SAAS;MAAU,iBAAa,CAAG;;IAC3B,gCAAnBC,YAA4D;;MAA5B,SAAS;;IACxB,8BAAjBA,YAAwD;;MAA5B,SAAS;;;;;;;;"}
1
+ {"version":3,"file":"BaseTable.mjs","sources":["../../../../src/components/Table/BaseTable.vue"],"sourcesContent":["<template>\n <table ref=\"tableRef\" :style=\"tableStyle\">\n <ColGroup :columns=\"columns\" :is-head-table=\"!showBody\" />\n <TableHeader v-if=\"showHeader\" :columns=\"computedColumns\" />\n <TableBody v-if=\"showBody\" :columns=\"computedColumns\" />\n </table>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, inject, ref } from 'vue';\nimport type { PropType, CSSProperties } from 'vue';\nimport ColGroup from './tableUnits/ColGroup.vue';\nimport TableHeader from './tableUnits/TableHeader.vue';\nimport TableBody from './tableUnits/TableBody.vue';\n// import useResizeObserver from '../base/hooks/useResizeObserver';\nimport type { InnerColumn, TableContext } from './Table.type';\nimport { getWidth } from './hooks/useTableResize';\n// import { debounce } from '../../utils/tools';\n\nexport default defineComponent({\n name: 'BaseTable',\n components: {\n ColGroup,\n TableHeader,\n TableBody\n },\n props: {\n showHeader: {\n type: Boolean,\n default: false\n },\n showBody: {\n type: Boolean,\n default: false\n },\n columns: {\n type: Array as PropType<InnerColumn[]>,\n default: () => [] as InnerColumn[]\n }\n },\n setup(props) {\n const {\n prefixCls,\n props: { width },\n size: { tableWidth, columnWidths }\n } = inject<TableContext>('tableContext', {} as TableContext);\n const tableRef = ref<HTMLElement | null>(null);\n\n const tableStyle = computed(() => {\n const style = {} as CSSProperties;\n if (width.value) {\n style.width = typeof width.value === 'number' ? `${width.value}px` : width.value;\n } else if (props.columns.some((x) => x.fixed)) {\n // style.width = 'max-content';\n style.minWidth = '100%';\n }\n if (props.columns.some((x) => x.ellipsis) || props.columns.some((x) => x.resizable) || props.columns.some((x) => x.fixed)) {\n style.tableLayout = 'fixed';\n } else {\n style.tableLayout = 'auto';\n }\n\n return style;\n });\n\n const computedColumns = computed(() => {\n let left = 0;\n let right = props.columns\n .filter((x) => x.fixed === 'right')\n .reduce((sum, column) => {\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n return sum + w;\n }, 0);\n return props.columns.map((column) => {\n const rst = {\n ...column,\n className: column.fixed\n ? `${column.className || ''} ${prefixCls.value}-fixed-column ${prefixCls.value}-fixed-column-${column.fixed}`\n : column.className\n };\n if (column.fixed === 'left') {\n rst.left = left;\n const w = getWidth(columnWidths.value[column.key] ?? column.width ?? column.minWidth, tableWidth.value);\n left += w;\n if (column.lastLeft) {\n rst.className = `${rst.className || ''} ${prefixCls.value}-fixed-column-${column.fixed}-last`;\n }\n }\n if (column.fixed === 'right') {\n const w = getWidth(columnWidths.value[column.key] ?? column.width ?? column.minWidth, tableWidth.value);\n right -= w;\n rst.right = right;\n if (column.firstRight) {\n rst.className = `${rst.className || ''} ${prefixCls.value}-fixed-column-${column.fixed}-first`;\n }\n }\n return rst;\n });\n });\n\n // const debouncedHandleResize = debounce(syncFixedTableRowHeight, 150);\n // useResizeObserver(tableRef, debouncedHandleResize);\n\n return {\n tableRef,\n prefixCls,\n tableStyle,\n computedColumns\n };\n }\n});\n</script>\n"],"names":["_createElementBlock","_normalizeStyle","_createVNode","_createBlock"],"mappings":";;;;;;;AAmBA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA;AACF,EACA,OAAO;AAAA,IACL,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM;AAAC;AAClB;AACF,EACA,MAAM,OAAO;UACL;AAAA,MACJ;AAAA,MACA,OAAO,EAAE;AAAM,MACf,MAAM,EAAE,YAAY;AAAa,QAC/B,OAAqB,gBAAgB,EAAkB;UACrD,WAAW,IAAwB,IAAI;UAEvC,aAAa,SAAS,MAAM;YAC1B,QAAQ;UACV,MAAM,OAAO;cACT,QAAQ,OAAO,MAAM,UAAU,WAAW,GAAG,MAAM,YAAY,MAAM;AAAA,iBAClE,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG;cAEvC,WAAW;AAAA;UAEf,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,KAAK,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG;cACnH,cAAc;AAAA,aACf;cACC,cAAc;AAAA;aAGf;AAAA,KACR;UAEK,kBAAkB,SAAS,MAAM;UACjC,OAAO;UACP,QAAQ,MAAM,QACf,OAAO,CAAC,MAAM,EAAE,UAAU,OAAO,EACjC,OAAO,CAAC,KAAK,WAAW;AA5DjC;cA6DgB,IAAI,UAAS,YAAO,UAAP,YAAgB,OAAO,UAAU,WAAW,KAAK;eAC7D,MAAM;AAAA,SACZ,CAAC;aACC,MAAM,QAAQ,IAAI,CAAC,WAAW;AAhE3C;cAiEc,MAAM;AAAA,UACV,GAAG;AAAA,UACH,WAAW,OAAO,QACd,GAAG,OAAO,aAAa,MAAM,UAAU,sBAAsB,UAAU,sBAAsB,OAAO,UACpG,OAAO;AAAA;YAET,OAAO,UAAU,QAAQ;cACvB,OAAO;gBACL,IAAI,UAAS,wBAAa,MAAM,OAAO,SAA1B,YAAkC,OAAO,UAAzC,YAAkD,OAAO,UAAU,WAAW,KAAK;kBAC9F;cACJ,OAAO,UAAU;gBACf,YAAY,GAAG,IAAI,aAAa,MAAM,UAAU,sBAAsB,OAAO;AAAA;AACnF;YAEE,OAAO,UAAU,SAAS;gBACtB,IAAI,UAAS,wBAAa,MAAM,OAAO,SAA1B,YAAkC,OAAO,UAAzC,YAAkD,OAAO,UAAU,WAAW,KAAK;mBAC7F;cACL,QAAQ;cACR,OAAO,YAAY;gBACjB,YAAY,GAAG,IAAI,aAAa,MAAM,UAAU,sBAAsB,OAAO;AAAA;AACnF;eAEK;AAAA,OACR;AAAA,KACF;WAKM;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC;;;;;sBA7GCA,mBAIQ;IAJD,KAAI;AAAA,IAAY,OAAKC,eAAE,eAAU;AAAA;IACtCC,YAA0D;MAA/C,SAAS;MAAU,iBAAa,CAAG;;IAC3B,gCAAnBC,YAA4D;;MAA5B,SAAS;;IACxB,8BAAjBA,YAAwD;;MAA5B,SAAS;;;;;;;;"}
@@ -41,12 +41,22 @@ function useDraggable(props, tableRefs) {
41
41
  }, {
42
42
  flush: "post"
43
43
  });
44
+ const getClientY = (event) => {
45
+ if ("touches" in event && event.touches.length > 0) {
46
+ return event.touches[0].clientY;
47
+ }
48
+ if ("clientY" in event) {
49
+ return event.clientY;
50
+ }
51
+ return 0;
52
+ };
44
53
  const setRowRefsTranslate = (event) => {
45
54
  const currentRowData = rowDataMap.value[sourceRowKey];
46
55
  const {
47
56
  height: currentHeight
48
57
  } = currentRowData.rowRef[0].value.getBoundingClientRect();
49
- const realClientY = event.clientY + tableRefs.bodyTable.wrapRef.scrollTop;
58
+ const clientY = getClientY(event);
59
+ const realClientY = clientY + tableRefs.bodyTable.wrapRef.scrollTop;
50
60
  const safeTranslateY = Math.max(relativeMinY, Math.min(realClientY - dragStartPosition, relativeMaxY));
51
61
  currentRowData.rowRef.forEach((currentItem) => {
52
62
  currentItem.value.style.transform = `translateY(${safeTranslateY}px)`;
@@ -62,7 +72,7 @@ function useDraggable(props, tableRefs) {
62
72
  height,
63
73
  top
64
74
  } = rowData.rowRef[0].value.getBoundingClientRect();
65
- const position = top + Number((height / 2).toFixed(2)) < event.clientY ? 1 : -1;
75
+ const position = top + Number((height / 2).toFixed(2)) < clientY ? 1 : -1;
66
76
  if (!(sort + position)) {
67
77
  let translateY = currentHeight;
68
78
  let index = Math.min(targetIndex, rowData.index);
@@ -95,10 +105,11 @@ function useDraggable(props, tableRefs) {
95
105
  }
96
106
  };
97
107
  const handleBodyScrollY = (event) => {
98
- if (bodyTop + bodyHeight > event.clientY && event.clientY > bodyTop) {
108
+ const clientY = getClientY(event);
109
+ if (bodyTop + bodyHeight > clientY && clientY > bodyTop) {
99
110
  clearBodyScrollY();
100
111
  } else if (!scrollTimer) {
101
- const px = event.clientY < bodyTop ? -3 : 3;
112
+ const px = clientY < bodyTop ? -3 : 3;
102
113
  scrollTimer = setInterval(() => {
103
114
  tableRefs.bodyTable.setScrollTop(Math.max(0, Math.min(tableRefs.bodyTable.wrapRef.scrollTop + px, tableHeight - bodyHeight)));
104
115
  setRowRefsTranslate(event);
@@ -111,6 +122,13 @@ function useDraggable(props, tableRefs) {
111
122
  setRowRefsTranslate(event);
112
123
  }
113
124
  };
125
+ const handleTouchmove = (event) => {
126
+ event.preventDefault();
127
+ handleBodyScrollY(event);
128
+ if (!scrollTimer) {
129
+ setRowRefsTranslate(event);
130
+ }
131
+ };
114
132
  const disableWheel = (e) => {
115
133
  e.preventDefault();
116
134
  };
@@ -137,11 +155,15 @@ function useDraggable(props, tableRefs) {
137
155
  window.removeEventListener("mousemove", handleMousemove);
138
156
  window.removeEventListener("mouseup", clearDrag);
139
157
  window.removeEventListener("mousewheel", disableWheel);
158
+ window.removeEventListener("touchmove", handleTouchmove);
159
+ window.removeEventListener("touchend", clearDrag);
160
+ window.removeEventListener("touchcancel", clearDrag);
140
161
  };
141
162
  const handleDragStart = (event, param) => {
142
163
  const bodyTable = tableRefs.bodyTable.wrapRef;
143
164
  sourceRowKey = param.rowKey.toString();
144
- dragStartPosition = event.clientY + bodyTable.scrollTop;
165
+ const clientY = getClientY(event);
166
+ dragStartPosition = clientY + bodyTable.scrollTop;
145
167
  const sortRowData = Object.values(rowDataMap.value).sort((a, b) => a.index - b.index);
146
168
  const {
147
169
  top
@@ -158,12 +180,21 @@ function useDraggable(props, tableRefs) {
158
180
  bodyTop = bodyTopInner;
159
181
  bodyHeight = bodyHeightInner;
160
182
  tableHeight = tableHeightInner;
161
- handleMousemove(event);
183
+ if ("touches" in event) {
184
+ handleTouchmove(event);
185
+ } else {
186
+ handleMousemove(event);
187
+ }
162
188
  window.addEventListener("mousemove", handleMousemove);
163
189
  window.addEventListener("mouseup", clearDrag);
164
190
  window.addEventListener("mousewheel", disableWheel, {
165
191
  passive: false
166
192
  });
193
+ window.addEventListener("touchmove", handleTouchmove, {
194
+ passive: false
195
+ });
196
+ window.addEventListener("touchend", clearDrag);
197
+ window.addEventListener("touchcancel", clearDrag);
167
198
  event.preventDefault();
168
199
  };
169
200
  const draggableColumn = computed(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"useDraggable.mjs","sources":["../../../../../src/components/Table/hooks/useDraggable.tsx"],"sourcesContent":["import { computed, ref, watch } from 'vue';\nimport type { Ref } from 'vue';\nimport type { ColumnSlotParams, InnerColumn, TableProps, TableRefs } from '../Table.type';\nimport DraggableIcon from '../tableUnits/DraggableIcon.vue';\n\nexport interface RowData {\n rowKey: string | number;\n index: number;\n data: Record<string, any>;\n rowRef: Ref<HTMLElement>[];\n}\n\nexport interface BodyScrollMethod {\n handle: null | ((e: any) => void);\n}\n\nexport default function useDraggable(props: TableProps, tableRefs: TableRefs) {\n let sourceRowKey: string | number = '';\n let targetIndex = 0;\n let dragStartPosition = 0;\n let relativeMinY = 0;\n let relativeMaxY = 0;\n const rowDataMap = ref<Record<string, RowData>>({});\n\n const setRowRefs = (val: RowData) => {\n if (props.draggable) {\n const historyRowData = rowDataMap.value[val.rowKey.toString()];\n if (historyRowData) {\n const { rowRef } = historyRowData;\n historyRowData.index = val.index;\n\n if (rowRef[rowRef.length - 1].value) {\n rowRef.push(...val.rowRef);\n } else {\n rowRef.splice(rowRef.length - 2, 1, val.rowRef[0]);\n }\n } else {\n rowDataMap.value[val.rowKey.toString()] = val;\n }\n }\n };\n const clearRowRefs = () => {\n if (props.draggable) {\n Object.keys(rowDataMap.value).forEach((key) => {\n const rowData = rowDataMap.value[key];\n if (rowData.rowRef.every((item) => !item.value)) {\n delete rowDataMap.value[key];\n }\n });\n }\n };\n watch(\n () => props.data,\n () => {\n clearRowRefs();\n },\n { flush: 'post' }\n );\n\n const setRowRefsTranslate = (event: MouseEvent) => {\n const currentRowData = rowDataMap.value[sourceRowKey];\n const { height: currentHeight } = currentRowData.rowRef[0].value.getBoundingClientRect();\n const realClientY = event.clientY + (tableRefs.bodyTable as any).wrapRef.scrollTop;\n const safeTranslateY = Math.max(relativeMinY, Math.min(realClientY - dragStartPosition, relativeMaxY));\n currentRowData.rowRef.forEach((currentItem) => {\n currentItem.value.style.transform = `translateY(${safeTranslateY}px)`;\n currentItem.value.style.position = 'relative';\n currentItem.value.style.zIndex = '999';\n });\n targetIndex = currentRowData.index;\n Object.keys(rowDataMap.value).forEach((rowKey) => {\n if (rowKey !== sourceRowKey) {\n const rowData = rowDataMap.value[rowKey];\n const sort = rowData.index < currentRowData.index ? 1 : -1;\n\n const { height, top } = rowData.rowRef[0].value.getBoundingClientRect();\n const position = top + Number((height / 2).toFixed(2)) < event.clientY ? 1 : -1;\n\n if (!(sort + position)) {\n let translateY = currentHeight;\n let index = Math.min(targetIndex, rowData.index);\n if (sort === -1) {\n translateY = -currentHeight;\n index = Math.max(targetIndex, rowData.index);\n }\n targetIndex = index;\n rowData.rowRef.forEach((rowRefItem) => {\n rowRefItem.value.style.transform = `translateY(${translateY}px)`;\n rowRefItem.value.style.transition = 'transform 0.3s';\n });\n } else {\n rowData.rowRef.forEach((rowRefItem) => {\n rowRefItem.value.style.transform = 'none';\n rowRefItem.value.style.transition = 'transform 0.3s';\n });\n }\n }\n });\n };\n\n let bodyTop = 0;\n let bodyHeight = 0;\n let tableHeight = 0;\n let scrollTimer: any | null = null;\n const clearBodyScrollY = () => {\n if (scrollTimer) {\n clearInterval(scrollTimer);\n scrollTimer = null;\n }\n };\n const handleBodyScrollY = (event: MouseEvent) => {\n if (bodyTop + bodyHeight > event.clientY && event.clientY > bodyTop) {\n clearBodyScrollY();\n } else if (!scrollTimer) {\n const px = event.clientY < bodyTop ? -3 : 3;\n scrollTimer = setInterval(() => {\n (tableRefs.bodyTable as any).setScrollTop(\n Math.max(0, Math.min((tableRefs.bodyTable as any).wrapRef.scrollTop + px, tableHeight - bodyHeight))\n );\n setRowRefsTranslate(event);\n }, 10);\n }\n };\n const handleMousemove = (event: MouseEvent) => {\n handleBodyScrollY(event);\n\n if (!scrollTimer) {\n setRowRefsTranslate(event);\n }\n };\n\n const disableWheel = (e: Event) => {\n e.preventDefault();\n };\n\n const clearDrag = () => {\n let targetRowKey = sourceRowKey;\n Object.values(rowDataMap.value).forEach((rowData) => {\n if (rowData.index === targetIndex) {\n targetRowKey = rowData.rowKey.toString();\n }\n rowData.rowRef.forEach((rowRefItem) => {\n rowRefItem.value.style.transform = 'none';\n rowRefItem.value.style.transition = 'none';\n rowRefItem.value.style.position = 'unset';\n rowRefItem.value.style.zIndex = 'auto';\n });\n });\n if (targetRowKey !== sourceRowKey) {\n if (props.draggable.onDragDrop) {\n props.draggable.onDragDrop(sourceRowKey, targetRowKey);\n }\n }\n sourceRowKey = '';\n clearBodyScrollY();\n window.removeEventListener('mousemove', handleMousemove);\n window.removeEventListener('mouseup', clearDrag);\n window.removeEventListener('mousewheel', disableWheel);\n };\n const handleDragStart = (event: MouseEvent, param: ColumnSlotParams) => {\n const bodyTable = (tableRefs.bodyTable as any).wrapRef;\n\n sourceRowKey = param.rowKey.toString();\n\n dragStartPosition = event.clientY + bodyTable.scrollTop;\n\n const sortRowData = Object.values(rowDataMap.value).sort((a, b) => a.index - b.index);\n const { top } = rowDataMap.value[sourceRowKey].rowRef[0].value.getBoundingClientRect();\n relativeMinY = sortRowData[0].rowRef[0].value.getBoundingClientRect().top - top;\n relativeMaxY = sortRowData[sortRowData.length - 1].rowRef[0].value.getBoundingClientRect().top - top;\n const { top: bodyTopInner, height: bodyHeightInner } = bodyTable.getBoundingClientRect();\n const { height: tableHeightInner } = bodyTable.children[0].getBoundingClientRect();\n bodyTop = bodyTopInner;\n bodyHeight = bodyHeightInner;\n tableHeight = tableHeightInner;\n\n handleMousemove(event);\n\n window.addEventListener('mousemove', handleMousemove);\n window.addEventListener('mouseup', clearDrag);\n window.addEventListener('mousewheel', disableWheel, { passive: false });\n\n event.preventDefault();\n };\n\n const draggableColumn = computed(() => {\n if (props.draggable) {\n const column: InnerColumn = {\n key: 'draggable-column',\n type: 'draggable',\n width: 50,\n align: 'center',\n render: (param) => {\n return <DraggableIcon onDragStart={(event: MouseEvent) => handleDragStart(event, param)} />;\n }\n // handleDragStart\n };\n if ('fixed' in props.draggable) {\n column.fixed = props.draggable.fixed;\n } else if (props.columns.some((x) => x.fixed === 'left' || x.fixed === true)) {\n column.fixed = 'left';\n }\n return column;\n }\n return null;\n });\n return {\n setRowRefs,\n draggableColumn\n };\n}\n"],"names":["useDraggable","props","tableRefs","sourceRowKey","targetIndex","dragStartPosition","relativeMinY","relativeMaxY","rowDataMap","ref","setRowRefs","val","draggable","historyRowData","value","rowKey","toString","rowRef","index","length","push","splice","clearRowRefs","Object","keys","forEach","key","rowData","every","item","watch","data","flush","setRowRefsTranslate","event","currentRowData","height","currentHeight","getBoundingClientRect","realClientY","clientY","bodyTable","wrapRef","scrollTop","safeTranslateY","Math","max","min","currentItem","style","transform","position","zIndex","sort","top","Number","toFixed","translateY","rowRefItem","transition","bodyTop","bodyHeight","tableHeight","scrollTimer","clearBodyScrollY","clearInterval","handleBodyScrollY","px","setInterval","setScrollTop","handleMousemove","disableWheel","e","preventDefault","clearDrag","targetRowKey","values","onDragDrop","window","removeEventListener","handleDragStart","param","sortRowData","a","b","bodyTopInner","bodyHeightInner","tableHeightInner","children","addEventListener","passive","draggableColumn","computed","column","type","width","align","render","_createVNode","DraggableIcon","fixed","columns","some","x"],"mappings":"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"}
1
+ {"version":3,"file":"useDraggable.mjs","sources":["../../../../../src/components/Table/hooks/useDraggable.tsx"],"sourcesContent":["import { computed, ref, watch } from 'vue';\nimport type { Ref } from 'vue';\nimport type { ColumnSlotParams, InnerColumn, TableProps, TableRefs } from '../Table.type';\nimport DraggableIcon from '../tableUnits/DraggableIcon.vue';\n\nexport interface RowData {\n rowKey: string | number;\n index: number;\n data: Record<string, any>;\n rowRef: Ref<HTMLElement>[];\n}\n\nexport interface BodyScrollMethod {\n handle: null | ((e: any) => void);\n}\n\nexport default function useDraggable(props: TableProps, tableRefs: TableRefs) {\n let sourceRowKey: string | number = '';\n let targetIndex = 0;\n let dragStartPosition = 0;\n let relativeMinY = 0;\n let relativeMaxY = 0;\n const rowDataMap = ref<Record<string, RowData>>({});\n\n const setRowRefs = (val: RowData) => {\n if (props.draggable) {\n const historyRowData = rowDataMap.value[val.rowKey.toString()];\n if (historyRowData) {\n const { rowRef } = historyRowData;\n historyRowData.index = val.index;\n\n if (rowRef[rowRef.length - 1].value) {\n rowRef.push(...val.rowRef);\n } else {\n rowRef.splice(rowRef.length - 2, 1, val.rowRef[0]);\n }\n } else {\n rowDataMap.value[val.rowKey.toString()] = val;\n }\n }\n };\n const clearRowRefs = () => {\n if (props.draggable) {\n Object.keys(rowDataMap.value).forEach((key) => {\n const rowData = rowDataMap.value[key];\n if (rowData.rowRef.every((item) => !item.value)) {\n delete rowDataMap.value[key];\n }\n });\n }\n };\n watch(\n () => props.data,\n () => {\n clearRowRefs();\n },\n { flush: 'post' }\n );\n\n // Extract clientY from mouse or touch event\n const getClientY = (event: MouseEvent | TouchEvent): number => {\n if ('touches' in event && event.touches.length > 0) {\n // Touch event - get Y coordinate from first touch point\n return event.touches[0].clientY;\n }\n if ('clientY' in event) {\n // Mouse event - use clientY directly\n return event.clientY;\n }\n return 0;\n };\n\n const setRowRefsTranslate = (event: MouseEvent | TouchEvent) => {\n const currentRowData = rowDataMap.value[sourceRowKey];\n const { height: currentHeight } = currentRowData.rowRef[0].value.getBoundingClientRect();\n const clientY = getClientY(event);\n const realClientY = clientY + (tableRefs.bodyTable as any).wrapRef.scrollTop;\n const safeTranslateY = Math.max(relativeMinY, Math.min(realClientY - dragStartPosition, relativeMaxY));\n currentRowData.rowRef.forEach((currentItem) => {\n currentItem.value.style.transform = `translateY(${safeTranslateY}px)`;\n currentItem.value.style.position = 'relative';\n currentItem.value.style.zIndex = '999';\n });\n targetIndex = currentRowData.index;\n Object.keys(rowDataMap.value).forEach((rowKey) => {\n if (rowKey !== sourceRowKey) {\n const rowData = rowDataMap.value[rowKey];\n const sort = rowData.index < currentRowData.index ? 1 : -1;\n\n const { height, top } = rowData.rowRef[0].value.getBoundingClientRect();\n const position = top + Number((height / 2).toFixed(2)) < clientY ? 1 : -1;\n\n if (!(sort + position)) {\n let translateY = currentHeight;\n let index = Math.min(targetIndex, rowData.index);\n if (sort === -1) {\n translateY = -currentHeight;\n index = Math.max(targetIndex, rowData.index);\n }\n targetIndex = index;\n rowData.rowRef.forEach((rowRefItem) => {\n rowRefItem.value.style.transform = `translateY(${translateY}px)`;\n rowRefItem.value.style.transition = 'transform 0.3s';\n });\n } else {\n rowData.rowRef.forEach((rowRefItem) => {\n rowRefItem.value.style.transform = 'none';\n rowRefItem.value.style.transition = 'transform 0.3s';\n });\n }\n }\n });\n };\n\n let bodyTop = 0;\n let bodyHeight = 0;\n let tableHeight = 0;\n let scrollTimer: any | null = null;\n const clearBodyScrollY = () => {\n if (scrollTimer) {\n clearInterval(scrollTimer);\n scrollTimer = null;\n }\n };\n const handleBodyScrollY = (event: MouseEvent | TouchEvent) => {\n const clientY = getClientY(event);\n if (bodyTop + bodyHeight > clientY && clientY > bodyTop) {\n clearBodyScrollY();\n } else if (!scrollTimer) {\n const px = clientY < bodyTop ? -3 : 3;\n scrollTimer = setInterval(() => {\n (tableRefs.bodyTable as any).setScrollTop(\n Math.max(0, Math.min((tableRefs.bodyTable as any).wrapRef.scrollTop + px, tableHeight - bodyHeight))\n );\n setRowRefsTranslate(event);\n }, 10);\n }\n };\n\n // Handle mouse move event\n const handleMousemove = (event: MouseEvent) => {\n handleBodyScrollY(event);\n\n if (!scrollTimer) {\n setRowRefsTranslate(event);\n }\n };\n\n // Handle touch move event for mobile devices\n const handleTouchmove = (event: TouchEvent) => {\n // Prevent default scrolling behavior during drag\n event.preventDefault();\n handleBodyScrollY(event);\n\n if (!scrollTimer) {\n setRowRefsTranslate(event);\n }\n };\n\n const disableWheel = (e: Event) => {\n e.preventDefault();\n };\n\n const clearDrag = () => {\n let targetRowKey = sourceRowKey;\n Object.values(rowDataMap.value).forEach((rowData) => {\n if (rowData.index === targetIndex) {\n targetRowKey = rowData.rowKey.toString();\n }\n rowData.rowRef.forEach((rowRefItem) => {\n rowRefItem.value.style.transform = 'none';\n rowRefItem.value.style.transition = 'none';\n rowRefItem.value.style.position = 'unset';\n rowRefItem.value.style.zIndex = 'auto';\n });\n });\n if (targetRowKey !== sourceRowKey) {\n if (props.draggable.onDragDrop) {\n props.draggable.onDragDrop(sourceRowKey, targetRowKey);\n }\n }\n sourceRowKey = '';\n clearBodyScrollY();\n // Remove mouse event listeners\n window.removeEventListener('mousemove', handleMousemove);\n window.removeEventListener('mouseup', clearDrag);\n window.removeEventListener('mousewheel', disableWheel);\n // Remove touch event listeners\n window.removeEventListener('touchmove', handleTouchmove);\n window.removeEventListener('touchend', clearDrag);\n window.removeEventListener('touchcancel', clearDrag);\n };\n const handleDragStart = (event: MouseEvent | TouchEvent, param: ColumnSlotParams) => {\n const bodyTable = (tableRefs.bodyTable as any).wrapRef;\n\n sourceRowKey = param.rowKey.toString();\n\n // Get clientY from mouse or touch event\n const clientY = getClientY(event);\n dragStartPosition = clientY + bodyTable.scrollTop;\n\n const sortRowData = Object.values(rowDataMap.value).sort((a, b) => a.index - b.index);\n const { top } = rowDataMap.value[sourceRowKey].rowRef[0].value.getBoundingClientRect();\n relativeMinY = sortRowData[0].rowRef[0].value.getBoundingClientRect().top - top;\n relativeMaxY = sortRowData[sortRowData.length - 1].rowRef[0].value.getBoundingClientRect().top - top;\n const { top: bodyTopInner, height: bodyHeightInner } = bodyTable.getBoundingClientRect();\n const { height: tableHeightInner } = bodyTable.children[0].getBoundingClientRect();\n bodyTop = bodyTopInner;\n bodyHeight = bodyHeightInner;\n tableHeight = tableHeightInner;\n\n // Initialize position\n if ('touches' in event) {\n handleTouchmove(event as TouchEvent);\n } else {\n handleMousemove(event as MouseEvent);\n }\n\n // Add mouse event listeners for desktop\n window.addEventListener('mousemove', handleMousemove);\n window.addEventListener('mouseup', clearDrag);\n window.addEventListener('mousewheel', disableWheel, { passive: false });\n\n // Add touch event listeners for mobile\n window.addEventListener('touchmove', handleTouchmove, { passive: false });\n window.addEventListener('touchend', clearDrag);\n window.addEventListener('touchcancel', clearDrag);\n\n event.preventDefault();\n };\n\n const draggableColumn = computed(() => {\n if (props.draggable) {\n const column: InnerColumn = {\n key: 'draggable-column',\n type: 'draggable',\n width: 50,\n align: 'center',\n render: (param) => {\n return <DraggableIcon onDragStart={(event: MouseEvent | TouchEvent) => handleDragStart(event, param)} />;\n }\n // handleDragStart\n };\n if ('fixed' in props.draggable) {\n column.fixed = props.draggable.fixed;\n } else if (props.columns.some((x) => x.fixed === 'left' || x.fixed === true)) {\n column.fixed = 'left';\n }\n return column;\n }\n return null;\n });\n return {\n setRowRefs,\n draggableColumn\n };\n}\n"],"names":["useDraggable","props","tableRefs","sourceRowKey","targetIndex","dragStartPosition","relativeMinY","relativeMaxY","rowDataMap","ref","setRowRefs","val","draggable","historyRowData","value","rowKey","toString","rowRef","index","length","push","splice","clearRowRefs","Object","keys","forEach","key","rowData","every","item","watch","data","flush","getClientY","event","touches","clientY","setRowRefsTranslate","currentRowData","height","currentHeight","getBoundingClientRect","realClientY","bodyTable","wrapRef","scrollTop","safeTranslateY","Math","max","min","currentItem","style","transform","position","zIndex","sort","top","Number","toFixed","translateY","rowRefItem","transition","bodyTop","bodyHeight","tableHeight","scrollTimer","clearBodyScrollY","clearInterval","handleBodyScrollY","px","setInterval","setScrollTop","handleMousemove","handleTouchmove","preventDefault","disableWheel","e","clearDrag","targetRowKey","values","onDragDrop","window","removeEventListener","handleDragStart","param","sortRowData","a","b","bodyTopInner","bodyHeightInner","tableHeightInner","children","addEventListener","passive","draggableColumn","computed","column","type","width","align","render","_createVNode","DraggableIcon","fixed","columns","some","x"],"mappings":"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"}
@@ -15,9 +15,22 @@ const _sfc_main = defineComponent({
15
15
  const handleDragStart = (e) => {
16
16
  emit("dragStart", e);
17
17
  };
18
+ const handleTouchStart = (e) => {
19
+ e.preventDefault();
20
+ const touch = e.touches[0];
21
+ const syntheticEvent = {
22
+ ...e,
23
+ clientY: touch.clientY,
24
+ clientX: touch.clientX,
25
+ preventDefault: () => e.preventDefault(),
26
+ stopPropagation: () => e.stopPropagation()
27
+ };
28
+ emit("dragStart", syntheticEvent);
29
+ };
18
30
  return {
19
31
  prefixCls,
20
- handleDragStart
32
+ handleDragStart,
33
+ handleTouchStart
21
34
  };
22
35
  }
23
36
  });
@@ -26,13 +39,14 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
26
39
  const _component_UIcon = resolveComponent("UIcon");
27
40
  return openBlock(), createBlock(_component_UIcon, {
28
41
  class: normalizeClass([`${_ctx.prefixCls}-draggable-icon`]),
29
- onMousedown: _ctx.handleDragStart
42
+ onMousedown: _ctx.handleDragStart,
43
+ onTouchstart: _ctx.handleTouchStart
30
44
  }, {
31
45
  default: withCtx(() => [
32
46
  createVNode(_component_GripVertical)
33
47
  ]),
34
48
  _: 1
35
- }, 8, ["class", "onMousedown"]);
49
+ }, 8, ["class", "onMousedown", "onTouchstart"]);
36
50
  }
37
51
  var DraggableIcon = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "/Users/admin/Documents/uxd/uxd-ui/src/components/Table/tableUnits/DraggableIcon.vue"]]);
38
52
 
@@ -1 +1 @@
1
- {"version":3,"file":"DraggableIcon.mjs","sources":["../../../../../src/components/Table/tableUnits/DraggableIcon.vue"],"sourcesContent":["<template>\n <UIcon :class=\"[`${prefixCls}-draggable-icon`]\" @mousedown=\"handleDragStart\">\n <GripVertical />\n </UIcon>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject } from 'vue';\nimport UIcon from '@uxd-ui/components/Icon';\nimport { GripVertical } from 'lucide-vue-next';\nimport type { TableContext } from '../Table.type';\n\nexport default defineComponent({\n name: 'ExpandIcon',\n components: {\n UIcon,\n GripVertical\n },\n emits: ['dragStart'],\n setup(props, { emit }) {\n const { prefixCls } = inject<TableContext>('tableContext', {} as TableContext);\n\n const handleDragStart = (e: DragEvent) => {\n emit('dragStart', e);\n };\n\n return {\n prefixCls,\n handleDragStart\n };\n }\n});\n</script>\n"],"names":["_createBlock","_normalizeClass","_createVNode"],"mappings":";;;;;AAYA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,IACA;AAAA;AACF,EACA,OAAO,CAAC,WAAW;AAAA,EACnB,MAAM,OAAO,EAAE,QAAQ;UACf,EAAE,cAAc,OAAqB,gBAAgB,EAAkB;UAEvE,kBAAkB,CAAC,MAAiB;WACnC,aAAa,CAAC;AAAA;WAGd;AAAA,MACL;AAAA,MACA;AAAA;AACF;AAEJ,CAAC;;;;sBA9BCA,YAEQ;IAFA,OAAKC,mBAAM,+BAAS;IAAqB,aAAW;;qBAC1D,MAAgB;AAAA,MAAhBC,YAAgB;;;;;;;;;"}
1
+ {"version":3,"file":"DraggableIcon.mjs","sources":["../../../../../src/components/Table/tableUnits/DraggableIcon.vue"],"sourcesContent":["<template>\n <UIcon :class=\"[`${prefixCls}-draggable-icon`]\" @mousedown=\"handleDragStart\" @touchstart=\"handleTouchStart\">\n <GripVertical />\n </UIcon>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject } from 'vue';\nimport UIcon from '@uxd-ui/components/Icon';\nimport { GripVertical } from 'lucide-vue-next';\nimport type { TableContext } from '../Table.type';\n\nexport default defineComponent({\n name: 'ExpandIcon',\n components: {\n UIcon,\n GripVertical\n },\n emits: ['dragStart'],\n setup(props, { emit }) {\n const { prefixCls } = inject<TableContext>('tableContext', {} as TableContext);\n\n // Handle mouse drag start\n const handleDragStart = (e: DragEvent) => {\n emit('dragStart', e);\n };\n\n // Handle touch drag start for mobile devices\n const handleTouchStart = (e: TouchEvent) => {\n // Prevent default scrolling behavior\n e.preventDefault();\n // Convert touch event to a compatible format\n // Create a synthetic event object that mimics MouseEvent structure\n const touch = e.touches[0];\n const syntheticEvent = {\n ...e,\n clientY: touch.clientY,\n clientX: touch.clientX,\n preventDefault: () => e.preventDefault(),\n stopPropagation: () => e.stopPropagation()\n } as any;\n emit('dragStart', syntheticEvent);\n };\n\n return {\n prefixCls,\n handleDragStart,\n handleTouchStart\n };\n }\n});\n</script>\n"],"names":["_createBlock","_normalizeClass","_createVNode"],"mappings":";;;;;AAYA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,IACA;AAAA;AACF,EACA,OAAO,CAAC,WAAW;AAAA,EACnB,MAAM,OAAO,EAAE,QAAQ;UACf,EAAE,cAAc,OAAqB,gBAAgB,EAAkB;UAGvE,kBAAkB,CAAC,MAAiB;WACnC,aAAa,CAAC;AAAA;UAIf,mBAAmB,CAAC,MAAkB;QAExC;YAGI,QAAQ,EAAE,QAAQ;YAClB,iBAAiB;AAAA,QACrB,GAAG;AAAA,QACH,SAAS,MAAM;AAAA,QACf,SAAS,MAAM;AAAA,QACf,gBAAgB,MAAM,EAAE;AAAe,QACvC,iBAAiB,MAAM,EAAE;AAAgB;WAEtC,aAAa,cAAc;AAAA;WAG3B;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC;;;;sBAjDCA,YAEQ;IAFA,OAAKC,mBAAM,+BAAS;IAAqB,aAAW;IAAkB,cAAY;;qBACxF,MAAgB;AAAA,MAAhBC,YAAgB;;;;;;;;;"}
@@ -1,6 +1,7 @@
1
1
  declare const _default: import("vue").DefineComponent<{}, {
2
2
  prefixCls: import("vue").ComputedRef<string>;
3
3
  handleDragStart: (e: DragEvent) => void;
4
+ handleTouchStart: (e: TouchEvent) => void;
4
5
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "dragStart"[], "dragStart", import("vue").PublicProps, Readonly<{}> & Readonly<{
5
6
  onDragStart?: (...args: any[]) => any;
6
7
  }>, {}, {}, {
@@ -217,17 +217,17 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
217
217
  }, {
218
218
  default: vue.withCtx(() => [
219
219
  vue.createElementVNode("div", {
220
- class: vue.normalizeClass(`${_ctx.containerClass} ${_ctx.prefixCls}-wrapper`),
220
+ class: vue.normalizeClass(`${_ctx.containerClass} ${_ctx.prefixCls}`),
221
221
  style: vue.normalizeStyle(_ctx.wrapperStyle)
222
222
  }, [
223
223
  vue.createElementVNode("div", {
224
- class: vue.normalizeClass(`${_ctx.prefixCls}`)
224
+ class: vue.normalizeClass(`${_ctx.prefixCls}-inner`)
225
225
  }, [
226
226
  vue.createElementVNode("div", {
227
- class: vue.normalizeClass(`${_ctx.prefixCls}-ink`)
227
+ class: vue.normalizeClass(`${_ctx.prefixCls}-inner-ink`)
228
228
  }, [
229
229
  vue.withDirectives(vue.createElementVNode("span", {
230
- class: vue.normalizeClass(`${_ctx.prefixCls}-ink-ball`),
230
+ class: vue.normalizeClass(`${_ctx.prefixCls}-inner-ink-ball`),
231
231
  style: vue.normalizeStyle({ top: `${_ctx.inkTop}px` })
232
232
  }, null, 6), [
233
233
  [vue.vShow, _ctx.showInk]