diff --git a/components/affix/index.md b/components/affix/index.md index 84cde6ae2..53e6009bb 100644 --- a/components/affix/index.md +++ b/components/affix/index.md @@ -13,6 +13,7 @@ sidebar: doc | bottom | 指定元素固定距离底部的位置 | `number` | `undefined` | | shouldFix | 自定义元素固定规则 | `Function` | `undefined` | | exclude | 排除某些固定的情况 | `Function` | `undefined` | +| disabled | 是否禁用 | `Boolean` | `false` | # 事件 diff --git a/components/affix/index.ts b/components/affix/index.ts index ebef3b04f..5b940dd1d 100644 --- a/components/affix/index.ts +++ b/components/affix/index.ts @@ -8,6 +8,7 @@ export interface AffixProps { bottom?: number exclude?: (data: ExcludeParam) => boolean shouldFix?: (data: ShouldFixParam) => boolean + disabled?: boolean } export interface AffixEvents { @@ -34,6 +35,7 @@ const typeDefs: Required> = { bottom: Number, exclude: Function, shouldFix: Function, + disabled: Boolean, }; export class Affix extends Component { diff --git a/components/affix/useStyle.ts b/components/affix/useStyle.ts index 173aeb9ce..4c376bb1b 100644 --- a/components/affix/useStyle.ts +++ b/components/affix/useStyle.ts @@ -12,44 +12,47 @@ export function useStyle(elementRef: RefObject) { let ro: ResizeObserver | null = null; function genStyle() { - let {top: offsetTop, bottom: offsetBottom, exclude, shouldFix} = instance.get(); - const {top, bottom, width, height} = elementRef.value!.getBoundingClientRect(); - - const setStyle = (styles: Record) => { - if (!exclude || exclude && !exclude({ - offsetTop, offsetBottom, top, bottom, width, height - })) { - style.set({ - position: 'fixed', - width: `${width}px`, - ...styles, - }); - containerStyle.set({ - height: `${height}px`, - }); - } else { - resetStyle(); - } - }; + let {top: offsetTop, bottom: offsetBottom, exclude, shouldFix, disabled} = instance.get(); - if (isNullOrUndefined(offsetTop) && isNullOrUndefined(offsetBottom)) { - offsetTop = 0; - } + if (!disabled) { + const {top, bottom, width, height} = elementRef.value!.getBoundingClientRect(); + + const setStyle = (styles: Record) => { + if (!exclude || exclude && !exclude({ + offsetTop, offsetBottom, top, bottom, width, height + })) { + style.set({ + position: 'fixed', + width: `${width}px`, + ...styles, + }); + containerStyle.set({ + height: `${height}px`, + }); + } else { + resetStyle(); + } + }; - if (!isNullOrUndefined(offsetTop)) { - if ( - shouldFix && shouldFix({offsetTop, offsetBottom}) || - !shouldFix && top < offsetTop - ) { - return setStyle({top: `${offsetTop}px`}); + if (isNullOrUndefined(offsetTop) && isNullOrUndefined(offsetBottom)) { + offsetTop = 0; } - } else { - const viewportHeight = document.documentElement.clientHeight; - if ( - shouldFix && shouldFix({offsetTop, offsetBottom, viewportHeight}) || - !shouldFix && !isNullOrUndefined(offsetBottom) && viewportHeight - bottom <= offsetBottom - ) { - return setStyle({bottom: `${offsetBottom}px`}); + + if (!isNullOrUndefined(offsetTop)) { + if ( + shouldFix && shouldFix({offsetTop, offsetBottom}) || + !shouldFix && top < offsetTop + ) { + return setStyle({top: `${offsetTop}px`}); + } + } else { + const viewportHeight = document.documentElement.clientHeight; + if ( + shouldFix && shouldFix({offsetTop, offsetBottom, viewportHeight}) || + !shouldFix && !isNullOrUndefined(offsetBottom) && viewportHeight - bottom <= offsetBottom + ) { + return setStyle({bottom: `${offsetBottom}px`}); + } } } diff --git a/components/dialog/styles.ts b/components/dialog/styles.ts index fa6cc17c2..883ddd0ee 100644 --- a/components/dialog/styles.ts +++ b/components/dialog/styles.ts @@ -52,8 +52,8 @@ const defaults = { padding: `0 24px`, bodyMarginTop: `-25px`, tipIconMarginBottom: '10px', - tipIconFontSize: '24px', - tipIconLineHeight: '24px', + tipIconFontSize: '40px', + tipIconLineHeight: '40px', // with title titleFontWeight: '500', diff --git a/components/dropdown/useKeyboard.ts b/components/dropdown/useKeyboard.ts index e8f6c0348..b91efdc5f 100644 --- a/components/dropdown/useKeyboard.ts +++ b/components/dropdown/useKeyboard.ts @@ -140,6 +140,7 @@ export function useMenuKeyboard() { const item = items[focusIndex]; if (focusIndex > -1 && item) { + // TODO(find bug) itemEvents.get(item)!.onFocusout(); focusIndex = -1; } @@ -203,6 +204,8 @@ export function useItemKeyboard(itemEvents: Omit>> = { flat: Boolean, nowrap: Boolean, draggable: Boolean, + virtual: Boolean, }; const defaults = (): Partial> => ({ diff --git a/components/select/demos/group.md b/components/select/demos/group.md index 282b91225..6bef953c5 100644 --- a/components/select/demos/group.md +++ b/components/select/demos/group.md @@ -29,7 +29,7 @@ import {Select, Option, OptionGroup} from 'kpc'; - + 休息日 diff --git a/components/select/demos/virtual.md b/components/select/demos/virtual.md new file mode 100644 index 000000000..24a27a288 --- /dev/null +++ b/components/select/demos/virtual.md @@ -0,0 +1,47 @@ +--- +title: 虚拟列表 +order: 14 +--- + +`virtual`属性开启虚拟列表 + +```vdt +import {Select, Option} from 'kpc'; + +
+ +
+``` + +```ts +interface Props { + day?: string | null + data: any[] +} + +export default class extends Component { + static template = template; + + static defaults() { + return { + day: null, + data: [] + } as Props; + } + + init() { + const arr = []; + for (let index = 0; index < 10000; index++) { + arr.push({ + value: index, + label: `测试${index}` + }); + } + this.set({data: arr}); + } +} +``` diff --git a/components/select/group.vdt b/components/select/group.vdt index 7637bf425..1fab469af 100644 --- a/components/select/group.vdt +++ b/components/select/group.vdt @@ -1,8 +1,9 @@ import {makeGroupStyles} from './styles'; import {getRestProps} from '../utils'; +import { VirtualList } from '../virtualList'; const {children, label, className} = this.get(); -const {card} = this.select.get(); +const {card, virtual} = this.select.get(); const { k } = this.config; const classNameObj = { @@ -15,5 +16,5 @@ const classNameObj = {
{label}
- {children} + {children} diff --git a/components/select/index.md b/components/select/index.md index fe86180ce..302c6ff3e 100644 --- a/components/select/index.md +++ b/components/select/index.md @@ -35,6 +35,7 @@ sidebar: doc | position | 菜单弹出的位置,默认与触发器左侧对齐向下偏移`8px`的地方 | `Position` | `"left"` | `"bottom"` | `"right"` | `"top"` | `{my: 'left top+8', 'left bottom'}` | | flat | 是否展示扁平样式 | `boolean` | `false` | | draggable | 多选值是否支持拖动排序 | `boolean` | `false` | +| virtual | 是否开启虚拟列表 | `boolean` | `false` | ```ts type Position = { diff --git a/components/select/menu.vdt b/components/select/menu.vdt index 57b9d13f7..24da4a0f0 100644 --- a/components/select/menu.vdt +++ b/components/select/menu.vdt @@ -9,9 +9,10 @@ import {Button} from '../button'; import {Icon} from '../icon'; import {context} from './useSearchable'; import {Tabs, Tab} from '../tabs'; +import { VirtualList } from '../virtualList'; let {children, className} = this.get(); -const {card, searchable, multiple} = this.select.get(); +const {card, searchable, multiple, virtual} = this.select.get(); const { k } = this.config; const classNameObj = { @@ -38,14 +39,14 @@ if (card) { {group} ); -} - -if (isEmptyChildren(children)) { +} else if (isEmptyChildren(children)) { children = (
{_$('无数据')}
); +} else { + children = {children} } if (searchable) { diff --git a/components/select/select.vdt b/components/select/select.vdt index 5f56642e0..3f15e6c08 100644 --- a/components/select/select.vdt +++ b/components/select/select.vdt @@ -1,7 +1,7 @@ import {SelectMenu} from './menu'; import {isEmptyChildren} from '../utils'; -const {className, children, autoDisableArrow, disabled, multiple, value} = this.get(); +const {className, children, autoDisableArrow, disabled, multiple, value, virtual} = this.get(); const {getCreatedVNode, filter} = this.filterable; const options = filter(children); const allShowedValues = this.getAllShowedValues(options); diff --git a/components/table/demos/fixHeader.md b/components/table/demos/fixHeader.md index 1136efce9..5f09aa9af 100644 --- a/components/table/demos/fixHeader.md +++ b/components/table/demos/fixHeader.md @@ -18,11 +18,9 @@ import {Table, TableColumn} from 'kpc'; > - - +
+ +
``` @@ -30,7 +28,29 @@ import {Table, TableColumn} from 'kpc'; ```styl .wrapper display flex + align-items flex-start .k-table margin-left: 20px flex: 1 ``` + +```ts +import {range, bind} from 'kpc/components/utils'; + +const data = range(1, 100).map(item => { + return { + name: 'name ' + item, + ip: '127.0.0.' + item + }; +}); + +export default class extends Component { + static template = template; + + static defaults() { + return { + data: data + } + } +} +``` diff --git a/components/table/demos/virtual.md b/components/table/demos/virtual.md new file mode 100644 index 000000000..5d5376143 --- /dev/null +++ b/components/table/demos/virtual.md @@ -0,0 +1,105 @@ +--- +title: 虚拟表格 +order: 36 +--- + +添加`virtual`属性,并且指定滚动元素的高度(通过`fixHeader`指定)即可开启虚拟滚动模式 + +> 虚拟列表内部需要根据rowKey做缓存,不指定rowKey可能存在奇怪问题(默认rowKey为索引值) + +```vdt +import {Table, TableColumn} from 'kpc'; + +
+

表格

+ + + +
+

树形表格

+ data.name} fixHeader="400"> + + +
+
+``` + +```styl +.no-data-template + display: flex + gap: 10px +.icon + vertical-align middle + margin-right 10px + cursor pointer +.name + vertical-align middle +.expand + padding 16px +``` +```ts +interface Props { + data: any[] + variableHeightData: any[] +} +import {range, bind} from 'kpc/components/utils'; +export default class extends Component { + static template = template; + static defaults() { + return { + data: [], + variableHeightData: [] + } as Props; + } + init() { + const arr = []; + for (let index = 0; index < 10000; index++) { + arr.push({ + a: `Cell ${index}-1`, + b: `Cell ${index}-2` + }); + } + this.set({data: arr}); + + const generateTreeData = (count: number) => { + const result = []; + + for (let i = 0; i < count; i++) { + const hasChildren = Math.random() > 0.5; + const node: any = { + name: `Node-${i}`, + key: `node-${i}`, + size: Math.floor(Math.random() * 100), + }; + + if (hasChildren) { + node.children = Array.from({ length: 2 }, (_, j) => ({ + name: `Node-${i}-${j}`, + key: `node-${i}-${j}`, + size: Math.floor(Math.random() * 100), + children: Math.random() > 0.5 ? [ + { + name: `Node-${i}-${j}-0`, + key: `node-${i}-${j}-0`, + size: Math.floor(Math.random() * 100), + } + ] : undefined + })); + } + + result.push(node); + } + + return result; + }; + + const data = generateTreeData(10000); + this.set({ variableHeightData: data }); + } + + @bind + scrollToRowByKey() { + this.refs.table.scrollToRowByKey('Node-400'); + } +} +``` diff --git a/components/table/index.md b/components/table/index.md index 0a2f72466..f73aebe08 100644 --- a/components/table/index.md +++ b/components/table/index.md @@ -48,6 +48,7 @@ sidebar: doc | fixFooter | `table`给定需要固定高度时,自定义footer固定 | `boolean` | `false` | | load | 指定异步加载节点数据的函数,该函数通过`Promise`返回数组来添加子节点数据 | (node: any) => Promise | void | `undefined` | | spreadArrowIndex | 指定树形表格展开Icon的所在列,默认在第一列 | `number` | `0` | +| virtual | 是否开启虚拟列表 | `boolean` | `false` | ```ts import {Props} from 'intact'; diff --git a/components/table/index.spec.ts b/components/table/index.spec.ts index d834fc40e..1f68284ee 100644 --- a/components/table/index.spec.ts +++ b/components/table/index.spec.ts @@ -489,13 +489,14 @@ describe('Table', () => { it('tree', async () => { const [instance, element] = mount(TreeDemo); - const table = instance.$lastInput!.children as Table; + const table = (instance.$lastInput!.children as any)[0].children as Table; // check all const checkbox = element.querySelector('.k-checkbox') as HTMLElement; checkbox.click(); await wait(); expect(element.innerHTML).to.matchSnapshot(); + debugger; expect(table.getCheckedData()).to.have.lengthOf(8); const arrow = element.querySelector('.k-table-arrow') as HTMLElement; diff --git a/components/table/row.ts b/components/table/row.ts index bf506909f..8e54a1702 100644 --- a/components/table/row.ts +++ b/components/table/row.ts @@ -5,7 +5,8 @@ import { VNodeComponentClass, Props, Key, - IntactDom + IntactDom, + RefObject } from 'intact'; import template from './row.vdt'; import type {TableColumnProps} from './column'; diff --git a/components/table/styles.ts b/components/table/styles.ts index d99cb5077..8a441b5ab 100644 --- a/components/table/styles.ts +++ b/components/table/styles.ts @@ -401,6 +401,10 @@ export const makeStyles = cache(function makeStyles(k: string) { bottom: 0; } } + + .${k}-table-phantom { + position: static; + } `; }); diff --git a/components/table/table.ts b/components/table/table.ts index 4b5e9e2bf..b015e10bd 100644 --- a/components/table/table.ts +++ b/components/table/table.ts @@ -65,8 +65,9 @@ export interface TableProps< animation?: boolean | [boolean, boolean] hideHeader?: boolean pagination?: boolean | PaginationProps - fixFooter?: boolean - spreadArrowIndex?: number + fixFooter?: boolean + virtual?: boolean + spreadArrowIndex?: number; load?: (value: T) => Promise | void } @@ -135,6 +136,7 @@ const typeDefs: Required>> = { hideHeader: Boolean, pagination: [Boolean, Object], fixFooter: Boolean, + virtual: Boolean, spreadArrowIndex: Number, load: Function, }; @@ -254,9 +256,9 @@ export class Table< // we can not use scrollIntoView with smooth, because it can only operate one element // at the same time // elem.scrollIntoView({behavior: 'smooth'}); - const headerHeight = (scrollElement.querySelector('thead') as HTMLElement).offsetHeight; + // const headerHeight = (scrollElement.querySelector('thead') as HTMLElement).offsetHeight; let scrollTop = scrollElement.scrollTop; - const offsetTop = tr.offsetTop - headerHeight; + const offsetTop = tr.offsetTop; const top = offsetTop - scrollTop; const topOneFrame = top / 60 / (100 / 1000); const step = () => { diff --git a/components/table/table.vdt b/components/table/table.vdt index 4a3d5a603..b75ec8cb9 100644 --- a/components/table/table.vdt +++ b/components/table/table.vdt @@ -17,6 +17,7 @@ import {AllCheckedStatus} from './useChecked'; import {context as ResizableContext} from './useResizable'; import {context as FixedColumnsContext} from './useFixedColumns'; import {Pagination} from '../pagination'; +import {VirtualListContainer, VirtualListWrapper, VirtualListRows, VirtualListPhantom} from '../virtualList'; const { data, children, className, fixHeader, @@ -25,7 +26,7 @@ const { merge, childrenKey, indent, tooltipPosition, tooltipContainer, showIndeterminate, resizable, draggable, animation: _animation, hideHeader, - pagination, fixFooter, spreadArrowIndex + pagination, fixFooter, virtual, spreadArrowIndex } = this.get(); const animation = !Array.isArray(_animation) ? [_animation, _animation] : _animation; const {columns, cols, maxRows, maxCols} = this.columns.getData(); @@ -121,7 +122,7 @@ const {isSelected} = this.selected; const {loopData, isSpreaded, toggleSpreadRow} = this.tree; const {onRowDragStart, onRowDragOver, onRowDragEnd, draggingKey} = this.draggable; const tbody = ( - + {!hasData ? @@ -138,6 +139,7 @@ const tbody = ( const key = allKeys[index]; const spreaded = isSpreaded(key); const hasChildren = !!childrenKey && Array.isArray(value[childrenKey]); + const indentSize = indent ? indent * level : 0; let row = ); let tfooter = null; @@ -239,11 +241,13 @@ const { } = this.pagination;
-
- + + @@ -252,11 +256,11 @@ const {
- +
-
+ > = { + disabled: Boolean, +}; + +export class VirtualListContainer extends Component { + static template = template; + static typeDefs = typeDefs; + + private config = useConfigContext(); + private virtualRows = useVirtualRows(); + + // TODO + // public scrollToIndex(index: number, behavior: ScrollBehavior = 'auto') { + // const { disabled } = this.get(); + // if (disabled) return; + + // let height = 0; + // for (let i = 0; i < index; i++) { + // height += this.virtualRows.getRowHeightByIndex(i); + // } + // const containerDom = findDomFromVNode(this.$lastInput!, true) as HTMLElement; + // containerDom.scrollTo({ + // top: height, + // behavior, + // }); + // } +} diff --git a/components/virtualList/container.vdt b/components/virtualList/container.vdt new file mode 100644 index 000000000..037e4feac --- /dev/null +++ b/components/virtualList/container.vdt @@ -0,0 +1,30 @@ +import { addStyle, getRestProps } from '../utils'; +import { makeContainerStyles } from './styles'; +import { context as VirtualRowsContext } from './useVirtualRows'; + +const { children, className, disabled, ref } = this.get(); +const { k } = this.config; + +const { notifyRows, startIndex, length, getTotalHeight, translateY } = this.virtualRows; + +const classNameObj = { + [`${k}-virtual`]: !disabled, + [`${k}-virtual-container`]: !disabled, + [makeContainerStyles(k)]: !disabled, + [className]: className, +} + + +
+ {children} +
+
diff --git a/components/virtualList/demos/basic.md b/components/virtualList/demos/basic.md new file mode 100644 index 000000000..ceb5ae180 --- /dev/null +++ b/components/virtualList/demos/basic.md @@ -0,0 +1,67 @@ +--- +title: 基本用法 +order: 0 +--- + +```vdt +import { VirtualList } from 'kpc'; + +
+

1. 定高元素

+ +
+ {$value.label} +
+
+ +

2. 不定高元素

+ +
+ {$value.label} +
+
+
+``` + +```styl +.fixed-height-item + height 30px + border-bottom 1px solid #eee + padding 5px +.variable-height-item + min-height 20px + border-bottom 1px solid #eee + padding 5px +``` + +```ts +interface Props { + data: any[] + variableHeightData: any[] +} + +export default class extends Component { + static template = template; + + static defaults() { + return { + data: [], + variableHeightData: [], + } as Props; + } + + init() { + const arr = []; + const variableHeightData = []; + for (let index = 0; index < 10000; index++) { + arr.push({ + value: index, + label: `测试${index}` + }); + const repeatPart = '行内容'.repeat(Math.floor(Math.random() * 5) + 1); + variableHeightData.push({ value: index, label: `不定高度项 ${index}\n${repeatPart}` }); + } + this.set({data: arr, variableHeightData}); + } +} +``` diff --git a/components/virtualList/demos/combined.md b/components/virtualList/demos/combined.md new file mode 100644 index 000000000..03652ef94 --- /dev/null +++ b/components/virtualList/demos/combined.md @@ -0,0 +1,57 @@ +--- +title: 组合使用 +order: 1 +--- + +在一些复杂场景中,可以通过`VirtualListContainer`、`VirtualListWrapper`等子组件组合使用, 也可通过`tagName`属性指定自定义标签 + +```vdt +import { VirtualListContainer, VirtualListWrapper, VirtualListPhantom, VirtualListRows } from 'kpc'; + +
+ + + + +
  • + {$value.label} +
  • +
    +
    +
    +
    +``` + +```styl +.fixed-height-item + height 30px + border-bottom 1px solid #eee + padding 5px +``` + +```ts +interface Props { + data: any[] +} + +export default class extends Component { + static template = template; + + static defaults() { + return { + data: [], + } as Props; + } + + init() { + const arr = []; + for (let index = 0; index < 10000; index++) { + arr.push({ + value: index, + label: `测试${index}` + }); + } + this.set({data: arr}); + } +} +``` diff --git a/components/virtualList/demos/delete.md b/components/virtualList/demos/delete.md new file mode 100644 index 000000000..8e12170b8 --- /dev/null +++ b/components/virtualList/demos/delete.md @@ -0,0 +1,70 @@ +--- +title: 动态删除元素 +order: 2 +--- + +```vdt +import { VirtualList, Button } from 'kpc'; + +
    + + + +
    + {$value.label} +
    +
    +
    +``` + +```styl +.fixed-height-item + height 30px + border-bottom 1px solid #eee + padding 5px +.k-btn + margin-bottom 10px +``` + +```ts +import {bind} from 'kpc/components/utils'; +interface Props { + data: any[] +} + +export default class extends Component { + static template = template; + + static defaults() { + return { + data: [], + } as Props + } + + init() { + const newData = []; + const variableHeightData = []; + for (let index = 0; index < 10000; index++) { + newData.push({ + value: index, + label: `测试${index}` + }); + } + this.set({data: newData}); + } + + @bind + removeItems() { + const data = this.get('data').slice(); + data.splice(0, 5); + this.set('data', data); + } + + @bind + removeLastItems() { + const data = this.get('data').slice(); + data.splice(data.length - 5); + this.set('data', data); + } +} +``` diff --git a/components/virtualList/index.md b/components/virtualList/index.md new file mode 100644 index 000000000..bfc2d7b39 --- /dev/null +++ b/components/virtualList/index.md @@ -0,0 +1,19 @@ +--- +title: 虚拟列表 +category: 组件 +order: 99 +sidebar: doc +--- + +# 属性 + +| 属性 | 说明 | 类型 | 默认值 | +| --- | --- | --- | --- | +| disabled | 是否禁用虚拟化 | `boolean` | `false` | + + + + + + + diff --git a/components/virtualList/index.spec.ts b/components/virtualList/index.spec.ts new file mode 100644 index 000000000..3402c76a0 --- /dev/null +++ b/components/virtualList/index.spec.ts @@ -0,0 +1,263 @@ +import {mount, unmount, dispatchEvent, getElement, wait} from '../../test/utils'; +import {VirtualList, VirtualListContainer, VirtualListWrapper, VirtualListPhantom} from './'; +import {Component} from 'intact'; +import BasicDemo from '~/components/virtualList/demos/basic'; +import CombinedDemo from '~/components/virtualList/demos/combined'; + + +describe('VirtualList', () => { + afterEach(() => unmount()); + + it('should render virtual list correctly', async () => { + const [instance, element] = mount(BasicDemo); + + // check basic structure + const container = element.querySelector('.k-virtual-container')!; + expect(container.outerHTML).to.matchSnapshot(); + + const wrapper = element.querySelector('.k-virtual-wrapper')!; + expect(wrapper).to.exist; + + // check render items is less than total + const items = wrapper.children; + expect(items.length).to.be.lessThan(100); + }); + + it('should handle scroll correctly', async () => { + const [instance, element] = mount(BasicDemo); + + const container = element.querySelector('.k-virtual-container')!; + const wrapper = element.querySelector('.k-virtual-wrapper')!; + await wait(50); + container.scrollTop = 400; + await wait(50); + + // check content is updated + const currentFirstItem = wrapper.firstElementChild; + expect(currentFirstItem!.textContent).to.not.equal('测试0'); + }); + + + it('should update total height when data changes', async () => { + const [instance, element] = mount(BasicDemo); + const [, container2] = element.querySelectorAll('.k-virtual-container'); + + + const [, phantom2] = element.querySelectorAll('.k-virtual-phantom')!; + const initialHeight = phantom2.style.height; + await wait(50); + container2.scrollTop = 800; + await wait(50); + + // check phantom height is updated + expect(phantom2.style.height).to.not.equal(initialHeight); + }); + + it('should work with custom container and wrapper', async () => { + const [instance, element] = mount(CombinedDemo); + await wait(); + + const container = element.querySelector('.k-virtual-container')!; + const wrapper = element.querySelector('.k-virtual-wrapper')!; + + expect(container.outerHTML).to.matchSnapshot(); + // check wrapper tag name + expect(wrapper.tagName.toLowerCase()).to.equal('ul'); + }); + + it('should handle dynamic data changes correctly', async () => { + class Demo extends Component<{list: number[]}> { + static template = ` + const VirtualList = this.VirtualList; + +
    Item {$value}
    +
    + `; + + static defaults() { + return { + list: Array.from({length: 100}, (_, i) => i) + } + } + private VirtualList = VirtualList; + } + + const [instance] = mount(Demo); + await wait(); + + const container = getElement('.k-virtual-container')!; + const wrapper = getElement('.k-virtual-wrapper')!; + + instance.set('list', instance.get('list')!.filter(i => i % 2 === 0)); + await wait(); + + // check deleted render + expect(wrapper.children.length).to.be.lessThan(100); + expect(wrapper.firstElementChild!.textContent).to.equal('Item 0'); + + container.scrollTop = 300; + await wait(50); + + // check scroll render + const middleContent = wrapper.firstElementChild!.textContent; + expect(middleContent).to.not.equal('Item 0'); + + const newList = [...instance.get('list'), ...Array.from({length: 20}, (_, i) => i + 200)]; + instance.set('list', newList); + await wait(50); + + // check add render position not change + expect(wrapper.firstElementChild!.textContent).to.equal(middleContent); + + const prevScrollTop = container.scrollTop; + container.scrollTop = prevScrollTop + 200; + await wait(50); + + // check scroll to new content + expect(wrapper.firstElementChild!.textContent).to.not.equal(middleContent); + }); + + it('should handle visible area data changes', async () => { + class Demo extends Component<{list: number[]}> { + static template = ` + const VirtualList = this.VirtualList; + +
    Item {$value}
    +
    + `; + static defaults() { + return { + list: Array.from({length: 100}, (_, i) => i) + } + } + private VirtualList = VirtualList; + } + + const [instance, element] = mount(Demo); + await wait(); + + const container = getElement('.k-virtual-container')!; + const wrapper = getElement('.k-virtual-wrapper')!; + + container.scrollTop = 300; + await wait(50); + + const visibleFirstItem = wrapper.firstElementChild!.textContent; + const currentList = instance.get('list'); + + // delete visible items + const visibleIndex = parseInt(visibleFirstItem!.replace('Item ', '')); + const newList = currentList.filter(i => i !== visibleIndex && i !== visibleIndex + 1); + instance.set('list', newList); + await wait(); + + // check deleted render and position + expect(wrapper.firstElementChild!.textContent).to.not.equal(visibleFirstItem); + expect(wrapper.children.length).to.be.greaterThan(0); + }); + + it('should clean up height cache when items are deleted', async () => { + class Demo extends Component<{list: number[]}> { + static template = ` + const VirtualList = this.VirtualList; + +
    Item {$value}
    +
    + `; + static defaults() { + return { + list: Array.from({length: 100}, (_, i) => i) + } + } + private VirtualList = VirtualList; + } + + const [instance, element] = mount(Demo); + await wait(); + + const container = getElement('.k-virtual-container')!; + + // first cache some height + container.scrollTop = 300; + await wait(50); + + // get first visible item + const wrapper = getElement('.k-virtual-wrapper')!; + const firstVisibleItem = wrapper.firstElementChild!; + const firstVisibleIndex = parseInt(firstVisibleItem.textContent!.replace('Item ', '')); + + // delete visible items + const currentList = instance.get('list'); + const newList = currentList.filter(i => i > firstVisibleIndex + 5); + instance.set('list', newList); + await wait(50); + + // check scroll position is adjusted + const newFirstItem = wrapper.firstElementChild!; + expect(parseInt(newFirstItem.textContent!.replace('Item ', ''))).to.be.greaterThan(firstVisibleIndex); + + // scroll again to check render is normal + container.scrollTop += 100; + await wait(50); + + // check new render position is correct + const afterScrollItem = wrapper.firstElementChild!; + expect(afterScrollItem.textContent).to.not.equal(newFirstItem.textContent); + }); + + it('should update total height when deleting last items', async () => { + class Demo extends Component<{list: number[]}> { + static template = ` + const VirtualList = this.VirtualList; + +
    Item {$value}
    +
    + `; + static defaults() { + return { + list: Array.from({length: 100}, (_, i) => i) + } + } + private VirtualList = VirtualList; + } + + const [instance, element] = mount(Demo); + await wait(); + + const container = getElement('.k-virtual-container')!; + const phantom = getElement('.k-virtual-phantom')!; + + // record initial total height + const initialHeight = parseInt(phantom.style.height); + + // scroll to cache height + container.scrollTop = initialHeight; + await wait(50); + + const wrapper = getElement('.k-virtual-wrapper')!; + const lastVisibleItem = wrapper.lastElementChild!; + const lastVisibleIndex = parseInt(lastVisibleItem.textContent!.replace('Item ', '')); + + // delete last 5 items + const currentList = instance.get('list'); + const newList = currentList.slice(0, -5); + instance.set('list', newList); + await wait(50); + + // check total height is updated + const finalHeight = parseInt(phantom.style.height); + expect(finalHeight).to.equal(initialHeight - 5 * 30); + + // check new last item is at bottom + const newLastItem = wrapper.lastElementChild!; + const newLastIndex = parseInt(newLastItem.textContent!.replace('Item ', '')); + expect(newLastIndex).to.equal(94); + + // check new last item is at bottom + const containerRect = container.getBoundingClientRect(); + const lastItemRect = newLastItem.getBoundingClientRect(); + const isAtBottom = Math.abs((containerRect.bottom - lastItemRect.bottom)) <= 1; + expect(isAtBottom).to.be.true; + }); +}); + diff --git a/components/virtualList/index.ts b/components/virtualList/index.ts new file mode 100644 index 000000000..f211a0c4c --- /dev/null +++ b/components/virtualList/index.ts @@ -0,0 +1,5 @@ +export * from './container'; +export * from './wrapper'; +export * from './rows'; +export * from './virtual'; +export * from './phantom'; diff --git a/components/virtualList/phantom.ts b/components/virtualList/phantom.ts new file mode 100644 index 000000000..8ff285c12 --- /dev/null +++ b/components/virtualList/phantom.ts @@ -0,0 +1,18 @@ +import { Component, TypeDefs } from 'intact'; +import template from './phantom.vdt'; +import { useConfigContext } from '../config'; + +export interface VirtualListPhantomProps { + tagName?: string; +} + +const typeDefs: Required> = { + tagName: String, +}; + +export class VirtualListPhantom extends Component { + static template = template; + static typeDefs = typeDefs; + + private config = useConfigContext(); +} diff --git a/components/virtualList/phantom.vdt b/components/virtualList/phantom.vdt new file mode 100644 index 000000000..5e4ae077a --- /dev/null +++ b/components/virtualList/phantom.vdt @@ -0,0 +1,28 @@ +import { getRestProps } from '../utils'; +import { context as VirtualRowsContext } from './useVirtualRows'; +import { cx } from '@emotion/css'; +import { createVNode } from 'intact'; +import { makePhantomStyles } from './styles'; + +const { className, tagName } = this.get(); +const { k } = this.config; + +const classNameObj = { + [`${k}-virtual-phantom`]: true, + [makePhantomStyles()]: true, + [className]: className, +} + + + {({ getTotalHeight, disabled }) => { + if (disabled) return; + + return createVNode(tagName || 'div', { + ...getRestProps(this), + className: cx(classNameObj), + style: { + height: getTotalHeight() + 'px', + }, + }); + }} + diff --git a/components/virtualList/rows.ts b/components/virtualList/rows.ts new file mode 100644 index 000000000..5933fb639 --- /dev/null +++ b/components/virtualList/rows.ts @@ -0,0 +1,13 @@ +import { Component } from 'intact'; +import { useRows } from './useRows'; +import template from './rows.vdt'; + +export interface VirtualListRowsProps { + tagName?: string +} + +export class VirtualListRows extends Component { + static template = template; + + private rows = useRows(); +} diff --git a/components/virtualList/rows.vdt b/components/virtualList/rows.vdt new file mode 100644 index 000000000..60ced3535 --- /dev/null +++ b/components/virtualList/rows.vdt @@ -0,0 +1,20 @@ +import { createFragment, createVNode } from 'intact'; +import { isNullOrUndefined } from 'intact-shared'; +import { context as VirtualRowsContext } from './useVirtualRows'; + +let { tagName, children } = this.get(); +const rows = this.rows; + + + {({ notifyRows, startIndex, length, disabled }) => { + if (!disabled) { + children = rows.value.slice(startIndex, startIndex + length); + notifyRows(rows.value); + } + + if (isNullOrUndefined(tagName)) { + return createFragment(children, 8 /* ChildrenTypes.HasKeyedChildren */); + } + return createVNode(tagName, null, children); + }} + diff --git a/components/virtualList/styles.ts b/components/virtualList/styles.ts new file mode 100644 index 000000000..2d120e258 --- /dev/null +++ b/components/virtualList/styles.ts @@ -0,0 +1,29 @@ +import {css} from '@emotion/css'; +import '../../styles/global'; +import { cache } from '../utils'; + +export const makeContainerStyles = cache(() => { + return css` + overflow: auto; + position: relative; + height: 100%; + `; +}); + +export const makePhantomStyles = cache(() => { + return css` + position: absolute; + left: 0; + top: 0; + right: 0; + z-index: -1; + pointer-events: none; + `; +}); + +export const makeWrapperStyles = cache(() => { + return css` + width: 100%; + will-change: transform; + `; +}); diff --git a/components/virtualList/useRows.ts b/components/virtualList/useRows.ts new file mode 100644 index 000000000..cf096b1e6 --- /dev/null +++ b/components/virtualList/useRows.ts @@ -0,0 +1,24 @@ +import { useInstance, VNode, createRef, createFragment } from 'intact'; +import { VirtualListRows } from './rows'; + +export function useRows() { + const instance = useInstance() as VirtualListRows; + const rows = createRef([]); + + instance.on('$receive:children', (children) => { + // use fragment vnode to normalize children + const vNode = createFragment(children, 0 /* ChildrenTypes.UnknownChildren */); + + // convert to array if it has only one child + const childrenType = vNode.childrenType; + if (childrenType & 2 /* ChildrenTypes.HasVNodeChildren */) { + rows.value = [vNode.children as unknown as VNode]; + } else if (childrenType & 1 /* ChildrenTypes.HasInvalidChildren */) { + rows.value = []; + } else { + rows.value = vNode.children as VNode[]; + } + }); + + return rows; +} diff --git a/components/virtualList/useVirtualRows.ts b/components/virtualList/useVirtualRows.ts new file mode 100644 index 000000000..b2d2536d8 --- /dev/null +++ b/components/virtualList/useVirtualRows.ts @@ -0,0 +1,145 @@ +import { createContext } from '../context'; +import { useState, watchState, State } from '../../hooks/useState'; +import { useInstance, nextTick, VNode, onMounted, onUnmounted, Key, findDomFromVNode } from 'intact'; +import { VirtualListContainer } from './container'; +import { isNullOrUndefined } from 'intact-shared'; + +type ContextValue = { + notifyRows: (rows: State) => void; + startIndex: number; + endIndex: number; +} + +export const context = createContext(); + +const MIN_LENGTH = 10; +const BUFFER_SIZE = 3; + +export function useVirtualRows() { + const instance = useInstance() as unknown as VirtualListContainer; + const rowsHeightMap = new Map(); + const startIndex = useState(0); + const length = useState(MIN_LENGTH); + + let calculatedHeight = 0; + let rowAvgHeight = 0; + let rows: VNode[] = []; + function notifyRows(_rows: VNode[]) { + const oldRows = rows; + const oldLength = rows.length; + rows = _rows; + // diff oldRows, newRows + const newKeys = new Set(_rows.map(row => row.key)); + + for (let i = 0; i < oldLength; i++) { + const oldKey = oldRows[i].key!; + if (!newKeys.has(oldKey)) { + const height = rowsHeightMap.get(oldKey); + if (!isNullOrUndefined(height)) { + calculatedHeight -= height; + rowsHeightMap.delete(oldKey); + } + } + } + + // update rowAvgHeight + if (rowsHeightMap.size === 0) { + rowAvgHeight = calculatedHeight = 0; + } else { + rowAvgHeight = calculatedHeight / rowsHeightMap.size; + } + + if (_rows.length < oldLength) { + const maxStartIndex = Math.max(0, _rows.length - length.value); + if (startIndex.value > maxStartIndex) { + startIndex.set(maxStartIndex); + // 重新计算位置 + nextTick(() => { + handleScroll(); + }); + } + } + } + + function calculateRowsHeight() { + for ( + let i = startIndex.value; + i < startIndex.value + length.value && i < rows.length; + i++ + ) { + const row = rows[i]; + const key = row.key!; + if (!rowsHeightMap.has(key)) { + const rowDom = findDomFromVNode(row, true) as HTMLElement; + const height = rowDom.offsetHeight; + rowsHeightMap.set(key, height); + calculatedHeight += height; + } + } + + // use the average height to estimate the row height + rowAvgHeight = calculatedHeight / rowsHeightMap.size; + } + + watchState(startIndex, () => { + nextTick(calculateRowsHeight); + }); + + let containerDom: HTMLElement; + onMounted(() => { + // get contains height + containerDom = findDomFromVNode(instance.$lastInput!, true) as HTMLElement; + const containerHeight = containerDom.offsetHeight; + + calculateRowsHeight(); + + // calculate the length of rows we should render + length.set(Math.max(Math.ceil(containerHeight / rowAvgHeight) + BUFFER_SIZE * 2, MIN_LENGTH)); + + containerDom.addEventListener('scroll', handleScroll); + }); + + onUnmounted(() => { + containerDom.removeEventListener('scroll', handleScroll); + }); + + function getTotalHeight() { + return calculatedHeight + rowAvgHeight * (rows.length - rowsHeightMap.size); + } + + const translateY = useState(0); + function handleScroll() { + const { disabled } = instance.get(); + if (disabled) return; + + const scrollTop = containerDom.scrollTop; + + let accumulatedHeight = 0; + let start = 0; + + while (start < rows.length) { + accumulatedHeight += getRowHeightByIndex(start); + if (accumulatedHeight > scrollTop) { + break; + } + + start++; + } + + startIndex.set(Math.max(start - BUFFER_SIZE, 0)); + + // translateY should substract the buffer size rows height + for (let i = start; i >= startIndex.value; i--) { + accumulatedHeight -= getRowHeightByIndex(i); + } + + translateY.set(accumulatedHeight); + } + + function getRowHeightByIndex(index: number) { + const key = rows[index].key!; + return rowsHeightMap.get(key) || rowAvgHeight; + } + + return { notifyRows, startIndex, length, getTotalHeight, translateY }; +} diff --git a/components/virtualList/virtual.ts b/components/virtualList/virtual.ts new file mode 100644 index 000000000..f578e38cc --- /dev/null +++ b/components/virtualList/virtual.ts @@ -0,0 +1,19 @@ +import { Component, TypeDefs, createRef } from 'intact'; +import template from './virtual.vdt'; + +export interface VirtualListProps { + disabled?: boolean +} + +const typeDefs: Required> = { + disabled: Boolean, +}; + +export class VirtualList extends Component { + static template = template; + static typeDefs = typeDefs; + + // public scrollToIndex(index: number, behavior: ScrollBehavior = 'auto') { + // this.containerRef.value?.scrollToIndex(index, behavior); + // } +} diff --git a/components/virtualList/virtual.vdt b/components/virtualList/virtual.vdt new file mode 100644 index 000000000..855f242dd --- /dev/null +++ b/components/virtualList/virtual.vdt @@ -0,0 +1,17 @@ +import { getRestProps } from '../utils'; +import { VirtualListContainer } from './container'; +import { VirtualListWrapper } from './wrapper'; +import { VirtualListRows } from './rows'; +import { VirtualListPhantom } from './phantom'; + +const { children, disabled } = this.get(); + +if (disabled) { + return children; +} + + + + {children} + + diff --git a/components/virtualList/wrapper.ts b/components/virtualList/wrapper.ts new file mode 100644 index 000000000..88580d589 --- /dev/null +++ b/components/virtualList/wrapper.ts @@ -0,0 +1,17 @@ +import { Component, TypeDefs, ComponentConstructor } from 'intact'; +import template from './wrapper.vdt'; +import { useConfigContext } from '../config'; +export interface VirtualListWrapperProps { + tagName?: string | ComponentConstructor, +} + +const typeDefs: Required> = { + tagName: String, +}; + +export class VirtualListWrapper extends Component { + static template = template; + static typeDefs = typeDefs; + + private config = useConfigContext(); +} \ No newline at end of file diff --git a/components/virtualList/wrapper.vdt b/components/virtualList/wrapper.vdt new file mode 100644 index 000000000..f856319bd --- /dev/null +++ b/components/virtualList/wrapper.vdt @@ -0,0 +1,24 @@ +import { addStyle, getRestProps } from '../utils'; +import { context as VirtualRowsContext } from './useVirtualRows'; +import { createVNode } from 'intact'; +import { cx } from '@emotion/css'; + +const { children, className, tagName, style } = this.get(); +const { k } = this.config; + + + {({ translateY, disabled }) => { + const classNameObj = { + [`${k}-virtual-wrapper`]: !disabled, + [className]: className, + } + + const _style = !disabled ? { transform: `translateY(${translateY}px)` } : {}; + + return createVNode(tagName || 'div', { + ...getRestProps(this), + className: cx(classNameObj), + style: addStyle(style, _style) + }, children); + }} + diff --git a/docs/changelog.md b/docs/changelog.md index b7471724e..a96542398 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -3,6 +3,16 @@ title: 更新日志 order: 99 sidebar: doc --- +## v3.5.0 + +1. `Add` `VirtualList` 组件支持任意`list`结构虚拟列表化 [#971](https://github.com/ksc-fe/kpc/issues/971) +2. `Add` `Table`组件新增`virtual`属性,支持表格虚拟化 [#971](https://github.com/ksc-fe/kpc/issues/971) +2. `Add` `Select`组件新增`virtual`属性,支持选择框虚拟化 [#971](https://github.com/ksc-fe/kpc/issues/971) +3. `Fix` `Input`组件`autoWidth`输入空格不能自动撑开宽度 [#1046](https://github.com/ksc-fe/kpc/issues/1046) +4. `Fix` `Select`组件远程搜索时,不能输入空格 [#1047](https://github.com/ksc-fe/kpc/issues/1047) +5. `Fix` `Datepicker`传入`dayjs`对象报类型不匹配警告 [#1048](https://github.com/ksc-fe/kpc/issues/1048) +6. `Fix` `Dialog`组件`confirm`模式,UI调整 + ## v3.4.5 1. `Add` `Tip` 组件支持`Icon`及自定义`Icon` [#1043](https://github.com/ksc-fe/kpc/issues/1043) diff --git a/index.ts b/index.ts index 8b87aaaa6..3f86dcb44 100644 --- a/index.ts +++ b/index.ts @@ -67,6 +67,7 @@ export * from './components/tree'; export * from './components/treeSelect'; export * from './components/upload'; export * from './components/view'; +export * from './components/virtualList'; export * from './components/wave'; export const version = '3.5.0-beta.0'; diff --git a/packages/kpc-vue-next/__tests__/__snapshots__/Vue Next Demos.md b/packages/kpc-vue-next/__tests__/__snapshots__/Vue Next Demos.md index f011f537f..f88383044 100644 --- a/packages/kpc-vue-next/__tests__/__snapshots__/Vue Next Demos.md +++ b/packages/kpc-vue-next/__tests__/__snapshots__/Vue Next Demos.md @@ -1276,6 +1276,12 @@ "
    请选择
    请选择
    请选择
    请选择


    请选择
    请选择
    请选择
    请选择
    " ``` +#### `Select virtual` + +``` +"
    请选择
    " +``` + #### `Select noBorder` ``` @@ -1375,7 +1381,7 @@ #### `Spin overlay` ``` -"
    表头1
    表头2
    第一行哈哈2
    第二行哈哈2
    第三行哈哈3
    " +"
    表头1
    表头2
    第一行哈哈2
    第二行哈哈2
    第三行哈哈3
    " ``` ## `spinner` @@ -1439,7 +1445,7 @@ #### `Split complex` ``` -"
    名称
    网段
    操作
    name 0127.0.0.0删除
    name 1127.0.0.1删除
    name 2127.0.0.2删除
    name 3127.0.0.3删除
    name 4127.0.0.4删除
    name 5127.0.0.5删除
    name 6127.0.0.6删除
    name 7127.0.0.7删除
    name 8127.0.0.8删除
    name 9127.0.0.9删除
    name 10127.0.0.10删除
    详情
    流量统计
    标签
    " +"
    名称
    网段
    操作
    name 0127.0.0.0删除
    name 1127.0.0.1删除
    name 2127.0.0.2删除
    name 3127.0.0.3删除
    name 4127.0.0.4删除
    name 5127.0.0.5删除
    name 6127.0.0.6删除
    name 7127.0.0.7删除
    name 8127.0.0.8删除
    name 9127.0.0.9删除
    name 10127.0.0.10删除
    详情
    流量统计
    标签
    " ``` #### `Split nested` @@ -1547,217 +1553,223 @@ #### `Table animation` ``` -"
    Title 1
    Title 3
    Cell 1-1Cell 1-3
    Cell 2-1Cell 2-3
    Title 1
    Title 3
    Cell 1-1Cell 1-3
    Cell 2-1Cell 2-3
    " +"
    Title 1
    Title 3
    Cell 1-1Cell 1-3
    Cell 2-1Cell 2-3
    Title 1
    Title 3
    Cell 1-1Cell 1-3
    Cell 2-1Cell 2-3
    " ``` #### `Table asyncTree` ``` -"
    Name
    Size
    Audios12MB
    Images14MB
    doc.pdf18MB
    " +"
    Name
    Size
    Audios12MB
    Images14MB
    doc.pdf18MB
    " ``` #### `Table basic` ``` -"
    Title 1
    Title 2
    Cell 1-1Cell 1-2
    Cell 2-1Cell 2-2
    " +"
    Title 1
    Title 2
    Cell 1-1Cell 1-2
    Cell 2-1Cell 2-2
    " ``` #### `Table checkType` ``` -"
    Title
    checkbox 1
    checkbox 2
    Title
    radio 1
    radio 2
    Title
    no check 1
    no check 2
    " +"
    Title
    checkbox 1
    checkbox 2
    Title
    radio 1
    radio 2
    Title
    no check 1
    no check 2
    " ``` #### `Table checkedKeys` ``` -"
    Radio without rowKey
    default checked by index
    unchecked
    Radio with rowKey
    default checked by rowKey
    unchecked
    checkbox without rowKey
    default checked by index
    unchecked
    default checked
    checkbox with rowKey
    default checked by rowKey
    unchecked
    " +"
    Radio without rowKey
    default checked by index
    unchecked
    Radio with rowKey
    default checked by rowKey
    unchecked
    checkbox without rowKey
    default checked by index
    unchecked
    default checked
    checkbox with rowKey
    default checked by rowKey
    unchecked
    " ``` #### `Table disableRow` ``` -"
    odd rows are uncheckable
    1
    2
    3
    4
    5
    " +"
    odd rows are uncheckable
    1
    2
    3
    4
    5
    " ``` #### `Table draggable` ``` -"
    Name
    IP
    Operation
    name 1127.0.0.1Remove
    name 2127.0.0.2Remove
    name 3127.0.0.3Remove
    name 4127.0.0.4Remove
    name 5127.0.0.5Remove
    name 6127.0.0.6Remove
    name 7127.0.0.7Remove
    name 8127.0.0.8Remove
    name 9127.0.0.9Remove
    name 10127.0.0.10Remove
    name 11127.0.0.11Remove
    name 12127.0.0.12Remove
    name 13127.0.0.13Remove
    name 14127.0.0.14Remove
    name 15127.0.0.15Remove
    name 16127.0.0.16Remove
    name 17127.0.0.17Remove
    name 18127.0.0.18Remove
    name 19127.0.0.19Remove
    name 20127.0.0.20Remove
    " +"
    Name
    IP
    Operation
    name 1127.0.0.1Remove
    name 2127.0.0.2Remove
    name 3127.0.0.3Remove
    name 4127.0.0.4Remove
    name 5127.0.0.5Remove
    name 6127.0.0.6Remove
    name 7127.0.0.7Remove
    name 8127.0.0.8Remove
    name 9127.0.0.9Remove
    name 10127.0.0.10Remove
    name 11127.0.0.11Remove
    name 12127.0.0.12Remove
    name 13127.0.0.13Remove
    name 14127.0.0.14Remove
    name 15127.0.0.15Remove
    name 16127.0.0.16Remove
    name 17127.0.0.17Remove
    name 18127.0.0.18Remove
    name 19127.0.0.19Remove
    name 20127.0.0.20Remove
    " ``` #### `Table ellipsis` ``` -"
    Title 1
    Title 2
    测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长
    Cell 1-2
    Cell 2-1
    Cell 2-2
    " +"
    Title 1
    Title 2
    测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长
    Cell 1-2
    Cell 2-1
    Cell 2-2
    " ``` #### `Table empty` ``` -"
    表头1
    表头2
    暂无数据
    表头1
    表头2
    没有数据
    " +"
    表头1
    表头2
    暂无数据
    表头1
    表头2
    没有数据
    " ``` #### `Table export` ``` -"
    定义该列单元格内容
    普通文本
    自定义导出文本
    操作
    第一行哈哈1自定义1删除
    第二行哈哈2自定义2删除
    " +"
    定义该列单元格内容
    普通文本
    自定义导出文本
    操作
    第一行哈哈1自定义1删除
    第二行哈哈2自定义2删除
    " ``` #### `Table fixColumn` ``` -"
    Name
    Column1
    Column2
    Column3
    Column4
    Action
    Johntesttesttesttestaction
    Tomtesttesttesttestaction
    Javeytesttesttesttestaction
    Name
    Column1
    Column2
    Column3
    Column4
    Action
    Johntesttesttesttestaction
    Tomtesttesttesttestaction
    Javeytesttesttesttestaction
    " +"
    Name
    Column1
    Column2
    Column3
    Column4
    Action
    Johntesttesttesttestaction
    Tomtesttesttesttestaction
    Javeytesttesttesttestaction
    Name
    Column1
    Column2
    Column3
    Column4
    Action
    Johntesttesttesttestaction
    Tomtesttesttesttestaction
    Javeytesttesttesttestaction
    " ``` #### `Table fixFooter` ``` -"
    footer不固定
    footer不固定
    下拉
    yeah!
    你好
    我很好
    自定义footer
    footer固定
    footer固定啦
    下拉
    yeah!
    你好
    我很好
    自定义footer
    footer,header同时固定
    footer固定啦
    下拉
    yeah!
    你好
    我很好
    自定义footer
    " +"
    footer不固定
    footer不固定
    下拉
    yeah!
    你好
    我很好
    自定义footer
    footer固定
    footer固定啦
    下拉
    yeah!
    你好
    我很好
    自定义footer
    footer,header同时固定
    footer固定啦
    下拉
    yeah!
    你好
    我很好
    自定义footer
    " ``` #### `Table fixHeader` ``` -"
    100px
    表头固定,但内容没有超出最高高度
    100px
    表头固定啦
    下拉
    yeah!
    " +"
    100px
    表头固定,但内容没有超出最高高度
    Name
    IP
    name 1127.0.0.1
    name 2127.0.0.2
    name 3127.0.0.3
    name 4127.0.0.4
    name 5127.0.0.5
    name 6127.0.0.6
    name 7127.0.0.7
    name 8127.0.0.8
    name 9127.0.0.9
    name 10127.0.0.10
    name 11127.0.0.11
    name 12127.0.0.12
    name 13127.0.0.13
    name 14127.0.0.14
    name 15127.0.0.15
    name 16127.0.0.16
    name 17127.0.0.17
    name 18127.0.0.18
    name 19127.0.0.19
    name 20127.0.0.20
    name 21127.0.0.21
    name 22127.0.0.22
    name 23127.0.0.23
    name 24127.0.0.24
    name 25127.0.0.25
    name 26127.0.0.26
    name 27127.0.0.27
    name 28127.0.0.28
    name 29127.0.0.29
    name 30127.0.0.30
    name 31127.0.0.31
    name 32127.0.0.32
    name 33127.0.0.33
    name 34127.0.0.34
    name 35127.0.0.35
    name 36127.0.0.36
    name 37127.0.0.37
    name 38127.0.0.38
    name 39127.0.0.39
    name 40127.0.0.40
    name 41127.0.0.41
    name 42127.0.0.42
    name 43127.0.0.43
    name 44127.0.0.44
    name 45127.0.0.45
    name 46127.0.0.46
    name 47127.0.0.47
    name 48127.0.0.48
    name 49127.0.0.49
    name 50127.0.0.50
    name 51127.0.0.51
    name 52127.0.0.52
    name 53127.0.0.53
    name 54127.0.0.54
    name 55127.0.0.55
    name 56127.0.0.56
    name 57127.0.0.57
    name 58127.0.0.58
    name 59127.0.0.59
    name 60127.0.0.60
    name 61127.0.0.61
    name 62127.0.0.62
    name 63127.0.0.63
    name 64127.0.0.64
    name 65127.0.0.65
    name 66127.0.0.66
    name 67127.0.0.67
    name 68127.0.0.68
    name 69127.0.0.69
    name 70127.0.0.70
    name 71127.0.0.71
    name 72127.0.0.72
    name 73127.0.0.73
    name 74127.0.0.74
    name 75127.0.0.75
    name 76127.0.0.76
    name 77127.0.0.77
    name 78127.0.0.78
    name 79127.0.0.79
    name 80127.0.0.80
    name 81127.0.0.81
    name 82127.0.0.82
    name 83127.0.0.83
    name 84127.0.0.84
    name 85127.0.0.85
    name 86127.0.0.86
    name 87127.0.0.87
    name 88127.0.0.88
    name 89127.0.0.89
    name 90127.0.0.90
    name 91127.0.0.91
    name 92127.0.0.92
    name 93127.0.0.93
    name 94127.0.0.94
    name 95127.0.0.95
    name 96127.0.0.96
    name 97127.0.0.97
    name 98127.0.0.98
    name 99127.0.0.99
    name 100127.0.0.100
    " ``` #### `Table footer` ``` -"
    Title 1
    Title 2
    Cell 1-1Cell 1-2
    Cell 2-1Cell 2-2
    自定义底部
    " +"
    Title 1
    Title 2
    Cell 1-1Cell 1-2
    Cell 2-1Cell 2-2
    自定义底部
    " ``` #### `Table group` ``` -"
    名称
    状态
    主机1{data.status === 'active' ? '运行中' : '已关闭'}
    主机2{data.status === 'active' ? '运行中' : '已关闭'}
    主机3{data.status === 'active' ? '运行中' : '已关闭'}
    名称
    状态
    主机1{data.status === 'active' ? '运行中' : '已关闭'}
    主机2{data.status === 'active' ? '运行中' : '已关闭'}
    主机3{data.status === 'active' ? '运行中' : '已关闭'}
    " +"
    名称
    状态
    主机1{data.status === 'active' ? '运行中' : '已关闭'}
    主机2{data.status === 'active' ? '运行中' : '已关闭'}
    主机3{data.status === 'active' ? '运行中' : '已关闭'}
    名称
    状态
    主机1{data.status === 'active' ? '运行中' : '已关闭'}
    主机2{data.status === 'active' ? '运行中' : '已关闭'}
    主机3{data.status === 'active' ? '运行中' : '已关闭'}
    " ``` #### `Table groupHeader` ``` -"
    Weekday
    Forenoon
    Afternoon
    Time
    Classes
    Time
    Class 5
    Class 6
    Class 7
    Class 1
    Class 2
    Class 3
    Class 4
    Monday08:00 ~ 12:00EnglishMathematicsChineseHistory14:00 ~ 17:00GeopraghyEnglishMathematics
    Tuesday08:00 ~ 12:00MathematicsChineseHistoryGeopraghy14:00 ~ 17:00EnglishMathematicsChinese
    Wendesday08:00 ~ 12:00ChineseHistoryGeopraghyEnglish14:00 ~ 17:00MathematicsChineseHistory
    Thursday08:00 ~ 12:00HistoryGeopraghyEnglishMathematics14:00 ~ 17:00ChineseHistoryGeopraghy
    Friday08:00 ~ 12:00GeopraghyEnglishMathematicsChinese14:00 ~ 17:00HistoryGeopraghyEnglish
    " +"
    Weekday
    Forenoon
    Afternoon
    Time
    Classes
    Time
    Class 5
    Class 6
    Class 7
    Class 1
    Class 2
    Class 3
    Class 4
    Monday08:00 ~ 12:00EnglishMathematicsChineseHistory14:00 ~ 17:00GeopraghyEnglishMathematics
    Tuesday08:00 ~ 12:00MathematicsChineseHistoryGeopraghy14:00 ~ 17:00EnglishMathematicsChinese
    Wendesday08:00 ~ 12:00ChineseHistoryGeopraghyEnglish14:00 ~ 17:00MathematicsChineseHistory
    Thursday08:00 ~ 12:00HistoryGeopraghyEnglishMathematics14:00 ~ 17:00ChineseHistoryGeopraghy
    Friday08:00 ~ 12:00GeopraghyEnglishMathematicsChinese14:00 ~ 17:00HistoryGeopraghyEnglish
    " ``` #### `Table hidden` ``` -"
    Title 1
    Title 2
    Title 3
    Cell 1-1Cell 1-2cell 1-3
    Cell 2-1Cell 2-2cell 2-3

    无数据展示

    Title 1
    Title 2
    Title 3
    暂无数据
    " +"
    Title 1
    Title 2
    Title 3
    Cell 1-1Cell 1-2cell 1-3
    Cell 2-1Cell 2-2cell 2-3

    无数据展示

    Title 1
    Title 2
    Title 3
    暂无数据
    " ``` #### `Table hideHeader` ``` -"

    hideHeader:

    Cell 1-1Cell 1-2
    Cell 2-1Cell 2-2
    " +"

    hideHeader:

    Cell 1-1Cell 1-2
    Cell 2-1Cell 2-2
    " ``` #### `Table loading` ``` -"
    表头1
    表头2
    第一行哈哈1
    第二行哈哈2
    第三行哈哈3
    " +"
    表头1
    表头2
    第一行哈哈1
    第二行哈哈2
    第三行哈哈3
    " ``` #### `Table mergeCell` ``` -"
    Weekday
    Forenoon
    Afternoon
    Time
    Class 1
    Class 2
    Class 3
    Class 4
    Class 5
    Class 6
    Class 7
    Time
    Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
    TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
    WendesdayHistoryChineseHistoryEnglishChineseHistory
    ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
    FridayGeopraghyEnglishGeopraghyEnglish
    SaturdayGeopraghyEnglishGeopraghyEnglish
    Weekday
    Forenoon
    Afternoon
    Time
    Class 1
    Class 2
    Class 3
    Class 4
    Class 5
    Class 6
    Class 7
    Time
    Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
    TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
    WendesdayHistoryChineseHistoryEnglishChineseHistory
    ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
    FridayGeopraghyEnglishGeopraghyEnglish
    SaturdayGeopraghyEnglishGeopraghyEnglish
    " +"
    Weekday
    Forenoon
    Afternoon
    Time
    Class 1
    Class 2
    Class 3
    Class 4
    Class 5
    Class 6
    Class 7
    Time
    Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
    TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
    WendesdayHistoryChineseHistoryEnglishChineseHistory
    ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
    FridayGeopraghyEnglishGeopraghyEnglish
    SaturdayGeopraghyEnglishGeopraghyEnglish
    Weekday
    Forenoon
    Afternoon
    Time
    Class 1
    Class 2
    Class 3
    Class 4
    Class 5
    Class 6
    Class 7
    Time
    Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
    TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
    WendesdayHistoryChineseHistoryEnglishChineseHistory
    ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
    FridayGeopraghyEnglishGeopraghyEnglish
    SaturdayGeopraghyEnglishGeopraghyEnglish
    " ``` #### `Table pagination` ``` -"
    Name
    IP
    name 1127.0.0.1
    name 2127.0.0.2
    name 3127.0.0.3
    name 4127.0.0.4
    name 5127.0.0.5
    name 6127.0.0.6
    name 7127.0.0.7
    name 8127.0.0.8
    name 9127.0.0.9
    name 10127.0.0.10
    共 20 条
    10 条 / 页
    " +"
    Name
    IP
    name 1127.0.0.1
    name 2127.0.0.2
    name 3127.0.0.3
    name 4127.0.0.4
    name 5127.0.0.5
    name 6127.0.0.6
    name 7127.0.0.7
    name 8127.0.0.8
    name 9127.0.0.9
    name 10127.0.0.10
    共 20 条
    10 条 / 页
    " ``` #### `Table resizable` ``` -"
    通过minColWidth控制最小宽度100px
    隐藏列
    单独设置最小宽度300px
    标题
    ABC
    ABC
    " +"
    通过minColWidth控制最小宽度100px
    隐藏列
    单独设置最小宽度300px
    标题
    ABC
    ABC
    " ``` #### `Table rowCheckable` ``` -"
    点击整行不选中
    B
    AB
    A点我不会选中整行
    点击整行选中
    B
    A任何位置都可以哦~
    A点我会选中整行
    " +"
    点击整行不选中
    B
    AB
    A点我不会选中整行
    点击整行选中
    B
    A任何位置都可以哦~
    A点我会选中整行
    " ``` #### `Table rowClassName` ``` -"
    rowClassName
    1
    2
    3
    4
    5
    stripe
    1
    2
    3
    4
    5
    " +"
    rowClassName
    1
    2
    3
    4
    5
    stripe
    1
    2
    3
    4
    5
    " ``` #### `Table rowExpandable` ``` -"
    点击整行展开内容
    Javey
    Jiawei
    点击+,展开内容
    Javey
    Jiawei
    " +"
    点击整行展开内容
    Javey
    Jiawei
    点击+,展开内容
    Javey
    Jiawei
    " ``` #### `Table scheme` ``` -"
    定义该列单元格内容
    key形式
    key为一个路径字符串
    没有这个key,则返回空
    虚拟DOM获取到了item.bitem.c.c1
    " +"
    定义该列单元格内容
    key形式
    key为一个路径字符串
    没有这个key,则返回空
    虚拟DOM获取到了item.bitem.c.c1
    " ``` #### `Table scrollToRow` ``` -"
    Name
    IP
    Operation
    name 1127.0.0.1Remove
    name 2127.0.0.2Remove
    name 3127.0.0.3Remove
    name 4127.0.0.4Remove
    name 5127.0.0.5Remove
    name 6127.0.0.6Remove
    name 7127.0.0.7Remove
    name 8127.0.0.8Remove
    name 9127.0.0.9Remove
    name 10127.0.0.10Remove
    name 11127.0.0.11Remove
    name 12127.0.0.12Remove
    name 13127.0.0.13Remove
    name 14127.0.0.14Remove
    name 15127.0.0.15Remove
    name 16127.0.0.16Remove
    name 17127.0.0.17Remove
    name 18127.0.0.18Remove
    name 19127.0.0.19Remove
    name 20127.0.0.20Remove
    name 21127.0.0.21Remove
    name 22127.0.0.22Remove
    name 23127.0.0.23Remove
    name 24127.0.0.24Remove
    name 25127.0.0.25Remove
    name 26127.0.0.26Remove
    name 27127.0.0.27Remove
    name 28127.0.0.28Remove
    name 29127.0.0.29Remove
    name 30127.0.0.30Remove
    name 31127.0.0.31Remove
    name 32127.0.0.32Remove
    name 33127.0.0.33Remove
    name 34127.0.0.34Remove
    name 35127.0.0.35Remove
    name 36127.0.0.36Remove
    name 37127.0.0.37Remove
    name 38127.0.0.38Remove
    name 39127.0.0.39Remove
    name 40127.0.0.40Remove
    name 41127.0.0.41Remove
    name 42127.0.0.42Remove
    name 43127.0.0.43Remove
    name 44127.0.0.44Remove
    name 45127.0.0.45Remove
    name 46127.0.0.46Remove
    name 47127.0.0.47Remove
    name 48127.0.0.48Remove
    name 49127.0.0.49Remove
    name 50127.0.0.50Remove
    name 51127.0.0.51Remove
    name 52127.0.0.52Remove
    name 53127.0.0.53Remove
    name 54127.0.0.54Remove
    name 55127.0.0.55Remove
    name 56127.0.0.56Remove
    name 57127.0.0.57Remove
    name 58127.0.0.58Remove
    name 59127.0.0.59Remove
    name 60127.0.0.60Remove
    name 61127.0.0.61Remove
    name 62127.0.0.62Remove
    name 63127.0.0.63Remove
    name 64127.0.0.64Remove
    name 65127.0.0.65Remove
    name 66127.0.0.66Remove
    name 67127.0.0.67Remove
    name 68127.0.0.68Remove
    name 69127.0.0.69Remove
    name 70127.0.0.70Remove
    name 71127.0.0.71Remove
    name 72127.0.0.72Remove
    name 73127.0.0.73Remove
    name 74127.0.0.74Remove
    name 75127.0.0.75Remove
    name 76127.0.0.76Remove
    name 77127.0.0.77Remove
    name 78127.0.0.78Remove
    name 79127.0.0.79Remove
    name 80127.0.0.80Remove
    name 81127.0.0.81Remove
    name 82127.0.0.82Remove
    name 83127.0.0.83Remove
    name 84127.0.0.84Remove
    name 85127.0.0.85Remove
    name 86127.0.0.86Remove
    name 87127.0.0.87Remove
    name 88127.0.0.88Remove
    name 89127.0.0.89Remove
    name 90127.0.0.90Remove
    name 91127.0.0.91Remove
    name 92127.0.0.92Remove
    name 93127.0.0.93Remove
    name 94127.0.0.94Remove
    name 95127.0.0.95Remove
    name 96127.0.0.96Remove
    name 97127.0.0.97Remove
    name 98127.0.0.98Remove
    name 99127.0.0.99Remove
    name 100127.0.0.100Remove
    " +"
    Name
    IP
    Operation
    name 1127.0.0.1Remove
    name 2127.0.0.2Remove
    name 3127.0.0.3Remove
    name 4127.0.0.4Remove
    name 5127.0.0.5Remove
    name 6127.0.0.6Remove
    name 7127.0.0.7Remove
    name 8127.0.0.8Remove
    name 9127.0.0.9Remove
    name 10127.0.0.10Remove
    name 11127.0.0.11Remove
    name 12127.0.0.12Remove
    name 13127.0.0.13Remove
    name 14127.0.0.14Remove
    name 15127.0.0.15Remove
    name 16127.0.0.16Remove
    name 17127.0.0.17Remove
    name 18127.0.0.18Remove
    name 19127.0.0.19Remove
    name 20127.0.0.20Remove
    name 21127.0.0.21Remove
    name 22127.0.0.22Remove
    name 23127.0.0.23Remove
    name 24127.0.0.24Remove
    name 25127.0.0.25Remove
    name 26127.0.0.26Remove
    name 27127.0.0.27Remove
    name 28127.0.0.28Remove
    name 29127.0.0.29Remove
    name 30127.0.0.30Remove
    name 31127.0.0.31Remove
    name 32127.0.0.32Remove
    name 33127.0.0.33Remove
    name 34127.0.0.34Remove
    name 35127.0.0.35Remove
    name 36127.0.0.36Remove
    name 37127.0.0.37Remove
    name 38127.0.0.38Remove
    name 39127.0.0.39Remove
    name 40127.0.0.40Remove
    name 41127.0.0.41Remove
    name 42127.0.0.42Remove
    name 43127.0.0.43Remove
    name 44127.0.0.44Remove
    name 45127.0.0.45Remove
    name 46127.0.0.46Remove
    name 47127.0.0.47Remove
    name 48127.0.0.48Remove
    name 49127.0.0.49Remove
    name 50127.0.0.50Remove
    name 51127.0.0.51Remove
    name 52127.0.0.52Remove
    name 53127.0.0.53Remove
    name 54127.0.0.54Remove
    name 55127.0.0.55Remove
    name 56127.0.0.56Remove
    name 57127.0.0.57Remove
    name 58127.0.0.58Remove
    name 59127.0.0.59Remove
    name 60127.0.0.60Remove
    name 61127.0.0.61Remove
    name 62127.0.0.62Remove
    name 63127.0.0.63Remove
    name 64127.0.0.64Remove
    name 65127.0.0.65Remove
    name 66127.0.0.66Remove
    name 67127.0.0.67Remove
    name 68127.0.0.68Remove
    name 69127.0.0.69Remove
    name 70127.0.0.70Remove
    name 71127.0.0.71Remove
    name 72127.0.0.72Remove
    name 73127.0.0.73Remove
    name 74127.0.0.74Remove
    name 75127.0.0.75Remove
    name 76127.0.0.76Remove
    name 77127.0.0.77Remove
    name 78127.0.0.78Remove
    name 79127.0.0.79Remove
    name 80127.0.0.80Remove
    name 81127.0.0.81Remove
    name 82127.0.0.82Remove
    name 83127.0.0.83Remove
    name 84127.0.0.84Remove
    name 85127.0.0.85Remove
    name 86127.0.0.86Remove
    name 87127.0.0.87Remove
    name 88127.0.0.88Remove
    name 89127.0.0.89Remove
    name 90127.0.0.90Remove
    name 91127.0.0.91Remove
    name 92127.0.0.92Remove
    name 93127.0.0.93Remove
    name 94127.0.0.94Remove
    name 95127.0.0.95Remove
    name 96127.0.0.96Remove
    name 97127.0.0.97Remove
    name 98127.0.0.98Remove
    name 99127.0.0.99Remove
    name 100127.0.0.100Remove
    " ``` #### `Table selectedKeys` ``` -"
    表头1
    表头2
    第一行哈哈
    第二行哈哈
    表头1
    表头2
    第一行哈哈
    第二行哈哈
    " +"
    表头1
    表头2
    第一行哈哈
    第二行哈哈
    表头1
    表头2
    第一行哈哈
    第二行哈哈
    " ``` #### `Table showIndeterminate` ``` -"
    表头1
    表头2
    第一行哈哈2
    第二行哈哈2
    " +"
    表头1
    表头2
    第一行哈哈2
    第二行哈哈2
    " ``` #### `Table sort` ``` -"
    姓名
    年龄
    aa1
    cc5
    bb9
    " +"
    姓名
    年龄
    aa1
    cc5
    bb9
    " ``` #### `Table stickHeader` ``` -"
    姓名
    性别
    Javeymale
    Kanilyfemale
    " +"
    姓名
    性别
    Javeymale
    Kanilyfemale
    " ``` #### `Table stickScrollbar` ``` -"
    Name
    Column1
    Column2
    Column3
    Column4
    Action
    Johntesttesttesttestaction
    Tomtesttesttesttestaction
    Javeytesttesttesttestaction
    " +"
    Name
    Column1
    Column2
    Column3
    Column4
    Action
    Johntesttesttesttestaction
    Tomtesttesttesttestaction
    Javeytesttesttesttestaction
    " ``` #### `Table title` ``` -"
    自定义表头内容
    表头2
    第一行哈哈2
    第二行哈哈2
    " +"
    自定义表头内容
    表头2
    第一行哈哈2
    第二行哈哈2
    " ``` #### `Table tooltip` ``` -"
    表头1
    表头2
    第一行哈哈1
    第二行哈哈2
    第三行哈哈3
    " +"
    表头1
    表头2
    第一行哈哈1
    第二行哈哈2
    第三行哈哈3
    " ``` #### `Table tree` ``` -"
    Name
    Size
    Audios12MB
    Images14MB
    doc.pdf18MB

    自定义展开Icon位置

    Name
    Size
    Audios12MB
    Images14MB
    doc.pdf18MB
    " +"
    Name
    Size
    Audios12MB
    Images14MB
    doc.pdf18MB

    自定义展开Icon位置

    Name
    Size
    Audios12MB
    Images14MB
    doc.pdf18MB
    " ``` #### `Table type` ``` -"
    Type
    Value
    typeborder
    Type
    Value
    typegrid
    " +"
    Type
    Value
    typeborder
    Type
    Value
    typegrid
    " +``` + +#### `Table virtual` + +``` +"

    表格

    Title 1
    Title 2
    暂无数据

    树形表格

    Title 1
    Title 2
    暂无数据
    " ``` ## `tabs` @@ -2158,6 +2170,26 @@ "
    " ``` +## `virtualList` + +#### `VirtualList basic` + +``` +"

    1. 定高元素

    2. 不定高元素

    " +``` + +#### `VirtualList combined` + +``` +"
      " +``` + +#### `VirtualList delete` + +``` +"
      " +``` + ## `wave` #### `Wave button` diff --git a/test/__snapshots__/Cascader.md b/test/__snapshots__/Cascader.md index 7eec7b12d..2efdc495a 100644 --- a/test/__snapshots__/Cascader.md +++ b/test/__snapshots__/Cascader.md @@ -47,37 +47,37 @@ "
      无数据
      " ``` -#### `filter` +#### `no data for init data` ``` -"
      北京
      湖南
      " +"
      无数据
      " ``` -``` -"
      湖南 / 长沙市 / 岳麓区
      " -``` +#### `specify fields` ``` -"
      无匹配数据
      " +"
      北京
      湖南
      " ``` ``` -"
      湖南 / 岳阳市 / 岳阳楼区
      湖南 / 岳阳市 / 岳阳
      " +"
      请选择
      北京 / 海淀区
      " ``` -#### `no data for init data` +#### `filter` ``` -"
      无数据
      " +"
      北京
      湖南
      " ``` -#### `specify fields` +``` +"
      湖南 / 长沙市 / 岳麓区
      " +``` ``` -"
      北京
      湖南
      " +"
      无匹配数据
      " ``` ``` -"
      请选择
      北京 / 海淀区
      " +"
      湖南 / 岳阳市 / 岳阳楼区
      湖南 / 岳阳市 / 岳阳
      " ``` diff --git a/test/__snapshots__/Colorpicker.md b/test/__snapshots__/Colorpicker.md index 8648087b8..9503a38a1 100644 --- a/test/__snapshots__/Colorpicker.md +++ b/test/__snapshots__/Colorpicker.md @@ -3,17 +3,17 @@ #### `should select color by saturation` ``` -"
      36.26373626373627
      1
      Hex
      R -
      G -
      B -
      A
      " +"
      36.26373626373627
      1
      Hex
      R +
      G +
      B +
      A
      " ``` ``` -"
      36.26373626373627
      1
      Hex
      R -
      G -
      B -
      A
      " +"
      36.26373626373627
      1
      Hex
      R +
      G +
      B +
      A
      " ``` ``` @@ -27,18 +27,18 @@ #### `should change color by input` ``` -"
      0
      1
      Hex
      R -
      G -
      B -
      A
      " +"
      0
      1
      Hex
      R +
      G +
      B +
      A
      " ``` #### `should change to hsv mode` ``` -"
      36.26373626373627
      1
      Hex
      H -
      S - %
      L - %
      A
      " +"
      36.26373626373627
      1
      Hex
      H +
      S + %
      L + %
      A
      " ``` diff --git a/test/__snapshots__/Demos.md b/test/__snapshots__/Demos.md index 310ec71a2..ceacd8977 100644 --- a/test/__snapshots__/Demos.md +++ b/test/__snapshots__/Demos.md @@ -186,7 +186,7 @@ #### `Cascader filterable` ``` -"


      请输入或选择
      " +"


      请输入或选择
      " ``` #### `Cascader loadData` @@ -357,76 +357,76 @@ #### `Datepicker basic` ``` -"
      " +"
      " ``` #### `Datepicker clearable` ``` -"
      " +"
      " ``` #### `Datepicker datetime` ``` -"
      " +"
      " ``` #### `Datepicker disabledDate` ``` -"




      " +"




      " ``` #### `Datepicker format` ``` -"
      - value:
      - value:
      +"
      + value:
      + value:
      value:
      " ``` #### `Datepicker maxMin` ``` -"
      ~ -


      ~ -
      " +"
      ~ +


      ~ +
      " ``` #### `Datepicker multiple` ``` -"
      请选择日期
      - You selected: []

      请选择日期和时间
      - You selected: []

      请选择年份
      - You selected: []

      请选择月份
      - You selected: []

      开始日期 ~ 结束日期
      - You selected: []

      开始时间 ~ 结束时间
      +"
      请选择日期
      + You selected: []

      请选择日期和时间
      + You selected: []

      请选择年份
      + You selected: []

      请选择月份
      + You selected: []

      开始日期 ~ 结束日期
      + You selected: []

      开始时间 ~ 结束时间
      You selected: []

      " ``` #### `Datepicker range` ``` -"
      - You selected: null

      - You selected: null

      - You selected: null

      +"
      + You selected: null

      + You selected: null

      + You selected: null

      You selected: null

      " ``` #### `Datepicker shortcuts` ``` -"
      " +"
      " ``` #### `Datepicker yearMonth` ``` -"
      " +"
      " ``` ## `descriptions` @@ -472,13 +472,13 @@ #### `Diagram layout` ``` -"
      " +"
      " ``` #### `Diagram line` ``` -"
      x: 10
      01000

      y: 100
      01000

      x: 100
      01000

      y: 150
      01000

      x: 0
      01

      y: 0
      01

      x: 0
      01

      y: 0
      01

      A
      B
      C
      " +"
      x: 10
      01000

      y: 100
      01000

      x: 100
      01000

      y: 150
      01000

      x: 0
      01

      y: 0
      01

      x: 0
      01

      y: 0
      01

      A
      B
      C
      " ``` #### `Diagram select` @@ -669,7 +669,7 @@ ``` "
      " + click
      " ``` ## `editable` @@ -723,37 +723,37 @@ #### `Form basic` ``` -"
      请选择
      0
      0100
      " +"
      请选择
      0
      0100
      " ``` #### `Form custom` ``` -"
      " +"
      " ``` #### `Form label` ``` -"
      " +"
      " ``` #### `Form layout` ``` -"
      请选择
      " +"
      请选择
      " ``` #### `Form remote` ``` -"
      " +"
      " ``` #### `Form variable` ``` -"
      " +"
      " ``` ## `grid` @@ -829,7 +829,7 @@ #### `Icon icons` ``` -"
      k-icon-information-fill
      k-icon-warning-fill
      k-icon-success-fill
      k-icon-error-fill
      k-icon-question-fill
      k-icon-heart-fill
      k-icon-heart
      k-icon-notification-fill
      k-icon-notification
      k-icon-information
      k-icon-alert
      k-icon-question
      k-icon-zoom-in
      k-icon-zoom-out
      k-icon-close-outline
      k-icon-check-outline
      k-icon-time
      k-icon-right-circled
      k-icon-down-circled
      k-icon-right-circled
      k-icon-up-circled
      k-icon-right-squared
      k-icon-down-squared
      k-icon-left-squared
      k-icon-up-squared
      k-icon-right
      k-icon-down
      k-icon-left
      k-icon-up
      k-icon-right-bold
      k-icon-down-bold
      k-icon-left-bold
      k-icon-up-bold
      k-icon-sort
      k-icon-sort-bold
      k-icon-close
      k-icon-close-bold
      k-icon-check
      k-icon-check-bold
      k-icon-add
      k-icon-add-bold
      k-icon-minus
      k-icon-minus-bold
      k-icon-share
      k-icon-tag
      k-icon-clone
      k-icon-cloud
      k-icon-pin
      k-icon-home
      k-icon-cut
      k-icon-server
      k-icon-internet
      k-icon-mail
      k-icon-paper
      k-icon-phone
      k-icon-panel
      k-icon-alarm
      k-icon-earphone
      k-icon-settings-horizontal
      k-icon-settings-vertical
      k-icon-settings
      k-icon-message
      k-icon-return-right
      k-icon-picture
      k-icon-logout
      k-icon-all
      k-icon-drag
      k-icon-more
      k-icon-more-circled
      k-icon-folder
      k-icon-folder-open
      k-icon-lock
      k-icon-unlock
      k-icon-user
      k-icon-users
      k-icon-edit
      k-icon-location
      k-icon-delete
      k-icon-calendar
      k-icon-search
      k-icon-batchsearch
      k-icon-hidden
      k-icon-visible
      k-icon-refresh
      k-icon-upload
      k-icon-download
      k-icon-start
      k-icon-stop
      k-icon-sortorder
      " +"
      k-icon-information-fill
      k-icon-warning-fill
      k-icon-success-fill
      k-icon-error-fill
      k-icon-question-fill
      k-icon-heart-fill
      k-icon-heart
      k-icon-notification-fill
      k-icon-notification
      k-icon-information
      k-icon-alert
      k-icon-question
      k-icon-zoom-in
      k-icon-zoom-out
      k-icon-close-outline
      k-icon-check-outline
      k-icon-time
      k-icon-right-circled
      k-icon-down-circled
      k-icon-right-circled
      k-icon-up-circled
      k-icon-right-squared
      k-icon-down-squared
      k-icon-left-squared
      k-icon-up-squared
      k-icon-right
      k-icon-down
      k-icon-left
      k-icon-up
      k-icon-right-bold
      k-icon-down-bold
      k-icon-left-bold
      k-icon-up-bold
      k-icon-sort
      k-icon-sort-bold
      k-icon-close
      k-icon-close-bold
      k-icon-check
      k-icon-check-bold
      k-icon-add
      k-icon-add-bold
      k-icon-minus
      k-icon-minus-bold
      k-icon-share
      k-icon-tag
      k-icon-clone
      k-icon-cloud
      k-icon-pin
      k-icon-home
      k-icon-cut
      k-icon-server
      k-icon-internet
      k-icon-mail
      k-icon-paper
      k-icon-phone
      k-icon-panel
      k-icon-alarm
      k-icon-earphone
      k-icon-settings-horizontal
      k-icon-settings-vertical
      k-icon-settings
      k-icon-message
      k-icon-return-right
      k-icon-picture
      k-icon-logout
      k-icon-all
      k-icon-drag
      k-icon-more
      k-icon-more-circled
      k-icon-folder
      k-icon-folder-open
      k-icon-lock
      k-icon-unlock
      k-icon-user
      k-icon-users
      k-icon-edit
      k-icon-location
      k-icon-delete
      k-icon-calendar
      k-icon-search
      k-icon-batchsearch
      k-icon-hidden
      k-icon-visible
      k-icon-refresh
      k-icon-upload
      k-icon-download
      k-icon-start
      k-icon-stop
      k-icon-sortorder
      " ``` ## `input` @@ -837,79 +837,79 @@ #### `Input autoRows` ``` -"


      " +"


      " ``` #### `Input autowidth` ``` -"
      auto width


      default value
      " +"
      auto width


      default value
      " ``` #### `Input basic` ``` -"

      " +"

      " ``` #### `Input blocks` ``` -"
      http://
      .com







      http://
      .com
      " +"
      http://
      .com







      http://
      .com
      " ``` #### `Input clearable` ``` -"



      " +"



      " ``` #### `Input flat` ``` -"


      " +"


      " ``` #### `Input frozen` ``` -"

      " +"

      " ``` #### `Input inline` ``` -"
      " +"
      " ``` #### `Input password` ``` -"
      " +"
      " ``` #### `Input search` ``` -"

      " +"

      " ``` #### `Input showCount` ``` -"
      0


      0 / 10


      0 / 100
      " +"
      0


      0 / 10


      0 / 100
      " ``` #### `Input size` ``` -"



      http://
      .com







      " +"



      http://
      .com







      " ``` #### `Input textarea` ``` -"


      " +"


      " ``` ## `layout` @@ -917,7 +917,7 @@ #### `Layout aside` ``` -"
      LOGO
      menu 1 +"
      LOGO
      menu 1
      sub menu 1
      sub menu 2
      sub menu 3
      sub menu 4
      menu 2
      menu 3
      sub menu 1
      sub menu 2
      sub menu 3
      sub menu 4
      menu 4
      Home
      Detail
      content
      " ``` @@ -925,7 +925,7 @@ #### `Layout asideFix` ``` -"
      LOGO
      menu 1 +"
      LOGO
      menu 1
      sub menu 1
      sub menu 2
      sub menu 3
      sub menu 4
      menu 2
      menu 3
      sub menu 1
      sub menu 2
      sub menu 3
      sub menu 4
      menu 4
      Home
      Detail
      content @@ -1135,7 +1135,7 @@ ``` "
      LOGO
      menu 1
      menu 2
      menu 3 -
      menu 4
      menu 1 +
      menu 4
      menu 1
      sub menu 1
      sub menu 2
      sub menu 3
      sub menu 4
      menu 2
      menu 3
      sub menu 1
      sub menu 2
      sub menu 3
      sub menu 4
      menu 4
      Home
      Detail
      content
      content
      content
      content
      content
      content
      content
      content
      content
      content
      content
      content
      content
      content
      content
      content
      content
      " ``` @@ -1145,7 +1145,7 @@ ``` "
      LOGO
      menu 1
      menu 2
      menu 3 -
      menu 4
      menu 1 +
      menu 4
      menu 1
      sub menu 1
      sub menu 2
      sub menu 3
      sub menu 4
      menu 2
      menu 3
      sub menu 1
      sub menu 2
      sub menu 3
      sub menu 4
      menu 4
      Home
      Detail
      content @@ -1355,7 +1355,7 @@ ``` "
      LOGO
      menu 1
      menu 2
      menu 3 -
      menu 4
      menu 1 +
      menu 4
      menu 1
      sub menu 1
      sub menu 2
      sub menu 3
      sub menu 4
      menu 2
      menu 3
      sub menu 1
      sub menu 2
      sub menu 3
      sub menu 4
      menu 4
      Home
      Detail
      切换主题:
      " @@ -1495,25 +1495,25 @@ #### `Pagination disable` ``` -"
      共 200 条
      10 条 / 页
      共 200 条
      10 条 / 页
      前往
      " +"
      共 200 条
      10 条 / 页
      共 200 条
      10 条 / 页
      前往
      " ``` #### `Pagination flat` ``` -"
      共 200 条
      10 条 / 页
      前往
      共 200 条
      10 条 / 页
      前往
      共 200 条
      10 条 / 页
      前往
      共 200 条
      10 条 / 页
      前往
      " +"
      共 200 条
      10 条 / 页
      前往
      共 200 条
      10 条 / 页
      前往
      共 200 条
      10 条 / 页
      前往
      共 200 条
      10 条 / 页
      前往
      " ``` #### `Pagination goto` ``` -"
      共 200 条
      10 条 / 页
      前往
      " +"
      共 200 条
      10 条 / 页
      前往
      " ``` #### `Pagination simple` ``` -"
      1
      / 20
      1
      / 20
      1
      / 20
      1
      / 20
      " +"
      1
      / 20
      1
      / 20
      1
      / 20
      1
      / 20
      " ``` #### `Pagination size` @@ -1745,16 +1745,16 @@ #### `Select creatable` ``` -"
      +"
      Day:

      - +0
      请输入或选择
      + +0
      请输入或选择
      Days: []
      " ``` #### `Select custom` ``` -"
      " +"
      " ``` #### `Select customMenu` @@ -1766,7 +1766,7 @@ #### `Select disabled` ``` -"
      请选择
      星期一
      星期二
      " +"
      请选择
      星期一
      星期二
      " ``` #### `Select draggable` @@ -1779,7 +1779,7 @@ #### `Select filterable` ``` -"
      请选择
      " +"
      请选择
      " ``` #### `Select flat` @@ -1799,13 +1799,13 @@ #### `Select group` ``` -"
      " +"
      " ``` #### `Select immutable` ``` -"
      星期二
      星期天
      星期三
      +"
      星期二
      星期天
      星期三
      You selected: [\"Tuesday\",\"Sunday\",\"Wednesday\"]
      " ``` @@ -1826,13 +1826,13 @@ ``` "
      星期一
      星期二
      - +2
      " + +2
      " ``` #### `Select remote` ``` -"
      请选择
      " +"
      请选择
      " ``` #### `Select searchable` @@ -1847,6 +1847,12 @@ "
      请选择
      请选择
      请选择
      请选择


      请选择
      请选择
      请选择
      请选择
      " ``` +#### `Select virtual` + +``` +"
      请选择
      " +``` + #### `Select noBorder` ``` @@ -1896,19 +1902,19 @@ #### `Slider basic` ``` -"
      60
      0MB100MB
      277
      50500
      " +"
      60
      0MB100MB
      277
      50500
      " ``` #### `Slider disabled` ``` -"
      50
      0100
      55
      80
      50100
      -
      " +"
      50
      0100
      55
      80
      50100
      -
      " ``` #### `Slider dynamicStep` ``` -"
      0
      0500
      " +"
      0
      0500
      " ``` #### `Slider marks` @@ -1920,25 +1926,25 @@ #### `Slider points` ``` -"
      45
      0100
      0.3
      0.6
      01
      -
      45
      0100
      " +"
      45
      0100
      0.3
      0.6
      01
      -
      45
      0100
      " ``` #### `Slider range` ``` -"
      50
      76
      0100
      -
      " +"
      50
      76
      0100
      -
      " ``` #### `Slider step` ``` -"
      0
      50
      50500
      0.234234
      01
      " +"
      0
      50
      50500
      0.234234
      01
      " ``` #### `Slider tooltip` ``` -"
      277
      50500
      50
      76
      0100
      -
      123456月7891年2年3年
      300
      50500
      " +"
      277
      50500
      50
      76
      0100
      -
      123456月7891年2年3年
      300
      50500
      " ``` ## `spin` @@ -1952,7 +1958,7 @@ #### `Spin overlay` ``` -"
      表头1
      表头2
      第一行哈哈2
      第二行哈哈2
      第三行哈哈3
      " +"
      表头1
      表头2
      第一行哈哈2
      第二行哈哈2
      第三行哈哈3
      " ``` ## `spinner` @@ -1960,49 +1966,49 @@ #### `Spinner basic` ``` -"
      " +"
      " ``` #### `Spinner dynamicStep` ``` -"
      " +"
      " ``` #### `Spinner forceStep` ``` -"
      " +"
      " ``` #### `Spinner formatter` ``` -"
      " +"
      " ``` #### `Spinner precision` ``` -"
      " +"
      " ``` #### `Spinner size` ``` -"
      " +"
      " ``` #### `Spinner step` ``` -"
      " +"
      " ``` #### `Spinner vertical` ``` -"
      " +"
      " ``` ## `split` @@ -2016,7 +2022,7 @@ #### `Split complex` ``` -"
      名称
      网段
      操作
      name 0127.0.0.0删除
      name 1127.0.0.1删除
      name 2127.0.0.2删除
      name 3127.0.0.3删除
      name 4127.0.0.4删除
      name 5127.0.0.5删除
      name 6127.0.0.6删除
      name 7127.0.0.7删除
      name 8127.0.0.8删除
      name 9127.0.0.9删除
      name 10127.0.0.10删除
      详情
      流量统计
      标签
      " +"
      名称
      网段
      操作
      name 0127.0.0.0删除
      name 1127.0.0.1删除
      name 2127.0.0.2删除
      name 3127.0.0.3删除
      name 4127.0.0.4删除
      name 5127.0.0.5删除
      name 6127.0.0.6删除
      name 7127.0.0.7删除
      name 8127.0.0.8删除
      name 9127.0.0.9删除
      name 10127.0.0.10删除
      详情
      流量统计
      标签
      " ``` #### `Split nested` @@ -2130,13 +2136,13 @@ ``` "
      Title 1
      Title 3
      Cell 1-1Cell 1-3
      Cell 2-1Cell 2-3
      Title 1
      Title 3
      Cell 1-1Cell 1-3
      Cell 2-1Cell 2-3
      " +
      Title 1
      Title 3
      Cell 1-1Cell 1-3
      Cell 2-1Cell 2-3
      Title 1
      Title 3
      Cell 1-1Cell 1-3
      Cell 2-1Cell 2-3
      " ``` #### `Table asyncTree` ``` -"
      Name
      Size
      Audios12MB +"
      Name
      Size
      Audios12MB
      Images14MB
      doc.pdf18MB
      " @@ -2145,202 +2151,202 @@ #### `Table basic` ``` -"
      Title 1
      Title 2
      Cell 1-1Cell 1-2
      Cell 2-1Cell 2-2
      " +"
      Title 1
      Title 2
      Cell 1-1Cell 1-2
      Cell 2-1Cell 2-2
      " ``` #### `Table checkType` ``` -"
      Title
      checkbox 1
      checkbox 2
      Title
      radio 1
      radio 2
      Title
      no check 1
      no check 2
      " +"
      Title
      checkbox 1
      checkbox 2
      Title
      radio 1
      radio 2
      Title
      no check 1
      no check 2
      " ``` #### `Table checkedKeys` ``` -"
      Radio without rowKey
      default checked by index
      unchecked
      Radio with rowKey
      default checked by rowKey
      unchecked
      checkbox without rowKey
      default checked by index
      unchecked
      default checked
      checkbox with rowKey
      default checked by rowKey
      unchecked
      " +"
      Radio without rowKey
      default checked by index
      unchecked
      Radio with rowKey
      default checked by rowKey
      unchecked
      checkbox without rowKey
      default checked by index
      unchecked
      default checked
      checkbox with rowKey
      default checked by rowKey
      unchecked
      " ``` #### `Table disableRow` ``` -"
      odd rows are uncheckable
      1
      2
      3
      4
      5
      " +"
      odd rows are uncheckable
      1
      2
      3
      4
      5
      " ``` #### `Table draggable` ``` -"
      Name
      IP
      Operation
      name 1127.0.0.1Remove
      name 2127.0.0.2Remove
      name 3127.0.0.3Remove
      name 4127.0.0.4Remove
      name 5127.0.0.5Remove
      name 6127.0.0.6Remove
      name 7127.0.0.7Remove
      name 8127.0.0.8Remove
      name 9127.0.0.9Remove
      name 10127.0.0.10Remove
      name 11127.0.0.11Remove
      name 12127.0.0.12Remove
      name 13127.0.0.13Remove
      name 14127.0.0.14Remove
      name 15127.0.0.15Remove
      name 16127.0.0.16Remove
      name 17127.0.0.17Remove
      name 18127.0.0.18Remove
      name 19127.0.0.19Remove
      name 20127.0.0.20Remove
      " +"
      Name
      IP
      Operation
      name 1127.0.0.1Remove
      name 2127.0.0.2Remove
      name 3127.0.0.3Remove
      name 4127.0.0.4Remove
      name 5127.0.0.5Remove
      name 6127.0.0.6Remove
      name 7127.0.0.7Remove
      name 8127.0.0.8Remove
      name 9127.0.0.9Remove
      name 10127.0.0.10Remove
      name 11127.0.0.11Remove
      name 12127.0.0.12Remove
      name 13127.0.0.13Remove
      name 14127.0.0.14Remove
      name 15127.0.0.15Remove
      name 16127.0.0.16Remove
      name 17127.0.0.17Remove
      name 18127.0.0.18Remove
      name 19127.0.0.19Remove
      name 20127.0.0.20Remove
      " ``` #### `Table ellipsis` ``` -"
      Title 1
      Title 2
      测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长
      Cell 1-2
      Cell 2-1
      Cell 2-2
      " +"
      Title 1
      Title 2
      测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长测试超长
      Cell 1-2
      Cell 2-1
      Cell 2-2
      " ``` #### `Table empty` ``` -"
      表头1
      表头2
      暂无数据
      表头1
      表头2
      没有数据
      " +"
      表头1
      表头2
      暂无数据
      表头1
      表头2
      没有数据
      " ``` #### `Table export` ``` -"
      定义该列单元格内容
      普通文本
      自定义导出文本
      操作
      第一行哈哈1自定义1删除
      第二行哈哈2自定义2删除
      " +"
      定义该列单元格内容
      普通文本
      自定义导出文本
      操作
      第一行哈哈1自定义1删除
      第二行哈哈2自定义2删除
      " ``` #### `Table fixColumn` ``` -"
      Name
      Column1
      Column2
      Column3
      Column4
      Action
      Johntesttesttesttestaction
      Tomtesttesttesttestaction
      Javeytesttesttesttestaction
      Name
      Column1
      Column2
      Column3
      Column4
      Action
      Johntesttesttesttestaction
      Tomtesttesttesttestaction
      Javeytesttesttesttestaction
      " +"
      Name
      Column1
      Column2
      Column3
      Column4
      Action
      Johntesttesttesttestaction
      Tomtesttesttesttestaction
      Javeytesttesttesttestaction
      Name
      Column1
      Column2
      Column3
      Column4
      Action
      Johntesttesttesttestaction
      Tomtesttesttesttestaction
      Javeytesttesttesttestaction
      " ``` #### `Table fixFooter` ``` -"
      footer不固定
      footer不固定
      下拉
      yeah!
      你好
      我很好
      自定义footer
      footer固定
      footer固定啦
      下拉
      yeah!
      你好
      我很好
      自定义footer
      footer,header同时固定
      footer固定啦
      下拉
      yeah!
      你好
      我很好
      自定义footer
      " +"
      footer不固定
      footer不固定
      下拉
      yeah!
      你好
      我很好
      自定义footer
      footer固定
      footer固定啦
      下拉
      yeah!
      你好
      我很好
      自定义footer
      footer,header同时固定
      footer固定啦
      下拉
      yeah!
      你好
      我很好
      自定义footer
      " ``` #### `Table fixHeader` ``` -"
      100px
      表头固定,但内容没有超出最高高度
      100px
      表头固定啦
      下拉
      yeah!
      " +"
      100px
      表头固定,但内容没有超出最高高度
      Name
      IP
      name 1127.0.0.1
      name 2127.0.0.2
      name 3127.0.0.3
      name 4127.0.0.4
      name 5127.0.0.5
      name 6127.0.0.6
      name 7127.0.0.7
      name 8127.0.0.8
      name 9127.0.0.9
      name 10127.0.0.10
      name 11127.0.0.11
      name 12127.0.0.12
      name 13127.0.0.13
      name 14127.0.0.14
      name 15127.0.0.15
      name 16127.0.0.16
      name 17127.0.0.17
      name 18127.0.0.18
      name 19127.0.0.19
      name 20127.0.0.20
      name 21127.0.0.21
      name 22127.0.0.22
      name 23127.0.0.23
      name 24127.0.0.24
      name 25127.0.0.25
      name 26127.0.0.26
      name 27127.0.0.27
      name 28127.0.0.28
      name 29127.0.0.29
      name 30127.0.0.30
      name 31127.0.0.31
      name 32127.0.0.32
      name 33127.0.0.33
      name 34127.0.0.34
      name 35127.0.0.35
      name 36127.0.0.36
      name 37127.0.0.37
      name 38127.0.0.38
      name 39127.0.0.39
      name 40127.0.0.40
      name 41127.0.0.41
      name 42127.0.0.42
      name 43127.0.0.43
      name 44127.0.0.44
      name 45127.0.0.45
      name 46127.0.0.46
      name 47127.0.0.47
      name 48127.0.0.48
      name 49127.0.0.49
      name 50127.0.0.50
      name 51127.0.0.51
      name 52127.0.0.52
      name 53127.0.0.53
      name 54127.0.0.54
      name 55127.0.0.55
      name 56127.0.0.56
      name 57127.0.0.57
      name 58127.0.0.58
      name 59127.0.0.59
      name 60127.0.0.60
      name 61127.0.0.61
      name 62127.0.0.62
      name 63127.0.0.63
      name 64127.0.0.64
      name 65127.0.0.65
      name 66127.0.0.66
      name 67127.0.0.67
      name 68127.0.0.68
      name 69127.0.0.69
      name 70127.0.0.70
      name 71127.0.0.71
      name 72127.0.0.72
      name 73127.0.0.73
      name 74127.0.0.74
      name 75127.0.0.75
      name 76127.0.0.76
      name 77127.0.0.77
      name 78127.0.0.78
      name 79127.0.0.79
      name 80127.0.0.80
      name 81127.0.0.81
      name 82127.0.0.82
      name 83127.0.0.83
      name 84127.0.0.84
      name 85127.0.0.85
      name 86127.0.0.86
      name 87127.0.0.87
      name 88127.0.0.88
      name 89127.0.0.89
      name 90127.0.0.90
      name 91127.0.0.91
      name 92127.0.0.92
      name 93127.0.0.93
      name 94127.0.0.94
      name 95127.0.0.95
      name 96127.0.0.96
      name 97127.0.0.97
      name 98127.0.0.98
      name 99127.0.0.99
      name 100127.0.0.100
      " ``` #### `Table footer` ``` -"
      Title 1
      Title 2
      Cell 1-1Cell 1-2
      Cell 2-1Cell 2-2
      自定义底部
      " +"
      Title 1
      Title 2
      Cell 1-1Cell 1-2
      Cell 2-1Cell 2-2
      自定义底部
      " ``` #### `Table group` ``` -"
      名称
      状态
      主机1运行中
      主机2已关闭
      主机3运行中
      名称
      状态
      主机1运行中
      主机2已关闭
      主机3运行中
      " +"
      名称
      状态
      主机1运行中
      主机2已关闭
      主机3运行中
      名称
      状态
      主机1运行中
      主机2已关闭
      主机3运行中
      " ``` #### `Table groupHeader` ``` -"
      Weekday
      Forenoon
      Afternoon
      Time
      Classes
      Time
      Class 5
      Class 6
      Class 7
      Class 1
      Class 2
      Class 3
      Class 4
      Monday08:00 ~ 12:00EnglishMathematicsChineseHistory14:00 ~ 17:00GeopraghyEnglishMathematics
      Tuesday08:00 ~ 12:00MathematicsChineseHistoryGeopraghy14:00 ~ 17:00EnglishMathematicsChinese
      Wendesday08:00 ~ 12:00ChineseHistoryGeopraghyEnglish14:00 ~ 17:00MathematicsChineseHistory
      Thursday08:00 ~ 12:00HistoryGeopraghyEnglishMathematics14:00 ~ 17:00ChineseHistoryGeopraghy
      Friday08:00 ~ 12:00GeopraghyEnglishMathematicsChinese14:00 ~ 17:00HistoryGeopraghyEnglish
      " +"
      Weekday
      Forenoon
      Afternoon
      Time
      Classes
      Time
      Class 5
      Class 6
      Class 7
      Class 1
      Class 2
      Class 3
      Class 4
      Monday08:00 ~ 12:00EnglishMathematicsChineseHistory14:00 ~ 17:00GeopraghyEnglishMathematics
      Tuesday08:00 ~ 12:00MathematicsChineseHistoryGeopraghy14:00 ~ 17:00EnglishMathematicsChinese
      Wendesday08:00 ~ 12:00ChineseHistoryGeopraghyEnglish14:00 ~ 17:00MathematicsChineseHistory
      Thursday08:00 ~ 12:00HistoryGeopraghyEnglishMathematics14:00 ~ 17:00ChineseHistoryGeopraghy
      Friday08:00 ~ 12:00GeopraghyEnglishMathematicsChinese14:00 ~ 17:00HistoryGeopraghyEnglish
      " ``` #### `Table hidden` ``` -"
      Title 1
      Title 2
      Title 3
      Cell 1-1Cell 1-2cell 1-3
      Cell 2-1Cell 2-2cell 2-3

      无数据展示

      Title 1
      Title 2
      Title 3
      暂无数据
      " +"
      Title 1
      Title 2
      Title 3
      Cell 1-1Cell 1-2cell 1-3
      Cell 2-1Cell 2-2cell 2-3

      无数据展示

      Title 1
      Title 2
      Title 3
      暂无数据
      " ``` #### `Table hideHeader` ``` -"

      hideHeader:

      Cell 1-1Cell 1-2
      Cell 2-1Cell 2-2
      " +"

      hideHeader:

      Cell 1-1Cell 1-2
      Cell 2-1Cell 2-2
      " ``` #### `Table loading` ``` -"
      表头1
      表头2
      第一行哈哈1
      第二行哈哈2
      第三行哈哈3
      " +"
      表头1
      表头2
      第一行哈哈1
      第二行哈哈2
      第三行哈哈3
      " ``` #### `Table mergeCell` ``` -"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " +"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " ``` #### `Table pagination` ``` -"
      Name
      IP
      name 1127.0.0.1
      name 2127.0.0.2
      name 3127.0.0.3
      name 4127.0.0.4
      name 5127.0.0.5
      name 6127.0.0.6
      name 7127.0.0.7
      name 8127.0.0.8
      name 9127.0.0.9
      name 10127.0.0.10
      共 20 条
      10 条 / 页
      " +"
      Name
      IP
      name 1127.0.0.1
      name 2127.0.0.2
      name 3127.0.0.3
      name 4127.0.0.4
      name 5127.0.0.5
      name 6127.0.0.6
      name 7127.0.0.7
      name 8127.0.0.8
      name 9127.0.0.9
      name 10127.0.0.10
      共 20 条
      10 条 / 页
      " ``` #### `Table resizable` ``` -"
      通过minColWidth控制最小宽度100px
      隐藏列
      单独设置最小宽度300px
      标题
      ABC
      ABC
      " +"
      通过minColWidth控制最小宽度100px
      隐藏列
      单独设置最小宽度300px
      标题
      ABC
      ABC
      " ``` #### `Table rowCheckable` ``` -"
      点击整行不选中
      B
      AB
      A点我不会选中整行
      点击整行选中
      B
      A任何位置都可以哦~
      A点我会选中整行
      " +"
      点击整行不选中
      B
      AB
      A点我不会选中整行
      点击整行选中
      B
      A任何位置都可以哦~
      A点我会选中整行
      " ``` #### `Table rowClassName` ``` -"
      rowClassName
      1
      2
      3
      4
      5
      stripe
      1
      2
      3
      4
      5
      " +"
      rowClassName
      1
      2
      3
      4
      5
      stripe
      1
      2
      3
      4
      5
      " ``` #### `Table rowExpandable` ``` -"
      点击整行展开内容
      Javey
      Jiawei
      点击+,展开内容
      Javey
      Jiawei
      " +"
      点击整行展开内容
      Javey
      Jiawei
      点击+,展开内容
      Javey
      Jiawei
      " ``` #### `Table scheme` ``` -"
      定义该列单元格内容
      key形式
      key为一个路径字符串
      没有这个key,则返回空
      虚拟DOM获取到了item.bitem.c.c1
      " +"
      定义该列单元格内容
      key形式
      key为一个路径字符串
      没有这个key,则返回空
      虚拟DOM获取到了item.bitem.c.c1
      " ``` #### `Table scrollToRow` ``` -"
      Name
      IP
      Operation
      name 1127.0.0.1Remove
      name 2127.0.0.2Remove
      name 3127.0.0.3Remove
      name 4127.0.0.4Remove
      name 5127.0.0.5Remove
      name 6127.0.0.6Remove
      name 7127.0.0.7Remove
      name 8127.0.0.8Remove
      name 9127.0.0.9Remove
      name 10127.0.0.10Remove
      name 11127.0.0.11Remove
      name 12127.0.0.12Remove
      name 13127.0.0.13Remove
      name 14127.0.0.14Remove
      name 15127.0.0.15Remove
      name 16127.0.0.16Remove
      name 17127.0.0.17Remove
      name 18127.0.0.18Remove
      name 19127.0.0.19Remove
      name 20127.0.0.20Remove
      name 21127.0.0.21Remove
      name 22127.0.0.22Remove
      name 23127.0.0.23Remove
      name 24127.0.0.24Remove
      name 25127.0.0.25Remove
      name 26127.0.0.26Remove
      name 27127.0.0.27Remove
      name 28127.0.0.28Remove
      name 29127.0.0.29Remove
      name 30127.0.0.30Remove
      name 31127.0.0.31Remove
      name 32127.0.0.32Remove
      name 33127.0.0.33Remove
      name 34127.0.0.34Remove
      name 35127.0.0.35Remove
      name 36127.0.0.36Remove
      name 37127.0.0.37Remove
      name 38127.0.0.38Remove
      name 39127.0.0.39Remove
      name 40127.0.0.40Remove
      name 41127.0.0.41Remove
      name 42127.0.0.42Remove
      name 43127.0.0.43Remove
      name 44127.0.0.44Remove
      name 45127.0.0.45Remove
      name 46127.0.0.46Remove
      name 47127.0.0.47Remove
      name 48127.0.0.48Remove
      name 49127.0.0.49Remove
      name 50127.0.0.50Remove
      name 51127.0.0.51Remove
      name 52127.0.0.52Remove
      name 53127.0.0.53Remove
      name 54127.0.0.54Remove
      name 55127.0.0.55Remove
      name 56127.0.0.56Remove
      name 57127.0.0.57Remove
      name 58127.0.0.58Remove
      name 59127.0.0.59Remove
      name 60127.0.0.60Remove
      name 61127.0.0.61Remove
      name 62127.0.0.62Remove
      name 63127.0.0.63Remove
      name 64127.0.0.64Remove
      name 65127.0.0.65Remove
      name 66127.0.0.66Remove
      name 67127.0.0.67Remove
      name 68127.0.0.68Remove
      name 69127.0.0.69Remove
      name 70127.0.0.70Remove
      name 71127.0.0.71Remove
      name 72127.0.0.72Remove
      name 73127.0.0.73Remove
      name 74127.0.0.74Remove
      name 75127.0.0.75Remove
      name 76127.0.0.76Remove
      name 77127.0.0.77Remove
      name 78127.0.0.78Remove
      name 79127.0.0.79Remove
      name 80127.0.0.80Remove
      name 81127.0.0.81Remove
      name 82127.0.0.82Remove
      name 83127.0.0.83Remove
      name 84127.0.0.84Remove
      name 85127.0.0.85Remove
      name 86127.0.0.86Remove
      name 87127.0.0.87Remove
      name 88127.0.0.88Remove
      name 89127.0.0.89Remove
      name 90127.0.0.90Remove
      name 91127.0.0.91Remove
      name 92127.0.0.92Remove
      name 93127.0.0.93Remove
      name 94127.0.0.94Remove
      name 95127.0.0.95Remove
      name 96127.0.0.96Remove
      name 97127.0.0.97Remove
      name 98127.0.0.98Remove
      name 99127.0.0.99Remove
      name 100127.0.0.100Remove
      " +"
      Name
      IP
      Operation
      name 1127.0.0.1Remove
      name 2127.0.0.2Remove
      name 3127.0.0.3Remove
      name 4127.0.0.4Remove
      name 5127.0.0.5Remove
      name 6127.0.0.6Remove
      name 7127.0.0.7Remove
      name 8127.0.0.8Remove
      name 9127.0.0.9Remove
      name 10127.0.0.10Remove
      name 11127.0.0.11Remove
      name 12127.0.0.12Remove
      name 13127.0.0.13Remove
      name 14127.0.0.14Remove
      name 15127.0.0.15Remove
      name 16127.0.0.16Remove
      name 17127.0.0.17Remove
      name 18127.0.0.18Remove
      name 19127.0.0.19Remove
      name 20127.0.0.20Remove
      name 21127.0.0.21Remove
      name 22127.0.0.22Remove
      name 23127.0.0.23Remove
      name 24127.0.0.24Remove
      name 25127.0.0.25Remove
      name 26127.0.0.26Remove
      name 27127.0.0.27Remove
      name 28127.0.0.28Remove
      name 29127.0.0.29Remove
      name 30127.0.0.30Remove
      name 31127.0.0.31Remove
      name 32127.0.0.32Remove
      name 33127.0.0.33Remove
      name 34127.0.0.34Remove
      name 35127.0.0.35Remove
      name 36127.0.0.36Remove
      name 37127.0.0.37Remove
      name 38127.0.0.38Remove
      name 39127.0.0.39Remove
      name 40127.0.0.40Remove
      name 41127.0.0.41Remove
      name 42127.0.0.42Remove
      name 43127.0.0.43Remove
      name 44127.0.0.44Remove
      name 45127.0.0.45Remove
      name 46127.0.0.46Remove
      name 47127.0.0.47Remove
      name 48127.0.0.48Remove
      name 49127.0.0.49Remove
      name 50127.0.0.50Remove
      name 51127.0.0.51Remove
      name 52127.0.0.52Remove
      name 53127.0.0.53Remove
      name 54127.0.0.54Remove
      name 55127.0.0.55Remove
      name 56127.0.0.56Remove
      name 57127.0.0.57Remove
      name 58127.0.0.58Remove
      name 59127.0.0.59Remove
      name 60127.0.0.60Remove
      name 61127.0.0.61Remove
      name 62127.0.0.62Remove
      name 63127.0.0.63Remove
      name 64127.0.0.64Remove
      name 65127.0.0.65Remove
      name 66127.0.0.66Remove
      name 67127.0.0.67Remove
      name 68127.0.0.68Remove
      name 69127.0.0.69Remove
      name 70127.0.0.70Remove
      name 71127.0.0.71Remove
      name 72127.0.0.72Remove
      name 73127.0.0.73Remove
      name 74127.0.0.74Remove
      name 75127.0.0.75Remove
      name 76127.0.0.76Remove
      name 77127.0.0.77Remove
      name 78127.0.0.78Remove
      name 79127.0.0.79Remove
      name 80127.0.0.80Remove
      name 81127.0.0.81Remove
      name 82127.0.0.82Remove
      name 83127.0.0.83Remove
      name 84127.0.0.84Remove
      name 85127.0.0.85Remove
      name 86127.0.0.86Remove
      name 87127.0.0.87Remove
      name 88127.0.0.88Remove
      name 89127.0.0.89Remove
      name 90127.0.0.90Remove
      name 91127.0.0.91Remove
      name 92127.0.0.92Remove
      name 93127.0.0.93Remove
      name 94127.0.0.94Remove
      name 95127.0.0.95Remove
      name 96127.0.0.96Remove
      name 97127.0.0.97Remove
      name 98127.0.0.98Remove
      name 99127.0.0.99Remove
      name 100127.0.0.100Remove
      " ``` #### `Table selectedKeys` ``` -"
      表头1
      表头2
      第一行哈哈
      第二行哈哈
      表头1
      表头2
      第一行哈哈
      第二行哈哈
      " +"
      表头1
      表头2
      第一行哈哈
      第二行哈哈
      表头1
      表头2
      第一行哈哈
      第二行哈哈
      " ``` #### `Table showIndeterminate` ``` -"
      表头1
      表头2
      第一行哈哈2
      第二行哈哈2
      " +"
      表头1
      表头2
      第一行哈哈2
      第二行哈哈2
      " ``` #### `Table sort` ``` -"
      姓名
      年龄
      aa1
      cc5
      bb9
      " +"
      姓名
      年龄
      aa1
      cc5
      bb9
      " ``` #### `Table stickHeader` ``` -"
      姓名
      性别
      Javeymale
      Kanilyfemale
      " +"
      姓名
      性别
      Javeymale
      Kanilyfemale
      " ``` #### `Table stickScrollbar` ``` -"
      Name
      Column1
      Column2
      Column3
      Column4
      Action
      Johntesttesttesttestaction
      Tomtesttesttesttestaction
      Javeytesttesttesttestaction
      " +"
      Name
      Column1
      Column2
      Column3
      Column4
      Action
      Johntesttesttesttestaction
      Tomtesttesttesttestaction
      Javeytesttesttesttestaction
      " ``` #### `Table title` ``` -"
      自定义表头内容
      表头2
      第一行哈哈2
      第二行哈哈2
      " +"
      自定义表头内容
      表头2
      第一行哈哈2
      第二行哈哈2
      " ``` #### `Table tooltip` ``` -"
      表头1
      表头2
      第一行哈哈1
      第二行哈哈2
      第三行哈哈3
      " +"
      表头1
      表头2
      第一行哈哈1
      第二行哈哈2
      第三行哈哈3
      " ``` #### `Table tree` ``` -"
      Name
      Size
      Audios12MB +"
      Name
      Size
      Audios12MB
      Images14MB
      doc.pdf18MB -

      自定义展开Icon位置

      Name
      Size
      Audios12MB +

      自定义展开Icon位置

      Name
      Size
      Audios12MB
      Images14MB
      doc.pdf18MB
      " @@ -2349,7 +2355,13 @@ #### `Table type` ``` -"
      Type
      Value
      typeborder
      Type
      Value
      typegrid
      " +"
      Type
      Value
      typeborder
      Type
      Value
      typegrid
      " +``` + +#### `Table virtual` + +``` +"

      表格

      Title 1
      Title 2
      Cell 0-1Cell 0-2
      Cell 1-1Cell 1-2
      Cell 2-1Cell 2-2
      Cell 3-1Cell 3-2
      Cell 4-1Cell 4-2
      Cell 5-1Cell 5-2
      Cell 6-1Cell 6-2
      Cell 7-1Cell 7-2
      Cell 8-1Cell 8-2
      Cell 9-1Cell 9-2
      Cell 10-1Cell 10-2
      Cell 11-1Cell 11-2
      Cell 12-1Cell 12-2
      Cell 13-1Cell 13-2
      Cell 14-1Cell 14-2
      Cell 15-1Cell 15-2

      树形表格

      Title 1
      Title 2
      Node-076
      Node-120
      Node-217
      Node-381
      Node-416
      Node-537
      Node-671
      Node-767
      Node-88
      Node-956
      Node-105
      Node-1131
      Node-1238
      Node-1321
      Node-1478
      Node-1533
      " ``` ## `tabs` @@ -2471,37 +2483,37 @@ #### `Timepicker basic` ``` -"
      - You selected:

      请选择时间
      +"
      + You selected:

      请选择时间
      You selected: []
      " ``` #### `Timepicker format` ``` -"
      You selected:

      You selected:

      You selected: null
      " +"
      You selected:

      You selected:

      You selected: null
      " ``` #### `Timepicker range` ``` -"
      - You selected: null

      开始时间 ~ 结束时间
      +"
      + You selected: null

      开始时间 ~ 结束时间
      You selected: []
      " ``` #### `Timepicker step` ``` -"
      - You selected: null

      请选择时间
      +"
      + You selected: null

      请选择时间
      You selected: []
      " ``` #### `Timepicker stepRange` ``` -"
      +"
      You selected: null
      " ``` @@ -2602,7 +2614,7 @@ #### `Tooltip trigger` ``` -"
      " +"
      " ``` #### `Tooltip confirm` @@ -2625,7 +2637,7 @@ ``` "
      0 / - 0
      全部策略
      0 / + 0
      全部策略
      0 / 0

      You selected: []

      " ``` @@ -2647,8 +2659,8 @@ ``` "
      0 / - 5
      0 / - 0
      " + 5
      0 / + 0
      " ``` #### `Transfer leftChecked` @@ -2706,7 +2718,7 @@ #### `Tree filterable` ``` -"
      First floor-1
      First floor-2
      Second floor-2.1
      Third floor-2.1.1
      Third floor-2.1.2
      Second floor-2.2
      " +"
      First floor-1
      First floor-2
      Second floor-2.1
      Third floor-2.1.1
      Third floor-2.1.2
      Second floor-2.2
      " ``` #### `Tree loading` @@ -2744,7 +2756,7 @@ #### `TreeSelect filter` ``` -"
      " +"
      " ``` #### `TreeSelect load` @@ -2797,3 +2809,46 @@ "
      " ``` +## `virtualList` + +#### `VirtualList basic` + +``` +"

      1. 定高元素

      测试0
      测试1
      测试2
      测试3
      测试4
      测试5
      测试6
      测试7
      测试8
      测试9
      测试10
      测试11
      测试12
      测试13
      测试14
      测试15
      测试16
      测试17
      测试18
      测试19
      测试20
      测试21
      测试22
      测试23
      测试24
      测试25
      测试26
      测试27
      测试28
      测试29
      测试30

      2. 不定高元素

      不定高度项 0 +行内容行内容行内容
      不定高度项 1 +行内容行内容行内容
      不定高度项 2 +行内容行内容行内容行内容行内容
      不定高度项 3 +行内容
      不定高度项 4 +行内容
      不定高度项 5 +行内容行内容行内容行内容
      不定高度项 6 +行内容行内容行内容
      不定高度项 7 +行内容行内容行内容行内容
      不定高度项 8 +行内容行内容行内容行内容
      不定高度项 9 +行内容行内容行内容行内容
      不定高度项 10 +行内容行内容
      不定高度项 11 +行内容行内容行内容行内容行内容
      不定高度项 12 +行内容行内容行内容
      不定高度项 13 +行内容
      不定高度项 14 +行内容行内容行内容
      不定高度项 15 +行内容
      不定高度项 16 +行内容行内容
      不定高度项 17 +行内容行内容行内容
      不定高度项 18 +行内容行内容行内容行内容
      不定高度项 19 +行内容行内容
      不定高度项 20 +行内容行内容行内容行内容
      不定高度项 21 +行内容行内容行内容
      不定高度项 22 +行内容行内容
      " +``` + +#### `VirtualList combined` + +``` +"
      • 测试0
      • 测试1
      • 测试2
      • 测试3
      • 测试4
      • 测试5
      • 测试6
      • 测试7
      • 测试8
      • 测试9
      • 测试10
      • 测试11
      • 测试12
      • 测试13
      • 测试14
      • 测试15
      • 测试16
      • 测试17
      • 测试18
      • 测试19
      • 测试20
      • 测试21
      • 测试22
      • 测试23
      • 测试24
      • 测试25
      • 测试26
      • 测试27
      • 测试28
      • 测试29
      • 测试30
      • 测试31
      " +``` + +#### `VirtualList delete` + +``` +"
      测试0
      测试1
      测试2
      测试3
      测试4
      测试5
      测试6
      测试7
      测试8
      测试9
      测试10
      测试11
      测试12
      测试13
      测试14
      测试15
      测试16
      测试17
      测试18
      测试19
      测试20
      测试21
      测试22
      测试23
      测试24
      测试25
      测试26
      测试27
      测试28
      测试29
      测试30
      " +``` + diff --git a/test/__snapshots__/Diagram.md b/test/__snapshots__/Diagram.md index 6b119845b..a95f3f143 100644 --- a/test/__snapshots__/Diagram.md +++ b/test/__snapshots__/Diagram.md @@ -97,11 +97,11 @@ #### `test all layouts` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` diff --git a/test/__snapshots__/Dialog.md b/test/__snapshots__/Dialog.md index f92a4b9e9..9c986b1b3 100644 --- a/test/__snapshots__/Dialog.md +++ b/test/__snapshots__/Dialog.md @@ -31,7 +31,7 @@ #### `demos test` ``` -"
      Customized ok callback
      " +"
      Customized ok callback
      " ``` ``` @@ -45,7 +45,7 @@ ``` ``` -"
      Dialog Title
      " +"
      Dialog Title
      " ``` ``` @@ -53,7 +53,7 @@ ``` ``` -"
      Dialog Title
      " +"
      Dialog Title
      " ``` ``` @@ -71,21 +71,21 @@ #### `static methods` ``` -"
      test
      " +"
      test
      " ``` ``` -"
      test
      " +"
      test
      " ``` ``` -"
      error
      test
      " +"
      error
      test
      " ``` #### `should remove body` ``` -"
      Dialog Title
      " +"
      Dialog Title
      " ``` #### `should not close when click and move outside` diff --git a/test/__snapshots__/Editable.md b/test/__snapshots__/Editable.md index 537a0b84d..b8d57aedb 100644 --- a/test/__snapshots__/Editable.md +++ b/test/__snapshots__/Editable.md @@ -3,7 +3,7 @@ #### `basic test` ``` -"
      editable text

      " +"
      editable text

      " ``` ``` @@ -11,7 +11,7 @@ ``` ``` -"
      test

      " +"
      test

      " ``` ``` @@ -19,7 +19,7 @@ ``` ``` -"
      test

      " +"
      test

      " ``` ``` @@ -29,19 +29,19 @@ #### `validate test` ``` -"
      a

      100

      100
      " +"
      a

      100

      100
      " ``` ``` -"
      a

      a

      100
      " +"
      a

      a

      100
      " ``` ``` -"
      a

      a

      a
      " +"
      a

      a

      a
      " ``` ``` -"
      a

      a

      " +"
      a

      a

      " ``` ``` @@ -66,6 +66,6 @@ #### `should auto use input or textarea` ``` -"


      " +"


      " ``` diff --git a/test/__snapshots__/Form.md b/test/__snapshots__/Form.md index fdcefb685..4f19b97e9 100644 --- a/test/__snapshots__/Form.md +++ b/test/__snapshots__/Form.md @@ -3,7 +3,7 @@ #### `validate` ``` -"
      必须填写
      请选择
      必须选择
      必须选择
      必须选择
      必须选择
      0
      0100
      必须填写
      必须填写
      必须填写
      必须填写
      必须填写
      " +"
      必须填写
      请选择
      必须选择
      必须选择
      必须选择
      必须选择
      0
      0100
      必须填写
      必须填写
      必须填写
      必须填写
      必须填写
      " ``` ``` @@ -13,11 +13,11 @@ Object { ``` ``` -"
      必须填写
      请选择
      必须选择
      必须选择
      必须选择
      必须选择
      0
      0100
      必须填写
      必须填写
      必须填写
      必须填写
      必须填写
      " +"
      必须填写
      请选择
      必须选择
      必须选择
      必须选择
      必须选择
      0
      0100
      必须填写
      必须填写
      必须填写
      必须填写
      必须填写
      " ``` ``` -"
      必须填写
      请选择
      必须选择
      必须选择
      必须选择
      必须选择
      0
      0100
      必须填写
      必须填写
      必须填写
      必须填写
      必须填写
      " +"
      必须填写
      请选择
      必须选择
      必须选择
      必须选择
      必须选择
      0
      0100
      必须填写
      必须填写
      必须填写
      必须填写
      必须填写
      " ``` ``` @@ -35,19 +35,19 @@ Object { #### `custom rules` ``` -"
      只能输入字母
      " +"
      只能输入字母
      " ``` ``` -"
      只能输入字母
      " +"
      只能输入字母
      " ``` ``` -"
      不能相同
      不能相同
      " +"
      不能相同
      不能相同
      " ``` ``` -"
      不能相同
      不能相同
      " +"
      不能相同
      不能相同
      " ``` ``` @@ -66,11 +66,11 @@ Object { #### `validate when rules have changed` ``` -"
      必须填写
      " +"
      必须填写
      " ``` ``` -"
      " +"
      " ``` ``` @@ -81,11 +81,11 @@ Object { #### `validate asynchronously` ``` -"
      用户名 a 已被占用
      " +"
      用户名 a 已被占用
      " ``` ``` -"
      " +"
      " ``` ``` diff --git a/test/__snapshots__/Input.md b/test/__snapshots__/Input.md index 4e50bc47f..5c9b0112f 100644 --- a/test/__snapshots__/Input.md +++ b/test/__snapshots__/Input.md @@ -3,23 +3,23 @@ #### `search input` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` diff --git a/test/__snapshots__/Layout.md b/test/__snapshots__/Layout.md index b66c4d8ab..2c7f1cb80 100644 --- a/test/__snapshots__/Layout.md +++ b/test/__snapshots__/Layout.md @@ -3,6 +3,6 @@ #### `nest Layout in Body with fixed header` ``` -"
      body
      " +"
      body
      " ``` diff --git a/test/__snapshots__/Pagination.md b/test/__snapshots__/Pagination.md index f1a272c13..9b81cd0ff 100644 --- a/test/__snapshots__/Pagination.md +++ b/test/__snapshots__/Pagination.md @@ -29,11 +29,11 @@ #### `goto test` ``` -"
      共 200 条
      10 条 / 页
      前往
      " +"
      共 200 条
      10 条 / 页
      前往
      " ``` ``` -"
      共 200 条
      10 条 / 页
      前往
      " +"
      共 200 条
      10 条 / 页
      前往
      " ``` ``` diff --git a/test/__snapshots__/Select.md b/test/__snapshots__/Select.md index 184f2911d..56f92577f 100644 --- a/test/__snapshots__/Select.md +++ b/test/__snapshots__/Select.md @@ -75,9 +75,9 @@ ``` ``` -"
      +"
      Day: xxx

      - +0
      请输入或选择
      + +0
      请输入或选择
      Days: []" ``` @@ -86,9 +86,9 @@ ``` ``` -"
      +"
      Day: xxx

      - +0
      请输入或选择
      + +0
      请输入或选择
      Days: []" ``` @@ -97,16 +97,16 @@ ``` ``` -"
      +"
      Day: xxx

      - +0
      请输入或选择
      + +0
      请输入或选择
      Days: []" ``` #### `disabled option does not allow clearable and close` ``` -"
      星期二
      星期天
      星期三
      星期五
      +"
      星期二
      星期天
      星期三
      星期五
      You selected: [\"Tuesday\",\"Friday\"]
      " ``` diff --git a/test/__snapshots__/Slider.md b/test/__snapshots__/Slider.md index 8bad25306..6b44bc5e1 100644 --- a/test/__snapshots__/Slider.md +++ b/test/__snapshots__/Slider.md @@ -3,19 +3,19 @@ #### `range test` ``` -"
      76
      80
      0100
      -
      " +"
      76
      80
      0100
      -
      " ``` ``` -"
      60
      76
      0100
      -
      " +"
      60
      76
      0100
      -
      " ``` ``` -"
      50
      76
      0100
      -
      " +"
      50
      76
      0100
      -
      " ``` ``` -"
      50
      70
      0100
      -
      " +"
      50
      70
      0100
      -
      " ``` ``` @@ -34,15 +34,15 @@ #### `keyboard operation for basic` ``` -"
      276
      50500
      " +"
      276
      50500
      " ``` ``` -"
      277
      50500
      " +"
      277
      50500
      " ``` ``` -"
      277
      50500
      " +"
      277
      50500
      " ``` ``` @@ -61,27 +61,27 @@ #### `keyboard operation for range` ``` -"
      51
      51
      0100
      -
      " +"
      51
      51
      0100
      -
      " ``` ``` -"
      51
      52
      0100
      -
      " +"
      51
      52
      0100
      -
      " ``` ``` -"
      51
      53
      0100
      -
      " +"
      51
      53
      0100
      -
      " ``` ``` -"
      50
      50
      0100
      -
      " +"
      50
      50
      0100
      -
      " ``` ``` -"
      49
      50
      0100
      -
      " +"
      49
      50
      0100
      -
      " ``` ``` -"
      48
      50
      0100
      -
      " +"
      48
      50
      0100
      -
      " ``` ``` @@ -108,15 +108,15 @@ #### `disabled` ``` -"
      50
      0100
      " +"
      50
      0100
      " ``` ``` -"
      50
      0100
      " +"
      50
      0100
      " ``` ``` -"
      50
      0100
      " +"
      50
      0100
      " ``` ``` @@ -135,18 +135,18 @@ #### `min/max/step is undefined` ``` -"
      1
      0100
      " +"
      1
      0100
      " ``` #### `should log error when max < min` ``` -"
      0
      200
      " +"
      0
      200
      " ``` #### `should locate at the end if start value is equal to end value` ``` -"
      1
      11
      1
      1
      11
      -
      " +"
      1
      11
      1
      1
      11
      -
      " ``` diff --git a/test/__snapshots__/Spinner.md b/test/__snapshots__/Spinner.md index 402a6bfe4..3ce54ad0d 100644 --- a/test/__snapshots__/Spinner.md +++ b/test/__snapshots__/Spinner.md @@ -3,39 +3,39 @@ #### `step/max/min test` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` @@ -74,12 +74,12 @@ #### `precision` ``` -"
      " +"
      " ``` #### `should log error when max < min` ``` -"
      " +"
      " ``` diff --git a/test/__snapshots__/Table.md b/test/__snapshots__/Table.md index 50522c2de..8275da862 100644 --- a/test/__snapshots__/Table.md +++ b/test/__snapshots__/Table.md @@ -21,57 +21,57 @@ #### `expand & shrink` ``` -"
      点击整行展开内容
      Javey
      Email: jiawei23716@sina.com
      Jiawei
      " +"
      点击整行展开内容
      Javey
      Email: jiawei23716@sina.com
      Jiawei
      " ``` ``` -"
      点击整行展开内容
      Javey
      Email: jiawei23716@sina.com
      Jiawei
      " +"
      点击整行展开内容
      Javey
      Email: jiawei23716@sina.com
      Jiawei
      " ``` ``` -"
      点击+,展开内容
      Javey
      Jiawei
      " +"
      点击+,展开内容
      Javey
      Jiawei
      " ``` ``` -"
      点击+,展开内容
      Javey
      Email: jiawei23716@sina.com
      Jiawei
      " +"
      点击+,展开内容
      Javey
      Email: jiawei23716@sina.com
      Jiawei
      " ``` ``` -"
      点击+,展开内容
      Javey
      Email: jiawei23716@sina.com
      Jiawei
      " +"
      点击+,展开内容
      Javey
      Email: jiawei23716@sina.com
      Jiawei
      " ``` #### `merge cells` ``` -"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " +"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " ``` ``` -"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " +"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " ``` ``` -"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " +"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " ``` ``` -"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " +"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " ``` ``` -"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " +"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " ``` ``` -"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " +"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " ``` ``` -"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " +"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " ``` ``` -"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " +"
      Weekday
      Forenoon
      Afternoon
      Time
      Class 1
      Class 2
      Class 3
      Class 4
      Class 5
      Class 6
      Class 7
      Time
      Monday08:00 ~ 12:00EnglishMathematicsHistoryEnglishHistoryEnglishHistory14:00 ~ 17:00
      TuesdayEnglishGeopraghyHistoryEnglishHistoryMathematics
      WendesdayHistoryChineseHistoryEnglishChineseHistory
      ThursdayHistoryEnglishGeopraghyMathematicsGeopraghyEnglishMathematics
      FridayGeopraghyEnglishGeopraghyEnglish
      SaturdayGeopraghyEnglishGeopraghyEnglish
      " ``` #### `append a row in merged table` @@ -83,7 +83,7 @@ #### `group` ``` -"
      全部
      运行中
      已关闭
      " +"
      全部
      运行中
      已关闭
      " ``` ``` @@ -91,7 +91,7 @@ ``` ``` -"
      " +"
      " ``` ``` @@ -103,29 +103,29 @@ ``` ``` -"
      " +"
      " ``` ``` -"
      " +"
      " ``` ``` -"
      label
      " +"
      label
      " ``` #### `fix columns` ``` -"
      Name
      Column1
      Column2
      Column3
      Column4
      Action
      Johntesttesttesttestaction
      Tomtesttesttesttestaction
      Javeytesttesttesttestaction
      " +"
      Name
      Column1
      Column2
      Column3
      Column4
      Action
      Johntesttesttesttestaction
      Tomtesttesttesttestaction
      Javeytesttesttesttestaction
      " ``` ``` -"
      Name
      Column1
      Column2
      Column3
      Column4
      Action
      Johntesttesttesttestaction
      Tomtesttesttesttestaction
      Javeytesttesttesttestaction
      " +"
      Name
      Column1
      Column2
      Column3
      Column4
      Action
      Johntesttesttesttestaction
      Tomtesttesttesttestaction
      Javeytesttesttesttestaction
      " ``` ``` -"
      Name
      Column1
      Column2
      Column3
      Column4
      Action
      Johntesttesttesttestaction
      Tomtesttesttesttestaction
      Javeytesttesttesttestaction
      " +"
      Name
      Column1
      Column2
      Column3
      Column4
      Action
      Johntesttesttesttestaction
      Tomtesttesttesttestaction
      Javeytesttesttesttestaction
      " ``` #### `resize` @@ -149,11 +149,11 @@ #### `loading` ``` -"
      表头1
      表头2
      第一行哈哈1
      第二行哈哈2
      第三行哈哈3
      " +"
      表头1
      表头2
      第一行哈哈1
      第二行哈哈2
      第三行哈哈3
      " ``` ``` -"
      表头1
      表头2
      第一行哈哈1
      第二行哈哈2
      第三行哈哈3
      " +"
      表头1
      表头2
      第一行哈哈1
      第二行哈哈2
      第三行哈哈3
      " ``` #### `export` @@ -204,42 +204,48 @@ #### `tree` ``` -"
      Name
      Size
      Audios12MB +"
      Name
      Size
      Audios12MB
      Images14MB
      doc.pdf18MB -

      自定义展开Icon位置

      Name
      Size
      Audios12MB +

      自定义展开Icon位置

      Name
      Size
      Audios12MB
      Images14MB
      doc.pdf18MB
      " ``` ``` -"
      Name
      Size
      Audios12MB -
      Fly.mp37MB -
      Fade.aac5MB -
      Images14MB -
      doc.pdf18MB -
      " +"
      Name
      Size
      Audios12MB +
      Fly.mp37MB +
      Fade.aac5MB +
      Images14MB +
      doc.pdf18MB +

      自定义展开Icon位置

      Name
      Size
      Audios12MB +
      Images14MB +
      doc.pdf18MB +
      " ``` ``` -"
      Name
      Size
      Audios12MB -
      Fly.mp37MB -
      Fade.aac5MB -
      Images14MB -
      doc.pdf18MB -
      " +"
      Name
      Size
      Audios12MB +
      Fly.mp37MB +
      Fade.aac5MB +
      Images14MB +
      doc.pdf18MB +

      自定义展开Icon位置

      Name
      Size
      Audios12MB +
      Images14MB +
      doc.pdf18MB +
      " ``` #### `render a hidden table with minWidth` ``` -"
      暂无数据
      " +"
      暂无数据
      " ``` #### `draggable` ``` -"
      Name
      IP
      Operation
      name 2127.0.0.2Remove
      name 1127.0.0.1Remove
      name 3127.0.0.3Remove
      name 4127.0.0.4Remove
      name 5127.0.0.5Remove
      name 6127.0.0.6Remove
      name 7127.0.0.7Remove
      name 8127.0.0.8Remove
      name 9127.0.0.9Remove
      name 10127.0.0.10Remove
      name 11127.0.0.11Remove
      name 12127.0.0.12Remove
      name 13127.0.0.13Remove
      name 14127.0.0.14Remove
      name 15127.0.0.15Remove
      name 16127.0.0.16Remove
      name 17127.0.0.17Remove
      name 18127.0.0.18Remove
      name 19127.0.0.19Remove
      name 20127.0.0.20Remove
      " +"
      Name
      IP
      Operation
      name 2127.0.0.2Remove
      name 1127.0.0.1Remove
      name 3127.0.0.3Remove
      name 4127.0.0.4Remove
      name 5127.0.0.5Remove
      name 6127.0.0.6Remove
      name 7127.0.0.7Remove
      name 8127.0.0.8Remove
      name 9127.0.0.9Remove
      name 10127.0.0.10Remove
      name 11127.0.0.11Remove
      name 12127.0.0.12Remove
      name 13127.0.0.13Remove
      name 14127.0.0.14Remove
      name 15127.0.0.15Remove
      name 16127.0.0.16Remove
      name 17127.0.0.17Remove
      name 18127.0.0.18Remove
      name 19127.0.0.19Remove
      name 20127.0.0.20Remove
      " ``` diff --git a/test/__snapshots__/Tag.md b/test/__snapshots__/Tag.md index 50b094a80..0d9d9329e 100644 --- a/test/__snapshots__/Tag.md +++ b/test/__snapshots__/Tag.md @@ -18,8 +18,8 @@ ``` ``` -"
      primary
      success
      warning
      - +2
      " +"
      primary
      success
      warning
      danger
      with tooltip
      + +3
      " ``` ``` diff --git a/test/__snapshots__/Timepicker.md b/test/__snapshots__/Timepicker.md index 4579f5151..a4b7095d2 100644 --- a/test/__snapshots__/Timepicker.md +++ b/test/__snapshots__/Timepicker.md @@ -80,7 +80,7 @@ ``` ``` -"
      " +"
      " ``` ``` @@ -88,7 +88,7 @@ ``` ``` -"
      " +"
      " ``` ``` @@ -102,6 +102,6 @@ ``` ``` -"
      " +"
      " ``` diff --git a/test/__snapshots__/Transfer.md b/test/__snapshots__/Transfer.md index 803e33ef8..883d73427 100644 --- a/test/__snapshots__/Transfer.md +++ b/test/__snapshots__/Transfer.md @@ -30,31 +30,31 @@ ``` "
      0 / - 1
      0 / - 0
      " + 1
      0 / + 0
      " ``` ``` "
      1 / - 1
      0 / - 0
      " + 1
      0 / + 0
      " ``` ``` "
      1 / - 5
      0 / - 0
      " + 5
      0 / + 0
      " ``` ``` "
      4 / - 5
      0 / - 0
      " + 5
      0 / + 0
      " ``` ``` "
      4 / - 5
      0 / - 0
      " + 5
      0 / + 0
      " ``` diff --git a/test/__snapshots__/Tree.md b/test/__snapshots__/Tree.md index b3b1535ef..f487a77e9 100644 --- a/test/__snapshots__/Tree.md +++ b/test/__snapshots__/Tree.md @@ -188,11 +188,11 @@ Array [ #### `filterable` ``` -"
      First floor-1
      First floor-2
      " +"
      First floor-1
      First floor-2
      " ``` ``` -"
      First floor-2
      Second floor-2.1
      Third floor-2.1.1
      " +"
      First floor-2
      Second floor-2.1
      Third floor-2.1.1
      " ``` ``` diff --git a/test/__snapshots__/VirtualList.md b/test/__snapshots__/VirtualList.md new file mode 100644 index 000000000..6bcf4ca3a --- /dev/null +++ b/test/__snapshots__/VirtualList.md @@ -0,0 +1,14 @@ +# `VirtualList` + +#### `should render virtual list correctly` + +``` +"
      测试0
      测试1
      测试2
      测试3
      测试4
      测试5
      测试6
      测试7
      测试8
      测试9
      " +``` + +#### `should work with custom container and wrapper` + +``` +"
      • 测试0
      • 测试1
      • 测试2
      • 测试3
      • 测试4
      • 测试5
      • 测试6
      • 测试7
      • 测试8
      • 测试9
      • 测试10
      • 测试11
      • 测试12
      • 测试13
      • 测试14
      • 测试15
      • 测试16
      • 测试17
      • 测试18
      • 测试19
      • 测试20
      • 测试21
      • 测试22
      • 测试23
      • 测试24
      • 测试25
      • 测试26
      • 测试27
      • 测试28
      • 测试29
      • 测试30
      • 测试31
      " +``` +