@pingux/astro 2.135.0-alpha.1 → 2.135.0-alpha.2
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/lib/cjs/components/ExpandableText/ExpandableText.d.ts +4 -0
- package/lib/cjs/components/ExpandableText/ExpandableText.js +136 -0
- package/lib/cjs/components/ExpandableText/ExpandableText.mdx +30 -0
- package/lib/cjs/components/ExpandableText/ExpandableText.stories.d.ts +5 -0
- package/lib/cjs/components/ExpandableText/ExpandableText.stories.js +33 -0
- package/lib/cjs/components/ExpandableText/ExpandableText.styles.d.ts +15 -0
- package/lib/cjs/components/ExpandableText/ExpandableText.styles.js +24 -0
- package/lib/cjs/components/ExpandableText/ExpandableText.test.d.ts +1 -0
- package/lib/cjs/components/ExpandableText/ExpandableText.test.js +115 -0
- package/lib/cjs/components/ExpandableText/index.d.ts +1 -0
- package/lib/cjs/components/ExpandableText/index.js +14 -0
- package/lib/cjs/index.d.ts +1 -0
- package/lib/cjs/index.js +8 -0
- package/lib/cjs/styles/variants/variants.js +2 -0
- package/lib/cjs/types/expandableText.d.ts +10 -0
- package/lib/cjs/types/expandableText.js +6 -0
- package/lib/cjs/types/index.d.ts +1 -0
- package/lib/cjs/types/index.js +55 -44
- package/lib/components/ExpandableText/ExpandableText.js +122 -0
- package/lib/components/ExpandableText/ExpandableText.mdx +30 -0
- package/lib/components/ExpandableText/ExpandableText.stories.js +23 -0
- package/lib/components/ExpandableText/ExpandableText.styles.js +16 -0
- package/lib/components/ExpandableText/ExpandableText.test.js +112 -0
- package/lib/components/ExpandableText/index.js +1 -0
- package/lib/index.js +1 -0
- package/lib/styles/variants/variants.js +2 -0
- package/lib/types/expandableText.js +1 -0
- package/lib/types/index.js +1 -0
- package/package.json +1 -1
@@ -0,0 +1,136 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
|
4
|
+
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
5
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
6
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
7
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
8
|
+
_Object$defineProperty(exports, "__esModule", {
|
9
|
+
value: true
|
10
|
+
});
|
11
|
+
exports["default"] = void 0;
|
12
|
+
var _parseFloat2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/parse-float"));
|
13
|
+
var _trim = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/trim"));
|
14
|
+
var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
|
15
|
+
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
|
16
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
17
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
18
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
19
|
+
var _react = _interopRequireWildcard(require("react"));
|
20
|
+
var _utils = require("@react-aria/utils");
|
21
|
+
var _uuid = require("uuid");
|
22
|
+
var _index = require("../../index");
|
23
|
+
var _react2 = require("@emotion/react");
|
24
|
+
var _excluded = ["children", "maxLines", "buttonProps"];
|
25
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
26
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
27
|
+
var ExpandableText = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
28
|
+
var children = props.children,
|
29
|
+
maxLines = props.maxLines,
|
30
|
+
buttonProps = props.buttonProps,
|
31
|
+
others = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
32
|
+
var textContent = typeof children === 'string' ? children : '';
|
33
|
+
var _useState = (0, _react.useState)(false),
|
34
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
35
|
+
isExpanded = _useState2[0],
|
36
|
+
setIsExpanded = _useState2[1];
|
37
|
+
var _useState3 = (0, _react.useState)(false),
|
38
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
39
|
+
isTruncated = _useState4[0],
|
40
|
+
setIsTruncated = _useState4[1];
|
41
|
+
var _useState5 = (0, _react.useState)(textContent),
|
42
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
43
|
+
visibleText = _useState6[0],
|
44
|
+
setVisibleText = _useState6[1];
|
45
|
+
var containerRef = (0, _react.useRef)(null);
|
46
|
+
var hiddenContainerRef = (0, _react.useRef)(null);
|
47
|
+
var prevWidthRef = (0, _react.useRef)(window.innerWidth);
|
48
|
+
var truncateToLines = function truncateToLines() {
|
49
|
+
var _containerRef$current;
|
50
|
+
// get line height and calculate the number of lines
|
51
|
+
var container = hiddenContainerRef.current;
|
52
|
+
if (!container) return 0;
|
53
|
+
container.style.width = "".concat(((_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.offsetWidth) || 0, "px");
|
54
|
+
container.innerText = textContent;
|
55
|
+
var lineHeight = (0, _parseFloat2["default"])(getComputedStyle(container).lineHeight);
|
56
|
+
var fullTextLines = Math.round(container.offsetHeight / lineHeight);
|
57
|
+
if (fullTextLines <= maxLines) {
|
58
|
+
setVisibleText(textContent);
|
59
|
+
setIsTruncated(false);
|
60
|
+
return undefined;
|
61
|
+
}
|
62
|
+
|
63
|
+
// using binary search to find the maximum text that fits within maxLines
|
64
|
+
var suffix = '... View More';
|
65
|
+
var start = 0;
|
66
|
+
var end = textContent.length;
|
67
|
+
var truncatedText = '';
|
68
|
+
while (start < end) {
|
69
|
+
var _context, _context2;
|
70
|
+
var mid = Math.floor((start + end) / 2);
|
71
|
+
var candidateText = (0, _trim["default"])(_context = (0, _slice["default"])(textContent).call(textContent, 0, mid)).call(_context);
|
72
|
+
var candidate = (0, _concat["default"])(_context2 = "".concat(candidateText)).call(_context2, suffix);
|
73
|
+
container.innerText = candidate;
|
74
|
+
var lines = Math.round(container.offsetHeight / lineHeight);
|
75
|
+
if (lines <= maxLines) {
|
76
|
+
truncatedText = candidateText;
|
77
|
+
start = mid + 1;
|
78
|
+
} else {
|
79
|
+
end = mid;
|
80
|
+
}
|
81
|
+
}
|
82
|
+
setVisibleText("".concat(truncatedText, "...") || textContent);
|
83
|
+
setIsTruncated(true);
|
84
|
+
return undefined;
|
85
|
+
};
|
86
|
+
var onResize = (0, _react.useCallback)(function () {
|
87
|
+
if (!isExpanded) {
|
88
|
+
truncateToLines();
|
89
|
+
}
|
90
|
+
// Reset the expansion state if the width has changed
|
91
|
+
if (window.innerWidth !== prevWidthRef.current) {
|
92
|
+
prevWidthRef.current = window.innerWidth;
|
93
|
+
setIsExpanded(false);
|
94
|
+
}
|
95
|
+
}, [isExpanded]);
|
96
|
+
(0, _utils.useResizeObserver)({
|
97
|
+
ref: containerRef,
|
98
|
+
onResize: onResize
|
99
|
+
});
|
100
|
+
|
101
|
+
/* istanbul ignore next */
|
102
|
+
(0, _utils.useLayoutEffect)(function () {
|
103
|
+
if (isExpanded) {
|
104
|
+
setVisibleText(textContent);
|
105
|
+
} else {
|
106
|
+
truncateToLines();
|
107
|
+
}
|
108
|
+
}, [isExpanded, textContent]);
|
109
|
+
var toggleExpanded = function toggleExpanded() {
|
110
|
+
return setIsExpanded(!isExpanded);
|
111
|
+
};
|
112
|
+
var textId = (0, _uuid.v4)();
|
113
|
+
return (0, _react2.jsx)(_index.Box, {
|
114
|
+
ref: ref
|
115
|
+
}, (0, _react2.jsx)("div", {
|
116
|
+
ref: containerRef
|
117
|
+
}, (0, _react2.jsx)(_index.Text, (0, _extends2["default"])({
|
118
|
+
variant: "variants.expandableText.text",
|
119
|
+
id: textId
|
120
|
+
}, others), visibleText, ' '), isTruncated && (0, _react2.jsx)(_index.Button, (0, _extends2["default"])({
|
121
|
+
onPress: toggleExpanded,
|
122
|
+
"aria-expanded": isExpanded,
|
123
|
+
"aria-controls": textId,
|
124
|
+
variant: "link",
|
125
|
+
sx: {
|
126
|
+
display: 'inline-block',
|
127
|
+
whiteSpace: 'nowrap',
|
128
|
+
ml: 1
|
129
|
+
}
|
130
|
+
}, buttonProps), isExpanded ? 'View Less' : 'View More')), (0, _react2.jsx)(_index.Box, {
|
131
|
+
ref: hiddenContainerRef,
|
132
|
+
variant: "expandableText.hiddenContainer"
|
133
|
+
}));
|
134
|
+
});
|
135
|
+
var _default = ExpandableText;
|
136
|
+
exports["default"] = _default;
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import { Meta } from '@storybook/addon-docs';
|
2
|
+
|
3
|
+
<Meta title="Components/ExpandableText/ExpandableText" />
|
4
|
+
|
5
|
+
# ExpandableText
|
6
|
+
|
7
|
+
ExpandableText is used to manage long texts by truncating them based on max lines.
|
8
|
+
It allows collapse and expand the text to view in full.
|
9
|
+
|
10
|
+
### Required components
|
11
|
+
|
12
|
+
This component can be used independently and does not require additional components.
|
13
|
+
|
14
|
+
### Accessibility
|
15
|
+
|
16
|
+
#### Keyboard Navigation
|
17
|
+
|
18
|
+
These keys provide additional functionality to the component.
|
19
|
+
|
20
|
+
| Keys | Functions |
|
21
|
+
| ---- | --------- |
|
22
|
+
| Space or Enter | Selects the button. |
|
23
|
+
| Tab | Focuses the button and follows the page tab sequence. |
|
24
|
+
|
25
|
+
|
26
|
+
#### Screen readers
|
27
|
+
|
28
|
+
This component uses the following attributes to assist screen readers:
|
29
|
+
- The trigger button uses the **`aria-expanded`** attribute to indicate when the content expands and collapses.
|
30
|
+
- The button uses, **`aria-controls`** which references the iD of the collapsible region.
|
@@ -0,0 +1,5 @@
|
|
1
|
+
import { StoryFn } from '@storybook/react';
|
2
|
+
import { ExpandableTextProps } from '../../types';
|
3
|
+
declare const _default: import("@storybook/types").ComponentAnnotations<import("@storybook/react/dist/types-0a347bb9").R, import("@storybook/types").Args>;
|
4
|
+
export default _default;
|
5
|
+
export declare const Default: StoryFn<ExpandableTextProps>;
|
@@ -0,0 +1,33 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports["default"] = exports.Default = void 0;
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
10
|
+
var _storybookDocsLayout = _interopRequireDefault(require("../../../.storybook/storybookDocsLayout"));
|
11
|
+
var _index = require("../../index");
|
12
|
+
var _ExpandableText = _interopRequireDefault(require("./ExpandableText.mdx"));
|
13
|
+
var _react2 = require("@emotion/react");
|
14
|
+
var _default = {
|
15
|
+
title: 'Experimental/ ExpandableText',
|
16
|
+
component: _index.ExpandableText,
|
17
|
+
parameters: {
|
18
|
+
docs: {
|
19
|
+
page: function page() {
|
20
|
+
return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_ExpandableText["default"], null), (0, _react2.jsx)(_storybookDocsLayout["default"], null));
|
21
|
+
}
|
22
|
+
},
|
23
|
+
codesandbox: false
|
24
|
+
}
|
25
|
+
};
|
26
|
+
exports["default"] = _default;
|
27
|
+
var Default = function Default(args) {
|
28
|
+
return (0, _react2.jsx)(_index.ExpandableText, {
|
29
|
+
maxLines: 5,
|
30
|
+
"data-testid": "test-field"
|
31
|
+
}, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");
|
32
|
+
};
|
33
|
+
exports.Default = Default;
|
@@ -0,0 +1,15 @@
|
|
1
|
+
declare const _default: {
|
2
|
+
text: {
|
3
|
+
display: string;
|
4
|
+
};
|
5
|
+
hiddenContainer: {
|
6
|
+
visibility: string;
|
7
|
+
position: string;
|
8
|
+
p: number;
|
9
|
+
m: number;
|
10
|
+
border: number;
|
11
|
+
whiteSpace: string;
|
12
|
+
wordBreak: string;
|
13
|
+
};
|
14
|
+
};
|
15
|
+
export default _default;
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
exports["default"] = void 0;
|
8
|
+
var text = {
|
9
|
+
display: 'inline'
|
10
|
+
};
|
11
|
+
var hiddenContainer = {
|
12
|
+
visibility: 'hidden',
|
13
|
+
position: 'absolute',
|
14
|
+
p: 0,
|
15
|
+
m: 0,
|
16
|
+
border: 0,
|
17
|
+
whiteSpace: 'normal',
|
18
|
+
wordBreak: 'break-word'
|
19
|
+
};
|
20
|
+
var _default = {
|
21
|
+
text: text,
|
22
|
+
hiddenContainer: hiddenContainer
|
23
|
+
};
|
24
|
+
exports["default"] = _default;
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,115 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
4
|
+
var _defineProperty = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-property"));
|
5
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
6
|
+
var _react = _interopRequireDefault(require("react"));
|
7
|
+
var _react2 = require("@testing-library/react");
|
8
|
+
var _testWrapper = require("../../utils/testUtils/testWrapper");
|
9
|
+
var _universalComponentTest = require("../../utils/testUtils/universalComponentTest");
|
10
|
+
var _ExpandableText = _interopRequireDefault(require("./ExpandableText"));
|
11
|
+
var _react3 = require("@emotion/react");
|
12
|
+
jest.mock('use-resize-observer', function () {
|
13
|
+
return jest.fn(function () {
|
14
|
+
return {
|
15
|
+
ref: jest.fn(),
|
16
|
+
// a stub ref callback
|
17
|
+
width: 300 // pretend container is 300px wide
|
18
|
+
};
|
19
|
+
});
|
20
|
+
});
|
21
|
+
|
22
|
+
var children = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.';
|
23
|
+
var testId = 'test-text';
|
24
|
+
var defaultProps = {
|
25
|
+
'data-testid': testId,
|
26
|
+
// children,
|
27
|
+
maxLines: 2
|
28
|
+
};
|
29
|
+
var getComponent = function getComponent() {
|
30
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
31
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
32
|
+
_ref$renderFn = _ref.renderFn,
|
33
|
+
renderFn = _ref$renderFn === void 0 ? _testWrapper.render : _ref$renderFn;
|
34
|
+
return renderFn((0, _react3.jsx)(_ExpandableText["default"], (0, _extends2["default"])({}, defaultProps, props), children));
|
35
|
+
};
|
36
|
+
|
37
|
+
// Needs to be added to each components test file
|
38
|
+
(0, _universalComponentTest.universalComponentTests)({
|
39
|
+
renderComponent: function renderComponent(props) {
|
40
|
+
return (0, _react3.jsx)(_ExpandableText["default"], (0, _extends2["default"])({}, defaultProps, props));
|
41
|
+
}
|
42
|
+
});
|
43
|
+
describe('ExpandableText', function () {
|
44
|
+
it('renders children', function () {
|
45
|
+
(0, _defineProperty["default"])(HTMLElement.prototype, 'offsetHeight', {
|
46
|
+
configurable: true,
|
47
|
+
get: function get() {
|
48
|
+
var text = this.innerText || '';
|
49
|
+
var lineHeight = 20;
|
50
|
+
var lines = Math.ceil(text.length / 50);
|
51
|
+
return lines * lineHeight;
|
52
|
+
}
|
53
|
+
});
|
54
|
+
(0, _defineProperty["default"])(window, 'getComputedStyle', {
|
55
|
+
value: function value() {
|
56
|
+
return {
|
57
|
+
lineHeight: '20px'
|
58
|
+
};
|
59
|
+
}
|
60
|
+
});
|
61
|
+
getComponent();
|
62
|
+
var button = _testWrapper.screen.getByRole('button');
|
63
|
+
expect(button).toHaveTextContent(/View More/i);
|
64
|
+
_react2.fireEvent.click(button);
|
65
|
+
var expandableText = _testWrapper.screen.getByText(children);
|
66
|
+
expect(expandableText).toBeInTheDocument();
|
67
|
+
expect(expandableText).toHaveAttribute('data-testid', testId);
|
68
|
+
});
|
69
|
+
it('expands and collapses text on button click', function () {
|
70
|
+
(0, _defineProperty["default"])(HTMLElement.prototype, 'offsetHeight', {
|
71
|
+
configurable: true,
|
72
|
+
get: function get() {
|
73
|
+
var text = this.innerText || '';
|
74
|
+
var lineHeight = 20;
|
75
|
+
var lines = Math.ceil(text.length / 50);
|
76
|
+
return lines * lineHeight;
|
77
|
+
}
|
78
|
+
});
|
79
|
+
(0, _defineProperty["default"])(window, 'getComputedStyle', {
|
80
|
+
value: function value() {
|
81
|
+
return {
|
82
|
+
lineHeight: '20px'
|
83
|
+
};
|
84
|
+
}
|
85
|
+
});
|
86
|
+
getComponent();
|
87
|
+
var button = _testWrapper.screen.getByRole('button');
|
88
|
+
expect(button).toHaveTextContent(/View More/i);
|
89
|
+
_react2.fireEvent.click(button);
|
90
|
+
expect(button).toHaveTextContent(/View Less/i);
|
91
|
+
_react2.fireEvent.click(_testWrapper.screen.getByRole('button'));
|
92
|
+
expect(button).toHaveTextContent(/View More/i);
|
93
|
+
});
|
94
|
+
it('it rests the expansion state when resized', function () {
|
95
|
+
getComponent();
|
96
|
+
var button = _testWrapper.screen.getByRole('button');
|
97
|
+
_react2.fireEvent.click(button);
|
98
|
+
expect(button).toHaveTextContent(/View Less/i);
|
99
|
+
var originalInnerWidth = window.innerWidth;
|
100
|
+
window.innerWidth = originalInnerWidth + 100;
|
101
|
+
(0, _react2.fireEvent)(window, new Event('resize'));
|
102
|
+
expect(button).toHaveTextContent(/View More/i);
|
103
|
+
window.innerWidth = originalInnerWidth;
|
104
|
+
});
|
105
|
+
it('truncates the text on resize when button is not expanded', function () {
|
106
|
+
getComponent();
|
107
|
+
var button = _testWrapper.screen.getByRole('button');
|
108
|
+
expect(button).toHaveTextContent(/View More/i);
|
109
|
+
var originalInnerWidth = window.innerWidth;
|
110
|
+
window.innerWidth = originalInnerWidth + 100;
|
111
|
+
(0, _react2.fireEvent)(window, new Event('resize'));
|
112
|
+
expect(button).toHaveTextContent(/View More/i);
|
113
|
+
window.innerWidth = originalInnerWidth;
|
114
|
+
});
|
115
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
export { default } from './ExpandableText';
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
_Object$defineProperty(exports, "default", {
|
9
|
+
enumerable: true,
|
10
|
+
get: function get() {
|
11
|
+
return _ExpandableText["default"];
|
12
|
+
}
|
13
|
+
});
|
14
|
+
var _ExpandableText = _interopRequireDefault(require("./ExpandableText"));
|
package/lib/cjs/index.d.ts
CHANGED
@@ -76,6 +76,7 @@ export { default as DatePicker } from './components/DatePicker';
|
|
76
76
|
export { default as DateField } from './components/DatePicker/DateField';
|
77
77
|
export { default as EditButton } from './components/EditButton';
|
78
78
|
export { default as EnvironmentBreadcrumb } from './components/EnvironmentBreadcrumb';
|
79
|
+
export { default as ExpandableText } from './components/ExpandableText';
|
79
80
|
export { default as FieldHelperText } from './components/FieldHelperText';
|
80
81
|
export * from './components/FieldHelperText';
|
81
82
|
export { default as FileInputField } from './components/FileInputField';
|
package/lib/cjs/index.js
CHANGED
@@ -67,6 +67,7 @@ var _exportNames = {
|
|
67
67
|
DateField: true,
|
68
68
|
EditButton: true,
|
69
69
|
EnvironmentBreadcrumb: true,
|
70
|
+
ExpandableText: true,
|
70
71
|
FieldHelperText: true,
|
71
72
|
FileInputField: true,
|
72
73
|
Footer: true,
|
@@ -455,6 +456,12 @@ _Object$defineProperty(exports, "ErrorCalloutBadge", {
|
|
455
456
|
return _ErrorCalloutBadge["default"];
|
456
457
|
}
|
457
458
|
});
|
459
|
+
_Object$defineProperty(exports, "ExpandableText", {
|
460
|
+
enumerable: true,
|
461
|
+
get: function get() {
|
462
|
+
return _ExpandableText["default"];
|
463
|
+
}
|
464
|
+
});
|
458
465
|
_Object$defineProperty(exports, "FieldHelperText", {
|
459
466
|
enumerable: true,
|
460
467
|
get: function get() {
|
@@ -1439,6 +1446,7 @@ var _DatePicker = _interopRequireDefault(require("./components/DatePicker"));
|
|
1439
1446
|
var _DateField = _interopRequireDefault(require("./components/DatePicker/DateField"));
|
1440
1447
|
var _EditButton = _interopRequireDefault(require("./components/EditButton"));
|
1441
1448
|
var _EnvironmentBreadcrumb = _interopRequireDefault(require("./components/EnvironmentBreadcrumb"));
|
1449
|
+
var _ExpandableText = _interopRequireDefault(require("./components/ExpandableText"));
|
1442
1450
|
var _FieldHelperText = _interopRequireWildcard(require("./components/FieldHelperText"));
|
1443
1451
|
_forEachInstanceProperty(_context24 = _Object$keys(_FieldHelperText)).call(_context24, function (key) {
|
1444
1452
|
if (key === "default" || key === "__esModule") return;
|
@@ -30,6 +30,7 @@ var _CollapsiblePanel = _interopRequireDefault(require("../../components/Collaps
|
|
30
30
|
var _CopyText = _interopRequireDefault(require("../../components/CopyText/CopyText.styles"));
|
31
31
|
var _DataTable = _interopRequireDefault(require("../../components/DataTable/DataTable.styles"));
|
32
32
|
var _EnvironmentalBreadcrumb = _interopRequireDefault(require("../../components/EnvironmentBreadcrumb/EnvironmentalBreadcrumb.styles"));
|
33
|
+
var _ExpandableText = _interopRequireDefault(require("../../components/ExpandableText/ExpandableText.styles"));
|
33
34
|
var _FieldHelperText = _interopRequireDefault(require("../../components/FieldHelperText/FieldHelperText.styles"));
|
34
35
|
var _Footer = _interopRequireDefault(require("../../components/Footer/Footer.styles"));
|
35
36
|
var _GridList = _interopRequireDefault(require("../../components/GridList/GridList.styles"));
|
@@ -87,6 +88,7 @@ var _default = _objectSpread(_objectSpread({
|
|
87
88
|
copyText: _CopyText["default"],
|
88
89
|
dataTable: _DataTable["default"],
|
89
90
|
environmentBreadcrumb: _EnvironmentalBreadcrumb["default"],
|
91
|
+
expandableText: _ExpandableText["default"],
|
90
92
|
fieldHelperText: _FieldHelperText["default"],
|
91
93
|
footer: _Footer["default"],
|
92
94
|
gridList: _GridList["default"],
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { TestingAttributes } from './shared/test';
|
3
|
+
import { ButtonProps } from './button';
|
4
|
+
import { TextProps } from './text';
|
5
|
+
export interface ExpandableTextProps extends TestingAttributes, TextProps {
|
6
|
+
maxLines: number;
|
7
|
+
className?: string;
|
8
|
+
children?: React.ReactNode;
|
9
|
+
buttonProps?: ButtonProps;
|
10
|
+
}
|
package/lib/cjs/types/index.d.ts
CHANGED
@@ -15,6 +15,7 @@ export * from './colorField';
|
|
15
15
|
export * from './copyText';
|
16
16
|
export * from './dataTable';
|
17
17
|
export * from './environmentBreadcrumb';
|
18
|
+
export * from './expandableText';
|
18
19
|
export * from './fieldHelperText';
|
19
20
|
export * from './footer';
|
20
21
|
export * from './grid';
|
package/lib/cjs/types/index.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context10, _context11, _context12, _context13, _context14, _context15, _context16, _context17, _context18, _context19, _context20, _context21, _context22, _context23, _context24, _context25, _context26, _context27, _context28, _context29, _context30, _context31, _context32, _context33, _context34, _context35, _context36, _context37, _context38, _context39, _context40, _context41, _context42, _context43, _context44, _context45, _context46, _context47, _context48, _context49, _context50, _context51, _context52, _context53, _context54, _context55, _context56, _context57, _context58, _context59, _context60;
|
3
|
+
var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context10, _context11, _context12, _context13, _context14, _context15, _context16, _context17, _context18, _context19, _context20, _context21, _context22, _context23, _context24, _context25, _context26, _context27, _context28, _context29, _context30, _context31, _context32, _context33, _context34, _context35, _context36, _context37, _context38, _context39, _context40, _context41, _context42, _context43, _context44, _context45, _context46, _context47, _context48, _context49, _context50, _context51, _context52, _context53, _context54, _context55, _context56, _context57, _context58, _context59, _context60, _context61;
|
4
4
|
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
5
5
|
var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
|
6
6
|
var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
|
@@ -194,8 +194,19 @@ _forEachInstanceProperty(_context17 = _Object$keys(_environmentBreadcrumb)).call
|
|
194
194
|
}
|
195
195
|
});
|
196
196
|
});
|
197
|
+
var _expandableText = require("./expandableText");
|
198
|
+
_forEachInstanceProperty(_context18 = _Object$keys(_expandableText)).call(_context18, function (key) {
|
199
|
+
if (key === "default" || key === "__esModule") return;
|
200
|
+
if (key in exports && exports[key] === _expandableText[key]) return;
|
201
|
+
_Object$defineProperty(exports, key, {
|
202
|
+
enumerable: true,
|
203
|
+
get: function get() {
|
204
|
+
return _expandableText[key];
|
205
|
+
}
|
206
|
+
});
|
207
|
+
});
|
197
208
|
var _fieldHelperText = require("./fieldHelperText");
|
198
|
-
_forEachInstanceProperty(
|
209
|
+
_forEachInstanceProperty(_context19 = _Object$keys(_fieldHelperText)).call(_context19, function (key) {
|
199
210
|
if (key === "default" || key === "__esModule") return;
|
200
211
|
if (key in exports && exports[key] === _fieldHelperText[key]) return;
|
201
212
|
_Object$defineProperty(exports, key, {
|
@@ -206,7 +217,7 @@ _forEachInstanceProperty(_context18 = _Object$keys(_fieldHelperText)).call(_cont
|
|
206
217
|
});
|
207
218
|
});
|
208
219
|
var _footer = require("./footer");
|
209
|
-
_forEachInstanceProperty(
|
220
|
+
_forEachInstanceProperty(_context20 = _Object$keys(_footer)).call(_context20, function (key) {
|
210
221
|
if (key === "default" || key === "__esModule") return;
|
211
222
|
if (key in exports && exports[key] === _footer[key]) return;
|
212
223
|
_Object$defineProperty(exports, key, {
|
@@ -217,7 +228,7 @@ _forEachInstanceProperty(_context19 = _Object$keys(_footer)).call(_context19, fu
|
|
217
228
|
});
|
218
229
|
});
|
219
230
|
var _grid = require("./grid");
|
220
|
-
_forEachInstanceProperty(
|
231
|
+
_forEachInstanceProperty(_context21 = _Object$keys(_grid)).call(_context21, function (key) {
|
221
232
|
if (key === "default" || key === "__esModule") return;
|
222
233
|
if (key in exports && exports[key] === _grid[key]) return;
|
223
234
|
_Object$defineProperty(exports, key, {
|
@@ -228,7 +239,7 @@ _forEachInstanceProperty(_context20 = _Object$keys(_grid)).call(_context20, func
|
|
228
239
|
});
|
229
240
|
});
|
230
241
|
var _helpHint = require("./helpHint");
|
231
|
-
_forEachInstanceProperty(
|
242
|
+
_forEachInstanceProperty(_context22 = _Object$keys(_helpHint)).call(_context22, function (key) {
|
232
243
|
if (key === "default" || key === "__esModule") return;
|
233
244
|
if (key in exports && exports[key] === _helpHint[key]) return;
|
234
245
|
_Object$defineProperty(exports, key, {
|
@@ -239,7 +250,7 @@ _forEachInstanceProperty(_context21 = _Object$keys(_helpHint)).call(_context21,
|
|
239
250
|
});
|
240
251
|
});
|
241
252
|
var _icon = require("./icon");
|
242
|
-
_forEachInstanceProperty(
|
253
|
+
_forEachInstanceProperty(_context23 = _Object$keys(_icon)).call(_context23, function (key) {
|
243
254
|
if (key === "default" || key === "__esModule") return;
|
244
255
|
if (key in exports && exports[key] === _icon[key]) return;
|
245
256
|
_Object$defineProperty(exports, key, {
|
@@ -250,7 +261,7 @@ _forEachInstanceProperty(_context22 = _Object$keys(_icon)).call(_context22, func
|
|
250
261
|
});
|
251
262
|
});
|
252
263
|
var _iconBadge = require("./iconBadge");
|
253
|
-
_forEachInstanceProperty(
|
264
|
+
_forEachInstanceProperty(_context24 = _Object$keys(_iconBadge)).call(_context24, function (key) {
|
254
265
|
if (key === "default" || key === "__esModule") return;
|
255
266
|
if (key in exports && exports[key] === _iconBadge[key]) return;
|
256
267
|
_Object$defineProperty(exports, key, {
|
@@ -261,7 +272,7 @@ _forEachInstanceProperty(_context23 = _Object$keys(_iconBadge)).call(_context23,
|
|
261
272
|
});
|
262
273
|
});
|
263
274
|
var _iconButton = require("./iconButton");
|
264
|
-
_forEachInstanceProperty(
|
275
|
+
_forEachInstanceProperty(_context25 = _Object$keys(_iconButton)).call(_context25, function (key) {
|
265
276
|
if (key === "default" || key === "__esModule") return;
|
266
277
|
if (key in exports && exports[key] === _iconButton[key]) return;
|
267
278
|
_Object$defineProperty(exports, key, {
|
@@ -272,7 +283,7 @@ _forEachInstanceProperty(_context24 = _Object$keys(_iconButton)).call(_context24
|
|
272
283
|
});
|
273
284
|
});
|
274
285
|
var _iconButtonToggle = require("./iconButtonToggle");
|
275
|
-
_forEachInstanceProperty(
|
286
|
+
_forEachInstanceProperty(_context26 = _Object$keys(_iconButtonToggle)).call(_context26, function (key) {
|
276
287
|
if (key === "default" || key === "__esModule") return;
|
277
288
|
if (key in exports && exports[key] === _iconButtonToggle[key]) return;
|
278
289
|
_Object$defineProperty(exports, key, {
|
@@ -283,7 +294,7 @@ _forEachInstanceProperty(_context25 = _Object$keys(_iconButtonToggle)).call(_con
|
|
283
294
|
});
|
284
295
|
});
|
285
296
|
var _iconWrapper = require("./iconWrapper");
|
286
|
-
_forEachInstanceProperty(
|
297
|
+
_forEachInstanceProperty(_context27 = _Object$keys(_iconWrapper)).call(_context27, function (key) {
|
287
298
|
if (key === "default" || key === "__esModule") return;
|
288
299
|
if (key in exports && exports[key] === _iconWrapper[key]) return;
|
289
300
|
_Object$defineProperty(exports, key, {
|
@@ -294,7 +305,7 @@ _forEachInstanceProperty(_context26 = _Object$keys(_iconWrapper)).call(_context2
|
|
294
305
|
});
|
295
306
|
});
|
296
307
|
var _input = require("./input");
|
297
|
-
_forEachInstanceProperty(
|
308
|
+
_forEachInstanceProperty(_context28 = _Object$keys(_input)).call(_context28, function (key) {
|
298
309
|
if (key === "default" || key === "__esModule") return;
|
299
310
|
if (key in exports && exports[key] === _input[key]) return;
|
300
311
|
_Object$defineProperty(exports, key, {
|
@@ -305,7 +316,7 @@ _forEachInstanceProperty(_context27 = _Object$keys(_input)).call(_context27, fun
|
|
305
316
|
});
|
306
317
|
});
|
307
318
|
var _item = require("./item");
|
308
|
-
_forEachInstanceProperty(
|
319
|
+
_forEachInstanceProperty(_context29 = _Object$keys(_item)).call(_context29, function (key) {
|
309
320
|
if (key === "default" || key === "__esModule") return;
|
310
321
|
if (key in exports && exports[key] === _item[key]) return;
|
311
322
|
_Object$defineProperty(exports, key, {
|
@@ -316,7 +327,7 @@ _forEachInstanceProperty(_context28 = _Object$keys(_item)).call(_context28, func
|
|
316
327
|
});
|
317
328
|
});
|
318
329
|
var _label = require("./label");
|
319
|
-
_forEachInstanceProperty(
|
330
|
+
_forEachInstanceProperty(_context30 = _Object$keys(_label)).call(_context30, function (key) {
|
320
331
|
if (key === "default" || key === "__esModule") return;
|
321
332
|
if (key in exports && exports[key] === _label[key]) return;
|
322
333
|
_Object$defineProperty(exports, key, {
|
@@ -327,7 +338,7 @@ _forEachInstanceProperty(_context29 = _Object$keys(_label)).call(_context29, fun
|
|
327
338
|
});
|
328
339
|
});
|
329
340
|
var _link = require("./link");
|
330
|
-
_forEachInstanceProperty(
|
341
|
+
_forEachInstanceProperty(_context31 = _Object$keys(_link)).call(_context31, function (key) {
|
331
342
|
if (key === "default" || key === "__esModule") return;
|
332
343
|
if (key in exports && exports[key] === _link[key]) return;
|
333
344
|
_Object$defineProperty(exports, key, {
|
@@ -338,7 +349,7 @@ _forEachInstanceProperty(_context30 = _Object$keys(_link)).call(_context30, func
|
|
338
349
|
});
|
339
350
|
});
|
340
351
|
var _listBox = require("./listBox");
|
341
|
-
_forEachInstanceProperty(
|
352
|
+
_forEachInstanceProperty(_context32 = _Object$keys(_listBox)).call(_context32, function (key) {
|
342
353
|
if (key === "default" || key === "__esModule") return;
|
343
354
|
if (key in exports && exports[key] === _listBox[key]) return;
|
344
355
|
_Object$defineProperty(exports, key, {
|
@@ -349,7 +360,7 @@ _forEachInstanceProperty(_context31 = _Object$keys(_listBox)).call(_context31, f
|
|
349
360
|
});
|
350
361
|
});
|
351
362
|
var _listItem = require("./listItem");
|
352
|
-
_forEachInstanceProperty(
|
363
|
+
_forEachInstanceProperty(_context33 = _Object$keys(_listItem)).call(_context33, function (key) {
|
353
364
|
if (key === "default" || key === "__esModule") return;
|
354
365
|
if (key in exports && exports[key] === _listItem[key]) return;
|
355
366
|
_Object$defineProperty(exports, key, {
|
@@ -360,7 +371,7 @@ _forEachInstanceProperty(_context32 = _Object$keys(_listItem)).call(_context32,
|
|
360
371
|
});
|
361
372
|
});
|
362
373
|
var _loader = require("./loader");
|
363
|
-
_forEachInstanceProperty(
|
374
|
+
_forEachInstanceProperty(_context34 = _Object$keys(_loader)).call(_context34, function (key) {
|
364
375
|
if (key === "default" || key === "__esModule") return;
|
365
376
|
if (key in exports && exports[key] === _loader[key]) return;
|
366
377
|
_Object$defineProperty(exports, key, {
|
@@ -371,7 +382,7 @@ _forEachInstanceProperty(_context33 = _Object$keys(_loader)).call(_context33, fu
|
|
371
382
|
});
|
372
383
|
});
|
373
384
|
var _menu = require("./menu");
|
374
|
-
_forEachInstanceProperty(
|
385
|
+
_forEachInstanceProperty(_context35 = _Object$keys(_menu)).call(_context35, function (key) {
|
375
386
|
if (key === "default" || key === "__esModule") return;
|
376
387
|
if (key in exports && exports[key] === _menu[key]) return;
|
377
388
|
_Object$defineProperty(exports, key, {
|
@@ -382,7 +393,7 @@ _forEachInstanceProperty(_context34 = _Object$keys(_menu)).call(_context34, func
|
|
382
393
|
});
|
383
394
|
});
|
384
395
|
var _menuItem = require("./menuItem");
|
385
|
-
_forEachInstanceProperty(
|
396
|
+
_forEachInstanceProperty(_context36 = _Object$keys(_menuItem)).call(_context36, function (key) {
|
386
397
|
if (key === "default" || key === "__esModule") return;
|
387
398
|
if (key in exports && exports[key] === _menuItem[key]) return;
|
388
399
|
_Object$defineProperty(exports, key, {
|
@@ -393,7 +404,7 @@ _forEachInstanceProperty(_context35 = _Object$keys(_menuItem)).call(_context35,
|
|
393
404
|
});
|
394
405
|
});
|
395
406
|
var _menuSection = require("./menuSection");
|
396
|
-
_forEachInstanceProperty(
|
407
|
+
_forEachInstanceProperty(_context37 = _Object$keys(_menuSection)).call(_context37, function (key) {
|
397
408
|
if (key === "default" || key === "__esModule") return;
|
398
409
|
if (key in exports && exports[key] === _menuSection[key]) return;
|
399
410
|
_Object$defineProperty(exports, key, {
|
@@ -404,7 +415,7 @@ _forEachInstanceProperty(_context36 = _Object$keys(_menuSection)).call(_context3
|
|
404
415
|
});
|
405
416
|
});
|
406
417
|
var _messages = require("./messages");
|
407
|
-
_forEachInstanceProperty(
|
418
|
+
_forEachInstanceProperty(_context38 = _Object$keys(_messages)).call(_context38, function (key) {
|
408
419
|
if (key === "default" || key === "__esModule") return;
|
409
420
|
if (key in exports && exports[key] === _messages[key]) return;
|
410
421
|
_Object$defineProperty(exports, key, {
|
@@ -415,7 +426,7 @@ _forEachInstanceProperty(_context37 = _Object$keys(_messages)).call(_context37,
|
|
415
426
|
});
|
416
427
|
});
|
417
428
|
var _Modal = require("./Modal");
|
418
|
-
_forEachInstanceProperty(
|
429
|
+
_forEachInstanceProperty(_context39 = _Object$keys(_Modal)).call(_context39, function (key) {
|
419
430
|
if (key === "default" || key === "__esModule") return;
|
420
431
|
if (key in exports && exports[key] === _Modal[key]) return;
|
421
432
|
_Object$defineProperty(exports, key, {
|
@@ -426,7 +437,7 @@ _forEachInstanceProperty(_context38 = _Object$keys(_Modal)).call(_context38, fun
|
|
426
437
|
});
|
427
438
|
});
|
428
439
|
var _navBar = require("./navBar");
|
429
|
-
_forEachInstanceProperty(
|
440
|
+
_forEachInstanceProperty(_context40 = _Object$keys(_navBar)).call(_context40, function (key) {
|
430
441
|
if (key === "default" || key === "__esModule") return;
|
431
442
|
if (key in exports && exports[key] === _navBar[key]) return;
|
432
443
|
_Object$defineProperty(exports, key, {
|
@@ -437,7 +448,7 @@ _forEachInstanceProperty(_context39 = _Object$keys(_navBar)).call(_context39, fu
|
|
437
448
|
});
|
438
449
|
});
|
439
450
|
var _navSideBar = require("./navSideBar");
|
440
|
-
_forEachInstanceProperty(
|
451
|
+
_forEachInstanceProperty(_context41 = _Object$keys(_navSideBar)).call(_context41, function (key) {
|
441
452
|
if (key === "default" || key === "__esModule") return;
|
442
453
|
if (key in exports && exports[key] === _navSideBar[key]) return;
|
443
454
|
_Object$defineProperty(exports, key, {
|
@@ -448,7 +459,7 @@ _forEachInstanceProperty(_context40 = _Object$keys(_navSideBar)).call(_context40
|
|
448
459
|
});
|
449
460
|
});
|
450
461
|
var _overlayPanel = require("./overlayPanel");
|
451
|
-
_forEachInstanceProperty(
|
462
|
+
_forEachInstanceProperty(_context42 = _Object$keys(_overlayPanel)).call(_context42, function (key) {
|
452
463
|
if (key === "default" || key === "__esModule") return;
|
453
464
|
if (key in exports && exports[key] === _overlayPanel[key]) return;
|
454
465
|
_Object$defineProperty(exports, key, {
|
@@ -459,7 +470,7 @@ _forEachInstanceProperty(_context41 = _Object$keys(_overlayPanel)).call(_context
|
|
459
470
|
});
|
460
471
|
});
|
461
472
|
var _passwordField = require("./passwordField");
|
462
|
-
_forEachInstanceProperty(
|
473
|
+
_forEachInstanceProperty(_context43 = _Object$keys(_passwordField)).call(_context43, function (key) {
|
463
474
|
if (key === "default" || key === "__esModule") return;
|
464
475
|
if (key in exports && exports[key] === _passwordField[key]) return;
|
465
476
|
_Object$defineProperty(exports, key, {
|
@@ -470,7 +481,7 @@ _forEachInstanceProperty(_context42 = _Object$keys(_passwordField)).call(_contex
|
|
470
481
|
});
|
471
482
|
});
|
472
483
|
var _popoverContainer = require("./popoverContainer");
|
473
|
-
_forEachInstanceProperty(
|
484
|
+
_forEachInstanceProperty(_context44 = _Object$keys(_popoverContainer)).call(_context44, function (key) {
|
474
485
|
if (key === "default" || key === "__esModule") return;
|
475
486
|
if (key in exports && exports[key] === _popoverContainer[key]) return;
|
476
487
|
_Object$defineProperty(exports, key, {
|
@@ -481,7 +492,7 @@ _forEachInstanceProperty(_context43 = _Object$keys(_popoverContainer)).call(_con
|
|
481
492
|
});
|
482
493
|
});
|
483
494
|
var _popoverMenu = require("./popoverMenu");
|
484
|
-
_forEachInstanceProperty(
|
495
|
+
_forEachInstanceProperty(_context45 = _Object$keys(_popoverMenu)).call(_context45, function (key) {
|
485
496
|
if (key === "default" || key === "__esModule") return;
|
486
497
|
if (key in exports && exports[key] === _popoverMenu[key]) return;
|
487
498
|
_Object$defineProperty(exports, key, {
|
@@ -492,7 +503,7 @@ _forEachInstanceProperty(_context44 = _Object$keys(_popoverMenu)).call(_context4
|
|
492
503
|
});
|
493
504
|
});
|
494
505
|
var _progressBar = require("./progressBar");
|
495
|
-
_forEachInstanceProperty(
|
506
|
+
_forEachInstanceProperty(_context46 = _Object$keys(_progressBar)).call(_context46, function (key) {
|
496
507
|
if (key === "default" || key === "__esModule") return;
|
497
508
|
if (key in exports && exports[key] === _progressBar[key]) return;
|
498
509
|
_Object$defineProperty(exports, key, {
|
@@ -503,7 +514,7 @@ _forEachInstanceProperty(_context45 = _Object$keys(_progressBar)).call(_context4
|
|
503
514
|
});
|
504
515
|
});
|
505
516
|
var _requirementsList = require("./requirementsList");
|
506
|
-
_forEachInstanceProperty(
|
517
|
+
_forEachInstanceProperty(_context47 = _Object$keys(_requirementsList)).call(_context47, function (key) {
|
507
518
|
if (key === "default" || key === "__esModule") return;
|
508
519
|
if (key in exports && exports[key] === _requirementsList[key]) return;
|
509
520
|
_Object$defineProperty(exports, key, {
|
@@ -514,7 +525,7 @@ _forEachInstanceProperty(_context46 = _Object$keys(_requirementsList)).call(_con
|
|
514
525
|
});
|
515
526
|
});
|
516
527
|
var _rockerButtonGroup = require("./rockerButtonGroup");
|
517
|
-
_forEachInstanceProperty(
|
528
|
+
_forEachInstanceProperty(_context48 = _Object$keys(_rockerButtonGroup)).call(_context48, function (key) {
|
518
529
|
if (key === "default" || key === "__esModule") return;
|
519
530
|
if (key in exports && exports[key] === _rockerButtonGroup[key]) return;
|
520
531
|
_Object$defineProperty(exports, key, {
|
@@ -525,7 +536,7 @@ _forEachInstanceProperty(_context47 = _Object$keys(_rockerButtonGroup)).call(_co
|
|
525
536
|
});
|
526
537
|
});
|
527
538
|
var _scrollBox = require("./scrollBox");
|
528
|
-
_forEachInstanceProperty(
|
539
|
+
_forEachInstanceProperty(_context49 = _Object$keys(_scrollBox)).call(_context49, function (key) {
|
529
540
|
if (key === "default" || key === "__esModule") return;
|
530
541
|
if (key in exports && exports[key] === _scrollBox[key]) return;
|
531
542
|
_Object$defineProperty(exports, key, {
|
@@ -536,7 +547,7 @@ _forEachInstanceProperty(_context48 = _Object$keys(_scrollBox)).call(_context48,
|
|
536
547
|
});
|
537
548
|
});
|
538
549
|
var _searchField = require("./searchField");
|
539
|
-
_forEachInstanceProperty(
|
550
|
+
_forEachInstanceProperty(_context50 = _Object$keys(_searchField)).call(_context50, function (key) {
|
540
551
|
if (key === "default" || key === "__esModule") return;
|
541
552
|
if (key in exports && exports[key] === _searchField[key]) return;
|
542
553
|
_Object$defineProperty(exports, key, {
|
@@ -547,7 +558,7 @@ _forEachInstanceProperty(_context49 = _Object$keys(_searchField)).call(_context4
|
|
547
558
|
});
|
548
559
|
});
|
549
560
|
var _separator = require("./separator");
|
550
|
-
_forEachInstanceProperty(
|
561
|
+
_forEachInstanceProperty(_context51 = _Object$keys(_separator)).call(_context51, function (key) {
|
551
562
|
if (key === "default" || key === "__esModule") return;
|
552
563
|
if (key in exports && exports[key] === _separator[key]) return;
|
553
564
|
_Object$defineProperty(exports, key, {
|
@@ -558,7 +569,7 @@ _forEachInstanceProperty(_context50 = _Object$keys(_separator)).call(_context50,
|
|
558
569
|
});
|
559
570
|
});
|
560
571
|
var _shared = require("./shared");
|
561
|
-
_forEachInstanceProperty(
|
572
|
+
_forEachInstanceProperty(_context52 = _Object$keys(_shared)).call(_context52, function (key) {
|
562
573
|
if (key === "default" || key === "__esModule") return;
|
563
574
|
if (key in exports && exports[key] === _shared[key]) return;
|
564
575
|
_Object$defineProperty(exports, key, {
|
@@ -569,7 +580,7 @@ _forEachInstanceProperty(_context51 = _Object$keys(_shared)).call(_context51, fu
|
|
569
580
|
});
|
570
581
|
});
|
571
582
|
var _skeleton = require("./skeleton");
|
572
|
-
_forEachInstanceProperty(
|
583
|
+
_forEachInstanceProperty(_context53 = _Object$keys(_skeleton)).call(_context53, function (key) {
|
573
584
|
if (key === "default" || key === "__esModule") return;
|
574
585
|
if (key in exports && exports[key] === _skeleton[key]) return;
|
575
586
|
_Object$defineProperty(exports, key, {
|
@@ -580,7 +591,7 @@ _forEachInstanceProperty(_context52 = _Object$keys(_skeleton)).call(_context52,
|
|
580
591
|
});
|
581
592
|
});
|
582
593
|
var _switchField = require("./switchField");
|
583
|
-
_forEachInstanceProperty(
|
594
|
+
_forEachInstanceProperty(_context54 = _Object$keys(_switchField)).call(_context54, function (key) {
|
584
595
|
if (key === "default" || key === "__esModule") return;
|
585
596
|
if (key in exports && exports[key] === _switchField[key]) return;
|
586
597
|
_Object$defineProperty(exports, key, {
|
@@ -591,7 +602,7 @@ _forEachInstanceProperty(_context53 = _Object$keys(_switchField)).call(_context5
|
|
591
602
|
});
|
592
603
|
});
|
593
604
|
var _tab = require("./tab");
|
594
|
-
_forEachInstanceProperty(
|
605
|
+
_forEachInstanceProperty(_context55 = _Object$keys(_tab)).call(_context55, function (key) {
|
595
606
|
if (key === "default" || key === "__esModule") return;
|
596
607
|
if (key in exports && exports[key] === _tab[key]) return;
|
597
608
|
_Object$defineProperty(exports, key, {
|
@@ -602,7 +613,7 @@ _forEachInstanceProperty(_context54 = _Object$keys(_tab)).call(_context54, funct
|
|
602
613
|
});
|
603
614
|
});
|
604
615
|
var _table = require("./table");
|
605
|
-
_forEachInstanceProperty(
|
616
|
+
_forEachInstanceProperty(_context56 = _Object$keys(_table)).call(_context56, function (key) {
|
606
617
|
if (key === "default" || key === "__esModule") return;
|
607
618
|
if (key in exports && exports[key] === _table[key]) return;
|
608
619
|
_Object$defineProperty(exports, key, {
|
@@ -613,7 +624,7 @@ _forEachInstanceProperty(_context55 = _Object$keys(_table)).call(_context55, fun
|
|
613
624
|
});
|
614
625
|
});
|
615
626
|
var _tabs = require("./tabs");
|
616
|
-
_forEachInstanceProperty(
|
627
|
+
_forEachInstanceProperty(_context57 = _Object$keys(_tabs)).call(_context57, function (key) {
|
617
628
|
if (key === "default" || key === "__esModule") return;
|
618
629
|
if (key in exports && exports[key] === _tabs[key]) return;
|
619
630
|
_Object$defineProperty(exports, key, {
|
@@ -624,7 +635,7 @@ _forEachInstanceProperty(_context56 = _Object$keys(_tabs)).call(_context56, func
|
|
624
635
|
});
|
625
636
|
});
|
626
637
|
var _text = require("./text");
|
627
|
-
_forEachInstanceProperty(
|
638
|
+
_forEachInstanceProperty(_context58 = _Object$keys(_text)).call(_context58, function (key) {
|
628
639
|
if (key === "default" || key === "__esModule") return;
|
629
640
|
if (key in exports && exports[key] === _text[key]) return;
|
630
641
|
_Object$defineProperty(exports, key, {
|
@@ -635,7 +646,7 @@ _forEachInstanceProperty(_context57 = _Object$keys(_text)).call(_context57, func
|
|
635
646
|
});
|
636
647
|
});
|
637
648
|
var _textField = require("./textField");
|
638
|
-
_forEachInstanceProperty(
|
649
|
+
_forEachInstanceProperty(_context59 = _Object$keys(_textField)).call(_context59, function (key) {
|
639
650
|
if (key === "default" || key === "__esModule") return;
|
640
651
|
if (key in exports && exports[key] === _textField[key]) return;
|
641
652
|
_Object$defineProperty(exports, key, {
|
@@ -646,7 +657,7 @@ _forEachInstanceProperty(_context58 = _Object$keys(_textField)).call(_context58,
|
|
646
657
|
});
|
647
658
|
});
|
648
659
|
var _timefield = require("./timefield");
|
649
|
-
_forEachInstanceProperty(
|
660
|
+
_forEachInstanceProperty(_context60 = _Object$keys(_timefield)).call(_context60, function (key) {
|
650
661
|
if (key === "default" || key === "__esModule") return;
|
651
662
|
if (key in exports && exports[key] === _timefield[key]) return;
|
652
663
|
_Object$defineProperty(exports, key, {
|
@@ -657,7 +668,7 @@ _forEachInstanceProperty(_context59 = _Object$keys(_timefield)).call(_context59,
|
|
657
668
|
});
|
658
669
|
});
|
659
670
|
var _tooltipTrigger = require("./tooltipTrigger");
|
660
|
-
_forEachInstanceProperty(
|
671
|
+
_forEachInstanceProperty(_context61 = _Object$keys(_tooltipTrigger)).call(_context61, function (key) {
|
661
672
|
if (key === "default" || key === "__esModule") return;
|
662
673
|
if (key in exports && exports[key] === _tooltipTrigger[key]) return;
|
663
674
|
_Object$defineProperty(exports, key, {
|
@@ -0,0 +1,122 @@
|
|
1
|
+
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
2
|
+
import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
|
3
|
+
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
4
|
+
var _excluded = ["children", "maxLines", "buttonProps"];
|
5
|
+
import _parseFloat from "@babel/runtime-corejs3/core-js-stable/parse-float";
|
6
|
+
import _trimInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/trim";
|
7
|
+
import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
|
8
|
+
import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
|
9
|
+
import React, { forwardRef, useCallback, useRef, useState } from 'react';
|
10
|
+
import { useLayoutEffect, useResizeObserver } from '@react-aria/utils';
|
11
|
+
import { v4 as uuid } from 'uuid';
|
12
|
+
import { Box, Button, Text } from '../../index';
|
13
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
14
|
+
var ExpandableText = /*#__PURE__*/forwardRef(function (props, ref) {
|
15
|
+
var children = props.children,
|
16
|
+
maxLines = props.maxLines,
|
17
|
+
buttonProps = props.buttonProps,
|
18
|
+
others = _objectWithoutProperties(props, _excluded);
|
19
|
+
var textContent = typeof children === 'string' ? children : '';
|
20
|
+
var _useState = useState(false),
|
21
|
+
_useState2 = _slicedToArray(_useState, 2),
|
22
|
+
isExpanded = _useState2[0],
|
23
|
+
setIsExpanded = _useState2[1];
|
24
|
+
var _useState3 = useState(false),
|
25
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
26
|
+
isTruncated = _useState4[0],
|
27
|
+
setIsTruncated = _useState4[1];
|
28
|
+
var _useState5 = useState(textContent),
|
29
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
30
|
+
visibleText = _useState6[0],
|
31
|
+
setVisibleText = _useState6[1];
|
32
|
+
var containerRef = useRef(null);
|
33
|
+
var hiddenContainerRef = useRef(null);
|
34
|
+
var prevWidthRef = useRef(window.innerWidth);
|
35
|
+
var truncateToLines = function truncateToLines() {
|
36
|
+
var _containerRef$current;
|
37
|
+
// get line height and calculate the number of lines
|
38
|
+
var container = hiddenContainerRef.current;
|
39
|
+
if (!container) return 0;
|
40
|
+
container.style.width = "".concat(((_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.offsetWidth) || 0, "px");
|
41
|
+
container.innerText = textContent;
|
42
|
+
var lineHeight = _parseFloat(getComputedStyle(container).lineHeight);
|
43
|
+
var fullTextLines = Math.round(container.offsetHeight / lineHeight);
|
44
|
+
if (fullTextLines <= maxLines) {
|
45
|
+
setVisibleText(textContent);
|
46
|
+
setIsTruncated(false);
|
47
|
+
return undefined;
|
48
|
+
}
|
49
|
+
|
50
|
+
// using binary search to find the maximum text that fits within maxLines
|
51
|
+
var suffix = '... View More';
|
52
|
+
var start = 0;
|
53
|
+
var end = textContent.length;
|
54
|
+
var truncatedText = '';
|
55
|
+
while (start < end) {
|
56
|
+
var _context, _context2;
|
57
|
+
var mid = Math.floor((start + end) / 2);
|
58
|
+
var candidateText = _trimInstanceProperty(_context = _sliceInstanceProperty(textContent).call(textContent, 0, mid)).call(_context);
|
59
|
+
var candidate = _concatInstanceProperty(_context2 = "".concat(candidateText)).call(_context2, suffix);
|
60
|
+
container.innerText = candidate;
|
61
|
+
var lines = Math.round(container.offsetHeight / lineHeight);
|
62
|
+
if (lines <= maxLines) {
|
63
|
+
truncatedText = candidateText;
|
64
|
+
start = mid + 1;
|
65
|
+
} else {
|
66
|
+
end = mid;
|
67
|
+
}
|
68
|
+
}
|
69
|
+
setVisibleText("".concat(truncatedText, "...") || textContent);
|
70
|
+
setIsTruncated(true);
|
71
|
+
return undefined;
|
72
|
+
};
|
73
|
+
var onResize = useCallback(function () {
|
74
|
+
if (!isExpanded) {
|
75
|
+
truncateToLines();
|
76
|
+
}
|
77
|
+
// Reset the expansion state if the width has changed
|
78
|
+
if (window.innerWidth !== prevWidthRef.current) {
|
79
|
+
prevWidthRef.current = window.innerWidth;
|
80
|
+
setIsExpanded(false);
|
81
|
+
}
|
82
|
+
}, [isExpanded]);
|
83
|
+
useResizeObserver({
|
84
|
+
ref: containerRef,
|
85
|
+
onResize: onResize
|
86
|
+
});
|
87
|
+
|
88
|
+
/* istanbul ignore next */
|
89
|
+
useLayoutEffect(function () {
|
90
|
+
if (isExpanded) {
|
91
|
+
setVisibleText(textContent);
|
92
|
+
} else {
|
93
|
+
truncateToLines();
|
94
|
+
}
|
95
|
+
}, [isExpanded, textContent]);
|
96
|
+
var toggleExpanded = function toggleExpanded() {
|
97
|
+
return setIsExpanded(!isExpanded);
|
98
|
+
};
|
99
|
+
var textId = uuid();
|
100
|
+
return ___EmotionJSX(Box, {
|
101
|
+
ref: ref
|
102
|
+
}, ___EmotionJSX("div", {
|
103
|
+
ref: containerRef
|
104
|
+
}, ___EmotionJSX(Text, _extends({
|
105
|
+
variant: "variants.expandableText.text",
|
106
|
+
id: textId
|
107
|
+
}, others), visibleText, ' '), isTruncated && ___EmotionJSX(Button, _extends({
|
108
|
+
onPress: toggleExpanded,
|
109
|
+
"aria-expanded": isExpanded,
|
110
|
+
"aria-controls": textId,
|
111
|
+
variant: "link",
|
112
|
+
sx: {
|
113
|
+
display: 'inline-block',
|
114
|
+
whiteSpace: 'nowrap',
|
115
|
+
ml: 1
|
116
|
+
}
|
117
|
+
}, buttonProps), isExpanded ? 'View Less' : 'View More')), ___EmotionJSX(Box, {
|
118
|
+
ref: hiddenContainerRef,
|
119
|
+
variant: "expandableText.hiddenContainer"
|
120
|
+
}));
|
121
|
+
});
|
122
|
+
export default ExpandableText;
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import { Meta } from '@storybook/addon-docs';
|
2
|
+
|
3
|
+
<Meta title="Components/ExpandableText/ExpandableText" />
|
4
|
+
|
5
|
+
# ExpandableText
|
6
|
+
|
7
|
+
ExpandableText is used to manage long texts by truncating them based on max lines.
|
8
|
+
It allows collapse and expand the text to view in full.
|
9
|
+
|
10
|
+
### Required components
|
11
|
+
|
12
|
+
This component can be used independently and does not require additional components.
|
13
|
+
|
14
|
+
### Accessibility
|
15
|
+
|
16
|
+
#### Keyboard Navigation
|
17
|
+
|
18
|
+
These keys provide additional functionality to the component.
|
19
|
+
|
20
|
+
| Keys | Functions |
|
21
|
+
| ---- | --------- |
|
22
|
+
| Space or Enter | Selects the button. |
|
23
|
+
| Tab | Focuses the button and follows the page tab sequence. |
|
24
|
+
|
25
|
+
|
26
|
+
#### Screen readers
|
27
|
+
|
28
|
+
This component uses the following attributes to assist screen readers:
|
29
|
+
- The trigger button uses the **`aria-expanded`** attribute to indicate when the content expands and collapses.
|
30
|
+
- The button uses, **`aria-controls`** which references the iD of the collapsible region.
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import DocsLayout from '../../../.storybook/storybookDocsLayout';
|
3
|
+
import { ExpandableText } from '../../index';
|
4
|
+
import ExpandableTextReadMe from './ExpandableText.mdx';
|
5
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
6
|
+
export default {
|
7
|
+
title: 'Experimental/ ExpandableText',
|
8
|
+
component: ExpandableText,
|
9
|
+
parameters: {
|
10
|
+
docs: {
|
11
|
+
page: function page() {
|
12
|
+
return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(ExpandableTextReadMe, null), ___EmotionJSX(DocsLayout, null));
|
13
|
+
}
|
14
|
+
},
|
15
|
+
codesandbox: false
|
16
|
+
}
|
17
|
+
};
|
18
|
+
export var Default = function Default(args) {
|
19
|
+
return ___EmotionJSX(ExpandableText, {
|
20
|
+
maxLines: 5,
|
21
|
+
"data-testid": "test-field"
|
22
|
+
}, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");
|
23
|
+
};
|
@@ -0,0 +1,16 @@
|
|
1
|
+
var text = {
|
2
|
+
display: 'inline'
|
3
|
+
};
|
4
|
+
var hiddenContainer = {
|
5
|
+
visibility: 'hidden',
|
6
|
+
position: 'absolute',
|
7
|
+
p: 0,
|
8
|
+
m: 0,
|
9
|
+
border: 0,
|
10
|
+
whiteSpace: 'normal',
|
11
|
+
wordBreak: 'break-word'
|
12
|
+
};
|
13
|
+
export default {
|
14
|
+
text: text,
|
15
|
+
hiddenContainer: hiddenContainer
|
16
|
+
};
|
@@ -0,0 +1,112 @@
|
|
1
|
+
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
2
|
+
import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
|
3
|
+
import React from 'react';
|
4
|
+
import { fireEvent } from '@testing-library/react';
|
5
|
+
import { render, screen } from '../../utils/testUtils/testWrapper';
|
6
|
+
import { universalComponentTests } from '../../utils/testUtils/universalComponentTest';
|
7
|
+
import ExpandableText from './ExpandableText';
|
8
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
9
|
+
jest.mock('use-resize-observer', function () {
|
10
|
+
return jest.fn(function () {
|
11
|
+
return {
|
12
|
+
ref: jest.fn(),
|
13
|
+
// a stub ref callback
|
14
|
+
width: 300 // pretend container is 300px wide
|
15
|
+
};
|
16
|
+
});
|
17
|
+
});
|
18
|
+
|
19
|
+
var children = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.';
|
20
|
+
var testId = 'test-text';
|
21
|
+
var defaultProps = {
|
22
|
+
'data-testid': testId,
|
23
|
+
// children,
|
24
|
+
maxLines: 2
|
25
|
+
};
|
26
|
+
var getComponent = function getComponent() {
|
27
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
28
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
29
|
+
_ref$renderFn = _ref.renderFn,
|
30
|
+
renderFn = _ref$renderFn === void 0 ? render : _ref$renderFn;
|
31
|
+
return renderFn(___EmotionJSX(ExpandableText, _extends({}, defaultProps, props), children));
|
32
|
+
};
|
33
|
+
|
34
|
+
// Needs to be added to each components test file
|
35
|
+
universalComponentTests({
|
36
|
+
renderComponent: function renderComponent(props) {
|
37
|
+
return ___EmotionJSX(ExpandableText, _extends({}, defaultProps, props));
|
38
|
+
}
|
39
|
+
});
|
40
|
+
describe('ExpandableText', function () {
|
41
|
+
it('renders children', function () {
|
42
|
+
_Object$defineProperty(HTMLElement.prototype, 'offsetHeight', {
|
43
|
+
configurable: true,
|
44
|
+
get: function get() {
|
45
|
+
var text = this.innerText || '';
|
46
|
+
var lineHeight = 20;
|
47
|
+
var lines = Math.ceil(text.length / 50);
|
48
|
+
return lines * lineHeight;
|
49
|
+
}
|
50
|
+
});
|
51
|
+
_Object$defineProperty(window, 'getComputedStyle', {
|
52
|
+
value: function value() {
|
53
|
+
return {
|
54
|
+
lineHeight: '20px'
|
55
|
+
};
|
56
|
+
}
|
57
|
+
});
|
58
|
+
getComponent();
|
59
|
+
var button = screen.getByRole('button');
|
60
|
+
expect(button).toHaveTextContent(/View More/i);
|
61
|
+
fireEvent.click(button);
|
62
|
+
var expandableText = screen.getByText(children);
|
63
|
+
expect(expandableText).toBeInTheDocument();
|
64
|
+
expect(expandableText).toHaveAttribute('data-testid', testId);
|
65
|
+
});
|
66
|
+
it('expands and collapses text on button click', function () {
|
67
|
+
_Object$defineProperty(HTMLElement.prototype, 'offsetHeight', {
|
68
|
+
configurable: true,
|
69
|
+
get: function get() {
|
70
|
+
var text = this.innerText || '';
|
71
|
+
var lineHeight = 20;
|
72
|
+
var lines = Math.ceil(text.length / 50);
|
73
|
+
return lines * lineHeight;
|
74
|
+
}
|
75
|
+
});
|
76
|
+
_Object$defineProperty(window, 'getComputedStyle', {
|
77
|
+
value: function value() {
|
78
|
+
return {
|
79
|
+
lineHeight: '20px'
|
80
|
+
};
|
81
|
+
}
|
82
|
+
});
|
83
|
+
getComponent();
|
84
|
+
var button = screen.getByRole('button');
|
85
|
+
expect(button).toHaveTextContent(/View More/i);
|
86
|
+
fireEvent.click(button);
|
87
|
+
expect(button).toHaveTextContent(/View Less/i);
|
88
|
+
fireEvent.click(screen.getByRole('button'));
|
89
|
+
expect(button).toHaveTextContent(/View More/i);
|
90
|
+
});
|
91
|
+
it('it rests the expansion state when resized', function () {
|
92
|
+
getComponent();
|
93
|
+
var button = screen.getByRole('button');
|
94
|
+
fireEvent.click(button);
|
95
|
+
expect(button).toHaveTextContent(/View Less/i);
|
96
|
+
var originalInnerWidth = window.innerWidth;
|
97
|
+
window.innerWidth = originalInnerWidth + 100;
|
98
|
+
fireEvent(window, new Event('resize'));
|
99
|
+
expect(button).toHaveTextContent(/View More/i);
|
100
|
+
window.innerWidth = originalInnerWidth;
|
101
|
+
});
|
102
|
+
it('truncates the text on resize when button is not expanded', function () {
|
103
|
+
getComponent();
|
104
|
+
var button = screen.getByRole('button');
|
105
|
+
expect(button).toHaveTextContent(/View More/i);
|
106
|
+
var originalInnerWidth = window.innerWidth;
|
107
|
+
window.innerWidth = originalInnerWidth + 100;
|
108
|
+
fireEvent(window, new Event('resize'));
|
109
|
+
expect(button).toHaveTextContent(/View More/i);
|
110
|
+
window.innerWidth = originalInnerWidth;
|
111
|
+
});
|
112
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
export { default } from './ExpandableText';
|
package/lib/index.js
CHANGED
@@ -80,6 +80,7 @@ export { default as DatePicker } from './components/DatePicker';
|
|
80
80
|
export { default as DateField } from './components/DatePicker/DateField';
|
81
81
|
export { default as EditButton } from './components/EditButton';
|
82
82
|
export { default as EnvironmentBreadcrumb } from './components/EnvironmentBreadcrumb';
|
83
|
+
export { default as ExpandableText } from './components/ExpandableText';
|
83
84
|
export { default as FieldHelperText } from './components/FieldHelperText';
|
84
85
|
export * from './components/FieldHelperText';
|
85
86
|
export { default as FileInputField } from './components/FileInputField';
|
@@ -23,6 +23,7 @@ import collapsiblePanel from '../../components/CollapsiblePanel/CollapsiblePanel
|
|
23
23
|
import copyText from '../../components/CopyText/CopyText.styles';
|
24
24
|
import dataTable from '../../components/DataTable/DataTable.styles';
|
25
25
|
import environmentBreadcrumb from '../../components/EnvironmentBreadcrumb/EnvironmentalBreadcrumb.styles';
|
26
|
+
import expandableText from '../../components/ExpandableText/ExpandableText.styles';
|
26
27
|
import fieldHelperText from '../../components/FieldHelperText/FieldHelperText.styles';
|
27
28
|
import footer from '../../components/Footer/Footer.styles';
|
28
29
|
import gridList from '../../components/GridList/GridList.styles';
|
@@ -76,6 +77,7 @@ export default _objectSpread(_objectSpread({
|
|
76
77
|
copyText: copyText,
|
77
78
|
dataTable: dataTable,
|
78
79
|
environmentBreadcrumb: environmentBreadcrumb,
|
80
|
+
expandableText: expandableText,
|
79
81
|
fieldHelperText: fieldHelperText,
|
80
82
|
footer: footer,
|
81
83
|
gridList: gridList,
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
package/lib/types/index.js
CHANGED
@@ -15,6 +15,7 @@ export * from './colorField';
|
|
15
15
|
export * from './copyText';
|
16
16
|
export * from './dataTable';
|
17
17
|
export * from './environmentBreadcrumb';
|
18
|
+
export * from './expandableText';
|
18
19
|
export * from './fieldHelperText';
|
19
20
|
export * from './footer';
|
20
21
|
export * from './grid';
|