@pingux/astro 2.0.0-alpha.5 → 2.0.0-alpha.7

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 (210) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/lib/cjs/components/AccordionGridGroup/AccordionGridGroup.stories.js +51 -20
  3. package/lib/cjs/components/AccordionGroup/AccordionGroup.stories.js +16 -15
  4. package/lib/cjs/components/ArrayField/ArrayField.stories.js +24 -24
  5. package/lib/cjs/components/Avatar/Avatar.stories.js +3 -3
  6. package/lib/cjs/components/Badge/Badge.js +2 -2
  7. package/lib/cjs/components/Badge/Badge.stories.js +21 -24
  8. package/lib/cjs/components/Badge/Badge.styles.js +8 -18
  9. package/lib/cjs/components/Badge/Badge.test.js +3 -3
  10. package/lib/cjs/components/Breadcrumbs/Breadcrumbs.stories.js +5 -5
  11. package/lib/cjs/components/Button/Button.stories.js +15 -3
  12. package/lib/cjs/components/Button/Buttons.styles.js +9 -1
  13. package/lib/cjs/components/Callout/Callout.stories.js +9 -9
  14. package/lib/cjs/components/Card/Card.js +1 -1
  15. package/lib/cjs/components/CheckboxField/CheckboxField.stories.js +11 -14
  16. package/lib/cjs/components/CodeView/CodeView.stories.js +10 -19
  17. package/lib/cjs/components/CollapsiblePanel/CollapsiblePanel.stories.js +15 -16
  18. package/lib/cjs/components/CollapsiblePanel/CollapsiblePanel.styles.js +6 -5
  19. package/lib/cjs/components/ColorField/ColorField.js +1 -0
  20. package/lib/cjs/components/ColorField/ColorField.stories.js +3 -3
  21. package/lib/cjs/components/ColorField/ColorField.test.js +15 -0
  22. package/lib/cjs/components/ComboBoxField/ComboBoxField.stories.js +43 -44
  23. package/lib/cjs/components/CopyText/CopyButton.js +2 -1
  24. package/lib/cjs/components/CopyText/CopyText.stories.js +9 -11
  25. package/lib/cjs/components/CopyText/CopyText.styles.js +7 -5
  26. package/lib/cjs/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.stories.js +12 -13
  27. package/lib/cjs/components/FieldHelperText/FieldHelperText.stories.js +6 -6
  28. package/lib/cjs/components/FileInputField/FileInputField.stories.js +10 -11
  29. package/lib/cjs/components/HelpHint/HelpHint.stories.js +6 -7
  30. package/lib/cjs/components/HelpHint/HelpHint.styles.js +0 -3
  31. package/lib/cjs/components/Icon/Icon.stories.js +1 -1
  32. package/lib/cjs/components/IconBadge/IconBadge.stories.js +2 -3
  33. package/lib/cjs/components/IconButton/IconButton.js +3 -3
  34. package/lib/cjs/components/IconButton/IconButton.styles.js +1 -1
  35. package/lib/cjs/components/IconButtonToggle/IconButtonToggle.stories.js +4 -4
  36. package/lib/cjs/components/Image/Image.stories.js +9 -10
  37. package/lib/cjs/components/ImageUploadField/ImageUploadField.stories.js +9 -9
  38. package/lib/cjs/components/Input/Input.stories.js +5 -5
  39. package/lib/cjs/components/Label/Label.stories.js +5 -5
  40. package/lib/cjs/components/Link/Link.stories.js +3 -3
  41. package/lib/cjs/components/LinkSelectField/LinkSelectField.stories.js +46 -46
  42. package/lib/cjs/components/ListItem/ListItem.js +30 -15
  43. package/lib/cjs/components/ListItem/ListItem.stories.js +90 -26
  44. package/lib/cjs/components/ListItem/ListItem.test.js +46 -11
  45. package/lib/cjs/components/ListView/ListView.js +7 -1
  46. package/lib/cjs/components/ListView/ListView.stories.js +24 -25
  47. package/lib/cjs/components/ListViewItem/ListViewItem.js +4 -2
  48. package/lib/cjs/components/ListViewItem/ListViewItem.styles.js +8 -2
  49. package/lib/cjs/components/Loader/Loader.stories.js +4 -4
  50. package/lib/cjs/components/Menu/Menu.js +16 -5
  51. package/lib/cjs/components/Menu/Menu.stories.js +19 -9
  52. package/lib/cjs/components/Messages/Messages.stories.js +27 -27
  53. package/lib/cjs/components/MultivaluesField/MultivaluesField.js +6 -6
  54. package/lib/cjs/components/MultivaluesField/MultivaluesField.stories.js +46 -46
  55. package/lib/cjs/components/MultivaluesField/MultivaluesField.test.js +39 -39
  56. package/lib/cjs/components/NavBar/NavBar.stories.js +13 -2
  57. package/lib/cjs/components/NavBar/NavBar.test.js +9 -0
  58. package/lib/cjs/components/NavBarSection/NavBarItemHeader.js +64 -2
  59. package/lib/cjs/components/NavBarSection/NavBarSection.js +20 -2
  60. package/lib/cjs/components/NumberField/NumberField.stories.js +14 -14
  61. package/lib/cjs/components/PasswordField/PasswordField.stories.js +15 -15
  62. package/lib/cjs/components/RadioGroupField/RadioGroupField.stories.js +25 -26
  63. package/lib/cjs/components/RequirementsList/RequirementsList.stories.js +4 -4
  64. package/lib/cjs/components/RockerButtonGroup/RockerButtonGroup.stories.js +19 -20
  65. package/lib/cjs/components/RockerButtonGroup/RockerButtonGroup.test.js +3 -4
  66. package/lib/cjs/components/ScrollBox/ScrollBox.stories.js +4 -5
  67. package/lib/cjs/components/SearchField/SearchField.stories.js +8 -8
  68. package/lib/cjs/components/SelectField/SelectField.stories.js +47 -47
  69. package/lib/cjs/components/Separator/Separator.stories.js +6 -7
  70. package/lib/cjs/components/SwitchField/SwitchField.js +4 -2
  71. package/lib/cjs/components/SwitchField/SwitchField.stories.js +8 -9
  72. package/lib/cjs/components/Table/Table.stories.js +7 -13
  73. package/lib/cjs/components/Tabs/Tabs.stories.js +32 -36
  74. package/lib/cjs/components/TextAreaField/TextAreaField.stories.js +16 -17
  75. package/lib/cjs/components/TextField/TextField.stories.js +23 -24
  76. package/lib/cjs/components/TimeZonePicker/TimeZonePicker.stories.js +4 -4
  77. package/lib/cjs/components/TooltipTrigger/TooltipTrigger.stories.js +3 -5
  78. package/lib/cjs/{Patterns → patterns}/AttributeMappingDisplayViewPattern.stories.hidden.js +3 -3
  79. package/lib/cjs/{Patterns → patterns}/AttributeMappingEditViewPattern.stories.hidden.js +3 -3
  80. package/lib/cjs/recipes/Arrow.stories.js +4 -4
  81. package/lib/cjs/recipes/AttributeMappingReadOnlyField.stories.js +2 -2
  82. package/lib/cjs/recipes/CollapsiblePanel.stories.js +40 -40
  83. package/lib/cjs/recipes/CountryPicker.stories.js +4 -7
  84. package/lib/cjs/recipes/DraggableBox.stories.js +5 -7
  85. package/lib/cjs/recipes/FlippableCaretMenuButton.stories.js +1 -2
  86. package/lib/cjs/recipes/LinkedListView.stories.js +9 -9
  87. package/lib/cjs/recipes/ListAndPanel.stories.js +71 -21
  88. package/lib/cjs/recipes/LogoTabs.stories.js +3 -3
  89. package/lib/cjs/recipes/NeutralInput.stories.js +2 -2
  90. package/lib/cjs/recipes/OneWayToBidirectionalArrow.stories.js +6 -7
  91. package/lib/cjs/recipes/PanelHeader.stories.js +10 -15
  92. package/lib/cjs/recipes/RadioButtonsWithLinks.stories.js +2 -4
  93. package/lib/cjs/recipes/{SelectedFieldOverlay.story.js → SelectedFieldOverlay.stories.js} +5 -7
  94. package/lib/cjs/recipes/StatsCircle.stories.js +4 -5
  95. package/lib/cjs/recipes/TrialExperienceIndustryButtons.stories.js +2 -2
  96. package/lib/cjs/styles/colors.js +3 -1
  97. package/lib/cjs/styles/themes/astro-nano/astro-nano.js +17 -17
  98. package/lib/cjs/utils/devUtils/props/hoverProps.js +54 -0
  99. package/lib/components/AccordionGridGroup/AccordionGridGroup.stories.js +44 -11
  100. package/lib/components/AccordionGroup/AccordionGroup.stories.js +6 -5
  101. package/lib/components/ArrayField/ArrayField.stories.js +1 -1
  102. package/lib/components/Avatar/Avatar.stories.js +1 -1
  103. package/lib/components/Badge/Badge.js +2 -2
  104. package/lib/components/Badge/Badge.stories.js +4 -7
  105. package/lib/components/Badge/Badge.styles.js +7 -16
  106. package/lib/components/Badge/Badge.test.js +3 -3
  107. package/lib/components/Breadcrumbs/Breadcrumbs.stories.js +1 -1
  108. package/lib/components/Button/Button.stories.js +11 -1
  109. package/lib/components/Button/Buttons.styles.js +9 -1
  110. package/lib/components/Callout/Callout.stories.js +1 -1
  111. package/lib/components/Card/Card.js +1 -1
  112. package/lib/components/CheckboxField/CheckboxField.stories.js +1 -4
  113. package/lib/components/CodeView/CodeView.stories.js +5 -14
  114. package/lib/components/CollapsiblePanel/CollapsiblePanel.stories.js +11 -12
  115. package/lib/components/CollapsiblePanel/CollapsiblePanel.styles.js +6 -5
  116. package/lib/components/ColorField/ColorField.js +1 -0
  117. package/lib/components/ColorField/ColorField.stories.js +1 -1
  118. package/lib/components/ColorField/ColorField.test.js +15 -0
  119. package/lib/components/ComboBoxField/ComboBoxField.stories.js +1 -2
  120. package/lib/components/CopyText/CopyButton.js +2 -1
  121. package/lib/components/CopyText/CopyText.stories.js +1 -3
  122. package/lib/components/CopyText/CopyText.styles.js +7 -5
  123. package/lib/components/EnvironmentBreadcrumb/EnvironmentBreadcrumb.stories.js +2 -3
  124. package/lib/components/FieldHelperText/FieldHelperText.stories.js +1 -1
  125. package/lib/components/FileInputField/FileInputField.stories.js +1 -2
  126. package/lib/components/HelpHint/HelpHint.stories.js +1 -2
  127. package/lib/components/HelpHint/HelpHint.styles.js +0 -3
  128. package/lib/components/Icon/Icon.stories.js +1 -1
  129. package/lib/components/IconBadge/IconBadge.stories.js +1 -2
  130. package/lib/components/IconButton/IconButton.js +3 -3
  131. package/lib/components/IconButton/IconButton.styles.js +2 -2
  132. package/lib/components/IconButtonToggle/IconButtonToggle.stories.js +1 -1
  133. package/lib/components/Image/Image.stories.js +1 -2
  134. package/lib/components/ImageUploadField/ImageUploadField.stories.js +1 -1
  135. package/lib/components/Input/Input.stories.js +1 -1
  136. package/lib/components/Label/Label.stories.js +1 -1
  137. package/lib/components/Link/Link.stories.js +1 -1
  138. package/lib/components/LinkSelectField/LinkSelectField.stories.js +1 -1
  139. package/lib/components/ListItem/ListItem.js +30 -13
  140. package/lib/components/ListItem/ListItem.stories.js +68 -8
  141. package/lib/components/ListItem/ListItem.test.js +46 -11
  142. package/lib/components/ListView/ListView.js +7 -1
  143. package/lib/components/ListView/ListView.stories.js +1 -2
  144. package/lib/components/ListViewItem/ListViewItem.js +4 -2
  145. package/lib/components/ListViewItem/ListViewItem.styles.js +8 -2
  146. package/lib/components/Loader/Loader.stories.js +1 -1
  147. package/lib/components/Menu/Menu.js +16 -5
  148. package/lib/components/Menu/Menu.stories.js +15 -4
  149. package/lib/components/Messages/Messages.stories.js +1 -1
  150. package/lib/components/MultivaluesField/MultivaluesField.js +6 -6
  151. package/lib/components/MultivaluesField/MultivaluesField.stories.js +8 -8
  152. package/lib/components/MultivaluesField/MultivaluesField.test.js +39 -39
  153. package/lib/components/NavBar/NavBar.stories.js +13 -2
  154. package/lib/components/NavBar/NavBar.test.js +9 -0
  155. package/lib/components/NavBarSection/NavBarItemHeader.js +64 -2
  156. package/lib/components/NavBarSection/NavBarSection.js +21 -3
  157. package/lib/components/NumberField/NumberField.stories.js +1 -1
  158. package/lib/components/PasswordField/PasswordField.stories.js +1 -1
  159. package/lib/components/RadioGroupField/RadioGroupField.stories.js +1 -2
  160. package/lib/components/RequirementsList/RequirementsList.stories.js +1 -1
  161. package/lib/components/RockerButtonGroup/RockerButtonGroup.stories.js +1 -2
  162. package/lib/components/RockerButtonGroup/RockerButtonGroup.test.js +1 -2
  163. package/lib/components/ScrollBox/ScrollBox.stories.js +1 -2
  164. package/lib/components/SearchField/SearchField.stories.js +1 -1
  165. package/lib/components/SelectField/SelectField.stories.js +1 -1
  166. package/lib/components/Separator/Separator.stories.js +1 -2
  167. package/lib/components/SwitchField/SwitchField.js +4 -2
  168. package/lib/components/SwitchField/SwitchField.stories.js +1 -2
  169. package/lib/components/Table/Table.stories.js +1 -7
  170. package/lib/components/Tabs/Tabs.stories.js +1 -5
  171. package/lib/components/TextAreaField/TextAreaField.stories.js +1 -2
  172. package/lib/components/TextField/TextField.stories.js +1 -2
  173. package/lib/components/TimeZonePicker/TimeZonePicker.stories.js +1 -1
  174. package/lib/components/TooltipTrigger/TooltipTrigger.stories.js +1 -3
  175. package/lib/{Patterns → patterns}/AttributeMappingDisplayViewPattern.stories.hidden.js +3 -3
  176. package/lib/{Patterns → patterns}/AttributeMappingEditViewPattern.stories.hidden.js +3 -3
  177. package/lib/recipes/Arrow.stories.js +1 -1
  178. package/lib/recipes/AttributeMappingReadOnlyField.stories.js +2 -2
  179. package/lib/recipes/CollapsiblePanel.stories.js +11 -11
  180. package/lib/recipes/CountryPicker.stories.js +1 -4
  181. package/lib/recipes/DraggableBox.stories.js +1 -3
  182. package/lib/recipes/FlippableCaretMenuButton.stories.js +1 -2
  183. package/lib/recipes/LinkedListView.stories.js +9 -9
  184. package/lib/recipes/ListAndPanel.stories.js +72 -22
  185. package/lib/recipes/LogoTabs.stories.js +1 -1
  186. package/lib/recipes/NeutralInput.stories.js +1 -1
  187. package/lib/recipes/OneWayToBidirectionalArrow.stories.js +1 -2
  188. package/lib/recipes/PanelHeader.stories.js +1 -6
  189. package/lib/recipes/RadioButtonsWithLinks.stories.js +1 -3
  190. package/lib/recipes/{SelectedFieldOverlay.story.js → SelectedFieldOverlay.stories.js} +1 -3
  191. package/lib/recipes/StatsCircle.stories.js +1 -2
  192. package/lib/recipes/TrialExperienceIndustryButtons.stories.js +1 -1
  193. package/lib/styles/colors.js +3 -1
  194. package/lib/styles/themes/astro-nano/astro-nano.js +17 -17
  195. package/lib/utils/devUtils/props/hoverProps.js +44 -0
  196. package/package.json +2 -2
  197. package/lib/cjs/components/PageHeader/PageHeader.js +0 -52
  198. package/lib/cjs/components/PageHeader/PageHeader.stories.js +0 -36
  199. package/lib/cjs/components/PageHeader/PageHeader.test.js +0 -25
  200. package/lib/components/PageHeader/PageHeader.js +0 -38
  201. package/lib/components/PageHeader/PageHeader.stories.js +0 -26
  202. package/lib/components/PageHeader/PageHeader.test.js +0 -22
  203. /package/lib/cjs/{Patterns → patterns}/ListAndPanelPattern.stories.hidden.js +0 -0
  204. /package/lib/cjs/{Patterns → patterns}/MessagesPattern.stories.hidden.js +0 -0
  205. /package/lib/cjs/{Patterns → patterns}/SaveBarPattern.stories.hidden.js +0 -0
  206. /package/lib/cjs/{Patterns → patterns}/UnsavedChangesPattern.stories.hidden.js +0 -0
  207. /package/lib/{Patterns → patterns}/ListAndPanelPattern.stories.hidden.js +0 -0
  208. /package/lib/{Patterns → patterns}/MessagesPattern.stories.hidden.js +0 -0
  209. /package/lib/{Patterns → patterns}/SaveBarPattern.stories.hidden.js +0 -0
  210. /package/lib/{Patterns → patterns}/UnsavedChangesPattern.stories.hidden.js +0 -0
@@ -1,12 +1,21 @@
1
- import React from 'react';
1
+ import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
2
+ import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
3
+ import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
4
+ import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
5
+ import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
6
+ import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
7
+ import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
8
+ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
9
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
10
+ import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
11
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
12
+ 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; }
13
+ 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; }
14
+ import React, { useState } from 'react';
2
15
  import AccountIcon from 'mdi-react/AccountIcon';
3
16
  import MoreVertIcon from 'mdi-react/MoreVertIcon';
4
- import Box from '../Box';
5
- import Icon from '../Icon';
6
- import IconButton from '../IconButton';
7
- import Separator from '../Separator';
8
- import Text from '../Text';
9
- import ListItem from './ListItem';
17
+ import { Box, Icon, IconButton, ListItem, Separator, Text } from '../../index';
18
+ import { onHoverArgTypes } from '../../utils/devUtils/props/hoverProps';
10
19
  import { jsx as ___EmotionJSX } from "@emotion/react";
11
20
  export default {
12
21
  title: 'Components/ListItem',
@@ -17,7 +26,8 @@ export default {
17
26
  type: 'code'
18
27
  }
19
28
  }
20
- }
29
+ },
30
+ argTypes: _objectSpread({}, onHoverArgTypes)
21
31
  };
22
32
  export var Default = function Default(args) {
23
33
  return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(Separator, {
@@ -74,4 +84,54 @@ export var WithSubtitle = function WithSubtitle(args) {
74
84
  })))), ___EmotionJSX(Separator, {
75
85
  margin: 0
76
86
  }));
87
+ };
88
+ export var WithHoverHandlers = function WithHoverHandlers(args) {
89
+ var _useState = useState(false),
90
+ _useState2 = _slicedToArray(_useState, 2),
91
+ isHovered = _useState2[0],
92
+ setIsHovered = _useState2[1];
93
+ var handleHoverChange = function handleHoverChange() {
94
+ setIsHovered(function (previousIsHovered) {
95
+ return !previousIsHovered;
96
+ });
97
+ };
98
+ var sx = function sx(shouldTranslate) {
99
+ return {
100
+ transform: "".concat(shouldTranslate ? 'translate(15px)' : 'translate(0)')
101
+ };
102
+ };
103
+ return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(Separator, {
104
+ margin: 0
105
+ }), ___EmotionJSX(ListItem, _extends({}, args, {
106
+ onHoverEnd: handleHoverChange,
107
+ onHoverStart: handleHoverChange
108
+ }), ___EmotionJSX(Box, {
109
+ isRow: true,
110
+ mr: "auto",
111
+ alignSelf: "center"
112
+ }, ___EmotionJSX(Icon, {
113
+ icon: AccountIcon,
114
+ alignSelf: "center",
115
+ mr: "sm",
116
+ color: "accent.40",
117
+ size: 32
118
+ }), ___EmotionJSX(Box, {
119
+ sx: sx(isHovered)
120
+ }, ___EmotionJSX(Text, {
121
+ variant: "itemTitle"
122
+ }, "Fons Vernall"), ___EmotionJSX(Text, {
123
+ variant: "itemSubtitle",
124
+ mt: 1
125
+ }, "fvernall0@google.it"))), ___EmotionJSX(Box, {
126
+ isRow: true,
127
+ alignSelf: "center"
128
+ }, ___EmotionJSX(IconButton, {
129
+ size: 26
130
+ }, ___EmotionJSX(Icon, {
131
+ icon: MoreVertIcon,
132
+ size: 20,
133
+ color: "neutral.20"
134
+ })))), ___EmotionJSX(Separator, {
135
+ margin: 0
136
+ }));
77
137
  };
@@ -1,16 +1,20 @@
1
1
  import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
2
2
  import React from 'react';
3
3
  import { render, screen } from '@testing-library/react';
4
+ import userEvent from '@testing-library/user-event';
4
5
  import axeTest from '../../utils/testUtils/testAxe';
5
6
  import ListItem from './ListItem';
6
7
  import { jsx as ___EmotionJSX } from "@emotion/react";
7
8
  var testTitle = 'Test Title';
9
+ var TEST_ID = 'ListItem-testid';
8
10
  var defaultProps = {
9
11
  title: testTitle
10
12
  };
11
13
  var getComponent = function getComponent() {
12
14
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
13
- return render(___EmotionJSX(ListItem, _extends({}, defaultProps, props)));
15
+ return render(___EmotionJSX(ListItem, _extends({}, defaultProps, props, {
16
+ "data-testid": TEST_ID
17
+ })));
14
18
  };
15
19
 
16
20
  // Need to be added to each test file to test accessibility using axe.
@@ -22,15 +26,46 @@ axeTest(getComponent, {
22
26
  }
23
27
  }
24
28
  });
25
- test('renders ListItem component title', function () {
26
- getComponent();
27
- var title = screen.getByRole('listitem');
28
- expect(title).toBeInTheDocument();
29
- });
30
- test('renders ListItem component with selected state', function () {
31
- getComponent({
32
- isSelected: true
29
+ describe('ListItem', function () {
30
+ test('renders ListItem component title', function () {
31
+ getComponent();
32
+ var title = screen.getByTestId(TEST_ID);
33
+ expect(title).toBeInTheDocument();
34
+ });
35
+ test('renders ListItem component with selected state', function () {
36
+ getComponent({
37
+ isSelected: true
38
+ });
39
+ var title = screen.getByTestId(TEST_ID);
40
+ expect(title).toHaveClass('is-selected');
41
+ });
42
+ describe('when hovered', function () {
43
+ var onHoverTest;
44
+ beforeEach(function () {
45
+ onHoverTest = jest.fn();
46
+ });
47
+ test('it calls the onHoverChange callback', function () {
48
+ getComponent({
49
+ onHoverChange: onHoverTest
50
+ });
51
+ userEvent.hover(screen.getByTestId(TEST_ID));
52
+ expect(onHoverTest).toHaveBeenCalled();
53
+ });
54
+ test('it calls the onHoverStart callback', function () {
55
+ getComponent({
56
+ onHoverStart: onHoverTest
57
+ });
58
+ userEvent.hover(screen.getByTestId(TEST_ID));
59
+ expect(onHoverTest).toHaveBeenCalled();
60
+ });
61
+ test('it calls the onHoverEnd callback when unhovered', function () {
62
+ getComponent({
63
+ onHoverEnd: onHoverTest
64
+ });
65
+ var listItem = screen.getByTestId(TEST_ID);
66
+ userEvent.hover(listItem);
67
+ userEvent.unhover(listItem);
68
+ expect(onHoverTest).toHaveBeenCalled();
69
+ });
33
70
  });
34
- var title = screen.getByRole('listitem');
35
- expect(title).toHaveClass('is-selected');
36
71
  });
@@ -9,7 +9,7 @@ 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 = ["disabledKeys", "loadingState", "onLoadMore", "onSelectionChange", "selectionMode", "selectionStyle"];
12
+ var _excluded = ["disabledKeys", "isHoverable", "loadingState", "onLoadMore", "onSelectionChange", "selectedKeys", "selectionMode", "selectionStyle"];
13
13
  import _Object$values from "@babel/runtime-corejs3/core-js-stable/object/values";
14
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; }
15
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; }
@@ -69,9 +69,12 @@ export function useListLayout(state) {
69
69
 
70
70
  var ListView = /*#__PURE__*/forwardRef(function (props, ref) {
71
71
  var disabledKeys = props.disabledKeys,
72
+ _props$isHoverable = props.isHoverable,
73
+ isHoverable = _props$isHoverable === void 0 ? true : _props$isHoverable,
72
74
  loadingState = props.loadingState,
73
75
  onLoadMore = props.onLoadMore,
74
76
  onSelectionChange = props.onSelectionChange,
77
+ selectedKeys = props.selectedKeys,
75
78
  selectionMode = props.selectionMode,
76
79
  selectionStyle = props.selectionStyle,
77
80
  others = _objectWithoutProperties(props, _excluded);
@@ -131,6 +134,7 @@ var ListView = /*#__PURE__*/forwardRef(function (props, ref) {
131
134
  }), function (type, item) {
132
135
  if (type === 'item') {
133
136
  return ___EmotionJSX(ListViewItem, {
137
+ isHoverable: isHoverable,
134
138
  item: item
135
139
  });
136
140
  }
@@ -155,6 +159,8 @@ ListView.propTypes = {
155
159
  items: isIterableProp,
156
160
  /** The element's unique identifier. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id). */
157
161
  id: PropTypes.string,
162
+ /** Whether ListView should handle hover state (defaults to true) */
163
+ isHoverable: PropTypes.bool,
158
164
  /** Defines a string value that labels the current element. */
159
165
  'aria-label': PropTypes.string,
160
166
  /** Identifies the element (or elements) that labels the current element. */
@@ -22,9 +22,8 @@ import isChromatic from 'chromatic/isChromatic';
22
22
  import CreateIcon from 'mdi-react/CreateIcon';
23
23
  import FormSelectIcon from 'mdi-react/FormSelectIcon';
24
24
  import MoreVertIcon from 'mdi-react/MoreVertIcon';
25
- import { Box, Icon, IconButton, Text } from '../..';
25
+ import { Box, Icon, IconButton, ListView, Text } from '../../index';
26
26
  import loadingStates from '../../utils/devUtils/constants/loadingStates';
27
- import ListView from '.';
28
27
  import { jsx as ___EmotionJSX } from "@emotion/react";
29
28
  export default {
30
29
  title: 'Components/ListView',
@@ -16,6 +16,7 @@ var ListViewItem = function ListViewItem(props) {
16
16
  _props$item$props$has = _props$item$props.hasSeparator,
17
17
  hasSeparator = _props$item$props$has === void 0 ? true : _props$item$props$has,
18
18
  hasInsetSeparator = _props$item$props.hasInsetSeparator,
19
+ isHoverable = props.isHoverable,
19
20
  className = props.className;
20
21
  var dataId = item.props['data-id'];
21
22
  var _useContext = useContext(ListViewContext),
@@ -44,7 +45,7 @@ var ListViewItem = function ListViewItem(props) {
44
45
  var isSelected = state.selectionManager.isSelected(item.key);
45
46
  var mergedProps = mergeProps(raRowProps, hoverProps, focusWithinProps, focusProps);
46
47
  var _useStatusClasses = useStatusClasses(className, {
47
- isHovered: isSelectable && isHovered,
48
+ isHovered: isSelectable && isHovered && isHoverable,
48
49
  isSelected: isSelected,
49
50
  isFocused: isDisabled ? false : isFocusVisible || isFocusVisibleWithin,
50
51
  hasSeparator: hasSeparator,
@@ -81,6 +82,7 @@ ListViewItem.propTypes = {
81
82
  hasSeparator: PropTypes.bool,
82
83
  hasInsetSeparator: PropTypes.bool
83
84
  })
84
- })
85
+ }),
86
+ isHoverable: PropTypes.bool
85
87
  };
86
88
  export default ListViewItem;
@@ -17,6 +17,9 @@ var container = {
17
17
  justifyContent: 'center',
18
18
  bg: 'accent.99',
19
19
  outline: 'none',
20
+ '& li': {
21
+ bg: 'white'
22
+ },
20
23
  '&.is-selected': {
21
24
  bg: 'white'
22
25
  },
@@ -29,12 +32,15 @@ var container = {
29
32
  },
30
33
  '&.has-separator': {
31
34
  borderBottom: '1px solid',
32
- borderBottomColor: 'line.hairline'
35
+ borderBottomColor: 'line.light'
33
36
  }
34
37
  };
35
38
  var linkedViewContainer = _objectSpread(_objectSpread({}, container), {}, {
36
39
  minHeight: '75px',
37
40
  height: '76px',
41
+ '& li': {
42
+ bg: 'white'
43
+ },
38
44
  '&.has-inset-separator': {
39
45
  '&:after': {
40
46
  content: '""',
@@ -43,7 +49,7 @@ var linkedViewContainer = _objectSpread(_objectSpread({}, container), {}, {
43
49
  right: 0,
44
50
  bottom: 0,
45
51
  borderBottom: '1px solid',
46
- borderBottomColor: 'line.hairline'
52
+ borderBottomColor: 'line.light'
47
53
  },
48
54
  '&.is-focused': {
49
55
  '&:after': {
@@ -1,8 +1,8 @@
1
1
  import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
2
2
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
3
3
  import React from 'react';
4
+ import { Loader } from '../../index';
4
5
  import { flatColorList } from '../../styles/colors';
5
- import Loader from '.';
6
6
  import { jsx as ___EmotionJSX } from "@emotion/react";
7
7
  export default {
8
8
  title: 'Components/Loader',
@@ -9,7 +9,7 @@ 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 = ["isDisabled", "onAction", "onSelectionChange", "isNotFocusedOnHover"];
12
+ var _excluded = ["isDisabled", "isNotFocusedOnHover", "onAction", "onHoverChange", "onHoverEnd", "onHoverStart", "onSelectionChange"];
13
13
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
14
14
  import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from";
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; }
@@ -17,11 +17,13 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
17
17
  import React, { forwardRef, useContext, useImperativeHandle, useRef } from 'react';
18
18
  import { mergeProps, useFocusRing, useMenu } from 'react-aria';
19
19
  import { useTreeState } from 'react-stately';
20
+ import { useHover } from '@react-aria/interactions';
20
21
  import { useSyncRef } from '@react-aria/utils';
21
22
  import PropTypes from 'prop-types';
22
23
  import { MenuContext } from '../../context/MenuContext';
23
24
  import { usePropWarning } from '../../hooks';
24
25
  import ORIENTATION from '../../utils/devUtils/constants/orientation';
26
+ import { onHoverPropTypes } from '../../utils/devUtils/props/hoverProps';
25
27
  import Box from '../Box';
26
28
  import MenuItem from '../MenuItem';
27
29
 
@@ -35,12 +37,21 @@ import { jsx as ___EmotionJSX } from "@emotion/react";
35
37
  var Menu = /*#__PURE__*/forwardRef(function (props, ref) {
36
38
  var _context;
37
39
  var isDisabled = props.isDisabled,
40
+ isNotFocusedOnHover = props.isNotFocusedOnHover,
38
41
  onAction = props.onAction,
42
+ onHoverChange = props.onHoverChange,
43
+ onHoverEnd = props.onHoverEnd,
44
+ onHoverStart = props.onHoverStart,
39
45
  onSelectionChange = props.onSelectionChange,
40
- isNotFocusedOnHover = props.isNotFocusedOnHover,
41
46
  others = _objectWithoutProperties(props, _excluded);
42
47
  var contextProps = useContext(MenuContext);
43
48
  var completeProps = _objectSpread({}, mergeProps(contextProps, props));
49
+ var _useHover = useHover({
50
+ onHoverChange: onHoverChange,
51
+ onHoverEnd: onHoverEnd,
52
+ onHoverStart: onHoverStart
53
+ }),
54
+ hoverProps = _useHover.hoverProps;
44
55
  var state = useTreeState(completeProps);
45
56
  var menuRef = useRef();
46
57
  usePropWarning(props, 'disabled', 'isDisabled');
@@ -63,7 +74,7 @@ var Menu = /*#__PURE__*/forwardRef(function (props, ref) {
63
74
  ref: menuRef,
64
75
  variant: "menu",
65
76
  "aria-orientation": ORIENTATION.VERTICAL
66
- }, others, mergeProps(focusProps, menuProps)), _mapInstanceProperty(_context = _Array$from(state.collection)).call(_context, function (item) {
77
+ }, others, mergeProps(focusProps, menuProps, hoverProps)), _mapInstanceProperty(_context = _Array$from(state.collection)).call(_context, function (item) {
67
78
  return ___EmotionJSX(MenuItem, {
68
79
  key: item.key,
69
80
  item: item,
@@ -75,7 +86,7 @@ var Menu = /*#__PURE__*/forwardRef(function (props, ref) {
75
86
  });
76
87
  }));
77
88
  });
78
- Menu.propTypes = {
89
+ Menu.propTypes = _objectSpread({
79
90
  /** The type of selection that is allowed. */
80
91
  selectionMode: PropTypes.oneOf(['none', 'single', 'multiple']),
81
92
  /**
@@ -126,7 +137,7 @@ Menu.propTypes = {
126
137
  * extended description for the object.
127
138
  */
128
139
  'aria-details': PropTypes.string
129
- };
140
+ }, onHoverPropTypes);
130
141
  Menu.defaultProps = {
131
142
  selectionMode: 'none',
132
143
  isDisabled: false
@@ -1,9 +1,20 @@
1
+ import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
2
+ import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
3
+ import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
4
+ import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
5
+ import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
6
+ import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
7
+ import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
8
+ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
1
9
  import _objectDestructuringEmpty from "@babel/runtime-corejs3/helpers/esm/objectDestructuringEmpty";
2
10
  import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
11
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
12
+ 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; }
13
+ 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; }
3
14
  import React from 'react';
4
15
  import { Item } from 'react-stately';
5
- import Text from '../Text';
6
- import Menu from '.';
16
+ import { Menu, Text } from '../../index';
17
+ import { onHoverArgTypes } from '../../utils/devUtils/props/hoverProps';
7
18
  import { jsx as ___EmotionJSX } from "@emotion/react";
8
19
  export default {
9
20
  title: 'Components/Menu',
@@ -18,7 +29,7 @@ export default {
18
29
  }
19
30
  }
20
31
  },
21
- argTypes: {
32
+ argTypes: _objectSpread({
22
33
  selectionMode: {},
23
34
  isDisabled: {},
24
35
  isNotFocusedOnHover: {},
@@ -62,7 +73,7 @@ export default {
62
73
  type: 'none'
63
74
  }
64
75
  }
65
- }
76
+ }, onHoverArgTypes)
66
77
  };
67
78
  export var Default = function Default(_ref) {
68
79
  var args = _extends({}, (_objectDestructuringEmpty(_ref), _ref));
@@ -18,7 +18,7 @@ import _Object$values from "@babel/runtime-corejs3/core-js-stable/object/values"
18
18
  import React, { useEffect, useReducer, useState } from 'react';
19
19
  import { Item } from 'react-stately';
20
20
  import AccountIcon from 'mdi-react/AccountIcon';
21
- import { Box, Button, Messages } from '../..';
21
+ import { Box, Button, Messages } from '../../index';
22
22
  import statuses from '../../utils/devUtils/constants/statuses';
23
23
  import { messagesReducerStory as messagesReducer, multiMessagesReducerStory as multiMessagesReducer } from './index';
24
24
  import { jsx as ___EmotionJSX } from "@emotion/react";
@@ -189,7 +189,7 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
189
189
  useEffect(function () {
190
190
  if (onOpenChange) onOpenChange(isOpen);
191
191
  }, [isOpen]);
192
- var addNewChipFromInput = function addNewChipFromInput(inputValue) {
192
+ var addNewBadgeFromInput = function addNewBadgeFromInput(inputValue) {
193
193
  var _context3, _context4;
194
194
  var key = inputValue;
195
195
  if (state.selectionManager.isSelected(key)) {
@@ -220,7 +220,7 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
220
220
  if (!hasCustomValue && filteredItems.length === 1) {
221
221
  selectTheOnlyFilteredItem();
222
222
  } else if (hasCustomValue) {
223
- addNewChipFromInput(filterString);
223
+ addNewBadgeFromInput(filterString);
224
224
  }
225
225
  };
226
226
 
@@ -243,7 +243,7 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
243
243
  if (_key === '') {
244
244
  return;
245
245
  }
246
- addNewChipFromInput(e.target.value);
246
+ addNewBadgeFromInput(e.target.value);
247
247
  }
248
248
  break;
249
249
  }
@@ -315,7 +315,7 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
315
315
  }
316
316
  return null;
317
317
  });
318
- var multivaluesFieldChip = function multivaluesFieldChip(item) {
318
+ var multivaluesFieldBadge = function multivaluesFieldBadge(item) {
319
319
  return ___EmotionJSX(Badge, _extends({
320
320
  key: item.key,
321
321
  role: "presentation",
@@ -323,7 +323,7 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
323
323
  bg: "active",
324
324
  label: item.name,
325
325
  slots: item.slots
326
- }, item.chipProps), ___EmotionJSX(IconButton, _extends({
326
+ }, item.badgeProps), ___EmotionJSX(IconButton, _extends({
327
327
  "aria-label": "delete",
328
328
  onPress: function onPress() {
329
329
  return deleteItem(item.key);
@@ -341,7 +341,7 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
341
341
  return el.key === key;
342
342
  });
343
343
  if (item) {
344
- return multivaluesFieldChip(item);
344
+ return multivaluesFieldBadge(item);
345
345
  }
346
346
  return null;
347
347
  }));
@@ -12,7 +12,7 @@ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
12
12
  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; }
13
13
  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; }
14
14
  import React, { useState } from 'react';
15
- import { Box, Icon, Item, MultivaluesField, OverlayProvider } from '../..';
15
+ import { Box, Icon, Item, MultivaluesField, OverlayProvider } from '../../index';
16
16
  import statuses from '../../utils/devUtils/constants/statuses';
17
17
  import { ariaAttributeBaseArgTypes } from '../../utils/devUtils/props/ariaAttributes';
18
18
  import { inputFieldAttributeBaseArgTypes } from '../../utils/devUtils/props/fieldAttributes';
@@ -208,12 +208,12 @@ var itemsWithSlots = [{
208
208
  id: 1,
209
209
  name: 'Aardvark',
210
210
  key: 'Aardvark',
211
- chipProps: {
211
+ badgeProps: {
212
212
  variant: 'itemBadgeWithSlot',
213
213
  bg: 'white'
214
214
  },
215
215
  buttonProps: {
216
- variant: 'chipWithSlotDeleteButton'
216
+ variant: 'badgeDeleteButton'
217
217
  },
218
218
  slots: {
219
219
  leftIcon: ___EmotionJSX(Icon, {
@@ -225,12 +225,12 @@ var itemsWithSlots = [{
225
225
  id: 2,
226
226
  name: 'Kangaroo',
227
227
  key: 'Kangaroo',
228
- chipProps: {
228
+ badgeProps: {
229
229
  variant: 'itemBadgeWithSlot',
230
230
  bg: 'white'
231
231
  },
232
232
  buttonProps: {
233
- variant: 'chipWithSlotDeleteButton'
233
+ variant: 'badgeDeleteButton'
234
234
  },
235
235
  slots: {
236
236
  leftIcon: ___EmotionJSX(Icon, {
@@ -242,12 +242,12 @@ var itemsWithSlots = [{
242
242
  id: 3,
243
243
  name: 'Snake',
244
244
  key: 'Snake',
245
- chipProps: {
245
+ badgeProps: {
246
246
  variant: 'itemBadgeWithSlot',
247
247
  bg: 'white'
248
248
  },
249
249
  buttonProps: {
250
- variant: 'chipWithSlotDeleteButton'
250
+ variant: 'badgeDeleteButton'
251
251
  },
252
252
  slots: {
253
253
  leftIcon: ___EmotionJSX(Icon, {
@@ -473,7 +473,7 @@ CustomValues.argTypes = {
473
473
  defaultValue: 'non-restrictive'
474
474
  }
475
475
  };
476
- export var IconSlotsInChip = function IconSlotsInChip(args) {
476
+ export var IconSlotsInBadge = function IconSlotsInBadge(args) {
477
477
  var _useState19 = useState(false),
478
478
  _useState20 = _slicedToArray(_useState19, 2),
479
479
  isOpen = _useState20[0],