@king-design/intact 2.0.2 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/components/dropdown/dropdown.ts +5 -6
  2. package/components/portal.ts +1 -1
  3. package/components/skeleton/demos/animate.md +30 -0
  4. package/components/skeleton/demos/avator.md +30 -0
  5. package/components/skeleton/demos/basic.md +30 -0
  6. package/components/skeleton/demos/custom.md +39 -0
  7. package/components/skeleton/demos/rows.md +32 -0
  8. package/components/skeleton/index.md +24 -0
  9. package/components/skeleton/index.ts +2 -0
  10. package/components/skeleton/item.ts +30 -0
  11. package/components/skeleton/item.vdt +28 -0
  12. package/components/skeleton/skeleton.ts +33 -0
  13. package/components/skeleton/skeleton.vdt +32 -0
  14. package/components/skeleton/style.ts +105 -0
  15. package/components/table/cell.ts +4 -0
  16. package/components/table/demos/basic.md +8 -2
  17. package/components/table/index.spec.ts +38 -54
  18. package/components/table/useChecked.ts +1 -1
  19. package/components/tree/useFilter.ts +1 -2
  20. package/es/components/dropdown/dropdown.js +7 -7
  21. package/es/components/portal.js +1 -1
  22. package/es/components/skeleton/index.d.ts +2 -0
  23. package/es/components/skeleton/index.js +2 -0
  24. package/es/components/skeleton/item.d.ts +16 -0
  25. package/es/components/skeleton/item.js +26 -0
  26. package/es/components/skeleton/item.vdt.js +35 -0
  27. package/es/components/skeleton/skeleton.d.ts +17 -0
  28. package/es/components/skeleton/skeleton.js +30 -0
  29. package/es/components/skeleton/skeleton.vdt.js +37 -0
  30. package/es/components/skeleton/style.d.ts +6 -0
  31. package/es/components/skeleton/style.js +35 -0
  32. package/es/components/table/cell.js +5 -0
  33. package/es/components/table/index.spec.js +76 -52
  34. package/es/components/table/useChecked.js +1 -1
  35. package/es/components/tree/useFilter.js +1 -2
  36. package/es/index.d.ts +3 -2
  37. package/es/index.js +3 -2
  38. package/es/packages/kpc-react/__tests__/components/form.spec.d.ts +1 -0
  39. package/es/packages/kpc-react/__tests__/components/form.spec.js +46 -0
  40. package/es/site/data/components/skeleton/demos/animate/index.d.ts +11 -0
  41. package/es/site/data/components/skeleton/demos/animate/index.js +23 -0
  42. package/es/site/data/components/skeleton/demos/animate/react.d.ts +11 -0
  43. package/es/site/data/components/skeleton/demos/animate/react.js +38 -0
  44. package/es/site/data/components/skeleton/demos/avator/index.d.ts +11 -0
  45. package/es/site/data/components/skeleton/demos/avator/index.js +23 -0
  46. package/es/site/data/components/skeleton/demos/avator/react.d.ts +11 -0
  47. package/es/site/data/components/skeleton/demos/avator/react.js +37 -0
  48. package/es/site/data/components/skeleton/demos/basic/index.d.ts +11 -0
  49. package/es/site/data/components/skeleton/demos/basic/index.js +23 -0
  50. package/es/site/data/components/skeleton/demos/basic/react.d.ts +11 -0
  51. package/es/site/data/components/skeleton/demos/basic/react.js +36 -0
  52. package/es/site/data/components/skeleton/demos/custom/index.d.ts +11 -0
  53. package/es/site/data/components/skeleton/demos/custom/index.js +23 -0
  54. package/es/site/data/components/skeleton/demos/custom/react.d.ts +11 -0
  55. package/es/site/data/components/skeleton/demos/custom/react.js +60 -0
  56. package/es/site/data/components/skeleton/demos/rows/index.d.ts +13 -0
  57. package/es/site/data/components/skeleton/demos/rows/index.js +24 -0
  58. package/es/site/data/components/skeleton/demos/rows/react.d.ts +13 -0
  59. package/es/site/data/components/skeleton/demos/rows/react.js +38 -0
  60. package/es/site/data/components/skeleton/index.d.ts +57 -0
  61. package/es/site/data/components/skeleton/index.js +42 -0
  62. package/es/site/data/components/table/demos/basic/react.js +8 -2
  63. package/es/site/src/components/footer/styles.js +1 -1
  64. package/es/site/src/pages/colorProcess/index.d.ts +21 -0
  65. package/es/site/src/pages/colorProcess/index.js +79 -0
  66. package/es/site/src/pages/colorProcess/style.d.ts +3 -0
  67. package/es/site/src/pages/colorProcess/style.js +53 -0
  68. package/es/site/src/pages/font/index.d.ts +12 -0
  69. package/es/site/src/pages/font/index.js +22 -0
  70. package/es/site/src/pages/font/styles.d.ts +1 -0
  71. package/es/site/src/pages/font/styles.js +9 -0
  72. package/es/site/src/pages/iframe/colorProcess/styles.js +2 -2
  73. package/es/site/src/pages/index/BestPractice/styles.js +1 -1
  74. package/es/site/src/pages/index/ColorProcess/styles.js +2 -2
  75. package/es/site/src/pages/index/KingVersion/styles.js +1 -1
  76. package/es/site/src/pages/index/NewFunction/index.d.ts +2 -0
  77. package/es/site/src/pages/index/NewFunction/index.js +8 -2
  78. package/es/site/src/pages/index/NewFunction/styles.js +1 -1
  79. package/es/site/src/pages/index/styles.js +2 -1
  80. package/es/site/src/pages/resource/index.d.ts +1 -0
  81. package/es/site/src/pages/resource/index.js +4 -1
  82. package/es/site/src/pages/styles.js +1 -1
  83. package/es/site/src/router/index.js +75 -5
  84. package/index.ts +3 -2
  85. package/package.json +7 -5
@@ -244,10 +244,12 @@ export class Dropdown<
244
244
 
245
245
  private normalizeTriggerProps(props: any) {
246
246
  // if use kpc in react or vue, normalize props by Wrapper.props.vnode;
247
- if ((this as any).$isReact || (this as any).$isVueNext) {
248
- const vnode = props.vnode;
249
- if (!vnode) return props;
247
+ const vnode = props.vnode;
248
+ if (!vnode) return props;
250
249
 
250
+ // maybe we render the intact component in react slot property, in this case
251
+ // the $isReact is false. so use the vnode $$typeof field as gauge
252
+ if (vnode.$$typeof || (this as any).$isVueNext) {
251
253
  const _props = vnode.props;
252
254
  if (!_props) return props;
253
255
 
@@ -260,9 +262,6 @@ export class Dropdown<
260
262
  className: _props.className || _props.class /* vue-next */,
261
263
  };
262
264
  } else if ((this as any).$isVue) {
263
- const vnode = props.vnode;
264
- if (!vnode) return props;
265
-
266
265
  const data = vnode.data;
267
266
  const on = data && data.on || EMPTY_OBJ;
268
267
  const ret: Record<string, any> = {vnode};
@@ -100,7 +100,7 @@ export class Portal<T extends PortalProps = PortalProps> extends Component<T> {
100
100
  }
101
101
  } else {
102
102
  mountedQueue.push(() => {
103
- parentDom = this.$lastInput!.dom!.parentElement!;
103
+ const parentDom = this.$lastInput!.dom!.parentElement!;
104
104
  this.initContainer(nextProps.container, parentDom, anchor);
105
105
 
106
106
  mount(
@@ -0,0 +1,30 @@
1
+ ---
2
+ title: 动画效果
3
+ order: 3
4
+ ---
5
+
6
+ 添加animated属性可显示动画效果。
7
+
8
+ ```vdt
9
+ import {Skeleton} from 'kpc';
10
+
11
+ <div>
12
+ <Skeleton loading={this.get('showSkeleton')} avator animated />
13
+ </div>
14
+ ```
15
+
16
+ ```ts
17
+ interface Props {
18
+ showSkeleton?: boolean
19
+ }
20
+
21
+ export default class extends Component<Props> {
22
+ static template = template;
23
+
24
+ static defaults() {
25
+ return {
26
+ showSkeleton: true
27
+ };
28
+ }
29
+ }
30
+ ```
@@ -0,0 +1,30 @@
1
+ ---
2
+ title: 头像模式
3
+ order: 2
4
+ ---
5
+
6
+ avator属性可以用来将组件显示为头像模式。
7
+
8
+ ```vdt
9
+ import {Skeleton} from 'kpc';
10
+
11
+ <div>
12
+ <Skeleton loading={this.get('showSkeleton')} avator={true} />
13
+ </div>
14
+ ```
15
+
16
+ ```ts
17
+ interface Props {
18
+ showSkeleton?: boolean
19
+ }
20
+
21
+ export default class extends Component<Props> {
22
+ static template = template;
23
+
24
+ static defaults() {
25
+ return {
26
+ showSkeleton: true
27
+ };
28
+ }
29
+ }
30
+ ```
@@ -0,0 +1,30 @@
1
+ ---
2
+ title: 基础用法
3
+ order: 0
4
+ ---
5
+
6
+ 最简单的骨架屏用法,通过loading属性来控制骨架屏的显示或隐藏效果。也可以使用Spin来代替,但是在某些场景下能提供比Spin更好的视觉效果和用户体验。
7
+
8
+ ```vdt
9
+ import {Skeleton} from 'kpc';
10
+
11
+ <div>
12
+ <Skeleton loading={this.get('showSkeleton')} />
13
+ </div>
14
+ ```
15
+
16
+ ```ts
17
+ interface Props {
18
+ showSkeleton?: boolean
19
+ }
20
+
21
+ export default class extends Component<Props> {
22
+ static template = template;
23
+
24
+ static defaults() {
25
+ return {
26
+ showSkeleton: true
27
+ };
28
+ }
29
+ }
30
+ ```
@@ -0,0 +1,39 @@
1
+ ---
2
+ title: 自定义样式
3
+ order: 4
4
+ ---
5
+
6
+ 我们为SkeletonItem提供了`type`属性,默认具有"text" | "avator" | "image" | "button" | "input"几种类型。他们分别模拟了文本、头像、图片、按钮、输入框几种元素的外观。在提供的默认样式不能满足需求的时候,我们可以通过自定义模板来实现预期的效果。
7
+
8
+ ```vdt
9
+ import {Skeleton, SkeletonItem} from 'kpc';
10
+
11
+ <div>
12
+ <Skeleton loading={this.get('showSkeleton')} avator animated>
13
+ <SkeletonItem type="image"></SkeletonItem>
14
+ <div style="display: flex; justify-content: space-between; width: 200px; margin-top: 20px;">
15
+ <div>
16
+ <SkeletonItem type="button" style="height: 16px;"></SkeletonItem>
17
+ <SkeletonItem type="button" style="height: 16px; margin-top: 8px;"></SkeletonItem>
18
+ </div>
19
+ <SkeletonItem type="button"></SkeletonItem>
20
+ </div>
21
+ </Skeleton>
22
+ </div>
23
+ ```
24
+
25
+ ```ts
26
+ interface Props {
27
+ showSkeleton?: boolean
28
+ }
29
+
30
+ export default class extends Component<Props> {
31
+ static template = template;
32
+
33
+ static defaults() {
34
+ return {
35
+ showSkeleton: true
36
+ };
37
+ }
38
+ }
39
+ ```
@@ -0,0 +1,32 @@
1
+ ---
2
+ title: 控制行数
3
+ order: 1
4
+ ---
5
+
6
+ 可以根据需要,来控制骨架屏显示的行数,默认为2行。
7
+
8
+ ```vdt
9
+ import {Skeleton} from 'kpc';
10
+
11
+ <div>
12
+ <Skeleton loading={this.get('showSkeleton')} rows={this.get('rows')} />
13
+ </div>
14
+ ```
15
+
16
+ ```ts
17
+ interface Props {
18
+ showSkeleton?: boolean
19
+ rows?: number
20
+ }
21
+
22
+ export default class extends Component<Props> {
23
+ static template = template;
24
+
25
+ static defaults() {
26
+ return {
27
+ showSkeleton: true,
28
+ rows: 4
29
+ };
30
+ }
31
+ }
32
+ ```
@@ -0,0 +1,24 @@
1
+ ---
2
+ title: 骨架屏
3
+ category: 组件
4
+ order: 2
5
+ sidebar: doc
6
+ ---
7
+
8
+ # 属性
9
+
10
+ ## Skeleton
11
+
12
+ | 属性 | 说明 | 类型 | 默认值 |
13
+ | --- | --- | --- | --- |
14
+ | loading | 是否显示骨架屏 | `boolean` | `false` |
15
+ | rows | 完整长度的行数 | `number` | `2` |
16
+ | animated | 是否显示动画 | `boolean` | `false` |
17
+ | avator | 是否显示为头像模式 | `boolean` | `false` |
18
+ | size | 骨架屏尺寸 | `"default"` &#124; `"small"` &#124; `"mini"` | `"default"` |
19
+
20
+ ## SkeletonItem
21
+
22
+ | 属性 | 说明 | 类型 | 默认值 |
23
+ | --- | --- | --- | --- |
24
+ | type | 骨架屏元素类型 | `"text"` &#124; `"avator"` &#124; `"image"` &#124; `"button"` &#124; `"input"` | `"text"` |
@@ -0,0 +1,2 @@
1
+ export * from './skeleton';
2
+ export * from './item';
@@ -0,0 +1,30 @@
1
+ import {Component, TypeDefs} from 'intact';
2
+ import template from './item.vdt';
3
+
4
+ type ItemType = 'text' | 'avator' | 'image' | 'button' | 'input';
5
+
6
+ export const ItemTypeMap: ItemType[] = ['text', 'avator', 'image', 'button', 'input'];
7
+
8
+ export interface SkeletonItemProps {
9
+ type?: ItemType,
10
+ }
11
+
12
+ export interface SkeletonItemEvents {}
13
+
14
+ export interface SkeletonItemBlocks {}
15
+
16
+ const typeDefs: Required<TypeDefs<SkeletonItemProps>> = {
17
+ type: ItemTypeMap
18
+ };
19
+
20
+ const defaults = (): Partial<SkeletonItemProps> => ({
21
+ type: 'text'
22
+ });
23
+
24
+ export class SkeletonItem extends Component<SkeletonItemProps, SkeletonItemEvents, SkeletonItemBlocks> {
25
+ static template = template;
26
+ static typeDefs = typeDefs;
27
+ static defaults = defaults;
28
+ }
29
+
30
+
@@ -0,0 +1,28 @@
1
+ import {makeItemStyles} from './style';
2
+ import {getRestProps} from '../utils';
3
+
4
+ const {type} = this.get();
5
+
6
+ const classNameObj = {
7
+ 'k-skeleton-item': true,
8
+ [makeItemStyles()]: true
9
+ };
10
+
11
+ const ItemklsObj = {
12
+ 'k-skeleton-item-box': true,
13
+ [`skeleton-item-${type}`]: true
14
+ };
15
+
16
+ const skeletonItem = <div class={ItemklsObj} {...getRestProps(this)}>
17
+ <svg
18
+ v-if={type === 'image'}
19
+ viewBox="0 0 1024 1024"
20
+ xmlns="http://www.w3.org/2000/svg"
21
+ >
22
+ <path
23
+ d="M64 896V128h896v768H64z m64-128l192-192 116.352 116.352L640 448l256 307.2V192H128v576z m224-480a96 96 0 1 1-0.064 192.064A96 96 0 0 1 352 288z"
24
+ />
25
+ </svg>
26
+ </div>;
27
+
28
+ <div class={classNameObj}>{skeletonItem}</div>
@@ -0,0 +1,33 @@
1
+ import {Component, TypeDefs} from 'intact';
2
+ import template from './skeleton.vdt';
3
+
4
+ export interface SkeletonProps {
5
+ loading: boolean
6
+ animated?: boolean
7
+ rows?: number
8
+ avator?: boolean
9
+ size?: string
10
+ }
11
+
12
+ export interface SkeletonEvents {}
13
+
14
+ export interface SkeletonBlocks {}
15
+
16
+ const typeDefs: Required<TypeDefs<SkeletonProps>> = {
17
+ loading: Boolean,
18
+ animated: Boolean,
19
+ rows: Number,
20
+ avator: Boolean,
21
+ size: String
22
+ };
23
+
24
+ const defaults = (): Partial<SkeletonProps> => ({
25
+ rows: 2,
26
+ size: 'large'
27
+ });
28
+
29
+ export class Skeleton extends Component<SkeletonProps, SkeletonEvents, SkeletonBlocks> {
30
+ static template = template;
31
+ static typeDefs = typeDefs;
32
+ static defaults = defaults;
33
+ }
@@ -0,0 +1,32 @@
1
+ import {SkeletonItem} from './item';
2
+ import {makeStyles, kls} from './style';
3
+
4
+ const {rows, avator, animated, children, loading, size} = this.get();
5
+
6
+ const targetRows = typeof rows !== 'number'
7
+ ? 3
8
+ : rows < 1
9
+ ? 1
10
+ : parseInt(rows);
11
+
12
+ const skeletonList = Array(targetRows + 2).fill();
13
+ const skeletonItems = <SkeletonItem v-for={skeletonList}></SkeletonItem>;
14
+
15
+ const classNameObj = {
16
+ 'k-skeleton': true,
17
+ 'k-animated': animated,
18
+ [makeStyles(size)]: true
19
+ };
20
+
21
+ <div class={classNameObj} v-if={loading}>
22
+ <template v-if={children}>
23
+ <div>{children}</div>
24
+ </template>
25
+ <template v-else>
26
+ <div v-if={avator} class={kls('avator-box')}>
27
+ <SkeletonItem type="avator"></SkeletonItem>
28
+ <div class="k-skeleton-items">{skeletonItems}</div>
29
+ </div>
30
+ <div class="k-skeleton-items" v-else>{skeletonItems}</div>
31
+ </template>
32
+ </div>
@@ -0,0 +1,105 @@
1
+ import {deepDefaults} from '../../styles/utils';
2
+ import { theme, setDefault } from '../../styles/theme';
3
+ import {css, keyframes} from '@emotion/css';
4
+ import '../../styles/global';
5
+
6
+ export const kls = (className: string) => `k-skeleton-${className}`;
7
+
8
+ type ItemSize = 'default' | 'large' | 'small' | 'mini';
9
+
10
+ const defaults = {
11
+ item: {
12
+ bgColor: '#dcdde0'
13
+ }
14
+ };
15
+
16
+ let skeleton: typeof defaults;
17
+ setDefault(() => {
18
+ skeleton = deepDefaults(theme, {skeleton: defaults}).skeleton;
19
+ });
20
+
21
+ export function makeStyles(size: ItemSize) {
22
+ return css`
23
+ &.k-animated {
24
+ .${kls('item')} {
25
+ & > .k-skeleton-item-box {
26
+ background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%);
27
+ background-size: 400% 100%;
28
+ animation: ${skeletonLoading} 1.4s ease infinite;
29
+ }
30
+ }
31
+ }
32
+ .k-skeleton-items {
33
+ .${kls('item')}:first-child {
34
+ .skeleton-item-text {
35
+ width: 33%;
36
+ }
37
+ }
38
+ .${kls('item')}:last-child {
39
+ .skeleton-item-text {
40
+ width: 61%;
41
+ }
42
+ }
43
+ }
44
+ .${kls('avator-box')} {
45
+ display: flex;
46
+ & > div:last-child {
47
+ flex-grow: 1;
48
+ padding-left: 20px;
49
+ }
50
+ }
51
+ .skeleton-item-button,
52
+ .skeleton-item-input {
53
+ height: ${theme[size].height}
54
+ }
55
+ `;
56
+ }
57
+
58
+ const skeletonLoading = keyframes`
59
+ 0% {
60
+ background-position: 100% 50%;
61
+ }
62
+ to {
63
+ background-position: 0 50%;
64
+ }
65
+ `;
66
+
67
+ export function makeItemStyles() {
68
+ const skeletonItem = skeleton.item;
69
+ return css`
70
+ & > div {
71
+ background: ${skeletonItem.bgColor}
72
+ }
73
+ .skeleton-item-text {
74
+ width: 100%;
75
+ height: 16px;
76
+ border-radius: 4px;
77
+ margin-top: 16px;
78
+ }
79
+ .skeleton-item-avator {
80
+ width: 40px;
81
+ height: 40px;
82
+ border-radius: 50%;
83
+ }
84
+ .skeleton-item-image {
85
+ display: flex;
86
+ justify-content: center;
87
+ align-items: center;
88
+ width: 200px;
89
+ height: 200px;
90
+ & > svg {
91
+ width: 48px;
92
+ height: 48px;
93
+ fill: ${skeletonItem.bgColor};
94
+ }
95
+ }
96
+ .skeleton-item-button {
97
+ width: 64px;
98
+ background: ${skeletonItem.bgColor};
99
+ }
100
+ .skeleton-item-input {
101
+ width: 160px;
102
+ background: ${skeletonItem.bgColor};
103
+ }
104
+ `;
105
+ }
@@ -39,6 +39,10 @@ export class TableCell extends Component<TableCellProps> {
39
39
  isSame = false;
40
40
  break;
41
41
  }
42
+ if (key === 'props' && nextProps.props.$blocks) {
43
+ isSame = false;
44
+ break;
45
+ }
42
46
  }
43
47
 
44
48
  if (!isSame) {
@@ -7,10 +7,16 @@ order: 0
7
7
  组件定义表格结构,详见”定义表格结构“说明
8
8
 
9
9
  ```vdt
10
- import {Table, TableColumn} from 'kpc';
10
+ import {Table, TableColumn, Select, Option} from 'kpc';
11
11
 
12
12
  <Table data={this.get('data')} resizable>
13
- <TableColumn key="a" title="Title 1" />
13
+ <TableColumn key="a" title="Title 1">
14
+ <b:template args="[data]">
15
+ <Select>
16
+ <Option value="a">test</Option>
17
+ </Select>
18
+ </b:template>
19
+ </TableColumn>
14
20
  <TableColumn key="b" title="Title 2" />
15
21
  </Table>
16
22
  ```
@@ -521,58 +521,42 @@ describe('Table', () => {
521
521
  expect(instance.get('checkedKeys')).to.eql([3, 4, 1, 2]);
522
522
  });
523
523
 
524
- // it('should render dropdown in header of fixed table correctly in Vue', async () => {
525
- // const Demo = {
526
- // template: `
527
- // <Table :data="data" style="width: 800px;">
528
- // <TableColumn key="a" width="300" fixed="left" />
529
- // <TableColumn key="b" width="300">
530
- // <template slot="title">
531
- // <Dropdown trigger="click" :container="dom => dom.parentElement.closest('.k-table')">
532
- // <Icon class="ion-ios-arrow-down" style="margin-left: 100px;" />
533
- // <DropdownMenu>
534
- // <DropdownItem>1</DropdownItem>
535
- // <DropdownItem>2</DropdownItem>
536
- // <DropdownItem>3</DropdownItem>
537
- // </DropdownMenu>
538
- // </Dropdown>
539
- // </template>
540
- // </TableColumn>
541
- // <TableColumn key="c" width="300" fixed="right" />
542
- // </Table>
543
- // `,
544
- // components: {
545
- // Table,
546
- // TableColumn,
547
- // Dropdown,
548
- // DropdownMenu,
549
- // DropdownItem,
550
- // Icon,
551
- // },
552
- // data() {
553
- // return {
554
- // data: [
555
- // {a: 1, b: 1, c: 1},
556
- // {a: 2, b: 2, c: 2},
557
- // ],
558
- // };
559
- // }
560
- // };
561
- // const container = document.createElement('div');
562
- // document.body.appendChild(container);
563
- // const app = new Vue({
564
- // render: h => h('Demo'),
565
- // components: {
566
- // Demo
567
- // }
568
- // }).$mount(container);
569
-
570
- // // should show the first dropdown menu
571
- // app.$el.querySelector('.k-icon').click();
572
- // const dropdownMenu = app.$el.querySelectorAll('.k-dropdown-menu')[0];
573
- // expect(dropdownMenu.style.display).to.eql('');
574
-
575
- // app.$destroy();
576
- // document.body.removeChild(app.$el);
577
- // });
524
+ it('should update children in TableCell', async() => {
525
+ const update = sinon.spy();
526
+ class Test extends Component {
527
+ static template = `<div>test</div>`;
528
+ beforeUpdate() {
529
+ update();
530
+ }
531
+ }
532
+ class Demo extends Component<{data: any[], checkedKeys: number[]}> {
533
+ static template = `
534
+ const {Table, TableColumn, Test} = this;
535
+ <Table data={this.get('data')} ref="table">
536
+ <TableColumn key="a">
537
+ <b:template>
538
+ <Test />
539
+ </b:template>
540
+ </TableColumn>
541
+ </Table>
542
+ `;
543
+ static defaults() {
544
+ return {
545
+ data: [
546
+ {a: 1},
547
+ {a: 2},
548
+ ],
549
+ };
550
+ }
551
+ private Table = Table;
552
+ private TableColumn = TableColumn;
553
+ private Test = Test;
554
+ }
555
+
556
+ const [instance, element] = mount(Demo);
557
+ element.querySelector<HTMLElement>('tbody tr')!.click();
558
+
559
+ await wait();
560
+ expect(update.callCount).to.eql(1);
561
+ });
578
562
  });
@@ -202,7 +202,7 @@ export function useChecked(
202
202
  instance.on('$change:data', updateAllCheckedStatus);
203
203
 
204
204
  instance.on('clickRow', (data: any, index: number, key: TableRowKey) => {
205
- if (instance.get('rowCheckable')) {
205
+ if (instance.get('rowCheckable') && instance.get('checkType') !== 'none') {
206
206
  toggleChecked(key, index);
207
207
  }
208
208
  });
@@ -47,11 +47,10 @@ export function useFilter(getNodes: () => Node<Key>[], getExpandedKeys: () => Se
47
47
  }
48
48
 
49
49
  function updateFilterUpward(node: Node<Key> | null) {
50
- if (!node) return;
50
+ if (!node || node.filter) return;
51
51
 
52
52
  // should expand the node
53
53
  getExpandedKeys().add(node.key);
54
- if (node.filter) return;
55
54
 
56
55
  node.filter = true;
57
56
  updateFilterUpward(node.parent);
@@ -163,9 +163,11 @@ export var Dropdown = /*#__PURE__*/function (_Component) {
163
163
 
164
164
  _proto.normalizeTriggerProps = function normalizeTriggerProps(props) {
165
165
  // if use kpc in react or vue, normalize props by Wrapper.props.vnode;
166
- if (this.$isReact || this.$isVueNext) {
167
- var vnode = props.vnode;
168
- if (!vnode) return props;
166
+ var vnode = props.vnode;
167
+ if (!vnode) return props; // maybe we render the intact component in react slot property, in this case
168
+ // the $isReact is false. so use the vnode $$typeof field as gauge
169
+
170
+ if (vnode.$$typeof || this.$isVueNext) {
169
171
  var _props = vnode.props;
170
172
  if (!_props) return props;
171
173
  return {
@@ -179,12 +181,10 @@ export var Dropdown = /*#__PURE__*/function (_Component) {
179
181
 
180
182
  };
181
183
  } else if (this.$isVue) {
182
- var _vnode = props.vnode;
183
- if (!_vnode) return props;
184
- var data = _vnode.data;
184
+ var data = vnode.data;
185
185
  var on = data && data.on || EMPTY_OBJ;
186
186
  var ret = {
187
- vnode: _vnode
187
+ vnode: vnode
188
188
  };
189
189
  ['click', 'mouseenter', 'mouseleave', 'contextmenu'].forEach(function (event) {
190
190
  var method = on[event];
@@ -81,7 +81,7 @@ export var Portal = /*#__PURE__*/function (_Component) {
81
81
  }
82
82
  } else {
83
83
  mountedQueue.push(function () {
84
- parentDom = _this2.$lastInput.dom.parentElement;
84
+ var parentDom = _this2.$lastInput.dom.parentElement;
85
85
 
86
86
  _this2.initContainer(nextProps.container, parentDom, anchor);
87
87
 
@@ -0,0 +1,2 @@
1
+ export * from './skeleton';
2
+ export * from './item';
@@ -0,0 +1,2 @@
1
+ export * from './skeleton';
2
+ export * from './item';