@king-design/intact 3.4.5 → 3.5.0
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/components/affix/index.md +1 -0
- package/components/affix/index.ts +2 -0
- package/components/affix/useStyle.ts +38 -35
- package/components/datepicker/basepicker.ts +3 -3
- package/components/dialog/styles.ts +2 -2
- package/components/dropdown/useKeyboard.ts +3 -0
- package/components/input/index.spec.ts +11 -0
- package/components/input/index.vdt +1 -1
- package/components/input/styles.ts +3 -0
- package/components/layout/styles.ts +1 -0
- package/components/select/base.ts +2 -0
- package/components/select/demos/group.md +1 -1
- package/components/select/demos/virtual.md +47 -0
- package/components/select/group.vdt +3 -2
- package/components/select/index.md +1 -0
- package/components/select/index.spec.ts +9 -0
- package/components/select/menu.vdt +5 -4
- package/components/select/select.vdt +1 -1
- package/components/select/useFilterable.ts +2 -2
- package/components/select/useInput.ts +6 -1
- package/components/table/demos/fixHeader.md +25 -5
- package/components/table/demos/group.md +1 -1
- package/components/table/demos/virtual.md +105 -0
- package/components/table/index.md +1 -0
- package/components/table/index.spec.ts +2 -1
- package/components/table/row.ts +2 -1
- package/components/table/styles.ts +4 -0
- package/components/table/table.ts +6 -4
- package/components/table/table.vdt +15 -11
- package/components/treeSelect/index.ts +1 -1
- package/components/virtualList/container.ts +36 -0
- package/components/virtualList/container.vdt +30 -0
- package/components/virtualList/demos/basic.md +67 -0
- package/components/virtualList/demos/combined.md +57 -0
- package/components/virtualList/demos/delete.md +70 -0
- package/components/virtualList/index.md +19 -0
- package/components/virtualList/index.spec.ts +263 -0
- package/components/virtualList/index.ts +5 -0
- package/components/virtualList/phantom.ts +18 -0
- package/components/virtualList/phantom.vdt +28 -0
- package/components/virtualList/rows.ts +13 -0
- package/components/virtualList/rows.vdt +20 -0
- package/components/virtualList/styles.ts +29 -0
- package/components/virtualList/useRows.ts +24 -0
- package/components/virtualList/useVirtualRows.ts +145 -0
- package/components/virtualList/virtual.ts +19 -0
- package/components/virtualList/virtual.vdt +17 -0
- package/components/virtualList/wrapper.ts +17 -0
- package/components/virtualList/wrapper.vdt +24 -0
- package/es/components/affix/index.d.ts +1 -0
- package/es/components/affix/index.js +2 -1
- package/es/components/affix/useStyle.js +50 -47
- package/es/components/datepicker/basepicker.js +3 -3
- package/es/components/dialog/styles.js +2 -2
- package/es/components/dropdown/useKeyboard.js +3 -0
- package/es/components/input/index.spec.js +21 -0
- package/es/components/input/index.vdt.js +1 -1
- package/es/components/input/styles.js +1 -1
- package/es/components/layout/styles.js +1 -1
- package/es/components/select/base.d.ts +1 -0
- package/es/components/select/base.js +2 -1
- package/es/components/select/group.vdt.js +8 -3
- package/es/components/select/index.spec.js +13 -1
- package/es/components/select/menu.vdt.js +12 -3
- package/es/components/select/select.vdt.js +2 -1
- package/es/components/select/useFilterable.js +7 -5
- package/es/components/select/useInput.js +6 -2
- package/es/components/table/index.spec.js +7 -6
- package/es/components/table/styles.js +1 -1
- package/es/components/table/table.d.ts +1 -0
- package/es/components/table/table.js +3 -2
- package/es/components/table/table.vdt.js +126 -114
- package/es/components/treeSelect/index.js +4 -3
- package/es/components/virtualList/container.d.ts +10 -0
- package/es/components/virtualList/container.js +26 -0
- package/es/components/virtualList/container.vdt.js +39 -0
- package/es/components/virtualList/index.d.ts +5 -0
- package/es/components/virtualList/index.js +5 -0
- package/es/components/virtualList/index.spec.d.ts +1 -0
- package/es/components/virtualList/index.spec.js +372 -0
- package/es/components/virtualList/phantom.d.ts +9 -0
- package/es/components/virtualList/phantom.js +24 -0
- package/es/components/virtualList/phantom.vdt.js +33 -0
- package/es/components/virtualList/rows.d.ts +8 -0
- package/es/components/virtualList/rows.js +20 -0
- package/es/components/virtualList/rows.vdt.js +32 -0
- package/es/components/virtualList/styles.d.ts +13 -0
- package/es/components/virtualList/styles.js +34 -0
- package/es/components/virtualList/useRows.d.ts +2 -0
- package/es/components/virtualList/useRows.js +19 -0
- package/es/components/virtualList/useVirtualRows.d.ts +20 -0
- package/es/components/virtualList/useVirtualRows.js +120 -0
- package/es/components/virtualList/virtual.d.ts +8 -0
- package/es/components/virtualList/virtual.js +15 -0
- package/es/components/virtualList/virtual.vdt.js +26 -0
- package/es/components/virtualList/wrapper.d.ts +9 -0
- package/es/components/virtualList/wrapper.js +24 -0
- package/es/components/virtualList/wrapper.vdt.js +34 -0
- package/es/index.d.ts +3 -2
- package/es/index.js +3 -2
- package/es/site/data/components/select/demos/virtual/index.d.ts +11 -0
- package/es/site/data/components/select/demos/virtual/index.js +32 -0
- package/es/site/data/components/select/demos/virtual/react.d.ts +11 -0
- package/es/site/data/components/select/demos/virtual/react.js +53 -0
- package/es/site/data/components/table/demos/fixHeader/index.d.ts +6 -0
- package/es/site/data/components/table/demos/fixHeader/index.js +14 -0
- package/es/site/data/components/table/demos/fixHeader/react.d.ts +6 -0
- package/es/site/data/components/table/demos/fixHeader/react.js +28 -11
- package/es/site/data/components/table/demos/virtual/index.d.ts +13 -0
- package/es/site/data/components/table/demos/virtual/index.js +76 -0
- package/es/site/data/components/table/demos/virtual/react.d.ts +14 -0
- package/es/site/data/components/table/demos/virtual/react.js +114 -0
- package/es/site/data/components/virtualList/demos/basic/index.d.ts +12 -0
- package/es/site/data/components/virtualList/demos/basic/index.js +42 -0
- package/es/site/data/components/virtualList/demos/basic/react.d.ts +12 -0
- package/es/site/data/components/virtualList/demos/basic/react.js +67 -0
- package/es/site/data/components/virtualList/demos/combined/index.d.ts +11 -0
- package/es/site/data/components/virtualList/demos/combined/index.js +32 -0
- package/es/site/data/components/virtualList/demos/combined/react.d.ts +11 -0
- package/es/site/data/components/virtualList/demos/combined/react.js +50 -0
- package/es/site/data/components/virtualList/demos/delete/index.d.ts +13 -0
- package/es/site/data/components/virtualList/demos/delete/index.js +51 -0
- package/es/site/data/components/virtualList/demos/delete/react.d.ts +13 -0
- package/es/site/data/components/virtualList/demos/delete/react.js +75 -0
- package/es/site/data/components/virtualList/index.d.ts +57 -0
- package/es/site/data/components/virtualList/index.js +32 -0
- package/index.ts +3 -2
- package/package.json +1 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { getRestProps } from '../utils';
|
|
2
|
+
import { context as VirtualRowsContext } from './useVirtualRows';
|
|
3
|
+
import { cx } from '@emotion/css';
|
|
4
|
+
import { createVNode } from 'intact';
|
|
5
|
+
import { makePhantomStyles } from './styles';
|
|
6
|
+
|
|
7
|
+
const { className, tagName } = this.get();
|
|
8
|
+
const { k } = this.config;
|
|
9
|
+
|
|
10
|
+
const classNameObj = {
|
|
11
|
+
[`${k}-virtual-phantom`]: true,
|
|
12
|
+
[makePhantomStyles()]: true,
|
|
13
|
+
[className]: className,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
<VirtualRowsContext.Consumer>
|
|
17
|
+
{({ getTotalHeight, disabled }) => {
|
|
18
|
+
if (disabled) return;
|
|
19
|
+
|
|
20
|
+
return createVNode(tagName || 'div', {
|
|
21
|
+
...getRestProps(this),
|
|
22
|
+
className: cx(classNameObj),
|
|
23
|
+
style: {
|
|
24
|
+
height: getTotalHeight() + 'px',
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}}
|
|
28
|
+
</VirtualRowsContext.Consumer>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Component } from 'intact';
|
|
2
|
+
import { useRows } from './useRows';
|
|
3
|
+
import template from './rows.vdt';
|
|
4
|
+
|
|
5
|
+
export interface VirtualListRowsProps {
|
|
6
|
+
tagName?: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export class VirtualListRows extends Component<VirtualListRowsProps> {
|
|
10
|
+
static template = template;
|
|
11
|
+
|
|
12
|
+
private rows = useRows();
|
|
13
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createFragment, createVNode } from 'intact';
|
|
2
|
+
import { isNullOrUndefined } from 'intact-shared';
|
|
3
|
+
import { context as VirtualRowsContext } from './useVirtualRows';
|
|
4
|
+
|
|
5
|
+
let { tagName, children } = this.get();
|
|
6
|
+
const rows = this.rows;
|
|
7
|
+
|
|
8
|
+
<VirtualRowsContext.Consumer>
|
|
9
|
+
{({ notifyRows, startIndex, length, disabled }) => {
|
|
10
|
+
if (!disabled) {
|
|
11
|
+
children = rows.value.slice(startIndex, startIndex + length);
|
|
12
|
+
notifyRows(rows.value);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
if (isNullOrUndefined(tagName)) {
|
|
16
|
+
return createFragment(children, 8 /* ChildrenTypes.HasKeyedChildren */);
|
|
17
|
+
}
|
|
18
|
+
return createVNode(tagName, null, children);
|
|
19
|
+
}}
|
|
20
|
+
</VirtualRowsContext.Consumer>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {css} from '@emotion/css';
|
|
2
|
+
import '../../styles/global';
|
|
3
|
+
import { cache } from '../utils';
|
|
4
|
+
|
|
5
|
+
export const makeContainerStyles = cache(() => {
|
|
6
|
+
return css`
|
|
7
|
+
overflow: auto;
|
|
8
|
+
position: relative;
|
|
9
|
+
height: 100%;
|
|
10
|
+
`;
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export const makePhantomStyles = cache(() => {
|
|
14
|
+
return css`
|
|
15
|
+
position: absolute;
|
|
16
|
+
left: 0;
|
|
17
|
+
top: 0;
|
|
18
|
+
right: 0;
|
|
19
|
+
z-index: -1;
|
|
20
|
+
pointer-events: none;
|
|
21
|
+
`;
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export const makeWrapperStyles = cache(() => {
|
|
25
|
+
return css`
|
|
26
|
+
width: 100%;
|
|
27
|
+
will-change: transform;
|
|
28
|
+
`;
|
|
29
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useInstance, VNode, createRef, createFragment } from 'intact';
|
|
2
|
+
import { VirtualListRows } from './rows';
|
|
3
|
+
|
|
4
|
+
export function useRows() {
|
|
5
|
+
const instance = useInstance() as VirtualListRows;
|
|
6
|
+
const rows = createRef<VNode[]>([]);
|
|
7
|
+
|
|
8
|
+
instance.on('$receive:children', (children) => {
|
|
9
|
+
// use fragment vnode to normalize children
|
|
10
|
+
const vNode = createFragment(children, 0 /* ChildrenTypes.UnknownChildren */);
|
|
11
|
+
|
|
12
|
+
// convert to array if it has only one child
|
|
13
|
+
const childrenType = vNode.childrenType;
|
|
14
|
+
if (childrenType & 2 /* ChildrenTypes.HasVNodeChildren */) {
|
|
15
|
+
rows.value = [vNode.children as unknown as VNode];
|
|
16
|
+
} else if (childrenType & 1 /* ChildrenTypes.HasInvalidChildren */) {
|
|
17
|
+
rows.value = [];
|
|
18
|
+
} else {
|
|
19
|
+
rows.value = vNode.children as VNode[];
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
return rows;
|
|
24
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { createContext } from '../context';
|
|
2
|
+
import { useState, watchState, State } from '../../hooks/useState';
|
|
3
|
+
import { useInstance, nextTick, VNode, onMounted, onUnmounted, Key, findDomFromVNode } from 'intact';
|
|
4
|
+
import { VirtualListContainer } from './container';
|
|
5
|
+
import { isNullOrUndefined } from 'intact-shared';
|
|
6
|
+
|
|
7
|
+
type ContextValue = {
|
|
8
|
+
notifyRows: (rows: State<VNode[]>) => void;
|
|
9
|
+
startIndex: number;
|
|
10
|
+
endIndex: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const context = createContext<ContextValue>();
|
|
14
|
+
|
|
15
|
+
const MIN_LENGTH = 10;
|
|
16
|
+
const BUFFER_SIZE = 3;
|
|
17
|
+
|
|
18
|
+
export function useVirtualRows() {
|
|
19
|
+
const instance = useInstance() as unknown as VirtualListContainer;
|
|
20
|
+
const rowsHeightMap = new Map<Key, number>();
|
|
21
|
+
const startIndex = useState(0);
|
|
22
|
+
const length = useState(MIN_LENGTH);
|
|
23
|
+
|
|
24
|
+
let calculatedHeight = 0;
|
|
25
|
+
let rowAvgHeight = 0;
|
|
26
|
+
let rows: VNode[] = [];
|
|
27
|
+
function notifyRows(_rows: VNode[]) {
|
|
28
|
+
const oldRows = rows;
|
|
29
|
+
const oldLength = rows.length;
|
|
30
|
+
rows = _rows;
|
|
31
|
+
// diff oldRows, newRows
|
|
32
|
+
const newKeys = new Set(_rows.map(row => row.key));
|
|
33
|
+
|
|
34
|
+
for (let i = 0; i < oldLength; i++) {
|
|
35
|
+
const oldKey = oldRows[i].key!;
|
|
36
|
+
if (!newKeys.has(oldKey)) {
|
|
37
|
+
const height = rowsHeightMap.get(oldKey);
|
|
38
|
+
if (!isNullOrUndefined(height)) {
|
|
39
|
+
calculatedHeight -= height;
|
|
40
|
+
rowsHeightMap.delete(oldKey);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// update rowAvgHeight
|
|
46
|
+
if (rowsHeightMap.size === 0) {
|
|
47
|
+
rowAvgHeight = calculatedHeight = 0;
|
|
48
|
+
} else {
|
|
49
|
+
rowAvgHeight = calculatedHeight / rowsHeightMap.size;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (_rows.length < oldLength) {
|
|
53
|
+
const maxStartIndex = Math.max(0, _rows.length - length.value);
|
|
54
|
+
if (startIndex.value > maxStartIndex) {
|
|
55
|
+
startIndex.set(maxStartIndex);
|
|
56
|
+
// 重新计算位置
|
|
57
|
+
nextTick(() => {
|
|
58
|
+
handleScroll();
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function calculateRowsHeight() {
|
|
65
|
+
for (
|
|
66
|
+
let i = startIndex.value;
|
|
67
|
+
i < startIndex.value + length.value && i < rows.length;
|
|
68
|
+
i++
|
|
69
|
+
) {
|
|
70
|
+
const row = rows[i];
|
|
71
|
+
const key = row.key!;
|
|
72
|
+
if (!rowsHeightMap.has(key)) {
|
|
73
|
+
const rowDom = findDomFromVNode(row, true) as HTMLElement;
|
|
74
|
+
const height = rowDom.offsetHeight;
|
|
75
|
+
rowsHeightMap.set(key, height);
|
|
76
|
+
calculatedHeight += height;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// use the average height to estimate the row height
|
|
81
|
+
rowAvgHeight = calculatedHeight / rowsHeightMap.size;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
watchState(startIndex, () => {
|
|
85
|
+
nextTick(calculateRowsHeight);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
let containerDom: HTMLElement;
|
|
89
|
+
onMounted(() => {
|
|
90
|
+
// get contains height
|
|
91
|
+
containerDom = findDomFromVNode(instance.$lastInput!, true) as HTMLElement;
|
|
92
|
+
const containerHeight = containerDom.offsetHeight;
|
|
93
|
+
|
|
94
|
+
calculateRowsHeight();
|
|
95
|
+
|
|
96
|
+
// calculate the length of rows we should render
|
|
97
|
+
length.set(Math.max(Math.ceil(containerHeight / rowAvgHeight) + BUFFER_SIZE * 2, MIN_LENGTH));
|
|
98
|
+
|
|
99
|
+
containerDom.addEventListener('scroll', handleScroll);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
onUnmounted(() => {
|
|
103
|
+
containerDom.removeEventListener('scroll', handleScroll);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
function getTotalHeight() {
|
|
107
|
+
return calculatedHeight + rowAvgHeight * (rows.length - rowsHeightMap.size);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const translateY = useState(0);
|
|
111
|
+
function handleScroll() {
|
|
112
|
+
const { disabled } = instance.get();
|
|
113
|
+
if (disabled) return;
|
|
114
|
+
|
|
115
|
+
const scrollTop = containerDom.scrollTop;
|
|
116
|
+
|
|
117
|
+
let accumulatedHeight = 0;
|
|
118
|
+
let start = 0;
|
|
119
|
+
|
|
120
|
+
while (start < rows.length) {
|
|
121
|
+
accumulatedHeight += getRowHeightByIndex(start);
|
|
122
|
+
if (accumulatedHeight > scrollTop) {
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
start++;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
startIndex.set(Math.max(start - BUFFER_SIZE, 0));
|
|
130
|
+
|
|
131
|
+
// translateY should substract the buffer size rows height
|
|
132
|
+
for (let i = start; i >= startIndex.value; i--) {
|
|
133
|
+
accumulatedHeight -= getRowHeightByIndex(i);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
translateY.set(accumulatedHeight);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function getRowHeightByIndex(index: number) {
|
|
140
|
+
const key = rows[index].key!;
|
|
141
|
+
return rowsHeightMap.get(key) || rowAvgHeight;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return { notifyRows, startIndex, length, getTotalHeight, translateY };
|
|
145
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Component, TypeDefs, createRef } from 'intact';
|
|
2
|
+
import template from './virtual.vdt';
|
|
3
|
+
|
|
4
|
+
export interface VirtualListProps {
|
|
5
|
+
disabled?: boolean
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const typeDefs: Required<TypeDefs<VirtualListProps>> = {
|
|
9
|
+
disabled: Boolean,
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export class VirtualList extends Component<VirtualListProps> {
|
|
13
|
+
static template = template;
|
|
14
|
+
static typeDefs = typeDefs;
|
|
15
|
+
|
|
16
|
+
// public scrollToIndex(index: number, behavior: ScrollBehavior = 'auto') {
|
|
17
|
+
// this.containerRef.value?.scrollToIndex(index, behavior);
|
|
18
|
+
// }
|
|
19
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { getRestProps } from '../utils';
|
|
2
|
+
import { VirtualListContainer } from './container';
|
|
3
|
+
import { VirtualListWrapper } from './wrapper';
|
|
4
|
+
import { VirtualListRows } from './rows';
|
|
5
|
+
import { VirtualListPhantom } from './phantom';
|
|
6
|
+
|
|
7
|
+
const { children, disabled } = this.get();
|
|
8
|
+
|
|
9
|
+
if (disabled) {
|
|
10
|
+
return children;
|
|
11
|
+
}
|
|
12
|
+
<VirtualListContainer {...getRestProps(this)}>
|
|
13
|
+
<VirtualListPhantom />
|
|
14
|
+
<VirtualListWrapper>
|
|
15
|
+
<VirtualListRows>{children}</VirtualListRows>
|
|
16
|
+
</VirtualListWrapper>
|
|
17
|
+
</VirtualListContainer>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Component, TypeDefs, ComponentConstructor } from 'intact';
|
|
2
|
+
import template from './wrapper.vdt';
|
|
3
|
+
import { useConfigContext } from '../config';
|
|
4
|
+
export interface VirtualListWrapperProps {
|
|
5
|
+
tagName?: string | ComponentConstructor,
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const typeDefs: Required<TypeDefs<VirtualListWrapperProps>> = {
|
|
9
|
+
tagName: String,
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export class VirtualListWrapper extends Component<VirtualListWrapperProps> {
|
|
13
|
+
static template = template;
|
|
14
|
+
static typeDefs = typeDefs;
|
|
15
|
+
|
|
16
|
+
private config = useConfigContext();
|
|
17
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { addStyle, getRestProps } from '../utils';
|
|
2
|
+
import { context as VirtualRowsContext } from './useVirtualRows';
|
|
3
|
+
import { createVNode } from 'intact';
|
|
4
|
+
import { cx } from '@emotion/css';
|
|
5
|
+
|
|
6
|
+
const { children, className, tagName, style } = this.get();
|
|
7
|
+
const { k } = this.config;
|
|
8
|
+
|
|
9
|
+
<VirtualRowsContext.Consumer>
|
|
10
|
+
{({ translateY, disabled }) => {
|
|
11
|
+
const classNameObj = {
|
|
12
|
+
[`${k}-virtual-wrapper`]: !disabled,
|
|
13
|
+
[className]: className,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const _style = !disabled ? { transform: `translateY(${translateY}px)` } : {};
|
|
17
|
+
|
|
18
|
+
return createVNode(tagName || 'div', {
|
|
19
|
+
...getRestProps(this),
|
|
20
|
+
className: cx(classNameObj),
|
|
21
|
+
style: addStyle(style, _style)
|
|
22
|
+
}, children);
|
|
23
|
+
}}
|
|
24
|
+
</VirtualRowsContext.Consumer>
|
|
@@ -14,54 +14,57 @@ export function useStyle(elementRef) {
|
|
|
14
14
|
offsetTop = _instance$get.top,
|
|
15
15
|
offsetBottom = _instance$get.bottom,
|
|
16
16
|
exclude = _instance$get.exclude,
|
|
17
|
-
shouldFix = _instance$get.shouldFix
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (shouldFix && shouldFix({
|
|
48
|
-
offsetTop: offsetTop,
|
|
49
|
-
offsetBottom: offsetBottom
|
|
50
|
-
}) || !shouldFix && top < offsetTop) {
|
|
51
|
-
return setStyle({
|
|
52
|
-
top: offsetTop + "px"
|
|
53
|
-
});
|
|
17
|
+
shouldFix = _instance$get.shouldFix,
|
|
18
|
+
disabled = _instance$get.disabled;
|
|
19
|
+
if (!disabled) {
|
|
20
|
+
var _elementRef$value$get = elementRef.value.getBoundingClientRect(),
|
|
21
|
+
top = _elementRef$value$get.top,
|
|
22
|
+
bottom = _elementRef$value$get.bottom,
|
|
23
|
+
width = _elementRef$value$get.width,
|
|
24
|
+
height = _elementRef$value$get.height;
|
|
25
|
+
var setStyle = function setStyle(styles) {
|
|
26
|
+
if (!exclude || exclude && !exclude({
|
|
27
|
+
offsetTop: offsetTop,
|
|
28
|
+
offsetBottom: offsetBottom,
|
|
29
|
+
top: top,
|
|
30
|
+
bottom: bottom,
|
|
31
|
+
width: width,
|
|
32
|
+
height: height
|
|
33
|
+
})) {
|
|
34
|
+
style.set(_extends({
|
|
35
|
+
position: 'fixed',
|
|
36
|
+
width: width + "px"
|
|
37
|
+
}, styles));
|
|
38
|
+
containerStyle.set({
|
|
39
|
+
height: height + "px"
|
|
40
|
+
});
|
|
41
|
+
} else {
|
|
42
|
+
resetStyle();
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
if (isNullOrUndefined(offsetTop) && isNullOrUndefined(offsetBottom)) {
|
|
46
|
+
offsetTop = 0;
|
|
54
47
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
48
|
+
if (!isNullOrUndefined(offsetTop)) {
|
|
49
|
+
if (shouldFix && shouldFix({
|
|
50
|
+
offsetTop: offsetTop,
|
|
51
|
+
offsetBottom: offsetBottom
|
|
52
|
+
}) || !shouldFix && top < offsetTop) {
|
|
53
|
+
return setStyle({
|
|
54
|
+
top: offsetTop + "px"
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
var viewportHeight = document.documentElement.clientHeight;
|
|
59
|
+
if (shouldFix && shouldFix({
|
|
60
|
+
offsetTop: offsetTop,
|
|
61
|
+
offsetBottom: offsetBottom,
|
|
62
|
+
viewportHeight: viewportHeight
|
|
63
|
+
}) || !shouldFix && !isNullOrUndefined(offsetBottom) && viewportHeight - bottom <= offsetBottom) {
|
|
64
|
+
return setStyle({
|
|
65
|
+
bottom: offsetBottom + "px"
|
|
66
|
+
});
|
|
67
|
+
}
|
|
65
68
|
}
|
|
66
69
|
}
|
|
67
70
|
resetStyle();
|
|
@@ -15,13 +15,13 @@ import { findValueIndex } from './helpers';
|
|
|
15
15
|
import { isEqualArray, last, bind } from '../utils';
|
|
16
16
|
import { BaseSelect } from '../select/base';
|
|
17
17
|
var typeDefs = _extends({}, BaseSelect.typeDefs, {
|
|
18
|
-
value: [String, Array, Date, Number, dayjs
|
|
18
|
+
value: [String, Array, Date, Number, dayjs],
|
|
19
19
|
range: Boolean,
|
|
20
20
|
format: String,
|
|
21
21
|
valueFormat: String,
|
|
22
22
|
showFormat: String,
|
|
23
|
-
min: [String, Date, Number, dayjs
|
|
24
|
-
max: [String, Date, Number, dayjs
|
|
23
|
+
min: [String, Date, Number, dayjs],
|
|
24
|
+
max: [String, Date, Number, dayjs],
|
|
25
25
|
disabledDate: Function
|
|
26
26
|
});
|
|
27
27
|
var defaults = function defaults() {
|
|
@@ -58,8 +58,8 @@ var defaults = {
|
|
|
58
58
|
padding: "0 24px",
|
|
59
59
|
bodyMarginTop: "-25px",
|
|
60
60
|
tipIconMarginBottom: '10px',
|
|
61
|
-
tipIconFontSize: '
|
|
62
|
-
tipIconLineHeight: '
|
|
61
|
+
tipIconFontSize: '40px',
|
|
62
|
+
tipIconLineHeight: '40px',
|
|
63
63
|
// with title
|
|
64
64
|
titleFontWeight: '500',
|
|
65
65
|
titleTipIconFontSize: '24px',
|
|
@@ -91,6 +91,7 @@ export function useMenuKeyboard() {
|
|
|
91
91
|
function reset() {
|
|
92
92
|
var item = items[focusIndex];
|
|
93
93
|
if (focusIndex > -1 && item) {
|
|
94
|
+
// TODO(find bug)
|
|
94
95
|
itemEvents.get(item).onFocusout();
|
|
95
96
|
focusIndex = -1;
|
|
96
97
|
}
|
|
@@ -141,6 +142,8 @@ export function useItemKeyboard(itemEvents) {
|
|
|
141
142
|
onMouseLeave: function onMouseLeave(e) {
|
|
142
143
|
instance.trigger('mouseleave', e);
|
|
143
144
|
keyboard.reset();
|
|
145
|
+
// If it is a virtual item, it needs to be reset manually because the DOM is reused.
|
|
146
|
+
isFocus.set(false);
|
|
144
147
|
},
|
|
145
148
|
isFocus: isFocus
|
|
146
149
|
};
|
|
@@ -8,6 +8,7 @@ import SearchDemo from '~/components/input/demos/search';
|
|
|
8
8
|
import FrozenDemo from '~/components/input/demos/frozen';
|
|
9
9
|
import AutoRowsDemo from '~/components/input/demos/autoRows';
|
|
10
10
|
import PasswordDemo from '~/components/input/demos/password';
|
|
11
|
+
import AutoWidthDemo from '~/components/input/demos/autowidth';
|
|
11
12
|
import { Input } from './';
|
|
12
13
|
import { Dialog } from '../dialog';
|
|
13
14
|
import { Component } from 'intact';
|
|
@@ -238,4 +239,24 @@ describe('Input', function () {
|
|
|
238
239
|
}
|
|
239
240
|
}, _callee6);
|
|
240
241
|
})));
|
|
242
|
+
it('autoWidth', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee7() {
|
|
243
|
+
var _mount7, instance, element, input;
|
|
244
|
+
return _regeneratorRuntime.wrap(function _callee7$(_context8) {
|
|
245
|
+
while (1) switch (_context8.prev = _context8.next) {
|
|
246
|
+
case 0:
|
|
247
|
+
// should expand when input spaces
|
|
248
|
+
_mount7 = mount(AutoWidthDemo), instance = _mount7[0], element = _mount7[1];
|
|
249
|
+
input = element.querySelector('input');
|
|
250
|
+
input.value = 'ab ';
|
|
251
|
+
dispatchEvent(input, 'input');
|
|
252
|
+
_context8.next = 6;
|
|
253
|
+
return wait(50);
|
|
254
|
+
case 6:
|
|
255
|
+
expect(input.offsetWidth).to.gt(16);
|
|
256
|
+
case 7:
|
|
257
|
+
case "end":
|
|
258
|
+
return _context8.stop();
|
|
259
|
+
}
|
|
260
|
+
}, _callee7);
|
|
261
|
+
})));
|
|
241
262
|
});
|
|
@@ -133,7 +133,7 @@ export default function ($props, $blocks, $__proto__) {
|
|
|
133
133
|
return block ? block.call($this, callBlock, data) : callBlock();
|
|
134
134
|
}, __$blocks['suffix'](_$no))], 0, _$cn(k + "-input-suffix"), {
|
|
135
135
|
'ev-click': stopPropagation
|
|
136
|
-
}) : undefined, autoWidth ? _$ce(2, 'div', _$ce(2, '
|
|
136
|
+
}) : undefined, autoWidth ? _$ce(2, 'div', _$ce(2, 'pre', !hasValue ? hasInputValue || !defaultValue ? placeholder : defaultValue : inputValue, 0, null, null, null, fakeRef), 2, _$cn(k + "-input-fake")) : undefined], 0, _$cn(k + "-input-wrapper"), {
|
|
137
137
|
'ev-click': focusInputOnClick
|
|
138
138
|
})
|
|
139
139
|
});
|
|
@@ -125,7 +125,7 @@ export var makeStyles = cache(function makeStyles(k) {
|
|
|
125
125
|
return /*#__PURE__*/css("&.", k, "-", size, "{", sizeClassName, ";}");
|
|
126
126
|
}), "&.", k, "-inline{.", k, "-input-wrapper{height:auto;border:none;border-radius:0;padding:0;}}&.", k, "-type-textarea{.", k, "-input-wrapper{display:inline-block;padding:0;height:auto;}.", k, "-textarea{width:100%;padding:", input.textareaPadding, ";line-height:1.5;vertical-align:top;}.", k, "-input-suffix{margin:0;justify-content:flex-end;}}", _mapInstanceProperty(_context = Input.typeDefs.resize).call(_context, function (type) {
|
|
127
127
|
return /*#__PURE__*/css("&.", k, "-resize-", type, "{.", k, "-textarea{resize:", type, ";}}");
|
|
128
|
-
}), ".", k, "-input-fake{left:0;top:0;position:absolute;overflow:hidden;visibility:hidden;white-space:nowrap;}&.", k, "-auto-width{width:auto;max-width:100%;}.", k, "-input-count{color:", input.count.color, ";}");
|
|
128
|
+
}), ".", k, "-input-fake{left:0;top:0;position:absolute;overflow:hidden;visibility:hidden;white-space:nowrap;pre{font-family:inherit;}}&.", k, "-auto-width{width:auto;max-width:100%;}.", k, "-input-count{color:", input.count.color, ";}");
|
|
129
129
|
});
|
|
130
130
|
export var makeSearchStyles = cache(function makeSearchStyles(k) {
|
|
131
131
|
return /*#__PURE__*/css("position:relative;display:inline-block;.", k, "-input{transition:width ", input.transition, ";}.", k, "-btn{position:absolute;top:0;right:0;z-index:1;}&.", k, "-default .", k, "-btn:hover{background:transparent;}.", k, "-input-suffix{margin-right:", input.search.suffixMarginRight, ";}&.", k, "-hide{", _mapInstanceProperty(sizes).call(sizes, function (size) {
|
|
@@ -60,7 +60,7 @@ export var makeAsideStyles = cache(function makeAsideStyles(k) {
|
|
|
60
60
|
if (theme === 'dark') return;
|
|
61
61
|
var styles = layout.light;
|
|
62
62
|
return /*#__PURE__*/css("&.", k, "-", theme, "{background:", styles.bgColor, ";color:", styles.color, ";border-right:", styles.border, ";}");
|
|
63
|
-
}), " &.", k, "-fixed{position:fixed;overflow:auto;left:0;top:0;bottom:0;z-index:", theme.midZIndex, ";}.", k, "-menu{width:auto!important;}");
|
|
63
|
+
}), " &.", k, "-fixed{position:fixed;overflow:auto;left:0;top:0;bottom:0;z-index:", theme.midZIndex, ";}.", k, "-menu{width:auto!important;border-right:none!important;}");
|
|
64
64
|
});
|
|
65
65
|
export var makeBodyStyles = cache(function makeBodyStyles(k) {
|
|
66
66
|
return /*#__PURE__*/css("transition:padding-left ", layout.transition, ";");
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import _extends from "@babel/runtime-corejs3/helpers/extends";
|
|
2
|
-
import { createVNode as _$cv, className as _$cn, createElementVNode as _$ce, noop as _$no } from 'intact';
|
|
2
|
+
import { createVNode as _$cv, className as _$cn, createElementVNode as _$ce, noop as _$no, createUnknownComponentVNode as _$cc } from 'intact';
|
|
3
3
|
import { makeGroupStyles } from './styles';
|
|
4
4
|
import { getRestProps } from '../utils';
|
|
5
|
+
import { VirtualList } from '../virtualList';
|
|
5
6
|
export default function ($props, $blocks, $__proto__) {
|
|
6
7
|
var _classNameObj;
|
|
7
8
|
$blocks || ($blocks = {});
|
|
@@ -14,7 +15,8 @@ export default function ($props, $blocks, $__proto__) {
|
|
|
14
15
|
label = _this$get.label,
|
|
15
16
|
className = _this$get.className;
|
|
16
17
|
var _this$select$get = this.select.get(),
|
|
17
|
-
card = _this$select$get.card
|
|
18
|
+
card = _this$select$get.card,
|
|
19
|
+
virtual = _this$select$get.virtual;
|
|
18
20
|
var k = this.config.k;
|
|
19
21
|
var classNameObj = (_classNameObj = {}, _classNameObj[k + "-select-group"] = true, _classNameObj[className] = className, _classNameObj[makeGroupStyles(k)] = true, _classNameObj);
|
|
20
22
|
return _$cv('div', _extends({}, getRestProps(this), {
|
|
@@ -27,6 +29,9 @@ export default function ($props, $blocks, $__proto__) {
|
|
|
27
29
|
return _$blocks['label'].call($this, $super, data);
|
|
28
30
|
};
|
|
29
31
|
return block ? block.call($this, callBlock, data) : callBlock();
|
|
30
|
-
}, __$blocks['label'](_$no)), 0, _$cn(k + "-select-group-label")) : undefined,
|
|
32
|
+
}, __$blocks['label'](_$no)), 0, _$cn(k + "-select-group-label")) : undefined, _$cc(VirtualList, {
|
|
33
|
+
'disabled': !virtual,
|
|
34
|
+
'children': children
|
|
35
|
+
})]);
|
|
31
36
|
}
|
|
32
37
|
;
|
|
@@ -240,7 +240,19 @@ describe('Select', function () {
|
|
|
240
240
|
return wait();
|
|
241
241
|
case 50:
|
|
242
242
|
expect(instance.get('day1')).to.eql('Wednesday');
|
|
243
|
-
|
|
243
|
+
// should input spaces
|
|
244
|
+
input1.click();
|
|
245
|
+
_context6.next = 54;
|
|
246
|
+
return wait();
|
|
247
|
+
case 54:
|
|
248
|
+
dispatchEvent(input1, 'focus');
|
|
249
|
+
input1.value = 'm ';
|
|
250
|
+
dispatchEvent(input1, 'input');
|
|
251
|
+
_context6.next = 59;
|
|
252
|
+
return wait();
|
|
253
|
+
case 59:
|
|
254
|
+
expect(input1.value).to.eql('m ');
|
|
255
|
+
case 60:
|
|
244
256
|
case "end":
|
|
245
257
|
return _context6.stop();
|
|
246
258
|
}
|