@pingux/astro 2.50.0 → 2.51.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.
Files changed (49) hide show
  1. package/lib/cjs/components/FieldHelperText/FieldHelperText.styles.d.ts +832 -2
  2. package/lib/cjs/components/ListBox/ListBox.d.ts +11 -0
  3. package/lib/cjs/components/ListBox/ListBox.js +7 -45
  4. package/lib/cjs/components/ListBox/ListBox.styles.d.ts +3 -0
  5. package/lib/cjs/components/ListBox/ListBox.test.d.ts +1 -0
  6. package/lib/cjs/components/ListBox/ListBox.test.js +29 -28
  7. package/lib/cjs/components/ListBox/ListBoxContext.d.ts +2 -0
  8. package/lib/cjs/components/ListBox/ListBoxContext.js +1 -1
  9. package/lib/cjs/components/ListBox/ListBoxSection.d.ts +10 -0
  10. package/lib/cjs/components/ListBox/ListBoxSection.js +4 -4
  11. package/lib/cjs/components/ListBox/Option.d.ts +4 -0
  12. package/lib/cjs/components/ListBox/Option.js +11 -33
  13. package/lib/cjs/components/ListBox/index.d.ts +2 -0
  14. package/lib/cjs/components/ListView/ListView.js +26 -10
  15. package/lib/cjs/components/ListView/ListView.stories.js +179 -13
  16. package/lib/cjs/components/ListView/ListView.test.js +300 -35
  17. package/lib/cjs/components/ListView/ListViewExpandableItem.js +100 -0
  18. package/lib/cjs/components/ListView/ListViewFocusWrapper.js +117 -0
  19. package/lib/cjs/components/ListView/ListViewItem.js +24 -16
  20. package/lib/cjs/components/ListViewItem/ListViewItem.styles.js +34 -1
  21. package/lib/cjs/components/Text/Text.styles.d.ts +1664 -18
  22. package/lib/cjs/hooks/useExpandableListViewItem/index.d.ts +1 -0
  23. package/lib/cjs/hooks/useExpandableListViewItem/index.js +14 -0
  24. package/lib/cjs/hooks/useExpandableListViewItem/useExpandableListViewItem.d.ts +51 -0
  25. package/lib/cjs/hooks/useExpandableListViewItem/useExpandableListViewItem.js +237 -0
  26. package/lib/cjs/hooks/useSelectField/useSelectField.d.ts +2 -2
  27. package/lib/cjs/hooks/useSelectField/useSelectField.js +1 -1
  28. package/lib/cjs/types/index.d.ts +1 -0
  29. package/lib/cjs/types/index.js +27 -16
  30. package/lib/cjs/types/listBox.d.ts +49 -0
  31. package/lib/cjs/types/listBox.js +6 -0
  32. package/lib/components/ListBox/ListBox.js +8 -46
  33. package/lib/components/ListBox/ListBox.test.js +23 -28
  34. package/lib/components/ListBox/ListBoxContext.js +1 -1
  35. package/lib/components/ListBox/ListBoxSection.js +4 -4
  36. package/lib/components/ListBox/Option.js +11 -33
  37. package/lib/components/ListView/ListView.js +26 -10
  38. package/lib/components/ListView/ListView.stories.js +177 -14
  39. package/lib/components/ListView/ListView.test.js +300 -35
  40. package/lib/components/ListView/ListViewExpandableItem.js +86 -0
  41. package/lib/components/ListView/ListViewFocusWrapper.js +102 -0
  42. package/lib/components/ListView/ListViewItem.js +25 -17
  43. package/lib/components/ListViewItem/ListViewItem.styles.js +34 -1
  44. package/lib/hooks/useExpandableListViewItem/index.js +1 -0
  45. package/lib/hooks/useExpandableListViewItem/useExpandableListViewItem.js +229 -0
  46. package/lib/hooks/useSelectField/useSelectField.js +1 -1
  47. package/lib/types/index.js +1 -0
  48. package/lib/types/listBox.js +1 -0
  49. package/package.json +6 -2
@@ -1,5 +1,5 @@
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 { Item, Section } from 'react-stately';
4
4
  import { useListState } from '@react-stately/list';
5
5
  import { render, screen } from '@testing-library/react';
@@ -37,19 +37,13 @@ var defaultWithSectionsProps = {
37
37
  'aria-labelledby': 'label',
38
38
  items: itemsWithSections
39
39
  };
40
- var ListBoxWithState = /*#__PURE__*/React.forwardRef(function (props, ref) {
41
- var state = useListState({
42
- props: props
43
- });
40
+ var ListBoxWithState = /*#__PURE__*/forwardRef(function (props, ref) {
41
+ var theseProps = {};
42
+ var state = useListState(theseProps);
44
43
  return ___EmotionJSX(ListBox, _extends({}, props, {
45
44
  state: state,
46
45
  ref: ref
47
- }), function (item) {
48
- return ___EmotionJSX(Item, {
49
- key: item.name,
50
- childItems: item.options
51
- }, item.name);
52
- });
46
+ }));
53
47
  });
54
48
  var ListBoxWithSections = function ListBoxWithSections(props) {
55
49
  var state = useListState(props);
@@ -59,24 +53,28 @@ var ListBoxWithSections = function ListBoxWithSections(props) {
59
53
  };
60
54
  var getComponent = function getComponent() {
61
55
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
62
- return render(___EmotionJSX(ListBoxWithState, _extends({}, defaultProps, props)));
56
+ return render(___EmotionJSX(ListBoxWithState, _extends({}, defaultProps, props, {
57
+ items: items
58
+ }), function (item) {
59
+ return ___EmotionJSX(Item, {
60
+ key: item.name,
61
+ childItems: item.options
62
+ }, item.name);
63
+ }));
63
64
  };
64
65
  var getSectionsComponent = function getSectionsComponent() {
65
66
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
66
67
  return render(___EmotionJSX(ListBoxWithSections, _extends({}, defaultWithSectionsProps, props), function (section) {
67
- return (
68
- // eslint-disable-next-line testing-library/no-node-access
69
- ___EmotionJSX(Section, {
70
- key: section.name,
71
- title: section.name,
72
- items: section.options
73
- }, function (item) {
74
- return ___EmotionJSX(Item, {
75
- key: item.name,
76
- childItems: item.options
77
- }, item.name);
78
- })
79
- );
68
+ return ___EmotionJSX(Section, {
69
+ key: section.name,
70
+ title: section.name,
71
+ items: section.options
72
+ }, function (item) {
73
+ return ___EmotionJSX(Item, {
74
+ key: item.name,
75
+ childItems: item.options
76
+ }, item.name);
77
+ });
80
78
  }));
81
79
  };
82
80
  var offsetWidth;
@@ -93,9 +91,6 @@ beforeAll(function () {
93
91
  scrollHeight = jest.spyOn(window.HTMLElement.prototype, 'scrollHeight', 'get').mockImplementation(function () {
94
92
  return 48;
95
93
  });
96
- jest.spyOn(window, 'requestAnimationFrame').mockImplementation(function (cb) {
97
- return cb();
98
- });
99
94
  jest.useFakeTimers();
100
95
  });
101
96
  afterEach(function () {
@@ -1,2 +1,2 @@
1
1
  import React from 'react';
2
- export var ListBoxContext = /*#__PURE__*/React.createContext(null);
2
+ export var ListBoxContext = /*#__PURE__*/React.createContext({});
@@ -13,13 +13,13 @@ var ListBoxSection = function ListBoxSection(props) {
13
13
  reusableView = props.reusableView,
14
14
  header = props.header;
15
15
  var item = reusableView.content;
16
- var _useListBoxSection = useListBoxSection({
16
+ var _ref = useListBoxSection({
17
17
  heading: item.rendered,
18
18
  'aria-label': item['aria-label']
19
19
  }),
20
- headingProps = _useListBoxSection.headingProps,
21
- groupProps = _useListBoxSection.groupProps;
22
- var headerRef = useRef();
20
+ headingProps = _ref.headingProps,
21
+ groupProps = _ref.groupProps;
22
+ var headerRef = useRef(null);
23
23
  useVirtualizerItem({
24
24
  reusableView: header,
25
25
  ref: headerRef
@@ -9,16 +9,15 @@ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object
9
9
  import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
10
10
  import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
11
11
  import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
12
- var _excluded = ["item", "hasVirtualFocus"];
12
+ var _excluded = ["item", "hasVirtualFocus"],
13
+ _excluded2 = ["onPressStart", "onPressUp"];
13
14
  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; }
14
15
  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; }
15
16
  import React, { forwardRef, useContext, useEffect, useImperativeHandle, useRef } from 'react';
16
17
  import CircleSmallIcon from '@pingux/mdi-react/CircleSmallIcon';
17
18
  import { useOption } from '@react-aria/listbox';
18
- import PropTypes from 'prop-types';
19
19
  import { useMultivaluesContext } from '../../context/MultivaluesContext';
20
20
  import { useStatusClasses } from '../../hooks';
21
- import { isIterableProp } from '../../utils/devUtils/props/isIterable';
22
21
  import Box from '../Box';
23
22
  import Icon from '../Icon';
24
23
  import { ListBoxContext } from './ListBoxContext';
@@ -36,7 +35,7 @@ var Option = /*#__PURE__*/forwardRef(function (props, ref) {
36
35
  var isSeparator = itemProps.isSeparator,
37
36
  dataId = itemProps['data-id'];
38
37
  // Get props for the option element
39
- var optionRef = useRef();
38
+ var optionRef = useRef(null);
40
39
  /* istanbul ignore next */
41
40
  useImperativeHandle(ref, function () {
42
41
  return optionRef.current;
@@ -71,11 +70,13 @@ var Option = /*#__PURE__*/forwardRef(function (props, ref) {
71
70
  }
72
71
  }, [isFocused, updateActiveDescendant]);
73
72
 
74
- /* Related to UIP-4992
75
- * Need to remove these properties to avoid errors in the console on the external app.
76
- * By the way, these properties return "undefined", so it shouldn't create issues */
77
- delete optionProps.onPressStart;
78
- delete optionProps.onPressUp;
73
+ // /* Related to UIP-4992
74
+ // * Need to remove these properties to avoid errors in the console on the external app.
75
+ // * By the way, these properties return "undefined", so it shouldn't create issues */
76
+ var _ref = optionProps,
77
+ onPressStart = _ref.onPressStart,
78
+ onPressUp = _ref.onPressUp,
79
+ theseOptionProps = _objectWithoutProperties(_ref, _excluded2);
79
80
  return ___EmotionJSX(Box, _extends({
80
81
  as: "li",
81
82
  isRow: true,
@@ -84,7 +85,7 @@ var Option = /*#__PURE__*/forwardRef(function (props, ref) {
84
85
  "data-id": dataId,
85
86
  className: classNames,
86
87
  onPointerOver: setFocusOnHover
87
- }, optionProps, others, {
88
+ }, theseOptionProps, others, {
88
89
  "aria-label": ariaLabel
89
90
  }), isSelected && ___EmotionJSX(Icon, {
90
91
  icon: CircleSmallIcon,
@@ -93,27 +94,4 @@ var Option = /*#__PURE__*/forwardRef(function (props, ref) {
93
94
  }
94
95
  }), rendered);
95
96
  });
96
- Option.propTypes = {
97
- hasVirtualFocus: PropTypes.bool,
98
- item: PropTypes.shape({
99
- key: PropTypes.string,
100
- props: PropTypes.shape({
101
- 'data-id': PropTypes.string,
102
- isSeparator: PropTypes.bool
103
- }),
104
- rendered: PropTypes.node,
105
- 'aria-label': PropTypes.string
106
- }),
107
- state: PropTypes.shape({
108
- disabledKeys: isIterableProp,
109
- selectionManager: PropTypes.shape({
110
- focusedKey: PropTypes.string,
111
- isSelected: PropTypes.func
112
- })
113
- })
114
- };
115
- Option.defaultProps = {
116
- item: {},
117
- state: {}
118
- };
119
97
  export default Option;
@@ -10,21 +10,22 @@ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
10
10
  import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
11
11
  import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
12
12
  import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
13
- var _excluded = ["disabledKeys", "isHoverable", "loadingState", "onLoadMore", "onSelectionChange", "selectedKeys", "selectionMode", "selectionStyle", "items"];
13
+ var _excluded = ["disabledKeys", "isHoverable", "loadingState", "onLoadMore", "onSelectionChange", "onExpandedChange", "expandedKeys", "selectedKeys", "selectionMode", "selectionStyle", "items"];
14
14
  import _Object$values from "@babel/runtime-corejs3/core-js-stable/object/values";
15
15
  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; }
16
16
  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; }
17
17
  import React, { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';
18
+ import { useGridList } from 'react-aria';
19
+ import { useTreeState } from 'react-stately';
18
20
  import { useCollator } from '@react-aria/i18n';
19
- import { useList } from '@react-aria/list';
20
21
  import { Virtualizer, VirtualizerItem } from '@react-aria/virtualizer';
21
22
  import { ListLayout } from '@react-stately/layout';
22
- import { useListState } from '@react-stately/list';
23
23
  import PropTypes from 'prop-types';
24
24
  import loadingStates from '../../utils/devUtils/constants/loadingStates';
25
25
  import { isIterableProp } from '../../utils/devUtils/props/isIterable';
26
26
  import Loader from '../Loader';
27
27
  import { ListViewContext } from './ListViewContext';
28
+ import ListViewExpandableItem from './ListViewExpandableItem';
28
29
  import ListViewItem from './ListViewItem';
29
30
  import { jsx as ___EmotionJSX } from "@emotion/react";
30
31
  export var collectionTypes = {
@@ -48,7 +49,7 @@ export function useListLayout(state) {
48
49
  placeholderHeight: ROW_HEIGHT,
49
50
  collator: collator
50
51
  });
51
- }, [collator]);
52
+ }, [collator, state.collection]);
52
53
  layout.collection = state.collection;
53
54
  layout.disabledKeys = state.disabledKeys;
54
55
  return layout;
@@ -60,12 +61,14 @@ var ListView = /*#__PURE__*/forwardRef(function (props, ref) {
60
61
  loadingState = props.loadingState,
61
62
  onLoadMore = props.onLoadMore,
62
63
  onSelectionChange = props.onSelectionChange,
64
+ onExpandedChange = props.onExpandedChange,
65
+ expandedKeys = props.expandedKeys,
63
66
  selectedKeys = props.selectedKeys,
64
67
  selectionMode = props.selectionMode,
65
68
  selectionStyle = props.selectionStyle,
66
69
  items = props.items,
67
70
  others = _objectWithoutProperties(props, _excluded);
68
- var _useState = useState(null),
71
+ var _useState = useState(''),
69
72
  _useState2 = _slicedToArray(_useState, 2),
70
73
  hoveredItem = _useState2[0],
71
74
  setHoveredItem = _useState2[1];
@@ -84,8 +87,8 @@ var ListView = /*#__PURE__*/forwardRef(function (props, ref) {
84
87
  useImperativeHandle(ref, function () {
85
88
  return listViewRef.current;
86
89
  });
87
- var state = useListState(_objectSpread(_objectSpread({}, props), {}, {
88
- selectionBehavior: selectionStyle === 'highlight' ? 'replace' : 'toggle'
90
+ var state = useTreeState(_objectSpread(_objectSpread({}, props), {}, {
91
+ selectionMode: selectionMode === 'expansion' ? 'single' : selectionMode
89
92
  }));
90
93
  state.hover = {
91
94
  hoveredItem: hoveredItem,
@@ -97,12 +100,12 @@ var ListView = /*#__PURE__*/forwardRef(function (props, ref) {
97
100
  var collection = state.collection,
98
101
  selectionManager = state.selectionManager;
99
102
  var layout = useListLayout(state);
100
- var _useList = useList(_objectSpread(_objectSpread({}, props), {}, {
103
+ var _useGridList = useGridList(_objectSpread(_objectSpread({}, props), {}, {
101
104
  isVirtualized: true,
102
105
  keyboardDelegate: layout,
103
106
  loadingState: loadingState
104
107
  }), state, listViewRef),
105
- gridProps = _useList.gridProps;
108
+ gridProps = _useGridList.gridProps;
106
109
  // Sync loading state into the layout.
107
110
  layout.isLoading = isLoading;
108
111
  var focusedKey = selectionManager.focusedKey;
@@ -145,6 +148,13 @@ var ListView = /*#__PURE__*/forwardRef(function (props, ref) {
145
148
  shouldUseVirtualFocus: !isFocusable
146
149
  }), function (type, item) {
147
150
  if (type === 'item') {
151
+ if (props.selectionMode === 'expansion') {
152
+ return ___EmotionJSX(ListViewExpandableItem, {
153
+ isHoverable: isHoverable,
154
+ isFocusable: isFocusable,
155
+ item: item
156
+ });
157
+ }
148
158
  return ___EmotionJSX(ListViewItem, {
149
159
  isHoverable: isHoverable,
150
160
  isFocusable: isFocusable,
@@ -168,6 +178,12 @@ ListView.propTypes = {
168
178
  * interacted with.
169
179
  */
170
180
  disabledKeys: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.object])),
181
+ /** The initial expanded keys in the collection (uncontrolled). */
182
+ defaultExpandedKeys: isIterableProp,
183
+ /** The expanded keys in the collection (controlled). */
184
+ expandedKeys: isIterableProp,
185
+ /** Handler that is called when items are expanded or collapsed. */
186
+ onExpandedChange: PropTypes.func,
171
187
  /** The list of ListView items (controlled). */
172
188
  items: isIterableProp,
173
189
  /** The element's unique identifier. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id). */
@@ -192,7 +208,7 @@ ListView.propTypes = {
192
208
  */
193
209
  selectedKeys: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),
194
210
  /** The type of selection that is allowed in the collection. */
195
- selectionMode: PropTypes.oneOf(['none', 'single', 'multiple']),
211
+ selectionMode: PropTypes.oneOf(['none', 'single', 'multiple', 'expansion']),
196
212
  /** */
197
213
  selectionStyle: PropTypes.oneOf(['highlight', undefined]),
198
214
  /** Callback function that fires when the selected key changes. */
@@ -7,21 +7,27 @@ import _Object$setPrototypeOf from "@babel/runtime-corejs3/core-js-stable/object
7
7
  import _reverseInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/reverse";
8
8
  import _typeof from "@babel/runtime-corejs3/helpers/esm/typeof";
9
9
  import _asyncToGenerator from "@babel/runtime-corejs3/helpers/esm/asyncToGenerator";
10
+ import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
10
11
  import _objectDestructuringEmpty from "@babel/runtime-corejs3/helpers/esm/objectDestructuringEmpty";
11
12
  import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
13
+ import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
14
+ var _excluded = ["string", "secondString"];
12
15
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = _Object$defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof _Symbol ? _Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return _Object$defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = _Object$create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = _Object$getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(IteratorPrototype); function defineIteratorMethods(prototype) { var _context4; _forEachInstanceProperty(_context4 = ["next", "throw", "return"]).call(_context4, function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], _forEachInstanceProperty(tryLocsList).call(tryLocsList, pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return _Object$setPrototypeOf ? _Object$setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = _Object$create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = _Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return _reverseInstanceProperty(keys).call(keys), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { var _context5; if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, _forEachInstanceProperty(_context5 = this.tryEntries).call(_context5, resetTryEntry), !skipTempReset) for (var name in this) "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+_sliceInstanceProperty(name).call(name, 1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
16
+ import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
17
+ import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from";
13
18
  import _indexOfInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/index-of";
14
19
  import _Promise from "@babel/runtime-corejs3/core-js-stable/promise";
15
20
  import _setTimeout from "@babel/runtime-corejs3/core-js-stable/set-timeout";
16
21
  import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
17
22
  import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
18
- import React, { useRef } from 'react';
23
+ import React, { useRef, useState } from 'react';
19
24
  import { Item, useAsyncList } from 'react-stately';
20
25
  import FormSelectIcon from '@pingux/mdi-react/FormSelectIcon';
26
+ import InformationIcon from '@pingux/mdi-react/InformationIcon';
21
27
  import { action } from '@storybook/addon-actions';
22
28
  import isChromatic from 'chromatic/isChromatic';
23
29
  import DocsLayout from '../../../.storybook/storybookDocsLayout';
24
- import { Box, ListView, ListViewItem, ListViewItemChart, ListViewItemMenu, ListViewItemSwitchField } from '../..';
30
+ import { Badge, Box, Button, HelpHint, Icon, IconButton, ListView, ListViewItem, ListViewItemChart, ListViewItemMenu, ListViewItemSwitchField, Text, TextField } from '../..';
25
31
  import loadingStates from '../../utils/devUtils/constants/loadingStates';
26
32
  import { chartData } from '../ListViewItem/controls/chart/chartData';
27
33
  import ListViewReadme from './ListView.mdx';
@@ -76,6 +82,20 @@ var items = [{
76
82
  name: 'Snake',
77
83
  id: '3'
78
84
  }];
85
+ var environments = [{
86
+ title: 'Ping'
87
+ }, {
88
+ title: 'PingOne'
89
+ }, {
90
+ title: 'Montana'
91
+ }, {
92
+ title: 'Europe',
93
+ populations: ['Spain', 'Switzerland', 'Germany']
94
+ }, {
95
+ title: 'Asia',
96
+ populations: ['Hong Kong'],
97
+ isLimitedAccess: true
98
+ }];
79
99
  var animals = [{
80
100
  name: 'Aardvark'
81
101
  }, {
@@ -533,6 +553,80 @@ var actions = {
533
553
  onFocus: action('onFocus'),
534
554
  onLoadMore: action('onLoadMore')
535
555
  };
556
+ var CustomText = function CustomText(_ref) {
557
+ var string = _ref.string,
558
+ secondString = _ref.secondString,
559
+ others = _objectWithoutProperties(_ref, _excluded);
560
+ return ___EmotionJSX(Text, others, string, ' ', ___EmotionJSX("i", null, secondString));
561
+ };
562
+ var ExpandableChildren = function ExpandableChildren() {
563
+ return ___EmotionJSX(Box, {
564
+ sx: {
565
+ my: 'md'
566
+ }
567
+ }, ___EmotionJSX(TextField, {
568
+ maxWidth: "300px"
569
+ }), ___EmotionJSX(Box, {
570
+ sx: {
571
+ mt: 'md',
572
+ gap: 'md'
573
+ }
574
+ }, _mapInstanceProperty(environments).call(environments, function (env) {
575
+ var _env$populations;
576
+ return ___EmotionJSX(Box, {
577
+ key: env.title
578
+ }, ___EmotionJSX(Box, {
579
+ isRow: true
580
+ }, ___EmotionJSX(CustomText, {
581
+ key: "".concat(env.title, " title"),
582
+ string: env.title,
583
+ secondString: "Environment"
584
+ }), env.isLimitedAccess && ___EmotionJSX(React.Fragment, null, ___EmotionJSX(Badge, {
585
+ label: "Limited Access",
586
+ bg: "white",
587
+ textColor: "text.primary",
588
+ sx: {
589
+ ml: 'xs',
590
+ border: '1px solid',
591
+ borderColor: 'neutral.80'
592
+ }
593
+ }), ___EmotionJSX(HelpHint, {
594
+ label: "".concat(env, " help hint")
595
+ }, "Text of the popover right here..."))), (_env$populations = env.populations) === null || _env$populations === void 0 ? void 0 : _mapInstanceProperty(_env$populations).call(_env$populations, function (pop) {
596
+ return ___EmotionJSX(CustomText, {
597
+ key: pop,
598
+ sx: {
599
+ ml: 'sm'
600
+ },
601
+ string: pop,
602
+ secondString: "Population"
603
+ });
604
+ }));
605
+ }), ___EmotionJSX(Button, {
606
+ sx: {
607
+ alignSelf: 'start'
608
+ },
609
+ variant: "link"
610
+ }, "More Environments")));
611
+ };
612
+ var ExampleContent = function ExampleContent(contentProps) {
613
+ var text = contentProps.text;
614
+ return ___EmotionJSX(Box, {
615
+ isRow: true,
616
+ sx: {
617
+ alignItems: 'center'
618
+ }
619
+ }, ___EmotionJSX(Text, {
620
+ variant: "itemTitle"
621
+ }, text), ___EmotionJSX(IconButton, {
622
+ "aria-label": "".concat(text, " information icon")
623
+ }, ___EmotionJSX(Icon, {
624
+ icon: InformationIcon,
625
+ title: {
626
+ name: 'Information Icon'
627
+ }
628
+ })));
629
+ };
536
630
  var Controls = function Controls() {
537
631
  return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(ListViewItemSwitchField, null), ___EmotionJSX(ListViewItemMenu, null, ___EmotionJSX(Item, {
538
632
  key: "enable"
@@ -542,8 +636,8 @@ var Controls = function Controls() {
542
636
  key: "delete"
543
637
  }, "Delete user")));
544
638
  };
545
- export var Default = function Default(_ref) {
546
- var args = _extends({}, (_objectDestructuringEmpty(_ref), _ref));
639
+ export var Default = function Default(_ref2) {
640
+ var args = _extends({}, (_objectDestructuringEmpty(_ref2), _ref2));
547
641
  return ___EmotionJSX(ListView, _extends({}, props, args, {
548
642
  items: items
549
643
  }), function (item) {
@@ -557,9 +651,78 @@ export var Default = function Default(_ref) {
557
651
  }, ___EmotionJSX(Controls, null)));
558
652
  });
559
653
  };
654
+ export var Controlled = function Controlled() {
655
+ var _useState = useState(['Snake']),
656
+ _useState2 = _slicedToArray(_useState, 2),
657
+ selectedKeys = _useState2[0],
658
+ setSelectedKeys = _useState2[1];
659
+ var onSelectedChange = function onSelectedChange(e) {
660
+ setSelectedKeys(_Array$from(e));
661
+ };
662
+ return ___EmotionJSX(ListView, {
663
+ items: items,
664
+ onSelectionChange: onSelectedChange,
665
+ selectedKeys: selectedKeys
666
+ }, function (item) {
667
+ return ___EmotionJSX(Item, {
668
+ key: item.name
669
+ }, ___EmotionJSX(ListViewItem, {
670
+ data: {
671
+ text: item.name,
672
+ icon: FormSelectIcon
673
+ }
674
+ }, ___EmotionJSX(Controls, null)));
675
+ });
676
+ };
677
+ export var WithExpandableItems = function WithExpandableItems(_ref3) {
678
+ var args = _extends({}, (_objectDestructuringEmpty(_ref3), _ref3));
679
+ return ___EmotionJSX(ListView, _extends({}, props, args, {
680
+ items: items,
681
+ selectionMode: "expansion"
682
+ }), function (item) {
683
+ return ___EmotionJSX(Item, {
684
+ key: item.name,
685
+ textValue: item.name
686
+ }, ___EmotionJSX(ExampleContent, {
687
+ text: item.name
688
+ }), ___EmotionJSX(ExpandableChildren, null));
689
+ });
690
+ };
691
+ export var ControlledExpandableItems = function ControlledExpandableItems(_ref4) {
692
+ var args = _extends({}, (_objectDestructuringEmpty(_ref4), _ref4));
693
+ var _useState3 = useState(['Kangaroo']),
694
+ _useState4 = _slicedToArray(_useState3, 2),
695
+ expandedKeys = _useState4[0],
696
+ setExpandedKeys = _useState4[1];
697
+ var onExpandedKeyCallback = function onExpandedKeyCallback(e) {
698
+ setExpandedKeys(_Array$from(e));
699
+ };
700
+ var expandAllKeys = function expandAllKeys() {
701
+ setExpandedKeys(_mapInstanceProperty(items).call(items, function (_item) {
702
+ return _item.key;
703
+ }));
704
+ };
705
+ return ___EmotionJSX(Box, null, ___EmotionJSX(Button, {
706
+ onPress: function onPress() {
707
+ expandAllKeys();
708
+ }
709
+ }, "Expand all"), ___EmotionJSX(ListView, _extends({}, props, args, {
710
+ items: items,
711
+ expandedKeys: expandedKeys,
712
+ onExpandedChange: onExpandedKeyCallback,
713
+ selectionMode: "expansion"
714
+ }), function (item) {
715
+ return ___EmotionJSX(Item, {
716
+ key: item.name,
717
+ textValue: item.name
718
+ }, ___EmotionJSX(ExampleContent, {
719
+ text: item.name
720
+ }), ___EmotionJSX(ExpandableChildren, null));
721
+ }));
722
+ };
560
723
  export var InfiniteLoadingList = function InfiniteLoadingList(args) {
561
724
  var getMockData = /*#__PURE__*/function () {
562
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(signal, cursor) {
725
+ var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(signal, cursor) {
563
726
  var pageNumber;
564
727
  return _regeneratorRuntime().wrap(function _callee$(_context) {
565
728
  while (1) switch (_context.prev = _context.next) {
@@ -589,11 +752,11 @@ export var InfiniteLoadingList = function InfiniteLoadingList(args) {
589
752
  }, _callee);
590
753
  }));
591
754
  return function getMockData(_x, _x2) {
592
- return _ref2.apply(this, arguments);
755
+ return _ref5.apply(this, arguments);
593
756
  };
594
757
  }();
595
758
  var fetchApiData = /*#__PURE__*/function () {
596
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(signal, cursor, filterText) {
759
+ var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(signal, cursor, filterText) {
597
760
  var res, json;
598
761
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
599
762
  while (1) switch (_context2.prev = _context2.next) {
@@ -645,17 +808,17 @@ export var InfiniteLoadingList = function InfiniteLoadingList(args) {
645
808
  }, _callee2, null, [[2, 14]]);
646
809
  }));
647
810
  return function fetchApiData(_x3, _x4, _x5) {
648
- return _ref3.apply(this, arguments);
811
+ return _ref6.apply(this, arguments);
649
812
  };
650
813
  }();
651
814
  var list = useAsyncList({
652
- load: function load(_ref4) {
815
+ load: function load(_ref7) {
653
816
  return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
654
817
  var signal, cursor, filterText;
655
818
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
656
819
  while (1) switch (_context3.prev = _context3.next) {
657
820
  case 0:
658
- signal = _ref4.signal, cursor = _ref4.cursor, filterText = _ref4.filterText;
821
+ signal = _ref7.signal, cursor = _ref7.cursor, filterText = _ref7.filterText;
659
822
  if (cursor) {
660
823
  // eslint-disable-next-line
661
824
  cursor = cursor.replace(/^http:\/\//i, "https://");
@@ -706,8 +869,8 @@ InfiniteLoadingList.parameters = {
706
869
  }
707
870
  }
708
871
  };
709
- export var MultipleSelection = function MultipleSelection(_ref5) {
710
- var args = _extends({}, (_objectDestructuringEmpty(_ref5), _ref5));
872
+ export var MultipleSelection = function MultipleSelection(_ref8) {
873
+ var args = _extends({}, (_objectDestructuringEmpty(_ref8), _ref8));
711
874
  return ___EmotionJSX(ListView, _extends({}, props, args, {
712
875
  items: items,
713
876
  selectionMode: "multiple"
@@ -722,8 +885,8 @@ export var MultipleSelection = function MultipleSelection(_ref5) {
722
885
  }, ___EmotionJSX(Controls, null)));
723
886
  });
724
887
  };
725
- export var WithCharts = function WithCharts(_ref6) {
726
- var args = _extends({}, (_objectDestructuringEmpty(_ref6), _ref6));
888
+ export var WithCharts = function WithCharts(_ref9) {
889
+ var args = _extends({}, (_objectDestructuringEmpty(_ref9), _ref9));
727
890
  var chartContainerRef = useRef();
728
891
  return ___EmotionJSX(ListView, _extends({}, args, {
729
892
  items: items,