tntd 3.0.49 → 3.0.50
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/es/ellipsis/index.js
CHANGED
|
@@ -28,15 +28,16 @@ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } /*
|
|
|
28
28
|
var tolerance = 0; // In px. Depends on the font you are using
|
|
29
29
|
var isEllipsisActive = function isEllipsisActive(e) {
|
|
30
30
|
var _a, _b;
|
|
31
|
+
e.setAttribute('style', '');
|
|
31
32
|
if (e.offsetWidth === e.scrollWidth && e.offsetHeight === e.scrollHeight) {
|
|
32
33
|
var styleStr = 'overflow:visible; ';
|
|
33
34
|
if (!((_b = (_a = e === null || e === void 0 ? void 0 : e.parentNode) === null || _a === void 0 ? void 0 : _a.getAttribute('style')) === null || _b === void 0 ? void 0 : _b.includes('width'))) {
|
|
34
35
|
styleStr += 'max-width:100%;';
|
|
35
36
|
}
|
|
36
37
|
e.parentNode.setAttribute('style', styleStr);
|
|
37
|
-
e.setAttribute(
|
|
38
|
+
e.setAttribute('style', 'overflow:inherit');
|
|
38
39
|
} else {
|
|
39
|
-
e.setAttribute(
|
|
40
|
+
e.setAttribute('style', '');
|
|
40
41
|
}
|
|
41
42
|
return e.offsetWidth + tolerance < e.scrollWidth || e.offsetHeight < e.scrollHeight;
|
|
42
43
|
};
|
|
@@ -88,6 +89,11 @@ var _default = exports["default"] = function _default(props) {
|
|
|
88
89
|
setLineHeight(getComputedStyle(elementRef.current, null).getPropertyValue('line-height'));
|
|
89
90
|
}
|
|
90
91
|
};
|
|
92
|
+
(0, _react.useEffect)(function () {
|
|
93
|
+
return function () {
|
|
94
|
+
elementRef.current = null; // 清理引用
|
|
95
|
+
};
|
|
96
|
+
}, []);
|
|
91
97
|
(0, _react.useLayoutEffect)(function () {
|
|
92
98
|
if (needRefresh) {
|
|
93
99
|
setRenderId(function (id) {
|
|
@@ -106,17 +112,18 @@ var _default = exports["default"] = function _default(props) {
|
|
|
106
112
|
computeElement();
|
|
107
113
|
}, [renderId]);
|
|
108
114
|
(0, _react.useEffect)(function () {
|
|
109
|
-
|
|
115
|
+
var handleResize = function handleResize() {
|
|
116
|
+
return computeElement();
|
|
117
|
+
};
|
|
118
|
+
window.addEventListener('resize', handleResize);
|
|
110
119
|
return function () {
|
|
111
|
-
window.removeEventListener('resize',
|
|
120
|
+
window.removeEventListener('resize', handleResize);
|
|
112
121
|
};
|
|
113
122
|
}, []);
|
|
114
123
|
// original Node
|
|
115
124
|
var inner = typeof children === 'string' ? children : _popover ? content : title;
|
|
116
125
|
// for className
|
|
117
|
-
var getClassName =
|
|
118
|
-
return "overflow min-width-0 ".concat(_lines ? 'ellipsis-wrap' : 'ellipsis-nowrap', " ").concat(className || '');
|
|
119
|
-
};
|
|
126
|
+
var getClassName = "overflow min-width-0 ".concat(_lines ? 'ellipsis-wrap' : 'ellipsis-nowrap', " ").concat(className || '');
|
|
120
127
|
// Tooltip.trigger(default 'hover') ==trigger==> onVisibleChange(visible)
|
|
121
128
|
var handleVisibleChange = function handleVisibleChange(visible) {
|
|
122
129
|
// const { onVisibleChange } = props;
|
|
@@ -127,9 +134,12 @@ var _default = exports["default"] = function _default(props) {
|
|
|
127
134
|
var handleCopy = function handleCopy(innerText) {
|
|
128
135
|
(0, _copyToClipboard["default"])(innerText);
|
|
129
136
|
setHasCopy(!hasCopy);
|
|
130
|
-
setTimeout(function () {
|
|
137
|
+
var timer = setTimeout(function () {
|
|
131
138
|
setHasCopy(false);
|
|
132
139
|
}, 1000);
|
|
140
|
+
return function () {
|
|
141
|
+
return clearTimeout(timer);
|
|
142
|
+
}; // 清除定时器
|
|
133
143
|
};
|
|
134
144
|
var renderNode = function renderNode() {
|
|
135
145
|
var popoverNode = _react["default"].createElement(_popover2["default"], Object.assign({}, props, {
|
|
@@ -166,7 +176,7 @@ var _default = exports["default"] = function _default(props) {
|
|
|
166
176
|
maxWidth: widthLimit
|
|
167
177
|
})
|
|
168
178
|
}, prefix && prefix, _react["default"].createElement("div", {
|
|
169
|
-
className: getClassName
|
|
179
|
+
className: getClassName,
|
|
170
180
|
key: renderId
|
|
171
181
|
}, inner || inner === 0 ? renderNode() : emptyText), !!suffix && suffix, (inner || inner === 0) && _copyable && lineHeight && _react["default"].createElement("div", {
|
|
172
182
|
className: "svg-button",
|
package/es/ellipsis/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ellipsis/index.js"],"names":[],"mappings":"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","sourcesContent":["/*\n * @Author: 梁洪刚\n * @CreatDate: 2021-03-31 13:57:32\n * @Describe: 省略号组件\n */\n\nimport copy from 'copy-to-clipboard'\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport Popover from '../popover'\nimport Tooltip from '../tooltip'\n\nimport CopySVG from './Svg/CopySVG'\nimport TickSVG from './Svg/TickSVG'\nimport './index.less'\n\nconst tolerance = 0 // In px. Depends on the font you are using\n\nconst isEllipsisActive = (e) => {\n if (e.offsetWidth === e.scrollWidth && e.offsetHeight === e.scrollHeight) {\n let styleStr = 'overflow:visible; '\n if (!e?.parentNode?.getAttribute('style')?.includes('width')) {\n styleStr += 'max-width:100%;'\n }\n e.parentNode.setAttribute('style', styleStr)\n e.setAttribute(\"style\",'overflow:inherit');\n }else {\n e.setAttribute(\"style\", \"\")\n }\n return e.offsetWidth + tolerance < e.scrollWidth || e.offsetHeight < e.scrollHeight\n}\n\nexport default (props) => {\n let {\n _popover = props.Popover, // `Popover` or `Tooltip` ?\n title, // in most cases for `Tooltip`\n content, // in most cases for `Popover`\n className,\n style,\n widthLimit, // width trigger value\n _lines = props.lines !== 1 && props.lines, // number or lines, default 1 line;\n children, // children Node\n emptyText, // default: null\n _copyable = props.copyable, // copy function\n prefix, // 前缀dom\n suffix, // 后缀dom\n needRefresh = true // select.options的情况下不要刷新\n } = props\n\n const [renderId, setRenderId] = useState(1);\n // allow visible or not state\n const [flag, setFlag] = useState(true)\n // visible[Tooltip/Popover] state\n const [tipVisible, setTipVisible] = useState(false)\n // copy animation state\n const [hasCopy, setHasCopy] = useState(false)\n const [lineHeight, setLineHeight] = useState()\n\n const elementRef = useRef()\n\n const computeElement = ()=>{\n elementRef.current && isEllipsisActive(elementRef.current)\n ? setFlag(true)\n : (setFlag(false), setTipVisible(false))\n\n if (elementRef.current) {\n setLineHeight(getComputedStyle(elementRef.current, null).getPropertyValue('line-height'))\n }\n }\n\n useLayoutEffect(()=>{\n if (needRefresh) {\n setRenderId(id => id + 1);\n }else {\n if(renderId < 2) {\n setRenderId(id => id + 1);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [title, needRefresh, content, children])\n\n useEffect(() => {\n computeElement()\n },[renderId])\n\n useEffect(()=>{\n window.addEventListener(\"resize\",computeElement)\n return ()=>{\n window.removeEventListener('resize',computeElement)\n }\n },[])\n\n // original Node\n const inner = typeof children === 'string' ? children : _popover ? content : title\n\n // for className\n const getClassName = () => {\n return `overflow min-width-0 ${_lines ? 'ellipsis-wrap' : 'ellipsis-nowrap'} ${className || ''}`\n }\n\n // Tooltip.trigger(default 'hover') ==trigger==> onVisibleChange(visible)\n const handleVisibleChange = (visible) => {\n // const { onVisibleChange } = props;\n // onVisibleChange(visible);\n flag && setTipVisible(visible)\n }\n\n // onClick Copy Button\n const handleCopy = (innerText) => {\n copy(innerText)\n setHasCopy(!hasCopy)\n setTimeout(() => {\n setHasCopy(false)\n }, 1000)\n }\n\n const renderNode = () => {\n const popoverNode = (\n <Popover\n {...props}\n content={content || children}\n visible={tipVisible}\n onVisibleChange={(visible) => handleVisibleChange(visible)}\n >\n <div className={className} style={{ WebkitLineClamp: _lines }} ref={elementRef}>\n {children || content}\n </div>\n </Popover>\n )\n\n const tooltipNode = (\n <Tooltip\n {...props}\n title={title || children}\n visible={tipVisible}\n onVisibleChange={(visible) => handleVisibleChange(visible)}\n >\n <div className={className} style={{ WebkitLineClamp: _lines }} ref={elementRef}>\n {children || title}\n </div>\n </Tooltip>\n )\n\n return _popover ? popoverNode : tooltipNode\n }\n\n return (\n <>\n <div\n className=\"tntd-ellipsis\"\n style={{\n ...style,\n maxWidth: widthLimit,\n }}\n >\n {/* prefix */}\n {prefix && prefix}\n {/* content */}\n <div className={getClassName()} key={renderId}>{(inner||inner===0) ? renderNode() : emptyText}</div>\n {/* suffix */}\n {!!suffix && suffix}\n {/* copyable button */}\n {(inner||inner===0) && _copyable && lineHeight && (\n <div\n className=\"svg-button\"\n style={{\n height: lineHeight,\n }}\n onClick={() => handleCopy(elementRef.current.innerText)}\n >\n {!hasCopy ? (\n <CopySVG\n style={{\n height: lineHeight,\n }}\n />\n ) : (\n <TickSVG\n style={{\n height: lineHeight,\n }}\n />\n )}\n </div>\n )}\n </div>\n </>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ellipsis/index.js"],"names":[],"mappings":"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","sourcesContent":["/*\n * @Author: 梁洪刚\n * @CreatDate: 2021-03-31 13:57:32\n * @Describe: 省略号组件\n */\n\nimport copy from 'copy-to-clipboard'\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport Popover from '../popover'\nimport Tooltip from '../tooltip'\n\nimport CopySVG from './Svg/CopySVG'\nimport TickSVG from './Svg/TickSVG'\nimport './index.less'\n\nconst tolerance = 0; // In px. Depends on the font you are using\n\nconst isEllipsisActive = (e) => {\n e.setAttribute('style', '');\n if (e.offsetWidth === e.scrollWidth && e.offsetHeight === e.scrollHeight) {\n let styleStr = 'overflow:visible; ';\n if (!e?.parentNode?.getAttribute('style')?.includes('width')) {\n styleStr += 'max-width:100%;';\n }\n e.parentNode.setAttribute('style', styleStr);\n e.setAttribute('style', 'overflow:inherit');\n } else {\n e.setAttribute('style', '');\n }\n return e.offsetWidth + tolerance < e.scrollWidth || e.offsetHeight < e.scrollHeight;\n};\n\nexport default (props) => {\n let {\n _popover = props.Popover, // `Popover` or `Tooltip` ?\n title, // in most cases for `Tooltip`\n content, // in most cases for `Popover`\n className,\n style,\n widthLimit, // width trigger value\n _lines = props.lines !== 1 && props.lines, // number or lines, default 1 line;\n children, // children Node\n emptyText, // default: null\n _copyable = props.copyable, // copy function\n prefix, // 前缀dom\n suffix, // 后缀dom\n needRefresh = true // select.options的情况下不要刷新\n } = props;\n\n const [renderId, setRenderId] = useState(1);\n // allow visible or not state\n const [flag, setFlag] = useState(true);\n // visible[Tooltip/Popover] state\n const [tipVisible, setTipVisible] = useState(false);\n // copy animation state\n const [hasCopy, setHasCopy] = useState(false);\n const [lineHeight, setLineHeight] = useState();\n\n const elementRef = useRef();\n\n const computeElement = () => {\n elementRef.current && isEllipsisActive(elementRef.current) ? setFlag(true) : (setFlag(false), setTipVisible(false));\n\n if (elementRef.current) {\n setLineHeight(getComputedStyle(elementRef.current, null).getPropertyValue('line-height'));\n }\n };\n useEffect(() => {\n return () => {\n elementRef.current = null; // 清理引用\n };\n }, []);\n useLayoutEffect(() => {\n if (needRefresh) {\n setRenderId((id) => id + 1);\n } else {\n if (renderId < 2) {\n setRenderId((id) => id + 1);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [title, needRefresh, content, children]);\n\n useEffect(() => {\n computeElement();\n }, [renderId]);\n\n useEffect(() => {\n const handleResize = () => computeElement();\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n // original Node\n const inner = typeof children === 'string' ? children : _popover ? content : title;\n\n // for className\n const getClassName = `overflow min-width-0 ${_lines ? 'ellipsis-wrap' : 'ellipsis-nowrap'} ${className || ''}`;\n\n // Tooltip.trigger(default 'hover') ==trigger==> onVisibleChange(visible)\n const handleVisibleChange = (visible) => {\n // const { onVisibleChange } = props;\n // onVisibleChange(visible);\n flag && setTipVisible(visible);\n };\n\n // onClick Copy Button\n const handleCopy = (innerText) => {\n copy(innerText);\n setHasCopy(!hasCopy);\n const timer = setTimeout(() => {\n setHasCopy(false);\n }, 1000);\n return () => clearTimeout(timer); // 清除定时器\n };\n\n const renderNode = () => {\n const popoverNode = (\n <Popover\n {...props}\n content={content || children}\n visible={tipVisible}\n onVisibleChange={(visible) => handleVisibleChange(visible)}>\n <div className={className} style={{ WebkitLineClamp: _lines }} ref={elementRef}>\n {children || content}\n </div>\n </Popover>\n );\n\n const tooltipNode = (\n <Tooltip {...props} title={title || children} visible={tipVisible} onVisibleChange={(visible) => handleVisibleChange(visible)}>\n <div className={className} style={{ WebkitLineClamp: _lines }} ref={elementRef}>\n {children || title}\n </div>\n </Tooltip>\n );\n\n return _popover ? popoverNode : tooltipNode;\n };\n\n return (\n <>\n <div\n className=\"tntd-ellipsis\"\n style={{\n ...style,\n maxWidth: widthLimit\n }}>\n {/* prefix */}\n {prefix && prefix}\n {/* content */}\n <div className={getClassName} key={renderId}>\n {inner || inner === 0 ? renderNode() : emptyText}\n </div>\n {/* suffix */}\n {!!suffix && suffix}\n {/* copyable button */}\n {(inner || inner === 0) && _copyable && lineHeight && (\n <div\n className=\"svg-button\"\n style={{\n height: lineHeight\n }}\n onClick={() => handleCopy(elementRef.current.innerText)}>\n {!hasCopy ? (\n <CopySVG\n style={{\n height: lineHeight\n }}\n />\n ) : (\n <TickSVG\n style={{\n height: lineHeight\n }}\n />\n )}\n </div>\n )}\n </div>\n </>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ellipsis/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ellipsis/index.js"],"names":[],"mappings":"AAiCe,yDAuJd"}
|
package/lib/ellipsis/index.js
CHANGED
|
@@ -105,15 +105,16 @@ function _arrayWithHoles(r) {
|
|
|
105
105
|
var tolerance = 0; // In px. Depends on the font you are using
|
|
106
106
|
var isEllipsisActive = function isEllipsisActive(e) {
|
|
107
107
|
var _a, _b;
|
|
108
|
+
e.setAttribute('style', '');
|
|
108
109
|
if (e.offsetWidth === e.scrollWidth && e.offsetHeight === e.scrollHeight) {
|
|
109
110
|
var styleStr = 'overflow:visible; ';
|
|
110
111
|
if (!((_b = (_a = e === null || e === void 0 ? void 0 : e.parentNode) === null || _a === void 0 ? void 0 : _a.getAttribute('style')) === null || _b === void 0 ? void 0 : _b.includes('width'))) {
|
|
111
112
|
styleStr += 'max-width:100%;';
|
|
112
113
|
}
|
|
113
114
|
e.parentNode.setAttribute('style', styleStr);
|
|
114
|
-
e.setAttribute(
|
|
115
|
+
e.setAttribute('style', 'overflow:inherit');
|
|
115
116
|
} else {
|
|
116
|
-
e.setAttribute(
|
|
117
|
+
e.setAttribute('style', '');
|
|
117
118
|
}
|
|
118
119
|
return e.offsetWidth + tolerance < e.scrollWidth || e.offsetHeight < e.scrollHeight;
|
|
119
120
|
};
|
|
@@ -165,6 +166,11 @@ var _default = exports["default"] = function _default(props) {
|
|
|
165
166
|
setLineHeight(getComputedStyle(elementRef.current, null).getPropertyValue('line-height'));
|
|
166
167
|
}
|
|
167
168
|
};
|
|
169
|
+
(0, _react.useEffect)(function () {
|
|
170
|
+
return function () {
|
|
171
|
+
elementRef.current = null; // 清理引用
|
|
172
|
+
};
|
|
173
|
+
}, []);
|
|
168
174
|
(0, _react.useLayoutEffect)(function () {
|
|
169
175
|
if (needRefresh) {
|
|
170
176
|
setRenderId(function (id) {
|
|
@@ -183,17 +189,18 @@ var _default = exports["default"] = function _default(props) {
|
|
|
183
189
|
computeElement();
|
|
184
190
|
}, [renderId]);
|
|
185
191
|
(0, _react.useEffect)(function () {
|
|
186
|
-
|
|
192
|
+
var handleResize = function handleResize() {
|
|
193
|
+
return computeElement();
|
|
194
|
+
};
|
|
195
|
+
window.addEventListener('resize', handleResize);
|
|
187
196
|
return function () {
|
|
188
|
-
window.removeEventListener('resize',
|
|
197
|
+
window.removeEventListener('resize', handleResize);
|
|
189
198
|
};
|
|
190
199
|
}, []);
|
|
191
200
|
// original Node
|
|
192
201
|
var inner = typeof children === 'string' ? children : _popover ? content : title;
|
|
193
202
|
// for className
|
|
194
|
-
var getClassName =
|
|
195
|
-
return "overflow min-width-0 ".concat(_lines ? 'ellipsis-wrap' : 'ellipsis-nowrap', " ").concat(className || '');
|
|
196
|
-
};
|
|
203
|
+
var getClassName = "overflow min-width-0 ".concat(_lines ? 'ellipsis-wrap' : 'ellipsis-nowrap', " ").concat(className || '');
|
|
197
204
|
// Tooltip.trigger(default 'hover') ==trigger==> onVisibleChange(visible)
|
|
198
205
|
var handleVisibleChange = function handleVisibleChange(visible) {
|
|
199
206
|
// const { onVisibleChange } = props;
|
|
@@ -204,9 +211,12 @@ var _default = exports["default"] = function _default(props) {
|
|
|
204
211
|
var handleCopy = function handleCopy(innerText) {
|
|
205
212
|
(0, _copyToClipboard["default"])(innerText);
|
|
206
213
|
setHasCopy(!hasCopy);
|
|
207
|
-
setTimeout(function () {
|
|
214
|
+
var timer = setTimeout(function () {
|
|
208
215
|
setHasCopy(false);
|
|
209
216
|
}, 1000);
|
|
217
|
+
return function () {
|
|
218
|
+
return clearTimeout(timer);
|
|
219
|
+
}; // 清除定时器
|
|
210
220
|
};
|
|
211
221
|
var renderNode = function renderNode() {
|
|
212
222
|
var popoverNode = _react["default"].createElement(_popover2["default"], Object.assign({}, props, {
|
|
@@ -243,7 +253,7 @@ var _default = exports["default"] = function _default(props) {
|
|
|
243
253
|
maxWidth: widthLimit
|
|
244
254
|
})
|
|
245
255
|
}, prefix && prefix, _react["default"].createElement("div", {
|
|
246
|
-
className: getClassName
|
|
256
|
+
className: getClassName,
|
|
247
257
|
key: renderId
|
|
248
258
|
}, inner || inner === 0 ? renderNode() : emptyText), !!suffix && suffix, (inner || inner === 0) && _copyable && lineHeight && _react["default"].createElement("div", {
|
|
249
259
|
className: "svg-button",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ellipsis/index.js"],"names":[],"mappings":"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","sourcesContent":["/*\n * @Author: 梁洪刚\n * @CreatDate: 2021-03-31 13:57:32\n * @Describe: 省略号组件\n */\n\nimport copy from 'copy-to-clipboard'\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport Popover from '../popover'\nimport Tooltip from '../tooltip'\n\nimport CopySVG from './Svg/CopySVG'\nimport TickSVG from './Svg/TickSVG'\nimport './index.less'\n\nconst tolerance = 0 // In px. Depends on the font you are using\n\nconst isEllipsisActive = (e) => {\n if (e.offsetWidth === e.scrollWidth && e.offsetHeight === e.scrollHeight) {\n let styleStr = 'overflow:visible; '\n if (!e?.parentNode?.getAttribute('style')?.includes('width')) {\n styleStr += 'max-width:100%;'\n }\n e.parentNode.setAttribute('style', styleStr)\n e.setAttribute(\"style\",'overflow:inherit');\n }else {\n e.setAttribute(\"style\", \"\")\n }\n return e.offsetWidth + tolerance < e.scrollWidth || e.offsetHeight < e.scrollHeight\n}\n\nexport default (props) => {\n let {\n _popover = props.Popover, // `Popover` or `Tooltip` ?\n title, // in most cases for `Tooltip`\n content, // in most cases for `Popover`\n className,\n style,\n widthLimit, // width trigger value\n _lines = props.lines !== 1 && props.lines, // number or lines, default 1 line;\n children, // children Node\n emptyText, // default: null\n _copyable = props.copyable, // copy function\n prefix, // 前缀dom\n suffix, // 后缀dom\n needRefresh = true // select.options的情况下不要刷新\n } = props\n\n const [renderId, setRenderId] = useState(1);\n // allow visible or not state\n const [flag, setFlag] = useState(true)\n // visible[Tooltip/Popover] state\n const [tipVisible, setTipVisible] = useState(false)\n // copy animation state\n const [hasCopy, setHasCopy] = useState(false)\n const [lineHeight, setLineHeight] = useState()\n\n const elementRef = useRef()\n\n const computeElement = ()=>{\n elementRef.current && isEllipsisActive(elementRef.current)\n ? setFlag(true)\n : (setFlag(false), setTipVisible(false))\n\n if (elementRef.current) {\n setLineHeight(getComputedStyle(elementRef.current, null).getPropertyValue('line-height'))\n }\n }\n\n useLayoutEffect(()=>{\n if (needRefresh) {\n setRenderId(id => id + 1);\n }else {\n if(renderId < 2) {\n setRenderId(id => id + 1);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [title, needRefresh, content, children])\n\n useEffect(() => {\n computeElement()\n },[renderId])\n\n useEffect(()=>{\n window.addEventListener(\"resize\",computeElement)\n return ()=>{\n window.removeEventListener('resize',computeElement)\n }\n },[])\n\n // original Node\n const inner = typeof children === 'string' ? children : _popover ? content : title\n\n // for className\n const getClassName = () => {\n return `overflow min-width-0 ${_lines ? 'ellipsis-wrap' : 'ellipsis-nowrap'} ${className || ''}`\n }\n\n // Tooltip.trigger(default 'hover') ==trigger==> onVisibleChange(visible)\n const handleVisibleChange = (visible) => {\n // const { onVisibleChange } = props;\n // onVisibleChange(visible);\n flag && setTipVisible(visible)\n }\n\n // onClick Copy Button\n const handleCopy = (innerText) => {\n copy(innerText)\n setHasCopy(!hasCopy)\n setTimeout(() => {\n setHasCopy(false)\n }, 1000)\n }\n\n const renderNode = () => {\n const popoverNode = (\n <Popover\n {...props}\n content={content || children}\n visible={tipVisible}\n onVisibleChange={(visible) => handleVisibleChange(visible)}\n >\n <div className={className} style={{ WebkitLineClamp: _lines }} ref={elementRef}>\n {children || content}\n </div>\n </Popover>\n )\n\n const tooltipNode = (\n <Tooltip\n {...props}\n title={title || children}\n visible={tipVisible}\n onVisibleChange={(visible) => handleVisibleChange(visible)}\n >\n <div className={className} style={{ WebkitLineClamp: _lines }} ref={elementRef}>\n {children || title}\n </div>\n </Tooltip>\n )\n\n return _popover ? popoverNode : tooltipNode\n }\n\n return (\n <>\n <div\n className=\"tntd-ellipsis\"\n style={{\n ...style,\n maxWidth: widthLimit,\n }}\n >\n {/* prefix */}\n {prefix && prefix}\n {/* content */}\n <div className={getClassName()} key={renderId}>{(inner||inner===0) ? renderNode() : emptyText}</div>\n {/* suffix */}\n {!!suffix && suffix}\n {/* copyable button */}\n {(inner||inner===0) && _copyable && lineHeight && (\n <div\n className=\"svg-button\"\n style={{\n height: lineHeight,\n }}\n onClick={() => handleCopy(elementRef.current.innerText)}\n >\n {!hasCopy ? (\n <CopySVG\n style={{\n height: lineHeight,\n }}\n />\n ) : (\n <TickSVG\n style={{\n height: lineHeight,\n }}\n />\n )}\n </div>\n )}\n </div>\n </>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ellipsis/index.js"],"names":[],"mappings":"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","sourcesContent":["/*\n * @Author: 梁洪刚\n * @CreatDate: 2021-03-31 13:57:32\n * @Describe: 省略号组件\n */\n\nimport copy from 'copy-to-clipboard'\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport Popover from '../popover'\nimport Tooltip from '../tooltip'\n\nimport CopySVG from './Svg/CopySVG'\nimport TickSVG from './Svg/TickSVG'\nimport './index.less'\n\nconst tolerance = 0; // In px. Depends on the font you are using\n\nconst isEllipsisActive = (e) => {\n e.setAttribute('style', '');\n if (e.offsetWidth === e.scrollWidth && e.offsetHeight === e.scrollHeight) {\n let styleStr = 'overflow:visible; ';\n if (!e?.parentNode?.getAttribute('style')?.includes('width')) {\n styleStr += 'max-width:100%;';\n }\n e.parentNode.setAttribute('style', styleStr);\n e.setAttribute('style', 'overflow:inherit');\n } else {\n e.setAttribute('style', '');\n }\n return e.offsetWidth + tolerance < e.scrollWidth || e.offsetHeight < e.scrollHeight;\n};\n\nexport default (props) => {\n let {\n _popover = props.Popover, // `Popover` or `Tooltip` ?\n title, // in most cases for `Tooltip`\n content, // in most cases for `Popover`\n className,\n style,\n widthLimit, // width trigger value\n _lines = props.lines !== 1 && props.lines, // number or lines, default 1 line;\n children, // children Node\n emptyText, // default: null\n _copyable = props.copyable, // copy function\n prefix, // 前缀dom\n suffix, // 后缀dom\n needRefresh = true // select.options的情况下不要刷新\n } = props;\n\n const [renderId, setRenderId] = useState(1);\n // allow visible or not state\n const [flag, setFlag] = useState(true);\n // visible[Tooltip/Popover] state\n const [tipVisible, setTipVisible] = useState(false);\n // copy animation state\n const [hasCopy, setHasCopy] = useState(false);\n const [lineHeight, setLineHeight] = useState();\n\n const elementRef = useRef();\n\n const computeElement = () => {\n elementRef.current && isEllipsisActive(elementRef.current) ? setFlag(true) : (setFlag(false), setTipVisible(false));\n\n if (elementRef.current) {\n setLineHeight(getComputedStyle(elementRef.current, null).getPropertyValue('line-height'));\n }\n };\n useEffect(() => {\n return () => {\n elementRef.current = null; // 清理引用\n };\n }, []);\n useLayoutEffect(() => {\n if (needRefresh) {\n setRenderId((id) => id + 1);\n } else {\n if (renderId < 2) {\n setRenderId((id) => id + 1);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [title, needRefresh, content, children]);\n\n useEffect(() => {\n computeElement();\n }, [renderId]);\n\n useEffect(() => {\n const handleResize = () => computeElement();\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n // original Node\n const inner = typeof children === 'string' ? children : _popover ? content : title;\n\n // for className\n const getClassName = `overflow min-width-0 ${_lines ? 'ellipsis-wrap' : 'ellipsis-nowrap'} ${className || ''}`;\n\n // Tooltip.trigger(default 'hover') ==trigger==> onVisibleChange(visible)\n const handleVisibleChange = (visible) => {\n // const { onVisibleChange } = props;\n // onVisibleChange(visible);\n flag && setTipVisible(visible);\n };\n\n // onClick Copy Button\n const handleCopy = (innerText) => {\n copy(innerText);\n setHasCopy(!hasCopy);\n const timer = setTimeout(() => {\n setHasCopy(false);\n }, 1000);\n return () => clearTimeout(timer); // 清除定时器\n };\n\n const renderNode = () => {\n const popoverNode = (\n <Popover\n {...props}\n content={content || children}\n visible={tipVisible}\n onVisibleChange={(visible) => handleVisibleChange(visible)}>\n <div className={className} style={{ WebkitLineClamp: _lines }} ref={elementRef}>\n {children || content}\n </div>\n </Popover>\n );\n\n const tooltipNode = (\n <Tooltip {...props} title={title || children} visible={tipVisible} onVisibleChange={(visible) => handleVisibleChange(visible)}>\n <div className={className} style={{ WebkitLineClamp: _lines }} ref={elementRef}>\n {children || title}\n </div>\n </Tooltip>\n );\n\n return _popover ? popoverNode : tooltipNode;\n };\n\n return (\n <>\n <div\n className=\"tntd-ellipsis\"\n style={{\n ...style,\n maxWidth: widthLimit\n }}>\n {/* prefix */}\n {prefix && prefix}\n {/* content */}\n <div className={getClassName} key={renderId}>\n {inner || inner === 0 ? renderNode() : emptyText}\n </div>\n {/* suffix */}\n {!!suffix && suffix}\n {/* copyable button */}\n {(inner || inner === 0) && _copyable && lineHeight && (\n <div\n className=\"svg-button\"\n style={{\n height: lineHeight\n }}\n onClick={() => handleCopy(elementRef.current.innerText)}>\n {!hasCopy ? (\n <CopySVG\n style={{\n height: lineHeight\n }}\n />\n ) : (\n <TickSVG\n style={{\n height: lineHeight\n }}\n />\n )}\n </div>\n )}\n </div>\n </>\n );\n};\n"]}
|