@pingux/astro 1.10.1-alpha.1 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/lib/cjs/components/{MultiselectFilter/MultiselectFilter.js → CollapsiblePanel/CollapsiblePanel.js} +13 -13
  3. package/lib/cjs/components/{MultiselectFilter/MultiselectFilter.stories.js → CollapsiblePanel/CollapsiblePanel.stories.js} +9 -9
  4. package/lib/cjs/components/{MultiselectFilter/MultiselectFilter.test.js → CollapsiblePanel/CollapsiblePanel.test.js} +8 -8
  5. package/lib/cjs/components/{MultiselectFilter → CollapsiblePanel}/index.js +2 -2
  6. package/lib/cjs/components/{MultiselectListContainer/MultiselectBadge.js → CollapsiblePanelContainer/CollapsiblePanelBadge.js} +6 -6
  7. package/lib/cjs/components/{MultiselectListContainer/MultiselectBadge.test.js → CollapsiblePanelContainer/CollapsiblePanelBadge.test.js} +8 -8
  8. package/lib/cjs/components/{MultiselectListContainer/MultiselectListContainer.js → CollapsiblePanelContainer/CollapsiblePanelContainer.js} +12 -12
  9. package/lib/cjs/components/{MultiselectListContainer/MultiselectListContainer.test.js → CollapsiblePanelContainer/CollapsiblePanelContainer.test.js} +23 -23
  10. package/lib/cjs/components/{MultiselectListContainer → CollapsiblePanelContainer}/index.js +2 -2
  11. package/lib/cjs/components/{MultiselectFilterItem/MultiselectFilterItem.js → CollapsiblePanelItem/CollapsiblePanelItem.js} +7 -7
  12. package/lib/cjs/components/{MultiselectFilterItem/MultiselectFilterItem.test.js → CollapsiblePanelItem/CollapsiblePanelItem.test.js} +7 -7
  13. package/lib/cjs/components/{MultiselectFilterItem → CollapsiblePanelItem}/index.js +2 -2
  14. package/lib/cjs/components/MultivaluesField/MultivaluesField.js +36 -20
  15. package/lib/cjs/components/MultivaluesField/MultivaluesField.stories.js +16 -2
  16. package/lib/cjs/components/MultivaluesField/MultivaluesField.test.js +22 -1
  17. package/lib/cjs/index.js +36 -36
  18. package/lib/cjs/recipes/{MultiselectListContainer.stories.js → CollapsiblePanel.stories.js} +3 -3
  19. package/lib/cjs/styles/variants/boxes.js +23 -0
  20. package/lib/cjs/styles/variants/buttons.js +2 -2
  21. package/lib/cjs/styles/variants/{multiselectListContainer.js → collapsiblePanel.js} +10 -10
  22. package/lib/cjs/styles/variants/text.js +4 -4
  23. package/lib/cjs/styles/variants/variants.js +2 -2
  24. package/lib/components/{MultiselectFilter/MultiselectFilter.js → CollapsiblePanel/CollapsiblePanel.js} +14 -14
  25. package/lib/components/{MultiselectFilter/MultiselectFilter.stories.js → CollapsiblePanel/CollapsiblePanel.stories.js} +8 -8
  26. package/lib/components/{MultiselectFilter/MultiselectFilter.test.js → CollapsiblePanel/CollapsiblePanel.test.js} +8 -8
  27. package/lib/components/CollapsiblePanel/index.js +1 -0
  28. package/lib/components/{MultiselectListContainer/MultiselectBadge.js → CollapsiblePanelContainer/CollapsiblePanelBadge.js} +6 -6
  29. package/lib/components/{MultiselectListContainer/MultiselectBadge.test.js → CollapsiblePanelContainer/CollapsiblePanelBadge.test.js} +8 -8
  30. package/lib/components/{MultiselectListContainer/MultiselectListContainer.js → CollapsiblePanelContainer/CollapsiblePanelContainer.js} +12 -12
  31. package/lib/components/{MultiselectListContainer/MultiselectListContainer.test.js → CollapsiblePanelContainer/CollapsiblePanelContainer.test.js} +23 -23
  32. package/lib/components/CollapsiblePanelContainer/index.js +1 -0
  33. package/lib/components/{MultiselectFilterItem/MultiselectFilterItem.js → CollapsiblePanelItem/CollapsiblePanelItem.js} +7 -7
  34. package/lib/components/{MultiselectFilterItem/MultiselectFilterItem.test.js → CollapsiblePanelItem/CollapsiblePanelItem.test.js} +7 -7
  35. package/lib/components/CollapsiblePanelItem/index.js +1 -0
  36. package/lib/components/MultivaluesField/MultivaluesField.js +37 -20
  37. package/lib/components/MultivaluesField/MultivaluesField.stories.js +11 -0
  38. package/lib/components/MultivaluesField/MultivaluesField.test.js +16 -1
  39. package/lib/index.js +6 -6
  40. package/lib/recipes/{MultiselectListContainer.stories.js → CollapsiblePanel.stories.js} +4 -4
  41. package/lib/styles/variants/boxes.js +23 -0
  42. package/lib/styles/variants/buttons.js +2 -2
  43. package/lib/styles/variants/{multiselectListContainer.js → collapsiblePanel.js} +10 -10
  44. package/lib/styles/variants/text.js +4 -4
  45. package/lib/styles/variants/variants.js +2 -2
  46. package/package.json +1 -1
  47. package/lib/components/MultiselectFilter/index.js +0 -1
  48. package/lib/components/MultiselectFilterItem/index.js +0 -1
  49. package/lib/components/MultiselectListContainer/index.js +0 -1
@@ -5,12 +5,12 @@ import React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import Chip from '../Chip';
7
7
  /**
8
- * The MultiselectBadge serves as a badge to display selected count.
8
+ * The CollapsiblePanelBadge serves as a badge to display selected count.
9
9
  */
10
10
 
11
11
  import { jsx as ___EmotionJSX } from "@emotion/react";
12
12
 
13
- var MultiselectBadge = function MultiselectBadge(props) {
13
+ var CollapsiblePanelBadge = function CollapsiblePanelBadge(props) {
14
14
  var selectedFilterCount = props.selectedFilterCount,
15
15
  others = _objectWithoutProperties(props, _excluded);
16
16
 
@@ -19,14 +19,14 @@ var MultiselectBadge = function MultiselectBadge(props) {
19
19
  bg: "neutral.90",
20
20
  label: selectedFilterCount.toString(),
21
21
  textColor: "neutral.30",
22
- variant: "multiselectListContainer.multiselectListBadge",
22
+ variant: "collapsiblePanel.collapsiblePanelBadge",
23
23
  isUppercase: true
24
24
  }, others));
25
25
  };
26
26
 
27
- MultiselectBadge.propTypes = {
27
+ CollapsiblePanelBadge.propTypes = {
28
28
  selectedFilterCount: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
29
29
  margin: PropTypes.string
30
30
  };
31
- MultiselectBadge.displayName = 'MultiselectBadge';
32
- export default MultiselectBadge;
31
+ CollapsiblePanelBadge.displayName = 'CollapsiblePanelBadge';
32
+ export default CollapsiblePanelBadge;
@@ -2,9 +2,9 @@ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
2
2
  import React from 'react';
3
3
  import axeTest from '../../utils/testUtils/testAxe';
4
4
  import { render, screen } from '../../utils/testUtils/testWrapper';
5
- import MultiselectBadge from './MultiselectBadge';
5
+ import CollapsiblePanelBadge from './CollapsiblePanelBadge';
6
6
  import { jsx as ___EmotionJSX } from "@emotion/react";
7
- var testId = 'test-multiselectBadge';
7
+ var testId = 'test-collapsiblePanelBadge';
8
8
  var defaultProps = {
9
9
  'data-testid': testId,
10
10
  selectedFilterCount: 9
@@ -12,7 +12,7 @@ var defaultProps = {
12
12
 
13
13
  var getComponent = function getComponent() {
14
14
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
15
- return render(___EmotionJSX(MultiselectBadge, _extends({}, defaultProps, props)));
15
+ return render(___EmotionJSX(CollapsiblePanelBadge, _extends({}, defaultProps, props)));
16
16
  };
17
17
 
18
18
  afterEach(function () {
@@ -20,15 +20,15 @@ afterEach(function () {
20
20
  }); // Need to be added to each test file to test accessibility using axe.
21
21
 
22
22
  axeTest(getComponent);
23
- test('default multiselectBadge', function () {
23
+ test('default CollapsiblePanelBadge', function () {
24
24
  getComponent();
25
- var multiselectBadge = screen.getByTestId(testId);
26
- expect(multiselectBadge).toBeInTheDocument();
25
+ var collapsiblePanelBadge = screen.getByTestId(testId);
26
+ expect(collapsiblePanelBadge).toBeInTheDocument();
27
27
  });
28
28
  test('custom classname can be passed', function () {
29
29
  getComponent({
30
30
  className: 'testing-class'
31
31
  });
32
- var multiselectBadge = screen.getByTestId(testId);
33
- expect(multiselectBadge).toHaveClass('testing-class');
32
+ var collapsiblePanelBadge = screen.getByTestId(testId);
33
+ expect(collapsiblePanelBadge).toHaveClass('testing-class');
34
34
  });
@@ -20,16 +20,16 @@ import PropTypes from 'prop-types';
20
20
  import ChevronRightIcon from 'mdi-react/ChevronRightIcon';
21
21
  import ChevronLeftIcon from 'mdi-react/ChevronLeftIcon';
22
22
  import { useOverlayTriggerState } from '@react-stately/overlays';
23
- import MultiselectBadge from './MultiselectBadge';
23
+ import CollapsiblePanelBadge from './CollapsiblePanelBadge';
24
24
  import { Icon, IconButton, Box } from '../../index';
25
25
  import { useStatusClasses } from '../../hooks';
26
26
  /**
27
- * The MultiselectListContainer serves as a wrapper around a list and its associated trigger,
27
+ * The CollapsiblePanelContainer serves as a wrapper around a list and its associated trigger,
28
28
  * linking the list's open state with the trigger's press state and providing necessary context.
29
29
  */
30
30
 
31
31
  import { jsx as ___EmotionJSX } from "@emotion/react";
32
- var MultiselectListContainer = /*#__PURE__*/forwardRef(function (props, ref) {
32
+ var CollapsiblePanelContainer = /*#__PURE__*/forwardRef(function (props, ref) {
33
33
  var selectedFilterCount = props.selectedFilterCount,
34
34
  className = props.className,
35
35
  children = props.children,
@@ -71,28 +71,28 @@ var MultiselectListContainer = /*#__PURE__*/forwardRef(function (props, ref) {
71
71
  className: classNames,
72
72
  onKeyUp: handleClose,
73
73
  ref: ref,
74
- variant: "multiselectListContainer.multiselectListContainer",
74
+ variant: "collapsiblePanel.collapsiblePanelContainer",
75
75
  isRow: true
76
76
  }, others), ___EmotionJSX(IconButton, {
77
77
  isRow: true,
78
78
  "aria-label": state.isOpen ? closeAriaLabel : openAriaLabel,
79
- "data-testid": "multiselect-list-button",
79
+ "data-testid": "collapsible-panel-button",
80
80
  onPress: handleButtonPress,
81
81
  ref: triggerRef,
82
- variant: "multiselectToggle",
82
+ variant: "collapsiblePanelToggle",
83
83
  pr: "sm"
84
84
  }, ___EmotionJSX(Icon, {
85
85
  color: "active",
86
86
  icon: state.isOpen ? ChevronRightIcon : ChevronLeftIcon,
87
87
  role: "button",
88
88
  size: "30px"
89
- }), !state.isOpen && selectedFilterCount && ___EmotionJSX(MultiselectBadge, {
90
- "data-testid": "multiselect-list-badge",
89
+ }), !state.isOpen && selectedFilterCount && ___EmotionJSX(CollapsiblePanelBadge, {
90
+ "data-testid": "collapsible-panel-badge",
91
91
  margin: "auto",
92
92
  selectedFilterCount: selectedFilterCount
93
93
  })), state.isOpen && _objectSpread({}, children));
94
94
  });
95
- MultiselectListContainer.propTypes = {
95
+ CollapsiblePanelContainer.propTypes = {
96
96
  /** Amount of selected items indicator. */
97
97
  selectedFilterCount: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
98
98
 
@@ -116,9 +116,9 @@ MultiselectListContainer.propTypes = {
116
116
  /** Defines a string value that labels the trigger icon when menu is closed. */
117
117
  openAriaLabel: PropTypes.string
118
118
  };
119
- MultiselectListContainer.defaultProps = {
119
+ CollapsiblePanelContainer.defaultProps = {
120
120
  openAriaLabel: 'Open filter menu?',
121
121
  closeAriaLabel: 'Close filter menu?'
122
122
  };
123
- MultiselectListContainer.displayName = 'MultiselectListContainer';
124
- export default MultiselectListContainer;
123
+ CollapsiblePanelContainer.displayName = 'CollapsiblePanelContainer';
124
+ export default CollapsiblePanelContainer;
@@ -3,20 +3,20 @@ import React from 'react';
3
3
  import userEvent from '@testing-library/user-event';
4
4
  import axeTest from '../../utils/testUtils/testAxe';
5
5
  import { render, screen } from '../../utils/testUtils/testWrapper';
6
- import MultiselectListContainer from './MultiselectListContainer';
6
+ import CollapsiblePanelContainer from './CollapsiblePanelContainer';
7
7
  import { jsx as ___EmotionJSX } from "@emotion/react";
8
- var testId = 'test-multiselectListContainer';
9
- var multiselectListBadgeId = 'multiselect-list-badge';
10
- var multiselectListButtonId = 'multiselect-list-button';
11
- var multiselectFilterId = 'multiselect-filter';
8
+ var testId = 'test-collapsiblePanelContainer';
9
+ var collapsiblePanelBadgeId = 'collapsible-panel-badge';
10
+ var collapsiblePanelButtonId = 'collapsible-panel-button';
11
+ var collapsiblePanelId = 'collapsible-panel';
12
12
  var defaultProps = {
13
13
  'data-testid': testId
14
14
  };
15
15
 
16
16
  var getComponent = function getComponent() {
17
17
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
18
- return render(___EmotionJSX(MultiselectListContainer, _extends({}, defaultProps, props), ___EmotionJSX("div", {
19
- "data-testid": multiselectFilterId
18
+ return render(___EmotionJSX(CollapsiblePanelContainer, _extends({}, defaultProps, props), ___EmotionJSX("div", {
19
+ "data-testid": collapsiblePanelId
20
20
  })));
21
21
  };
22
22
 
@@ -25,17 +25,17 @@ afterEach(function () {
25
25
  }); // Need to be added to each test file to test accessibility using axe.
26
26
 
27
27
  axeTest(getComponent);
28
- test('default MultiselectListContainer', function () {
28
+ test('default CollapsiblePanelContainer', function () {
29
29
  getComponent();
30
- var multiselectListContainer = screen.getByTestId(testId);
31
- expect(multiselectListContainer).toBeInTheDocument();
30
+ var collapsiblePanelContainer = screen.getByTestId(testId);
31
+ expect(collapsiblePanelContainer).toBeInTheDocument();
32
32
  });
33
33
  test('custom classname can be passed', function () {
34
34
  getComponent({
35
35
  className: 'testing-class'
36
36
  });
37
- var multiselectListContainer = screen.getByTestId(testId);
38
- expect(multiselectListContainer).toHaveClass('testing-class');
37
+ var collapsiblePanelContainer = screen.getByTestId(testId);
38
+ expect(collapsiblePanelContainer).toHaveClass('testing-class');
39
39
  });
40
40
  test('shows badge when container is closed', function () {
41
41
  getComponent({
@@ -44,7 +44,7 @@ test('shows badge when container is closed', function () {
44
44
  isOpen: false
45
45
  }
46
46
  });
47
- var badge = screen.getByTestId(multiselectListBadgeId);
47
+ var badge = screen.getByTestId(collapsiblePanelBadgeId);
48
48
  expect(badge).toBeInTheDocument();
49
49
  });
50
50
  test('updates aria label when button is clicked', function () {
@@ -54,28 +54,28 @@ test('updates aria label when button is clicked', function () {
54
54
  getComponent({
55
55
  state: state
56
56
  });
57
- var button = screen.getByTestId(multiselectListButtonId);
57
+ var button = screen.getByTestId(collapsiblePanelButtonId);
58
58
  userEvent.click(button);
59
- var multiSelect = screen.queryByTestId(multiselectFilterId);
59
+ var collapsiblePanel = screen.queryByTestId(collapsiblePanelId);
60
60
  expect(button).toHaveAttribute('aria-label', 'Close filter menu?');
61
- expect(multiSelect).toBeInTheDocument();
61
+ expect(collapsiblePanel).toBeInTheDocument();
62
62
  userEvent.click(button);
63
63
  expect(button).toHaveAttribute('aria-label', 'Open filter menu?');
64
- expect(multiSelect).not.toBeInTheDocument();
64
+ expect(collapsiblePanel).not.toBeInTheDocument();
65
65
  });
66
66
  test('shows children when isOpen is true', function () {
67
67
  getComponent({
68
68
  isOpen: true
69
69
  });
70
- var multiselectFilter = screen.getByTestId(multiselectFilterId);
71
- expect(multiselectFilter).toBeInTheDocument();
70
+ var collapsiblePanel = screen.getByTestId(collapsiblePanelId);
71
+ expect(collapsiblePanel).toBeInTheDocument();
72
72
  });
73
73
  test('should hide children when pressing the escape key', function () {
74
74
  getComponent();
75
- var button = screen.getByTestId(multiselectListButtonId);
75
+ var button = screen.getByTestId(collapsiblePanelButtonId);
76
76
  userEvent.click(button);
77
- var multiSelect = screen.queryByTestId(multiselectFilterId);
78
- expect(multiSelect).toBeInTheDocument();
77
+ var collapsiblePanel = screen.queryByTestId(collapsiblePanelId);
78
+ expect(collapsiblePanel).toBeInTheDocument();
79
79
  userEvent.type(button, '{esc}');
80
- expect(multiSelect).not.toBeInTheDocument();
80
+ expect(collapsiblePanel).not.toBeInTheDocument();
81
81
  });
@@ -0,0 +1 @@
1
+ export { default } from './CollapsiblePanelContainer';
@@ -2,25 +2,25 @@ import React, { forwardRef } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { Box, Icon, IconButton, Text } from '../../index';
4
4
  import { jsx as ___EmotionJSX } from "@emotion/react";
5
- var MultiselectFilterItem = /*#__PURE__*/forwardRef(function (props, ref) {
5
+ var CollapsiblePanelItem = /*#__PURE__*/forwardRef(function (props, ref) {
6
6
  var text = props.text,
7
7
  icon = props.icon,
8
8
  isDefaultSelected = props.isDefaultSelected,
9
9
  onPress = props.onPress;
10
10
 
11
11
  var iconElement = icon && ___EmotionJSX(Icon, {
12
- "data-testid": "multiselect-filter-data-icon",
12
+ "data-testid": "collapsible-panel-data-icon",
13
13
  icon: icon,
14
14
  color: isDefaultSelected ? 'neutral.10' : 'active',
15
15
  size: 13
16
16
  });
17
17
 
18
18
  return ___EmotionJSX(Box, {
19
- "data-testid": "multiselect-filter-item",
19
+ "data-testid": "collapsible-panel-item",
20
20
  isRow: true,
21
21
  ref: ref
22
22
  }, ___EmotionJSX(Text, {
23
- variant: "multiselectFilterItem"
23
+ variant: "collapsiblePanellItem"
24
24
  }, text), iconElement && (isDefaultSelected ? iconElement : ___EmotionJSX(IconButton, {
25
25
  sx: {
26
26
  width: 13,
@@ -33,7 +33,7 @@ var MultiselectFilterItem = /*#__PURE__*/forwardRef(function (props, ref) {
33
33
  onPress: onPress
34
34
  }, iconElement)));
35
35
  });
36
- MultiselectFilterItem.propTypes = {
36
+ CollapsiblePanelItem.propTypes = {
37
37
  /**
38
38
  * Display text.
39
39
  */
@@ -55,5 +55,5 @@ MultiselectFilterItem.propTypes = {
55
55
  */
56
56
  onPress: PropTypes.func
57
57
  };
58
- MultiselectFilterItem.displayName = 'MultiselectFilterItem';
59
- export default MultiselectFilterItem;
58
+ CollapsiblePanelItem.displayName = 'CollapsiblePanelItem';
59
+ export default CollapsiblePanelItem;
@@ -3,17 +3,17 @@ import React from 'react';
3
3
  import FilterIcon from 'mdi-react/FilterIcon';
4
4
  import axeTest from '../../utils/testUtils/testAxe';
5
5
  import { render, screen } from '../../utils/testUtils/testWrapper';
6
- import MultiselectFilterItem from './MultiselectFilterItem';
6
+ import CollapsiblePanelItem from './CollapsiblePanelItem';
7
7
  import { jsx as ___EmotionJSX } from "@emotion/react";
8
- var testId = 'multiselect-filter-item';
9
- var iconId = 'multiselect-filter-data-icon';
8
+ var testId = 'collapsible-panel-item';
9
+ var iconId = 'collapsible-panel-data-icon';
10
10
  var defaultProps = {
11
11
  text: 'Item name'
12
12
  };
13
13
 
14
14
  var getComponent = function getComponent() {
15
15
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
16
- return render(___EmotionJSX(MultiselectFilterItem, _extends({}, defaultProps, props)));
16
+ return render(___EmotionJSX(CollapsiblePanelItem, _extends({}, defaultProps, props)));
17
17
  };
18
18
 
19
19
  afterEach(function () {
@@ -21,12 +21,12 @@ afterEach(function () {
21
21
  }); // Need to be added to each test file to test accessibility using axe.
22
22
 
23
23
  axeTest(getComponent);
24
- test('default multiselectFilter', function () {
24
+ test('default collapsiblePanel', function () {
25
25
  getComponent();
26
- var multiselectFilterItem = screen.getByTestId(testId);
26
+ var collapsiblePanelItem = screen.getByTestId(testId);
27
27
  var icon = screen.queryByTestId(iconId);
28
28
  expect(icon).not.toBeInTheDocument();
29
- expect(multiselectFilterItem).toBeInTheDocument();
29
+ expect(collapsiblePanelItem).toBeInTheDocument();
30
30
  });
31
31
  test('icon button displays when icon prop is present', function () {
32
32
  getComponent({
@@ -0,0 +1 @@
1
+ export { default } from './CollapsiblePanelItem';
@@ -67,6 +67,8 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
67
67
  onOpenChange = props.onOpenChange,
68
68
  onSelectionChange = props.onSelectionChange,
69
69
  placeholder = props.placeholder,
70
+ _props$readOnlyKeys = props.readOnlyKeys,
71
+ readOnlyKeys = _props$readOnlyKeys === void 0 ? [] : _props$readOnlyKeys,
70
72
  selectedKeys = props.selectedKeys,
71
73
  scrollBoxProps = props.scrollBoxProps;
72
74
  var hasCustomValue = mode === 'non-restrictive';
@@ -115,7 +117,10 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
115
117
  return contains(item.textValue, filterString);
116
118
  });
117
119
  },
118
- items: items,
120
+ items: _filterInstanceProperty(items).call(items, function (_ref) {
121
+ var key = _ref.key;
122
+ return !_includesInstanceProperty(readOnlyKeys).call(readOnlyKeys, key);
123
+ }),
119
124
  onSelectionChange: toggleItems,
120
125
  selectionMode: 'multiple'
121
126
  }));
@@ -262,10 +267,8 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
262
267
  selectionManager.toggleSelection(key);
263
268
  };
264
269
 
265
- var selectedItems = ___EmotionJSX(React.Fragment, null, _mapInstanceProperty(_context4 = _Array$from(selectionManager.selectedKeys)).call(_context4, function (key) {
266
- var _context5, _context6;
267
-
268
- var item = _findInstanceProperty(_context5 = _concatInstanceProperty(_context6 = []).call(_context6, initialItems, customItems)).call(_context5, function (el) {
270
+ var readOnlyItems = ___EmotionJSX(React.Fragment, null, _mapInstanceProperty(readOnlyKeys).call(readOnlyKeys, function (key) {
271
+ var item = _findInstanceProperty(initialItems).call(initialItems, function (el) {
269
272
  return el.key === key;
270
273
  });
271
274
 
@@ -273,25 +276,34 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
273
276
  return ___EmotionJSX(Chip, {
274
277
  key: item.key,
275
278
  role: "presentation",
276
- bg: "active",
277
- color: "white",
278
279
  label: item.name,
279
- sx: {
280
- alignSelf: 'center',
281
- cursor: 'default',
282
- height: '100%',
283
- m: 5,
284
- mr: 10,
285
- ml: 0,
286
- py: 3,
287
- pr: 0
288
- },
280
+ variant: "boxes.readOnlyChip",
281
+ bg: "white",
289
282
  textProps: {
290
283
  sx: {
291
- fontWeight: 500,
292
- textTransform: 'none'
284
+ color: 'text.primary'
293
285
  }
294
286
  }
287
+ });
288
+ }
289
+
290
+ return null;
291
+ }));
292
+
293
+ var selectedItems = ___EmotionJSX(React.Fragment, null, _mapInstanceProperty(_context4 = _Array$from(selectionManager.selectedKeys)).call(_context4, function (key) {
294
+ var _context5, _context6;
295
+
296
+ var item = _findInstanceProperty(_context5 = _concatInstanceProperty(_context6 = []).call(_context6, initialItems, customItems)).call(_context5, function (el) {
297
+ return el.key === key;
298
+ });
299
+
300
+ if (item) {
301
+ return ___EmotionJSX(Chip, {
302
+ key: item.key,
303
+ role: "presentation",
304
+ variant: "boxes.selectedItemChip",
305
+ bg: "active",
306
+ label: item.name
295
307
  }, ___EmotionJSX(IconButton, {
296
308
  "aria-label": "delete",
297
309
  onPress: function onPress() {
@@ -360,7 +372,7 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
360
372
  return _onKeyUp && _onKeyUp(e.nativeEvent);
361
373
  },
362
374
  slots: {
363
- beforeInput: selectedItems
375
+ beforeInput: ___EmotionJSX(React.Fragment, null, readOnlyItems, " ", selectedItems)
364
376
  },
365
377
  value: filterString
366
378
  }, inputProps)), ___EmotionJSX(PopoverContainer, {
@@ -471,6 +483,11 @@ MultivaluesField.propTypes = {
471
483
  /** Temporary text that occupies the text input when it is empty. */
472
484
  placeholder: PropTypes.string,
473
485
 
486
+ /**
487
+ * The item keys that are readonly. These items cannot be changed or selected.
488
+ */
489
+ readOnlyKeys: PropTypes.arrayOf(PropTypes.string),
490
+
474
491
  /** The currently selected keys in the collection (controlled). */
475
492
  selectedKeys: isIterableProp,
476
493
  // /** Props object that is spread directly into the ScrollBox element. */
@@ -171,4 +171,15 @@ export var WithCustomSize = function WithCustomSize(args) {
171
171
  "data-id": item.name
172
172
  }, item.name);
173
173
  }))));
174
+ };
175
+ export var WithReadOnlyValues = function WithReadOnlyValues(args) {
176
+ return ___EmotionJSX(OverlayProvider, null, ___EmotionJSX(MultivaluesField, _extends({
177
+ readOnlyKeys: ['Aardvark', 'Snake'],
178
+ items: items
179
+ }, args), function (item) {
180
+ return ___EmotionJSX(Item, {
181
+ key: item.key,
182
+ "data-id": item.name
183
+ }, item.name);
184
+ }));
174
185
  };
@@ -342,4 +342,19 @@ test('should have no accessibility violations', /*#__PURE__*/_asyncToGenerator(
342
342
  }
343
343
  }
344
344
  }, _callee);
345
- })));
345
+ })));
346
+ test('read only keys', function () {
347
+ getComponent({
348
+ readOnlyKeys: [items[1].key, items[2].key]
349
+ });
350
+ var listbox = screen.queryByRole('listbox');
351
+ expect(listbox).not.toBeInTheDocument();
352
+ var firstChip = screen.getByText(items[1].name);
353
+ var deleteButton1 = firstChip.nextSibling;
354
+ expect(firstChip).toBeInTheDocument();
355
+ expect(deleteButton1).toBeNull();
356
+ var secondChip = screen.getByText(items[2].name);
357
+ expect(secondChip).toBeInTheDocument();
358
+ var deleteButton2 = firstChip.nextSibling;
359
+ expect(deleteButton2).toBeNull();
360
+ });
package/lib/index.js CHANGED
@@ -72,12 +72,12 @@ export { default as Messages } from './components/Messages';
72
72
  export * from './components/Messages';
73
73
  export { default as Modal } from './components/Modal';
74
74
  export * from './components/Modal';
75
- export { default as MultiselectFilter } from './components/MultiselectFilter';
76
- export * from './components/MultiselectFilter';
77
- export { default as MultiselectFilterItem } from './components/MultiselectFilterItem';
78
- export * from './components/MultiselectFilterItem';
79
- export { default as MultiselectListContainer } from './components/MultiselectListContainer';
80
- export * from './components/MultiselectListContainer';
75
+ export { default as CollapsiblePanel } from './components/CollapsiblePanel';
76
+ export * from './components/CollapsiblePanel';
77
+ export { default as CollapsiblePanelItem } from './components/CollapsiblePanelItem';
78
+ export * from './components/CollapsiblePanelItem';
79
+ export { default as CollapsiblePanelContainer } from './components/CollapsiblePanelContainer';
80
+ export * from './components/CollapsiblePanelContainer';
81
81
  export { default as NavBar } from './components/NavBar';
82
82
  export * from './components/NavBar';
83
83
  export { default as NavBarSection } from './components/NavBarSection';
@@ -24,10 +24,10 @@ import CheckIcon from 'mdi-react/CheckIcon';
24
24
  import Clear from 'mdi-react/CloseIcon';
25
25
  import ChevronRightIcon from 'mdi-react/ChevronRightIcon';
26
26
  import SearchIcon from 'mdi-react/SearchIcon';
27
- import { Breadcrumbs, Box, CheckboxField, Chip, Icon, IconButton, Item, ListView, MultiselectFilter, MultiselectFilterItem, SearchField, Text } from '..';
27
+ import { Breadcrumbs, Box, CheckboxField, Chip, Icon, IconButton, Item, ListView, CollapsiblePanel, CollapsiblePanelItem, SearchField, Text } from '..';
28
28
  import { jsx as ___EmotionJSX } from "@emotion/react";
29
29
  export default {
30
- title: 'Recipes/MultiselectListContainer'
30
+ title: 'Recipes/CollapsiblePanel with List'
31
31
  };
32
32
  var data = [{
33
33
  id: '1',
@@ -283,7 +283,7 @@ export var Default = function Default() {
283
283
  return el.key === item.key;
284
284
  })
285
285
  }));
286
- })), ___EmotionJSX(MultiselectFilter, {
286
+ })), ___EmotionJSX(CollapsiblePanel, {
287
287
  items: selectedItems,
288
288
  selectedFilterCount: selectedItems.length.toString(),
289
289
  listTitle: "Selected Groups",
@@ -294,7 +294,7 @@ export var Default = function Default() {
294
294
  key: item.key,
295
295
  textValue: item.name,
296
296
  "data-id": item.key
297
- }, ___EmotionJSX(MultiselectFilterItem, {
297
+ }, ___EmotionJSX(CollapsiblePanelItem, {
298
298
  text: item.name,
299
299
  icon: item.isDefaultSelected ? CheckIcon : Clear,
300
300
  isDefaultSelected: item.isDefaultSelected,
@@ -113,6 +113,27 @@ export var chip = {
113
113
  }
114
114
  }
115
115
  };
116
+
117
+ var multivaluesChip = _objectSpread(_objectSpread({}, chip), {}, {
118
+ alignSelf: 'center',
119
+ cursor: 'default',
120
+ height: '100%',
121
+ m: 5,
122
+ mr: 10,
123
+ ml: 0
124
+ });
125
+
126
+ var selectedItemChip = _objectSpread(_objectSpread({}, multivaluesChip), {}, {
127
+ py: 3,
128
+ pr: 0
129
+ });
130
+
131
+ var readOnlyChip = _objectSpread(_objectSpread({}, multivaluesChip), {}, {
132
+ p: 3,
133
+ border: '1px solid',
134
+ borderColor: 'neutral.80'
135
+ });
136
+
116
137
  var inputInContainerSlot = {
117
138
  position: 'absolute',
118
139
  bg: 'transparent',
@@ -289,6 +310,8 @@ export default {
289
310
  base: base,
290
311
  card: card,
291
312
  chip: chip,
313
+ selectedItemChip: selectedItemChip,
314
+ readOnlyChip: readOnlyChip,
292
315
  copy: copy,
293
316
  datePicker: datePicker,
294
317
  environmentChip: environmentChip,
@@ -126,7 +126,7 @@ var modalCloseButton = _objectSpread(_objectSpread({}, iconButton), {}, {
126
126
  right: 10
127
127
  });
128
128
 
129
- var multiselectToggle = _objectSpread(_objectSpread({}, square), {}, {
129
+ var collapsiblePanelToggle = _objectSpread(_objectSpread({}, square), {}, {
130
130
  bg: 'accent.99',
131
131
  height: '40px',
132
132
  minWidth: 'max-content',
@@ -700,6 +700,6 @@ export default {
700
700
  tooltipInline: tooltipInline,
701
701
  colorBlock: colorBlock,
702
702
  menuTab: menuTab,
703
- multiselectToggle: multiselectToggle,
703
+ collapsiblePanelToggle: collapsiblePanelToggle,
704
704
  neutralText: neutralText
705
705
  };
@@ -1,10 +1,10 @@
1
- var multiselectListContainer = {
1
+ var collapsiblePanelContainer = {
2
2
  overflowX: 'hidden',
3
3
  pr: 'sm',
4
4
  transition: 'right 500ms',
5
5
  minHeight: '80vh'
6
6
  };
7
- var multiselectListContent = {
7
+ var collapsiblePanelContent = {
8
8
  bg: 'accent.99',
9
9
  fontSize: 'sm',
10
10
  height: '100%',
@@ -23,7 +23,7 @@ var multiselectListContent = {
23
23
  justifyContent: 'space-between'
24
24
  }
25
25
  };
26
- var multiselectListTitle = {
26
+ var collapsiblePanelContainerTitle = {
27
27
  alignContent: 'center',
28
28
  bg: 'accent.99',
29
29
  display: 'flex',
@@ -35,7 +35,7 @@ var multiselectListTitle = {
35
35
  maxWidth: 'max-content !important',
36
36
  margin: '0'
37
37
  };
38
- var multiselectListBadge = {
38
+ var collapsiblePanelBadge = {
39
39
  borderRadius: '5px',
40
40
  display: 'flex',
41
41
  height: '17px',
@@ -48,14 +48,14 @@ var multiselectListBadge = {
48
48
  alignItems: 'center',
49
49
  fontWeight: 500
50
50
  };
51
- var multiselectFilterItem = {
51
+ var collapsiblePanellItem = {
52
52
  minHeight: '45px',
53
53
  margin: 'auto'
54
54
  };
55
55
  export default {
56
- multiselectListContainer: multiselectListContainer,
57
- multiselectListContent: multiselectListContent,
58
- multiselectListTitle: multiselectListTitle,
59
- multiselectListBadge: multiselectListBadge,
60
- multiselectFilterItem: multiselectFilterItem
56
+ collapsiblePanelContainer: collapsiblePanelContainer,
57
+ collapsiblePanelContent: collapsiblePanelContent,
58
+ collapsiblePanelContainerTitle: collapsiblePanelContainerTitle,
59
+ collapsiblePanelBadge: collapsiblePanelBadge,
60
+ collapsiblePanellItem: collapsiblePanellItem
61
61
  };