@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.
@@ -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 link = {
21
- color: 'active',
22
- fontFamily: 'standard',
23
- fontSize: '15px',
24
- textDecoration: 'none',
25
- outline: 'none',
26
- '&.is-hovered': {
27
- textDecoration: 'underline'
28
- },
29
- '&.is-focused': {
30
- textDecoration: 'underline'
31
- },
32
- '&.is-disabled': {
33
- pointerEvents: 'none'
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
- link: link,
48
- containerLi: containerLi
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 'Button':
58
+ case ELEMENT_TYPE.BUTTON:
51
59
  return _index.Button;
52
- case 'IconButton':
60
+ case ELEMENT_TYPE.ICON_BUTTON:
53
61
  return _index.IconButton;
54
- case 'Text':
62
+ case ELEMENT_TYPE.TEXT:
55
63
  return _index.Text;
56
- case 'Link':
64
+ case ELEMENT_TYPE.LINK:
57
65
  return _index.Link;
58
- case 'Fragment':
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
- return /*#__PURE__*/_react["default"].cloneElement((0, _react2.jsx)(ElementType, null), _objectSpread(_objectSpread({}, elementProps), {}, {
81
- ref: ref
82
- }), children);
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)(_index.Box, {
48
- isRow: true,
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
- ref: breadcrumbsRef,
67
+ as: "ol",
73
68
  isRow: true,
74
- sx: {
75
- paddingInlineStart: 'unset'
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), (0, _react2.jsx)(_reactStately.Item, {
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: 'Text',
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: 'IconButton',
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: 'Link',
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 = _interopRequireDefault(require("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 _testAxe = _interopRequireDefault(require("../../utils/testUtils/testAxe"));
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
- // Need to be added to each test file to test accessibility using axe.
26
- (0, _testAxe["default"])(getComponent);
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 { base } from '../Button/Buttons.styles';
13
- var link = {
14
- color: 'active',
15
- fontFamily: 'standard',
16
- fontSize: '15px',
17
- textDecoration: 'none',
18
- outline: 'none',
19
- '&.is-hovered': {
20
- textDecoration: 'underline'
21
- },
22
- '&.is-focused': {
23
- textDecoration: 'underline'
24
- },
25
- '&.is-disabled': {
26
- pointerEvents: 'none'
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
- link: link,
41
- containerLi: containerLi
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 'Button':
46
+ case ELEMENT_TYPE.BUTTON:
40
47
  return Button;
41
- case 'IconButton':
48
+ case ELEMENT_TYPE.ICON_BUTTON:
42
49
  return IconButton;
43
- case 'Text':
50
+ case ELEMENT_TYPE.TEXT:
44
51
  return Text;
45
- case 'Link':
52
+ case ELEMENT_TYPE.LINK:
46
53
  return Link;
47
- case 'Fragment':
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
- return /*#__PURE__*/React.cloneElement(___EmotionJSX(ElementType, null), _objectSpread(_objectSpread({}, elementProps), {}, {
70
- ref: ref
71
- }), children);
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(Box, {
35
- isRow: true,
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
- ref: breadcrumbsRef,
54
+ as: "ol",
60
55
  isRow: true,
61
- sx: {
62
- paddingInlineStart: 'unset'
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), ___EmotionJSX(Item, {
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: 'Text',
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: 'IconButton',
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: 'Link',
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 axeTest from '../../utils/testUtils/testAxe';
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
- // Need to be added to each test file to test accessibility using axe.
23
- axeTest(getComponent);
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'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pingux/astro",
3
- "version": "2.33.0",
3
+ "version": "2.34.0-alpha.1",
4
4
  "description": "React component library for Ping Identity's design system",
5
5
  "repository": {
6
6
  "type": "git",