@tdesign/uniapp 0.7.2 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +32 -2
  3. package/dist/action-sheet/README.md +1 -1
  4. package/dist/action-sheet/action-sheet.vue +158 -150
  5. package/dist/action-sheet/props.ts +2 -2
  6. package/dist/action-sheet/type.ts +1 -1
  7. package/dist/avatar/avatar.vue +89 -87
  8. package/dist/avatar-group/avatar-group.vue +69 -67
  9. package/dist/back-top/back-top.vue +60 -58
  10. package/dist/badge/badge.vue +69 -59
  11. package/dist/button/button.vue +121 -116
  12. package/dist/button/props.ts +2 -2
  13. package/dist/button/type.ts +1 -1
  14. package/dist/calendar/calendar-header.vue +4 -4
  15. package/dist/calendar/calendar.vue +308 -297
  16. package/dist/calendar/template.vue +1 -1
  17. package/dist/cascader/README.en-US.md +2 -1
  18. package/dist/cascader/README.md +2 -1
  19. package/dist/cascader/cascader.vue +340 -328
  20. package/dist/cascader/props.ts +6 -1
  21. package/dist/cascader/type.ts +6 -0
  22. package/dist/cell/cell.vue +127 -121
  23. package/dist/cell-group/cell-group.vue +32 -30
  24. package/dist/check-tag/check-tag.vue +73 -71
  25. package/dist/checkbox/README.en-US.md +6 -6
  26. package/dist/checkbox/README.md +5 -5
  27. package/dist/checkbox/checkbox.vue +127 -127
  28. package/dist/checkbox/props.ts +6 -6
  29. package/dist/checkbox/type.ts +6 -4
  30. package/dist/checkbox-group/checkbox-group.vue +175 -173
  31. package/dist/checkbox-group/props.ts +6 -6
  32. package/dist/checkbox-group/type.ts +6 -4
  33. package/dist/col/col.vue +26 -24
  34. package/dist/collapse/collapse.vue +83 -81
  35. package/dist/collapse-panel/collapse-panel.vue +121 -119
  36. package/dist/collapse-panel/props.ts +4 -4
  37. package/dist/collapse-panel/type.ts +2 -2
  38. package/dist/color-picker/README.md +1 -1
  39. package/dist/color-picker/color-picker.vue +324 -322
  40. package/dist/color-picker/props.ts +2 -2
  41. package/dist/color-picker/template.vue +14 -10
  42. package/dist/common/common.ts +1 -0
  43. package/dist/common/style/theme/index.css +57 -61
  44. package/dist/common/utils.js +7 -2
  45. package/dist/common/validator.js +172 -0
  46. package/dist/config-provider/README.en-US.md +184 -0
  47. package/dist/config-provider/README.md +234 -0
  48. package/dist/config-provider/config-provider.vue +105 -0
  49. package/dist/config-provider/config-store.js +70 -0
  50. package/dist/config-provider/props.ts +16 -0
  51. package/dist/config-provider/reactive-state.js +39 -0
  52. package/dist/config-provider/type.ts +401 -0
  53. package/dist/config-provider/use-config.js +29 -0
  54. package/dist/config-provider/utils.js +29 -0
  55. package/dist/count-down/count-down.vue +98 -97
  56. package/dist/date-time-picker/date-time-picker.vue +410 -395
  57. package/dist/demo/demo.vue +1 -0
  58. package/dist/dialog/dialog.vue +176 -173
  59. package/dist/divider/divider.vue +38 -36
  60. package/dist/draggable/draggable.vue +60 -58
  61. package/dist/drawer/README.md +1 -1
  62. package/dist/drawer/drawer.vue +48 -46
  63. package/dist/dropdown-item/dropdown-item.vue +209 -207
  64. package/dist/dropdown-item/props.ts +4 -4
  65. package/dist/dropdown-item/type.ts +3 -3
  66. package/dist/dropdown-menu/dropdown-menu.vue +93 -99
  67. package/dist/empty/empty.vue +43 -42
  68. package/dist/fab/fab.vue +88 -86
  69. package/dist/footer/footer.vue +36 -34
  70. package/dist/form/README.en-US.md +17 -24
  71. package/dist/form/README.md +18 -25
  72. package/dist/form/form.css +1 -166
  73. package/dist/form/form.vue +251 -236
  74. package/dist/form/props.ts +2 -21
  75. package/dist/form/type.ts +7 -70
  76. package/dist/form-item/README.en-US.md +4 -5
  77. package/dist/form-item/README.md +4 -5
  78. package/dist/form-item/form-item.css +69 -96
  79. package/dist/form-item/form-item.vue +315 -336
  80. package/dist/form-item/form-model.ts +125 -173
  81. package/dist/form-item/props.ts +4 -17
  82. package/dist/form-item/type.ts +43 -1
  83. package/dist/grid/grid.vue +53 -51
  84. package/dist/grid-item/grid-item.vue +121 -119
  85. package/dist/guide/README.md +1 -1
  86. package/dist/guide/guide.vue +281 -277
  87. package/dist/icon/README.md +2 -4
  88. package/dist/icon/icon.vue +78 -76
  89. package/dist/image/README.md +1 -1
  90. package/dist/image/image.vue +103 -101
  91. package/dist/image-viewer/image-viewer.vue +160 -158
  92. package/dist/image-viewer/props.ts +2 -2
  93. package/dist/image-viewer/type.ts +1 -1
  94. package/dist/index.js +3 -0
  95. package/dist/indexes/indexes.vue +264 -267
  96. package/dist/indexes-anchor/indexes-anchor.vue +41 -41
  97. package/dist/input/input.vue +192 -192
  98. package/dist/input/props.ts +6 -6
  99. package/dist/input/type.ts +3 -3
  100. package/dist/link/link.vue +73 -71
  101. package/dist/loading/loading.vue +59 -59
  102. package/dist/locale/ar_KW.ts +157 -0
  103. package/dist/locale/en_US.ts +146 -0
  104. package/dist/locale/it_IT.ts +145 -0
  105. package/dist/locale/ja_JP.ts +132 -0
  106. package/dist/locale/ko_KR.ts +132 -0
  107. package/dist/locale/ru_RU.ts +157 -0
  108. package/dist/locale/zh_CN.ts +133 -0
  109. package/dist/locale/zh_TW.ts +132 -0
  110. package/dist/message/message.vue +181 -173
  111. package/dist/message/props.ts +2 -2
  112. package/dist/message/type.ts +1 -1
  113. package/dist/message-item/message-item.vue +192 -184
  114. package/dist/mixins/using-config.js +39 -0
  115. package/dist/navbar/navbar.vue +201 -199
  116. package/dist/notice-bar/notice-bar.vue +175 -171
  117. package/dist/notice-bar/props.ts +2 -2
  118. package/dist/notice-bar/type.ts +1 -1
  119. package/dist/npm/dayjs/esm/locale/ar.js +81 -0
  120. package/dist/npm/dayjs/esm/locale/it.js +39 -0
  121. package/dist/overlay/overlay.vue +50 -48
  122. package/dist/picker/picker.vue +168 -161
  123. package/dist/picker-item/picker-item.vue +269 -269
  124. package/dist/popover/README.md +1 -1
  125. package/dist/popover/popover.vue +262 -261
  126. package/dist/popover/props.ts +4 -4
  127. package/dist/popover/type.ts +2 -2
  128. package/dist/popup/popup.vue +46 -45
  129. package/dist/progress/README.md +1 -1
  130. package/dist/progress/progress.vue +76 -76
  131. package/dist/pull-down-refresh/props.ts +2 -2
  132. package/dist/pull-down-refresh/pull-down-refresh.vue +240 -234
  133. package/dist/pull-down-refresh/type.ts +1 -1
  134. package/dist/qrcode/README.md +1 -1
  135. package/dist/qrcode/components/qrcode-canvas/qrcode-canvas.vue +340 -338
  136. package/dist/qrcode/components/qrcode-status/qrcode-status.vue +6 -6
  137. package/dist/qrcode/qrcode.vue +93 -87
  138. package/dist/radio/props.ts +6 -6
  139. package/dist/radio/radio.vue +118 -120
  140. package/dist/radio/type.ts +3 -3
  141. package/dist/radio-group/props.ts +4 -4
  142. package/dist/radio-group/radio-group.vue +136 -134
  143. package/dist/radio-group/type.ts +4 -4
  144. package/dist/rate/computed.js +2 -2
  145. package/dist/rate/props.ts +4 -4
  146. package/dist/rate/rate.vue +155 -154
  147. package/dist/rate/type.ts +2 -2
  148. package/dist/result/result.vue +41 -39
  149. package/dist/row/row.vue +38 -36
  150. package/dist/scroll-view/scroll-view.vue +24 -22
  151. package/dist/search/props.ts +2 -2
  152. package/dist/search/search.vue +127 -125
  153. package/dist/search/type.ts +1 -1
  154. package/dist/side-bar/side-bar.vue +57 -55
  155. package/dist/side-bar-item/side-bar-item.vue +86 -86
  156. package/dist/skeleton/skeleton.vue +126 -124
  157. package/dist/slider/README.md +1 -1
  158. package/dist/slider/props.ts +2 -2
  159. package/dist/slider/slider.vue +457 -457
  160. package/dist/slider/type.ts +1 -1
  161. package/dist/step-item/step-item.vue +77 -75
  162. package/dist/stepper/props.ts +2 -2
  163. package/dist/stepper/stepper.vue +168 -149
  164. package/dist/stepper/type.ts +1 -1
  165. package/dist/steps/props.ts +2 -2
  166. package/dist/steps/steps.vue +83 -81
  167. package/dist/steps/type.ts +1 -1
  168. package/dist/sticky/sticky.vue +104 -102
  169. package/dist/swipe-cell/swipe-cell.vue +91 -89
  170. package/dist/swiper/README.md +1 -1
  171. package/dist/swiper/swiper.vue +91 -89
  172. package/dist/swiper-nav/swiper-nav.vue +38 -36
  173. package/dist/switch/props.ts +2 -2
  174. package/dist/switch/switch.vue +62 -62
  175. package/dist/switch/type.ts +1 -1
  176. package/dist/tab-bar/tab-bar.vue +88 -86
  177. package/dist/tab-bar-item/tab-bar-item.vue +85 -82
  178. package/dist/tab-panel/tab-panel.vue +66 -64
  179. package/dist/tabs/tabs.vue +294 -287
  180. package/dist/tag/tag.vue +79 -77
  181. package/dist/textarea/props.ts +6 -6
  182. package/dist/textarea/textarea.vue +127 -126
  183. package/dist/textarea/type.ts +3 -3
  184. package/dist/toast/toast.vue +107 -106
  185. package/dist/transition/transition.vue +30 -28
  186. package/dist/tree-select/tree-select.vue +151 -151
  187. package/dist/types/config-provider.d.ts +7 -0
  188. package/dist/types/index.d.ts +2 -0
  189. package/dist/types/popover.d.ts +7 -0
  190. package/dist/upload/README.en-US.md +13 -14
  191. package/dist/upload/README.md +11 -12
  192. package/dist/upload/props.ts +2 -4
  193. package/dist/upload/type.ts +12 -11
  194. package/dist/upload/upload.css +1 -1
  195. package/dist/upload/upload.vue +672 -512
  196. package/dist/watermark/watermark.vue +151 -149
  197. package/global.d.ts +2 -0
  198. package/package.json +16 -2
  199. package/dist/form/form-item-props.ts +0 -56
package/dist/tag/tag.vue CHANGED
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <view
3
3
  :class="[className + ' ', tClass]"
4
- :style="tools._style([tagStyle, customStyle])"
4
+ :style="'' + tools._style([tagStyle, customStyle])"
5
5
  @click="handleClick"
6
6
  >
7
7
  <view
@@ -65,94 +65,96 @@ import tools from '../common/utils.wxs';
65
65
  const name = `${prefix}-tag`;
66
66
 
67
67
 
68
- export default uniComponent({
69
- name,
70
- options: {
71
- styleIsolation: 'shared',
72
- },
73
- externalClasses: [
74
- `${prefix}-class`,
75
- ],
68
+ export default {
76
69
  components: {
77
70
  TIcon,
78
71
  },
79
- props: {
80
- ...props,
81
- },
82
- data() {
83
- return {
84
- prefix,
85
- classPrefix: name,
86
- className: '',
87
- tagStyle: '',
88
- tools,
72
+ ...uniComponent({
73
+ name,
74
+ options: {
75
+ styleIsolation: 'shared',
76
+ },
77
+ externalClasses: [
78
+ `${prefix}-class`,
79
+ ],
80
+ props: {
81
+ ...props,
82
+ },
83
+ data() {
84
+ return {
85
+ prefix,
86
+ classPrefix: name,
87
+ className: '',
88
+ tagStyle: '',
89
+ tools,
89
90
 
90
- innerIcon: null,
91
- innerClosable: null,
92
- };
93
- },
94
- watch: {
95
- size: 'setClass',
96
- shape: 'setClass',
97
- theme: 'setClass',
98
- variant: 'setClass',
99
- disabled: 'setClass',
100
- maxWidth: 'setTagStyle',
101
- icon: {
102
- handler(s) {
103
- this.innerIcon = calcIcon(s);
104
- },
105
- immediate: true,
91
+ innerIcon: null,
92
+ innerClosable: null,
93
+ };
106
94
  },
107
- closable: {
108
- handler(s) {
109
- this.setClass();
110
- this.innerClosable = calcIcon(s, 'close');
95
+ watch: {
96
+ size: 'setClass',
97
+ shape: 'setClass',
98
+ theme: 'setClass',
99
+ variant: 'setClass',
100
+ disabled: 'setClass',
101
+ maxWidth: 'setTagStyle',
102
+ icon: {
103
+ handler(s) {
104
+ this.innerIcon = calcIcon(s);
105
+ },
106
+ immediate: true,
107
+ },
108
+ closable: {
109
+ handler(s) {
110
+ this.setClass();
111
+ this.innerClosable = calcIcon(s, 'close');
112
+ },
113
+ immediate: true,
111
114
  },
112
- immediate: true,
113
115
  },
114
- },
115
- mounted() {
116
- this.setClass();
117
- this.setTagStyle();
118
- },
119
- methods: {
120
- setClass() {
121
- const { prefix, classPrefix } = this;
122
- const { size, shape, theme, variant, closable, disabled } = this;
123
- const tagClass = [
124
- classPrefix,
125
- `${classPrefix}--${theme || 'default'}`,
126
- `${classPrefix}--${variant}`,
127
- closable ? `${classPrefix}--closable ${prefix}-is-closable` : '',
128
- disabled ? `${classPrefix}--disabled ${prefix}-is-disabled` : '',
129
- `${classPrefix}--${size}`,
130
- `${classPrefix}--${shape}`,
131
- ];
132
- const className = classNames(tagClass);
133
- this.className = className;
116
+ mounted() {
117
+ this.setClass();
118
+ this.setTagStyle();
134
119
  },
120
+ methods: {
121
+ setClass() {
122
+ const { prefix, classPrefix } = this;
123
+ const { size, shape, theme, variant, closable, disabled } = this;
124
+ const tagClass = [
125
+ classPrefix,
126
+ `${classPrefix}--${theme || 'default'}`,
127
+ `${classPrefix}--${variant}`,
128
+ closable ? `${classPrefix}--closable ${prefix}-is-closable` : '',
129
+ disabled ? `${classPrefix}--disabled ${prefix}-is-disabled` : '',
130
+ `${classPrefix}--${size}`,
131
+ `${classPrefix}--${shape}`,
132
+ ];
133
+ const className = classNames(tagClass);
134
+ this.className = className;
135
+ },
135
136
 
136
- setTagStyle() {
137
- const { maxWidth } = this;
138
- if (!maxWidth) {
139
- return '';
140
- }
141
- const width = isNumeric(maxWidth) ? `${maxWidth}px` : maxWidth;
142
- this.tagStyle = `max-width:${width};`;
143
- },
137
+ setTagStyle() {
138
+ const { maxWidth } = this;
139
+ if (!maxWidth) {
140
+ return '';
141
+ }
142
+ const width = isNumeric(maxWidth) ? `${maxWidth}px` : maxWidth;
143
+ this.tagStyle = `max-width:${width};`;
144
+ },
144
145
 
145
- handleClick(e) {
146
- if (this.disabled) return;
147
- this.$emit('click', { e });
148
- },
146
+ handleClick(e) {
147
+ if (this.disabled) return;
148
+ this.$emit('click', { e });
149
+ },
149
150
 
150
- handleClose(e) {
151
- if (this.disabled) return;
152
- this.$emit('close', { e });
151
+ handleClose(e) {
152
+ if (this.disabled) return;
153
+ this.$emit('close', { e });
154
+ },
153
155
  },
154
- },
155
- });
156
+ }),
157
+ };
156
158
 
157
159
  </script>
158
160
  <style scoped src="./tag.css"></style>
@@ -52,8 +52,8 @@ export default {
52
52
  disableDefaultPadding: Boolean,
53
53
  /** 是否禁用文本框 */
54
54
  disabled: {
55
- type: Boolean,
56
- default: undefined,
55
+ type: [Boolean, null],
56
+ default: null as TdTextareaProps['disabled'],
57
57
  },
58
58
  /** 如果 textarea 是在一个 `position:fixed` 的区域,需要显式指定属性 fixed 为 true */
59
59
  fixed: Boolean,
@@ -78,8 +78,8 @@ export default {
78
78
  },
79
79
  /** 占位符 */
80
80
  placeholder: {
81
- type: String,
82
- default: undefined,
81
+ type: [String, null],
82
+ default: null as TdTextareaProps['placeholder'],
83
83
  },
84
84
  /** 指定 placeholder 的样式类,目前仅支持color,font-size和font-weight */
85
85
  placeholderClass: {
@@ -93,8 +93,8 @@ export default {
93
93
  },
94
94
  /** 只读状态 */
95
95
  readonly: {
96
- type: Boolean,
97
- default: undefined,
96
+ type: [Boolean, null],
97
+ default: null as TdTextareaProps['readonly'],
98
98
  },
99
99
  /** 光标结束位置,自动聚集时有效,需与 selection-start 搭配使用 */
100
100
  selectionEnd: {
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <view
3
- :style="tools._style([customStyle])"
3
+ :style="'' + tools._style([customStyle])"
4
4
  :class="classPrefix + ' ' + (bordered ? classPrefix + '--border' : '') + ' ' + tClass"
5
5
  >
6
6
  <view :class="classPrefix + '__label ' + tClassLabel">
@@ -12,7 +12,7 @@
12
12
  <view :class="classPrefix + '__wrapper'">
13
13
  <textarea
14
14
  :class="classPrefix + '__wrapper-inner ' + (disabled ? prefix + '-is-disabled' : '') + ' ' + tClassTextarea"
15
- :style="textareaStyle(autosize)"
15
+ :style="''+textareaStyle(autosize)"
16
16
  :maxlength="allowInputOverMax ? -1 : maxlength"
17
17
  :disabled="disabled || readonly"
18
18
  :placeholder="placeholder"
@@ -62,141 +62,141 @@ import { RELATION_MAP } from '../common/relation/parent-map.js';
62
62
 
63
63
  const name = `${prefix}-textarea`;
64
64
 
65
- export default uniComponent({
66
- name,
67
- options: {
68
- styleIsolation: 'shared',
69
- },
70
- externalClasses: [
71
- `${prefix}-class`,
72
- `${prefix}-class-textarea`,
73
- `${prefix}-class-label`,
74
- `${prefix}-class-indicator`,
75
- ],
76
- inject: {
77
- [RELATION_MAP.FormKey]: {
78
- default: null,
65
+ export default {
66
+ ...uniComponent({
67
+ name,
68
+ options: {
69
+ styleIsolation: 'shared',
79
70
  },
80
- },
81
- props: {
82
- ...props,
83
- },
84
-
85
- emits: [
86
- 'update:value',
87
- ],
88
-
89
- data() {
90
- return {
91
- prefix,
92
- classPrefix: name,
93
- count: 0,
94
- tools,
95
-
96
- dataValue: coalesce(this.value, this.defaultValue, ''),
97
- };
98
- },
99
- watch: {
100
- value(val) {
101
- this.updateValue(val);
102
-
103
- if (this[RELATION_MAP.FormKey]
104
- && this[RELATION_MAP.FormKey].onValueChange) {
105
- this[RELATION_MAP.FormKey].onValueChange(val);
106
- }
107
- },
108
- },
109
- mounted() {
110
- const { value, defaultValue } = this;
111
- this.updateValue(coalesce(value, defaultValue, ''));
112
- },
113
- methods: {
114
- textareaStyle,
115
- updateCount(val) {
116
- const { maxcharacter, maxlength } = this;
117
- const { count } = this.calculateValue(val, maxcharacter, maxlength);
118
- this.count = count;
71
+ externalClasses: [
72
+ `${prefix}-class`,
73
+ `${prefix}-class-textarea`,
74
+ `${prefix}-class-label`,
75
+ `${prefix}-class-indicator`,
76
+ ],
77
+ inject: {
78
+ [RELATION_MAP.FormKey]: {
79
+ default: null,
80
+ },
119
81
  },
120
-
121
- updateValue(val) {
122
- const { maxcharacter, maxlength } = this;
123
- const { value, count } = this.calculateValue(val, maxcharacter, maxlength);
124
-
125
- this.dataValue = val;
126
-
127
-
128
- nextTick().then(() => {
129
- this.dataValue = value;
130
- this.count = count;
131
- });
132
- // this.updateInnerMaxLen();
82
+ props: {
83
+ ...props,
133
84
  },
134
85
 
135
- calculateValue(value, maxcharacter, maxlength) {
136
- const { allowInputOverMax } = this;
137
- if (maxcharacter > 0 && !Number.isNaN(maxcharacter)) {
138
- const { length, characters } = getCharacterLength(
139
- 'maxcharacter',
140
- value,
141
- allowInputOverMax ? Infinity : maxcharacter,
142
- );
143
- return {
144
- value: characters,
145
- count: length,
146
- };
147
- }
148
- if (maxlength > 0 && !Number.isNaN(maxlength)) {
149
- const { length, characters } = getCharacterLength('maxlength', value, allowInputOverMax ? Infinity : maxlength);
150
- return {
151
- value: characters,
152
- count: length,
153
- };
154
- }
86
+ emits: [
87
+ 'update:value',
88
+ ],
89
+ data() {
155
90
  return {
156
- value,
157
- count: value ? String(value).length : 0,
91
+ prefix,
92
+ classPrefix: name,
93
+ count: 0,
94
+ tools,
95
+
96
+ dataValue: coalesce(this.value, this.defaultValue, ''),
158
97
  };
159
98
  },
99
+ watch: {
100
+ value(val) {
101
+ this.updateValue(val);
160
102
 
161
- onInput(event) {
162
- const { value, cursor } = event.detail;
163
- this.updateValue(value);
164
- this.emitChange({ value: this.dataValue, cursor });
103
+ if (this[RELATION_MAP.FormKey]
104
+ && this[RELATION_MAP.FormKey].onValueChange) {
105
+ this[RELATION_MAP.FormKey].onValueChange(val);
106
+ }
107
+ },
165
108
  },
166
-
167
- emitChange(data) {
168
- this.$emit('change', data);
169
- this.$emit('update:value', data.value);
109
+ mounted() {
110
+ const { value, defaultValue } = this;
111
+ this.updateValue(coalesce(value, defaultValue, ''));
170
112
  },
113
+ methods: {
114
+ textareaStyle,
115
+ updateCount(val) {
116
+ const { maxcharacter, maxlength } = this;
117
+ const { count } = this.calculateValue(val, maxcharacter, maxlength);
118
+ this.count = count;
119
+ },
171
120
 
172
- onFocus(event) {
173
- this.$emit('focus', {
174
- ...event.detail,
175
- });
176
- },
177
- onBlur(event) {
178
- this.$emit('blur', {
179
- ...event.detail,
180
- });
121
+ updateValue(val) {
122
+ const { maxcharacter, maxlength } = this;
123
+ const { value, count } = this.calculateValue(val, maxcharacter, maxlength);
124
+
125
+ this.dataValue = val;
181
126
 
182
- if (this[RELATION_MAP.FormKey]
127
+
128
+ nextTick().then(() => {
129
+ this.dataValue = value;
130
+ this.count = count;
131
+ });
132
+ // this.updateInnerMaxLen();
133
+ },
134
+
135
+ calculateValue(value, maxcharacter, maxlength) {
136
+ const { allowInputOverMax } = this;
137
+ if (maxcharacter > 0 && !Number.isNaN(maxcharacter)) {
138
+ const { length, characters } = getCharacterLength(
139
+ 'maxcharacter',
140
+ value,
141
+ allowInputOverMax ? Infinity : maxcharacter,
142
+ );
143
+ return {
144
+ value: characters,
145
+ count: length,
146
+ };
147
+ }
148
+ if (maxlength > 0 && !Number.isNaN(maxlength)) {
149
+ const { length, characters } = getCharacterLength('maxlength', value, allowInputOverMax ? Infinity : maxlength);
150
+ return {
151
+ value: characters,
152
+ count: length,
153
+ };
154
+ }
155
+ return {
156
+ value,
157
+ count: value ? String(value).length : 0,
158
+ };
159
+ },
160
+
161
+ onInput(event) {
162
+ const { value, cursor } = event.detail;
163
+ this.updateValue(value);
164
+ this.emitChange({ value: this.dataValue, cursor });
165
+ },
166
+
167
+ emitChange(data) {
168
+ this.$emit('change', data);
169
+ this.$emit('update:value', data.value);
170
+ },
171
+
172
+ onFocus(event) {
173
+ this.$emit('focus', {
174
+ ...event.detail,
175
+ });
176
+ },
177
+ onBlur(event) {
178
+ this.$emit('blur', {
179
+ ...event.detail,
180
+ });
181
+
182
+ if (this[RELATION_MAP.FormKey]
183
183
  && this[RELATION_MAP.FormKey].onBlur) {
184
- this[RELATION_MAP.FormKey].onBlur(event.detail.value);
185
- }
186
- },
187
- onConfirm(event) {
188
- this.$emit('enter', {
189
- ...event.detail,
190
- });
191
- },
192
- onLineChange(event) {
193
- this.$emit('line-change', {
194
- ...event.detail,
195
- });
196
- },
197
- onKeyboardHeightChange(e) {
198
- this.$emit('keyboardheightchange', e.detail);
199
- },
184
+ this[RELATION_MAP.FormKey].onBlur(event.detail.value);
185
+ }
186
+ },
187
+ onConfirm(event) {
188
+ this.$emit('enter', {
189
+ ...event.detail,
190
+ });
191
+ },
192
+ onLineChange(event) {
193
+ this.$emit('line-change', {
194
+ ...event.detail,
195
+ });
196
+ },
197
+ onKeyboardHeightChange(e) {
198
+ this.$emit('keyboardheightchange', e.detail);
199
+ },
200
200
 
201
201
  // updateInnerMaxLen() {
202
202
  // this.innerMaxLen = this.getInnerMaxLen();
@@ -219,7 +219,8 @@ export default uniComponent({
219
219
  // count,
220
220
  // });
221
221
  // },
222
- },
223
- });
222
+ },
223
+ }),
224
+ };
224
225
  </script>
225
226
  <style scoped src="./textarea.css"></style>
@@ -63,7 +63,7 @@ export interface TdTextareaProps {
63
63
  /**
64
64
  * 是否禁用文本框
65
65
  */
66
- disabled?: boolean;
66
+ disabled?: boolean | null;
67
67
  /**
68
68
  * 如果 textarea 是在一个 `position:fixed` 的区域,需要显式指定属性 fixed 为 true
69
69
  * @default false
@@ -100,7 +100,7 @@ export interface TdTextareaProps {
100
100
  /**
101
101
  * 占位符
102
102
  */
103
- placeholder?: string;
103
+ placeholder?: string | null;
104
104
  /**
105
105
  * 指定 placeholder 的样式类,目前仅支持color,font-size和font-weight
106
106
  * @default textarea-placeholder
@@ -114,7 +114,7 @@ export interface TdTextareaProps {
114
114
  /**
115
115
  * 只读状态
116
116
  */
117
- readonly?: boolean;
117
+ readonly?: boolean | null;
118
118
  /**
119
119
  * 光标结束位置,自动聚集时有效,需与 selection-start 搭配使用
120
120
  * @default -1