@semcore/ellipsis 1.2.13 → 1.2.14
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.
- package/CHANGELOG.md +2 -2
- package/lib/cjs/Ellipsis.js +33 -87
- package/lib/cjs/Ellipsis.js.map +1 -1
- package/lib/cjs/index.js +0 -3
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/useResizeObserver.js +3 -14
- package/lib/cjs/useResizeObserver.js.map +1 -1
- package/lib/es6/Ellipsis.js +33 -76
- package/lib/es6/Ellipsis.js.map +1 -1
- package/lib/es6/index.js.map +1 -1
- package/lib/es6/useResizeObserver.js +3 -8
- package/lib/es6/useResizeObserver.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
CHANGELOG.md standards are inspired by [keepachangelog.com](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
|
5
|
-
## [1.2.
|
|
5
|
+
## [1.2.14] - 2023-04-03
|
|
6
6
|
|
|
7
7
|
### Changed
|
|
8
8
|
|
|
9
|
-
- Version patch update due to children dependencies update (`@semcore/tooltip` [5.3.
|
|
9
|
+
- Version patch update due to children dependencies update (`@semcore/tooltip` [5.3.24 ~> 5.4.0]).
|
|
10
10
|
|
|
11
11
|
## [1.2.1] - 2023-02-16
|
|
12
12
|
|
package/lib/cjs/Ellipsis.js
CHANGED
|
@@ -1,67 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
8
|
exports["default"] = void 0;
|
|
11
|
-
|
|
12
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
-
|
|
14
10
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
15
|
-
|
|
16
11
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
17
|
-
|
|
18
12
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
19
|
-
|
|
20
13
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
21
|
-
|
|
22
14
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
23
|
-
|
|
24
15
|
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
|
|
25
|
-
|
|
26
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
27
|
-
|
|
28
17
|
var _core = _interopRequireWildcard(require("@semcore/core"));
|
|
29
|
-
|
|
30
18
|
var _react = _interopRequireWildcard(require("react"));
|
|
31
|
-
|
|
32
19
|
var _tooltip = _interopRequireDefault(require("@semcore/tooltip"));
|
|
33
|
-
|
|
34
20
|
var _flexBox = require("@semcore/flex-box");
|
|
35
|
-
|
|
36
21
|
var _useResizeObserver = require("./useResizeObserver");
|
|
37
|
-
|
|
38
22
|
var _reactToText = _interopRequireDefault(require("@semcore/utils/lib/reactToText"));
|
|
39
|
-
|
|
40
23
|
var _getOriginChildren = _interopRequireDefault(require("@semcore/utils/lib/getOriginChildren"));
|
|
41
|
-
|
|
42
24
|
var _pick = _interopRequireDefault(require("@semcore/utils/lib/pick"));
|
|
43
|
-
|
|
44
25
|
/*__reshadow-styles__:"./style/ellipsis.shadow.css"*/
|
|
45
|
-
var style = (
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
"__SContainer": "___SContainer_abdtp_gg_",
|
|
55
|
-
"__SNoTooltipContainer": "___SNoTooltipContainer_abdtp_gg_",
|
|
56
|
-
"__SContainerMiddle": "___SContainerMiddle_abdtp_gg_",
|
|
57
|
-
"__SBeginning": "___SBeginning_abdtp_gg_",
|
|
58
|
-
"__SEllipsis": "___SEllipsis_abdtp_gg_",
|
|
59
|
-
"_maxLine": "__maxLine_abdtp_gg_",
|
|
60
|
-
"--maxLine": "--maxLine_abdtp",
|
|
61
|
-
"__STail": "___STail_abdtp_gg_"
|
|
26
|
+
var style = ( /*__reshadow_css_start__*/_core.sstyled.insert( /*__inner_css_start__*/".___SContainerMiddle_1wxcn_gg_,.___SContainer_1wxcn_gg_,.___SNoTooltipContainer_1wxcn_gg_{display:flex;overflow:hidden}.___SBeginning_1wxcn_gg_,.___SEllipsis_1wxcn_gg_{overflow:hidden;display:inline-block;text-overflow:ellipsis;white-space:nowrap}.___SEllipsis_1wxcn_gg_.__maxLine_1wxcn_gg_{display:-webkit-box;-webkit-line-clamp:var(--maxLine_1wxcn);-webkit-box-orient:vertical;overflow:hidden;white-space:normal}.___STail_1wxcn_gg_{white-space:nowrap}" /*__inner_css_end__*/, "1wxcn_gg_") /*__reshadow_css_end__*/, {
|
|
27
|
+
"__SContainer": "___SContainer_1wxcn_gg_",
|
|
28
|
+
"__SNoTooltipContainer": "___SNoTooltipContainer_1wxcn_gg_",
|
|
29
|
+
"__SContainerMiddle": "___SContainerMiddle_1wxcn_gg_",
|
|
30
|
+
"__SBeginning": "___SBeginning_1wxcn_gg_",
|
|
31
|
+
"__SEllipsis": "___SEllipsis_1wxcn_gg_",
|
|
32
|
+
"_maxLine": "__maxLine_1wxcn_gg_",
|
|
33
|
+
"--maxLine": "--maxLine_1wxcn",
|
|
34
|
+
"__STail": "___STail_1wxcn_gg_"
|
|
62
35
|
});
|
|
63
36
|
var defaultTooltipProps = ['title', 'theme', 'strategy', 'modifiers', 'placement', 'interaction', 'timeout', 'visible', 'defaultVisible', 'onVisibleChange', 'offset', 'preventOverflow', 'arrow', 'flip', 'computeStyles', 'eventListeners', 'onFirstUpdate'];
|
|
64
|
-
|
|
65
37
|
var createMeasurerElement = function createMeasurerElement(element) {
|
|
66
38
|
var styleElement = window.getComputedStyle(element, null);
|
|
67
39
|
var temporaryElement = document.createElement('temporary-block');
|
|
@@ -77,18 +49,14 @@ var createMeasurerElement = function createMeasurerElement(element) {
|
|
|
77
49
|
temporaryElement.innerHTML = element.innerHTML;
|
|
78
50
|
return temporaryElement;
|
|
79
51
|
};
|
|
80
|
-
|
|
81
52
|
function isTextOverflowing(element, multiline) {
|
|
82
53
|
if (!element) return false;
|
|
83
|
-
|
|
84
54
|
var _element$getBoundingC = element.getBoundingClientRect(),
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
55
|
+
currentHeight = _element$getBoundingC.height,
|
|
56
|
+
currentWidth = _element$getBoundingC.width;
|
|
88
57
|
var measuringElement = createMeasurerElement(element);
|
|
89
58
|
var currentSize, initialSize;
|
|
90
59
|
document.body.appendChild(measuringElement);
|
|
91
|
-
|
|
92
60
|
if (multiline) {
|
|
93
61
|
currentSize = currentHeight;
|
|
94
62
|
measuringElement.style.width = "".concat(currentWidth, "px");
|
|
@@ -98,25 +66,18 @@ function isTextOverflowing(element, multiline) {
|
|
|
98
66
|
measuringElement.style.whiteSpace = 'nowrap';
|
|
99
67
|
initialSize = measuringElement.getBoundingClientRect().width;
|
|
100
68
|
}
|
|
101
|
-
|
|
102
69
|
document.body.removeChild(measuringElement);
|
|
103
70
|
return currentSize < initialSize;
|
|
104
71
|
}
|
|
105
|
-
|
|
106
72
|
var RootEllipsis = /*#__PURE__*/function (_Component) {
|
|
107
73
|
(0, _inherits2["default"])(RootEllipsis, _Component);
|
|
108
|
-
|
|
109
74
|
var _super = (0, _createSuper2["default"])(RootEllipsis);
|
|
110
|
-
|
|
111
75
|
function RootEllipsis() {
|
|
112
76
|
var _this;
|
|
113
|
-
|
|
114
77
|
(0, _classCallCheck2["default"])(this, RootEllipsis);
|
|
115
|
-
|
|
116
78
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
117
79
|
args[_key] = arguments[_key];
|
|
118
80
|
}
|
|
119
|
-
|
|
120
81
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
121
82
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
|
|
122
83
|
visible: false
|
|
@@ -129,38 +90,34 @@ var RootEllipsis = /*#__PURE__*/function (_Component) {
|
|
|
129
90
|
});
|
|
130
91
|
return _this;
|
|
131
92
|
}
|
|
132
|
-
|
|
133
93
|
(0, _createClass2["default"])(RootEllipsis, [{
|
|
134
94
|
key: "showTooltip",
|
|
135
95
|
value: function showTooltip() {
|
|
136
96
|
var _this$asProps$maxLine = this.asProps.maxLine,
|
|
137
|
-
|
|
97
|
+
maxLine = _this$asProps$maxLine === void 0 ? 1 : _this$asProps$maxLine;
|
|
138
98
|
return isTextOverflowing(this.textRef.current, maxLine > 1);
|
|
139
99
|
}
|
|
140
100
|
}, {
|
|
141
101
|
key: "render",
|
|
142
102
|
value: function render() {
|
|
143
103
|
var _ref3;
|
|
144
|
-
|
|
145
104
|
var SEllipsis = this.Root;
|
|
146
105
|
var SContainer = _tooltip["default"];
|
|
147
106
|
var SNoTooltipContainer = _flexBox.Box;
|
|
148
107
|
var _this$asProps = this.asProps,
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
108
|
+
styles = _this$asProps.styles,
|
|
109
|
+
Children = _this$asProps.Children,
|
|
110
|
+
maxLine = _this$asProps.maxLine,
|
|
111
|
+
tooltip = _this$asProps.tooltip,
|
|
112
|
+
trim = _this$asProps.trim,
|
|
113
|
+
containerRect = _this$asProps.containerRect,
|
|
114
|
+
containerRef = _this$asProps.containerRef,
|
|
115
|
+
includeTooltipProps = _this$asProps.includeTooltipProps;
|
|
157
116
|
var visible = this.state.visible;
|
|
158
117
|
var text = (0, _reactToText["default"])((0, _getOriginChildren["default"])(Children));
|
|
159
118
|
var tooltipProps = (0, _pick["default"])(this.asProps, includeTooltipProps);
|
|
160
|
-
|
|
161
119
|
if (trim === 'middle') {
|
|
162
120
|
var _ref;
|
|
163
|
-
|
|
164
121
|
return _ref = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(EllipsisMiddle, _ref.cn("EllipsisMiddle", {
|
|
165
122
|
"text": text,
|
|
166
123
|
"styles": styles,
|
|
@@ -170,10 +127,8 @@ var RootEllipsis = /*#__PURE__*/function (_Component) {
|
|
|
170
127
|
"tooltipProps": tooltipProps
|
|
171
128
|
}));
|
|
172
129
|
}
|
|
173
|
-
|
|
174
130
|
if (tooltip) {
|
|
175
131
|
var _ref2;
|
|
176
|
-
|
|
177
132
|
return _ref2 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SContainer, _ref2.cn("SContainer", (0, _objectSpread2["default"])({
|
|
178
133
|
"interaction": "hover",
|
|
179
134
|
"title": text,
|
|
@@ -185,7 +140,6 @@ var RootEllipsis = /*#__PURE__*/function (_Component) {
|
|
|
185
140
|
"maxLine": maxLine
|
|
186
141
|
}), /*#__PURE__*/_react["default"].createElement(Children, _ref2.cn("Children", {}))));
|
|
187
142
|
}
|
|
188
|
-
|
|
189
143
|
return _ref3 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SNoTooltipContainer, _ref3.cn("SNoTooltipContainer", {}), /*#__PURE__*/_react["default"].createElement(SEllipsis, _ref3.cn("SEllipsis", {
|
|
190
144
|
"render": _flexBox.Box,
|
|
191
145
|
"ref": this.textRef,
|
|
@@ -195,7 +149,6 @@ var RootEllipsis = /*#__PURE__*/function (_Component) {
|
|
|
195
149
|
}]);
|
|
196
150
|
return RootEllipsis;
|
|
197
151
|
}(_core.Component);
|
|
198
|
-
|
|
199
152
|
(0, _defineProperty2["default"])(RootEllipsis, "displayName", 'Ellipsis');
|
|
200
153
|
(0, _defineProperty2["default"])(RootEllipsis, "style", style);
|
|
201
154
|
(0, _defineProperty2["default"])(RootEllipsis, "defaultProps", {
|
|
@@ -203,35 +156,32 @@ var RootEllipsis = /*#__PURE__*/function (_Component) {
|
|
|
203
156
|
tooltip: true,
|
|
204
157
|
includeTooltipProps: defaultTooltipProps
|
|
205
158
|
});
|
|
206
|
-
|
|
207
159
|
var EllipsisMiddle = function EllipsisMiddle(props) {
|
|
208
160
|
var styles = props.styles,
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
161
|
+
text = props.text,
|
|
162
|
+
tooltip = props.tooltip,
|
|
163
|
+
containerRect = props.containerRect,
|
|
164
|
+
containerRef = props.containerRef,
|
|
165
|
+
tooltipProps = props.tooltipProps;
|
|
214
166
|
var resizeElement = (0, _react.useRef)(null);
|
|
215
|
-
|
|
216
167
|
var _useState = (0, _react.useState)({
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
168
|
+
fontSize: '14',
|
|
169
|
+
symbolWidth: 0
|
|
170
|
+
}),
|
|
171
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
172
|
+
dimension = _useState2[0],
|
|
173
|
+
setDimension = _useState2[1];
|
|
224
174
|
var blockWidth = (0, _useResizeObserver.useResizeObserver)(resizeElement, containerRect).width;
|
|
225
175
|
(0, _react.useLayoutEffect)(function () {
|
|
226
176
|
var _containerRef$current;
|
|
227
|
-
|
|
228
177
|
var dateSpan = document.createElement('temporary-block');
|
|
229
178
|
dateSpan.setAttribute('style', "fontSize: ".concat(dimension.fontSize, "px"));
|
|
230
179
|
dateSpan.innerHTML = 'a';
|
|
231
180
|
document.body.appendChild(dateSpan);
|
|
232
181
|
var rect = dateSpan.getBoundingClientRect();
|
|
233
182
|
setDimension({
|
|
234
|
-
fontSize: window
|
|
183
|
+
fontSize: window
|
|
184
|
+
// @ts-ignore
|
|
235
185
|
.getComputedStyle((_containerRef$current = containerRef === null || containerRef === void 0 ? void 0 : containerRef.current) !== null && _containerRef$current !== void 0 ? _containerRef$current : resizeElement.current, null).getPropertyValue('font-size'),
|
|
236
186
|
symbolWidth: rect.width
|
|
237
187
|
});
|
|
@@ -243,10 +193,8 @@ var EllipsisMiddle = function EllipsisMiddle(props) {
|
|
|
243
193
|
var displayedSymbols = (0, _react.useMemo)(function () {
|
|
244
194
|
return Math.round(blockWidth / dimension.symbolWidth);
|
|
245
195
|
}, [blockWidth, dimension.symbolWidth]);
|
|
246
|
-
|
|
247
196
|
if (tooltip) {
|
|
248
197
|
var _ref4;
|
|
249
|
-
|
|
250
198
|
return _ref4 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SContainerMiddle, _ref4.cn("SContainerMiddle", (0, _objectSpread2["default"])({
|
|
251
199
|
"interaction": text.length > displayedSymbols ? 'hover' : 'none',
|
|
252
200
|
"title": text,
|
|
@@ -255,13 +203,11 @@ var EllipsisMiddle = function EllipsisMiddle(props) {
|
|
|
255
203
|
}, tooltipProps)), /*#__PURE__*/_react["default"].createElement(SBeginning, _ref4.cn("SBeginning", {}), text.substring(0, text.length - displayedSymbols / 2 - 1)), /*#__PURE__*/_react["default"].createElement(STail, _ref4.cn("STail", {}), text.substring(text.length - displayedSymbols / 2 - 1)));
|
|
256
204
|
} else {
|
|
257
205
|
var _ref5;
|
|
258
|
-
|
|
259
206
|
return _ref5 = (0, _core.sstyled)(styles), /*#__PURE__*/_react["default"].createElement(SContainerMiddle, _ref5.cn("SContainerMiddle", {
|
|
260
207
|
"ref": containerRef !== null && containerRef !== void 0 ? containerRef : resizeElement
|
|
261
208
|
}), /*#__PURE__*/_react["default"].createElement(SBeginning, _ref5.cn("SBeginning", {}), text.substring(0, text.length - displayedSymbols / 2 - 1)), /*#__PURE__*/_react["default"].createElement(STail, _ref5.cn("STail", {}), text.substring(text.length - displayedSymbols / 2 - 1)));
|
|
262
209
|
}
|
|
263
210
|
};
|
|
264
|
-
|
|
265
211
|
var Ellipsis = (0, _core["default"])(RootEllipsis);
|
|
266
212
|
var _default = Ellipsis;
|
|
267
213
|
exports["default"] = _default;
|
package/lib/cjs/Ellipsis.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ellipsis.js","names":["defaultTooltipProps","createMeasurerElement","element","styleElement","window","getComputedStyle","temporaryElement","document","createElement","style","display","padding","position","right","bottom","visibility","fontFamily","getPropertyValue","fontSize","fontWeight","innerHTML","isTextOverflowing","multiline","getBoundingClientRect","currentHeight","height","currentWidth","width","measuringElement","currentSize","initialSize","body","appendChild","whiteSpace","removeChild","RootEllipsis","visible","React","createRef","setState","showTooltip","asProps","maxLine","textRef","current","SEllipsis","Root","SContainer","Tooltip","SNoTooltipContainer","Box","styles","Children","tooltip","trim","containerRect","containerRef","includeTooltipProps","state","text","reactToText","getOriginChildren","tooltipProps","pick","sstyled","handlerVisibleChange","Component","EllipsisMiddle","props","resizeElement","useRef","useState","symbolWidth","dimension","setDimension","blockWidth","useResizeObserver","useLayoutEffect","dateSpan","setAttribute","rect","STail","SBeginning","SContainerMiddle","displayedSymbols","useMemo","Math","round","length","substring","Ellipsis","createComponent"],"sources":["../../src/Ellipsis.tsx"],"sourcesContent":["import React, { RefObject, useRef, useMemo, useState, useLayoutEffect } from 'react';\nimport createComponent, { Component, sstyled } from '@semcore/core';\nimport Tooltip from '@semcore/tooltip';\nimport { Box } from '@semcore/flex-box';\nimport { useResizeObserver } from './useResizeObserver';\n\nimport style from './style/ellipsis.shadow.css';\nimport reactToText from '@semcore/utils/lib/reactToText';\nimport getOriginChildren from '@semcore/utils/lib/getOriginChildren';\nimport pick from '@semcore/utils/lib/pick';\n\ntype AsProps = {\n maxLine?: number;\n trim?: 'end' | 'middle';\n tooltip?: boolean;\n styles?: React.CSSProperties;\n containerRect?: { width: number };\n // eslint-disable-next-line ssr-friendly/no-dom-globals-in-module-scope\n containerRef?: RefObject<HTMLElement | null>;\n includeTooltipProps?: string[];\n};\n\ntype AsPropsMiddle = {\n text: string;\n tooltip?: boolean;\n styles?: React.CSSProperties;\n containerRect?: { width: number };\n // eslint-disable-next-line ssr-friendly/no-dom-globals-in-module-scope\n containerRef?: RefObject<HTMLElement | null>;\n tooltipProps: { [propName: string]: unknown };\n};\n\nconst defaultTooltipProps = [\n 'title',\n 'theme',\n 'strategy',\n 'modifiers',\n 'placement',\n 'interaction',\n 'timeout',\n 'visible',\n 'defaultVisible',\n 'onVisibleChange',\n 'offset',\n 'preventOverflow',\n 'arrow',\n 'flip',\n 'computeStyles',\n 'eventListeners',\n 'onFirstUpdate',\n];\n\nconst createMeasurerElement = (element: HTMLElement) => {\n const styleElement = window.getComputedStyle(element, null);\n const temporaryElement = document.createElement('temporary-block');\n temporaryElement.style.display = 'inline-block';\n temporaryElement.style.padding = '0';\n temporaryElement.style.position = 'absolute';\n temporaryElement.style.right = '150%';\n temporaryElement.style.bottom = '150%';\n temporaryElement.style.visibility = 'hidden';\n temporaryElement.style.fontFamily = styleElement.getPropertyValue('font-family');\n temporaryElement.style.fontSize = styleElement.getPropertyValue('font-size');\n temporaryElement.style.fontWeight = styleElement.getPropertyValue('font-weight');\n\n temporaryElement.innerHTML = element.innerHTML;\n return temporaryElement;\n};\n\nfunction isTextOverflowing(element: HTMLElement | null, multiline: boolean): boolean {\n if (!element) return false;\n\n const { height: currentHeight, width: currentWidth } = element.getBoundingClientRect();\n const measuringElement = createMeasurerElement(element);\n let currentSize, initialSize;\n document.body.appendChild(measuringElement);\n if (multiline) {\n currentSize = currentHeight;\n measuringElement.style.width = `${currentWidth}px`;\n initialSize = measuringElement.getBoundingClientRect().height;\n } else {\n currentSize = currentWidth;\n measuringElement.style.whiteSpace = 'nowrap';\n initialSize = measuringElement.getBoundingClientRect().width;\n }\n document.body.removeChild(measuringElement);\n return currentSize < initialSize;\n}\n\nclass RootEllipsis extends Component<AsProps> {\n static displayName = 'Ellipsis';\n static style = style;\n static defaultProps: AsProps = {\n trim: 'end',\n tooltip: true,\n includeTooltipProps: defaultTooltipProps,\n };\n\n state = {\n visible: false,\n };\n\n textRef = React.createRef<HTMLElement>();\n\n showTooltip() {\n const { maxLine = 1 } = this.asProps;\n return isTextOverflowing(this.textRef.current, maxLine > 1);\n }\n\n handlerVisibleChange = (visible: boolean) => {\n this.setState({ visible: visible && this.showTooltip() });\n };\n\n render() {\n const SEllipsis = this.Root;\n const SContainer = Tooltip;\n const SNoTooltipContainer = Box;\n const {\n styles,\n Children,\n maxLine,\n tooltip,\n trim,\n containerRect,\n containerRef,\n includeTooltipProps,\n } = this.asProps;\n const { visible } = this.state;\n const text = reactToText(getOriginChildren(Children));\n const tooltipProps = pick(this.asProps, includeTooltipProps);\n\n if (trim === 'middle') {\n return sstyled(styles)(\n <EllipsisMiddle\n text={text}\n styles={styles}\n tooltip={tooltip}\n containerRect={containerRect}\n containerRef={containerRef}\n tooltipProps={tooltipProps}\n />,\n );\n }\n if (tooltip) {\n return sstyled(styles)(\n <SContainer\n interaction=\"hover\"\n title={text}\n visible={visible}\n onVisibleChange={this.handlerVisibleChange}\n {...tooltipProps}\n >\n <SEllipsis render={Box} ref={this.textRef} maxLine={maxLine}>\n <Children />\n </SEllipsis>\n </SContainer>,\n );\n }\n return sstyled(styles)(\n <SNoTooltipContainer>\n <SEllipsis render={Box} ref={this.textRef} maxLine={maxLine}>\n <Children />\n </SEllipsis>\n </SNoTooltipContainer>,\n );\n }\n}\n\nconst EllipsisMiddle: React.FC<AsPropsMiddle> = (props) => {\n const { styles, text, tooltip, containerRect, containerRef, tooltipProps } = props;\n const resizeElement = useRef<HTMLElement | null>(null);\n const [dimension, setDimension] = useState<{ fontSize: string; symbolWidth: number }>({\n fontSize: '14',\n symbolWidth: 0,\n });\n const blockWidth = useResizeObserver(resizeElement, containerRect).width;\n\n useLayoutEffect(() => {\n const dateSpan = document.createElement('temporary-block');\n dateSpan.setAttribute('style', `fontSize: ${dimension.fontSize}px`);\n dateSpan.innerHTML = 'a';\n document.body.appendChild(dateSpan);\n const rect = dateSpan.getBoundingClientRect();\n\n setDimension({\n fontSize: window\n // @ts-ignore\n .getComputedStyle(containerRef?.current ?? resizeElement.current, null)\n .getPropertyValue('font-size'),\n symbolWidth: rect.width,\n });\n document.body.removeChild(dateSpan);\n }, []);\n\n const STail = 'span';\n const SBeginning = 'span';\n const SContainerMiddle = Box;\n const displayedSymbols = useMemo(\n () => Math.round(blockWidth / dimension.symbolWidth),\n [blockWidth, dimension.symbolWidth],\n );\n\n if (tooltip) {\n return sstyled(styles)(\n <SContainerMiddle\n interaction={text.length > displayedSymbols ? 'hover' : 'none'}\n title={text}\n ref={containerRef ?? resizeElement}\n tag={Tooltip}\n {...tooltipProps}\n >\n <SBeginning>{text.substring(0, text.length - displayedSymbols / 2 - 1)}</SBeginning>\n <STail>{text.substring(text.length - displayedSymbols / 2 - 1)}</STail>\n </SContainerMiddle>,\n ) as any;\n } else {\n return sstyled(styles)(\n <SContainerMiddle ref={containerRef ?? resizeElement}>\n <SBeginning>{text.substring(0, text.length - displayedSymbols / 2 - 1)}</SBeginning>\n <STail>{text.substring(text.length - displayedSymbols / 2 - 1)}</STail>\n </SContainerMiddle>,\n ) as any;\n }\n};\n\nconst Ellipsis = createComponent(RootEllipsis);\n\nexport default Ellipsis;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Ellipsis.js","names":["_core","_interopRequireWildcard","require","_react","_tooltip","_interopRequireDefault","_flexBox","_useResizeObserver","_reactToText","_getOriginChildren","_pick","style","sstyled","insert","defaultTooltipProps","createMeasurerElement","element","styleElement","window","getComputedStyle","temporaryElement","document","createElement","display","padding","position","right","bottom","visibility","fontFamily","getPropertyValue","fontSize","fontWeight","innerHTML","isTextOverflowing","multiline","_element$getBoundingC","getBoundingClientRect","currentHeight","height","currentWidth","width","measuringElement","currentSize","initialSize","body","appendChild","concat","whiteSpace","removeChild","RootEllipsis","_Component","_inherits2","_super","_createSuper2","_this","_classCallCheck2","_len","arguments","length","args","Array","_key","call","apply","_defineProperty2","_assertThisInitialized2","visible","React","createRef","setState","showTooltip","_createClass2","key","value","_this$asProps$maxLine","asProps","maxLine","textRef","current","render","_ref3","SEllipsis","Root","SContainer","Tooltip","SNoTooltipContainer","Box","_this$asProps","styles","Children","tooltip","trim","containerRect","containerRef","includeTooltipProps","state","text","reactToText","getOriginChildren","tooltipProps","pick","_ref","EllipsisMiddle","cn","_ref2","_objectSpread2","handlerVisibleChange","Component","props","resizeElement","useRef","_useState","useState","symbolWidth","_useState2","_slicedToArray2","dimension","setDimension","blockWidth","useResizeObserver","useLayoutEffect","_containerRef$current","dateSpan","setAttribute","rect","STail","SBeginning","SContainerMiddle","displayedSymbols","useMemo","Math","round","_ref4","substring","_ref5","Ellipsis","createComponent","_default","exports"],"sources":["../../src/Ellipsis.tsx"],"sourcesContent":["import React, { RefObject, useRef, useMemo, useState, useLayoutEffect } from 'react';\nimport createComponent, { Component, sstyled } from '@semcore/core';\nimport Tooltip from '@semcore/tooltip';\nimport { Box } from '@semcore/flex-box';\nimport { useResizeObserver } from './useResizeObserver';\n\nimport style from './style/ellipsis.shadow.css';\nimport reactToText from '@semcore/utils/lib/reactToText';\nimport getOriginChildren from '@semcore/utils/lib/getOriginChildren';\nimport pick from '@semcore/utils/lib/pick';\n\ntype AsProps = {\n maxLine?: number;\n trim?: 'end' | 'middle';\n tooltip?: boolean;\n styles?: React.CSSProperties;\n containerRect?: { width: number };\n // eslint-disable-next-line ssr-friendly/no-dom-globals-in-module-scope\n containerRef?: RefObject<HTMLElement | null>;\n includeTooltipProps?: string[];\n};\n\ntype AsPropsMiddle = {\n text: string;\n tooltip?: boolean;\n styles?: React.CSSProperties;\n containerRect?: { width: number };\n // eslint-disable-next-line ssr-friendly/no-dom-globals-in-module-scope\n containerRef?: RefObject<HTMLElement | null>;\n tooltipProps: { [propName: string]: unknown };\n};\n\nconst defaultTooltipProps = [\n 'title',\n 'theme',\n 'strategy',\n 'modifiers',\n 'placement',\n 'interaction',\n 'timeout',\n 'visible',\n 'defaultVisible',\n 'onVisibleChange',\n 'offset',\n 'preventOverflow',\n 'arrow',\n 'flip',\n 'computeStyles',\n 'eventListeners',\n 'onFirstUpdate',\n];\n\nconst createMeasurerElement = (element: HTMLElement) => {\n const styleElement = window.getComputedStyle(element, null);\n const temporaryElement = document.createElement('temporary-block');\n temporaryElement.style.display = 'inline-block';\n temporaryElement.style.padding = '0';\n temporaryElement.style.position = 'absolute';\n temporaryElement.style.right = '150%';\n temporaryElement.style.bottom = '150%';\n temporaryElement.style.visibility = 'hidden';\n temporaryElement.style.fontFamily = styleElement.getPropertyValue('font-family');\n temporaryElement.style.fontSize = styleElement.getPropertyValue('font-size');\n temporaryElement.style.fontWeight = styleElement.getPropertyValue('font-weight');\n\n temporaryElement.innerHTML = element.innerHTML;\n return temporaryElement;\n};\n\nfunction isTextOverflowing(element: HTMLElement | null, multiline: boolean): boolean {\n if (!element) return false;\n\n const { height: currentHeight, width: currentWidth } = element.getBoundingClientRect();\n const measuringElement = createMeasurerElement(element);\n let currentSize, initialSize;\n document.body.appendChild(measuringElement);\n if (multiline) {\n currentSize = currentHeight;\n measuringElement.style.width = `${currentWidth}px`;\n initialSize = measuringElement.getBoundingClientRect().height;\n } else {\n currentSize = currentWidth;\n measuringElement.style.whiteSpace = 'nowrap';\n initialSize = measuringElement.getBoundingClientRect().width;\n }\n document.body.removeChild(measuringElement);\n return currentSize < initialSize;\n}\n\nclass RootEllipsis extends Component<AsProps> {\n static displayName = 'Ellipsis';\n static style = style;\n static defaultProps: AsProps = {\n trim: 'end',\n tooltip: true,\n includeTooltipProps: defaultTooltipProps,\n };\n\n state = {\n visible: false,\n };\n\n textRef = React.createRef<HTMLElement>();\n\n showTooltip() {\n const { maxLine = 1 } = this.asProps;\n return isTextOverflowing(this.textRef.current, maxLine > 1);\n }\n\n handlerVisibleChange = (visible: boolean) => {\n this.setState({ visible: visible && this.showTooltip() });\n };\n\n render() {\n const SEllipsis = this.Root;\n const SContainer = Tooltip;\n const SNoTooltipContainer = Box;\n const {\n styles,\n Children,\n maxLine,\n tooltip,\n trim,\n containerRect,\n containerRef,\n includeTooltipProps,\n } = this.asProps;\n const { visible } = this.state;\n const text = reactToText(getOriginChildren(Children));\n const tooltipProps = pick(this.asProps, includeTooltipProps);\n\n if (trim === 'middle') {\n return sstyled(styles)(\n <EllipsisMiddle\n text={text}\n styles={styles}\n tooltip={tooltip}\n containerRect={containerRect}\n containerRef={containerRef}\n tooltipProps={tooltipProps}\n />,\n );\n }\n if (tooltip) {\n return sstyled(styles)(\n <SContainer\n interaction=\"hover\"\n title={text}\n visible={visible}\n onVisibleChange={this.handlerVisibleChange}\n {...tooltipProps}\n >\n <SEllipsis render={Box} ref={this.textRef} maxLine={maxLine}>\n <Children />\n </SEllipsis>\n </SContainer>,\n );\n }\n return sstyled(styles)(\n <SNoTooltipContainer>\n <SEllipsis render={Box} ref={this.textRef} maxLine={maxLine}>\n <Children />\n </SEllipsis>\n </SNoTooltipContainer>,\n );\n }\n}\n\nconst EllipsisMiddle: React.FC<AsPropsMiddle> = (props) => {\n const { styles, text, tooltip, containerRect, containerRef, tooltipProps } = props;\n const resizeElement = useRef<HTMLElement | null>(null);\n const [dimension, setDimension] = useState<{ fontSize: string; symbolWidth: number }>({\n fontSize: '14',\n symbolWidth: 0,\n });\n const blockWidth = useResizeObserver(resizeElement, containerRect).width;\n\n useLayoutEffect(() => {\n const dateSpan = document.createElement('temporary-block');\n dateSpan.setAttribute('style', `fontSize: ${dimension.fontSize}px`);\n dateSpan.innerHTML = 'a';\n document.body.appendChild(dateSpan);\n const rect = dateSpan.getBoundingClientRect();\n\n setDimension({\n fontSize: window\n // @ts-ignore\n .getComputedStyle(containerRef?.current ?? resizeElement.current, null)\n .getPropertyValue('font-size'),\n symbolWidth: rect.width,\n });\n document.body.removeChild(dateSpan);\n }, []);\n\n const STail = 'span';\n const SBeginning = 'span';\n const SContainerMiddle = Box;\n const displayedSymbols = useMemo(\n () => Math.round(blockWidth / dimension.symbolWidth),\n [blockWidth, dimension.symbolWidth],\n );\n\n if (tooltip) {\n return sstyled(styles)(\n <SContainerMiddle\n interaction={text.length > displayedSymbols ? 'hover' : 'none'}\n title={text}\n ref={containerRef ?? resizeElement}\n tag={Tooltip}\n {...tooltipProps}\n >\n <SBeginning>{text.substring(0, text.length - displayedSymbols / 2 - 1)}</SBeginning>\n <STail>{text.substring(text.length - displayedSymbols / 2 - 1)}</STail>\n </SContainerMiddle>,\n ) as any;\n } else {\n return sstyled(styles)(\n <SContainerMiddle ref={containerRef ?? resizeElement}>\n <SBeginning>{text.substring(0, text.length - displayedSymbols / 2 - 1)}</SBeginning>\n <STail>{text.substring(text.length - displayedSymbols / 2 - 1)}</STail>\n </SContainerMiddle>,\n ) as any;\n }\n};\n\nconst Ellipsis = createComponent(RootEllipsis);\n\nexport default Ellipsis;\n"],"mappings":";;;;;;;;;;;;;;;;AACA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AADA,IAAAC,MAAA,GAAAF,uBAAA,CAAAC,OAAA;AAEA,IAAAE,QAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AACA,IAAAK,kBAAA,GAAAL,OAAA;AAGA,IAAAM,YAAA,GAAAH,sBAAA,CAAAH,OAAA;AACA,IAAAO,kBAAA,GAAAJ,sBAAA,CAAAH,OAAA;AACA,IAAAQ,KAAA,GAAAL,sBAAA,CAAAH,OAAA;AAA2C;AAAA,IAAAS,KAAA,+BAAAX,KAAA,CAAAY,OAAA,CAAAC,MAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;AAAA;AAuB3C,IAAMC,mBAAmB,GAAG,CAC1B,OAAO,EACP,OAAO,EACP,UAAU,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,MAAM,EACN,eAAe,EACf,gBAAgB,EAChB,eAAe,CAChB;AAED,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAAIC,OAAoB,EAAK;EACtD,IAAMC,YAAY,GAAGC,MAAM,CAACC,gBAAgB,CAACH,OAAO,EAAE,IAAI,CAAC;EAC3D,IAAMI,gBAAgB,GAAGC,QAAQ,CAACC,aAAa,CAAC,iBAAiB,CAAC;EAClEF,gBAAgB,CAACT,KAAK,CAACY,OAAO,GAAG,cAAc;EAC/CH,gBAAgB,CAACT,KAAK,CAACa,OAAO,GAAG,GAAG;EACpCJ,gBAAgB,CAACT,KAAK,CAACc,QAAQ,GAAG,UAAU;EAC5CL,gBAAgB,CAACT,KAAK,CAACe,KAAK,GAAG,MAAM;EACrCN,gBAAgB,CAACT,KAAK,CAACgB,MAAM,GAAG,MAAM;EACtCP,gBAAgB,CAACT,KAAK,CAACiB,UAAU,GAAG,QAAQ;EAC5CR,gBAAgB,CAACT,KAAK,CAACkB,UAAU,GAAGZ,YAAY,CAACa,gBAAgB,CAAC,aAAa,CAAC;EAChFV,gBAAgB,CAACT,KAAK,CAACoB,QAAQ,GAAGd,YAAY,CAACa,gBAAgB,CAAC,WAAW,CAAC;EAC5EV,gBAAgB,CAACT,KAAK,CAACqB,UAAU,GAAGf,YAAY,CAACa,gBAAgB,CAAC,aAAa,CAAC;EAEhFV,gBAAgB,CAACa,SAAS,GAAGjB,OAAO,CAACiB,SAAS;EAC9C,OAAOb,gBAAgB;AACzB,CAAC;AAED,SAASc,iBAAiBA,CAAClB,OAA2B,EAAEmB,SAAkB,EAAW;EACnF,IAAI,CAACnB,OAAO,EAAE,OAAO,KAAK;EAE1B,IAAAoB,qBAAA,GAAuDpB,OAAO,CAACqB,qBAAqB,EAAE;IAAtEC,aAAa,GAAAF,qBAAA,CAArBG,MAAM;IAAwBC,YAAY,GAAAJ,qBAAA,CAAnBK,KAAK;EACpC,IAAMC,gBAAgB,GAAG3B,qBAAqB,CAACC,OAAO,CAAC;EACvD,IAAI2B,WAAW,EAAEC,WAAW;EAC5BvB,QAAQ,CAACwB,IAAI,CAACC,WAAW,CAACJ,gBAAgB,CAAC;EAC3C,IAAIP,SAAS,EAAE;IACbQ,WAAW,GAAGL,aAAa;IAC3BI,gBAAgB,CAAC/B,KAAK,CAAC8B,KAAK,MAAAM,MAAA,CAAMP,YAAY,OAAI;IAClDI,WAAW,GAAGF,gBAAgB,CAACL,qBAAqB,EAAE,CAACE,MAAM;EAC/D,CAAC,MAAM;IACLI,WAAW,GAAGH,YAAY;IAC1BE,gBAAgB,CAAC/B,KAAK,CAACqC,UAAU,GAAG,QAAQ;IAC5CJ,WAAW,GAAGF,gBAAgB,CAACL,qBAAqB,EAAE,CAACI,KAAK;EAC9D;EACApB,QAAQ,CAACwB,IAAI,CAACI,WAAW,CAACP,gBAAgB,CAAC;EAC3C,OAAOC,WAAW,GAAGC,WAAW;AAClC;AAAC,IAEKM,YAAY,0BAAAC,UAAA;EAAA,IAAAC,UAAA,aAAAF,YAAA,EAAAC,UAAA;EAAA,IAAAE,MAAA,OAAAC,aAAA,aAAAJ,YAAA;EAAA,SAAAA,aAAA;IAAA,IAAAK,KAAA;IAAA,IAAAC,gBAAA,mBAAAN,YAAA;IAAA,SAAAO,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAC,IAAA,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;MAAAF,IAAA,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA;IAAA;IAAAP,KAAA,GAAAF,MAAA,CAAAU,IAAA,CAAAC,KAAA,CAAAX,MAAA,SAAAN,MAAA,CAAAa,IAAA;IAAA,IAAAK,gBAAA,iBAAAC,uBAAA,aAAAX,KAAA,YASR;MACNY,OAAO,EAAE;IACX,CAAC;IAAA,IAAAF,gBAAA,iBAAAC,uBAAA,aAAAX,KAAA,2BAESa,iBAAK,CAACC,SAAS,EAAe;IAAA,IAAAJ,gBAAA,iBAAAC,uBAAA,aAAAX,KAAA,2BAOjB,UAACY,OAAgB,EAAK;MAC3CZ,KAAA,CAAKe,QAAQ,CAAC;QAAEH,OAAO,EAAEA,OAAO,IAAIZ,KAAA,CAAKgB,WAAW;MAAG,CAAC,CAAC;IAC3D,CAAC;IAAA,OAAAhB,KAAA;EAAA;EAAA,IAAAiB,aAAA,aAAAtB,YAAA;IAAAuB,GAAA;IAAAC,KAAA,EAPD,SAAAH,YAAA,EAAc;MACZ,IAAAI,qBAAA,GAAwB,IAAI,CAACC,OAAO,CAA5BC,OAAO;QAAPA,OAAO,GAAAF,qBAAA,cAAG,CAAC,GAAAA,qBAAA;MACnB,OAAOzC,iBAAiB,CAAC,IAAI,CAAC4C,OAAO,CAACC,OAAO,EAAEF,OAAO,GAAG,CAAC,CAAC;IAC7D;EAAC;IAAAJ,GAAA;IAAAC,KAAA,EAMD,SAAAM,OAAA,EAAS;MAAA,IAAAC,KAAA;MACP,IAAMC,SAAS,GAAG,IAAI,CAACC,IAAI;MAC3B,IAAMC,UAAU,GAAGC,mBAAO;MAC1B,IAAMC,mBAAmB,GAAGC,YAAG;MAC/B,IAAAC,aAAA,GASI,IAAI,CAACZ,OAAO;QARda,MAAM,GAAAD,aAAA,CAANC,MAAM;QACNC,QAAQ,GAAAF,aAAA,CAARE,QAAQ;QACRb,OAAO,GAAAW,aAAA,CAAPX,OAAO;QACPc,OAAO,GAAAH,aAAA,CAAPG,OAAO;QACPC,IAAI,GAAAJ,aAAA,CAAJI,IAAI;QACJC,aAAa,GAAAL,aAAA,CAAbK,aAAa;QACbC,YAAY,GAAAN,aAAA,CAAZM,YAAY;QACZC,mBAAmB,GAAAP,aAAA,CAAnBO,mBAAmB;MAErB,IAAQ5B,OAAO,GAAK,IAAI,CAAC6B,KAAK,CAAtB7B,OAAO;MACf,IAAM8B,IAAI,GAAG,IAAAC,uBAAW,EAAC,IAAAC,6BAAiB,EAACT,QAAQ,CAAC,CAAC;MACrD,IAAMU,YAAY,GAAG,IAAAC,gBAAI,EAAC,IAAI,CAACzB,OAAO,EAAEmB,mBAAmB,CAAC;MAE5D,IAAIH,IAAI,KAAK,QAAQ,EAAE;QAAA,IAAAU,IAAA;QACrB,OAAAA,IAAA,GAAO,IAAA1F,aAAO,EAAC6E,MAAM,CAAC,eACpBtF,MAAA,YAAAmB,aAAA,CAACiF,cAAc,EAAAD,IAAA,CAAAE,EAAA;UAAA,QACPP,IAAI;UAAA,UACFR,MAAM;UAAA,WACLE,OAAO;UAAA,iBACDE,aAAa;UAAA,gBACdC,YAAY;UAAA,gBACZM;QAAY,GAC1B;MAEN;MACA,IAAIT,OAAO,EAAE;QAAA,IAAAc,KAAA;QACX,OAAAA,KAAA,GAAO,IAAA7F,aAAO,EAAC6E,MAAM,CAAC,eACpBtF,MAAA,YAAAmB,aAAA,CAAC8D,UAAU,EAAAqB,KAAA,CAAAD,EAAA,mBAAAE,cAAA;UAAA,eACG,OAAO;UAAA,SACZT,IAAI;UAAA,WACF9B,OAAO;UAAA,mBACC,IAAI,CAACwC;QAAoB,GACtCP,YAAY,iBAEhBjG,MAAA,YAAAmB,aAAA,CAAC4D,SAAS,EAAAuB,KAAA,CAAAD,EAAA;UAAA,UAASjB,YAAG;UAAA,OAAO,IAAI,CAACT,OAAO;UAAA,WAAWD;QAAO,iBACzD1E,MAAA,YAAAmB,aAAA,CAACoE,QAAQ,EAAAe,KAAA,CAAAD,EAAA,iBAAG,CACF,CACD;MAEjB;MACA,OAAAvB,KAAA,GAAO,IAAArE,aAAO,EAAC6E,MAAM,CAAC,eACpBtF,MAAA,YAAAmB,aAAA,CAACgE,mBAAmB,EAAAL,KAAA,CAAAuB,EAAA,0CAClBrG,MAAA,YAAAmB,aAAA,CAAC4D,SAAS,EAAAD,KAAA,CAAAuB,EAAA;QAAA,UAASjB,YAAG;QAAA,OAAO,IAAI,CAACT,OAAO;QAAA,WAAWD;MAAO,iBACzD1E,MAAA,YAAAmB,aAAA,CAACoE,QAAQ,EAAAT,KAAA,CAAAuB,EAAA,iBAAG,CACF,CACQ;IAE1B;EAAC;EAAA,OAAAtD,YAAA;AAAA,EA5EwB0D,eAAS;AAAA,IAAA3C,gBAAA,aAA9Bf,YAAY,iBACK,UAAU;AAAA,IAAAe,gBAAA,aAD3Bf,YAAY,WAEDvC,KAAK;AAAA,IAAAsD,gBAAA,aAFhBf,YAAY,kBAGe;EAC7B0C,IAAI,EAAE,KAAK;EACXD,OAAO,EAAE,IAAI;EACbI,mBAAmB,EAAEjF;AACvB,CAAC;AAwEH,IAAMyF,cAAuC,GAAG,SAA1CA,cAAuCA,CAAIM,KAAK,EAAK;EACzD,IAAQpB,MAAM,GAA+DoB,KAAK,CAA1EpB,MAAM;IAAEQ,IAAI,GAAyDY,KAAK,CAAlEZ,IAAI;IAAEN,OAAO,GAAgDkB,KAAK,CAA5DlB,OAAO;IAAEE,aAAa,GAAiCgB,KAAK,CAAnDhB,aAAa;IAAEC,YAAY,GAAmBe,KAAK,CAApCf,YAAY;IAAEM,YAAY,GAAKS,KAAK,CAAtBT,YAAY;EACxE,IAAMU,aAAa,GAAG,IAAAC,aAAM,EAAqB,IAAI,CAAC;EACtD,IAAAC,SAAA,GAAkC,IAAAC,eAAQ,EAA4C;MACpFlF,QAAQ,EAAE,IAAI;MACdmF,WAAW,EAAE;IACf,CAAC,CAAC;IAAAC,UAAA,OAAAC,eAAA,aAAAJ,SAAA;IAHKK,SAAS,GAAAF,UAAA;IAAEG,YAAY,GAAAH,UAAA;EAI9B,IAAMI,UAAU,GAAG,IAAAC,oCAAiB,EAACV,aAAa,EAAEjB,aAAa,CAAC,CAACpD,KAAK;EAExE,IAAAgF,sBAAe,EAAC,YAAM;IAAA,IAAAC,qBAAA;IACpB,IAAMC,QAAQ,GAAGtG,QAAQ,CAACC,aAAa,CAAC,iBAAiB,CAAC;IAC1DqG,QAAQ,CAACC,YAAY,CAAC,OAAO,eAAA7E,MAAA,CAAesE,SAAS,CAACtF,QAAQ,QAAK;IACnE4F,QAAQ,CAAC1F,SAAS,GAAG,GAAG;IACxBZ,QAAQ,CAACwB,IAAI,CAACC,WAAW,CAAC6E,QAAQ,CAAC;IACnC,IAAME,IAAI,GAAGF,QAAQ,CAACtF,qBAAqB,EAAE;IAE7CiF,YAAY,CAAC;MACXvF,QAAQ,EAAEb;MACR;MAAA,CACCC,gBAAgB,EAAAuG,qBAAA,GAAC5B,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEf,OAAO,cAAA2C,qBAAA,cAAAA,qBAAA,GAAIZ,aAAa,CAAC/B,OAAO,EAAE,IAAI,CAAC,CACtEjD,gBAAgB,CAAC,WAAW,CAAC;MAChCoF,WAAW,EAAEW,IAAI,CAACpF;IACpB,CAAC,CAAC;IACFpB,QAAQ,CAACwB,IAAI,CAACI,WAAW,CAAC0E,QAAQ,CAAC;EACrC,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMG,KAAK,GAAG,MAAM;EACpB,IAAMC,UAAU,GAAG,MAAM;EACzB,IAAMC,gBAAgB,GAAGzC,YAAG;EAC5B,IAAM0C,gBAAgB,GAAG,IAAAC,cAAO,EAC9B;IAAA,OAAMC,IAAI,CAACC,KAAK,CAACb,UAAU,GAAGF,SAAS,CAACH,WAAW,CAAC;EAAA,GACpD,CAACK,UAAU,EAAEF,SAAS,CAACH,WAAW,CAAC,CACpC;EAED,IAAIvB,OAAO,EAAE;IAAA,IAAA0C,KAAA;IACX,OAAAA,KAAA,GAAO,IAAAzH,aAAO,EAAC6E,MAAM,CAAC,eACpBtF,MAAA,YAAAmB,aAAA,CAAC0G,gBAAgB,EAAAK,KAAA,CAAA7B,EAAA,yBAAAE,cAAA;MAAA,eACFT,IAAI,CAACtC,MAAM,GAAGsE,gBAAgB,GAAG,OAAO,GAAG,MAAM;MAAA,SACvDhC,IAAI;MAAA,OACNH,YAAY,aAAZA,YAAY,cAAZA,YAAY,GAAIgB,aAAa;MAAA,OAC7BzB;IAAO,GACRe,YAAY,iBAEhBjG,MAAA,YAAAmB,aAAA,CAACyG,UAAU,EAAAM,KAAA,CAAA7B,EAAA,oBAAEP,IAAI,CAACqC,SAAS,CAAC,CAAC,EAAErC,IAAI,CAACtC,MAAM,GAAGsE,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAc,eACpF9H,MAAA,YAAAmB,aAAA,CAACwG,KAAK,EAAAO,KAAA,CAAA7B,EAAA,eAAEP,IAAI,CAACqC,SAAS,CAACrC,IAAI,CAACtC,MAAM,GAAGsE,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAS,CACtD;EAEvB,CAAC,MAAM;IAAA,IAAAM,KAAA;IACL,OAAAA,KAAA,GAAO,IAAA3H,aAAO,EAAC6E,MAAM,CAAC,eACpBtF,MAAA,YAAAmB,aAAA,CAAC0G,gBAAgB,EAAAO,KAAA,CAAA/B,EAAA;MAAA,OAAMV,YAAY,aAAZA,YAAY,cAAZA,YAAY,GAAIgB;IAAa,iBAClD3G,MAAA,YAAAmB,aAAA,CAACyG,UAAU,EAAAQ,KAAA,CAAA/B,EAAA,oBAAEP,IAAI,CAACqC,SAAS,CAAC,CAAC,EAAErC,IAAI,CAACtC,MAAM,GAAGsE,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAc,eACpF9H,MAAA,YAAAmB,aAAA,CAACwG,KAAK,EAAAS,KAAA,CAAA/B,EAAA,eAAEP,IAAI,CAACqC,SAAS,CAACrC,IAAI,CAACtC,MAAM,GAAGsE,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAS,CACtD;EAEvB;AACF,CAAC;AAED,IAAMO,QAAQ,GAAG,IAAAC,gBAAe,EAACvF,YAAY,CAAC;AAAC,IAAAwF,QAAA,GAEhCF,QAAQ;AAAAG,OAAA,cAAAD,QAAA"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
@@ -17,8 +16,6 @@ Object.defineProperty(exports, "useResizeObserver", {
|
|
|
17
16
|
return _useResizeObserver.useResizeObserver;
|
|
18
17
|
}
|
|
19
18
|
});
|
|
20
|
-
|
|
21
19
|
var _Ellipsis = _interopRequireDefault(require("./Ellipsis"));
|
|
22
|
-
|
|
23
20
|
var _useResizeObserver = require("./useResizeObserver");
|
|
24
21
|
//# sourceMappingURL=index.js.map
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["export { default } from './Ellipsis';\nexport { useResizeObserver } from './useResizeObserver';\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["_Ellipsis","_interopRequireDefault","require","_useResizeObserver"],"sources":["../../src/index.ts"],"sourcesContent":["export { default } from './Ellipsis';\nexport { useResizeObserver } from './useResizeObserver';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAD,OAAA"}
|
|
@@ -1,24 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.useResizeObserver = void 0;
|
|
9
|
-
|
|
10
8
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
-
|
|
12
9
|
var _react = require("react");
|
|
13
|
-
|
|
14
10
|
var _useEnhancedEffect = _interopRequireDefault(require("@semcore/utils/lib/use/useEnhancedEffect"));
|
|
15
|
-
|
|
16
11
|
var useResizeObserver = function useResizeObserver(ref, hookOverride) {
|
|
17
12
|
var _useState = (0, _react.useState)(0),
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
14
|
+
width = _useState2[0],
|
|
15
|
+
setWidth = _useState2[1];
|
|
22
16
|
var handleResize = (0, _react.useCallback)(function (entries) {
|
|
23
17
|
setWidth(entries[0].contentRect.width);
|
|
24
18
|
}, []);
|
|
@@ -26,11 +20,9 @@ var useResizeObserver = function useResizeObserver(ref, hookOverride) {
|
|
|
26
20
|
if (!ref.current) {
|
|
27
21
|
return;
|
|
28
22
|
}
|
|
29
|
-
|
|
30
23
|
if (hookOverride) {
|
|
31
24
|
return;
|
|
32
25
|
}
|
|
33
|
-
|
|
34
26
|
var ro = new ResizeObserver(function (entries) {
|
|
35
27
|
handleResize(entries);
|
|
36
28
|
});
|
|
@@ -39,15 +31,12 @@ var useResizeObserver = function useResizeObserver(ref, hookOverride) {
|
|
|
39
31
|
ro.disconnect();
|
|
40
32
|
};
|
|
41
33
|
}, [hookOverride]);
|
|
42
|
-
|
|
43
34
|
if (hookOverride) {
|
|
44
35
|
return hookOverride;
|
|
45
36
|
}
|
|
46
|
-
|
|
47
37
|
return {
|
|
48
38
|
width: width
|
|
49
39
|
};
|
|
50
40
|
};
|
|
51
|
-
|
|
52
41
|
exports.useResizeObserver = useResizeObserver;
|
|
53
42
|
//# sourceMappingURL=useResizeObserver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useResizeObserver.js","names":["useResizeObserver","ref","hookOverride","useState","width","setWidth","handleResize","useCallback","entries","contentRect","useEnhancedEffect","current","ro","ResizeObserver","observe","disconnect"],"sources":["../../src/useResizeObserver.tsx"],"sourcesContent":["import { RefObject, useCallback, useState } from 'react';\nimport useEnhancedEffect from '@semcore/utils/lib/use/useEnhancedEffect';\n\nexport const useResizeObserver = (\n ref: RefObject<HTMLElement>,\n hookOverride?: { width: number },\n) => {\n const [width, setWidth] = useState<number>(0);\n\n const handleResize = useCallback((entries: ResizeObserverEntry[]) => {\n setWidth(entries[0].contentRect.width);\n }, []);\n\n useEnhancedEffect(() => {\n if (!ref.current) {\n return;\n }\n\n if (hookOverride) {\n return;\n }\n\n const ro = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n handleResize(entries);\n });\n\n ro.observe(ref.current);\n\n return () => {\n ro.disconnect();\n };\n }, [hookOverride]);\n\n if (hookOverride) {\n return hookOverride;\n }\n return { width };\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"useResizeObserver.js","names":["_react","require","_useEnhancedEffect","_interopRequireDefault","useResizeObserver","ref","hookOverride","_useState","useState","_useState2","_slicedToArray2","width","setWidth","handleResize","useCallback","entries","contentRect","useEnhancedEffect","current","ro","ResizeObserver","observe","disconnect","exports"],"sources":["../../src/useResizeObserver.tsx"],"sourcesContent":["import { RefObject, useCallback, useState } from 'react';\nimport useEnhancedEffect from '@semcore/utils/lib/use/useEnhancedEffect';\n\nexport const useResizeObserver = (\n ref: RefObject<HTMLElement>,\n hookOverride?: { width: number },\n) => {\n const [width, setWidth] = useState<number>(0);\n\n const handleResize = useCallback((entries: ResizeObserverEntry[]) => {\n setWidth(entries[0].contentRect.width);\n }, []);\n\n useEnhancedEffect(() => {\n if (!ref.current) {\n return;\n }\n\n if (hookOverride) {\n return;\n }\n\n const ro = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n handleResize(entries);\n });\n\n ro.observe(ref.current);\n\n return () => {\n ro.disconnect();\n };\n }, [hookOverride]);\n\n if (hookOverride) {\n return hookOverride;\n }\n return { width };\n};\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEO,IAAMG,iBAAiB,GAAG,SAApBA,iBAAiBA,CAC5BC,GAA2B,EAC3BC,YAAgC,EAC7B;EACH,IAAAC,SAAA,GAA0B,IAAAC,eAAQ,EAAS,CAAC,CAAC;IAAAC,UAAA,OAAAC,eAAA,aAAAH,SAAA;IAAtCI,KAAK,GAAAF,UAAA;IAAEG,QAAQ,GAAAH,UAAA;EAEtB,IAAMI,YAAY,GAAG,IAAAC,kBAAW,EAAC,UAACC,OAA8B,EAAK;IACnEH,QAAQ,CAACG,OAAO,CAAC,CAAC,CAAC,CAACC,WAAW,CAACL,KAAK,CAAC;EACxC,CAAC,EAAE,EAAE,CAAC;EAEN,IAAAM,6BAAiB,EAAC,YAAM;IACtB,IAAI,CAACZ,GAAG,CAACa,OAAO,EAAE;MAChB;IACF;IAEA,IAAIZ,YAAY,EAAE;MAChB;IACF;IAEA,IAAMa,EAAE,GAAG,IAAIC,cAAc,CAAC,UAACL,OAA8B,EAAK;MAChEF,YAAY,CAACE,OAAO,CAAC;IACvB,CAAC,CAAC;IAEFI,EAAE,CAACE,OAAO,CAAChB,GAAG,CAACa,OAAO,CAAC;IAEvB,OAAO,YAAM;MACXC,EAAE,CAACG,UAAU,EAAE;IACjB,CAAC;EACH,CAAC,EAAE,CAAChB,YAAY,CAAC,CAAC;EAElB,IAAIA,YAAY,EAAE;IAChB,OAAOA,YAAY;EACrB;EACA,OAAO;IAAEK,KAAK,EAALA;EAAM,CAAC;AAClB,CAAC;AAACY,OAAA,CAAAnB,iBAAA,GAAAA,iBAAA"}
|
package/lib/es6/Ellipsis.js
CHANGED
|
@@ -12,31 +12,21 @@ import createComponent, { Component, sstyled } from '@semcore/core';
|
|
|
12
12
|
import Tooltip from '@semcore/tooltip';
|
|
13
13
|
import { Box } from '@semcore/flex-box';
|
|
14
14
|
import { useResizeObserver } from './useResizeObserver';
|
|
15
|
-
|
|
16
15
|
/*__reshadow-styles__:"./style/ellipsis.shadow.css"*/
|
|
17
|
-
var style = (
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"__SContainer": "___SContainer_abdtp_gg_",
|
|
27
|
-
"__SNoTooltipContainer": "___SNoTooltipContainer_abdtp_gg_",
|
|
28
|
-
"__SContainerMiddle": "___SContainerMiddle_abdtp_gg_",
|
|
29
|
-
"__SBeginning": "___SBeginning_abdtp_gg_",
|
|
30
|
-
"__SEllipsis": "___SEllipsis_abdtp_gg_",
|
|
31
|
-
"_maxLine": "__maxLine_abdtp_gg_",
|
|
32
|
-
"--maxLine": "--maxLine_abdtp",
|
|
33
|
-
"__STail": "___STail_abdtp_gg_"
|
|
16
|
+
var style = ( /*__reshadow_css_start__*/_sstyled.insert( /*__inner_css_start__*/".___SContainerMiddle_1wxcn_gg_,.___SContainer_1wxcn_gg_,.___SNoTooltipContainer_1wxcn_gg_{display:flex;overflow:hidden}.___SBeginning_1wxcn_gg_,.___SEllipsis_1wxcn_gg_{overflow:hidden;display:inline-block;text-overflow:ellipsis;white-space:nowrap}.___SEllipsis_1wxcn_gg_.__maxLine_1wxcn_gg_{display:-webkit-box;-webkit-line-clamp:var(--maxLine_1wxcn);-webkit-box-orient:vertical;overflow:hidden;white-space:normal}.___STail_1wxcn_gg_{white-space:nowrap}" /*__inner_css_end__*/, "1wxcn_gg_") /*__reshadow_css_end__*/, {
|
|
17
|
+
"__SContainer": "___SContainer_1wxcn_gg_",
|
|
18
|
+
"__SNoTooltipContainer": "___SNoTooltipContainer_1wxcn_gg_",
|
|
19
|
+
"__SContainerMiddle": "___SContainerMiddle_1wxcn_gg_",
|
|
20
|
+
"__SBeginning": "___SBeginning_1wxcn_gg_",
|
|
21
|
+
"__SEllipsis": "___SEllipsis_1wxcn_gg_",
|
|
22
|
+
"_maxLine": "__maxLine_1wxcn_gg_",
|
|
23
|
+
"--maxLine": "--maxLine_1wxcn",
|
|
24
|
+
"__STail": "___STail_1wxcn_gg_"
|
|
34
25
|
});
|
|
35
26
|
import reactToText from '@semcore/utils/lib/reactToText';
|
|
36
27
|
import getOriginChildren from '@semcore/utils/lib/getOriginChildren';
|
|
37
28
|
import pick from '@semcore/utils/lib/pick';
|
|
38
29
|
var defaultTooltipProps = ['title', 'theme', 'strategy', 'modifiers', 'placement', 'interaction', 'timeout', 'visible', 'defaultVisible', 'onVisibleChange', 'offset', 'preventOverflow', 'arrow', 'flip', 'computeStyles', 'eventListeners', 'onFirstUpdate'];
|
|
39
|
-
|
|
40
30
|
var createMeasurerElement = function createMeasurerElement(element) {
|
|
41
31
|
var styleElement = window.getComputedStyle(element, null);
|
|
42
32
|
var temporaryElement = document.createElement('temporary-block');
|
|
@@ -52,18 +42,14 @@ var createMeasurerElement = function createMeasurerElement(element) {
|
|
|
52
42
|
temporaryElement.innerHTML = element.innerHTML;
|
|
53
43
|
return temporaryElement;
|
|
54
44
|
};
|
|
55
|
-
|
|
56
45
|
function isTextOverflowing(element, multiline) {
|
|
57
46
|
if (!element) return false;
|
|
58
|
-
|
|
59
47
|
var _element$getBoundingC = element.getBoundingClientRect(),
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
48
|
+
currentHeight = _element$getBoundingC.height,
|
|
49
|
+
currentWidth = _element$getBoundingC.width;
|
|
63
50
|
var measuringElement = createMeasurerElement(element);
|
|
64
51
|
var currentSize, initialSize;
|
|
65
52
|
document.body.appendChild(measuringElement);
|
|
66
|
-
|
|
67
53
|
if (multiline) {
|
|
68
54
|
currentSize = currentHeight;
|
|
69
55
|
measuringElement.style.width = "".concat(currentWidth, "px");
|
|
@@ -73,73 +59,58 @@ function isTextOverflowing(element, multiline) {
|
|
|
73
59
|
measuringElement.style.whiteSpace = 'nowrap';
|
|
74
60
|
initialSize = measuringElement.getBoundingClientRect().width;
|
|
75
61
|
}
|
|
76
|
-
|
|
77
62
|
document.body.removeChild(measuringElement);
|
|
78
63
|
return currentSize < initialSize;
|
|
79
64
|
}
|
|
80
|
-
|
|
81
65
|
var RootEllipsis = /*#__PURE__*/function (_Component) {
|
|
82
66
|
_inherits(RootEllipsis, _Component);
|
|
83
|
-
|
|
84
67
|
var _super = _createSuper(RootEllipsis);
|
|
85
|
-
|
|
86
68
|
function RootEllipsis() {
|
|
87
69
|
var _this;
|
|
88
|
-
|
|
89
70
|
_classCallCheck(this, RootEllipsis);
|
|
90
|
-
|
|
91
71
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
92
72
|
args[_key] = arguments[_key];
|
|
93
73
|
}
|
|
94
|
-
|
|
95
74
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
96
|
-
|
|
97
75
|
_defineProperty(_assertThisInitialized(_this), "state", {
|
|
98
76
|
visible: false
|
|
99
77
|
});
|
|
100
|
-
|
|
101
78
|
_defineProperty(_assertThisInitialized(_this), "textRef", /*#__PURE__*/React.createRef());
|
|
102
|
-
|
|
103
79
|
_defineProperty(_assertThisInitialized(_this), "handlerVisibleChange", function (visible) {
|
|
104
80
|
_this.setState({
|
|
105
81
|
visible: visible && _this.showTooltip()
|
|
106
82
|
});
|
|
107
83
|
});
|
|
108
|
-
|
|
109
84
|
return _this;
|
|
110
85
|
}
|
|
111
|
-
|
|
112
86
|
_createClass(RootEllipsis, [{
|
|
113
87
|
key: "showTooltip",
|
|
114
88
|
value: function showTooltip() {
|
|
115
89
|
var _this$asProps$maxLine = this.asProps.maxLine,
|
|
116
|
-
|
|
90
|
+
maxLine = _this$asProps$maxLine === void 0 ? 1 : _this$asProps$maxLine;
|
|
117
91
|
return isTextOverflowing(this.textRef.current, maxLine > 1);
|
|
118
92
|
}
|
|
119
93
|
}, {
|
|
120
94
|
key: "render",
|
|
121
95
|
value: function render() {
|
|
122
96
|
var _ref3;
|
|
123
|
-
|
|
124
97
|
var SEllipsis = this.Root;
|
|
125
98
|
var SContainer = Tooltip;
|
|
126
99
|
var SNoTooltipContainer = Box;
|
|
127
100
|
var _this$asProps = this.asProps,
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
101
|
+
styles = _this$asProps.styles,
|
|
102
|
+
Children = _this$asProps.Children,
|
|
103
|
+
maxLine = _this$asProps.maxLine,
|
|
104
|
+
tooltip = _this$asProps.tooltip,
|
|
105
|
+
trim = _this$asProps.trim,
|
|
106
|
+
containerRect = _this$asProps.containerRect,
|
|
107
|
+
containerRef = _this$asProps.containerRef,
|
|
108
|
+
includeTooltipProps = _this$asProps.includeTooltipProps;
|
|
136
109
|
var visible = this.state.visible;
|
|
137
110
|
var text = reactToText(getOriginChildren(Children));
|
|
138
111
|
var tooltipProps = pick(this.asProps, includeTooltipProps);
|
|
139
|
-
|
|
140
112
|
if (trim === 'middle') {
|
|
141
113
|
var _ref;
|
|
142
|
-
|
|
143
114
|
return _ref = sstyled(styles), /*#__PURE__*/React.createElement(EllipsisMiddle, _ref.cn("EllipsisMiddle", {
|
|
144
115
|
"text": text,
|
|
145
116
|
"styles": styles,
|
|
@@ -149,10 +120,8 @@ var RootEllipsis = /*#__PURE__*/function (_Component) {
|
|
|
149
120
|
"tooltipProps": tooltipProps
|
|
150
121
|
}));
|
|
151
122
|
}
|
|
152
|
-
|
|
153
123
|
if (tooltip) {
|
|
154
124
|
var _ref2;
|
|
155
|
-
|
|
156
125
|
return _ref2 = sstyled(styles), /*#__PURE__*/React.createElement(SContainer, _ref2.cn("SContainer", _objectSpread({
|
|
157
126
|
"interaction": "hover",
|
|
158
127
|
"title": text,
|
|
@@ -164,7 +133,6 @@ var RootEllipsis = /*#__PURE__*/function (_Component) {
|
|
|
164
133
|
"maxLine": maxLine
|
|
165
134
|
}), /*#__PURE__*/React.createElement(Children, _ref2.cn("Children", {}))));
|
|
166
135
|
}
|
|
167
|
-
|
|
168
136
|
return _ref3 = sstyled(styles), /*#__PURE__*/React.createElement(SNoTooltipContainer, _ref3.cn("SNoTooltipContainer", {}), /*#__PURE__*/React.createElement(SEllipsis, _ref3.cn("SEllipsis", {
|
|
169
137
|
"render": Box,
|
|
170
138
|
"ref": this.textRef,
|
|
@@ -172,48 +140,41 @@ var RootEllipsis = /*#__PURE__*/function (_Component) {
|
|
|
172
140
|
}), /*#__PURE__*/React.createElement(Children, _ref3.cn("Children", {}))));
|
|
173
141
|
}
|
|
174
142
|
}]);
|
|
175
|
-
|
|
176
143
|
return RootEllipsis;
|
|
177
144
|
}(Component);
|
|
178
|
-
|
|
179
145
|
_defineProperty(RootEllipsis, "displayName", 'Ellipsis');
|
|
180
|
-
|
|
181
146
|
_defineProperty(RootEllipsis, "style", style);
|
|
182
|
-
|
|
183
147
|
_defineProperty(RootEllipsis, "defaultProps", {
|
|
184
148
|
trim: 'end',
|
|
185
149
|
tooltip: true,
|
|
186
150
|
includeTooltipProps: defaultTooltipProps
|
|
187
151
|
});
|
|
188
|
-
|
|
189
152
|
var EllipsisMiddle = function EllipsisMiddle(props) {
|
|
190
153
|
var styles = props.styles,
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
154
|
+
text = props.text,
|
|
155
|
+
tooltip = props.tooltip,
|
|
156
|
+
containerRect = props.containerRect,
|
|
157
|
+
containerRef = props.containerRef,
|
|
158
|
+
tooltipProps = props.tooltipProps;
|
|
196
159
|
var resizeElement = useRef(null);
|
|
197
|
-
|
|
198
160
|
var _useState = useState({
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
161
|
+
fontSize: '14',
|
|
162
|
+
symbolWidth: 0
|
|
163
|
+
}),
|
|
164
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
165
|
+
dimension = _useState2[0],
|
|
166
|
+
setDimension = _useState2[1];
|
|
206
167
|
var blockWidth = useResizeObserver(resizeElement, containerRect).width;
|
|
207
168
|
useLayoutEffect(function () {
|
|
208
169
|
var _containerRef$current;
|
|
209
|
-
|
|
210
170
|
var dateSpan = document.createElement('temporary-block');
|
|
211
171
|
dateSpan.setAttribute('style', "fontSize: ".concat(dimension.fontSize, "px"));
|
|
212
172
|
dateSpan.innerHTML = 'a';
|
|
213
173
|
document.body.appendChild(dateSpan);
|
|
214
174
|
var rect = dateSpan.getBoundingClientRect();
|
|
215
175
|
setDimension({
|
|
216
|
-
fontSize: window
|
|
176
|
+
fontSize: window
|
|
177
|
+
// @ts-ignore
|
|
217
178
|
.getComputedStyle((_containerRef$current = containerRef === null || containerRef === void 0 ? void 0 : containerRef.current) !== null && _containerRef$current !== void 0 ? _containerRef$current : resizeElement.current, null).getPropertyValue('font-size'),
|
|
218
179
|
symbolWidth: rect.width
|
|
219
180
|
});
|
|
@@ -225,10 +186,8 @@ var EllipsisMiddle = function EllipsisMiddle(props) {
|
|
|
225
186
|
var displayedSymbols = useMemo(function () {
|
|
226
187
|
return Math.round(blockWidth / dimension.symbolWidth);
|
|
227
188
|
}, [blockWidth, dimension.symbolWidth]);
|
|
228
|
-
|
|
229
189
|
if (tooltip) {
|
|
230
190
|
var _ref4;
|
|
231
|
-
|
|
232
191
|
return _ref4 = sstyled(styles), /*#__PURE__*/React.createElement(SContainerMiddle, _ref4.cn("SContainerMiddle", _objectSpread({
|
|
233
192
|
"interaction": text.length > displayedSymbols ? 'hover' : 'none',
|
|
234
193
|
"title": text,
|
|
@@ -237,13 +196,11 @@ var EllipsisMiddle = function EllipsisMiddle(props) {
|
|
|
237
196
|
}, tooltipProps)), /*#__PURE__*/React.createElement(SBeginning, _ref4.cn("SBeginning", {}), text.substring(0, text.length - displayedSymbols / 2 - 1)), /*#__PURE__*/React.createElement(STail, _ref4.cn("STail", {}), text.substring(text.length - displayedSymbols / 2 - 1)));
|
|
238
197
|
} else {
|
|
239
198
|
var _ref5;
|
|
240
|
-
|
|
241
199
|
return _ref5 = sstyled(styles), /*#__PURE__*/React.createElement(SContainerMiddle, _ref5.cn("SContainerMiddle", {
|
|
242
200
|
"ref": containerRef !== null && containerRef !== void 0 ? containerRef : resizeElement
|
|
243
201
|
}), /*#__PURE__*/React.createElement(SBeginning, _ref5.cn("SBeginning", {}), text.substring(0, text.length - displayedSymbols / 2 - 1)), /*#__PURE__*/React.createElement(STail, _ref5.cn("STail", {}), text.substring(text.length - displayedSymbols / 2 - 1)));
|
|
244
202
|
}
|
|
245
203
|
};
|
|
246
|
-
|
|
247
204
|
var Ellipsis = createComponent(RootEllipsis);
|
|
248
205
|
export default Ellipsis;
|
|
249
206
|
//# sourceMappingURL=Ellipsis.js.map
|
package/lib/es6/Ellipsis.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ellipsis.js","names":["React","useRef","useMemo","useState","useLayoutEffect","createComponent","Component","sstyled","Tooltip","Box","useResizeObserver","reactToText","getOriginChildren","pick","defaultTooltipProps","createMeasurerElement","element","styleElement","window","getComputedStyle","temporaryElement","document","createElement","style","display","padding","position","right","bottom","visibility","fontFamily","getPropertyValue","fontSize","fontWeight","innerHTML","isTextOverflowing","multiline","getBoundingClientRect","currentHeight","height","currentWidth","width","measuringElement","currentSize","initialSize","body","appendChild","whiteSpace","removeChild","RootEllipsis","visible","createRef","setState","showTooltip","asProps","maxLine","textRef","current","SEllipsis","Root","SContainer","SNoTooltipContainer","styles","Children","tooltip","trim","containerRect","containerRef","includeTooltipProps","state","text","tooltipProps","handlerVisibleChange","EllipsisMiddle","props","resizeElement","symbolWidth","dimension","setDimension","blockWidth","dateSpan","setAttribute","rect","STail","SBeginning","SContainerMiddle","displayedSymbols","Math","round","length","substring","Ellipsis"],"sources":["../../src/Ellipsis.tsx"],"sourcesContent":["import React, { RefObject, useRef, useMemo, useState, useLayoutEffect } from 'react';\nimport createComponent, { Component, sstyled } from '@semcore/core';\nimport Tooltip from '@semcore/tooltip';\nimport { Box } from '@semcore/flex-box';\nimport { useResizeObserver } from './useResizeObserver';\n\nimport style from './style/ellipsis.shadow.css';\nimport reactToText from '@semcore/utils/lib/reactToText';\nimport getOriginChildren from '@semcore/utils/lib/getOriginChildren';\nimport pick from '@semcore/utils/lib/pick';\n\ntype AsProps = {\n maxLine?: number;\n trim?: 'end' | 'middle';\n tooltip?: boolean;\n styles?: React.CSSProperties;\n containerRect?: { width: number };\n // eslint-disable-next-line ssr-friendly/no-dom-globals-in-module-scope\n containerRef?: RefObject<HTMLElement | null>;\n includeTooltipProps?: string[];\n};\n\ntype AsPropsMiddle = {\n text: string;\n tooltip?: boolean;\n styles?: React.CSSProperties;\n containerRect?: { width: number };\n // eslint-disable-next-line ssr-friendly/no-dom-globals-in-module-scope\n containerRef?: RefObject<HTMLElement | null>;\n tooltipProps: { [propName: string]: unknown };\n};\n\nconst defaultTooltipProps = [\n 'title',\n 'theme',\n 'strategy',\n 'modifiers',\n 'placement',\n 'interaction',\n 'timeout',\n 'visible',\n 'defaultVisible',\n 'onVisibleChange',\n 'offset',\n 'preventOverflow',\n 'arrow',\n 'flip',\n 'computeStyles',\n 'eventListeners',\n 'onFirstUpdate',\n];\n\nconst createMeasurerElement = (element: HTMLElement) => {\n const styleElement = window.getComputedStyle(element, null);\n const temporaryElement = document.createElement('temporary-block');\n temporaryElement.style.display = 'inline-block';\n temporaryElement.style.padding = '0';\n temporaryElement.style.position = 'absolute';\n temporaryElement.style.right = '150%';\n temporaryElement.style.bottom = '150%';\n temporaryElement.style.visibility = 'hidden';\n temporaryElement.style.fontFamily = styleElement.getPropertyValue('font-family');\n temporaryElement.style.fontSize = styleElement.getPropertyValue('font-size');\n temporaryElement.style.fontWeight = styleElement.getPropertyValue('font-weight');\n\n temporaryElement.innerHTML = element.innerHTML;\n return temporaryElement;\n};\n\nfunction isTextOverflowing(element: HTMLElement | null, multiline: boolean): boolean {\n if (!element) return false;\n\n const { height: currentHeight, width: currentWidth } = element.getBoundingClientRect();\n const measuringElement = createMeasurerElement(element);\n let currentSize, initialSize;\n document.body.appendChild(measuringElement);\n if (multiline) {\n currentSize = currentHeight;\n measuringElement.style.width = `${currentWidth}px`;\n initialSize = measuringElement.getBoundingClientRect().height;\n } else {\n currentSize = currentWidth;\n measuringElement.style.whiteSpace = 'nowrap';\n initialSize = measuringElement.getBoundingClientRect().width;\n }\n document.body.removeChild(measuringElement);\n return currentSize < initialSize;\n}\n\nclass RootEllipsis extends Component<AsProps> {\n static displayName = 'Ellipsis';\n static style = style;\n static defaultProps: AsProps = {\n trim: 'end',\n tooltip: true,\n includeTooltipProps: defaultTooltipProps,\n };\n\n state = {\n visible: false,\n };\n\n textRef = React.createRef<HTMLElement>();\n\n showTooltip() {\n const { maxLine = 1 } = this.asProps;\n return isTextOverflowing(this.textRef.current, maxLine > 1);\n }\n\n handlerVisibleChange = (visible: boolean) => {\n this.setState({ visible: visible && this.showTooltip() });\n };\n\n render() {\n const SEllipsis = this.Root;\n const SContainer = Tooltip;\n const SNoTooltipContainer = Box;\n const {\n styles,\n Children,\n maxLine,\n tooltip,\n trim,\n containerRect,\n containerRef,\n includeTooltipProps,\n } = this.asProps;\n const { visible } = this.state;\n const text = reactToText(getOriginChildren(Children));\n const tooltipProps = pick(this.asProps, includeTooltipProps);\n\n if (trim === 'middle') {\n return sstyled(styles)(\n <EllipsisMiddle\n text={text}\n styles={styles}\n tooltip={tooltip}\n containerRect={containerRect}\n containerRef={containerRef}\n tooltipProps={tooltipProps}\n />,\n );\n }\n if (tooltip) {\n return sstyled(styles)(\n <SContainer\n interaction=\"hover\"\n title={text}\n visible={visible}\n onVisibleChange={this.handlerVisibleChange}\n {...tooltipProps}\n >\n <SEllipsis render={Box} ref={this.textRef} maxLine={maxLine}>\n <Children />\n </SEllipsis>\n </SContainer>,\n );\n }\n return sstyled(styles)(\n <SNoTooltipContainer>\n <SEllipsis render={Box} ref={this.textRef} maxLine={maxLine}>\n <Children />\n </SEllipsis>\n </SNoTooltipContainer>,\n );\n }\n}\n\nconst EllipsisMiddle: React.FC<AsPropsMiddle> = (props) => {\n const { styles, text, tooltip, containerRect, containerRef, tooltipProps } = props;\n const resizeElement = useRef<HTMLElement | null>(null);\n const [dimension, setDimension] = useState<{ fontSize: string; symbolWidth: number }>({\n fontSize: '14',\n symbolWidth: 0,\n });\n const blockWidth = useResizeObserver(resizeElement, containerRect).width;\n\n useLayoutEffect(() => {\n const dateSpan = document.createElement('temporary-block');\n dateSpan.setAttribute('style', `fontSize: ${dimension.fontSize}px`);\n dateSpan.innerHTML = 'a';\n document.body.appendChild(dateSpan);\n const rect = dateSpan.getBoundingClientRect();\n\n setDimension({\n fontSize: window\n // @ts-ignore\n .getComputedStyle(containerRef?.current ?? resizeElement.current, null)\n .getPropertyValue('font-size'),\n symbolWidth: rect.width,\n });\n document.body.removeChild(dateSpan);\n }, []);\n\n const STail = 'span';\n const SBeginning = 'span';\n const SContainerMiddle = Box;\n const displayedSymbols = useMemo(\n () => Math.round(blockWidth / dimension.symbolWidth),\n [blockWidth, dimension.symbolWidth],\n );\n\n if (tooltip) {\n return sstyled(styles)(\n <SContainerMiddle\n interaction={text.length > displayedSymbols ? 'hover' : 'none'}\n title={text}\n ref={containerRef ?? resizeElement}\n tag={Tooltip}\n {...tooltipProps}\n >\n <SBeginning>{text.substring(0, text.length - displayedSymbols / 2 - 1)}</SBeginning>\n <STail>{text.substring(text.length - displayedSymbols / 2 - 1)}</STail>\n </SContainerMiddle>,\n ) as any;\n } else {\n return sstyled(styles)(\n <SContainerMiddle ref={containerRef ?? resizeElement}>\n <SBeginning>{text.substring(0, text.length - displayedSymbols / 2 - 1)}</SBeginning>\n <STail>{text.substring(text.length - displayedSymbols / 2 - 1)}</STail>\n </SContainerMiddle>,\n ) as any;\n }\n};\n\nconst Ellipsis = createComponent(RootEllipsis);\n\nexport default Ellipsis;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Ellipsis.js","names":["React","useRef","useMemo","useState","useLayoutEffect","createComponent","Component","sstyled","Tooltip","Box","useResizeObserver","style","_sstyled","insert","reactToText","getOriginChildren","pick","defaultTooltipProps","createMeasurerElement","element","styleElement","window","getComputedStyle","temporaryElement","document","createElement","display","padding","position","right","bottom","visibility","fontFamily","getPropertyValue","fontSize","fontWeight","innerHTML","isTextOverflowing","multiline","_element$getBoundingC","getBoundingClientRect","currentHeight","height","currentWidth","width","measuringElement","currentSize","initialSize","body","appendChild","concat","whiteSpace","removeChild","RootEllipsis","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","length","args","Array","_key","call","apply","_defineProperty","_assertThisInitialized","visible","createRef","setState","showTooltip","_createClass","key","value","_this$asProps$maxLine","asProps","maxLine","textRef","current","render","_ref3","SEllipsis","Root","SContainer","SNoTooltipContainer","_this$asProps","styles","Children","tooltip","trim","containerRect","containerRef","includeTooltipProps","state","text","tooltipProps","_ref","EllipsisMiddle","cn","_ref2","_objectSpread","handlerVisibleChange","props","resizeElement","_useState","symbolWidth","_useState2","_slicedToArray","dimension","setDimension","blockWidth","_containerRef$current","dateSpan","setAttribute","rect","STail","SBeginning","SContainerMiddle","displayedSymbols","Math","round","_ref4","substring","_ref5","Ellipsis"],"sources":["../../src/Ellipsis.tsx"],"sourcesContent":["import React, { RefObject, useRef, useMemo, useState, useLayoutEffect } from 'react';\nimport createComponent, { Component, sstyled } from '@semcore/core';\nimport Tooltip from '@semcore/tooltip';\nimport { Box } from '@semcore/flex-box';\nimport { useResizeObserver } from './useResizeObserver';\n\nimport style from './style/ellipsis.shadow.css';\nimport reactToText from '@semcore/utils/lib/reactToText';\nimport getOriginChildren from '@semcore/utils/lib/getOriginChildren';\nimport pick from '@semcore/utils/lib/pick';\n\ntype AsProps = {\n maxLine?: number;\n trim?: 'end' | 'middle';\n tooltip?: boolean;\n styles?: React.CSSProperties;\n containerRect?: { width: number };\n // eslint-disable-next-line ssr-friendly/no-dom-globals-in-module-scope\n containerRef?: RefObject<HTMLElement | null>;\n includeTooltipProps?: string[];\n};\n\ntype AsPropsMiddle = {\n text: string;\n tooltip?: boolean;\n styles?: React.CSSProperties;\n containerRect?: { width: number };\n // eslint-disable-next-line ssr-friendly/no-dom-globals-in-module-scope\n containerRef?: RefObject<HTMLElement | null>;\n tooltipProps: { [propName: string]: unknown };\n};\n\nconst defaultTooltipProps = [\n 'title',\n 'theme',\n 'strategy',\n 'modifiers',\n 'placement',\n 'interaction',\n 'timeout',\n 'visible',\n 'defaultVisible',\n 'onVisibleChange',\n 'offset',\n 'preventOverflow',\n 'arrow',\n 'flip',\n 'computeStyles',\n 'eventListeners',\n 'onFirstUpdate',\n];\n\nconst createMeasurerElement = (element: HTMLElement) => {\n const styleElement = window.getComputedStyle(element, null);\n const temporaryElement = document.createElement('temporary-block');\n temporaryElement.style.display = 'inline-block';\n temporaryElement.style.padding = '0';\n temporaryElement.style.position = 'absolute';\n temporaryElement.style.right = '150%';\n temporaryElement.style.bottom = '150%';\n temporaryElement.style.visibility = 'hidden';\n temporaryElement.style.fontFamily = styleElement.getPropertyValue('font-family');\n temporaryElement.style.fontSize = styleElement.getPropertyValue('font-size');\n temporaryElement.style.fontWeight = styleElement.getPropertyValue('font-weight');\n\n temporaryElement.innerHTML = element.innerHTML;\n return temporaryElement;\n};\n\nfunction isTextOverflowing(element: HTMLElement | null, multiline: boolean): boolean {\n if (!element) return false;\n\n const { height: currentHeight, width: currentWidth } = element.getBoundingClientRect();\n const measuringElement = createMeasurerElement(element);\n let currentSize, initialSize;\n document.body.appendChild(measuringElement);\n if (multiline) {\n currentSize = currentHeight;\n measuringElement.style.width = `${currentWidth}px`;\n initialSize = measuringElement.getBoundingClientRect().height;\n } else {\n currentSize = currentWidth;\n measuringElement.style.whiteSpace = 'nowrap';\n initialSize = measuringElement.getBoundingClientRect().width;\n }\n document.body.removeChild(measuringElement);\n return currentSize < initialSize;\n}\n\nclass RootEllipsis extends Component<AsProps> {\n static displayName = 'Ellipsis';\n static style = style;\n static defaultProps: AsProps = {\n trim: 'end',\n tooltip: true,\n includeTooltipProps: defaultTooltipProps,\n };\n\n state = {\n visible: false,\n };\n\n textRef = React.createRef<HTMLElement>();\n\n showTooltip() {\n const { maxLine = 1 } = this.asProps;\n return isTextOverflowing(this.textRef.current, maxLine > 1);\n }\n\n handlerVisibleChange = (visible: boolean) => {\n this.setState({ visible: visible && this.showTooltip() });\n };\n\n render() {\n const SEllipsis = this.Root;\n const SContainer = Tooltip;\n const SNoTooltipContainer = Box;\n const {\n styles,\n Children,\n maxLine,\n tooltip,\n trim,\n containerRect,\n containerRef,\n includeTooltipProps,\n } = this.asProps;\n const { visible } = this.state;\n const text = reactToText(getOriginChildren(Children));\n const tooltipProps = pick(this.asProps, includeTooltipProps);\n\n if (trim === 'middle') {\n return sstyled(styles)(\n <EllipsisMiddle\n text={text}\n styles={styles}\n tooltip={tooltip}\n containerRect={containerRect}\n containerRef={containerRef}\n tooltipProps={tooltipProps}\n />,\n );\n }\n if (tooltip) {\n return sstyled(styles)(\n <SContainer\n interaction=\"hover\"\n title={text}\n visible={visible}\n onVisibleChange={this.handlerVisibleChange}\n {...tooltipProps}\n >\n <SEllipsis render={Box} ref={this.textRef} maxLine={maxLine}>\n <Children />\n </SEllipsis>\n </SContainer>,\n );\n }\n return sstyled(styles)(\n <SNoTooltipContainer>\n <SEllipsis render={Box} ref={this.textRef} maxLine={maxLine}>\n <Children />\n </SEllipsis>\n </SNoTooltipContainer>,\n );\n }\n}\n\nconst EllipsisMiddle: React.FC<AsPropsMiddle> = (props) => {\n const { styles, text, tooltip, containerRect, containerRef, tooltipProps } = props;\n const resizeElement = useRef<HTMLElement | null>(null);\n const [dimension, setDimension] = useState<{ fontSize: string; symbolWidth: number }>({\n fontSize: '14',\n symbolWidth: 0,\n });\n const blockWidth = useResizeObserver(resizeElement, containerRect).width;\n\n useLayoutEffect(() => {\n const dateSpan = document.createElement('temporary-block');\n dateSpan.setAttribute('style', `fontSize: ${dimension.fontSize}px`);\n dateSpan.innerHTML = 'a';\n document.body.appendChild(dateSpan);\n const rect = dateSpan.getBoundingClientRect();\n\n setDimension({\n fontSize: window\n // @ts-ignore\n .getComputedStyle(containerRef?.current ?? resizeElement.current, null)\n .getPropertyValue('font-size'),\n symbolWidth: rect.width,\n });\n document.body.removeChild(dateSpan);\n }, []);\n\n const STail = 'span';\n const SBeginning = 'span';\n const SContainerMiddle = Box;\n const displayedSymbols = useMemo(\n () => Math.round(blockWidth / dimension.symbolWidth),\n [blockWidth, dimension.symbolWidth],\n );\n\n if (tooltip) {\n return sstyled(styles)(\n <SContainerMiddle\n interaction={text.length > displayedSymbols ? 'hover' : 'none'}\n title={text}\n ref={containerRef ?? resizeElement}\n tag={Tooltip}\n {...tooltipProps}\n >\n <SBeginning>{text.substring(0, text.length - displayedSymbols / 2 - 1)}</SBeginning>\n <STail>{text.substring(text.length - displayedSymbols / 2 - 1)}</STail>\n </SContainerMiddle>,\n ) as any;\n } else {\n return sstyled(styles)(\n <SContainerMiddle ref={containerRef ?? resizeElement}>\n <SBeginning>{text.substring(0, text.length - displayedSymbols / 2 - 1)}</SBeginning>\n <STail>{text.substring(text.length - displayedSymbols / 2 - 1)}</STail>\n </SContainerMiddle>,\n ) as any;\n }\n};\n\nconst Ellipsis = createComponent(RootEllipsis);\n\nexport default Ellipsis;\n"],"mappings":"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"}
|
package/lib/es6/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["default","useResizeObserver"],"sources":["../../src/index.ts"],"sourcesContent":["export { default } from './Ellipsis';\nexport { useResizeObserver } from './useResizeObserver';\n"],"mappings":"AAAA,SAASA,
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","useResizeObserver"],"sources":["../../src/index.ts"],"sourcesContent":["export { default } from './Ellipsis';\nexport { useResizeObserver } from './useResizeObserver';\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,YAAY;AACpC,SAASC,iBAAiB,QAAQ,qBAAqB"}
|
|
@@ -3,10 +3,9 @@ import { useCallback, useState } from 'react';
|
|
|
3
3
|
import useEnhancedEffect from '@semcore/utils/lib/use/useEnhancedEffect';
|
|
4
4
|
export var useResizeObserver = function useResizeObserver(ref, hookOverride) {
|
|
5
5
|
var _useState = useState(0),
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
7
|
+
width = _useState2[0],
|
|
8
|
+
setWidth = _useState2[1];
|
|
10
9
|
var handleResize = useCallback(function (entries) {
|
|
11
10
|
setWidth(entries[0].contentRect.width);
|
|
12
11
|
}, []);
|
|
@@ -14,11 +13,9 @@ export var useResizeObserver = function useResizeObserver(ref, hookOverride) {
|
|
|
14
13
|
if (!ref.current) {
|
|
15
14
|
return;
|
|
16
15
|
}
|
|
17
|
-
|
|
18
16
|
if (hookOverride) {
|
|
19
17
|
return;
|
|
20
18
|
}
|
|
21
|
-
|
|
22
19
|
var ro = new ResizeObserver(function (entries) {
|
|
23
20
|
handleResize(entries);
|
|
24
21
|
});
|
|
@@ -27,11 +24,9 @@ export var useResizeObserver = function useResizeObserver(ref, hookOverride) {
|
|
|
27
24
|
ro.disconnect();
|
|
28
25
|
};
|
|
29
26
|
}, [hookOverride]);
|
|
30
|
-
|
|
31
27
|
if (hookOverride) {
|
|
32
28
|
return hookOverride;
|
|
33
29
|
}
|
|
34
|
-
|
|
35
30
|
return {
|
|
36
31
|
width: width
|
|
37
32
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useResizeObserver.js","names":["useCallback","useState","useEnhancedEffect","useResizeObserver","ref","hookOverride","width","setWidth","handleResize","entries","contentRect","current","ro","ResizeObserver","observe","disconnect"],"sources":["../../src/useResizeObserver.tsx"],"sourcesContent":["import { RefObject, useCallback, useState } from 'react';\nimport useEnhancedEffect from '@semcore/utils/lib/use/useEnhancedEffect';\n\nexport const useResizeObserver = (\n ref: RefObject<HTMLElement>,\n hookOverride?: { width: number },\n) => {\n const [width, setWidth] = useState<number>(0);\n\n const handleResize = useCallback((entries: ResizeObserverEntry[]) => {\n setWidth(entries[0].contentRect.width);\n }, []);\n\n useEnhancedEffect(() => {\n if (!ref.current) {\n return;\n }\n\n if (hookOverride) {\n return;\n }\n\n const ro = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n handleResize(entries);\n });\n\n ro.observe(ref.current);\n\n return () => {\n ro.disconnect();\n };\n }, [hookOverride]);\n\n if (hookOverride) {\n return hookOverride;\n }\n return { width };\n};\n"],"mappings":";AAAA,SAAoBA,
|
|
1
|
+
{"version":3,"file":"useResizeObserver.js","names":["useCallback","useState","useEnhancedEffect","useResizeObserver","ref","hookOverride","_useState","_useState2","_slicedToArray","width","setWidth","handleResize","entries","contentRect","current","ro","ResizeObserver","observe","disconnect"],"sources":["../../src/useResizeObserver.tsx"],"sourcesContent":["import { RefObject, useCallback, useState } from 'react';\nimport useEnhancedEffect from '@semcore/utils/lib/use/useEnhancedEffect';\n\nexport const useResizeObserver = (\n ref: RefObject<HTMLElement>,\n hookOverride?: { width: number },\n) => {\n const [width, setWidth] = useState<number>(0);\n\n const handleResize = useCallback((entries: ResizeObserverEntry[]) => {\n setWidth(entries[0].contentRect.width);\n }, []);\n\n useEnhancedEffect(() => {\n if (!ref.current) {\n return;\n }\n\n if (hookOverride) {\n return;\n }\n\n const ro = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n handleResize(entries);\n });\n\n ro.observe(ref.current);\n\n return () => {\n ro.disconnect();\n };\n }, [hookOverride]);\n\n if (hookOverride) {\n return hookOverride;\n }\n return { width };\n};\n"],"mappings":";AAAA,SAAoBA,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AACxD,OAAOC,iBAAiB,MAAM,0CAA0C;AAExE,OAAO,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA,CAC5BC,GAA2B,EAC3BC,YAAgC,EAC7B;EACH,IAAAC,SAAA,GAA0BL,QAAQ,CAAS,CAAC,CAAC;IAAAM,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAAtCG,KAAK,GAAAF,UAAA;IAAEG,QAAQ,GAAAH,UAAA;EAEtB,IAAMI,YAAY,GAAGX,WAAW,CAAC,UAACY,OAA8B,EAAK;IACnEF,QAAQ,CAACE,OAAO,CAAC,CAAC,CAAC,CAACC,WAAW,CAACJ,KAAK,CAAC;EACxC,CAAC,EAAE,EAAE,CAAC;EAENP,iBAAiB,CAAC,YAAM;IACtB,IAAI,CAACE,GAAG,CAACU,OAAO,EAAE;MAChB;IACF;IAEA,IAAIT,YAAY,EAAE;MAChB;IACF;IAEA,IAAMU,EAAE,GAAG,IAAIC,cAAc,CAAC,UAACJ,OAA8B,EAAK;MAChED,YAAY,CAACC,OAAO,CAAC;IACvB,CAAC,CAAC;IAEFG,EAAE,CAACE,OAAO,CAACb,GAAG,CAACU,OAAO,CAAC;IAEvB,OAAO,YAAM;MACXC,EAAE,CAACG,UAAU,EAAE;IACjB,CAAC;EACH,CAAC,EAAE,CAACb,YAAY,CAAC,CAAC;EAElB,IAAIA,YAAY,EAAE;IAChB,OAAOA,YAAY;EACrB;EACA,OAAO;IAAEI,KAAK,EAALA;EAAM,CAAC;AAClB,CAAC"}
|