@pingux/astro 1.1.0-alpha.6 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +82 -0
- package/lib/cjs/components/AccordionGridGroup/AccordionGridGroup.test.js +24 -0
- package/lib/cjs/components/AccordionGroup/AccordionGroup.test.js +29 -0
- package/lib/cjs/components/AccordionItem/AccordionItem.js +4 -2
- package/lib/cjs/components/CodeView/CodeView.js +165 -0
- package/lib/cjs/components/CodeView/CodeView.stories.js +93 -0
- package/lib/cjs/components/CodeView/CodeView.test.js +211 -0
- package/lib/cjs/components/CodeView/index.js +18 -0
- package/lib/cjs/components/CopyText/CopyText.js +34 -11
- package/lib/cjs/components/FileInputField/FileItem.js +2 -1
- package/lib/cjs/components/List/List.js +3 -0
- package/lib/cjs/components/List/List.stories.js +7 -2
- package/lib/cjs/components/NavBar/NavBar.js +38 -0
- package/lib/cjs/components/NavBar/NavBar.stories.js +679 -0
- package/lib/cjs/components/NavBar/NavBar.test.js +116 -0
- package/lib/cjs/components/NavBar/index.js +18 -0
- package/lib/cjs/components/NavBarSection/NavBarItemBody.js +56 -0
- package/lib/cjs/components/NavBarSection/NavBarItemHeader.js +47 -0
- package/lib/cjs/components/NavBarSection/NavBarSection.js +82 -0
- package/lib/cjs/components/NavBarSection/index.js +18 -0
- package/lib/cjs/components/OverlayPanel/OverlayPanel.js +53 -6
- package/lib/cjs/components/OverlayPanel/OverlayPanel.stories.js +63 -50
- package/lib/cjs/components/OverlayPanel/OverlayPanel.test.js +84 -0
- package/lib/cjs/components/PopoverContainer/PopoverContainer.test.js +15 -0
- package/lib/cjs/components/Separator/Separator.js +1 -1
- package/lib/cjs/components/TextArea/TextArea.js +5 -1
- package/lib/cjs/components/TooltipTrigger/TooltipTrigger.js +10 -5
- package/lib/cjs/hooks/useOverlayPanelState/useOverlayPanelState.js +20 -1
- package/lib/cjs/hooks/useOverlayPanelState/useOverlayPanelState.test.js +7 -3
- package/lib/cjs/index.js +84 -30
- package/lib/cjs/styles/variants/accordion.js +34 -3
- package/lib/cjs/styles/variants/boxes.js +24 -1
- package/lib/cjs/styles/variants/buttons.js +29 -1
- package/lib/cjs/styles/variants/codeView.js +80 -0
- package/lib/cjs/styles/variants/link.js +1 -1
- package/lib/cjs/styles/variants/separator.js +46 -3
- package/lib/cjs/styles/variants/text.js +15 -0
- package/lib/cjs/styles/variants/variants.js +3 -0
- package/lib/components/AccordionGridGroup/AccordionGridGroup.test.js +23 -1
- package/lib/components/AccordionGroup/AccordionGroup.test.js +26 -0
- package/lib/components/AccordionItem/AccordionItem.js +4 -2
- package/lib/components/CodeView/CodeView.js +130 -0
- package/lib/components/CodeView/CodeView.stories.js +67 -0
- package/lib/components/CodeView/CodeView.test.js +171 -0
- package/lib/components/CodeView/index.js +1 -0
- package/lib/components/CopyText/CopyText.js +35 -11
- package/lib/components/FileInputField/FileItem.js +2 -1
- package/lib/components/List/List.js +2 -0
- package/lib/components/List/List.stories.js +6 -2
- package/lib/components/NavBar/NavBar.js +24 -0
- package/lib/components/NavBar/NavBar.stories.js +650 -0
- package/lib/components/NavBar/NavBar.test.js +92 -0
- package/lib/components/NavBar/index.js +1 -0
- package/lib/components/NavBarSection/NavBarItemBody.js +37 -0
- package/lib/components/NavBarSection/NavBarItemHeader.js +31 -0
- package/lib/components/NavBarSection/NavBarSection.js +65 -0
- package/lib/components/NavBarSection/index.js +1 -0
- package/lib/components/OverlayPanel/OverlayPanel.js +52 -8
- package/lib/components/OverlayPanel/OverlayPanel.stories.js +56 -44
- package/lib/components/OverlayPanel/OverlayPanel.test.js +73 -1
- package/lib/components/PopoverContainer/PopoverContainer.test.js +16 -1
- package/lib/components/Separator/Separator.js +1 -1
- package/lib/components/TextArea/TextArea.js +5 -1
- package/lib/components/TooltipTrigger/TooltipTrigger.js +10 -5
- package/lib/hooks/useOverlayPanelState/useOverlayPanelState.js +20 -1
- package/lib/hooks/useOverlayPanelState/useOverlayPanelState.test.js +7 -3
- package/lib/index.js +5 -0
- package/lib/styles/variants/accordion.js +34 -3
- package/lib/styles/variants/boxes.js +24 -1
- package/lib/styles/variants/buttons.js +29 -1
- package/lib/styles/variants/codeView.js +68 -0
- package/lib/styles/variants/link.js +1 -1
- package/lib/styles/variants/separator.js +33 -1
- package/lib/styles/variants/text.js +15 -0
- package/lib/styles/variants/variants.js +2 -0
- package/package.json +4 -2
package/CHANGELOG.md
CHANGED
@@ -3,6 +3,88 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
5
5
|
|
6
|
+
# [1.1.0](https://gitlab.corp.pingidentity.com/ux/pingux/compare/@pingux/astro@1.1.0-alpha.12...@pingux/astro@1.1.0) (2022-02-02)
|
7
|
+
|
8
|
+
|
9
|
+
### Bug Fixes
|
10
|
+
|
11
|
+
* [UIP-5016] OverlayPanel focus improvements ([eabfa8f](https://gitlab.corp.pingidentity.com/ux/pingux/commit/eabfa8f1b235a07c049d4a0bbc77d49bd02a2eec))
|
12
|
+
|
13
|
+
|
14
|
+
### Features
|
15
|
+
|
16
|
+
* [UIP-4876] Astro NavBar ([8d3e7de](https://gitlab.corp.pingidentity.com/ux/pingux/commit/8d3e7ded13aec6034fd0ff813153dc0a4dc7375a))
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
# [1.1.0-alpha.12](https://gitlab.corp.pingidentity.com/ux/pingux/compare/@pingux/astro@1.1.0-alpha.11...@pingux/astro@1.1.0-alpha.12) (2022-01-31)
|
23
|
+
|
24
|
+
|
25
|
+
### Features
|
26
|
+
|
27
|
+
* [UIP-5067] CodeView component ([c4e104c](https://gitlab.corp.pingidentity.com/ux/pingux/commit/c4e104c3638c8f6231b5f3c14cd65a1a62bb6591))
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
# [1.1.0-alpha.11](https://gitlab.corp.pingidentity.com/ux/pingux/compare/@pingux/astro@1.1.0-alpha.10...@pingux/astro@1.1.0-alpha.11) (2022-01-28)
|
34
|
+
|
35
|
+
|
36
|
+
### Bug Fixes
|
37
|
+
|
38
|
+
* [UIP-5177] Icon Button Color Update ([05b8a95](https://gitlab.corp.pingidentity.com/ux/pingux/commit/05b8a95e3fae60e7f655cf2812dfd2104496b1c5))
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
# [1.1.0-alpha.10](https://gitlab.corp.pingidentity.com/ux/pingux/compare/@pingux/astro@1.1.0-alpha.9...@pingux/astro@1.1.0-alpha.10) (2022-01-28)
|
45
|
+
|
46
|
+
|
47
|
+
### Bug Fixes
|
48
|
+
|
49
|
+
* [UIP-5180] File Upload Field Update Document Icon Color ([debaf91](https://gitlab.corp.pingidentity.com/ux/pingux/commit/debaf9100401c822c37fdd16be1a1b1704096f10))
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
# [1.1.0-alpha.9](https://gitlab.corp.pingidentity.com/ux/pingux/compare/@pingux/astro@1.1.0-alpha.8...@pingux/astro@1.1.0-alpha.9) (2022-01-24)
|
56
|
+
|
57
|
+
|
58
|
+
### Bug Fixes
|
59
|
+
|
60
|
+
* [UIP-5111] Deprecate List Component ([3cd9b69](https://gitlab.corp.pingidentity.com/ux/pingux/commit/3cd9b699c48ac43e34d9cfd61b07f33b4b7d4fc4))
|
61
|
+
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
# [1.1.0-alpha.8](https://gitlab.corp.pingidentity.com/ux/pingux/compare/@pingux/astro@1.1.0-alpha.7...@pingux/astro@1.1.0-alpha.8) (2022-01-24)
|
67
|
+
|
68
|
+
|
69
|
+
### Bug Fixes
|
70
|
+
|
71
|
+
* [UIP-4995] TextArea Safari resize issue ([33c8af3](https://gitlab.corp.pingidentity.com/ux/pingux/commit/33c8af35fbe82820427b87bdd9ab0744039a6c18))
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
# [1.1.0-alpha.7](https://gitlab.corp.pingidentity.com/ux/pingux/compare/@pingux/astro@1.1.0-alpha.6...@pingux/astro@1.1.0-alpha.7) (2022-01-21)
|
78
|
+
|
79
|
+
|
80
|
+
### Bug Fixes
|
81
|
+
|
82
|
+
* [UIP-5109] AccordionGroup OverlayPanel Compatibility Fix ([6a78b76](https://gitlab.corp.pingidentity.com/ux/pingux/commit/6a78b76a3c3ab7b9ac78a7dcd6ca74a6449d63c2))
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
6
88
|
# [1.1.0-alpha.6](https://gitlab.corp.pingidentity.com/ux/pingux/compare/@pingux/astro@1.1.0-alpha.5...@pingux/astro@1.1.0-alpha.6) (2022-01-21)
|
7
89
|
|
8
90
|
|
@@ -39,6 +39,22 @@ var getComponent = function getComponent() {
|
|
39
39
|
}, (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Link, null, "Header Button"), (0, _react2.jsx)(_index.Link, null, "Second Header Button")), (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Link, null, "Body Button"), (0, _react2.jsx)(_index.Link, null, "Second Body Button")))));
|
40
40
|
};
|
41
41
|
|
42
|
+
var getComponentInOverlayPanel = function getComponentInOverlayPanel() {
|
43
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
44
|
+
return (0, _testWrapper.render)((0, _react2.jsx)(_index.OverlayPanel, {
|
45
|
+
isOpen: true
|
46
|
+
}, (0, _react2.jsx)(_AccordionGridGroup["default"], (0, _extends2["default"])({}, defaultProps, props), (0, _react2.jsx)(_collections.Item, {
|
47
|
+
key: "first",
|
48
|
+
textValue: "Duplicate"
|
49
|
+
}, (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Link, null, "Header Button"), (0, _react2.jsx)(_index.Link, null, "Second Header Button")), (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Link, null, "Body Button"), (0, _react2.jsx)(_index.Link, null, "Second Body Button"))), (0, _react2.jsx)(_collections.Item, {
|
50
|
+
key: "second",
|
51
|
+
textValue: "Duplicate"
|
52
|
+
}, (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Link, null, "Header Button"), (0, _react2.jsx)(_index.Link, null, "Second Header Button")), (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Link, null, "Body Button"), (0, _react2.jsx)(_index.Link, null, "Second Body Button"))), (0, _react2.jsx)(_collections.Item, {
|
53
|
+
key: "third",
|
54
|
+
textValue: "Duplicate"
|
55
|
+
}, (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Link, null, "Header Button"), (0, _react2.jsx)(_index.Link, null, "Second Header Button")), (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Link, null, "Body Button"), (0, _react2.jsx)(_index.Link, null, "Second Body Button"))))));
|
56
|
+
};
|
57
|
+
|
42
58
|
(0, _testAxe["default"])(getComponent, {
|
43
59
|
// landmark-unique rule conflicts with react-aria role definition
|
44
60
|
rules: {
|
@@ -230,4 +246,12 @@ test('default expanded keys expands an accordion item', function () {
|
|
230
246
|
|
231
247
|
var selectedRow = row[0];
|
232
248
|
expect(selectedRow).toHaveAttribute('aria-selected', 'true');
|
249
|
+
});
|
250
|
+
test('items do not automatically expand if wrapped in an open OverlayPanel', function () {
|
251
|
+
getComponentInOverlayPanel();
|
252
|
+
|
253
|
+
var row = _testWrapper.screen.getAllByRole('row');
|
254
|
+
|
255
|
+
var selectedRow = row[0];
|
256
|
+
expect(selectedRow).not.toHaveAttribute('aria-selected', 'true');
|
233
257
|
});
|
@@ -20,6 +20,8 @@ var _Text = _interopRequireDefault(require("../Text"));
|
|
20
20
|
|
21
21
|
var _AccordionGroup = _interopRequireDefault(require("../AccordionGroup"));
|
22
22
|
|
23
|
+
var _index = require("../../index");
|
24
|
+
|
23
25
|
var _react2 = require("@emotion/react");
|
24
26
|
|
25
27
|
var testId = 'test-accordion';
|
@@ -45,6 +47,25 @@ var getComponent = function getComponent() {
|
|
45
47
|
"data-id": "third",
|
46
48
|
label: "Accordion item"
|
47
49
|
}, (0, _react2.jsx)(_Text["default"], null, "Render me!"))));
|
50
|
+
};
|
51
|
+
|
52
|
+
var getComponentInOverlayPanel = function getComponentInOverlayPanel() {
|
53
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
54
|
+
return (0, _testWrapper.render)((0, _react2.jsx)(_index.OverlayPanel, {
|
55
|
+
isOpen: true
|
56
|
+
}, (0, _react2.jsx)(_AccordionGroup["default"], (0, _extends2["default"])({}, defaultProps, props), (0, _react2.jsx)(_collections.Item, {
|
57
|
+
key: "first",
|
58
|
+
textValue: "Duplicate",
|
59
|
+
"data-id": "first"
|
60
|
+
}, (0, _react2.jsx)(_Text["default"], null, "Render me!")), (0, _react2.jsx)(_collections.Item, {
|
61
|
+
key: "second",
|
62
|
+
textValue: "Duplicate",
|
63
|
+
"data-id": "second"
|
64
|
+
}, (0, _react2.jsx)(_Text["default"], null, "Render me!")), (0, _react2.jsx)(_collections.Item, {
|
65
|
+
key: "third",
|
66
|
+
textValue: "Duplicate",
|
67
|
+
"data-id": "third"
|
68
|
+
}, (0, _react2.jsx)(_Text["default"], null, "Render me!")))));
|
48
69
|
}; // Need to be added to each test file to test accessibility using axe.
|
49
70
|
|
50
71
|
|
@@ -267,4 +288,12 @@ test('Item accepts a data-id and the data-id can be found in the DOM', function
|
|
267
288
|
var selectedItem = buttons[0];
|
268
289
|
var parentElement = selectedItem.parentElement;
|
269
290
|
expect(parentElement).toHaveAttribute('data-id', 'first');
|
291
|
+
});
|
292
|
+
test('items do not automatically expand if wrapped in an open OverlayPanel', function () {
|
293
|
+
getComponentInOverlayPanel();
|
294
|
+
|
295
|
+
var buttons = _testWrapper.screen.getAllByRole('button');
|
296
|
+
|
297
|
+
var selectedItem = buttons[0];
|
298
|
+
expect(selectedItem).not.toHaveAttribute('aria-expanded', 'true');
|
270
299
|
});
|
@@ -121,9 +121,11 @@ var AccordionItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
121
121
|
ml: "5px"
|
122
122
|
}, (0, _react2.jsx)(_index.Icon, {
|
123
123
|
icon: isOpen ? _MenuUpIcon["default"] : _MenuDownIcon["default"]
|
124
|
-
}))), (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
|
124
|
+
}))), isOpen && (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
|
125
125
|
variant: "accordion.accordionBody"
|
126
|
-
}, accordionRegionProps, regionProps
|
126
|
+
}, accordionRegionProps, regionProps, {
|
127
|
+
className: itemClasses
|
128
|
+
}), item.rendered));
|
127
129
|
});
|
128
130
|
AccordionItem.propTypes = {
|
129
131
|
'aria-label': _propTypes["default"].string,
|
@@ -0,0 +1,165 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard");
|
4
|
+
|
5
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
6
|
+
|
7
|
+
var _Object$defineProperty2 = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
8
|
+
|
9
|
+
_Object$defineProperty2(exports, "__esModule", {
|
10
|
+
value: true
|
11
|
+
});
|
12
|
+
|
13
|
+
exports["default"] = void 0;
|
14
|
+
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-property"));
|
16
|
+
|
17
|
+
var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-properties"));
|
18
|
+
|
19
|
+
var _getOwnPropertyDescriptors = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors"));
|
20
|
+
|
21
|
+
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
|
22
|
+
|
23
|
+
var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor"));
|
24
|
+
|
25
|
+
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
|
26
|
+
|
27
|
+
var _getOwnPropertySymbols = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols"));
|
28
|
+
|
29
|
+
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
|
30
|
+
|
31
|
+
var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
32
|
+
|
33
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
34
|
+
|
35
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
36
|
+
|
37
|
+
var _trim = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/trim"));
|
38
|
+
|
39
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
40
|
+
|
41
|
+
var _react = _interopRequireWildcard(require("react"));
|
42
|
+
|
43
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
44
|
+
|
45
|
+
var _focus = require("@react-aria/focus");
|
46
|
+
|
47
|
+
var _interactions = require("@react-aria/interactions");
|
48
|
+
|
49
|
+
var _utils = require("@react-aria/utils");
|
50
|
+
|
51
|
+
var _prismReactRenderer = _interopRequireWildcard(require("prism-react-renderer"));
|
52
|
+
|
53
|
+
var _hooks = require("../../hooks");
|
54
|
+
|
55
|
+
var _ = require("../..");
|
56
|
+
|
57
|
+
var _react2 = require("@emotion/react");
|
58
|
+
|
59
|
+
function ownKeys(object, enumerableOnly) { var keys = (0, _keys["default"])(object); if (_getOwnPropertySymbols["default"]) { var symbols = (0, _getOwnPropertySymbols["default"])(object); if (enumerableOnly) symbols = (0, _filter["default"])(symbols).call(symbols, function (sym) { return (0, _getOwnPropertyDescriptor["default"])(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
60
|
+
|
61
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context; (0, _forEach["default"])(_context = ownKeys(Object(source), true)).call(_context, function (key) { (0, _defineProperty3["default"])(target, key, source[key]); }); } else if (_getOwnPropertyDescriptors["default"]) { (0, _defineProperties["default"])(target, (0, _getOwnPropertyDescriptors["default"])(source)); } else { var _context2; (0, _forEach["default"])(_context2 = ownKeys(Object(source))).call(_context2, function (key) { (0, _defineProperty2["default"])(target, key, (0, _getOwnPropertyDescriptor["default"])(source, key)); }); } } return target; }
|
62
|
+
|
63
|
+
/**
|
64
|
+
* A text block that shows syntax highlighting code sample.
|
65
|
+
* Built on top of the [prism-react-renderer](https://github.com/FormidableLabs/prism-react-renderer).
|
66
|
+
*
|
67
|
+
* A list of all supported languages that can be passed to `language` prop is [here](https://github.com/FormidableLabs/prism-react-renderer/blob/master/src/vendor/prism/includeLangs.js).
|
68
|
+
*/
|
69
|
+
var CodeView = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
70
|
+
var children = props.children,
|
71
|
+
outerClassName = props.className,
|
72
|
+
hasLineNumbers = props.hasLineNumbers,
|
73
|
+
hasNoCopyButton = props.hasNoCopyButton,
|
74
|
+
language = props.language,
|
75
|
+
others = (0, _objectWithoutProperties2["default"])(props, ["children", "className", "hasLineNumbers", "hasNoCopyButton", "language"]);
|
76
|
+
|
77
|
+
var _useFocusRing = (0, _focus.useFocusRing)(),
|
78
|
+
isFocusVisible = _useFocusRing.isFocusVisible,
|
79
|
+
focusProps = _useFocusRing.focusProps;
|
80
|
+
|
81
|
+
var _useHover = (0, _interactions.useHover)(props),
|
82
|
+
hoverProps = _useHover.hoverProps,
|
83
|
+
isHovered = _useHover.isHovered;
|
84
|
+
|
85
|
+
var _useStatusClasses = (0, _hooks.useStatusClasses)(outerClassName, {
|
86
|
+
isFocused: isFocusVisible,
|
87
|
+
isHovered: isHovered,
|
88
|
+
hasLineNumbers: hasLineNumbers,
|
89
|
+
hasNoCopyButton: hasNoCopyButton
|
90
|
+
}),
|
91
|
+
classNames = _useStatusClasses.classNames; // Get the width for the line number element depending on the total amount of lines
|
92
|
+
|
93
|
+
|
94
|
+
var getLineNoWidth = function getLineNoWidth(tokens) {
|
95
|
+
return tokens.length.toString().length * 12;
|
96
|
+
};
|
97
|
+
|
98
|
+
var content = (0, _react2.jsx)(_prismReactRenderer["default"], (0, _extends2["default"])({}, _prismReactRenderer.defaultProps, {
|
99
|
+
theme: undefined,
|
100
|
+
code: (children === null || children === void 0 ? void 0 : (0, _trim["default"])(children).call(children)) || '',
|
101
|
+
language: language
|
102
|
+
}), function (_ref) {
|
103
|
+
var className = _ref.className,
|
104
|
+
style = _ref.style,
|
105
|
+
tokens = _ref.tokens,
|
106
|
+
getLineProps = _ref.getLineProps,
|
107
|
+
getTokenProps = _ref.getTokenProps;
|
108
|
+
return (0, _react2.jsx)(_.Box, {
|
109
|
+
as: "pre",
|
110
|
+
className: className,
|
111
|
+
style: style
|
112
|
+
}, (0, _map["default"])(tokens).call(tokens, function (line, i) {
|
113
|
+
return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
|
114
|
+
isRow: true
|
115
|
+
}, getLineProps({
|
116
|
+
line: line,
|
117
|
+
key: i
|
118
|
+
})), hasLineNumbers && (0, _react2.jsx)(_.Box, {
|
119
|
+
as: "span",
|
120
|
+
variant: "codeView.lineNo",
|
121
|
+
sx: {
|
122
|
+
minWidth: getLineNoWidth(tokens)
|
123
|
+
}
|
124
|
+
}, i + 1), (0, _map["default"])(line).call(line, function (token, key) {
|
125
|
+
return (0, _react2.jsx)("span", getTokenProps({
|
126
|
+
token: token,
|
127
|
+
key: key
|
128
|
+
}));
|
129
|
+
}));
|
130
|
+
}));
|
131
|
+
});
|
132
|
+
|
133
|
+
if (hasNoCopyButton) {
|
134
|
+
return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({
|
135
|
+
ref: ref,
|
136
|
+
variant: "codeView.wrapper",
|
137
|
+
tabIndex: 0,
|
138
|
+
className: classNames
|
139
|
+
}, (0, _utils.mergeProps)(focusProps, hoverProps, others)), content);
|
140
|
+
}
|
141
|
+
|
142
|
+
return (0, _react2.jsx)(_.CopyText, {
|
143
|
+
mode: "nonClickableContent",
|
144
|
+
textToCopy: children,
|
145
|
+
tooltipProps: {
|
146
|
+
offset: 15
|
147
|
+
},
|
148
|
+
wrapperProps: _objectSpread({
|
149
|
+
className: classNames,
|
150
|
+
variant: 'codeView.wrapper'
|
151
|
+
}, others)
|
152
|
+
}, content);
|
153
|
+
});
|
154
|
+
CodeView.propTypes = {
|
155
|
+
hasLineNumbers: _propTypes["default"].bool,
|
156
|
+
hasNoCopyButton: _propTypes["default"].bool,
|
157
|
+
language: _propTypes["default"].string
|
158
|
+
};
|
159
|
+
CodeView.defaultProps = {
|
160
|
+
language: 'json',
|
161
|
+
hasLineNumbers: false,
|
162
|
+
hasNoCopyButton: false
|
163
|
+
};
|
164
|
+
var _default = CodeView;
|
165
|
+
exports["default"] = _default;
|
@@ -0,0 +1,93 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
4
|
+
|
5
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
6
|
+
|
7
|
+
_Object$defineProperty(exports, "__esModule", {
|
8
|
+
value: true
|
9
|
+
});
|
10
|
+
|
11
|
+
exports.WithCustomSize = exports.WithLineNumbers = exports.Default = exports["default"] = void 0;
|
12
|
+
|
13
|
+
var _react = _interopRequireDefault(require("react"));
|
14
|
+
|
15
|
+
var _CodeView = _interopRequireDefault(require("./CodeView"));
|
16
|
+
|
17
|
+
var _ = require("../..");
|
18
|
+
|
19
|
+
var _react2 = require("@emotion/react");
|
20
|
+
|
21
|
+
var code = "{\n \"_links\": {\n \"self\": {\n \"href\": \"https://api.pingone.com/v1/environments/94e3268d-847d-47aa-a45e-1ef8dd8f4df0/users/5a5d4c0c-8383-4796-9cdc-16b5a22f45ad\"\n },\n \"password\": {\n \"href\": \"https://api.pingone.com/v1/environments/94e3268d-847d-47aa-a45e-1ef8dd8f4df0/users/5a5d4c0c-8383-4796-9cdc-16b5a22f45ad/password\"\n },\n \"password.set\": {\n \"href\": \"https://api.pingone.com/v1/environments/94e3268d-847d-47aa-a45e-1ef8dd8f4df0/users/5a5d4c0c-8383-4796-9cdc-16b5a22f45ad/password\"\n },\n \"password.reset\": {\n \"href\": \"https://api.pingone.com/v1/environments/94e3268d-847d-47aa-a45e-1ef8dd8f4df0/users/5a5d4c0c-8383-4796-9cdc-16b5a22f45ad/password\"\n },\n \"password.check\": {\n \"href\": \"https://api.pingone.com/v1/environments/94e3268d-847d-47aa-a45e-1ef8dd8f4df0/users/5a5d4c0c-8383-4796-9cdc-16b5a22f45ad/password\"\n },\n \"password.recover\": {\n \"href\": \"https://api.pingone.com/v1/environments/94e3268d-847d-47aa-a45e-1ef8dd8f4df0/users/5a5d4c0c-8383-4796-9cdc-16b5a22f45ad/password\"\n },\n \"account.sendVerificationCode\": {\n \"href\": \"https://api.pingone.com/v1/environments/94e3268d-847d-47aa-a45e-1ef8dd8f4df0/users/5a5d4c0c-8383-4796-9cdc-16b5a22f45ad\"\n },\n \"linkedAccounts\": {\n \"href\": \"https://api.pingone.com/v1/environments/94e3268d-847d-47aa-a45e-1ef8dd8f4df0/users/5a5d4c0c-8383-4796-9cdc-16b5a22f45ad/linkedAccounts\"\n }\n },\n \"id\": \"5a5d4c0c-8383-4796-9cdc-16b5a22f45ad\",\n \"environment\": {\n \"id\": \"94e3268d-847d-47aa-a45e-1ef8dd8f4df0\"\n },\n \"account\": {\n \"canAuthenticate\": true,\n \"status\": \"OK\"\n },\n \"createdAt\": \"2021-09-03T15:01:43.555Z\",\n \"email\": \"allegraweldon@pingidentity.com\",\n \"enabled\": true,\n \"identityProvider\": {\n \"type\": \"PING_ONE\"\n },\n \"lifecycle\": {\n \"status\": \"ACCOUNT_OK\"\n },\n \"mfaEnabled\": false,\n \"population\": {\n \"id\": \"c1adbc29-f188-4ea6-a015-49bddd74bc84\"\n },\n \"updatedAt\": \"2021-09-03T15:01:43.555Z\",\n \"username\": \"allegraweldon@pingidentity.com\",\n \"verifyStatus\": \"NOT_INITIATED\"\n}";
|
22
|
+
var _default = {
|
23
|
+
title: 'CodeView',
|
24
|
+
component: _CodeView["default"],
|
25
|
+
argTypes: {
|
26
|
+
children: {
|
27
|
+
defaultValue: code,
|
28
|
+
table: {
|
29
|
+
type: {}
|
30
|
+
},
|
31
|
+
control: {
|
32
|
+
type: 'text'
|
33
|
+
}
|
34
|
+
}
|
35
|
+
},
|
36
|
+
parameters: {
|
37
|
+
a11y: {
|
38
|
+
config: {
|
39
|
+
rules: [
|
40
|
+
/* Turned off since rule conflicts with the way how `prism-react-renderer` works
|
41
|
+
* and design specs */
|
42
|
+
{
|
43
|
+
id: 'scrollable-region-focusable',
|
44
|
+
enabled: false,
|
45
|
+
selector: '.prism-code'
|
46
|
+
}]
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
};
|
51
|
+
exports["default"] = _default;
|
52
|
+
|
53
|
+
var Default = function Default(args) {
|
54
|
+
return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_.Text, {
|
55
|
+
sx: {
|
56
|
+
fontWeight: 2
|
57
|
+
}
|
58
|
+
}, "JSON"), (0, _react2.jsx)(_CodeView["default"], args));
|
59
|
+
};
|
60
|
+
|
61
|
+
exports.Default = Default;
|
62
|
+
|
63
|
+
var WithLineNumbers = function WithLineNumbers() {
|
64
|
+
return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_.Text, {
|
65
|
+
sx: {
|
66
|
+
fontWeight: 2
|
67
|
+
}
|
68
|
+
}, "JSON"), (0, _react2.jsx)(_CodeView["default"], {
|
69
|
+
hasLineNumbers: true
|
70
|
+
}, code));
|
71
|
+
};
|
72
|
+
|
73
|
+
exports.WithLineNumbers = WithLineNumbers;
|
74
|
+
WithLineNumbers.story = {
|
75
|
+
parameters: {
|
76
|
+
docs: {
|
77
|
+
storyDescription: 'Please note that with adding line numbers, line wrapping does not work.'
|
78
|
+
}
|
79
|
+
}
|
80
|
+
};
|
81
|
+
|
82
|
+
var WithCustomSize = function WithCustomSize() {
|
83
|
+
return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_CodeView["default"], {
|
84
|
+
language: "javascript",
|
85
|
+
sx: {
|
86
|
+
width: '100%',
|
87
|
+
height: 300
|
88
|
+
},
|
89
|
+
hasNoCopyButton: true
|
90
|
+
}, "\nexport const ChipWithIcon = () => (\n <>\n <Chip label=\"Chip with Icon Button\" bg=\"navy\">\n <IconButton aria-label=\"Clear Chip with Icon Button\" variant=\"inverted\">\n <Icon icon={Clear} ml=\"xs\" size=\"14px\" />\n </IconButton>\n </Chip>\n\n <div style={{ padding: '5px' }} />\n\n <Chip label=\"Chip with Icon Button\">\n <IconButton aria-label=\"Clear Chip with Icon Button\" variant=\"inverted\">\n <Icon icon={Earth} ml=\"xs\" size=\"14px\" />\n </IconButton>\n </Chip>\n\n <div style={{ padding: '5px' }} />\n\n <Chip label=\"Chip with Icon\" bg=\"green\">\n <Icon icon={ContentCopy} ml=\"xs\" size=\"14px\" color=\"white\" />\n </Chip>\n </>\n);\n "));
|
91
|
+
};
|
92
|
+
|
93
|
+
exports.WithCustomSize = WithCustomSize;
|
@@ -0,0 +1,211 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
4
|
+
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-property"));
|
6
|
+
|
7
|
+
var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-properties"));
|
8
|
+
|
9
|
+
var _getOwnPropertyDescriptors = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors"));
|
10
|
+
|
11
|
+
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
|
12
|
+
|
13
|
+
var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor"));
|
14
|
+
|
15
|
+
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
|
16
|
+
|
17
|
+
var _getOwnPropertySymbols = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols"));
|
18
|
+
|
19
|
+
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
|
20
|
+
|
21
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
|
22
|
+
|
23
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
|
24
|
+
|
25
|
+
var _trim = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/trim"));
|
26
|
+
|
27
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
28
|
+
|
29
|
+
var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
30
|
+
|
31
|
+
var _react = _interopRequireDefault(require("react"));
|
32
|
+
|
33
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
34
|
+
|
35
|
+
var _testAxe = _interopRequireDefault(require("../../utils/testUtils/testAxe"));
|
36
|
+
|
37
|
+
var _testWrapper = require("../../utils/testUtils/testWrapper");
|
38
|
+
|
39
|
+
var _ = require("../..");
|
40
|
+
|
41
|
+
var _react2 = require("@emotion/react");
|
42
|
+
|
43
|
+
function ownKeys(object, enumerableOnly) { var keys = (0, _keys["default"])(object); if (_getOwnPropertySymbols["default"]) { var symbols = (0, _getOwnPropertySymbols["default"])(object); if (enumerableOnly) symbols = (0, _filter["default"])(symbols).call(symbols, function (sym) { return (0, _getOwnPropertyDescriptor["default"])(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
44
|
+
|
45
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context5; (0, _forEach["default"])(_context5 = ownKeys(Object(source), true)).call(_context5, function (key) { (0, _defineProperty3["default"])(target, key, source[key]); }); } else if (_getOwnPropertyDescriptors["default"]) { (0, _defineProperties["default"])(target, (0, _getOwnPropertyDescriptors["default"])(source)); } else { var _context6; (0, _forEach["default"])(_context6 = ownKeys(Object(source))).call(_context6, function (key) { (0, _defineProperty2["default"])(target, key, (0, _getOwnPropertyDescriptor["default"])(source, key)); }); } } return target; }
|
46
|
+
|
47
|
+
var testId = 'test-code-sample';
|
48
|
+
|
49
|
+
var originalClipboard = _objectSpread({}, global.navigator.clipboard);
|
50
|
+
|
51
|
+
var originalExecCommand = global.document.execCommand;
|
52
|
+
var defaultProps = {
|
53
|
+
'data-testid': testId
|
54
|
+
};
|
55
|
+
var textValue = "\nexport const Default = args => (\n <>\n <Text sx={{ fontWeight: 2 }}>JSON</Text>\n <CodeView {...args} />\n </>\n);\n";
|
56
|
+
|
57
|
+
var getComponent = function getComponent() {
|
58
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
59
|
+
return (0, _testWrapper.render)((0, _react2.jsx)(_.CodeView, (0, _extends2["default"])({}, defaultProps, props), textValue));
|
60
|
+
}; // Need to be added to each test file to test accessibility using axe.
|
61
|
+
|
62
|
+
|
63
|
+
(0, _testAxe["default"])(getComponent);
|
64
|
+
test('renders component in the default state', function () {
|
65
|
+
getComponent();
|
66
|
+
|
67
|
+
var container = _testWrapper.screen.getByTestId(testId);
|
68
|
+
|
69
|
+
expect(container).toBeInstanceOf(HTMLDivElement);
|
70
|
+
expect(container).toBeInTheDocument();
|
71
|
+
});
|
72
|
+
test('tooltip renders on hover', function () {
|
73
|
+
getComponent();
|
74
|
+
|
75
|
+
var container = _testWrapper.screen.getByTestId(testId);
|
76
|
+
|
77
|
+
_testWrapper.fireEvent.mouseMove(container);
|
78
|
+
|
79
|
+
_testWrapper.fireEvent.mouseEnter(container);
|
80
|
+
|
81
|
+
expect(_testWrapper.screen.queryByRole('tooltip')).toBeInTheDocument();
|
82
|
+
expect(_testWrapper.screen.queryByRole('tooltip')).toHaveTextContent('Copy to clipboard');
|
83
|
+
});
|
84
|
+
test('content and copy button are focused via keyboard', function () {
|
85
|
+
getComponent();
|
86
|
+
|
87
|
+
var container = _testWrapper.screen.getByTestId(testId);
|
88
|
+
|
89
|
+
expect(container).not.toHaveFocus();
|
90
|
+
|
91
|
+
_userEvent["default"].tab();
|
92
|
+
|
93
|
+
expect(container).toHaveFocus();
|
94
|
+
|
95
|
+
var copyBtn = _testWrapper.screen.getByLabelText('copy');
|
96
|
+
|
97
|
+
expect(copyBtn).not.toHaveFocus();
|
98
|
+
|
99
|
+
_userEvent["default"].tab();
|
100
|
+
|
101
|
+
expect(copyBtn).toHaveFocus();
|
102
|
+
expect(copyBtn).toHaveClass('is-focused');
|
103
|
+
});
|
104
|
+
test('doesn\'t render copy button and tooltip with prop hasNoCopyButton', function () {
|
105
|
+
getComponent({
|
106
|
+
hasNoCopyButton: true
|
107
|
+
});
|
108
|
+
|
109
|
+
var container = _testWrapper.screen.getByTestId(testId);
|
110
|
+
|
111
|
+
_testWrapper.fireEvent.mouseMove(container);
|
112
|
+
|
113
|
+
_testWrapper.fireEvent.mouseEnter(container);
|
114
|
+
|
115
|
+
expect(_testWrapper.screen.queryByRole('tooltip')).not.toBeInTheDocument();
|
116
|
+
expect(_testWrapper.screen.queryByLabelText('copy')).not.toBeInTheDocument();
|
117
|
+
});
|
118
|
+
test('renders line numbers with prop hasLineNumbers', function () {
|
119
|
+
var linesLength = ((0, _trim["default"])(textValue).call(textValue).split('\n').length - 1).toString();
|
120
|
+
getComponent();
|
121
|
+
expect(_testWrapper.screen.queryByText('1')).not.toBeInTheDocument();
|
122
|
+
expect(_testWrapper.screen.queryByText(linesLength)).not.toBeInTheDocument();
|
123
|
+
getComponent({
|
124
|
+
hasLineNumbers: true
|
125
|
+
});
|
126
|
+
expect(_testWrapper.screen.queryByText('1')).toBeInTheDocument();
|
127
|
+
expect(_testWrapper.screen.queryByText(linesLength)).toBeInTheDocument();
|
128
|
+
});
|
129
|
+
beforeEach(function () {
|
130
|
+
var mockClipboard = {
|
131
|
+
writeText: jest.fn()
|
132
|
+
};
|
133
|
+
global.navigator.clipboard = mockClipboard;
|
134
|
+
global.document.execCommand = jest.fn();
|
135
|
+
global.document.execCommand.mockReturnValue(true);
|
136
|
+
});
|
137
|
+
afterEach(function () {
|
138
|
+
jest.resetAllMocks();
|
139
|
+
global.navigator.clipboard = originalClipboard;
|
140
|
+
global.document.execCommand = originalExecCommand;
|
141
|
+
});
|
142
|
+
test('click on copy button copies data to the clipboard', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
143
|
+
var button;
|
144
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
145
|
+
while (1) {
|
146
|
+
switch (_context2.prev = _context2.next) {
|
147
|
+
case 0:
|
148
|
+
getComponent();
|
149
|
+
button = _testWrapper.screen.getByLabelText('copy');
|
150
|
+
_context2.next = 4;
|
151
|
+
return (0, _testWrapper.act)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
152
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
153
|
+
while (1) {
|
154
|
+
switch (_context.prev = _context.next) {
|
155
|
+
case 0:
|
156
|
+
return _context.abrupt("return", _userEvent["default"].click(button));
|
157
|
+
|
158
|
+
case 1:
|
159
|
+
case "end":
|
160
|
+
return _context.stop();
|
161
|
+
}
|
162
|
+
}
|
163
|
+
}, _callee);
|
164
|
+
})));
|
165
|
+
|
166
|
+
case 4:
|
167
|
+
expect(navigator.clipboard.writeText).toBeCalledTimes(1);
|
168
|
+
expect(navigator.clipboard.writeText).toHaveBeenCalledWith(textValue);
|
169
|
+
|
170
|
+
case 6:
|
171
|
+
case "end":
|
172
|
+
return _context2.stop();
|
173
|
+
}
|
174
|
+
}
|
175
|
+
}, _callee2);
|
176
|
+
})));
|
177
|
+
test('after button click, the tooltip renders with the text "Copied!"', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
178
|
+
var button;
|
179
|
+
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
180
|
+
while (1) {
|
181
|
+
switch (_context4.prev = _context4.next) {
|
182
|
+
case 0:
|
183
|
+
getComponent();
|
184
|
+
button = _testWrapper.screen.getByLabelText('copy');
|
185
|
+
_context4.next = 4;
|
186
|
+
return (0, _testWrapper.act)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
187
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
188
|
+
while (1) {
|
189
|
+
switch (_context3.prev = _context3.next) {
|
190
|
+
case 0:
|
191
|
+
return _context3.abrupt("return", _userEvent["default"].click(button));
|
192
|
+
|
193
|
+
case 1:
|
194
|
+
case "end":
|
195
|
+
return _context3.stop();
|
196
|
+
}
|
197
|
+
}
|
198
|
+
}, _callee3);
|
199
|
+
})));
|
200
|
+
|
201
|
+
case 4:
|
202
|
+
expect(_testWrapper.screen.queryByRole('tooltip')).toBeInTheDocument();
|
203
|
+
expect(_testWrapper.screen.queryByRole('tooltip')).toHaveTextContent('Copied!');
|
204
|
+
|
205
|
+
case 6:
|
206
|
+
case "end":
|
207
|
+
return _context4.stop();
|
208
|
+
}
|
209
|
+
}
|
210
|
+
}, _callee4);
|
211
|
+
})));
|