@autobest-ui/components 2.13.11 → 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 (91) hide show
  1. package/esm/carousel/index.d.ts +4 -0
  2. package/esm/carousel/index.js +10 -1
  3. package/esm/checkbox/Checkbox.js +3 -19
  4. package/esm/checkbox/style/index.css +1 -1
  5. package/esm/index.d.ts +6 -0
  6. package/esm/index.js +4 -1
  7. package/esm/input/Adorn.d.ts +4 -0
  8. package/esm/input/Adorn.js +7 -3
  9. package/esm/input/Input.d.ts +1 -0
  10. package/esm/input/Input.js +5 -1
  11. package/esm/input/TextArea.d.ts +1 -0
  12. package/esm/input/TextArea.js +4 -1
  13. package/esm/input-number/index.d.ts +1 -0
  14. package/esm/input-number/index.js +5 -1
  15. package/esm/input-phone/index.d.ts +1 -0
  16. package/esm/input-phone/index.js +1 -0
  17. package/esm/lazy-image/index.d.ts +10 -30
  18. package/esm/lazy-image/index.js +30 -51
  19. package/esm/lazy-image/style/index.css +1 -1
  20. package/esm/loading-container/index.d.ts +1 -19
  21. package/esm/loading-container/index.js +16 -122
  22. package/esm/loading-icon/index.d.ts +1 -1
  23. package/esm/loading-icon/index.js +3 -21
  24. package/esm/move/index.d.ts +10 -0
  25. package/esm/move/index.js +12 -7
  26. package/esm/radio/Radio.js +10 -7
  27. package/esm/radio/RadioGroup.js +3 -6
  28. package/esm/radio/style/index.css +1 -1
  29. package/esm/radio/type.d.ts +0 -2
  30. package/esm/read-more/index.d.ts +92 -0
  31. package/esm/read-more/index.js +377 -0
  32. package/esm/read-more/style/index.css +1 -0
  33. package/esm/read-more-html/index.d.ts +89 -0
  34. package/esm/read-more-html/index.js +362 -0
  35. package/esm/read-more-html/style/index.css +1 -0
  36. package/esm/select/index.d.ts +0 -3
  37. package/esm/select/index.js +4 -25
  38. package/esm/select/style/index.css +1 -1
  39. package/esm/show-more/index.d.ts +27 -12
  40. package/esm/show-more/index.js +87 -41
  41. package/esm/show-more/style/index.css +1 -1
  42. package/esm/style.css +1 -1
  43. package/esm/table/style/index.css +1 -1
  44. package/esm/trigger/index.d.ts +3 -10
  45. package/esm/trigger/index.js +19 -39
  46. package/lib/carousel/index.d.ts +4 -0
  47. package/lib/carousel/index.js +10 -1
  48. package/lib/checkbox/Checkbox.js +3 -19
  49. package/lib/checkbox/style/index.css +1 -1
  50. package/lib/index.d.ts +6 -0
  51. package/lib/index.js +20 -0
  52. package/lib/input/Adorn.d.ts +4 -0
  53. package/lib/input/Adorn.js +7 -3
  54. package/lib/input/Input.d.ts +1 -0
  55. package/lib/input/Input.js +5 -1
  56. package/lib/input/TextArea.d.ts +1 -0
  57. package/lib/input/TextArea.js +4 -1
  58. package/lib/input-number/index.d.ts +1 -0
  59. package/lib/input-number/index.js +5 -1
  60. package/lib/input-phone/index.d.ts +1 -0
  61. package/lib/input-phone/index.js +1 -0
  62. package/lib/lazy-image/index.d.ts +10 -30
  63. package/lib/lazy-image/index.js +30 -51
  64. package/lib/lazy-image/style/index.css +1 -1
  65. package/lib/loading-container/index.d.ts +1 -19
  66. package/lib/loading-container/index.js +16 -125
  67. package/lib/loading-icon/index.d.ts +1 -1
  68. package/lib/loading-icon/index.js +3 -21
  69. package/lib/move/index.d.ts +10 -0
  70. package/lib/move/index.js +12 -7
  71. package/lib/radio/Radio.js +10 -7
  72. package/lib/radio/RadioGroup.js +3 -6
  73. package/lib/radio/style/index.css +1 -1
  74. package/lib/radio/type.d.ts +0 -2
  75. package/lib/read-more/index.d.ts +92 -0
  76. package/lib/read-more/index.js +388 -0
  77. package/lib/read-more/style/index.css +1 -0
  78. package/lib/read-more-html/index.d.ts +89 -0
  79. package/lib/read-more-html/index.js +373 -0
  80. package/lib/read-more-html/style/index.css +1 -0
  81. package/lib/select/index.d.ts +0 -3
  82. package/lib/select/index.js +4 -25
  83. package/lib/select/style/index.css +1 -1
  84. package/lib/show-more/index.d.ts +27 -12
  85. package/lib/show-more/index.js +86 -40
  86. package/lib/show-more/style/index.css +1 -1
  87. package/lib/style.css +1 -1
  88. package/lib/table/style/index.css +1 -1
  89. package/lib/trigger/index.d.ts +3 -10
  90. package/lib/trigger/index.js +19 -39
  91. package/package.json +3 -3
@@ -0,0 +1,89 @@
1
+ import React, { Component } from 'react';
2
+ export interface ReadMoreHtmlProps {
3
+ /**
4
+ * 需要显示的内容
5
+ */
6
+ children: React.ReactChild[] | React.ReactChild;
7
+ /**
8
+ * 整体样式
9
+ */
10
+ className?: string;
11
+ /**
12
+ * 需要忽略的类名数组,例如 ['mc_title']
13
+ */
14
+ ignoreClassList?: string[];
15
+ /**
16
+ * 展开文本
17
+ */
18
+ expandText?: string;
19
+ /**
20
+ * 折叠文本, 展开后点击收起的文字
21
+ */
22
+ collapseText?: string;
23
+ /**
24
+ * 初始时,显示的行数
25
+ */
26
+ lines?: number;
27
+ /**
28
+ * 是否执行resizeObserver监听宽度变化
29
+ */
30
+ isResizeObserver?: boolean;
31
+ /**
32
+ * 垂直方向触发换行的判定阈值 (默认 1px), 当一行中有字体,大小不同时,需要根据情况动态触发换行
33
+ */
34
+ lineThreshold?: number;
35
+ /**
36
+ * [不推荐]设置Wrap容器高度, 用于解决初始化时页面抖动问题,建议通过屏幕大小动态设置className
37
+ */
38
+ defaultWrapHeight?: number;
39
+ /**
40
+ * [不推荐]设置Content最大高度, 用于解决初始化时页面抖动问题,建议通过屏幕大小动态设置className
41
+ */
42
+ defaultContentMaxHeight?: number;
43
+ /**
44
+ * 默认是否折叠
45
+ */
46
+ defaultCollapsed?: boolean;
47
+ /**
48
+ * 点击展开/收起前的回调函数,返回false时阻止change
49
+ */
50
+ onBeforeChange?: (isCollapsed: boolean) => Promise<boolean>;
51
+ /**
52
+ * 点击展开/收起后的回调函数
53
+ */
54
+ onAfterChange?: (isCollapsed: boolean) => void;
55
+ }
56
+ interface ReadMoreHtmlState {
57
+ isCollapsed: boolean;
58
+ isShowBtn: boolean;
59
+ wrapStyle: React.CSSProperties;
60
+ contentStyle: React.CSSProperties;
61
+ }
62
+ declare class ReadMoreHtml extends Component<ReadMoreHtmlProps, ReadMoreHtmlState> {
63
+ static defaultProps: {
64
+ onAfterChange: () => void;
65
+ isResizeObserver: boolean;
66
+ defaultCollapsed: boolean;
67
+ expandText: string;
68
+ collapseText: string;
69
+ lineThreshold: number;
70
+ lines: number;
71
+ };
72
+ cacheWrapWidth: number;
73
+ resizeObserver: ResizeObserver;
74
+ wrapRef: React.RefObject<HTMLDivElement>;
75
+ contentRef: React.RefObject<HTMLDivElement>;
76
+ prefixCls: string;
77
+ constructor(props: ReadMoreHtmlProps);
78
+ componentDidMount(): void;
79
+ componentDidUpdate(prevProps: ReadMoreHtmlProps): void;
80
+ componentWillUnmount(): void;
81
+ /**
82
+ * 计算高度并设置样式
83
+ */
84
+ delayCalculate(): void;
85
+ onResizeObserver: () => void;
86
+ onChange: () => Promise<void>;
87
+ render(): JSX.Element;
88
+ }
89
+ export default ReadMoreHtml;
@@ -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;