@pingux/astro 2.33.0 → 2.34.0-alpha.1
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/Breadcrumbs/Breadcrumb.styles.js +25 -24
- package/lib/cjs/components/Breadcrumbs/BreadcrumbItem.js +23 -9
- package/lib/cjs/components/Breadcrumbs/Breadcrumbs.js +11 -18
- package/lib/cjs/components/Breadcrumbs/Breadcrumbs.stories.js +53 -11
- package/lib/cjs/components/Breadcrumbs/Breadcrumbs.test.js +4 -3
- package/lib/cjs/components/Icon/Icon.test.js +28 -4
- package/lib/cjs/utils/designUtils/figmaLinks.js +2 -1
- package/lib/components/Breadcrumbs/Breadcrumb.styles.js +26 -25
- package/lib/components/Breadcrumbs/BreadcrumbItem.js +22 -9
- package/lib/components/Breadcrumbs/Breadcrumbs.js +11 -18
- package/lib/components/Breadcrumbs/Breadcrumbs.stories.js +52 -11
- package/lib/components/Breadcrumbs/Breadcrumbs.test.js +4 -3
- package/lib/components/Icon/Icon.test.js +22 -4
- package/lib/utils/designUtils/figmaLinks.js +2 -1
- package/package.json +1 -1
@@ -15,36 +15,37 @@ _Object$defineProperty(exports, "__esModule", {
|
|
15
15
|
exports["default"] = void 0;
|
16
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
17
17
|
var _Buttons = require("../Button/Buttons.styles");
|
18
|
+
var _Text = require("../Text/Text.styles");
|
18
19
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
19
20
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
20
|
-
var
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
}
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
},
|
35
|
-
'&.is-current': _objectSpread(_objectSpread({
|
36
|
-
pointerEvents: 'none'
|
37
|
-
}, _Buttons.base), {}, {
|
38
|
-
fontWeight: 1
|
39
|
-
})
|
40
|
-
};
|
41
|
-
var containerLi = {
|
21
|
+
var breadcrumbMinWidth = '40px';
|
22
|
+
var link = _objectSpread(_objectSpread(_objectSpread({}, _Text.text.textEllipsis), _Buttons.link), {}, {
|
23
|
+
display: 'block',
|
24
|
+
minWidth: breadcrumbMinWidth,
|
25
|
+
'&.is-current': {
|
26
|
+
color: 'text.primary',
|
27
|
+
textDecoration: 'none',
|
28
|
+
cursor: 'default'
|
29
|
+
}
|
30
|
+
});
|
31
|
+
var containerOl = {
|
32
|
+
alignItems: 'center',
|
33
|
+
minHeight: 42,
|
34
|
+
paddingInlineStart: 'unset',
|
42
35
|
'a.is-hovered.is-current ': {
|
43
36
|
textDecoration: 'none'
|
44
37
|
}
|
45
38
|
};
|
39
|
+
var containerLi = {
|
40
|
+
flex: '0 1000000 auto',
|
41
|
+
minWidth: breadcrumbMinWidth,
|
42
|
+
'&.is-current': {
|
43
|
+
flex: '0 1 auto'
|
44
|
+
}
|
45
|
+
};
|
46
46
|
var _default = {
|
47
|
-
|
48
|
-
|
47
|
+
containerLi: containerLi,
|
48
|
+
containerOl: containerOl,
|
49
|
+
link: link
|
49
50
|
};
|
50
51
|
exports["default"] = _default;
|
@@ -14,7 +14,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
|
|
14
14
|
_Object$defineProperty(exports, "__esModule", {
|
15
15
|
value: true
|
16
16
|
});
|
17
|
-
exports["default"] = void 0;
|
17
|
+
exports["default"] = exports.ELEMENT_TYPE = void 0;
|
18
18
|
var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
|
19
19
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
20
20
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
@@ -30,6 +30,14 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "functi
|
|
30
30
|
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; }
|
31
31
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
32
32
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
33
|
+
var ELEMENT_TYPE = {
|
34
|
+
BUTTON: 'Button',
|
35
|
+
ICON_BUTTON: 'IconButton',
|
36
|
+
TEXT: 'Text',
|
37
|
+
LINK: 'Link',
|
38
|
+
FRAGMENT: 'Fragment'
|
39
|
+
};
|
40
|
+
exports.ELEMENT_TYPE = ELEMENT_TYPE;
|
33
41
|
var BreadcrumbItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
34
42
|
var children = props.children,
|
35
43
|
elementType = props.elementType,
|
@@ -47,15 +55,15 @@ var BreadcrumbItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
47
55
|
itemProps = _useBreadcrumbItem.itemProps;
|
48
56
|
var ElementType = (0, _react.useMemo)(function () {
|
49
57
|
switch (elementType) {
|
50
|
-
case
|
58
|
+
case ELEMENT_TYPE.BUTTON:
|
51
59
|
return _index.Button;
|
52
|
-
case
|
60
|
+
case ELEMENT_TYPE.ICON_BUTTON:
|
53
61
|
return _index.IconButton;
|
54
|
-
case
|
62
|
+
case ELEMENT_TYPE.TEXT:
|
55
63
|
return _index.Text;
|
56
|
-
case
|
64
|
+
case ELEMENT_TYPE.LINK:
|
57
65
|
return _index.Link;
|
58
|
-
case
|
66
|
+
case ELEMENT_TYPE.FRAGMENT:
|
59
67
|
return _react.Fragment;
|
60
68
|
default:
|
61
69
|
return elementType;
|
@@ -77,9 +85,15 @@ var BreadcrumbItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
77
85
|
}
|
78
86
|
return (0, _object.omit)(elementTypeProps, 'onClick', 'onKeyDown', 'onKeyUp');
|
79
87
|
}, [elementType, itemProps, others, onPressHandler]);
|
80
|
-
|
81
|
-
|
82
|
-
|
88
|
+
var elementVariantProps = elementType !== ELEMENT_TYPE.FRAGMENT && _objectSpread({
|
89
|
+
variant: elementType === ELEMENT_TYPE.LINK ? 'variants.breadcrumb.link' : '',
|
90
|
+
ref: itemRef
|
91
|
+
}, elementProps);
|
92
|
+
return (0, _react2.jsx)(_index.Box, {
|
93
|
+
as: "li",
|
94
|
+
className: isCurrent && 'is-current',
|
95
|
+
variant: "variants.breadcrumb.containerLi"
|
96
|
+
}, (0, _react2.jsx)(ElementType, elementVariantProps, children));
|
83
97
|
});
|
84
98
|
BreadcrumbItem.propTypes = {
|
85
99
|
actionKey: _propTypes["default"].string,
|
@@ -44,37 +44,30 @@ var Breadcrumbs = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
44
44
|
});
|
45
45
|
var createBreadcrumb = (0, _react.useCallback)(function (child, idx) {
|
46
46
|
var isCurrentItem = (0, _isArray["default"])(filteredChildren) && filteredChildren.length > 1 ? idx === children.length - 1 : true;
|
47
|
-
return (0, _react2.jsx)(
|
48
|
-
|
49
|
-
sx: {
|
50
|
-
alignItems: 'center',
|
51
|
-
minHeight: 42
|
52
|
-
},
|
53
|
-
as: "li",
|
54
|
-
key: "li-".concat(child.key),
|
55
|
-
variant: "variants.breadcrumb.containerLi"
|
47
|
+
return (0, _react2.jsx)(_react["default"].Fragment, {
|
48
|
+
key: "li-".concat(child.key)
|
56
49
|
}, (0, _react2.jsx)(_BreadcrumbItem["default"], (0, _extends2["default"])({
|
50
|
+
actionKey: child.key,
|
57
51
|
"data-id": child['data-id'],
|
58
52
|
isCurrent: isCurrentItem,
|
59
|
-
onAction: onAction
|
60
|
-
actionKey: child.key,
|
61
|
-
variant: "variants.breadcrumb.link"
|
53
|
+
onAction: onAction
|
62
54
|
}, child.props), child.props.children), icon && !isCurrentItem && (0, _react2.jsx)(_index.Icon, (0, _extends2["default"])({
|
63
55
|
"aria-hidden": "true",
|
64
56
|
icon: icon,
|
65
57
|
mx: 5,
|
66
|
-
size: "xs"
|
58
|
+
size: "xs",
|
59
|
+
title: {
|
60
|
+
name: 'Breadcrumb Separator'
|
61
|
+
}
|
67
62
|
}, iconProps)));
|
68
63
|
}, [children.length, filteredChildren, icon, iconProps, onAction]);
|
69
64
|
return (0, _react2.jsx)("nav", {
|
70
65
|
"aria-label": "Breadcrumb"
|
71
66
|
}, (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
|
72
|
-
|
67
|
+
as: "ol",
|
73
68
|
isRow: true,
|
74
|
-
|
75
|
-
|
76
|
-
},
|
77
|
-
as: "ol"
|
69
|
+
ref: breadcrumbsRef,
|
70
|
+
variant: "variants.breadcrumb.containerOl"
|
78
71
|
}, (0, _reactAria.mergeProps)(wrapperProps, others)), (0, _isArray["default"])(filteredChildren) ? (0, _map["default"])(filteredChildren).call(filteredChildren, createBreadcrumb) : createBreadcrumb(children)));
|
79
72
|
});
|
80
73
|
Breadcrumbs.propTypes = {
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
|
|
5
5
|
_Object$defineProperty(exports, "__esModule", {
|
6
6
|
value: true
|
7
7
|
});
|
8
|
-
exports["default"] = exports.Default = void 0;
|
8
|
+
exports["default"] = exports.Overflowing = exports.Default = void 0;
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
10
10
|
var _react = _interopRequireDefault(require("react"));
|
11
11
|
var _reactStately = require("react-stately");
|
@@ -43,9 +43,6 @@ var _default = {
|
|
43
43
|
type: 'none'
|
44
44
|
}
|
45
45
|
}
|
46
|
-
},
|
47
|
-
args: {
|
48
|
-
icon: _ChevronRightIcon["default"]
|
49
46
|
}
|
50
47
|
};
|
51
48
|
exports["default"] = _default;
|
@@ -55,23 +52,22 @@ var Default = function Default(args) {
|
|
55
52
|
};
|
56
53
|
return (0, _react2.jsx)(_index.Breadcrumbs, (0, _extends2["default"])({
|
57
54
|
onAction: onAction
|
58
|
-
}, args
|
55
|
+
}, args, {
|
56
|
+
icon: _ChevronRightIcon["default"]
|
57
|
+
}), (0, _react2.jsx)(_reactStately.Item, {
|
59
58
|
"aria-label": "home",
|
60
59
|
"data-id": "home",
|
61
60
|
href: "https://www.pingidentity.com",
|
62
|
-
key: "home"
|
63
|
-
variant: "buttons.link"
|
61
|
+
key: "home"
|
64
62
|
}, "Home"), (0, _react2.jsx)(_reactStately.Item, {
|
65
63
|
"aria-label": "trendy",
|
66
64
|
"data-id": "trendy",
|
67
65
|
href: "https://www.pingidentity.com",
|
68
|
-
key: "trendy"
|
69
|
-
variant: "buttons.link"
|
66
|
+
key: "trendy"
|
70
67
|
}, "Trendy"), (0, _react2.jsx)(_reactStately.Item, {
|
71
68
|
"aria-label": "march-2020-assets",
|
72
69
|
"data-id": "march",
|
73
|
-
key: "march 2020 assets"
|
74
|
-
variant: "buttons.link"
|
70
|
+
key: "march 2020 assets"
|
75
71
|
}, "March 2020 Assets"));
|
76
72
|
};
|
77
73
|
exports.Default = Default;
|
@@ -80,4 +76,50 @@ Default.parameters = {
|
|
80
76
|
type: 'figma',
|
81
77
|
url: _figmaLinks.FIGMA_LINKS.breadcrumbs["default"]
|
82
78
|
}
|
79
|
+
};
|
80
|
+
var Overflowing = function Overflowing() {
|
81
|
+
var reallyLongText = 'If This Text Were Really Very Much So Extremely Long';
|
82
|
+
return (0, _react2.jsx)(_index.Box, {
|
83
|
+
gap: "md",
|
84
|
+
maxWidth: "385px"
|
85
|
+
}, (0, _react2.jsx)(_index.Breadcrumbs, {
|
86
|
+
icon: _ChevronRightIcon["default"]
|
87
|
+
}, (0, _react2.jsx)(_reactStately.Item, {
|
88
|
+
"aria-label": "breadcrumb_1",
|
89
|
+
"data-id": "breadcrumb_1",
|
90
|
+
href: "https://www.pingidentity.com",
|
91
|
+
key: "breadcrumb_1"
|
92
|
+
}, reallyLongText), (0, _react2.jsx)(_reactStately.Item, {
|
93
|
+
"aria-label": "breadcrumb_2",
|
94
|
+
"data-id": "breadcrumb_2",
|
95
|
+
href: "https://www.pingidentity.com",
|
96
|
+
key: "breadcrumb_2"
|
97
|
+
}, "Edit")), (0, _react2.jsx)(_index.Breadcrumbs, {
|
98
|
+
icon: _ChevronRightIcon["default"]
|
99
|
+
}, (0, _react2.jsx)(_reactStately.Item, {
|
100
|
+
"aria-label": "breadcrumb_1",
|
101
|
+
"data-id": "breadcrumb_1",
|
102
|
+
href: "https://www.pingidentity.com",
|
103
|
+
key: "breadcrumb_1"
|
104
|
+
}, reallyLongText), (0, _react2.jsx)(_reactStately.Item, {
|
105
|
+
"aria-label": "breadcrumb_1",
|
106
|
+
"data-id": "breadcrumb_2",
|
107
|
+
href: "https://www.pingidentity.com",
|
108
|
+
key: "breadcrumb_2"
|
109
|
+
}, reallyLongText)));
|
110
|
+
};
|
111
|
+
exports.Overflowing = Overflowing;
|
112
|
+
Overflowing.parameters = {
|
113
|
+
design: {
|
114
|
+
type: 'figma',
|
115
|
+
url: _figmaLinks.FIGMA_LINKS.breadcrumbs.overflowing
|
116
|
+
},
|
117
|
+
a11y: {
|
118
|
+
config: {
|
119
|
+
rules: [{
|
120
|
+
id: 'landmark-unique',
|
121
|
+
enabled: false
|
122
|
+
}]
|
123
|
+
}
|
124
|
+
}
|
83
125
|
};
|
@@ -11,6 +11,7 @@ var _CreateIcon = _interopRequireDefault(require("@pingux/mdi-react/CreateIcon")
|
|
11
11
|
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
12
12
|
var _testWrapper = require("../../utils/testUtils/testWrapper");
|
13
13
|
var _universalComponentTest = require("../../utils/testUtils/universalComponentTest");
|
14
|
+
var _BreadcrumbItem = require("./BreadcrumbItem");
|
14
15
|
var _Breadcrumbs = _interopRequireDefault(require("./Breadcrumbs"));
|
15
16
|
var _react2 = require("@emotion/react");
|
16
17
|
var testId = 'test-breadcrumbs';
|
@@ -60,14 +61,14 @@ test('should render correct amount of icons', function () {
|
|
60
61
|
});
|
61
62
|
test('breadcrumbItem should render breadcrumbItem as a Text component when appropriate elementType passed', function () {
|
62
63
|
getComponent({}, {
|
63
|
-
elementType:
|
64
|
+
elementType: _BreadcrumbItem.ELEMENT_TYPE.TEXT,
|
64
65
|
'data-testid': testItemId
|
65
66
|
});
|
66
67
|
expect(_testWrapper.screen.getAllByTestId(testItemId)[0]).toBeInstanceOf(HTMLSpanElement);
|
67
68
|
});
|
68
69
|
test('breadcrumbItem should render breadcrumbItem as a IconButton component when appropriate elementType passed', function () {
|
69
70
|
getComponent({}, {
|
70
|
-
elementType:
|
71
|
+
elementType: _BreadcrumbItem.ELEMENT_TYPE.ICON_BUTTON,
|
71
72
|
'data-testid': testItemId,
|
72
73
|
icon: _CreateIcon["default"]
|
73
74
|
});
|
@@ -84,7 +85,7 @@ test('breadcrumbItem should render breadcrumbItem as a html tag when appropriate
|
|
84
85
|
test('breadcrumbs will use onAction if provided', function () {
|
85
86
|
var mockOnAction = jest.fn();
|
86
87
|
getComponent({}, {
|
87
|
-
elementType:
|
88
|
+
elementType: _BreadcrumbItem.ELEMENT_TYPE.LINK,
|
88
89
|
onAction: mockOnAction
|
89
90
|
});
|
90
91
|
_userEvent["default"].click(_testWrapper.screen.getByText(testItemsArr[0]));
|
@@ -1,13 +1,19 @@
|
|
1
1
|
"use strict";
|
2
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");
|
3
7
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
4
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
5
|
-
var _react =
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
6
10
|
var _EarthIcon = _interopRequireDefault(require("@pingux/mdi-react/EarthIcon"));
|
7
11
|
var _react2 = require("@testing-library/react");
|
8
|
-
var
|
12
|
+
var _universalComponentTest = require("../../utils/testUtils/universalComponentTest");
|
9
13
|
var _ = _interopRequireDefault(require("."));
|
10
14
|
var _react3 = require("@emotion/react");
|
15
|
+
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); }
|
16
|
+
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; }
|
11
17
|
var testId = 'test-icon';
|
12
18
|
var defaultProps = {
|
13
19
|
'data-testid': testId,
|
@@ -22,8 +28,26 @@ var getComponent = function getComponent() {
|
|
22
28
|
return (0, _react2.render)((0, _react3.jsx)(_["default"], (0, _extends2["default"])({}, defaultProps, props)));
|
23
29
|
};
|
24
30
|
|
25
|
-
//
|
26
|
-
|
31
|
+
// The mdi-react and @pingux/mid-react libraries don't support ref forwarding
|
32
|
+
// A simple implementation of an SVG component demonstrates ref forwarding
|
33
|
+
var SVGTestComponent = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
34
|
+
return (0, _react3.jsx)("svg", (0, _extends2["default"])({
|
35
|
+
ref: ref
|
36
|
+
}, props, {
|
37
|
+
"aria-labelledby": "id"
|
38
|
+
}), (0, _react3.jsx)("title", {
|
39
|
+
id: "id"
|
40
|
+
}, "title"));
|
41
|
+
});
|
42
|
+
|
43
|
+
// Needs to be added to each components test file
|
44
|
+
(0, _universalComponentTest.universalComponentTests)({
|
45
|
+
renderComponent: function renderComponent(props) {
|
46
|
+
return (0, _react3.jsx)(_["default"], (0, _extends2["default"])({
|
47
|
+
icon: SVGTestComponent
|
48
|
+
}, props));
|
49
|
+
}
|
50
|
+
});
|
27
51
|
test('default icon', function () {
|
28
52
|
getComponent();
|
29
53
|
var icon = _react2.screen.getByTestId(testId);
|
@@ -30,7 +30,8 @@ var FIGMA_LINKS = {
|
|
30
30
|
isLast: 'https://www.figma.com/file/bpbEw54gTTcdIiZs4PKK1p/Astro-Specs?node-id=45365%3A7832&mode=dev'
|
31
31
|
},
|
32
32
|
breadcrumbs: {
|
33
|
-
"default": 'https://www.figma.com/file/bpbEw54gTTcdIiZs4PKK1p/Astro-Specs?type=design&node-id=1162-11924&t=8Wwd3tIBh3GEjCJB-0'
|
33
|
+
"default": 'https://www.figma.com/file/bpbEw54gTTcdIiZs4PKK1p/Astro-Specs?type=design&node-id=1162-11924&t=8Wwd3tIBh3GEjCJB-0',
|
34
|
+
overflowing: 'https://www.figma.com/file/bpbEw54gTTcdIiZs4PKK1p/Astro-Specs?type=design&node-id=45064-7148&mode=design&t=0RGDgLyKBzT6bOXO-0'
|
34
35
|
},
|
35
36
|
button: {
|
36
37
|
"default": 'https://www.figma.com/file/bpbEw54gTTcdIiZs4PKK1p/Astro-Specs?type=design&node-id=0-1&t=8Wwd3tIBh3GEjCJB-0'
|
@@ -9,34 +9,35 @@ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object
|
|
9
9
|
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
10
10
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
11
11
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
12
|
-
import {
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
textDecoration: '
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
'
|
26
|
-
|
27
|
-
|
28
|
-
'&.is-current': _objectSpread(_objectSpread({
|
29
|
-
pointerEvents: 'none'
|
30
|
-
}, base), {}, {
|
31
|
-
fontWeight: 1
|
32
|
-
})
|
33
|
-
};
|
34
|
-
var containerLi = {
|
12
|
+
import { link as buttonLink } from '../Button/Buttons.styles';
|
13
|
+
import { text } from '../Text/Text.styles';
|
14
|
+
var breadcrumbMinWidth = '40px';
|
15
|
+
var link = _objectSpread(_objectSpread(_objectSpread({}, text.textEllipsis), buttonLink), {}, {
|
16
|
+
display: 'block',
|
17
|
+
minWidth: breadcrumbMinWidth,
|
18
|
+
'&.is-current': {
|
19
|
+
color: 'text.primary',
|
20
|
+
textDecoration: 'none',
|
21
|
+
cursor: 'default'
|
22
|
+
}
|
23
|
+
});
|
24
|
+
var containerOl = {
|
25
|
+
alignItems: 'center',
|
26
|
+
minHeight: 42,
|
27
|
+
paddingInlineStart: 'unset',
|
35
28
|
'a.is-hovered.is-current ': {
|
36
29
|
textDecoration: 'none'
|
37
30
|
}
|
38
31
|
};
|
32
|
+
var containerLi = {
|
33
|
+
flex: '0 1000000 auto',
|
34
|
+
minWidth: breadcrumbMinWidth,
|
35
|
+
'&.is-current': {
|
36
|
+
flex: '0 1 auto'
|
37
|
+
}
|
38
|
+
};
|
39
39
|
export default {
|
40
|
-
|
41
|
-
|
40
|
+
containerLi: containerLi,
|
41
|
+
containerOl: containerOl,
|
42
|
+
link: link
|
42
43
|
};
|
@@ -17,8 +17,15 @@ import { mergeProps, useBreadcrumbItem } from 'react-aria';
|
|
17
17
|
import { omit } from 'lodash/object';
|
18
18
|
import PropTypes from 'prop-types';
|
19
19
|
import { usePropWarning } from '../../hooks';
|
20
|
-
import { Button, IconButton, Link, Text } from '../../index';
|
20
|
+
import { Box, Button, IconButton, Link, Text } from '../../index';
|
21
21
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
22
|
+
export var ELEMENT_TYPE = {
|
23
|
+
BUTTON: 'Button',
|
24
|
+
ICON_BUTTON: 'IconButton',
|
25
|
+
TEXT: 'Text',
|
26
|
+
LINK: 'Link',
|
27
|
+
FRAGMENT: 'Fragment'
|
28
|
+
};
|
22
29
|
var BreadcrumbItem = /*#__PURE__*/forwardRef(function (props, ref) {
|
23
30
|
var children = props.children,
|
24
31
|
elementType = props.elementType,
|
@@ -36,15 +43,15 @@ var BreadcrumbItem = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
36
43
|
itemProps = _useBreadcrumbItem.itemProps;
|
37
44
|
var ElementType = useMemo(function () {
|
38
45
|
switch (elementType) {
|
39
|
-
case
|
46
|
+
case ELEMENT_TYPE.BUTTON:
|
40
47
|
return Button;
|
41
|
-
case
|
48
|
+
case ELEMENT_TYPE.ICON_BUTTON:
|
42
49
|
return IconButton;
|
43
|
-
case
|
50
|
+
case ELEMENT_TYPE.TEXT:
|
44
51
|
return Text;
|
45
|
-
case
|
52
|
+
case ELEMENT_TYPE.LINK:
|
46
53
|
return Link;
|
47
|
-
case
|
54
|
+
case ELEMENT_TYPE.FRAGMENT:
|
48
55
|
return Fragment;
|
49
56
|
default:
|
50
57
|
return elementType;
|
@@ -66,9 +73,15 @@ var BreadcrumbItem = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
66
73
|
}
|
67
74
|
return omit(elementTypeProps, 'onClick', 'onKeyDown', 'onKeyUp');
|
68
75
|
}, [elementType, itemProps, others, onPressHandler]);
|
69
|
-
|
70
|
-
|
71
|
-
|
76
|
+
var elementVariantProps = elementType !== ELEMENT_TYPE.FRAGMENT && _objectSpread({
|
77
|
+
variant: elementType === ELEMENT_TYPE.LINK ? 'variants.breadcrumb.link' : '',
|
78
|
+
ref: itemRef
|
79
|
+
}, elementProps);
|
80
|
+
return ___EmotionJSX(Box, {
|
81
|
+
as: "li",
|
82
|
+
className: isCurrent && 'is-current',
|
83
|
+
variant: "variants.breadcrumb.containerLi"
|
84
|
+
}, ___EmotionJSX(ElementType, elementVariantProps, children));
|
72
85
|
});
|
73
86
|
BreadcrumbItem.propTypes = {
|
74
87
|
actionKey: PropTypes.string,
|
@@ -31,37 +31,30 @@ var Breadcrumbs = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
31
31
|
});
|
32
32
|
var createBreadcrumb = useCallback(function (child, idx) {
|
33
33
|
var isCurrentItem = _Array$isArray(filteredChildren) && filteredChildren.length > 1 ? idx === children.length - 1 : true;
|
34
|
-
return ___EmotionJSX(
|
35
|
-
|
36
|
-
sx: {
|
37
|
-
alignItems: 'center',
|
38
|
-
minHeight: 42
|
39
|
-
},
|
40
|
-
as: "li",
|
41
|
-
key: "li-".concat(child.key),
|
42
|
-
variant: "variants.breadcrumb.containerLi"
|
34
|
+
return ___EmotionJSX(React.Fragment, {
|
35
|
+
key: "li-".concat(child.key)
|
43
36
|
}, ___EmotionJSX(BreadcrumbItem, _extends({
|
37
|
+
actionKey: child.key,
|
44
38
|
"data-id": child['data-id'],
|
45
39
|
isCurrent: isCurrentItem,
|
46
|
-
onAction: onAction
|
47
|
-
actionKey: child.key,
|
48
|
-
variant: "variants.breadcrumb.link"
|
40
|
+
onAction: onAction
|
49
41
|
}, child.props), child.props.children), icon && !isCurrentItem && ___EmotionJSX(Icon, _extends({
|
50
42
|
"aria-hidden": "true",
|
51
43
|
icon: icon,
|
52
44
|
mx: 5,
|
53
|
-
size: "xs"
|
45
|
+
size: "xs",
|
46
|
+
title: {
|
47
|
+
name: 'Breadcrumb Separator'
|
48
|
+
}
|
54
49
|
}, iconProps)));
|
55
50
|
}, [children.length, filteredChildren, icon, iconProps, onAction]);
|
56
51
|
return ___EmotionJSX("nav", {
|
57
52
|
"aria-label": "Breadcrumb"
|
58
53
|
}, ___EmotionJSX(Box, _extends({
|
59
|
-
|
54
|
+
as: "ol",
|
60
55
|
isRow: true,
|
61
|
-
|
62
|
-
|
63
|
-
},
|
64
|
-
as: "ol"
|
56
|
+
ref: breadcrumbsRef,
|
57
|
+
variant: "variants.breadcrumb.containerOl"
|
65
58
|
}, mergeProps(wrapperProps, others)), _Array$isArray(filteredChildren) ? _mapInstanceProperty(filteredChildren).call(filteredChildren, createBreadcrumb) : createBreadcrumb(children)));
|
66
59
|
});
|
67
60
|
Breadcrumbs.propTypes = {
|
@@ -5,7 +5,7 @@ import ChevronRightIcon from '@pingux/mdi-react/ChevronRightIcon';
|
|
5
5
|
import { action } from '@storybook/addon-actions';
|
6
6
|
import { withDesign } from 'storybook-addon-designs';
|
7
7
|
import DocsLayout from '../../../.storybook/storybookDocsLayout';
|
8
|
-
import { Breadcrumbs } from '../../index';
|
8
|
+
import { Box, Breadcrumbs } from '../../index';
|
9
9
|
import { FIGMA_LINKS } from '../../utils/designUtils/figmaLinks.ts';
|
10
10
|
import BreadcrumbsReadme from './Breadcrumbs.mdx';
|
11
11
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
@@ -35,9 +35,6 @@ export default {
|
|
35
35
|
type: 'none'
|
36
36
|
}
|
37
37
|
}
|
38
|
-
},
|
39
|
-
args: {
|
40
|
-
icon: ChevronRightIcon
|
41
38
|
}
|
42
39
|
};
|
43
40
|
export var Default = function Default(args) {
|
@@ -46,23 +43,22 @@ export var Default = function Default(args) {
|
|
46
43
|
};
|
47
44
|
return ___EmotionJSX(Breadcrumbs, _extends({
|
48
45
|
onAction: onAction
|
49
|
-
}, args
|
46
|
+
}, args, {
|
47
|
+
icon: ChevronRightIcon
|
48
|
+
}), ___EmotionJSX(Item, {
|
50
49
|
"aria-label": "home",
|
51
50
|
"data-id": "home",
|
52
51
|
href: "https://www.pingidentity.com",
|
53
|
-
key: "home"
|
54
|
-
variant: "buttons.link"
|
52
|
+
key: "home"
|
55
53
|
}, "Home"), ___EmotionJSX(Item, {
|
56
54
|
"aria-label": "trendy",
|
57
55
|
"data-id": "trendy",
|
58
56
|
href: "https://www.pingidentity.com",
|
59
|
-
key: "trendy"
|
60
|
-
variant: "buttons.link"
|
57
|
+
key: "trendy"
|
61
58
|
}, "Trendy"), ___EmotionJSX(Item, {
|
62
59
|
"aria-label": "march-2020-assets",
|
63
60
|
"data-id": "march",
|
64
|
-
key: "march 2020 assets"
|
65
|
-
variant: "buttons.link"
|
61
|
+
key: "march 2020 assets"
|
66
62
|
}, "March 2020 Assets"));
|
67
63
|
};
|
68
64
|
Default.parameters = {
|
@@ -70,4 +66,49 @@ Default.parameters = {
|
|
70
66
|
type: 'figma',
|
71
67
|
url: FIGMA_LINKS.breadcrumbs["default"]
|
72
68
|
}
|
69
|
+
};
|
70
|
+
export var Overflowing = function Overflowing() {
|
71
|
+
var reallyLongText = 'If This Text Were Really Very Much So Extremely Long';
|
72
|
+
return ___EmotionJSX(Box, {
|
73
|
+
gap: "md",
|
74
|
+
maxWidth: "385px"
|
75
|
+
}, ___EmotionJSX(Breadcrumbs, {
|
76
|
+
icon: ChevronRightIcon
|
77
|
+
}, ___EmotionJSX(Item, {
|
78
|
+
"aria-label": "breadcrumb_1",
|
79
|
+
"data-id": "breadcrumb_1",
|
80
|
+
href: "https://www.pingidentity.com",
|
81
|
+
key: "breadcrumb_1"
|
82
|
+
}, reallyLongText), ___EmotionJSX(Item, {
|
83
|
+
"aria-label": "breadcrumb_2",
|
84
|
+
"data-id": "breadcrumb_2",
|
85
|
+
href: "https://www.pingidentity.com",
|
86
|
+
key: "breadcrumb_2"
|
87
|
+
}, "Edit")), ___EmotionJSX(Breadcrumbs, {
|
88
|
+
icon: ChevronRightIcon
|
89
|
+
}, ___EmotionJSX(Item, {
|
90
|
+
"aria-label": "breadcrumb_1",
|
91
|
+
"data-id": "breadcrumb_1",
|
92
|
+
href: "https://www.pingidentity.com",
|
93
|
+
key: "breadcrumb_1"
|
94
|
+
}, reallyLongText), ___EmotionJSX(Item, {
|
95
|
+
"aria-label": "breadcrumb_1",
|
96
|
+
"data-id": "breadcrumb_2",
|
97
|
+
href: "https://www.pingidentity.com",
|
98
|
+
key: "breadcrumb_2"
|
99
|
+
}, reallyLongText)));
|
100
|
+
};
|
101
|
+
Overflowing.parameters = {
|
102
|
+
design: {
|
103
|
+
type: 'figma',
|
104
|
+
url: FIGMA_LINKS.breadcrumbs.overflowing
|
105
|
+
},
|
106
|
+
a11y: {
|
107
|
+
config: {
|
108
|
+
rules: [{
|
109
|
+
id: 'landmark-unique',
|
110
|
+
enabled: false
|
111
|
+
}]
|
112
|
+
}
|
113
|
+
}
|
73
114
|
};
|
@@ -8,6 +8,7 @@ import CreateIcon from '@pingux/mdi-react/CreateIcon';
|
|
8
8
|
import userEvent from '@testing-library/user-event';
|
9
9
|
import { render, screen } from '../../utils/testUtils/testWrapper';
|
10
10
|
import { universalComponentTests } from '../../utils/testUtils/universalComponentTest';
|
11
|
+
import { ELEMENT_TYPE } from './BreadcrumbItem';
|
11
12
|
import Breadcrumbs from './Breadcrumbs';
|
12
13
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
13
14
|
var testId = 'test-breadcrumbs';
|
@@ -57,14 +58,14 @@ test('should render correct amount of icons', function () {
|
|
57
58
|
});
|
58
59
|
test('breadcrumbItem should render breadcrumbItem as a Text component when appropriate elementType passed', function () {
|
59
60
|
getComponent({}, {
|
60
|
-
elementType:
|
61
|
+
elementType: ELEMENT_TYPE.TEXT,
|
61
62
|
'data-testid': testItemId
|
62
63
|
});
|
63
64
|
expect(screen.getAllByTestId(testItemId)[0]).toBeInstanceOf(HTMLSpanElement);
|
64
65
|
});
|
65
66
|
test('breadcrumbItem should render breadcrumbItem as a IconButton component when appropriate elementType passed', function () {
|
66
67
|
getComponent({}, {
|
67
|
-
elementType:
|
68
|
+
elementType: ELEMENT_TYPE.ICON_BUTTON,
|
68
69
|
'data-testid': testItemId,
|
69
70
|
icon: CreateIcon
|
70
71
|
});
|
@@ -81,7 +82,7 @@ test('breadcrumbItem should render breadcrumbItem as a html tag when appropriate
|
|
81
82
|
test('breadcrumbs will use onAction if provided', function () {
|
82
83
|
var mockOnAction = jest.fn();
|
83
84
|
getComponent({}, {
|
84
|
-
elementType:
|
85
|
+
elementType: ELEMENT_TYPE.LINK,
|
85
86
|
onAction: mockOnAction
|
86
87
|
});
|
87
88
|
userEvent.click(screen.getByText(testItemsArr[0]));
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
2
|
-
import React from 'react';
|
2
|
+
import React, { forwardRef } from 'react';
|
3
3
|
import Earth from '@pingux/mdi-react/EarthIcon';
|
4
4
|
import { render, screen } from '@testing-library/react';
|
5
|
-
import
|
5
|
+
import { universalComponentTests } from '../../utils/testUtils/universalComponentTest';
|
6
6
|
import Icon from '.';
|
7
7
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
8
8
|
var testId = 'test-icon';
|
@@ -19,8 +19,26 @@ var getComponent = function getComponent() {
|
|
19
19
|
return render(___EmotionJSX(Icon, _extends({}, defaultProps, props)));
|
20
20
|
};
|
21
21
|
|
22
|
-
//
|
23
|
-
|
22
|
+
// The mdi-react and @pingux/mid-react libraries don't support ref forwarding
|
23
|
+
// A simple implementation of an SVG component demonstrates ref forwarding
|
24
|
+
var SVGTestComponent = /*#__PURE__*/forwardRef(function (props, ref) {
|
25
|
+
return ___EmotionJSX("svg", _extends({
|
26
|
+
ref: ref
|
27
|
+
}, props, {
|
28
|
+
"aria-labelledby": "id"
|
29
|
+
}), ___EmotionJSX("title", {
|
30
|
+
id: "id"
|
31
|
+
}, "title"));
|
32
|
+
});
|
33
|
+
|
34
|
+
// Needs to be added to each components test file
|
35
|
+
universalComponentTests({
|
36
|
+
renderComponent: function renderComponent(props) {
|
37
|
+
return ___EmotionJSX(Icon, _extends({
|
38
|
+
icon: SVGTestComponent
|
39
|
+
}, props));
|
40
|
+
}
|
41
|
+
});
|
24
42
|
test('default icon', function () {
|
25
43
|
getComponent();
|
26
44
|
var icon = screen.getByTestId(testId);
|
@@ -23,7 +23,8 @@ export var FIGMA_LINKS = {
|
|
23
23
|
isLast: 'https://www.figma.com/file/bpbEw54gTTcdIiZs4PKK1p/Astro-Specs?node-id=45365%3A7832&mode=dev'
|
24
24
|
},
|
25
25
|
breadcrumbs: {
|
26
|
-
"default": 'https://www.figma.com/file/bpbEw54gTTcdIiZs4PKK1p/Astro-Specs?type=design&node-id=1162-11924&t=8Wwd3tIBh3GEjCJB-0'
|
26
|
+
"default": 'https://www.figma.com/file/bpbEw54gTTcdIiZs4PKK1p/Astro-Specs?type=design&node-id=1162-11924&t=8Wwd3tIBh3GEjCJB-0',
|
27
|
+
overflowing: 'https://www.figma.com/file/bpbEw54gTTcdIiZs4PKK1p/Astro-Specs?type=design&node-id=45064-7148&mode=design&t=0RGDgLyKBzT6bOXO-0'
|
27
28
|
},
|
28
29
|
button: {
|
29
30
|
"default": 'https://www.figma.com/file/bpbEw54gTTcdIiZs4PKK1p/Astro-Specs?type=design&node-id=0-1&t=8Wwd3tIBh3GEjCJB-0'
|