@king-design/intact 3.4.3-beta.2 → 3.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/components/button/demos/disabled.md +14 -3
  2. package/components/button/index.vdt +1 -1
  3. package/components/button/styles.ts +14 -1
  4. package/components/dialog/styles.ts +3 -3
  5. package/components/dropdown/item.ts +7 -2
  6. package/components/editable/demos/textarea.md +53 -0
  7. package/components/editable/index.md +7 -1
  8. package/components/editable/index.spec.ts +27 -0
  9. package/components/editable/index.ts +4 -1
  10. package/components/editable/index.vdt +13 -4
  11. package/components/editable/styles.ts +1 -1
  12. package/components/ellipsis/demos/hoverable.md +23 -0
  13. package/components/ellipsis/index.ts +4 -1
  14. package/components/ellipsis/index.vdt +3 -1
  15. package/components/input/demos/size.md +9 -1
  16. package/components/input/styles.ts +12 -2
  17. package/components/menu/styles.ts +0 -3
  18. package/components/select/demos/immutable.md +7 -6
  19. package/components/select/index.spec.ts +31 -0
  20. package/components/select/useImmutable.ts +1 -1
  21. package/components/switch/styles.ts +5 -0
  22. package/components/table/cell.ts +1 -0
  23. package/components/table/cell.vdt +9 -2
  24. package/components/table/column.ts +2 -0
  25. package/components/table/demos/asyncTree.md +70 -0
  26. package/components/table/demos/ellipsis.md +29 -0
  27. package/components/table/demos/fixFooter.md +52 -0
  28. package/components/table/demos/footer.md +38 -0
  29. package/components/table/index.md +4 -0
  30. package/components/table/row.ts +26 -17
  31. package/components/table/row.vdt +2 -2
  32. package/components/table/styles.ts +24 -3
  33. package/components/table/table.ts +5 -0
  34. package/components/table/table.vdt +15 -2
  35. package/components/table/useTree.ts +9 -2
  36. package/components/tooltip/demos/content.md +17 -2
  37. package/components/tooltip/index.spec.ts +21 -2
  38. package/components/tooltip/tooltip.ts +2 -0
  39. package/components/treeSelect/demos/basic.md +1 -0
  40. package/components/treeSelect/index.vdt +1 -0
  41. package/es/components/button/index.vdt.js +1 -1
  42. package/es/components/button/styles.js +3 -3
  43. package/es/components/diagram/shapes/callout.d.ts +1 -1
  44. package/es/components/diagram/shapes/circle.d.ts +1 -1
  45. package/es/components/diagram/shapes/document.d.ts +1 -1
  46. package/es/components/diagram/shapes/ellipse.d.ts +1 -1
  47. package/es/components/diagram/shapes/hexagon.d.ts +1 -1
  48. package/es/components/diagram/shapes/image.d.ts +1 -1
  49. package/es/components/diagram/shapes/parallelogram.d.ts +1 -1
  50. package/es/components/diagram/shapes/rectangle.d.ts +1 -1
  51. package/es/components/diagram/shapes/square.d.ts +1 -1
  52. package/es/components/diagram/shapes/text.d.ts +1 -1
  53. package/es/components/dialog/styles.js +3 -3
  54. package/es/components/dropdown/item.js +5 -2
  55. package/es/components/editable/index.d.ts +2 -0
  56. package/es/components/editable/index.js +4 -2
  57. package/es/components/editable/index.spec.js +39 -0
  58. package/es/components/editable/index.vdt.js +17 -6
  59. package/es/components/editable/styles.d.ts +1 -0
  60. package/es/components/editable/styles.js +3 -0
  61. package/es/components/ellipsis/index.d.ts +1 -0
  62. package/es/components/ellipsis/index.js +4 -2
  63. package/es/components/ellipsis/index.vdt.js +3 -1
  64. package/es/components/input/styles.js +11 -1
  65. package/es/components/menu/styles.js +1 -1
  66. package/es/components/select/index.spec.js +47 -0
  67. package/es/components/switch/styles.js +1 -1
  68. package/es/components/table/cell.d.ts +1 -0
  69. package/es/components/table/cell.vdt.js +14 -3
  70. package/es/components/table/column.d.ts +1 -0
  71. package/es/components/table/column.js +1 -0
  72. package/es/components/table/row.d.ts +2 -1
  73. package/es/components/table/row.js +24 -15
  74. package/es/components/table/row.vdt.js +3 -1
  75. package/es/components/table/styles.js +2 -2
  76. package/es/components/table/table.d.ts +3 -0
  77. package/es/components/table/table.js +3 -1
  78. package/es/components/table/table.vdt.js +19 -3
  79. package/es/components/table/useTree.d.ts +1 -1
  80. package/es/components/table/useTree.js +30 -2
  81. package/es/components/tooltip/index.spec.js +99 -67
  82. package/es/components/tooltip/tooltip.d.ts +1 -0
  83. package/es/components/tooltip/tooltip.js +9 -1
  84. package/es/components/treeSelect/index.vdt.js +1 -0
  85. package/es/index.d.ts +2 -2
  86. package/es/index.js +2 -2
  87. package/es/site/data/components/button/demos/disabled/index.d.ts +1 -0
  88. package/es/site/data/components/button/demos/disabled/index.js +1 -0
  89. package/es/site/data/components/button/demos/disabled/react.d.ts +1 -0
  90. package/es/site/data/components/button/demos/disabled/react.js +27 -8
  91. package/es/site/data/components/editable/demos/textarea/index.d.ts +16 -0
  92. package/es/site/data/components/editable/demos/textarea/index.js +21 -0
  93. package/es/site/data/components/editable/demos/textarea/react.d.ts +17 -0
  94. package/es/site/data/components/editable/demos/textarea/react.js +72 -0
  95. package/es/site/data/components/ellipsis/demos/hoverable/index.d.ts +6 -0
  96. package/es/site/data/components/ellipsis/demos/hoverable/index.js +14 -0
  97. package/es/site/data/components/ellipsis/demos/hoverable/react.d.ts +5 -0
  98. package/es/site/data/components/ellipsis/demos/hoverable/react.js +21 -0
  99. package/es/site/data/components/input/demos/size/react.js +20 -0
  100. package/es/site/data/components/select/demos/immutable/index.d.ts +2 -2
  101. package/es/site/data/components/select/demos/immutable/index.js +1 -1
  102. package/es/site/data/components/select/demos/immutable/react.d.ts +1 -1
  103. package/es/site/data/components/select/demos/immutable/react.js +5 -5
  104. package/es/site/data/components/table/demos/asyncTree/index.d.ts +20 -0
  105. package/es/site/data/components/table/demos/asyncTree/index.js +53 -0
  106. package/es/site/data/components/table/demos/asyncTree/react.d.ts +20 -0
  107. package/es/site/data/components/table/demos/asyncTree/react.js +76 -0
  108. package/es/site/data/components/table/demos/ellipsis/index.d.ts +11 -0
  109. package/es/site/data/components/table/demos/ellipsis/index.js +24 -0
  110. package/es/site/data/components/table/demos/ellipsis/react.d.ts +10 -0
  111. package/es/site/data/components/table/demos/ellipsis/react.js +43 -0
  112. package/es/site/data/components/table/demos/fixFooter/index.d.ts +6 -0
  113. package/es/site/data/components/table/demos/fixFooter/index.js +14 -0
  114. package/es/site/data/components/table/demos/fixFooter/react.d.ts +5 -0
  115. package/es/site/data/components/table/demos/fixFooter/react.js +69 -0
  116. package/es/site/data/components/table/demos/footer/index.d.ts +12 -0
  117. package/es/site/data/components/table/demos/footer/index.js +25 -0
  118. package/es/site/data/components/table/demos/footer/react.d.ts +11 -0
  119. package/es/site/data/components/table/demos/footer/react.js +46 -0
  120. package/es/site/data/components/tooltip/demos/content/index.d.ts +2 -0
  121. package/es/site/data/components/tooltip/demos/content/index.js +3 -1
  122. package/es/site/data/components/tooltip/demos/content/react.d.ts +2 -0
  123. package/es/site/data/components/tooltip/demos/content/react.js +21 -3
  124. package/es/site/data/components/treeSelect/demos/basic/react.js +2 -1
  125. package/index.ts +2 -2
  126. package/package.json +2 -2
@@ -10,9 +10,20 @@ import {Button, Icon} from 'kpc';
10
10
 
11
11
  <div>
12
12
  <Button disabled>disabled</Button>
13
- <Button disabled type="none">disabled text</Button>
14
13
  <Button disabled icon circle><Icon class="k-icon-search" /></Button>
15
- <Button disabled type="link">link</Button>
16
- <Button disabled type="flat">flat</Button>
14
+ <Button type="primary" disabled>primary</Button>
15
+ <Button type="secondary" disabled>secondary</Button>
16
+ <Button type="warning" disabled>warning</Button>
17
+ <Button type="danger" disabled>danger</Button>
18
+ <Button type="success" disabled>success</Button>
19
+ <Button type="none" disabled>none</Button>
20
+ <Button type="link" disabled>link</Button>
21
+ <Button type="flat" disabled>flat</Button>
22
+ <Button color="red" disabled>custom</Button>
17
23
  </div>
18
24
  ```
25
+
26
+ ```styl
27
+ .k-btn
28
+ margin 0 20px 20px 0
29
+ ```
@@ -49,9 +49,9 @@ const classNameObj = {
49
49
  [cls('loading')]: loading,
50
50
  [cls('fluid')]: fluid,
51
51
  [cls('active')]: checked,
52
+ [cls('custom')]: color,
52
53
  [cls('disabled')]: disabled || loading,
53
54
  [cls('ghost')]: ghost,
54
- [cls('custom')]: color,
55
55
  [makeButtonStyles(k, iconSide, color)]: true,
56
56
  };
57
57
 
@@ -31,7 +31,7 @@ const sizes = ['large', 'small', 'mini'] as const;
31
31
  const btnStyles = {
32
32
  get color() { return theme.color.text },
33
33
  bgColor: '#fff',
34
- lineHeight: '1.15',
34
+ lineHeight: '1',
35
35
  get padding() { return `0 16px` },
36
36
  get borderColor() { return theme.color.border },
37
37
  get borderRadius() { return theme.borderRadius },
@@ -230,6 +230,13 @@ export const makeButtonStyles = cache(function makeButtonStyles(k: string, iconS
230
230
  background: ${palette(typeStyles.bgColor, 1)};
231
231
  border-color: ${palette(typeStyles.borderColor, 1)};
232
232
  }
233
+ &.${k}-disabled {
234
+ &, &:hover {
235
+ background: ${palette(typeStyles.bgColor, -2)};
236
+ color: ${palette(typeStyles.color, -2)};
237
+ border-color: ${palette(typeStyles.borderColor, -2)};
238
+ }
239
+ }
233
240
  }
234
241
  `;
235
242
  })}
@@ -245,6 +252,9 @@ export const makeButtonStyles = cache(function makeButtonStyles(k: string, iconS
245
252
  &:active {
246
253
  background: ${secondary.activeBgColor};
247
254
  }
255
+ &.${k}-disabled {
256
+ border: none;
257
+ }
248
258
  }
249
259
 
250
260
 
@@ -260,6 +270,9 @@ export const makeButtonStyles = cache(function makeButtonStyles(k: string, iconS
260
270
  &:active {
261
271
  background: ${palette(color, -3)};
262
272
  }
273
+ &.${k}-disabled {
274
+ border: none;
275
+ }
263
276
  }
264
277
  `}
265
278
 
@@ -52,12 +52,12 @@ const defaults = {
52
52
  padding: `0 24px`,
53
53
  bodyMarginTop: `-25px`,
54
54
  tipIconMarginBottom: '10px',
55
- tipIconFontSize: '37px',
56
- tipIconLineHeight: '37px',
55
+ tipIconFontSize: '24px',
56
+ tipIconLineHeight: '24px',
57
57
 
58
58
  // with title
59
59
  titleFontWeight: '500',
60
- titleTipIconFontSize: '37px',
60
+ titleTipIconFontSize: '24px',
61
61
  titleFontSize: '14px',
62
62
  wrapperPaddingLeft: '8px',
63
63
  titleBodyMarginTop: '-36px',
@@ -7,6 +7,7 @@ import {DropdownMenu, DROPDOWN_MENU} from './menu';
7
7
  import {IgnoreClickEvent} from '../../hooks/useDocumentClick';
8
8
  import { Dropdown as ExportDropdown, DropdownMenu as ExportDropdownMenu } from '.';
9
9
  import { useConfigContext } from '../config';
10
+ import type { Tooltip } from '../tooltip/tooltip';
10
11
 
11
12
  export interface DropdownItemProps {
12
13
  disabled?: boolean
@@ -61,8 +62,12 @@ export class DropdownItem extends Component<DropdownItemProps, DropdownItemEvent
61
62
  if (this.get('hideOnSelect')) {
62
63
  // hide all dropdowns
63
64
  let dropdown = this.dropdown;
64
- do { dropdown!.hide(true); }
65
- while (dropdown = dropdown!.dropdown);
65
+ do {
66
+ if (!(dropdown as Tooltip).$isTooltip) {
67
+ dropdown!.hide(true);
68
+ }
69
+ dropdown = dropdown!.dropdown;
70
+ } while (dropdown);
66
71
  }
67
72
  }
68
73
 
@@ -0,0 +1,53 @@
1
+ ---
2
+ title: 多行使用
3
+ order: 2
4
+ ---
5
+
6
+ 当`rows`属性默认为`1`,此时为单行输入,设置成`'auto'`时,组件的高度将会自适应。
7
+ 你也可以通过对象`{min, max}`来设置文本框最小和最大的自动调整行数。
8
+
9
+ ```vdt
10
+ import {Editable} from 'kpc';
11
+
12
+ <div>
13
+ <Editable v-model="text" ref="__test" rows="auto">
14
+ <i class="ion-ios-location"></i>
15
+ <a href="">{this.get('text')}</a>
16
+ </Editable>
17
+ <br />
18
+ <Editable v-model="text2" rows={5}>
19
+ <i class="ion-ios-location"></i>
20
+ <a href="">{this.get('text2')}</a>
21
+ </Editable>
22
+ <br />
23
+ <Editable v-model="text3" rows={{min: 3, max: 4}}>
24
+ <i class="ion-ios-location"></i>
25
+ <a href="">{this.get('text3')}</a>
26
+ </Editable>
27
+ </div>
28
+ ```
29
+
30
+ ```styl
31
+ .ion-ios-location
32
+ margin-right 10px
33
+ ```
34
+
35
+ ```ts
36
+ interface Props {
37
+ text?: string
38
+ text2?: string
39
+ text3?: string
40
+ }
41
+
42
+ export default class extends Component<Props> {
43
+ static template = template;
44
+
45
+ static defaults() {
46
+ return {
47
+ text: 'editable text auto',
48
+ text2: 'editable text for 5 rows',
49
+ text3: 'editable text for many rows',
50
+ };
51
+ }
52
+ }
53
+ ```
@@ -17,7 +17,13 @@ sidebar: doc
17
17
  | tip | 编辑按钮提示文案 | `string` | `"编辑"` |
18
18
  | trim | 是否去掉前后空白字符 | `boolean` | `true` |
19
19
  | invalid | 是否为验证失败状态 | `boolean` | `false` |
20
-
20
+ | rows | 是否自动折行,以及行数控制 | `string`&#124;`number`&#124;`auto`&#124; `AutoRows` | `1` |
21
+ ```ts
22
+ type AutoRows = {
23
+ min?: number
24
+ max?: number
25
+ }
26
+ ```
21
27
  # 事件
22
28
 
23
29
  | 事件名 | 说明 | 参数 |
@@ -1,5 +1,6 @@
1
1
  import BasicDemo from '~/components/editable/demos/basic';
2
2
  import ValidateDemo from '~/components/editable/demos/validate';
3
+ import TextAreaDemo from '~/components/editable/demos/textarea';
3
4
  import {mount, unmount, dispatchEvent, wait} from '../../test/utils';
4
5
  import {Editable} from './';
5
6
  import {Component, findDomFromVNode} from 'intact';
@@ -120,4 +121,30 @@ describe('Editable', () => {
120
121
  input = element.querySelector("input") as HTMLInputElement;
121
122
  expect(input.value).to.eql('aa');
122
123
  });
124
+
125
+ it('should auto use input or textarea', async () => {
126
+ const [instance, element] = mount(TextAreaDemo);
127
+ const editable = instance.refs.__test as Editable;
128
+ // @ts-ignore
129
+ editable.edit();
130
+ await wait();
131
+ expect(element.innerHTML).to.matchSnapshot();
132
+
133
+ let input = element.querySelector('input') as HTMLInputElement;
134
+ let textarea = element.querySelector('textarea') as HTMLTextAreaElement;
135
+ expect(input).to.be.null;
136
+
137
+ textarea.value = 'test';
138
+ dispatchEvent(textarea, 'blur');
139
+ await wait();
140
+ expect(instance.get('text')).to.eql('test');
141
+
142
+ editable.set('rows', 1);
143
+ await wait();
144
+ // @ts-ignore
145
+ editable.edit();
146
+ await wait();
147
+ let textarea2 = element.querySelector('textarea') as HTMLTextAreaElement;
148
+ expect(textarea2).to.be.null;
149
+ });
123
150
  });
@@ -2,7 +2,7 @@ import {Component, TypeDefs, createRef, nextTick, Children} from 'intact';
2
2
  import template from './index.vdt';
3
3
  import {_$} from '../../i18n';
4
4
  import {bind} from '../utils';
5
- import type {Input} from '../input';
5
+ import type {Input, AutoRows} from '../input';
6
6
  import type {Events} from '../types';
7
7
  import { useConfigContext } from '../config';
8
8
 
@@ -17,6 +17,7 @@ export interface EditableProps<V extends Value = Value> {
17
17
  tip?: Value,
18
18
  trim?: boolean,
19
19
  invalid?: boolean,
20
+ rows?: string | number | 'auto' | AutoRows
20
21
  }
21
22
 
22
23
  export interface EditableEvents<V extends Value = Value> {
@@ -33,12 +34,14 @@ const typeDefs: Required<TypeDefs<EditableProps>> = {
33
34
  tip: [String, Number],
34
35
  trim: Boolean,
35
36
  invalid: Boolean,
37
+ rows: [String, Number, 'auto', Object],
36
38
  };
37
39
 
38
40
  const defaults = (): Partial<EditableProps> => ({
39
41
  required: true,
40
42
  tip: _$('编辑'),
41
43
  trim: true,
44
+ rows: 1
42
45
  });
43
46
 
44
47
  const events: Events<EditableEvents> = {
@@ -3,11 +3,12 @@ import {Input} from '../input';
3
3
  import {Icon} from '../icon';
4
4
  import {makeStyles} from './styles';
5
5
  import { Tooltip } from '../tooltip';
6
+ import {isNullOrUndefined} from 'intact-shared';
6
7
 
7
8
  const {
8
9
  children, className, editing,
9
10
  value, validate, disabled,
10
- tip, invalid
11
+ tip, invalid, rows
11
12
  } = this.get();
12
13
  const { k } = this.config;
13
14
 
@@ -19,19 +20,27 @@ const classNameObj = {
19
20
  [className]: className,
20
21
  [makeStyles(k)]: true
21
22
  };
23
+ const isTextArea = !isNullOrUndefined(rows) && rows != '1';
24
+
25
+ const inputProps = {
26
+ autoWidth: !isTextArea,
27
+ fluid: isTextArea,
28
+ ...(isTextArea && { type: 'textarea' }),
29
+ rows,
30
+ ...((!isTextArea || rows === 'auto') && {size: 'mini'})
31
+ };
22
32
 
23
33
  <div {...getRestProps(this)} class={classNameObj}>
24
34
  <div class="c-ellipsis">
25
35
  <template v-if={!editing}>{children}</template>
26
36
  <Input v-else
27
- size="mini"
28
- defaultValue={value}
37
+ defaultValue={value}
29
38
  ev-blur={this.onBlur}
30
39
  ev-keydown={this.onKeydown}
31
40
  ref={this.inputRef}
32
41
  frozenOnInput
33
42
  ev-$mounted={this.select}
34
- autoWidth
43
+ {...inputProps}
35
44
  />
36
45
  </div>
37
46
  <Tooltip v-if={!disabled && !editing} content={tip}>
@@ -6,7 +6,7 @@ import { cache } from '../utils';
6
6
 
7
7
  const defaults = {
8
8
  iconGap: '0 0 0 8px',
9
-
9
+ get smallPadding() { return theme.small.padding },
10
10
  // invalid
11
11
  invalid: {
12
12
  get border() { return `1px solid ${theme.color.danger}`},
@@ -0,0 +1,23 @@
1
+ ---
2
+ title: hoverable
3
+ order: 3
4
+ ---
5
+
6
+ 鼠标离开触发器,弹层就会消失,如果我们需要鼠标能离开触发器并悬浮在弹层上,需要添加`hoverable`属性
7
+
8
+ ```vdt
9
+ import {Ellipsis} from 'kpc';
10
+
11
+ <div>
12
+ <Ellipsis style={{width: '50px'}} hoverable>hoverable</Ellipsis>
13
+ </div>
14
+ ```
15
+
16
+ ```styl
17
+ .k-split
18
+ border 1px solid #ccc
19
+ height 200px
20
+ margin-bottom 20px
21
+ .panel
22
+ margin 10px
23
+ ```
@@ -10,6 +10,7 @@ export interface EllipsisProps {
10
10
  disabled?: boolean,
11
11
  position?: Position | 'left' | 'bottom' | 'right' | 'top',
12
12
  theme?: 'light' | 'dark',
13
+ hoverable?: boolean
13
14
  }
14
15
 
15
16
  const typeDefs: Required<TypeDefs<EllipsisProps>> = {
@@ -17,11 +18,13 @@ const typeDefs: Required<TypeDefs<EllipsisProps>> = {
17
18
  disabled: Boolean,
18
19
  position: [Object, 'left', 'bottom', 'right', 'top'],
19
20
  theme: ['light', 'dark'],
21
+ hoverable: Boolean
20
22
  };
21
23
 
22
24
  const defaults = (): Partial<EllipsisProps> => ({
23
25
  disabled: false,
24
- theme: 'light'
26
+ theme: 'light',
27
+ hoverable: false
25
28
  });
26
29
 
27
30
  export class Ellipsis extends Component<EllipsisProps> {
@@ -4,7 +4,8 @@ import {getRestProps, addStyle} from '../utils';
4
4
 
5
5
  const {
6
6
  children, className, maxLines,
7
- disabled, position, theme, style
7
+ disabled, position, theme, style,
8
+ hoverable
8
9
  } = this.get();
9
10
  const { k } = this.config;
10
11
 
@@ -30,6 +31,7 @@ const wrapper = <div class={{
30
31
  position={position}
31
32
  theme={theme}
32
33
  class={className}
34
+ hoverable={hoverable}
33
35
  >
34
36
  {wrapper}
35
37
  <b:content>{children}</b:content>
@@ -3,7 +3,7 @@ title: 尺寸
3
3
  order: 2
4
4
  ---
5
5
 
6
- 添加`size`属性,定义如下尺寸:`large`, `default`,`small`,`mini`
6
+ 添加`size`属性,定义如下尺寸:`large`, `default`,`small`,`mini`;`textarea`使用`size`时,仅支持`rows`为`auto`
7
7
 
8
8
  ```vdt
9
9
  import {Input, Button, Icon} from 'kpc';
@@ -30,6 +30,14 @@ import {Input, Button, Icon} from 'kpc';
30
30
  </Input>
31
31
  <br />
32
32
  <Input value="mini" size="mini" />
33
+ <br />
34
+ <Input value="textarea auto mini" size="mini" type="textarea" rows="auto"/>
35
+ <br />
36
+ <Input value="textarea auto small" size="small" type="textarea" rows="auto"/>
37
+ <br />
38
+ <Input value="textarea auto default" size="default" type="textarea" rows="auto"/>
39
+ <br />
40
+ <Input value="textarea auto large" size="large" type="textarea" rows="auto"/>
33
41
  </div>
34
42
  ```
35
43
 
@@ -4,7 +4,12 @@ import {deepDefaults, sizes, Sizes} from '../../styles/utils';
4
4
  import '../../styles/global';
5
5
  import {Input} from './';
6
6
  import { cache } from '../utils';
7
-
7
+ const textareaSize = {
8
+ mini: '0',
9
+ small: '1px',
10
+ default: '5px',
11
+ large: '7px'
12
+ }
8
13
  const defaults = deepDefaults(
9
14
  {
10
15
  get transition() { return theme.transition.middle },
@@ -55,14 +60,16 @@ const defaults = deepDefaults(
55
60
  },
56
61
  sizes.reduce((memo, size) => {
57
62
  const styles = theme[size];
63
+ const textareaStyles = textareaSize[size];
58
64
  memo[size] = {
59
65
  get fontSize() { return styles.fontSize },
60
66
  get height() { return styles.height },
61
67
  get paddingGap() { return styles.padding },
68
+ get padding() {return textareaStyles }
62
69
  }
63
70
 
64
71
  return memo;
65
- }, {} as Record<Sizes, {fontSize: string, height: string, paddingGap: string}>),
72
+ }, {} as Record<Sizes, {fontSize: string, height: string, paddingGap: string, padding: string}>),
66
73
  )
67
74
 
68
75
  let input: typeof defaults;
@@ -255,6 +262,9 @@ export const makeStyles = cache(function makeStyles(k: string) {
255
262
  .${k}-input-wrapper {
256
263
  height: ${styles.height};
257
264
  padding: 0 ${styles.paddingGap};
265
+ .${k}-textarea {
266
+ padding: ${styles.padding} ${styles.paddingGap};
267
+ }
258
268
  }
259
269
  `;
260
270
 
@@ -276,9 +276,6 @@ export const makeMenuStyles = cache(function makeMenuStyles(k: string) {
276
276
  .${k}-menu-header {
277
277
  padding: 0;
278
278
  }
279
- .${k}-menu-header {
280
- padding: 0;
281
- }
282
279
  .${k}-menu-body {
283
280
  overflow: hidden;
284
281
  padding: 0;
@@ -7,8 +7,9 @@ order: 14
7
7
 
8
8
  ```vdt
9
9
  import {Select, Option, OptionGroup} from 'kpc';
10
+
10
11
  <div>
11
- <Select v-model="day" multiple filterable clearable>
12
+ <Select v-model="days" multiple filterable clearable>
12
13
  <Option value="Monday">星期一</Option>
13
14
  <Option value="Tuesday" disabled>星期二</Option>
14
15
  <Option value="Wednesday">星期三</Option>
@@ -17,21 +18,21 @@ import {Select, Option, OptionGroup} from 'kpc';
17
18
  <Option value="Saturday">星期六</Option>
18
19
  <Option value="Sunday">星期天</Option>
19
20
  </Select>
20
- You selected: {JSON.stringify(this.get('day'))}
21
+ You selected: {JSON.stringify(this.get('days'))}
21
22
  </div>
22
23
  ```
23
24
 
24
25
  ```ts
25
26
  interface Props {
26
- day?: string[]
27
+ days?: string[]
27
28
  }
28
29
 
29
- export default class extends Component {
30
+ export default class extends Component<Props> {
30
31
  static template = template;
31
32
  static defaults() {
32
33
  return {
33
- day: ['Tuesday', 'Sunday', 'Wednesday'],
34
+ days: ['Tuesday', 'Sunday', 'Wednesday'],
34
35
  } as Props;
35
36
  }
36
37
  }
37
- ```
38
+ ```
@@ -9,6 +9,7 @@ import {Tooltip} from '../tooltip';
9
9
  import {Component} from 'intact';
10
10
  import {Select, Option} from '../select';
11
11
  import SearchableDemo from '~/components/select/demos/searchable';
12
+ import ImmutableDemo from '~/components/select/demos/immutable';
12
13
 
13
14
  describe('Select', () => {
14
15
  afterEach((done) => {
@@ -288,6 +289,36 @@ describe('Select', () => {
288
289
  expect(instance.get('days')).include('Monday')
289
290
  });
290
291
 
292
+ it('disabled option does not allow clearable and close', async () => {
293
+ const [instance, element] = mount(ImmutableDemo);
294
+
295
+ instance.set('days', ['Tuesday', 'Friday']);
296
+ await wait();
297
+ expect(element.outerHTML).to.matchSnapshot();
298
+ const [clear1] = element.querySelectorAll<HTMLElement>('.k-select-clear');
299
+ clear1.click();
300
+ await wait();
301
+ const [tag1] = element.querySelectorAll<HTMLElement>('.k-tag');
302
+ expect(tag1.className).not.contain("k-closable");
303
+ expect(instance.get('days')).to.eql(['Tuesday', 'Friday']);
304
+
305
+ instance.set('days', ['Monday', 'Tuesday']);
306
+ await wait();
307
+ const [clear2] = element.querySelectorAll<HTMLElement>('.k-select-clear');
308
+ clear2.click();
309
+ await wait();
310
+ expect(instance.get('days')).to.eql(['Tuesday']);
311
+
312
+ instance.set('days', ['Monday', 'Wednesday']);
313
+ await wait();
314
+ const [clear3] = element.querySelectorAll<HTMLElement>('.k-select-clear');
315
+ clear3.click();
316
+ await wait();
317
+ expect(instance.get('days')).to.eql([]);
318
+
319
+ // expect(clear).to.be.null;
320
+ });
321
+
291
322
  // it('should trigger change event correctly', async () => {
292
323
  // const spy = sinon.spy();
293
324
 
@@ -41,4 +41,4 @@ export function useImmutable() {
41
41
  instance.on('$receive:children', setImmutableValues);
42
42
 
43
43
  return { immutableValues, isClosable };
44
- }
44
+ }
@@ -185,6 +185,11 @@ export const makeStyles = cache(function makeStyles(k: string) {
185
185
  `
186
186
  })}
187
187
 
188
+ &.${k}-small .${k}-switch-on,
189
+ &.${k}-small .${k}-switch-off {
190
+ font-size: 10px;
191
+ }
192
+
188
193
  // checked
189
194
  &.${k}-checked {
190
195
  .${k}-switch-bar,
@@ -18,6 +18,7 @@ export interface TableCellProps {
18
18
  rowspan: number
19
19
  onClickArrow: (e: MouseEvent) => void
20
20
  hasChildren: boolean
21
+ loaded: boolean
21
22
  }
22
23
 
23
24
  export class TableCell extends Component<TableCellProps> {
@@ -3,11 +3,12 @@ import {get, noop} from 'intact-shared';
3
3
  import {Button} from '../button';
4
4
  import {Icon} from '../icon';
5
5
  import {getTextByChildren} from '../utils';
6
+ import {Ellipsis} from '../ellipsis';
6
7
 
7
8
  const {
8
9
  props, rowIndex, columnIndex, offset,
9
10
  data, checkType, indent, grid,
10
- colspan, rowspan, onClickArrow, hasChildren,
11
+ colspan, rowspan, onClickArrow, hasChildren, loaded
11
12
  } = this.get();
12
13
  const { k } = this.config;
13
14
 
@@ -20,6 +21,10 @@ if (blocks) {
20
21
  }
21
22
  }
22
23
 
24
+ if (props.ellipsis) {
25
+ children = <Ellipsis>{children}</Ellipsis>
26
+ }
27
+
23
28
  let {className, style} = getClassAndStyleForFixed(props, offset, k, checkType);
24
29
  if (columnIndex === 0 && indent) {
25
30
  style || (style = {});
@@ -41,8 +46,10 @@ const classNameObj = {
41
46
  type="none" icon circle size="mini"
42
47
  class={`${k}-table-arrow`}
43
48
  ev-click={onClickArrow}
49
+ disabled={loaded === false}
44
50
  >
45
- <Icon class={`${k}-icon-right`} size="small" />
51
+ <Icon v-if={loaded !== false} class={`${k}-icon-right`} size="small" />
52
+ <Icon v-else class={`${k}-tree-icon ion-load-c`} rotate />
46
53
  </Button>
47
54
  {children}
48
55
  </td>
@@ -18,6 +18,7 @@ export interface TableColumnProps {
18
18
  exportCell?: (data: any, index: number) => string
19
19
  minWidth?: number
20
20
  hidden?: boolean
21
+ ellipsis?: boolean
21
22
 
22
23
  // passed by Table
23
24
  // offset: number
@@ -58,6 +59,7 @@ const typeDefs: Required<TypeDefs<TableColumnProps>> = {
58
59
  exportCell: Function,
59
60
  minWidth: Number,
60
61
  hidden: Boolean,
62
+ ellipsis: Boolean,
61
63
 
62
64
  // offset: null,
63
65
  cols: null,