@pingux/astro 1.1.1-alpha.4 → 1.2.0-alpha.10

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.
Files changed (79) hide show
  1. package/lib/cjs/components/Breadcrumbs/BreadcrumbItem.js +3 -0
  2. package/lib/cjs/components/Breadcrumbs/Breadcrumbs.js +24 -14
  3. package/lib/cjs/components/Breadcrumbs/Breadcrumbs.test.js +9 -0
  4. package/lib/cjs/components/Button/Button.js +5 -2
  5. package/lib/cjs/components/Button/Button.stories.js +71 -17
  6. package/lib/cjs/components/Button/Button.test.js +26 -0
  7. package/lib/cjs/components/CopyText/CopyButton.js +9 -2
  8. package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.js +338 -0
  9. package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.stories.js +295 -0
  10. package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.test.js +287 -0
  11. package/lib/cjs/components/EnvironmentBreadcrumb/index.js +18 -0
  12. package/lib/cjs/components/HelpHint/HelpHint.js +24 -6
  13. package/lib/cjs/components/HelpHint/HelpHint.stories.js +57 -0
  14. package/lib/cjs/components/HelpHint/HelpHint.test.js +80 -0
  15. package/lib/cjs/components/Link/Link.js +15 -4
  16. package/lib/cjs/components/Link/Link.stories.js +10 -0
  17. package/lib/cjs/components/Messages/Messages.reducer.js +2 -1
  18. package/lib/cjs/components/Messages/Messages.stories.js +10 -10
  19. package/lib/cjs/components/Messages/Messages.test.js +15 -1
  20. package/lib/cjs/components/Messages/index.js +21 -2
  21. package/lib/cjs/components/MultivaluesField/MultivaluesField.js +3 -1
  22. package/lib/cjs/components/NumberField/NumberField.js +3 -1
  23. package/lib/cjs/components/NumberField/NumberField.test.js +7 -0
  24. package/lib/cjs/components/OverlayPanel/OverlayPanel.js +2 -16
  25. package/lib/cjs/components/OverlayPanel/OverlayPanel.test.js +44 -0
  26. package/lib/cjs/components/TextField/TextField.stories.js +79 -2
  27. package/lib/cjs/hooks/useAriaLabelWarning/useAriaLabelWarning.js +2 -1
  28. package/lib/cjs/index.js +10 -0
  29. package/lib/cjs/styles/theme.js +1 -0
  30. package/lib/cjs/styles/variants/boxes.js +13 -0
  31. package/lib/cjs/styles/variants/buttons.js +101 -2
  32. package/lib/cjs/styles/variants/index.js +11 -1
  33. package/lib/cjs/styles/variants/links.js +67 -0
  34. package/lib/cjs/styles/variants/text.js +23 -0
  35. package/lib/cjs/styles/variants/variants.js +2 -2
  36. package/lib/cjs/utils/devUtils/constants/animals.js +11 -0
  37. package/lib/cjs/utils/devUtils/constants/firstNames.js +11 -0
  38. package/lib/cjs/utils/devUtils/createMockData.js +96 -0
  39. package/lib/components/Breadcrumbs/BreadcrumbItem.js +4 -1
  40. package/lib/components/Breadcrumbs/Breadcrumbs.js +24 -15
  41. package/lib/components/Breadcrumbs/Breadcrumbs.test.js +9 -0
  42. package/lib/components/Button/Button.js +6 -3
  43. package/lib/components/Button/Button.stories.js +53 -5
  44. package/lib/components/Button/Button.test.js +20 -0
  45. package/lib/components/CopyText/CopyButton.js +7 -2
  46. package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.js +296 -0
  47. package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.stories.js +256 -0
  48. package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.test.js +246 -0
  49. package/lib/components/EnvironmentBreadcrumb/index.js +1 -0
  50. package/lib/components/HelpHint/HelpHint.js +25 -5
  51. package/lib/components/HelpHint/HelpHint.stories.js +34 -0
  52. package/lib/components/HelpHint/HelpHint.test.js +58 -0
  53. package/lib/components/Link/Link.js +16 -5
  54. package/lib/components/Link/Link.stories.js +8 -0
  55. package/lib/components/Messages/Messages.reducer.js +1 -1
  56. package/lib/components/Messages/Messages.stories.js +1 -1
  57. package/lib/components/Messages/Messages.test.js +11 -1
  58. package/lib/components/Messages/index.js +2 -1
  59. package/lib/components/MultivaluesField/MultivaluesField.js +3 -1
  60. package/lib/components/NumberField/NumberField.js +2 -1
  61. package/lib/components/NumberField/NumberField.test.js +7 -0
  62. package/lib/components/OverlayPanel/OverlayPanel.js +3 -16
  63. package/lib/components/OverlayPanel/OverlayPanel.test.js +38 -0
  64. package/lib/components/TextField/TextField.stories.js +72 -0
  65. package/lib/hooks/useAriaLabelWarning/useAriaLabelWarning.js +2 -1
  66. package/lib/index.js +1 -0
  67. package/lib/styles/theme.js +2 -1
  68. package/lib/styles/variants/boxes.js +13 -0
  69. package/lib/styles/variants/buttons.js +101 -2
  70. package/lib/styles/variants/index.js +1 -0
  71. package/lib/styles/variants/links.js +46 -0
  72. package/lib/styles/variants/text.js +23 -0
  73. package/lib/styles/variants/variants.js +2 -2
  74. package/lib/utils/devUtils/constants/animals.js +1 -0
  75. package/lib/utils/devUtils/constants/firstNames.js +1 -0
  76. package/lib/utils/devUtils/createMockData.js +68 -0
  77. package/package.json +2 -2
  78. package/lib/cjs/styles/variants/link.js +0 -27
  79. package/lib/styles/variants/link.js +0 -17
@@ -85,6 +85,9 @@ var BreadcrumbItem = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
85
85
  case 'Text':
86
86
  return _index.Text;
87
87
 
88
+ case 'Fragment':
89
+ return _react.Fragment;
90
+
88
91
  default:
89
92
  return elementType;
90
93
  }
@@ -12,9 +12,13 @@ _Object$defineProperty(exports, "__esModule", {
12
12
 
13
13
  exports["default"] = void 0;
14
14
 
15
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
16
+
15
17
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
16
18
 
17
- var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
19
+ var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
20
+
21
+ var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
18
22
 
19
23
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
20
24
 
@@ -45,7 +49,11 @@ var Breadcrumbs = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
45
49
  icon = props.icon,
46
50
  iconProps = props.iconProps,
47
51
  onAction = props.onAction,
48
- others = (0, _objectWithoutProperties2["default"])(props, ["children", "icon", "iconProps", "onAction"]);
52
+ others = (0, _objectWithoutProperties2["default"])(props, ["children", "icon", "iconProps", "onAction"]); // the following filters undefined values passed as a child
53
+
54
+ var filteredChildren = (0, _isArray["default"])(children) ? (0, _filter["default"])(children).call(children, function (child) {
55
+ return child;
56
+ }) : children;
49
57
 
50
58
  var _useBreadcrumbs = (0, _breadcrumbs.useBreadcrumbs)(props),
51
59
  wrapperProps = _useBreadcrumbs.navProps;
@@ -57,26 +65,28 @@ var Breadcrumbs = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
57
65
  (0, _react.useImperativeHandle)(ref, function () {
58
66
  return breadcrumbsRef.current;
59
67
  });
60
- return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
61
- ref: breadcrumbsRef,
62
- display: "flex",
63
- flexDirection: "row",
64
- alignItems: "center",
65
- sx: {
66
- overflow: 'auto'
67
- }
68
- }, (0, _utils.mergeProps)(wrapperProps, others)), (0, _map["default"])(children).call(children, function (child, idx) {
68
+ var createBreadcrumb = (0, _react.useCallback)(function (child, idx) {
69
+ var isCurrentItem = (0, _isArray["default"])(filteredChildren) && filteredChildren.length > 1 ? idx === children.length - 1 : true;
69
70
  return (0, _react2.jsx)(_react.Fragment, {
70
71
  key: "fragment-".concat(child.key)
71
72
  }, (0, _react2.jsx)(_BreadcrumbItem["default"], (0, _extends2["default"])({
72
73
  "data-id": child['data-id'],
73
- isCurrent: idx === children.length - 1,
74
+ isCurrent: isCurrentItem,
74
75
  onAction: onAction,
75
76
  actionKey: child.key
76
- }, child.props), child.props.children), icon && idx !== children.length - 1 && (0, _react2.jsx)(_index.Icon, (0, _extends2["default"])({
77
+ }, child.props), child.props.children), icon && !isCurrentItem && (0, _react2.jsx)(_index.Icon, (0, _extends2["default"])({
77
78
  icon: icon
78
79
  }, iconProps)));
79
- }));
80
+ }, [children.length, filteredChildren, icon, iconProps, onAction]);
81
+ return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
82
+ ref: breadcrumbsRef,
83
+ display: "flex",
84
+ flexDirection: "row",
85
+ alignItems: "center",
86
+ sx: {
87
+ overflow: 'auto'
88
+ }
89
+ }, (0, _utils.mergeProps)(wrapperProps, others)), (0, _isArray["default"])(filteredChildren) ? (0, _map["default"])(filteredChildren).call(filteredChildren, createBreadcrumb) : createBreadcrumb(children));
80
90
  });
81
91
  Breadcrumbs.propTypes = {
82
92
  /** The icon to render in between each node. */
@@ -109,4 +109,13 @@ test('Item accepts a data-id and the data-id can be found in the DOM', function
109
109
 
110
110
  expect(item).toBeInTheDocument();
111
111
  expect(item).toHaveAttribute('data-id', testItemsArr[0]);
112
+ });
113
+ test('will render correctly with single child item', function () {
114
+ (0, _testWrapper.render)((0, _react2.jsx)(_Breadcrumbs["default"], (0, _utils.mergeProps)(defaultProps), (0, _react2.jsx)(_collections.Item, {
115
+ key: testItemsArr[0],
116
+ "data-id": testItemsArr[0],
117
+ isCurrent: true
118
+ }, testItemsArr[0])));
119
+ expect(_testWrapper.screen.getByTestId(testId)).toBeInTheDocument();
120
+ expect(_testWrapper.screen.getByText(testItemsArr[0])).toBeInTheDocument();
112
121
  });
@@ -71,7 +71,8 @@ var Button = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
71
71
  onPressChange = props.onPressChange,
72
72
  onPressUp = props.onPressUp,
73
73
  children = props.children,
74
- others = (0, _objectWithoutProperties2["default"])(props, ["className", "isDisabled", "isLoading", "onHoverStart", "onHoverChange", "onHoverEnd", "onPress", "onPressStart", "onPressEnd", "onPressChange", "onPressUp", "children"]);
74
+ variant = props.variant,
75
+ others = (0, _objectWithoutProperties2["default"])(props, ["className", "isDisabled", "isLoading", "onHoverStart", "onHoverChange", "onHoverEnd", "onPress", "onPressStart", "onPressEnd", "onPressChange", "onPressUp", "children", "variant"]);
75
76
  var buttonRef = (0, _react.useRef)();
76
77
  (0, _hooks.usePropWarning)(props, 'disabled', 'isDisabled');
77
78
  /* istanbul ignore next */
@@ -103,6 +104,7 @@ var Button = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
103
104
  classNames = _useStatusClasses.classNames;
104
105
 
105
106
  var ariaLabel = props['aria-label'];
107
+ (0, _hooks.useAriaLabelWarning)('Button', ariaLabel, variant === 'filter');
106
108
  return (0, _react2.jsx)(_themeUi.Button, (0, _extends2["default"])({
107
109
  "aria-label": ariaLabel,
108
110
  ref: buttonRef,
@@ -113,7 +115,8 @@ var Button = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
113
115
  display: 'flex',
114
116
  justifyContent: 'center',
115
117
  alignItems: 'center'
116
- }
118
+ },
119
+ variant: variant
117
120
  }, others, (0, _utils.mergeProps)(hoverProps, focusProps, buttonProps)), isLoading ? (0, _react2.jsx)("span", {
118
121
  style: {
119
122
  visibility: 'hidden'
@@ -8,22 +8,24 @@ _Object$defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
10
 
11
- exports.InlineButton = exports.TextButton = exports.TextIconButton = exports.Disabled = exports.Default = exports["default"] = void 0;
11
+ exports.FilterButton = exports.ColorBlockButton = exports.InlineButton = exports.TextButton = exports.TextIconButton = exports.Disabled = exports.Default = exports["default"] = void 0;
12
12
 
13
- var _react = _interopRequireDefault(require("react"));
13
+ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
14
14
 
15
- var _AddCircleIcon = _interopRequireDefault(require("mdi-react/AddCircleIcon"));
15
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
16
16
 
17
- var _Box = _interopRequireDefault(require("../Box"));
17
+ var _react = _interopRequireDefault(require("react"));
18
18
 
19
- var _ = _interopRequireDefault(require("."));
19
+ var _AddCircleIcon = _interopRequireDefault(require("mdi-react/AddCircleIcon"));
20
20
 
21
- var _Icon = _interopRequireDefault(require("../Icon"));
21
+ var _CreateIcon = _interopRequireDefault(require("mdi-react/CreateIcon"));
22
22
 
23
- var _Text = _interopRequireDefault(require("../Text"));
23
+ var _FilterIcon = _interopRequireDefault(require("mdi-react/FilterIcon"));
24
24
 
25
25
  var _variants = require("../../utils/devUtils/constants/variants");
26
26
 
27
+ var _index = require("../../index");
28
+
27
29
  var _react2 = require("@emotion/react");
28
30
 
29
31
  // removing the iconButton variants from this story.
@@ -35,7 +37,7 @@ delete variants.INVERTED; // add designer approved variants for devs to use here
35
37
  var variantOptions = ['critical', 'danger', 'default', 'inline', 'link', 'primary', 'success', 'text'];
36
38
  var _default = {
37
39
  title: 'Button',
38
- component: _["default"],
40
+ component: _index.Button,
39
41
  argTypes: {
40
42
  variant: {
41
43
  control: {
@@ -56,18 +58,25 @@ var _default = {
56
58
  type: 'text'
57
59
  }
58
60
  }
61
+ },
62
+ parameters: {
63
+ docs: {
64
+ source: {
65
+ type: 'code'
66
+ }
67
+ }
59
68
  }
60
69
  };
61
70
  exports["default"] = _default;
62
71
 
63
72
  var Default = function Default(args) {
64
- return (0, _react2.jsx)(_["default"], args);
73
+ return (0, _react2.jsx)(_index.Button, args);
65
74
  };
66
75
 
67
76
  exports.Default = Default;
68
77
 
69
78
  var Disabled = function Disabled() {
70
- return (0, _react2.jsx)(_["default"], {
79
+ return (0, _react2.jsx)(_index.Button, {
71
80
  isDisabled: true
72
81
  }, "Button Text");
73
82
  };
@@ -75,12 +84,12 @@ var Disabled = function Disabled() {
75
84
  exports.Disabled = Disabled;
76
85
 
77
86
  var TextIconButton = function TextIconButton() {
78
- return (0, _react2.jsx)(_["default"], {
87
+ return (0, _react2.jsx)(_index.Button, {
79
88
  mb: "sm"
80
- }, (0, _react2.jsx)(_Box["default"], {
89
+ }, (0, _react2.jsx)(_index.Box, {
81
90
  isRow: true,
82
91
  alignItems: "center"
83
- }, (0, _react2.jsx)(_Icon["default"], {
92
+ }, (0, _react2.jsx)(_index.Icon, {
84
93
  icon: _AddCircleIcon["default"],
85
94
  mr: "sm",
86
95
  color: "active",
@@ -91,11 +100,11 @@ var TextIconButton = function TextIconButton() {
91
100
  exports.TextIconButton = TextIconButton;
92
101
 
93
102
  var TextButton = function TextButton() {
94
- return (0, _react2.jsx)(_["default"], {
103
+ return (0, _react2.jsx)(_index.Button, {
95
104
  mb: "sm",
96
105
  variant: "text",
97
106
  "aria-label": "Add option"
98
- }, (0, _react2.jsx)(_Text["default"], {
107
+ }, (0, _react2.jsx)(_index.Text, {
99
108
  variant: "label",
100
109
  color: "active"
101
110
  }, " + Add Option"));
@@ -104,10 +113,55 @@ var TextButton = function TextButton() {
104
113
  exports.TextButton = TextButton;
105
114
 
106
115
  var InlineButton = function InlineButton() {
107
- return (0, _react2.jsx)(_["default"], {
116
+ return (0, _react2.jsx)(_index.Button, {
108
117
  mb: "sm",
109
118
  variant: "inline"
110
119
  }, "Inline");
111
120
  };
112
121
 
113
- exports.InlineButton = InlineButton;
122
+ exports.InlineButton = InlineButton;
123
+
124
+ var ColorBlockButton = function ColorBlockButton(args) {
125
+ // Change `isConfigured` property in storybook controls
126
+ var isConfigured = args.isConfigured,
127
+ props = (0, _objectWithoutProperties2["default"])(args, ["isConfigured"]);
128
+ return (0, _react2.jsx)(_index.Button, (0, _extends2["default"])({}, props, {
129
+ variant: "colorBlock",
130
+ className: isConfigured ? 'is-configured' : ''
131
+ }), (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Text, {
132
+ variant: "buttonTitle"
133
+ }, "Title"), (0, _react2.jsx)(_index.Text, {
134
+ variant: "buttonSubtitle"
135
+ }, "Info")), (0, _react2.jsx)(_index.Icon, {
136
+ icon: _CreateIcon["default"]
137
+ }));
138
+ };
139
+
140
+ exports.ColorBlockButton = ColorBlockButton;
141
+ ColorBlockButton.story = {
142
+ argTypes: {
143
+ isConfigured: {
144
+ control: {
145
+ type: 'boolean'
146
+ },
147
+ defaultValue: false
148
+ }
149
+ }
150
+ };
151
+
152
+ var FilterButton = function FilterButton() {
153
+ return (0, _react2.jsx)(_index.Box, {
154
+ p: "xx",
155
+ isRow: true,
156
+ gap: "md"
157
+ }, (0, _react2.jsx)(_index.SearchField, {
158
+ "aria-label": "search items"
159
+ }), (0, _react2.jsx)(_index.Button, {
160
+ variant: "filter",
161
+ "aria-label": "filter button"
162
+ }, (0, _react2.jsx)(_index.Icon, {
163
+ icon: _FilterIcon["default"]
164
+ })));
165
+ };
166
+
167
+ exports.FilterButton = FilterButton;
@@ -122,4 +122,30 @@ test('button renders children when not loading', function () {
122
122
  expect(childWrapper).toBeInTheDocument();
123
123
  expect(childWrapper).toBeVisible();
124
124
  expect(_testWrapper.screen.queryByRole('progressbar')).not.toBeInTheDocument();
125
+ });
126
+ test('color block button renders in default state', function () {
127
+ getComponent({
128
+ variant: 'colorBlock'
129
+ });
130
+
131
+ var button = _testWrapper.screen.getByRole('button');
132
+
133
+ expect(button).toBeInTheDocument();
134
+ expect(button).not.toHaveClass('is-configured');
135
+
136
+ _userEvent["default"].tab();
137
+
138
+ expect(button).toHaveClass('is-focused');
139
+ expect(button).toHaveFocus();
140
+ });
141
+ test('color block button renders in configured state', function () {
142
+ getComponent({
143
+ variant: 'colorBlock',
144
+ className: 'is-configured'
145
+ });
146
+
147
+ var button = _testWrapper.screen.getByRole('button');
148
+
149
+ expect(button).toBeInTheDocument();
150
+ expect(button).toHaveClass('is-configured');
125
151
  });
@@ -18,6 +18,10 @@ var _react = _interopRequireWildcard(require("react"));
18
18
 
19
19
  var _ContentCopyIcon = _interopRequireDefault(require("mdi-react/ContentCopyIcon"));
20
20
 
21
+ var _lodash = require("lodash");
22
+
23
+ var _propTypes = _interopRequireDefault(require("prop-types"));
24
+
21
25
  var _Icon = _interopRequireDefault(require("../Icon"));
22
26
 
23
27
  var _IconButton = _interopRequireDefault(require("../IconButton"));
@@ -29,10 +33,13 @@ var CopyButton = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
29
33
  ref: ref,
30
34
  "aria-label": "copy",
31
35
  variant: "buttons.copy"
32
- }, props), (0, _react2.jsx)(_Icon["default"], {
36
+ }, (0, _lodash.omit)(props, 'iconProps')), (0, _react2.jsx)(_Icon["default"], (0, _extends2["default"])({
33
37
  icon: _ContentCopyIcon["default"],
34
38
  size: 15
35
- }));
39
+ }, props === null || props === void 0 ? void 0 : props.iconProps)));
36
40
  });
41
+ CopyButton.propTypes = {
42
+ iconProps: _propTypes["default"].shape({})
43
+ };
37
44
  var _default = CopyButton;
38
45
  exports["default"] = _default;
@@ -0,0 +1,338 @@
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 _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor"));
22
+
23
+ var _getOwnPropertySymbols = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols"));
24
+
25
+ var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
26
+
27
+ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
28
+
29
+ var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
30
+
31
+ var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
32
+
33
+ var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
34
+
35
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
36
+
37
+ var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
38
+
39
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
40
+
41
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
42
+
43
+ var _react = _interopRequireWildcard(require("react"));
44
+
45
+ var _i18n = require("@react-aria/i18n");
46
+
47
+ var _ChevronRightIcon = _interopRequireDefault(require("mdi-react/ChevronRightIcon"));
48
+
49
+ var _HomeIcon = _interopRequireDefault(require("mdi-react/HomeIcon"));
50
+
51
+ var _propTypes = _interopRequireDefault(require("prop-types"));
52
+
53
+ var _overlays = require("@react-stately/overlays");
54
+
55
+ var _overlays2 = require("@react-aria/overlays");
56
+
57
+ var _ArrowDropUpIcon = _interopRequireDefault(require("mdi-react/ArrowDropUpIcon"));
58
+
59
+ var _ArrowDropDownIcon = _interopRequireDefault(require("mdi-react/ArrowDropDownIcon"));
60
+
61
+ var _focus = require("@react-aria/focus");
62
+
63
+ var _list = require("@react-stately/list");
64
+
65
+ var _ListBox = _interopRequireDefault(require("../ListBox"));
66
+
67
+ var _isIterable = require("../../utils/devUtils/props/isIterable");
68
+
69
+ var _index = require("../../index");
70
+
71
+ var _react2 = require("@emotion/react");
72
+
73
+ 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; }
74
+
75
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context2; (0, _forEach["default"])(_context2 = ownKeys(Object(source), true)).call(_context2, function (key) { (0, _defineProperty3["default"])(target, key, source[key]); }); } else if (_getOwnPropertyDescriptors["default"]) { (0, _defineProperties["default"])(target, (0, _getOwnPropertyDescriptors["default"])(source)); } else { var _context3; (0, _forEach["default"])(_context3 = ownKeys(Object(source))).call(_context3, function (key) { (0, _defineProperty2["default"])(target, key, (0, _getOwnPropertyDescriptor["default"])(source, key)); }); } } return target; }
76
+
77
+ /** The Environment Picker with Search and Sections support */
78
+ var EnvironmentBreadcrumb = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
79
+ var children = props.children,
80
+ imperativeDisabledKeys = props.disabledKeys,
81
+ emptySearchText = props.emptySearchText,
82
+ items = props.items,
83
+ imperativeItemsFilter = props.itemsFilter,
84
+ onNamePress = props.onNamePress,
85
+ imperativeOnPopoverClose = props.onPopoverClose,
86
+ imperativeOnPopoverOpen = props.onPopoverOpen,
87
+ onSelectionChange = props.onSelectionChange,
88
+ name = props.name,
89
+ searchProps = props.searchProps,
90
+ selectedItem = props.selectedItem,
91
+ others = (0, _objectWithoutProperties2["default"])(props, ["children", "disabledKeys", "emptySearchText", "items", "itemsFilter", "onNamePress", "onPopoverClose", "onPopoverOpen", "onSelectionChange", "name", "searchProps", "selectedItem"]);
92
+
93
+ var _useState = (0, _react.useState)(''),
94
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
95
+ searchValue = _useState2[0],
96
+ setSearchValue = _useState2[1];
97
+
98
+ var breadcrumbsRef = (0, _react.useRef)();
99
+
100
+ var overlayRef = _react["default"].useRef();
101
+
102
+ var triggerRef = _react["default"].useRef();
103
+
104
+ var scrollBoxRef = _react["default"].useRef();
105
+ /* istanbul ignore next */
106
+
107
+
108
+ (0, _react.useImperativeHandle)(ref, function () {
109
+ return breadcrumbsRef.current;
110
+ });
111
+
112
+ var _useFilter = (0, _i18n.useFilter)({
113
+ sensitivity: 'base'
114
+ }),
115
+ contains = _useFilter.contains;
116
+
117
+ var filterNodesWithChildren = function filterNodesWithChildren(iterableNode) {
118
+ var nodeArr = (0, _from["default"])(iterableNode); // with this function we are filtering child items if they have sections
119
+ // we can't filter items because if it would be a section - we can't change childNodes
120
+ // eslint-disable-next-line array-callback-return,consistent-return
121
+
122
+ var filteredSections = (0, _map["default"])(nodeArr).call(nodeArr, function f(nodeItem) {
123
+ if ((nodeItem === null || nodeItem === void 0 ? void 0 : nodeItem.type) === 'item') {
124
+ var _nodeItem$value;
125
+
126
+ return contains(nodeItem === null || nodeItem === void 0 ? void 0 : (_nodeItem$value = nodeItem.value) === null || _nodeItem$value === void 0 ? void 0 : _nodeItem$value.name, searchValue) ? nodeItem : null;
127
+ }
128
+
129
+ if ((nodeItem === null || nodeItem === void 0 ? void 0 : nodeItem.type) === 'section') {
130
+ var _context;
131
+
132
+ return _objectSpread(_objectSpread({}, nodeItem), {}, {
133
+ childNodes: (0, _filter["default"])(_context = (0, _from["default"])(nodeItem.childNodes)).call(_context, f)
134
+ });
135
+ }
136
+ }); // we are filtering null items here since we were not able to filter them in previous function
137
+
138
+ return (0, _filter["default"])(filteredSections).call(filteredSections, function (item) {
139
+ return item;
140
+ });
141
+ };
142
+
143
+ var popoverState = (0, _overlays.useOverlayTriggerState)({});
144
+ var handlePopoverClose = (0, _react.useCallback)(function () {
145
+ if (imperativeOnPopoverClose) {
146
+ imperativeOnPopoverClose();
147
+ }
148
+
149
+ setSearchValue('');
150
+ popoverState.close();
151
+ }, [imperativeOnPopoverClose, popoverState]);
152
+ var handleSelectionChange = (0, _react.useCallback)(function (selectedItemSet) {
153
+ var _selectedItemSet = (0, _slicedToArray2["default"])(selectedItemSet, 1),
154
+ selectedItemKey = _selectedItemSet[0];
155
+
156
+ onSelectionChange(selectedItemKey);
157
+ handlePopoverClose();
158
+ }, [handlePopoverClose, onSelectionChange]);
159
+ var listBoxProps = {
160
+ children: children,
161
+ disabledKeys: imperativeDisabledKeys,
162
+ items: items,
163
+ filter: imperativeItemsFilter || filterNodesWithChildren,
164
+ onSelectionChange: handleSelectionChange,
165
+ selectedKeys: [],
166
+ selectionMode: 'single',
167
+ disallowEmptySelection: false
168
+ };
169
+ var listBoxState = (0, _list.useListState)(listBoxProps); // this function is recursively going through the children to see
170
+ // whether there are some items so that means that the array isn't empty
171
+
172
+ var checkIfListEmpty = (0, _react.useCallback)(function () {
173
+ // from the beginning we are assuming that the list is empty
174
+ // variable is not isListEmpty because checks below if(isListHasItems) is clearer
175
+ // to read than if(!isListEmpty) IMO
176
+ var isListHasItems = false; // eslint-disable-next-line consistent-return
177
+
178
+ (function f(listState) {
179
+ var _listState$collection;
180
+
181
+ // if the list has items - we don't need to go deeper into the recursion
182
+ if (isListHasItems) {
183
+ return;
184
+ } // here we are checking where are listItems array is stored
185
+
186
+
187
+ var listItemsArr = (listState === null || listState === void 0 ? void 0 : (_listState$collection = listState.collection) === null || _listState$collection === void 0 ? void 0 : _listState$collection.iterable) || (listState === null || listState === void 0 ? void 0 : listState.childNodes);
188
+
189
+ if ((listItemsArr === null || listItemsArr === void 0 ? void 0 : listItemsArr.length) > 0) {
190
+ // if there are a few listItems we are checking their types (can be sections) - if we have
191
+ // a few of 'items' type - we know that the list is not empty
192
+ if (listItemsArr[0].type === 'item') {
193
+ isListHasItems = true;
194
+ } else {
195
+ // this path will be taken if there are a few 'sections'
196
+ // - we need to go check them recursively
197
+ (0, _forEach["default"])(listItemsArr).call(listItemsArr, function (item) {
198
+ return f(item);
199
+ });
200
+ }
201
+ }
202
+ })(listBoxState);
203
+
204
+ return !isListHasItems;
205
+ }, [listBoxState]);
206
+
207
+ var _useOverlayTrigger = (0, _overlays2.useOverlayTrigger)({
208
+ type: 'listbox'
209
+ }, popoverState, triggerRef),
210
+ triggerProps = _useOverlayTrigger.triggerProps,
211
+ overlayProps = _useOverlayTrigger.overlayProps;
212
+
213
+ var handlePopoverOpen = function handlePopoverOpen() {
214
+ if (imperativeOnPopoverOpen) {
215
+ imperativeOnPopoverOpen();
216
+ }
217
+
218
+ popoverState.open();
219
+ };
220
+
221
+ var _useOverlayPosition = (0, _overlays2.useOverlayPosition)({
222
+ isOpen: popoverState.isOpen,
223
+ offset: 6,
224
+ onClose: handlePopoverClose,
225
+ overlayRef: overlayRef,
226
+ scrollRef: scrollBoxRef,
227
+ shouldUpdatePosition: true,
228
+ targetRef: triggerRef
229
+ }),
230
+ positionProps = _useOverlayPosition.overlayProps;
231
+
232
+ var EmptyListState = (0, _react2.jsx)(_index.Text, {
233
+ py: 10,
234
+ px: 15
235
+ }, emptySearchText);
236
+ var ItemsSelect = (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_index.Button, (0, _extends2["default"])({}, triggerProps, {
237
+ onPress: handlePopoverOpen,
238
+ ref: triggerRef,
239
+ variant: "environmentBreadcrumb.current",
240
+ "aria-label": "".concat(typeof selectedItem === 'string' ? selectedItem : 'Selected Item')
241
+ }), selectedItem, (0, _react2.jsx)(_index.Icon, {
242
+ icon: popoverState.isOpen ? _ArrowDropUpIcon["default"] : _ArrowDropDownIcon["default"]
243
+ })), (0, _react2.jsx)(_index.PopoverContainer, (0, _extends2["default"])({}, overlayProps, positionProps, {
244
+ ref: overlayRef,
245
+ isOpen: popoverState.isOpen,
246
+ scrollRef: scrollBoxRef,
247
+ onClose: handlePopoverClose,
248
+ hasNoArrow: true,
249
+ isDismissable: true,
250
+ p: 10
251
+ }), (0, _react2.jsx)(_focus.FocusScope, {
252
+ restoreFocus: true,
253
+ autoFocus: true,
254
+ contain: true
255
+ }, (0, _react2.jsx)(_index.ScrollBox, {
256
+ ref: scrollBoxRef
257
+ }, (0, _react2.jsx)(_index.SearchField, (0, _extends2["default"])({
258
+ placeholder: "Search",
259
+ "aria-label": "Items Search",
260
+ "data-testid": "Environment-Breadcrumb-Search",
261
+ containerProps: {
262
+ // this one is needed to cancel default scrollBox items behavior
263
+ sx: {
264
+ overflow: 'visible'
265
+ }
266
+ },
267
+ onChange: setSearchValue
268
+ }, searchProps)), checkIfListEmpty() ? EmptyListState : (0, _react2.jsx)(_ListBox["default"], {
269
+ state: listBoxState,
270
+ "aria-label": "Items List"
271
+ })))));
272
+ var handleOnAction = (0, _react.useCallback)(function (actionKey) {
273
+ if (actionKey === 'name' && onNamePress) {
274
+ onNamePress();
275
+ }
276
+ }, [onNamePress]);
277
+ return (0, _react2.jsx)(_index.Breadcrumbs, (0, _extends2["default"])({
278
+ icon: _ChevronRightIcon["default"],
279
+ ref: breadcrumbsRef,
280
+ onAction: handleOnAction,
281
+ iconProps: {
282
+ color: 'neutral.70',
283
+ mx: 10
284
+ }
285
+ }, others), (0, _react2.jsx)(_index.Item, {
286
+ key: "name",
287
+ variant: "environmentBreadcrumb.current",
288
+ "data-testid": "name",
289
+ "aria-label": name
290
+ }, (0, _react2.jsx)(_index.Icon, {
291
+ icon: _HomeIcon["default"],
292
+ mr: 7
293
+ }), name), selectedItem && (0, _react2.jsx)(_index.Item, {
294
+ key: "itemsSelect",
295
+ elementType: "Fragment"
296
+ }, ItemsSelect));
297
+ });
298
+ var _default = EnvironmentBreadcrumb;
299
+ exports["default"] = _default;
300
+ EnvironmentBreadcrumb.propTypes = {
301
+ /** Callback function that fires when the selected key changes. */
302
+ onSelectionChange: _propTypes["default"].func,
303
+
304
+ /** Current environment */
305
+ selectedItem: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].node]),
306
+
307
+ /** Displayed name */
308
+ name: _propTypes["default"].string,
309
+
310
+ /** Callback function that fires when name pressed */
311
+ onNamePress: _propTypes["default"].func,
312
+
313
+ /** The list of environments. */
314
+ items: _isIterable.isIterableProp,
315
+
316
+ /** Filter function to generate a filtered list of nodes.
317
+ * (nodes: Iterable<Node>) => Iterable<Node>
318
+ * */
319
+ itemsFilter: _propTypes["default"].func,
320
+
321
+ /** Callback function that fires when the dropdown is opened. */
322
+ onPopoverOpen: _propTypes["default"].func,
323
+
324
+ /** Callback function that fires when the dropdown is closed. */
325
+ onPopoverClose: _propTypes["default"].func,
326
+
327
+ /** Props object that is spread directly into the SearchField element. */
328
+ searchProps: _propTypes["default"].shape({}),
329
+
330
+ /** Array of keys to disable within the options list. */
331
+ disabledKeys: _propTypes["default"].arrayOf(_propTypes["default"].string),
332
+
333
+ /** Text that will be shown if no search results found. */
334
+ emptySearchText: _propTypes["default"].string
335
+ };
336
+ EnvironmentBreadcrumb.defaultProps = {
337
+ emptySearchText: 'No Search Result'
338
+ };