vxe-gantt 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.en.md +72 -0
- package/README.ja-JP.md +72 -0
- package/README.md +82 -2
- package/README.zh-TW.md +73 -0
- package/es/components.js +12 -0
- package/es/gantt/index.js +13 -0
- package/es/gantt/src/emits.js +4 -0
- package/es/gantt/src/gantt-body.js +103 -0
- package/es/gantt/src/gantt-chart.js +77 -0
- package/es/gantt/src/gantt-header.js +70 -0
- package/es/gantt/src/gantt-view.js +768 -0
- package/es/gantt/src/gantt.js +1746 -0
- package/es/gantt/src/grid-emits.js +16 -0
- package/es/gantt/src/grid-props.js +7 -0
- package/es/gantt/src/props.js +2 -0
- package/es/gantt/src/table-emits.js +97 -0
- package/es/gantt/src/table-props.js +298 -0
- package/es/gantt/src/util.js +12 -0
- package/es/gantt/style.css +599 -0
- package/es/gantt/style.min.css +1 -0
- package/es/index.esm.js +3 -0
- package/es/style.css +1 -0
- package/es/style.min.css +1 -0
- package/es/ui/index.js +52 -0
- package/es/ui/src/comp.js +2 -0
- package/es/ui/src/dom.js +169 -0
- package/es/ui/src/log.js +4 -0
- package/es/ui/src/utils.js +41 -0
- package/es/ui/src/vn.js +1 -0
- package/es/ui/style.css +0 -0
- package/es/ui/style.min.css +0 -0
- package/es/vxe-gantt/index.js +3 -0
- package/es/vxe-gantt/style.css +599 -0
- package/es/vxe-gantt/style.min.css +1 -0
- package/es/vxe-ui/index.js +3 -0
- package/es/vxe-ui/style.css +0 -0
- package/es/vxe-ui/style.min.css +0 -0
- package/helper/vetur/attributes.json +1 -0
- package/helper/vetur/tags.json +1 -0
- package/lib/components.js +42 -0
- package/lib/components.min.js +1 -0
- package/lib/gantt/index.js +20 -0
- package/lib/gantt/index.min.js +1 -0
- package/lib/gantt/src/emits.js +8 -0
- package/lib/gantt/src/emits.min.js +1 -0
- package/lib/gantt/src/gantt-body.js +118 -0
- package/lib/gantt/src/gantt-body.min.js +1 -0
- package/lib/gantt/src/gantt-chart.js +94 -0
- package/lib/gantt/src/gantt-chart.min.js +1 -0
- package/lib/gantt/src/gantt-header.js +78 -0
- package/lib/gantt/src/gantt-header.min.js +1 -0
- package/lib/gantt/src/gantt-view.js +810 -0
- package/lib/gantt/src/gantt-view.min.js +1 -0
- package/lib/gantt/src/gantt.js +1997 -0
- package/lib/gantt/src/gantt.min.js +1 -0
- package/lib/gantt/src/grid-emits.js +8 -0
- package/lib/gantt/src/grid-emits.min.js +1 -0
- package/lib/gantt/src/grid-props.js +24 -0
- package/lib/gantt/src/grid-props.min.js +1 -0
- package/lib/gantt/src/props.js +13 -0
- package/lib/gantt/src/props.min.js +1 -0
- package/lib/gantt/src/table-emits.js +7 -0
- package/lib/gantt/src/table-emits.min.js +1 -0
- package/lib/gantt/src/table-props.js +306 -0
- package/lib/gantt/src/table-props.min.js +1 -0
- package/lib/gantt/src/util.js +19 -0
- package/lib/gantt/src/util.min.js +1 -0
- package/lib/gantt/style/index.js +1 -0
- package/lib/gantt/style/style.css +599 -0
- package/lib/gantt/style/style.min.css +1 -0
- package/lib/index.common.js +21 -0
- package/lib/index.umd.js +6731 -0
- package/lib/index.umd.min.js +1 -0
- package/lib/style.css +1 -0
- package/lib/style.min.css +1 -0
- package/lib/ui/index.js +69 -0
- package/lib/ui/index.min.js +1 -0
- package/lib/ui/src/comp.js +8 -0
- package/lib/ui/src/comp.min.js +1 -0
- package/lib/ui/src/dom.js +217 -0
- package/lib/ui/src/dom.min.js +1 -0
- package/lib/ui/src/log.js +10 -0
- package/lib/ui/src/log.min.js +1 -0
- package/lib/ui/src/utils.js +59 -0
- package/lib/ui/src/utils.min.js +1 -0
- package/lib/ui/src/vn.js +1 -0
- package/lib/ui/src/vn.min.js +0 -0
- package/lib/ui/style/index.js +1 -0
- package/lib/ui/style/style.css +0 -0
- package/lib/ui/style/style.min.css +0 -0
- package/lib/vxe-gantt/index.js +21 -0
- package/lib/vxe-gantt/index.min.js +1 -0
- package/lib/vxe-gantt/style/index.js +1 -0
- package/lib/vxe-gantt/style/style.css +599 -0
- package/lib/vxe-gantt/style/style.min.css +1 -0
- package/lib/vxe-ui/index.js +21 -0
- package/lib/vxe-ui/index.min.js +1 -0
- package/lib/vxe-ui/style/index.js +1 -0
- package/lib/vxe-ui/style/style.css +0 -0
- package/lib/vxe-ui/style/style.min.css +0 -0
- package/package.json +58 -21
- package/packages/components.ts +19 -0
- package/packages/gantt/index.ts +17 -0
- package/packages/gantt/src/emits.ts +7 -0
- package/packages/gantt/src/gantt-body.ts +119 -0
- package/packages/gantt/src/gantt-chart.ts +92 -0
- package/packages/gantt/src/gantt-header.ts +79 -0
- package/packages/gantt/src/gantt-view.ts +840 -0
- package/packages/gantt/src/gantt.ts +1869 -0
- package/packages/gantt/src/grid-emits.ts +19 -0
- package/packages/gantt/src/grid-props.ts +23 -0
- package/packages/gantt/src/props.ts +13 -0
- package/packages/gantt/src/table-emits.ts +109 -0
- package/packages/gantt/src/table-props.ts +304 -0
- package/packages/gantt/src/util.ts +15 -0
- package/packages/index.ts +4 -0
- package/packages/ui/index.ts +58 -0
- package/packages/ui/src/comp.ts +3 -0
- package/packages/ui/src/dom.ts +196 -0
- package/packages/ui/src/log.ts +6 -0
- package/packages/ui/src/utils.ts +50 -0
- package/packages/ui/src/vn.ts +0 -0
- package/styles/all.scss +3 -0
- package/styles/base.scss +2 -0
- package/styles/components/gantt-module/all.scss +1 -0
- package/styles/components/gantt-module/gantt-chart.scss +46 -0
- package/styles/components/gantt.scss +586 -0
- package/styles/components/ui.scss +0 -0
- package/styles/cssvar.scss +0 -0
- package/styles/helpers/baseMixin.scss +96 -0
- package/styles/helpers/baseVar.scss +4 -0
- package/styles/helpers/placement.scss +39 -0
- package/styles/theme/base.scss +7 -0
- package/styles/theme/dark.scss +7 -0
- package/styles/theme/light.scss +7 -0
- package/styles/variable.scss +0 -0
- package/types/all.d.ts +16 -0
- package/types/index.d.ts +4 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import XEUtils from 'xe-utils'
|
|
2
|
+
|
|
3
|
+
const reClsMap: { [key: string]: any } = {}
|
|
4
|
+
|
|
5
|
+
let tpImgEl: HTMLImageElement | undefined
|
|
6
|
+
|
|
7
|
+
export function initTpImg () {
|
|
8
|
+
if (!tpImgEl) {
|
|
9
|
+
tpImgEl = new Image()
|
|
10
|
+
tpImgEl.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='
|
|
11
|
+
}
|
|
12
|
+
return tpImgEl
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function getTpImg () {
|
|
16
|
+
if (!tpImgEl) {
|
|
17
|
+
return initTpImg()
|
|
18
|
+
}
|
|
19
|
+
return tpImgEl
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function getPropClass (property: any, params: any) {
|
|
23
|
+
return property ? XEUtils.isFunction(property) ? property(params) : property : ''
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function getClsRE (cls: any) {
|
|
27
|
+
if (!reClsMap[cls]) {
|
|
28
|
+
reClsMap[cls] = new RegExp(`(?:^|\\s)${cls}(?!\\S)`, 'g')
|
|
29
|
+
}
|
|
30
|
+
return reClsMap[cls]
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function getNodeOffset (elem: any, container: any, rest: any): any {
|
|
34
|
+
if (elem) {
|
|
35
|
+
const parentElem = elem.parentNode
|
|
36
|
+
rest.top += elem.offsetTop
|
|
37
|
+
rest.left += elem.offsetLeft
|
|
38
|
+
if (parentElem && parentElem !== document.documentElement && parentElem !== document.body) {
|
|
39
|
+
rest.top -= parentElem.scrollTop
|
|
40
|
+
rest.left -= parentElem.scrollLeft
|
|
41
|
+
}
|
|
42
|
+
if (container && (elem === container || elem.offsetParent === container) ? 0 : elem.offsetParent) {
|
|
43
|
+
return getNodeOffset(elem.offsetParent, container, rest)
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return rest
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function isPx (val: any) {
|
|
50
|
+
return val && /^\d+(px)?$/.test(val)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function isScale (val: any) {
|
|
54
|
+
return val && /^\d+%$/.test(val)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function hasClass (elem: any, cls: any) {
|
|
58
|
+
return !!(elem && elem.className && elem.className.match && elem.className.match(getClsRE(cls)))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function removeClass (elem: any, cls: any) {
|
|
62
|
+
if (elem && hasClass(elem, cls)) {
|
|
63
|
+
elem.className = elem.className.replace(getClsRE(cls), '')
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function addClass (elem: any, cls: string) {
|
|
68
|
+
if (elem && !hasClass(elem, cls)) {
|
|
69
|
+
removeClass(elem, cls)
|
|
70
|
+
elem.className = `${elem.className} ${cls}`
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function hasControlKey (evnt: KeyboardEvent | MouseEvent | DragEvent) {
|
|
75
|
+
return evnt.ctrlKey || evnt.metaKey
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function toCssUnit (val?: number | string, unit = 'px') {
|
|
79
|
+
if (XEUtils.isNumber(val) || /^\d+$/.test(`${val}`)) {
|
|
80
|
+
return `${val}${unit}`
|
|
81
|
+
}
|
|
82
|
+
return `${val || ''}`
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function queryElement (elem: HTMLTableCellElement, selector: string) {
|
|
86
|
+
if (elem) {
|
|
87
|
+
return elem.querySelector<HTMLElement>(selector)
|
|
88
|
+
}
|
|
89
|
+
return null
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function getDomNode () {
|
|
93
|
+
const documentElement = document.documentElement
|
|
94
|
+
const bodyElem = document.body
|
|
95
|
+
return {
|
|
96
|
+
scrollTop: documentElement.scrollTop || bodyElem.scrollTop,
|
|
97
|
+
scrollLeft: documentElement.scrollLeft || bodyElem.scrollLeft,
|
|
98
|
+
visibleHeight: documentElement.clientHeight || bodyElem.clientHeight,
|
|
99
|
+
visibleWidth: documentElement.clientWidth || bodyElem.clientWidth
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export function getOffsetHeight (elem?: HTMLElement) {
|
|
104
|
+
return elem ? elem.offsetHeight : 0
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function getPaddingTopBottomSize (elem: HTMLElement) {
|
|
108
|
+
if (elem) {
|
|
109
|
+
const computedStyle = getComputedStyle(elem)
|
|
110
|
+
const paddingTop = XEUtils.toNumber(computedStyle.paddingTop)
|
|
111
|
+
const paddingBottom = XEUtils.toNumber(computedStyle.paddingBottom)
|
|
112
|
+
return paddingTop + paddingBottom
|
|
113
|
+
}
|
|
114
|
+
return 0
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export function setScrollTop (elem: HTMLElement | null | undefined, scrollTop: number) {
|
|
118
|
+
if (elem) {
|
|
119
|
+
elem.scrollTop = scrollTop
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export function setScrollLeft (elem: HTMLElement | null | undefined, scrollLeft: number) {
|
|
124
|
+
if (elem) {
|
|
125
|
+
elem.scrollLeft = scrollLeft
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// export function setScrollLeftAndTop (elem: HTMLElement | null, scrollLeft: number, scrollTop: number) {
|
|
130
|
+
// if (elem) {
|
|
131
|
+
// elem.scrollLeft = scrollLeft
|
|
132
|
+
// elem.scrollTop = scrollTop
|
|
133
|
+
// }
|
|
134
|
+
// }
|
|
135
|
+
|
|
136
|
+
export function updateCellTitle (overflowElem: any, column: any) {
|
|
137
|
+
const content = column.type === 'html' ? overflowElem.innerText : overflowElem.textContent
|
|
138
|
+
if (overflowElem.getAttribute('title') !== content) {
|
|
139
|
+
overflowElem.setAttribute('title', content)
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* 检查触发源是否属于目标节点
|
|
145
|
+
*/
|
|
146
|
+
export function getEventTargetNode (evnt: any, container: any, queryCls?: string, queryMethod?: (target: Element) => boolean) {
|
|
147
|
+
let targetElem
|
|
148
|
+
let target = (evnt.target.shadowRoot && evnt.composed) ? (evnt.composedPath()[0] || evnt.target) : evnt.target
|
|
149
|
+
while (target && target.nodeType && target !== document) {
|
|
150
|
+
if (queryCls && hasClass(target, queryCls) && (!queryMethod || queryMethod(target))) {
|
|
151
|
+
targetElem = target
|
|
152
|
+
} else if (target === container) {
|
|
153
|
+
return { flag: queryCls ? !!targetElem : true, container, targetElem: targetElem }
|
|
154
|
+
}
|
|
155
|
+
target = target.parentNode
|
|
156
|
+
}
|
|
157
|
+
return { flag: false }
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* 获取元素相对于 document 的位置
|
|
162
|
+
*/
|
|
163
|
+
export function getOffsetPos (elem: any, container: any) {
|
|
164
|
+
return getNodeOffset(elem, container, { left: 0, top: 0 })
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export function getAbsolutePos (elem: any) {
|
|
168
|
+
const bounding = elem.getBoundingClientRect()
|
|
169
|
+
const boundingTop = bounding.top
|
|
170
|
+
const boundingLeft = bounding.left
|
|
171
|
+
const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode()
|
|
172
|
+
return { boundingTop, top: scrollTop + boundingTop, boundingLeft, left: scrollLeft + boundingLeft, visibleHeight, visibleWidth }
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const scrollIntoViewIfNeeded = 'scrollIntoViewIfNeeded'
|
|
176
|
+
const scrollIntoView = 'scrollIntoView'
|
|
177
|
+
|
|
178
|
+
export function scrollToView (elem: any) {
|
|
179
|
+
if (elem) {
|
|
180
|
+
if (elem[scrollIntoViewIfNeeded]) {
|
|
181
|
+
elem[scrollIntoViewIfNeeded]()
|
|
182
|
+
} else if (elem[scrollIntoView]) {
|
|
183
|
+
elem[scrollIntoView]()
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export function triggerEvent (targetElem: Element, type: string) {
|
|
189
|
+
if (targetElem) {
|
|
190
|
+
targetElem.dispatchEvent(new Event(type))
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export function isNodeElement (elem: any): elem is HTMLElement {
|
|
195
|
+
return elem && elem.nodeType === 1
|
|
196
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import XEUtils from 'xe-utils'
|
|
2
|
+
import { VxeUI } from '@vxe-ui/core'
|
|
3
|
+
import DomZIndex from 'dom-zindex'
|
|
4
|
+
|
|
5
|
+
export function isEnableConf (conf: any): boolean {
|
|
6
|
+
return conf && conf.enabled !== false
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function isEmptyValue (cellValue: any) {
|
|
10
|
+
return cellValue === null || cellValue === undefined || cellValue === ''
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function parseFile (file: File) {
|
|
14
|
+
const name = file.name
|
|
15
|
+
const tIndex = XEUtils.lastIndexOf(name, '.')
|
|
16
|
+
const type = name.substring(tIndex + 1, name.length).toLowerCase()
|
|
17
|
+
const filename = name.substring(0, tIndex)
|
|
18
|
+
return { filename, type }
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function nextZIndex () {
|
|
22
|
+
return DomZIndex.getNext()
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function getLastZIndex () {
|
|
26
|
+
return DomZIndex.getCurrent()
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function hasChildrenList (item: any) {
|
|
30
|
+
return item && item.children && item.children.length > 0
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function getFuncText (content?: string | number | boolean | null, args?: any) {
|
|
34
|
+
if (content) {
|
|
35
|
+
const translate = VxeUI.getConfig().translate
|
|
36
|
+
return XEUtils.toValueString(translate ? translate('' + content, args) : content)
|
|
37
|
+
}
|
|
38
|
+
return ''
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function formatText (value: any, placeholder?: any) {
|
|
42
|
+
return '' + (isEmptyValue(value) ? (placeholder ? VxeUI.getConfig().emptyCell : '') : value)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* 判断值为:'' | null | undefined 时都属于空值
|
|
47
|
+
*/
|
|
48
|
+
export function eqEmptyValue (cellValue: any) {
|
|
49
|
+
return cellValue === '' || XEUtils.eqNull(cellValue)
|
|
50
|
+
}
|
|
File without changes
|
package/styles/all.scss
ADDED
package/styles/base.scss
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@use './gantt-chart.scss'
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
.vxe-gantt-view--chart-wrapper {
|
|
2
|
+
position: absolute;
|
|
3
|
+
top: 0;
|
|
4
|
+
left: 0;
|
|
5
|
+
pointer-events: none;
|
|
6
|
+
}
|
|
7
|
+
.vxe-gantt-view--chart-row {
|
|
8
|
+
position: relative;
|
|
9
|
+
}
|
|
10
|
+
.vxe-gantt-view--chart-bar {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: row;
|
|
13
|
+
position: absolute;
|
|
14
|
+
width: 100px;
|
|
15
|
+
top: 50%;
|
|
16
|
+
left: 0;
|
|
17
|
+
color: #ffffff;
|
|
18
|
+
transform: translateY(-50%);
|
|
19
|
+
border-radius: var(--vxe-ui-base-border-radius);
|
|
20
|
+
height: var(--vxe-ui-gantt-view-chart-bar-height);
|
|
21
|
+
background-color: var(--vxe-ui-font-primary-lighten-color);
|
|
22
|
+
pointer-events: all;
|
|
23
|
+
&:hover {
|
|
24
|
+
&::after {
|
|
25
|
+
content: "";
|
|
26
|
+
position: absolute;
|
|
27
|
+
top: 0;
|
|
28
|
+
left: 0;
|
|
29
|
+
width: 100%;
|
|
30
|
+
height: 100%;
|
|
31
|
+
background-color: rgba(0, 0, 0, 0.1);
|
|
32
|
+
border-radius: var(--vxe-ui-base-border-radius);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
.vxe-gantt-view--chart-progress {
|
|
37
|
+
flex-shrink: 0;
|
|
38
|
+
width: 40px;
|
|
39
|
+
text-align: left;
|
|
40
|
+
border-radius: var(--vxe-ui-base-border-radius) 0 0 var(--vxe-ui-base-border-radius);
|
|
41
|
+
background-color: var(--vxe-ui-font-primary-color);
|
|
42
|
+
}
|
|
43
|
+
.vxe-gantt-view--chart-content {
|
|
44
|
+
flex-grow: 1;
|
|
45
|
+
text-align: right;
|
|
46
|
+
}
|