@autobest-ui/components 2.13.12 → 2.14.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 (111) hide show
  1. package/esm/affix/index.d.ts +0 -10
  2. package/esm/affix/index.js +9 -50
  3. package/esm/carousel/index.d.ts +4 -0
  4. package/esm/carousel/index.js +10 -1
  5. package/esm/checkbox/Checkbox.js +3 -19
  6. package/esm/checkbox/style/index.css +1 -1
  7. package/esm/confirm/style/index.css +1 -1
  8. package/esm/index.d.ts +6 -0
  9. package/esm/index.js +4 -1
  10. package/esm/input/Adorn.d.ts +4 -0
  11. package/esm/input/Adorn.js +7 -3
  12. package/esm/input/Input.d.ts +1 -0
  13. package/esm/input/Input.js +5 -1
  14. package/esm/input/TextArea.d.ts +1 -0
  15. package/esm/input/TextArea.js +4 -1
  16. package/esm/input-number/index.d.ts +1 -0
  17. package/esm/input-number/index.js +5 -1
  18. package/esm/input-phone/index.d.ts +1 -0
  19. package/esm/input-phone/index.js +1 -0
  20. package/esm/lazy-image/index.d.ts +10 -30
  21. package/esm/lazy-image/index.js +30 -51
  22. package/esm/lazy-image/style/index.css +1 -1
  23. package/esm/loading-container/index.d.ts +1 -19
  24. package/esm/loading-container/index.js +16 -122
  25. package/esm/loading-icon/index.d.ts +1 -1
  26. package/esm/loading-icon/index.js +3 -21
  27. package/esm/modal/Affix.d.ts +4 -0
  28. package/esm/modal/Affix.js +7 -0
  29. package/esm/modal/index.d.ts +5 -19
  30. package/esm/modal/index.js +17 -18
  31. package/esm/modal/style/index.css +1 -1
  32. package/esm/move/index.d.ts +10 -0
  33. package/esm/move/index.js +12 -7
  34. package/esm/radio/Radio.js +10 -7
  35. package/esm/radio/RadioGroup.js +3 -6
  36. package/esm/radio/style/index.css +1 -1
  37. package/esm/radio/type.d.ts +0 -2
  38. package/esm/read-more/index.d.ts +92 -0
  39. package/esm/read-more/index.js +377 -0
  40. package/esm/read-more/style/index.css +1 -0
  41. package/esm/read-more-html/index.d.ts +89 -0
  42. package/esm/read-more-html/index.js +362 -0
  43. package/esm/read-more-html/style/index.css +1 -0
  44. package/esm/select/index.d.ts +0 -3
  45. package/esm/select/index.js +4 -25
  46. package/esm/select/style/index.css +1 -1
  47. package/esm/show-more/index.d.ts +27 -12
  48. package/esm/show-more/index.js +87 -41
  49. package/esm/show-more/style/index.css +1 -1
  50. package/esm/style.css +1 -1
  51. package/esm/table/style/index.css +1 -1
  52. package/esm/trigger/index.d.ts +3 -10
  53. package/esm/trigger/index.js +19 -39
  54. package/lib/affix/index.d.ts +0 -10
  55. package/lib/affix/index.js +8 -49
  56. package/lib/carousel/index.d.ts +4 -0
  57. package/lib/carousel/index.js +10 -1
  58. package/lib/checkbox/Checkbox.js +3 -19
  59. package/lib/checkbox/style/index.css +1 -1
  60. package/lib/confirm/style/index.css +1 -1
  61. package/lib/index.d.ts +6 -0
  62. package/lib/index.js +20 -0
  63. package/lib/input/Adorn.d.ts +4 -0
  64. package/lib/input/Adorn.js +7 -3
  65. package/lib/input/Input.d.ts +1 -0
  66. package/lib/input/Input.js +5 -1
  67. package/lib/input/TextArea.d.ts +1 -0
  68. package/lib/input/TextArea.js +4 -1
  69. package/lib/input-number/index.d.ts +1 -0
  70. package/lib/input-number/index.js +5 -1
  71. package/lib/input-phone/index.d.ts +1 -0
  72. package/lib/input-phone/index.js +1 -0
  73. package/lib/lazy-image/index.d.ts +10 -30
  74. package/lib/lazy-image/index.js +30 -51
  75. package/lib/lazy-image/style/index.css +1 -1
  76. package/lib/loading-container/index.d.ts +1 -19
  77. package/lib/loading-container/index.js +16 -125
  78. package/lib/loading-icon/index.d.ts +1 -1
  79. package/lib/loading-icon/index.js +3 -21
  80. package/lib/modal/Affix.d.ts +4 -0
  81. package/lib/modal/Affix.js +14 -0
  82. package/lib/modal/index.d.ts +5 -19
  83. package/lib/modal/index.js +17 -18
  84. package/lib/modal/style/index.css +1 -1
  85. package/lib/move/index.d.ts +10 -0
  86. package/lib/move/index.js +12 -7
  87. package/lib/radio/Radio.js +10 -7
  88. package/lib/radio/RadioGroup.js +3 -6
  89. package/lib/radio/style/index.css +1 -1
  90. package/lib/radio/type.d.ts +0 -2
  91. package/lib/read-more/index.d.ts +92 -0
  92. package/lib/read-more/index.js +388 -0
  93. package/lib/read-more/style/index.css +1 -0
  94. package/lib/read-more-html/index.d.ts +89 -0
  95. package/lib/read-more-html/index.js +373 -0
  96. package/lib/read-more-html/style/index.css +1 -0
  97. package/lib/select/index.d.ts +0 -3
  98. package/lib/select/index.js +4 -25
  99. package/lib/select/style/index.css +1 -1
  100. package/lib/show-more/index.d.ts +27 -12
  101. package/lib/show-more/index.js +86 -40
  102. package/lib/show-more/style/index.css +1 -1
  103. package/lib/style.css +1 -1
  104. package/lib/table/style/index.css +1 -1
  105. package/lib/trigger/index.d.ts +3 -10
  106. package/lib/trigger/index.js +19 -39
  107. package/package.json +3 -3
  108. package/esm/affix/observe.d.ts +0 -8
  109. package/esm/affix/observe.js +0 -6
  110. package/lib/affix/observe.d.ts +0 -8
  111. package/lib/affix/observe.js +0 -12
@@ -0,0 +1,362 @@
1
+ var __extends = this && this.__extends || function () {
2
+ var _extendStatics = function extendStatics(d, b) {
3
+ _extendStatics = Object.setPrototypeOf || {
4
+ __proto__: []
5
+ } instanceof Array && function (d, b) {
6
+ d.__proto__ = b;
7
+ } || function (d, b) {
8
+ for (var p in b) {
9
+ if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
10
+ }
11
+ };
12
+ return _extendStatics(d, b);
13
+ };
14
+ return function (d, b) {
15
+ if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
16
+ _extendStatics(d, b);
17
+ function __() {
18
+ this.constructor = d;
19
+ }
20
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
21
+ };
22
+ }();
23
+ var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
24
+ function adopt(value) {
25
+ return value instanceof P ? value : new P(function (resolve) {
26
+ resolve(value);
27
+ });
28
+ }
29
+ return new (P || (P = Promise))(function (resolve, reject) {
30
+ function fulfilled(value) {
31
+ try {
32
+ step(generator.next(value));
33
+ } catch (e) {
34
+ reject(e);
35
+ }
36
+ }
37
+ function rejected(value) {
38
+ try {
39
+ step(generator["throw"](value));
40
+ } catch (e) {
41
+ reject(e);
42
+ }
43
+ }
44
+ function step(result) {
45
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
46
+ }
47
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
48
+ });
49
+ };
50
+ var __generator = this && this.__generator || function (thisArg, body) {
51
+ var _ = {
52
+ label: 0,
53
+ sent: function sent() {
54
+ if (t[0] & 1) throw t[1];
55
+ return t[1];
56
+ },
57
+ trys: [],
58
+ ops: []
59
+ },
60
+ f,
61
+ y,
62
+ t,
63
+ g;
64
+ return g = {
65
+ next: verb(0),
66
+ "throw": verb(1),
67
+ "return": verb(2)
68
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
69
+ return this;
70
+ }), g;
71
+ function verb(n) {
72
+ return function (v) {
73
+ return step([n, v]);
74
+ };
75
+ }
76
+ function step(op) {
77
+ if (f) throw new TypeError("Generator is already executing.");
78
+ while (_) {
79
+ try {
80
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
81
+ if (y = 0, t) op = [op[0] & 2, t.value];
82
+ switch (op[0]) {
83
+ case 0:
84
+ case 1:
85
+ t = op;
86
+ break;
87
+ case 4:
88
+ _.label++;
89
+ return {
90
+ value: op[1],
91
+ done: false
92
+ };
93
+ case 5:
94
+ _.label++;
95
+ y = op[1];
96
+ op = [0];
97
+ continue;
98
+ case 7:
99
+ op = _.ops.pop();
100
+ _.trys.pop();
101
+ continue;
102
+ default:
103
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
104
+ _ = 0;
105
+ continue;
106
+ }
107
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
108
+ _.label = op[1];
109
+ break;
110
+ }
111
+ if (op[0] === 6 && _.label < t[1]) {
112
+ _.label = t[1];
113
+ t = op;
114
+ break;
115
+ }
116
+ if (t && _.label < t[2]) {
117
+ _.label = t[2];
118
+ _.ops.push(op);
119
+ break;
120
+ }
121
+ if (t[2]) _.ops.pop();
122
+ _.trys.pop();
123
+ continue;
124
+ }
125
+ op = body.call(thisArg, _);
126
+ } catch (e) {
127
+ op = [6, e];
128
+ y = 0;
129
+ } finally {
130
+ f = t = 0;
131
+ }
132
+ }
133
+ if (op[0] & 5) throw op[1];
134
+ return {
135
+ value: op[0] ? op[1] : void 0,
136
+ done: true
137
+ };
138
+ }
139
+ };
140
+ import React, { Component } from 'react';
141
+ import classNames from 'classnames';
142
+ import { debounce } from '@autobest-ui/utils';
143
+ var ReadMoreHtml = /** @class */function (_super) {
144
+ __extends(ReadMoreHtml, _super);
145
+ function ReadMoreHtml(props) {
146
+ var _this = _super.call(this, props) || this;
147
+ _this.wrapRef = /*#__PURE__*/React.createRef();
148
+ _this.contentRef = /*#__PURE__*/React.createRef();
149
+ _this.prefixCls = 'ab-rdm-html';
150
+ _this.onResizeObserver = function () {
151
+ var debounceCalculate = debounce(function (newWidth) {
152
+ if (newWidth !== _this.cacheWrapWidth) {
153
+ _this.cacheWrapWidth = newWidth;
154
+ _this.delayCalculate();
155
+ }
156
+ });
157
+ _this.resizeObserver = new ResizeObserver(function (entries) {
158
+ debounceCalculate(entries[0].contentRect.width);
159
+ });
160
+ _this.resizeObserver.observe(_this.wrapRef.current);
161
+ };
162
+ _this.onChange = function () {
163
+ return __awaiter(_this, void 0, void 0, function () {
164
+ var isCollapsed, _a, nextState;
165
+ var _this = this;
166
+ return __generator(this, function (_b) {
167
+ switch (_b.label) {
168
+ case 0:
169
+ isCollapsed = !this.state.isCollapsed;
170
+ _a = this.props.onBeforeChange;
171
+ if (!_a) return [3 /*break*/, 2];
172
+ return [4 /*yield*/, this.props.onBeforeChange(isCollapsed)];
173
+ case 1:
174
+ _a = !_b.sent();
175
+ _b.label = 2;
176
+ case 2:
177
+ if (_a) {
178
+ return [2 /*return*/];
179
+ }
180
+
181
+ nextState = {};
182
+ nextState.isCollapsed = isCollapsed;
183
+ if (!nextState.isCollapsed) {
184
+ nextState.contentStyle = {
185
+ height: 'auto',
186
+ maxHeight: 'none'
187
+ };
188
+ nextState.wrapStyle = {
189
+ height: 'auto'
190
+ };
191
+ }
192
+ this.setState(nextState, function () {
193
+ if (isCollapsed) {
194
+ _this.delayCalculate();
195
+ } else {
196
+ _this.props.onAfterChange(isCollapsed);
197
+ }
198
+ });
199
+ return [2 /*return*/];
200
+ }
201
+ });
202
+ });
203
+ };
204
+
205
+ _this.state = {
206
+ isCollapsed: props.lines >= 1 && props.defaultCollapsed,
207
+ isShowBtn: false,
208
+ contentStyle: {
209
+ maxHeight: props.defaultContentMaxHeight
210
+ },
211
+ wrapStyle: {
212
+ height: props.defaultWrapHeight
213
+ }
214
+ };
215
+ return _this;
216
+ }
217
+ ReadMoreHtml.prototype.componentDidMount = function () {
218
+ this.delayCalculate();
219
+ if (this.props.isResizeObserver) {
220
+ this.onResizeObserver();
221
+ }
222
+ };
223
+ ReadMoreHtml.prototype.componentDidUpdate = function (prevProps) {
224
+ if (this.props.children !== prevProps.children || this.props.lines !== prevProps.lines) {
225
+ // 执行render,并且跳过shouldComponentUpdate
226
+ this.delayCalculate();
227
+ }
228
+ };
229
+ ReadMoreHtml.prototype.componentWillUnmount = function () {
230
+ if (this.resizeObserver && this.wrapRef.current) {
231
+ this.resizeObserver.unobserve(this.wrapRef.current);
232
+ }
233
+ };
234
+ /**
235
+ * 计算高度并设置样式
236
+ */
237
+ ReadMoreHtml.prototype.delayCalculate = function () {
238
+ var _this = this;
239
+ var wrapElement = this.wrapRef.current;
240
+ var contentElement = this.contentRef.current;
241
+ if (!this.state.isCollapsed || this.props.lines < 1 || !wrapElement || !contentElement || !document.createTreeWalker) {
242
+ this.setState({
243
+ isCollapsed: false,
244
+ contentStyle: {
245
+ height: 'auto',
246
+ maxHeight: 'none'
247
+ },
248
+ wrapStyle: {
249
+ height: 'auto'
250
+ },
251
+ isShowBtn: false
252
+ });
253
+ return;
254
+ }
255
+ var elementRect = contentElement.getBoundingClientRect();
256
+ var _a = this.props,
257
+ ignoreClassList = _a.ignoreClassList,
258
+ lineThreshold = _a.lineThreshold,
259
+ lines = _a.lines;
260
+ var range = document.createRange();
261
+ // 将数组转换为选择器字符串: ".ignore-text1, .ignore-text2"
262
+ var ignoreSelector = (ignoreClassList || []).map(function (cls) {
263
+ return ".".concat(cls);
264
+ }).join(', ');
265
+ var treeWalker = document.createTreeWalker(contentElement, NodeFilter.SHOW_TEXT, {
266
+ acceptNode: function acceptNode(node) {
267
+ // 如果 ignoreClassList 为空,或者当前节点不属于任何忽略名单,则接受
268
+ if (ignoreSelector && node.parentElement.closest(ignoreSelector)) {
269
+ return NodeFilter.FILTER_REJECT;
270
+ }
271
+ return NodeFilter.FILTER_ACCEPT;
272
+ }
273
+ });
274
+ var lineCount = 0;
275
+ var lastTop = -1;
276
+ var node;
277
+ while (node = treeWalker.nextNode()) {
278
+ var text = node.textContent;
279
+ for (var i = 0; i < text.length; i++) {
280
+ if (text[i].trim() === '') continue;
281
+ range.setStart(node, i);
282
+ range.setEnd(node, i + 1);
283
+ var rect = range.getBoundingClientRect();
284
+ if (rect.height > 0) {
285
+ // 利用绝对坐标判断换行
286
+ if (lastTop === -1 || Math.abs(rect.top - lastTop) > lineThreshold) {
287
+ lineCount++;
288
+ lastTop = rect.top;
289
+ // 找到指定行开头的垂直位置
290
+ if (lineCount > lines) {
291
+ this.setState({
292
+ isShowBtn: true,
293
+ contentStyle: {
294
+ height: "".concat(rect.top - elementRect.top, "px"),
295
+ maxHeight: 'none',
296
+ overflow: 'hidden'
297
+ },
298
+ wrapStyle: {
299
+ height: 'auto'
300
+ }
301
+ }, function () {
302
+ _this.props.onAfterChange(_this.state.isCollapsed);
303
+ });
304
+ return;
305
+ }
306
+ }
307
+ }
308
+ }
309
+ }
310
+ if (lineCount <= lines) {
311
+ this.setState({
312
+ isShowBtn: false,
313
+ contentStyle: {
314
+ height: 'auto'
315
+ },
316
+ wrapStyle: {
317
+ height: 'auto'
318
+ }
319
+ }, function () {
320
+ _this.props.onAfterChange(_this.state.isCollapsed);
321
+ });
322
+ }
323
+ };
324
+ ReadMoreHtml.prototype.render = function () {
325
+ var cls = this.prefixCls;
326
+ var _a = this.props,
327
+ className = _a.className,
328
+ children = _a.children,
329
+ expandText = _a.expandText,
330
+ collapseText = _a.collapseText;
331
+ var _b = this.state,
332
+ isCollapsed = _b.isCollapsed,
333
+ isShowBtn = _b.isShowBtn,
334
+ wrapStyle = _b.wrapStyle,
335
+ contentStyle = _b.contentStyle;
336
+ return /*#__PURE__*/React.createElement("div", {
337
+ ref: this.wrapRef,
338
+ style: wrapStyle,
339
+ className: classNames(cls, className)
340
+ }, /*#__PURE__*/React.createElement("div", {
341
+ ref: this.contentRef,
342
+ style: contentStyle,
343
+ className: "".concat(cls, "-content")
344
+ }, children), isShowBtn && /*#__PURE__*/React.createElement("span", {
345
+ onClick: this.onChange,
346
+ "data-collapse": collapseText,
347
+ "data-expand": expandText,
348
+ className: classNames("".concat(cls, "-btn"), isCollapsed ? "".concat(cls, "-collapse") : "".concat(cls, "-expand"))
349
+ }));
350
+ };
351
+ ReadMoreHtml.defaultProps = {
352
+ onAfterChange: function onAfterChange() {},
353
+ isResizeObserver: true,
354
+ defaultCollapsed: true,
355
+ expandText: 'Show More',
356
+ collapseText: 'Show Less',
357
+ lineThreshold: 1,
358
+ lines: 2
359
+ };
360
+ return ReadMoreHtml;
361
+ }(Component);
362
+ export default ReadMoreHtml;
@@ -0,0 +1 @@
1
+ .ab-rdm-html,.ab-rdm-html-content{overflow:hidden}.ab-rdm-html-collapse::after,.ab-rdm-html-expand::after{line-height:.18rem;display:block;padding-top:.02rem;cursor:pointer;text-decoration:underline}.ab-rdm-html-collapse::after{content:attr(data-collapse)}.ab-rdm-html-expand::after{content:attr(data-expand)}
@@ -92,7 +92,6 @@ export interface SelectProps extends Pick<TriggerProps, 'windowResizeHidden' | '
92
92
  }
93
93
  interface SelectStates {
94
94
  visible: boolean;
95
- isEnter: boolean;
96
95
  list: [SelectOptionItem[]];
97
96
  filterItem?: SelectOptionItem;
98
97
  }
@@ -131,8 +130,6 @@ declare class Select extends React.Component<SelectProps, SelectStates> {
131
130
  triggerSelect: (status?: boolean) => void;
132
131
  onTriggerSelect: () => void;
133
132
  onSelecting(ev: React.MouseEvent | React.TouchEvent, item: any): void;
134
- onMouseEnter: () => void;
135
- onMouseLeave: () => void;
136
133
  renderTitle(): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
137
134
  renderBottom(): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
138
135
  /**
@@ -159,25 +159,8 @@ var Select = /** @class */function (_super) {
159
159
  }
160
160
  _this.triggerSelect(!_this.state.visible);
161
161
  };
162
- _this.onMouseEnter = function () {
163
- if (_this.state.isEnter || _this.props.disabled) {
164
- return;
165
- }
166
- _this.setState({
167
- isEnter: true
168
- });
169
- };
170
- _this.onMouseLeave = function () {
171
- if (!_this.state.isEnter || _this.props.disabled) {
172
- return;
173
- }
174
- _this.setState({
175
- isEnter: false
176
- });
177
- };
178
162
  _this.state = {
179
163
  visible: false,
180
- isEnter: false,
181
164
  list: [[]]
182
165
  };
183
166
  return _this;
@@ -302,10 +285,8 @@ var Select = /** @class */function (_super) {
302
285
  return null;
303
286
  };
304
287
  Select.prototype.render = function () {
305
- var _a;
306
- var _b = this.state,
307
- visible = _b.visible,
308
- isEnter = _b.isEnter;
288
+ var _a, _b;
289
+ var visible = this.state.visible;
309
290
  var _c = this.props,
310
291
  className = _c.className,
311
292
  placeholder = _c.placeholder,
@@ -327,12 +308,10 @@ var Select = /** @class */function (_super) {
327
308
  popup: this.getSelectPopup(),
328
309
  onVisibleChange: this.triggerSelect
329
310
  }), /*#__PURE__*/React.createElement("div", {
330
- className: classNames(["".concat(cls, "-input-group"), className, (_a = {}, _a["".concat(cls, "-active")] = visible, _a["".concat(cls, "-enter")] = isEnter || visible, _a["".concat(cls, "-empty")] = !currentName, _a["".concat(cls, "-disabled")] = disabled, _a)]),
331
- onMouseEnter: this.onMouseEnter,
332
- onMouseLeave: this.onMouseLeave,
311
+ className: classNames(["".concat(cls, "-input-group"), className, (_a = {}, _a["".concat(cls, "-active")] = visible, _a.disabled = disabled, _a)]),
333
312
  onClick: this.onTriggerSelect
334
313
  }, /*#__PURE__*/React.createElement("div", {
335
- className: "".concat(cls, "-input-control")
314
+ className: classNames(["".concat(cls, "-input-control"), (_b = {}, _b["".concat(cls, "-focused")] = visible, _b["".concat(cls, "-empty")] = !currentName, _b)])
336
315
  }, currentName || placeholder), hiddenIcon ? null : /*#__PURE__*/React.createElement("span", {
337
316
  className: "".concat(cls, "-icon")
338
317
  }, typeof icon === 'function' ? icon() : icon)));
@@ -1 +1 @@
1
- .ab-trigger-wrap{position:absolute;top:0;left:0;z-index:101}.ab-trigger-wrap.ab-trigger-hidden{display:none}.ab-trigger-mask{position:fixed;top:0;left:0;bottom:0;right:0;z-index:101;background-color:transparent;display:none}.ab-trigger-mask.ab-trigger-mask-show{display:block}.ab-trigger-fade-appear,.ab-trigger-fade-enter,.ab-trigger-fade-hr-appear,.ab-trigger-fade-hr-enter{opacity:0}.ab-trigger-fade-appear,.ab-trigger-fade-enter{transform:scale(.7)}.ab-trigger-fade-hr-appear,.ab-trigger-fade-hr-enter{opacity:0;transform:scaleY(.7)}.ab-trigger-fade-appear-active,.ab-trigger-fade-enter-active,.ab-trigger-fade-hr-appear-active,.ab-trigger-fade-hr-enter-active{opacity:1;transition:opacity .2s,transform .2s}.ab-trigger-fade-appear-active,.ab-trigger-fade-enter-active{transform:scale(1)}.ab-trigger-fade-hr-appear-active,.ab-trigger-fade-hr-enter-active{transform:scaleY(1)}.ab-trigger-fade-exit,.ab-trigger-fade-hr-exit{opacity:1}.ab-trigger-fade-exit-active,.ab-trigger-fade-hr-exit-active{opacity:0;transition:opacity .2s,transform .2s}.ab-trigger-fade-exit-active{transform:scale(.7)}.ab-trigger-fade-hr-exit-active{transform:scaleY(.7)}.ab-trigger-fade-exit-done,.ab-trigger-fade-hr-exit-done{display:none}.ab-select-wrap{min-width:177px;background-color:#fff;background-clip:padding-box;border-radius:4px;box-shadow:0 2px 8px rgba(0,0,0,.15);display:flex}.ab-select-wrap.ab-trigger-fade-hr-exit-done{display:none}.ab-select-inner{flex:1;width:100%;overflow:auto}.ab-select-bottom,.ab-select-content,.ab-select-title{display:flex}.ab-select-title{padding:.09rem 0;background-color:transparent;cursor:context-menu;border-bottom:1px solid #d7d7d7;font-weight:700;color:#606060;font-size:.12rem;margin:0 .1rem}.ab-select-col{font-size:.12rem;padding-right:.07rem;flex:auto}.ab-select-col:last-child{padding-right:0}.ab-select-col>li{padding:.08rem .11rem;cursor:pointer}.ab-select-col>li:hover{background-color:#eee}.ab-select-col>li.ab-select-active{background-color:#e6f7ff}.ab-select-col>li.ab-select-unselect{background-color:transparent;cursor:context-menu}.ab-select-input-group{position:relative;display:flex;align-items:center;border:1px solid #ccc;cursor:pointer;border-radius:.02rem;user-select:none;padding:.08rem .07rem;font-size:.12rem;background-color:#fff;transition:.2s}.ab-select-input-group.ab-select-active,.ab-select-input-group.ab-select-enter{border-color:#348fee}.ab-select-input-group.ab-select-active{box-shadow:0 0 2px rgba(52,143,238,.8)}.ab-select-input-group.ab-select-empty{color:#888}.ab-select-input-group.ab-select-disabled{cursor:not-allowed}.ab-select-input-control{flex:1;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ab-select-icon{position:relative;margin-left:.04rem;width:.14rem;height:.14rem}.ab-select-icon svg{position:absolute;left:50%;top:50%;color:#ccc;font-size:.12rem;transition:transform .2s;transform:translate(-50%,-50%)}.ab-select-active .ab-select-icon svg{transform:translate(-50%,-50%) rotate(180deg)}@media only screen and (max-width:767px){.ab-select-content{display:block}.ab-select-input-group{font-size:.14rem;padding:.1rem .07rem}.ab-select-col{padding-right:0}}
1
+ .ab-trigger-wrap{position:absolute;top:0;left:0;z-index:101}.ab-trigger-wrap.ab-trigger-hidden{display:none}.ab-trigger-mask{position:fixed;top:0;left:0;bottom:0;right:0;z-index:101;background-color:transparent;display:none}.ab-trigger-mask.ab-trigger-mask-show{display:block}.ab-trigger-fade-appear,.ab-trigger-fade-enter,.ab-trigger-fade-hr-appear,.ab-trigger-fade-hr-enter{opacity:0}.ab-trigger-fade-appear,.ab-trigger-fade-enter{transform:scale(.7)}.ab-trigger-fade-hr-appear,.ab-trigger-fade-hr-enter{opacity:0;transform:scaleY(.7)}.ab-trigger-fade-appear-active,.ab-trigger-fade-enter-active,.ab-trigger-fade-hr-appear-active,.ab-trigger-fade-hr-enter-active{opacity:1;transition:opacity .2s,transform .2s}.ab-trigger-fade-appear-active,.ab-trigger-fade-enter-active{transform:scale(1)}.ab-trigger-fade-hr-appear-active,.ab-trigger-fade-hr-enter-active{transform:scaleY(1)}.ab-trigger-fade-exit,.ab-trigger-fade-hr-exit{opacity:1}.ab-trigger-fade-exit-active,.ab-trigger-fade-hr-exit-active{opacity:0;transition:opacity .2s,transform .2s}.ab-trigger-fade-exit-active{transform:scale(.7)}.ab-trigger-fade-hr-exit-active{transform:scaleY(.7)}.ab-trigger-fade-exit-done,.ab-trigger-fade-hr-exit-done{display:none}.ab-select-wrap{min-width:177px;background-color:#fff;background-clip:padding-box;border-radius:4px;box-shadow:0 2px 8px rgba(0,0,0,.15);display:flex}.ab-select-wrap.ab-trigger-fade-hr-exit-done{display:none}.ab-select-inner{flex:1;width:100%;overflow:auto}.ab-select-bottom,.ab-select-content,.ab-select-title{display:flex}.ab-select-title{padding:.09rem 0;background-color:transparent;cursor:context-menu;border-bottom:1px solid #d7d7d7;font-weight:700;color:#606060;font-size:.12rem;margin:0 .1rem}.ab-select-col{font-size:.12rem;padding-right:.07rem;flex:auto}.ab-select-col:last-child{padding-right:0}.ab-select-col>li{padding:.08rem .11rem;cursor:pointer}.ab-select-col>li:hover{background-color:#eee}.ab-select-col>li.ab-select-active{background-color:#e6f7ff}.ab-select-col>li.ab-select-unselect{background-color:transparent;cursor:context-menu}.ab-select-input-group{position:relative;overflow:hidden}.ab-select-input-control{appearance:none;outline:0;user-select:none;width:100%;border:1px solid #ccc;border-radius:2px;resize:none;transition:.2s;background-color:#fff;text-overflow:ellipsis;padding:.08rem .28rem .07rem .07rem;font-size:.14rem;white-space:nowrap;overflow:hidden;max-width:100%;cursor:pointer}.ab-select-input-control.ab-select-focused{box-shadow:0 0 4px rgba(52,143,238,.8);border-color:rgba(52,143,238,.8)}.ab-select-input-control.ab-select-empty{color:#888}.ab-select-input-control.error{background-color:#fffacd}.ab-select-icon{position:absolute;right:.21rem;top:50%;color:#ccc;font-size:0;transform:translate(100%,-50%);transition:transform .2s}.ab-select-icon svg{font-size:.12rem}.ab-select-active .ab-select-icon{transform:translate(100%,-50%) rotate(180deg)}@media only screen and (max-width:767px){.ab-select-content{display:block}.ab-select-input-control{padding:.1rem .05rem;font-size:.14rem}.ab-select-col{padding-right:0}}
@@ -21,9 +21,9 @@ export interface ShowMoreProps {
21
21
  */
22
22
  lines?: number;
23
23
  /**
24
- * 定义内容宽度,单位:px,建议尽量不要使用此属性,当不使用时,根据父元素进行判断
24
+ * 是否执行resizeObserver监听宽度变化
25
25
  */
26
- width?: number;
26
+ isResizeObserver?: boolean;
27
27
  /**
28
28
  * title属性
29
29
  */
@@ -33,9 +33,17 @@ export interface ShowMoreProps {
33
33
  */
34
34
  expandable?: boolean;
35
35
  /**
36
- * 点击展开后的回调函数
36
+ * 展开后点击收起的文字,若为空则代表没有点击收起的功能
37
37
  */
38
- onAfterChange?: () => void;
38
+ collapseText?: string;
39
+ /**
40
+ * 收起按钮样式, 注意不能加padding样式, 可以通过空格来解决左右间距问题
41
+ */
42
+ collapseClassName?: string;
43
+ /**
44
+ * 点击展开/收起后的回调函数
45
+ */
46
+ onAfterChange?: (isExpand: boolean) => void;
39
47
  /**
40
48
  * 渲染后的回调函数
41
49
  */
@@ -51,34 +59,41 @@ declare class ShowMore extends Component<ShowMoreProps, ShowMoreStates> {
51
59
  static defaultProps: {
52
60
  children: string;
53
61
  ellipsisText: string;
62
+ collapseText: any;
54
63
  lines: number;
55
64
  width: number;
56
65
  expandable: boolean;
66
+ onAfterChange: () => any;
57
67
  };
58
68
  prefixCls: string;
59
- targetElement: HTMLSpanElement | null;
60
- textElement: HTMLSpanElement | null;
61
- setTargetElement: (el: HTMLSpanElement) => HTMLSpanElement;
62
- setChildrenElement: (el: HTMLSpanElement) => HTMLSpanElement;
69
+ wrapRef: React.RefObject<HTMLDivElement>;
70
+ contentRef: React.RefObject<HTMLSpanElement>;
71
+ childrenRef: React.RefObject<HTMLSpanElement>;
72
+ resizeObserver: ResizeObserver;
73
+ wrapWidth: number;
74
+ targetWidth: number;
63
75
  canvasContext: CanvasRenderingContext2D;
76
+ childrenText: string;
64
77
  timer: any;
65
- targetWidth: number;
66
78
  constructor(props: ShowMoreProps);
67
79
  componentDidMount(): void;
68
80
  componentDidUpdate(prevProps: ShowMoreProps): void;
69
81
  componentWillUnmount(): void;
82
+ onResizeObserver: () => void;
70
83
  setHiddenTextStatus: () => void;
71
- delayCalculate(): void;
72
- onChange: () => void;
84
+ delayCalculate(isRefresh?: boolean): void;
85
+ onExpand: () => void;
86
+ onCollapse: () => void;
73
87
  innerText: (node: HTMLSpanElement) => string;
74
88
  calcTargetWidth: (callback?: () => void) => void;
75
89
  measureWidth: (text: string) => number;
90
+ onRefreshChildrenText: () => string;
76
91
  getLines: (targetWidth: number) => {
77
92
  lines: any[];
78
93
  hiddenLineStr: string;
79
94
  };
80
95
  renderLine: (line: React.ReactChild, i: number, arr: React.ReactChild[]) => JSX.Element | JSX.Element[];
81
- setRenderText: (callback: () => void, isHidden?: boolean) => void;
96
+ setRenderText: (callback: () => void, isTruncated: boolean) => void;
82
97
  render(): JSX.Element;
83
98
  }
84
99
  export default ShowMore;