@dxc-technology/halstack-react 0.0.0-c293b72 → 0.0.0-c2b6ec9

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 (308) hide show
  1. package/BackgroundColorContext.js +1 -1
  2. package/HalstackContext.d.ts +2 -5
  3. package/HalstackContext.js +6 -6
  4. package/accordion/Accordion.accessibility.test.d.ts +1 -0
  5. package/accordion/Accordion.accessibility.test.js +4 -4
  6. package/accordion/Accordion.js +9 -10
  7. package/accordion/Accordion.stories.tsx +4 -14
  8. package/accordion/Accordion.test.d.ts +1 -0
  9. package/accordion/Accordion.test.js +3 -3
  10. package/accordion-group/AccordionGroup.accessibility.test.d.ts +1 -0
  11. package/accordion-group/AccordionGroup.accessibility.test.js +11 -17
  12. package/accordion-group/AccordionGroup.js +1 -1
  13. package/accordion-group/AccordionGroup.stories.tsx +23 -23
  14. package/accordion-group/AccordionGroup.test.d.ts +1 -0
  15. package/accordion-group/AccordionGroup.test.js +5 -9
  16. package/accordion-group/AccordionGroupAccordion.js +1 -1
  17. package/action-icon/ActionIcon.accessibility.test.d.ts +1 -0
  18. package/action-icon/ActionIcon.accessibility.test.js +4 -4
  19. package/action-icon/ActionIcon.test.d.ts +1 -0
  20. package/action-icon/ActionIcon.test.js +1 -1
  21. package/alert/Alert.accessibility.test.d.ts +1 -0
  22. package/alert/Alert.accessibility.test.js +6 -6
  23. package/alert/Alert.js +6 -3
  24. package/alert/Alert.test.d.ts +1 -0
  25. package/alert/Alert.test.js +1 -1
  26. package/badge/Badge.accessibility.test.d.ts +1 -0
  27. package/badge/Badge.accessibility.test.js +5 -5
  28. package/badge/Badge.test.d.ts +1 -0
  29. package/badge/Badge.test.js +2 -2
  30. package/box/Box.accessibility.test.d.ts +1 -0
  31. package/box/Box.accessibility.test.js +3 -3
  32. package/box/Box.js +1 -1
  33. package/box/Box.test.d.ts +1 -0
  34. package/box/Box.test.js +1 -1
  35. package/breadcrumbs/Breadcrumbs.accessibility.test.d.ts +1 -0
  36. package/breadcrumbs/Breadcrumbs.accessibility.test.js +96 -0
  37. package/breadcrumbs/Breadcrumbs.d.ts +4 -0
  38. package/breadcrumbs/Breadcrumbs.js +79 -0
  39. package/breadcrumbs/Breadcrumbs.stories.tsx +194 -0
  40. package/breadcrumbs/Breadcrumbs.test.d.ts +1 -0
  41. package/breadcrumbs/Breadcrumbs.test.js +168 -0
  42. package/breadcrumbs/Item.d.ts +4 -0
  43. package/breadcrumbs/Item.js +52 -0
  44. package/breadcrumbs/dropdownTheme.d.ts +53 -0
  45. package/breadcrumbs/dropdownTheme.js +62 -0
  46. package/breadcrumbs/types.d.ts +16 -0
  47. package/breadcrumbs/types.js +5 -0
  48. package/bulleted-list/BulletedList.accessibility.test.d.ts +1 -0
  49. package/bulleted-list/BulletedList.accessibility.test.js +18 -6
  50. package/bulleted-list/BulletedList.js +2 -2
  51. package/button/Button.accessibility.test.d.ts +1 -0
  52. package/button/Button.accessibility.test.js +6 -6
  53. package/button/Button.js +1 -1
  54. package/button/Button.stories.tsx +3 -3
  55. package/button/Button.test.d.ts +1 -0
  56. package/button/Button.test.js +1 -1
  57. package/card/Card.accessibility.test.d.ts +1 -0
  58. package/card/Card.accessibility.test.js +3 -3
  59. package/card/Card.js +3 -2
  60. package/card/Card.stories.tsx +1 -1
  61. package/card/Card.test.d.ts +1 -0
  62. package/card/Card.test.js +1 -1
  63. package/checkbox/Checkbox.accessibility.test.d.ts +1 -0
  64. package/checkbox/Checkbox.accessibility.test.js +5 -5
  65. package/checkbox/Checkbox.js +10 -13
  66. package/checkbox/Checkbox.test.d.ts +1 -0
  67. package/checkbox/Checkbox.test.js +1 -1
  68. package/chip/Chip.accessibility.test.d.ts +1 -0
  69. package/chip/Chip.accessibility.test.js +4 -4
  70. package/chip/Chip.js +3 -1
  71. package/chip/Chip.stories.tsx +1 -1
  72. package/chip/Chip.test.d.ts +1 -0
  73. package/chip/Chip.test.js +1 -1
  74. package/common/coreTokens.js +3 -3
  75. package/common/variables.d.ts +2 -5
  76. package/common/variables.js +68 -71
  77. package/container/Container.stories.tsx +3 -3
  78. package/contextual-menu/ContextualMenu.accessibility.test.d.ts +1 -0
  79. package/contextual-menu/ContextualMenu.accessibility.test.js +15 -3
  80. package/contextual-menu/ContextualMenu.d.ts +3 -5
  81. package/contextual-menu/ContextualMenu.js +89 -52
  82. package/contextual-menu/ContextualMenu.stories.tsx +115 -74
  83. package/contextual-menu/ContextualMenu.test.d.ts +1 -0
  84. package/contextual-menu/ContextualMenu.test.js +200 -24
  85. package/contextual-menu/GroupItem.d.ts +4 -0
  86. package/contextual-menu/GroupItem.js +67 -0
  87. package/contextual-menu/ItemAction.d.ts +4 -0
  88. package/contextual-menu/ItemAction.js +50 -0
  89. package/contextual-menu/MenuItem.d.ts +4 -0
  90. package/contextual-menu/MenuItem.js +29 -0
  91. package/contextual-menu/SingleItem.d.ts +4 -0
  92. package/contextual-menu/SingleItem.js +38 -0
  93. package/contextual-menu/types.d.ts +50 -11
  94. package/date-input/Calendar.js +47 -31
  95. package/date-input/DateInput.accessibility.test.d.ts +1 -0
  96. package/date-input/DateInput.accessibility.test.js +24 -11
  97. package/date-input/DateInput.js +27 -21
  98. package/date-input/DateInput.stories.tsx +18 -12
  99. package/date-input/DateInput.test.d.ts +1 -0
  100. package/date-input/DateInput.test.js +39 -39
  101. package/date-input/DatePicker.js +1 -1
  102. package/date-input/YearPicker.js +10 -5
  103. package/dialog/Dialog.accessibility.test.d.ts +1 -0
  104. package/dialog/Dialog.accessibility.test.js +5 -5
  105. package/dialog/Dialog.js +9 -20
  106. package/dialog/Dialog.stories.tsx +8 -4
  107. package/dialog/Dialog.test.d.ts +1 -0
  108. package/dialog/Dialog.test.js +111 -48
  109. package/divider/Divider.accessibility.test.d.ts +1 -0
  110. package/divider/Divider.accessibility.test.js +2 -2
  111. package/divider/Divider.test.d.ts +1 -0
  112. package/dropdown/Dropdown.accessibility.test.d.ts +1 -0
  113. package/dropdown/Dropdown.accessibility.test.js +12 -9
  114. package/dropdown/Dropdown.js +16 -15
  115. package/dropdown/Dropdown.stories.tsx +11 -11
  116. package/dropdown/Dropdown.test.d.ts +1 -0
  117. package/dropdown/Dropdown.test.js +101 -72
  118. package/dropdown/DropdownMenu.js +4 -4
  119. package/dropdown/DropdownMenuItem.js +2 -1
  120. package/file-input/FileInput.accessibility.test.d.ts +1 -0
  121. package/file-input/FileInput.accessibility.test.js +30 -23
  122. package/file-input/FileInput.js +3 -8
  123. package/file-input/FileInput.test.d.ts +1 -0
  124. package/file-input/FileInput.test.js +44 -22
  125. package/file-input/FileItem.js +6 -2
  126. package/file-input/types.d.ts +0 -4
  127. package/footer/Footer.accessibility.test.d.ts +1 -0
  128. package/footer/Footer.accessibility.test.js +13 -5
  129. package/footer/Footer.js +1 -1
  130. package/footer/Footer.stories.tsx +12 -0
  131. package/footer/Footer.test.d.ts +1 -0
  132. package/footer/Footer.test.js +1 -1
  133. package/footer/Icons.js +2 -30
  134. package/grid/Grid.stories.tsx +3 -1
  135. package/header/Header.accessibility.test.d.ts +1 -0
  136. package/header/Header.accessibility.test.js +16 -6
  137. package/header/Header.js +3 -2
  138. package/header/Header.stories.tsx +17 -1
  139. package/header/Header.test.d.ts +1 -0
  140. package/header/Header.test.js +1 -1
  141. package/header/Icons.js +1 -6
  142. package/heading/Heading.accessibility.test.d.ts +1 -0
  143. package/heading/Heading.accessibility.test.js +3 -3
  144. package/heading/Heading.js +1 -1
  145. package/heading/Heading.test.d.ts +1 -0
  146. package/heading/Heading.test.js +1 -14
  147. package/icon/Icon.accessibility.test.d.ts +1 -0
  148. package/icon/Icon.accessibility.test.js +2 -2
  149. package/icon/Icon.js +1 -1
  150. package/image/Image.accessibility.test.d.ts +1 -0
  151. package/image/Image.accessibility.test.js +3 -3
  152. package/image/Image.js +1 -1
  153. package/layout/ApplicationLayout.js +9 -6
  154. package/layout/Icons.d.ts +0 -1
  155. package/layout/Icons.js +1 -9
  156. package/link/Link.accessibility.test.d.ts +1 -0
  157. package/link/Link.accessibility.test.js +8 -12
  158. package/link/Link.js +1 -1
  159. package/link/Link.stories.tsx +2 -2
  160. package/link/Link.test.d.ts +1 -0
  161. package/link/Link.test.js +1 -1
  162. package/main.d.ts +2 -1
  163. package/main.js +8 -1
  164. package/nav-tabs/NavTabs.accessibility.test.d.ts +1 -0
  165. package/nav-tabs/NavTabs.accessibility.test.js +3 -3
  166. package/nav-tabs/NavTabs.js +19 -4
  167. package/nav-tabs/NavTabs.stories.tsx +18 -3
  168. package/nav-tabs/NavTabs.test.d.ts +1 -0
  169. package/nav-tabs/NavTabs.test.js +9 -7
  170. package/nav-tabs/Tab.js +7 -7
  171. package/number-input/NumberInput.accessibility.test.d.ts +1 -0
  172. package/number-input/NumberInput.accessibility.test.js +9 -10
  173. package/number-input/NumberInput.js +6 -3
  174. package/number-input/NumberInput.stories.tsx +11 -16
  175. package/number-input/NumberInput.test.d.ts +1 -0
  176. package/number-input/NumberInput.test.js +6 -7
  177. package/package.json +25 -20
  178. package/paginator/Paginator.accessibility.test.d.ts +1 -0
  179. package/paginator/Paginator.accessibility.test.js +4 -5
  180. package/paginator/Paginator.js +13 -10
  181. package/paginator/Paginator.test.d.ts +1 -0
  182. package/paginator/Paginator.test.js +2 -3
  183. package/paragraph/Paragraph.accessibility.test.d.ts +1 -0
  184. package/paragraph/Paragraph.accessibility.test.js +2 -2
  185. package/password-input/PasswordInput.accessibility.test.d.ts +1 -0
  186. package/password-input/PasswordInput.accessibility.test.js +7 -8
  187. package/password-input/PasswordInput.js +11 -7
  188. package/password-input/PasswordInput.stories.tsx +10 -1
  189. package/password-input/PasswordInput.test.d.ts +1 -0
  190. package/password-input/PasswordInput.test.js +6 -7
  191. package/progress-bar/ProgressBar.accessibility.test.d.ts +1 -0
  192. package/progress-bar/ProgressBar.accessibility.test.js +3 -3
  193. package/progress-bar/ProgressBar.js +6 -4
  194. package/progress-bar/ProgressBar.test.d.ts +1 -0
  195. package/progress-bar/ProgressBar.test.js +1 -1
  196. package/quick-nav/QuickNav.accessibility.test.d.ts +1 -0
  197. package/quick-nav/QuickNav.accessibility.test.js +2 -2
  198. package/quick-nav/QuickNav.js +1 -1
  199. package/radio-group/Radio.js +6 -9
  200. package/radio-group/RadioGroup.accessibility.test.d.ts +1 -0
  201. package/radio-group/RadioGroup.accessibility.test.js +4 -4
  202. package/radio-group/RadioGroup.js +14 -16
  203. package/radio-group/RadioGroup.test.d.ts +1 -0
  204. package/radio-group/RadioGroup.test.js +3 -5
  205. package/resultset-table/ResultsetTable.accessibility.test.d.ts +1 -0
  206. package/resultset-table/ResultsetTable.accessibility.test.js +16 -6
  207. package/resultset-table/ResultsetTable.js +3 -2
  208. package/resultset-table/ResultsetTable.stories.tsx +13 -1
  209. package/resultset-table/ResultsetTable.test.d.ts +1 -0
  210. package/resultset-table/ResultsetTable.test.js +2 -4
  211. package/select/Listbox.js +19 -13
  212. package/select/Option.js +2 -1
  213. package/select/Select.accessibility.test.d.ts +1 -0
  214. package/select/Select.accessibility.test.js +18 -8
  215. package/select/Select.js +25 -21
  216. package/select/Select.stories.tsx +36 -15
  217. package/select/Select.test.d.ts +1 -0
  218. package/select/Select.test.js +42 -51
  219. package/sidenav/Sidenav.accessibility.test.d.ts +1 -0
  220. package/sidenav/Sidenav.accessibility.test.js +3 -3
  221. package/sidenav/Sidenav.js +1 -1
  222. package/sidenav/Sidenav.stories.tsx +1 -1
  223. package/sidenav/Sidenav.test.d.ts +1 -0
  224. package/sidenav/Sidenav.test.js +1 -1
  225. package/slider/Slider.accessibility.test.d.ts +1 -0
  226. package/slider/Slider.accessibility.test.js +5 -6
  227. package/slider/Slider.js +11 -13
  228. package/slider/Slider.stories.tsx +180 -0
  229. package/slider/Slider.test.d.ts +1 -0
  230. package/slider/Slider.test.js +13 -11
  231. package/spinner/Spinner.accessibility.test.d.ts +1 -0
  232. package/spinner/Spinner.accessibility.test.js +6 -6
  233. package/spinner/Spinner.js +6 -2
  234. package/spinner/Spinner.test.d.ts +1 -0
  235. package/spinner/Spinner.test.js +1 -1
  236. package/status-light/StatusLight.accessibility.test.d.ts +1 -0
  237. package/status-light/StatusLight.accessibility.test.js +8 -8
  238. package/status-light/StatusLight.test.d.ts +1 -0
  239. package/status-light/StatusLight.test.js +1 -1
  240. package/switch/Switch.accessibility.test.d.ts +1 -0
  241. package/switch/Switch.accessibility.test.js +14 -5
  242. package/switch/Switch.js +6 -9
  243. package/switch/Switch.stories.tsx +12 -0
  244. package/switch/Switch.test.d.ts +1 -0
  245. package/switch/Switch.test.js +1 -1
  246. package/table/Table.accessibility.test.d.ts +1 -0
  247. package/table/Table.accessibility.test.js +16 -6
  248. package/table/Table.js +1 -1
  249. package/table/Table.stories.tsx +13 -1
  250. package/table/Table.test.d.ts +1 -0
  251. package/table/Table.test.js +2 -4
  252. package/tabs/Tab.js +1 -1
  253. package/tabs/Tabs.accessibility.test.d.ts +1 -0
  254. package/tabs/Tabs.accessibility.test.js +3 -3
  255. package/tabs/Tabs.js +1 -1
  256. package/tabs/Tabs.stories.tsx +7 -1
  257. package/tabs/Tabs.test.d.ts +1 -0
  258. package/tabs/Tabs.test.js +1 -1
  259. package/tag/Tag.accessibility.test.d.ts +1 -0
  260. package/tag/Tag.accessibility.test.js +4 -4
  261. package/tag/Tag.js +1 -1
  262. package/tag/Tag.stories.tsx +1 -1
  263. package/tag/Tag.test.d.ts +1 -0
  264. package/tag/Tag.test.js +1 -1
  265. package/text-input/Suggestion.js +1 -1
  266. package/text-input/Suggestions.js +14 -6
  267. package/text-input/TextInput.accessibility.test.d.ts +1 -0
  268. package/text-input/TextInput.accessibility.test.js +11 -12
  269. package/text-input/TextInput.js +29 -25
  270. package/text-input/TextInput.stories.tsx +19 -7
  271. package/text-input/TextInput.test.d.ts +1 -0
  272. package/text-input/TextInput.test.js +2 -3
  273. package/textarea/Textarea.accessibility.test.d.ts +1 -0
  274. package/textarea/Textarea.accessibility.test.js +7 -7
  275. package/textarea/Textarea.js +14 -13
  276. package/textarea/Textarea.test.d.ts +1 -0
  277. package/textarea/Textarea.test.js +1 -1
  278. package/toggle-group/ToggleGroup.accessibility.test.d.ts +1 -0
  279. package/toggle-group/ToggleGroup.accessibility.test.js +5 -5
  280. package/toggle-group/ToggleGroup.js +6 -9
  281. package/toggle-group/ToggleGroup.stories.tsx +1 -1
  282. package/toggle-group/ToggleGroup.test.d.ts +1 -0
  283. package/toggle-group/ToggleGroup.test.js +1 -1
  284. package/tooltip/Tooltip.accessibility.test.d.ts +1 -0
  285. package/tooltip/Tooltip.accessibility.test.js +144 -0
  286. package/tooltip/Tooltip.d.ts +4 -0
  287. package/tooltip/Tooltip.js +50 -0
  288. package/tooltip/Tooltip.stories.tsx +111 -0
  289. package/tooltip/Tooltip.test.d.ts +1 -0
  290. package/tooltip/Tooltip.test.js +112 -0
  291. package/tooltip/types.d.ts +16 -0
  292. package/tooltip/types.js +5 -0
  293. package/typography/Typography.accessibility.test.d.ts +1 -0
  294. package/typography/Typography.accessibility.test.js +12 -12
  295. package/typography/Typography.stories.tsx +1 -3
  296. package/useTheme.d.ts +2 -5
  297. package/utils/BaseTypography.js +1 -1
  298. package/utils/FocusLock.js +3 -2
  299. package/wizard/Wizard.accessibility.test.d.ts +1 -0
  300. package/wizard/Wizard.accessibility.test.js +3 -3
  301. package/wizard/Wizard.js +1 -9
  302. package/wizard/Wizard.stories.tsx +1 -1
  303. package/wizard/Wizard.test.d.ts +1 -0
  304. package/wizard/Wizard.test.js +1 -1
  305. package/contextual-menu/MenuItemAction.d.ts +0 -4
  306. package/contextual-menu/MenuItemAction.js +0 -46
  307. package/paginator/Icons.d.ts +0 -5
  308. package/paginator/Icons.js +0 -40
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
4
6
  var _react = _interopRequireDefault(require("react"));
5
7
  var _react2 = require("@testing-library/react");
6
- var _ContextualMenu = _interopRequireDefault(require("./ContextualMenu.tsx"));
8
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
9
+ var _ContextualMenu = _interopRequireDefault(require("./ContextualMenu"));
7
10
  var items = [{
8
11
  label: "Item 1"
9
12
  }, {
@@ -31,39 +34,212 @@ var sections = [{
31
34
  label: "Approved locations"
32
35
  }]
33
36
  }];
34
- describe("Context menu component tests", function () {
35
- test("Context menu renders with correct aria attributes", function () {
36
- var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
37
- items: items,
38
- defaultSelectedItemIndex: 0
37
+ var groups = [{
38
+ label: "Grouped Item 1",
39
+ items: [{
40
+ label: "Item 1"
41
+ }, {
42
+ label: "Grouped Item 2",
43
+ items: [{
44
+ label: "Item 2"
45
+ }, {
46
+ label: "Item 3"
47
+ }]
48
+ }]
49
+ }, {
50
+ label: "Item 4",
51
+ icon: "key"
52
+ }, {
53
+ label: "Grouped Item 3",
54
+ items: [{
55
+ label: "Item 6"
56
+ }, {
57
+ label: "Item 7"
58
+ }]
59
+ }, {
60
+ label: "Item 8"
61
+ }];
62
+ describe("Contextual menu component tests", function () {
63
+ test("Single - Renders with correct aria attributes", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
64
+ var _render, getAllByRole, getByRole, actions;
65
+ return _regenerator["default"].wrap(function _callee$(_context) {
66
+ while (1) switch (_context.prev = _context.next) {
67
+ case 0:
68
+ _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
69
+ items: items
70
+ })), getAllByRole = _render.getAllByRole, getByRole = _render.getByRole;
71
+ expect(getAllByRole("menuitem").length).toBe(4);
72
+ actions = getAllByRole("button");
73
+ _context.next = 5;
74
+ return _userEvent["default"].click(actions[0]);
75
+ case 5:
76
+ expect(actions[0].getAttribute("aria-selected")).toBeTruthy();
77
+ expect(getByRole("menu")).toBeTruthy();
78
+ case 7:
79
+ case "end":
80
+ return _context.stop();
81
+ }
82
+ }, _callee);
83
+ })));
84
+ test("Single - An item can appear as selected by default by using the attribute selectedByDefault", function () {
85
+ var test = [{
86
+ label: "Tested item",
87
+ selectedByDefault: true
88
+ }];
89
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
90
+ items: test
39
91
  })),
40
- getAllByRole = _render.getAllByRole,
41
- getByRole = _render.getByRole;
42
- expect(getAllByRole("menuitem").length).toBe(4);
43
- var actions = getAllByRole("button");
44
- expect(actions[0].getAttribute("aria-selected")).toBeTruthy();
45
- expect(getByRole("menu")).toBeTruthy();
92
+ getByRole = _render2.getByRole;
93
+ var item = getByRole("button");
94
+ expect(item.getAttribute("aria-selected")).toBeTruthy();
46
95
  });
47
- test("Context menu (with sections) renders with correct aria attributes", function () {
48
- var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
49
- items: sections,
50
- defaultSelectedItemIndex: 4
96
+ test("Group - Group items collapse when clicked", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
97
+ var _render3, queryByText, getByText;
98
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
99
+ while (1) switch (_context2.prev = _context2.next) {
100
+ case 0:
101
+ _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
102
+ items: groups
103
+ })), queryByText = _render3.queryByText, getByText = _render3.getByText;
104
+ _context2.next = 3;
105
+ return _userEvent["default"].click(getByText("Grouped Item 1"));
106
+ case 3:
107
+ expect(getByText("Item 1")).toBeTruthy();
108
+ expect(getByText("Grouped Item 2")).toBeTruthy();
109
+ _context2.next = 7;
110
+ return _userEvent["default"].click(getByText("Grouped Item 2"));
111
+ case 7:
112
+ expect(getByText("Item 2")).toBeTruthy();
113
+ expect(getByText("Item 3")).toBeTruthy();
114
+ _context2.next = 11;
115
+ return _userEvent["default"].click(getByText("Grouped Item 1"));
116
+ case 11:
117
+ expect(queryByText("Item 1")).toBeFalsy();
118
+ expect(queryByText("Item 2")).toBeFalsy();
119
+ expect(queryByText("Item 3")).toBeFalsy();
120
+ case 14:
121
+ case "end":
122
+ return _context2.stop();
123
+ }
124
+ }, _callee2);
125
+ })));
126
+ test("Group - Renders with correct aria attributes", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
127
+ var _render4, getAllByRole, group1, optionToBeClicked;
128
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
129
+ while (1) switch (_context3.prev = _context3.next) {
130
+ case 0:
131
+ _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
132
+ items: groups
133
+ })), getAllByRole = _render4.getAllByRole;
134
+ group1 = getAllByRole("button")[0];
135
+ _context3.next = 4;
136
+ return _userEvent["default"].click(group1);
137
+ case 4:
138
+ expect(group1.getAttribute("aria-expanded")).toBeTruthy();
139
+ expect(group1.getAttribute("aria-controls")).toBe(getAllByRole("list")[0].id);
140
+ _context3.next = 8;
141
+ return _userEvent["default"].click(getAllByRole("button")[2]);
142
+ case 8:
143
+ _context3.next = 10;
144
+ return _userEvent["default"].click(getAllByRole("button")[6]);
145
+ case 10:
146
+ expect(getAllByRole("menuitem").length).toBe(10);
147
+ optionToBeClicked = getAllByRole("button")[4];
148
+ _context3.next = 14;
149
+ return _userEvent["default"].click(optionToBeClicked);
150
+ case 14:
151
+ expect(optionToBeClicked.getAttribute("aria-selected")).toBeTruthy();
152
+ case 15:
153
+ case "end":
154
+ return _context3.stop();
155
+ }
156
+ }, _callee3);
157
+ })));
158
+ test("Group - A grouped item, selected by default, must be visible (expanded group) in the first render of the component", function () {
159
+ var test = [{
160
+ label: "Grouped item",
161
+ items: [{
162
+ label: "Tested item",
163
+ selectedByDefault: true
164
+ }]
165
+ }];
166
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
167
+ items: test
51
168
  })),
52
- getAllByRole = _render2.getAllByRole;
53
- expect(getAllByRole("menuitem").length).toBe(6);
54
- var actions = getAllByRole("button");
55
- expect(actions[4].getAttribute("aria-selected")).toBeTruthy();
56
- expect(getAllByRole("group").length).toBe(2);
169
+ getByText = _render5.getByText,
170
+ getAllByRole = _render5.getAllByRole;
171
+ expect(getByText("Tested item")).toBeTruthy();
172
+ expect(getAllByRole("button")[1].getAttribute("aria-selected")).toBeTruthy();
57
173
  });
58
- test("onSelect event from each item is called correctly", function () {
174
+ test("Group - Collapsed groups render as selected when containing a selected item", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
175
+ var _render6, getAllByRole, group1, group2, item;
176
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
177
+ while (1) switch (_context4.prev = _context4.next) {
178
+ case 0:
179
+ _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
180
+ items: groups
181
+ })), getAllByRole = _render6.getAllByRole;
182
+ group1 = getAllByRole("button")[0];
183
+ _context4.next = 4;
184
+ return _userEvent["default"].click(group1);
185
+ case 4:
186
+ group2 = getAllByRole("button")[2];
187
+ _context4.next = 7;
188
+ return _userEvent["default"].click(group2);
189
+ case 7:
190
+ item = getAllByRole("button")[3];
191
+ _context4.next = 10;
192
+ return _userEvent["default"].click(item);
193
+ case 10:
194
+ expect(item.getAttribute("aria-selected")).toBeTruthy();
195
+ expect(group1.getAttribute("aria-selected")).toBe("false");
196
+ expect(group2.getAttribute("aria-selected")).toBe("false");
197
+ _context4.next = 15;
198
+ return _userEvent["default"].click(group2);
199
+ case 15:
200
+ expect(group2.getAttribute("aria-selected")).toBe("true");
201
+ _context4.next = 18;
202
+ return _userEvent["default"].click(group1);
203
+ case 18:
204
+ expect(group1.getAttribute("aria-selected")).toBe("true");
205
+ case 19:
206
+ case "end":
207
+ return _context4.stop();
208
+ }
209
+ }, _callee4);
210
+ })));
211
+ test("Sections - Renders with correct aria attributes", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
212
+ var _render7, getAllByRole, actions, section;
213
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
214
+ while (1) switch (_context5.prev = _context5.next) {
215
+ case 0:
216
+ _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
217
+ items: sections
218
+ })), getAllByRole = _render7.getAllByRole;
219
+ expect(getAllByRole("menuitem").length).toBe(6);
220
+ actions = getAllByRole("button");
221
+ _context5.next = 5;
222
+ return _userEvent["default"].click(actions[0]);
223
+ case 5:
224
+ expect(actions[0].getAttribute("aria-selected")).toBeTruthy();
225
+ expect(getAllByRole("group").length).toBe(2);
226
+ section = getAllByRole("group")[0];
227
+ expect(section.getAttribute("aria-labelledby")).toBe("Team repositories");
228
+ case 9:
229
+ case "end":
230
+ return _context5.stop();
231
+ }
232
+ }, _callee5);
233
+ })));
234
+ test("The onSelect event from each item is called correctly", function () {
59
235
  var test = [{
60
236
  label: "Tested item",
61
237
  onSelect: jest.fn()
62
238
  }];
63
- var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
239
+ var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_ContextualMenu["default"], {
64
240
  items: test
65
241
  })),
66
- getByRole = _render3.getByRole;
242
+ getByRole = _render8.getByRole;
67
243
  var item = getByRole("button");
68
244
  _react2.fireEvent.click(item);
69
245
  expect(test[0].onSelect).toHaveBeenCalled();
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { GroupItemProps } from "./types";
3
+ declare const _default: React.MemoExoticComponent<({ items, ...props }: GroupItemProps) => React.JSX.Element>;
4
+ export default _default;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
+ var _react = _interopRequireWildcard(require("react"));
14
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
15
+ var _coreTokens = _interopRequireDefault(require("../common/coreTokens"));
16
+ var _MenuItem = _interopRequireDefault(require("./MenuItem"));
17
+ var _ItemAction = _interopRequireDefault(require("./ItemAction"));
18
+ var _ContextualMenu = require("./ContextualMenu");
19
+ var _Icon = _interopRequireDefault(require("../icon/Icon"));
20
+ var _templateObject;
21
+ var _excluded = ["items"];
22
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
23
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
24
+ var isGroupSelected = function isGroupSelected(items, selectedItemId) {
25
+ return items.some(function (item) {
26
+ if ("items" in item) return isGroupSelected(item.items, selectedItemId);else if (selectedItemId !== -1) return item.id === selectedItemId;else return item.selectedByDefault;
27
+ });
28
+ };
29
+ var GroupItem = function GroupItem(_ref) {
30
+ var items = _ref.items,
31
+ props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
32
+ var groupMenuId = "group-menu-".concat(props.label);
33
+ var _useContext = (0, _react.useContext)(_ContextualMenu.ContextualMenuContext),
34
+ selectedItemId = _useContext.selectedItemId;
35
+ var groupSelected = (0, _react.useMemo)(function () {
36
+ return isGroupSelected(items, selectedItemId);
37
+ }, [items, selectedItemId]);
38
+ var _useState = (0, _react.useState)(groupSelected && selectedItemId === -1 ? true : false),
39
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
40
+ isOpen = _useState2[0],
41
+ setIsOpen = _useState2[1];
42
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_ItemAction["default"], (0, _extends2["default"])({
43
+ "aria-controls": groupMenuId,
44
+ "aria-expanded": isOpen ? true : undefined,
45
+ "aria-selected": groupSelected && !isOpen,
46
+ collapseIcon: isOpen ? /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
47
+ icon: "filled_expand_less"
48
+ }) : /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
49
+ icon: "filled_expand_more"
50
+ }),
51
+ onClick: function onClick() {
52
+ setIsOpen(function (isOpen) {
53
+ return !isOpen;
54
+ });
55
+ },
56
+ selected: groupSelected && !isOpen
57
+ }, props)), isOpen && /*#__PURE__*/_react["default"].createElement(ItemsList, {
58
+ id: groupMenuId
59
+ }, items.map(function (item) {
60
+ return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
61
+ item: item,
62
+ depthLevel: props.depthLevel + 1
63
+ });
64
+ })));
65
+ };
66
+ var ItemsList = _styledComponents["default"].ul(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n padding: 0;\n display: grid;\n gap: ", ";\n list-style: none;\n"])), _coreTokens["default"].spacing_4);
67
+ var _default = exports["default"] = /*#__PURE__*/_react["default"].memo(GroupItem);
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { ItemActionProps } from "./types";
3
+ declare const ItemAction: ({ badge, collapseIcon, icon, label, depthLevel, ...props }: ItemActionProps) => React.JSX.Element;
4
+ export default ItemAction;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
+ var _react = _interopRequireDefault(require("react"));
12
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
13
+ var _coreTokens = _interopRequireDefault(require("../common/coreTokens"));
14
+ var _Icon = _interopRequireDefault(require("../icon/Icon"));
15
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
16
+ var _excluded = ["badge", "collapseIcon", "icon", "label", "depthLevel"];
17
+ var ItemAction = function ItemAction(_ref) {
18
+ var badge = _ref.badge,
19
+ collapseIcon = _ref.collapseIcon,
20
+ icon = _ref.icon,
21
+ label = _ref.label,
22
+ depthLevel = _ref.depthLevel,
23
+ props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
24
+ var modifiedBadge = badge && /*#__PURE__*/_react["default"].cloneElement(badge, {
25
+ size: "small"
26
+ });
27
+ return /*#__PURE__*/_react["default"].createElement(Action, (0, _extends2["default"])({
28
+ depthLevel: depthLevel
29
+ }, props), /*#__PURE__*/_react["default"].createElement(Label, null, collapseIcon, icon && depthLevel === 0 && /*#__PURE__*/_react["default"].createElement(Icon, null, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
30
+ icon: icon
31
+ }) : icon), /*#__PURE__*/_react["default"].createElement(Text, {
32
+ onMouseEnter: function onMouseEnter(event) {
33
+ var text = event.currentTarget;
34
+ if (text.title === "" && text.scrollWidth > text.clientWidth) text.title = label;
35
+ }
36
+ }, label)), modifiedBadge);
37
+ };
38
+ var Action = _styledComponents["default"].button(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n border: none;\n border-radius: 4px;\n width: 100%;\n padding: ", ";\n box-shadow: inset 0 0 0 2px transparent;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ", ";\n ", ";\n cursor: pointer;\n overflow: hidden;\n\n &:hover {\n ", ";\n }\n &:active {\n ", ";\n }\n &:focus {\n outline: 2px solid ", ";\n outline-offset: -1px;\n }\n"])), function (props) {
39
+ return "".concat(_coreTokens["default"].spacing_4, " ").concat(_coreTokens["default"].spacing_8, " ").concat(_coreTokens["default"].spacing_4, " ", "\n calc(".concat(_coreTokens["default"].spacing_8, " + (").concat(_coreTokens["default"].spacing_24, " * ").concat(props.depthLevel, "))\n "), ";");
40
+ }, _coreTokens["default"].spacing_16, function (props) {
41
+ return props.selected ? "background-color: ".concat(_coreTokens["default"].color_purple_100, "; font-weight: ").concat(_coreTokens["default"].type_semibold, ";") : "background-color: ".concat(_coreTokens["default"].color_transparent);
42
+ }, function (props) {
43
+ return props.selected ? "background-color: ".concat(_coreTokens["default"].color_purple_200, ";") : "background-color: ".concat(_coreTokens["default"].color_grey_100, ";");
44
+ }, function (props) {
45
+ return props.selected ? "background-color: ".concat(_coreTokens["default"].color_purple_200, ";") : "background-color: ".concat(_coreTokens["default"].color_grey_100, ";");
46
+ }, _coreTokens["default"].color_blue_600);
47
+ var Icon = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n font-size: 16px;\n\n svg {\n height: 16px;\n width: 16px;\n }\n"])));
48
+ var Label = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n gap: ", ";\n overflow: hidden;\n"])), _coreTokens["default"].spacing_8);
49
+ var Text = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n line-height: 24px;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n"])), _coreTokens["default"].color_grey_900, _coreTokens["default"].type_sans, _coreTokens["default"].type_scale_02);
50
+ var _default = exports["default"] = ItemAction;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { MenuItemProps } from "./types";
3
+ declare const MenuItem: ({ item, depthLevel }: MenuItemProps) => React.JSX.Element;
4
+ export default MenuItem;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
12
+ var _coreTokens = _interopRequireDefault(require("../common/coreTokens"));
13
+ var _SingleItem = _interopRequireDefault(require("./SingleItem"));
14
+ var _GroupItem = _interopRequireDefault(require("./GroupItem"));
15
+ var _templateObject;
16
+ var MenuItem = function MenuItem(_ref) {
17
+ var item = _ref.item,
18
+ _ref$depthLevel = _ref.depthLevel,
19
+ depthLevel = _ref$depthLevel === void 0 ? 0 : _ref$depthLevel;
20
+ return /*#__PURE__*/_react["default"].createElement(StyledMenuItem, {
21
+ role: "menuitem"
22
+ }, "items" in item ? /*#__PURE__*/_react["default"].createElement(_GroupItem["default"], (0, _extends2["default"])({}, item, {
23
+ depthLevel: depthLevel
24
+ })) : /*#__PURE__*/_react["default"].createElement(_SingleItem["default"], (0, _extends2["default"])({}, item, {
25
+ depthLevel: depthLevel
26
+ })));
27
+ };
28
+ var StyledMenuItem = _styledComponents["default"].li(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: grid;\n gap: ", ";\n"])), _coreTokens["default"].spacing_4);
29
+ var _default = exports["default"] = MenuItem;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { SingleItemProps } from "./types";
3
+ declare const SingleItem: ({ id, onSelect, selectedByDefault, ...props }: SingleItemProps) => React.JSX.Element;
4
+ export default SingleItem;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _ContextualMenu = require("./ContextualMenu");
13
+ var _ItemAction = _interopRequireDefault(require("./ItemAction"));
14
+ var _excluded = ["id", "onSelect", "selectedByDefault"];
15
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
16
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
17
+ var SingleItem = function SingleItem(_ref) {
18
+ var id = _ref.id,
19
+ onSelect = _ref.onSelect,
20
+ selectedByDefault = _ref.selectedByDefault,
21
+ props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
22
+ var _useContext = (0, _react.useContext)(_ContextualMenu.ContextualMenuContext),
23
+ selectedItemId = _useContext.selectedItemId,
24
+ setSelectedItemId = _useContext.setSelectedItemId;
25
+ var handleClick = function handleClick() {
26
+ setSelectedItemId(id);
27
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect();
28
+ };
29
+ (0, _react.useEffect)(function () {
30
+ if (selectedItemId === -1 && selectedByDefault) setSelectedItemId(id);
31
+ }, [selectedItemId, selectedByDefault, id]);
32
+ return /*#__PURE__*/_react["default"].createElement(_ItemAction["default"], (0, _extends2["default"])({
33
+ "aria-selected": selectedItemId === -1 ? selectedByDefault : selectedItemId === id,
34
+ onClick: handleClick,
35
+ selected: selectedItemId === -1 ? selectedByDefault : selectedItemId === id
36
+ }, props));
37
+ };
38
+ var _default = exports["default"] = SingleItem;
@@ -1,22 +1,61 @@
1
- /// <reference types="react" />
2
- import { NotificationProps, CommonProps, ContextualProps } from "../badge/types";
1
+ import React from "react";
3
2
  type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
4
- export type Item = {
5
- label: string;
3
+ type CommonItemProps = {
4
+ badge?: React.ReactElement;
6
5
  icon?: string | SVG;
7
- slot?: React.ReactNode;
6
+ label: string;
7
+ };
8
+ type Item = CommonItemProps & {
8
9
  onSelect?: () => void;
10
+ selectedByDefault?: boolean;
11
+ };
12
+ type GroupItem = CommonItemProps & {
13
+ items: (Item | GroupItem)[];
9
14
  };
10
- export type Section = {
15
+ type Section = {
16
+ items: (Item | GroupItem)[];
11
17
  title?: string;
12
- items: Item[];
13
18
  };
14
19
  type Props = {
15
- defaultSelectedItemIndex?: number;
16
- items: Item[] | Section[];
20
+ items: (Item | GroupItem)[] | Section[];
21
+ };
22
+ /**
23
+ * Contextual menu internal types.
24
+ */
25
+ type ItemWithId = Item & {
26
+ id: number;
27
+ };
28
+ type GroupItemWithId = {
29
+ badge?: React.ReactElement;
30
+ icon: string | SVG;
31
+ items: (ItemWithId | GroupItemWithId)[];
32
+ label: string;
17
33
  };
18
- export type MenuItemActionProps = Item & {
34
+ type SectionWithId = {
35
+ items: (ItemWithId | GroupItemWithId)[];
36
+ title?: string;
37
+ };
38
+ type SingleItemProps = ItemWithId & {
39
+ depthLevel: number;
40
+ };
41
+ type GroupItemProps = GroupItemWithId & {
42
+ depthLevel: number;
43
+ };
44
+ type MenuItemProps = {
45
+ item: ItemWithId | GroupItemWithId;
46
+ depthLevel?: number;
47
+ };
48
+ type ItemActionProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {
49
+ badge?: Item["badge"];
50
+ collapseIcon?: React.ReactNode;
51
+ depthLevel: number;
52
+ icon?: Item["icon"];
53
+ label: Item["label"];
19
54
  selected: boolean;
20
55
  };
21
- export type BadgeProps = (ContextualProps | NotificationProps) & Omit<CommonProps, "size">;
56
+ type ContextualMenuContextProps = {
57
+ selectedItemId: number;
58
+ setSelectedItemId: React.Dispatch<React.SetStateAction<number>>;
59
+ };
22
60
  export default Props;
61
+ export type { ContextualMenuContextProps, GroupItem, GroupItemProps, GroupItemWithId, Item, ItemActionProps, ItemWithId, MenuItemProps, Section, SectionWithId, SingleItemProps, };