@elliemae/ds-menu 2.3.0-alpha.8 → 2.3.0-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/cjs/Menu.js +195 -0
  2. package/cjs/MenuCombobox.js +56 -0
  3. package/cjs/MenuContext.js +11 -0
  4. package/cjs/MenuItems/CheckboxGroup.js +45 -0
  5. package/cjs/MenuItems/MenuItem.js +203 -0
  6. package/cjs/MenuItems/MenuItemCheckable.js +119 -0
  7. package/cjs/MenuItems/MenuItemCheckbox.js +42 -0
  8. package/cjs/MenuItems/MenuItemRadio.js +41 -0
  9. package/cjs/MenuItems/RadioGroup.js +42 -0
  10. package/cjs/MenuItems/SearchableGroup.js +101 -0
  11. package/cjs/MenuItems/SearchableList.js +117 -0
  12. package/cjs/MenuItems/SelectionGroup.js +107 -0
  13. package/cjs/MenuItems/Separator.js +44 -0
  14. package/cjs/MenuItems/SubMenu.js +203 -0
  15. package/cjs/MenuItems/menuItemFactory.js +73 -0
  16. package/cjs/VirtualMenuList.js +48 -0
  17. package/cjs/index.js +36 -0
  18. package/cjs/utils/useHeightByAmountOfItems.js +20 -0
  19. package/esm/Menu.js +180 -0
  20. package/esm/MenuCombobox.js +48 -0
  21. package/esm/MenuContext.js +5 -0
  22. package/esm/MenuItems/CheckboxGroup.js +35 -0
  23. package/esm/MenuItems/MenuItem.js +191 -0
  24. package/esm/MenuItems/MenuItemCheckable.js +108 -0
  25. package/esm/MenuItems/MenuItemCheckbox.js +34 -0
  26. package/esm/MenuItems/MenuItemRadio.js +32 -0
  27. package/esm/MenuItems/RadioGroup.js +32 -0
  28. package/esm/MenuItems/SearchableGroup.js +91 -0
  29. package/esm/MenuItems/SearchableList.js +108 -0
  30. package/esm/MenuItems/SelectionGroup.js +97 -0
  31. package/esm/MenuItems/Separator.js +33 -0
  32. package/esm/MenuItems/SubMenu.js +190 -0
  33. package/esm/MenuItems/menuItemFactory.js +64 -0
  34. package/esm/VirtualMenuList.js +42 -0
  35. package/esm/index.js +13 -0
  36. package/{dist/esm → esm}/utils/useHeightByAmountOfItems.js +11 -13
  37. package/package.json +62 -72
  38. package/types/Menu.d.ts +11 -0
  39. package/types/MenuCombobox.d.ts +28 -0
  40. package/types/MenuContext.d.ts +3 -0
  41. package/types/MenuItems/CheckboxGroup.d.ts +32 -0
  42. package/types/MenuItems/MenuItem.d.ts +79 -0
  43. package/types/MenuItems/MenuItemCheckable.d.ts +77 -0
  44. package/types/MenuItems/MenuItemCheckbox.d.ts +6 -0
  45. package/types/MenuItems/MenuItemRadio.d.ts +28 -0
  46. package/types/MenuItems/RadioGroup.d.ts +26 -0
  47. package/types/MenuItems/SearchableGroup.d.ts +10 -0
  48. package/types/MenuItems/SearchableList.d.ts +95 -0
  49. package/types/MenuItems/SelectionGroup.d.ts +87 -0
  50. package/types/MenuItems/Separator.d.ts +31 -0
  51. package/types/MenuItems/SubMenu.d.ts +109 -0
  52. package/types/MenuItems/menuItemFactory.d.ts +3 -0
  53. package/types/VirtualMenuList.d.ts +8 -0
  54. package/types/index.d.ts +13 -0
  55. package/types/tests/Menu.test.d.ts +1 -0
  56. package/types/tests/MenuItem.test.d.ts +1 -0
  57. package/types/utils/useHeightByAmountOfItems.d.ts +5 -0
  58. package/dist/cjs/Menu.js +0 -151
  59. package/dist/cjs/Menu.js.map +0 -7
  60. package/dist/cjs/MenuCombobox.js +0 -70
  61. package/dist/cjs/MenuCombobox.js.map +0 -7
  62. package/dist/cjs/MenuContext.js +0 -38
  63. package/dist/cjs/MenuContext.js.map +0 -7
  64. package/dist/cjs/MenuExports.js +0 -36
  65. package/dist/cjs/MenuExports.js.map +0 -7
  66. package/dist/cjs/MenuItems/CheckboxGroup.js +0 -52
  67. package/dist/cjs/MenuItems/CheckboxGroup.js.map +0 -7
  68. package/dist/cjs/MenuItems/MenuItem.js +0 -157
  69. package/dist/cjs/MenuItems/MenuItem.js.map +0 -7
  70. package/dist/cjs/MenuItems/MenuItemCheckable.js +0 -88
  71. package/dist/cjs/MenuItems/MenuItemCheckable.js.map +0 -7
  72. package/dist/cjs/MenuItems/MenuItemCheckbox.js +0 -48
  73. package/dist/cjs/MenuItems/MenuItemCheckbox.js.map +0 -7
  74. package/dist/cjs/MenuItems/MenuItemRadio.js +0 -53
  75. package/dist/cjs/MenuItems/MenuItemRadio.js.map +0 -7
  76. package/dist/cjs/MenuItems/RadioGroup.js +0 -51
  77. package/dist/cjs/MenuItems/RadioGroup.js.map +0 -7
  78. package/dist/cjs/MenuItems/SearchableGroup.js +0 -97
  79. package/dist/cjs/MenuItems/SearchableGroup.js.map +0 -7
  80. package/dist/cjs/MenuItems/SearchableList.js +0 -114
  81. package/dist/cjs/MenuItems/SearchableList.js.map +0 -7
  82. package/dist/cjs/MenuItems/SelectionGroup.js +0 -102
  83. package/dist/cjs/MenuItems/SelectionGroup.js.map +0 -7
  84. package/dist/cjs/MenuItems/Separator.js +0 -59
  85. package/dist/cjs/MenuItems/Separator.js.map +0 -7
  86. package/dist/cjs/MenuItems/SubMenu.js +0 -187
  87. package/dist/cjs/MenuItems/SubMenu.js.map +0 -7
  88. package/dist/cjs/MenuItems/menuItemFactory.js +0 -41
  89. package/dist/cjs/MenuItems/menuItemFactory.js.map +0 -7
  90. package/dist/cjs/MenuItems/renderMenuItems.js +0 -54
  91. package/dist/cjs/MenuItems/renderMenuItems.js.map +0 -7
  92. package/dist/cjs/VirtualMenuList.js +0 -78
  93. package/dist/cjs/VirtualMenuList.js.map +0 -7
  94. package/dist/cjs/index.js +0 -63
  95. package/dist/cjs/index.js.map +0 -7
  96. package/dist/cjs/utils/useHeightByAmountOfItems.js +0 -49
  97. package/dist/cjs/utils/useHeightByAmountOfItems.js.map +0 -7
  98. package/dist/esm/Menu.js +0 -122
  99. package/dist/esm/Menu.js.map +0 -7
  100. package/dist/esm/MenuCombobox.js +0 -41
  101. package/dist/esm/MenuCombobox.js.map +0 -7
  102. package/dist/esm/MenuContext.js +0 -9
  103. package/dist/esm/MenuContext.js.map +0 -7
  104. package/dist/esm/MenuExports.js +0 -7
  105. package/dist/esm/MenuExports.js.map +0 -7
  106. package/dist/esm/MenuItems/CheckboxGroup.js +0 -23
  107. package/dist/esm/MenuItems/CheckboxGroup.js.map +0 -7
  108. package/dist/esm/MenuItems/MenuItem.js +0 -128
  109. package/dist/esm/MenuItems/MenuItem.js.map +0 -7
  110. package/dist/esm/MenuItems/MenuItemCheckable.js +0 -59
  111. package/dist/esm/MenuItems/MenuItemCheckable.js.map +0 -7
  112. package/dist/esm/MenuItems/MenuItemCheckbox.js +0 -19
  113. package/dist/esm/MenuItems/MenuItemCheckbox.js.map +0 -7
  114. package/dist/esm/MenuItems/MenuItemRadio.js +0 -24
  115. package/dist/esm/MenuItems/MenuItemRadio.js.map +0 -7
  116. package/dist/esm/MenuItems/RadioGroup.js +0 -22
  117. package/dist/esm/MenuItems/RadioGroup.js.map +0 -7
  118. package/dist/esm/MenuItems/SearchableGroup.js +0 -68
  119. package/dist/esm/MenuItems/SearchableGroup.js.map +0 -7
  120. package/dist/esm/MenuItems/SearchableList.js +0 -85
  121. package/dist/esm/MenuItems/SearchableList.js.map +0 -7
  122. package/dist/esm/MenuItems/SelectionGroup.js +0 -73
  123. package/dist/esm/MenuItems/SelectionGroup.js.map +0 -7
  124. package/dist/esm/MenuItems/Separator.js +0 -30
  125. package/dist/esm/MenuItems/Separator.js.map +0 -7
  126. package/dist/esm/MenuItems/SubMenu.js +0 -158
  127. package/dist/esm/MenuItems/SubMenu.js.map +0 -7
  128. package/dist/esm/MenuItems/menuItemFactory.js +0 -12
  129. package/dist/esm/MenuItems/menuItemFactory.js.map +0 -7
  130. package/dist/esm/MenuItems/renderMenuItems.js +0 -25
  131. package/dist/esm/MenuItems/renderMenuItems.js.map +0 -7
  132. package/dist/esm/VirtualMenuList.js +0 -49
  133. package/dist/esm/VirtualMenuList.js.map +0 -7
  134. package/dist/esm/index.js +0 -34
  135. package/dist/esm/index.js.map +0 -7
  136. package/dist/esm/utils/useHeightByAmountOfItems.js.map +0 -7
@@ -0,0 +1,190 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
6
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
7
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
8
+ import 'core-js/modules/web.dom-collections.iterator.js';
9
+ import { useRef, useState, useCallback } from 'react';
10
+ import { PropTypes, describe } from 'react-desc';
11
+ import { MoreOptionsVert, ChevronSmallRight } from '@elliemae/ds-icons';
12
+ import { useFocusGroupItem } from '@elliemae/ds-shared/FocusGroup';
13
+ import { useHiddenController } from '@elliemae/ds-hidden';
14
+ import DSButton, { BUTTON_VARIANT } from '@elliemae/ds-button';
15
+ import DSPopper, { interactions } from '@elliemae/ds-popper';
16
+ import styled from 'styled-components';
17
+ import { Menu } from '../Menu.js';
18
+ import MenuItem from './MenuItem.js';
19
+ import { jsx, Fragment } from 'react/jsx-runtime';
20
+
21
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
22
+
23
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
24
+ const ChevronRightComp = /*#__PURE__*/styled.div.withConfig({
25
+ componentId: "sc-1qhp1z-0"
26
+ })(["display:flex;justify-content:center;align-items:center;width:28px;"]);
27
+
28
+ function SubMenu(_ref) {
29
+ let {
30
+ noAddon,
31
+ leftAddon = undefined,
32
+ label = undefined,
33
+ interactionType = 'hover',
34
+ children: subitems,
35
+ rightAddonType,
36
+ disabledAddonInactive,
37
+ checkableProps = {},
38
+ customRenderer,
39
+ onClick,
40
+ closeMenu,
41
+ id
42
+ } = _ref;
43
+ const itemRef = useRef(null);
44
+ const focusOnOpen = useRef(false);
45
+ const [isAddonHovered, setIsAddonHovered] = useState(false);
46
+ const {
47
+ visible = false,
48
+ onShow,
49
+ onHide
50
+ } = useHiddenController(undefined, {
51
+ interaction: 'click'
52
+ });
53
+ const interaction = rightAddonType === 'elipsis' ? 'click' : 'hover';
54
+ const {
55
+ focusItemByNode
56
+ } = useFocusGroupItem(); // todo: create a menu state to handle all related menu things
57
+
58
+ const handleShowSubItemsWithMouse = e => {
59
+ e.stopPropagation();
60
+ onShow();
61
+ focusOnOpen.current = true;
62
+ };
63
+
64
+ const handleShowWithMouse = e => {
65
+ if (onClick) onClick(e);
66
+ };
67
+
68
+ const handleShowWithMouseHover = () => {
69
+ setIsAddonHovered(true);
70
+ onShow();
71
+ focusOnOpen.current = false;
72
+ };
73
+
74
+ const handleShowWithKeyboard = () => {
75
+ onShow();
76
+ focusOnOpen.current = true;
77
+ };
78
+
79
+ const handleOnMouseEnter = useCallback(() => {
80
+ setIsAddonHovered(true);
81
+ }, []);
82
+ const handleOnMouseLeave = useCallback(() => {
83
+ setIsAddonHovered(false);
84
+ }, []);
85
+ const hoverHandlers = interaction === 'hover' ? {
86
+ onMouseEnter: handleShowWithMouseHover,
87
+ onMouseLeave: () => {
88
+ onHide();
89
+ setIsAddonHovered(false);
90
+ }
91
+ } : {
92
+ onClick: handleShowWithMouse
93
+ };
94
+ const rightAddon = rightAddonType === 'elipsis' ? /*#__PURE__*/_jsx(DSButton, {
95
+ "aria-label": "vertical-elipsis",
96
+ "data-testid": "vertical-elipsis",
97
+ buttonType: "text",
98
+ leftIcon: /*#__PURE__*/_jsx(MoreOptionsVert, {
99
+ className: "submenu-arrow",
100
+ color: visible || isAddonHovered ? ['brand-primary', 800] : ['neutral', 500],
101
+ size: "s"
102
+ }),
103
+ onClick: e => handleShowSubItemsWithMouse(e),
104
+ size: "m",
105
+ variant: BUTTON_VARIANT.DEFAULT
106
+ }) : /*#__PURE__*/_jsx(ChevronRightComp, {}, void 0, /*#__PURE__*/_jsx(ChevronSmallRight, {
107
+ "data-testid": "chevron-right",
108
+ className: "submenu-arrow",
109
+ color: visible || isAddonHovered ? ['brand-primary', 800] : ['neutral', 500],
110
+ size: "sm"
111
+ }));
112
+ return /*#__PURE__*/jsx(Fragment, {
113
+ children: /*#__PURE__*/_jsx(DSPopper, {
114
+ contentComponent: /*#__PURE__*/jsx(Menu, _objectSpread(_objectSpread({
115
+ focusKeyBindings: {
116
+ ArrowLeft: [() => focusItemByNode(itemRef.current), 'exit']
117
+ },
118
+ focusOnOpen: focusOnOpen.current,
119
+ onExitFocusGroup: onHide
120
+ }, hoverHandlers), {}, {
121
+ closeMenu: closeMenu,
122
+ visible: visible,
123
+ children: subitems
124
+ })),
125
+ interactionType: interactionType,
126
+ isOpen: visible,
127
+ onOpen: opening => opening ? onShow() : onHide(),
128
+ placement: "right-start",
129
+ showArrow: false,
130
+ triggerComponent: /*#__PURE__*/jsx(MenuItem, _objectSpread(_objectSpread({
131
+ customRenderer: customRenderer,
132
+ disabledAddonInactive: disabledAddonInactive,
133
+ id: id,
134
+ innerRef: itemRef,
135
+ label: label,
136
+ leftAddon: leftAddon,
137
+ noAddon: noAddon,
138
+ onFocus: handleOnMouseEnter,
139
+ onBlur: handleOnMouseLeave,
140
+ onMouseEnter: handleOnMouseEnter,
141
+ onMouseLeave: handleOnMouseLeave
142
+ }, hoverHandlers), {}, {
143
+ onKeyDown: e => {
144
+ if (e.key === 'ArrowRight' || e.key === 'Enter' || e.keyCode === 32) {
145
+ handleShowWithKeyboard();
146
+ }
147
+ },
148
+ rightAddon: rightAddon
149
+ }, checkableProps))
150
+ })
151
+ });
152
+ }
153
+
154
+ const props = {
155
+ /** dont show addon for submenu */
156
+ noAddon: PropTypes.bool.description('dont show addon for submenu'),
157
+
158
+ /** left addon */
159
+ leftAddon: PropTypes.node.description('left addon'),
160
+
161
+ /** submenu label */
162
+ label: PropTypes.string.description('submenu label'),
163
+
164
+ /** A type indicating how to open/close the tooltip */
165
+ interactionType: PropTypes.oneOf(interactions).description('A type indicating how to open/close the tooltip'),
166
+
167
+ /** sub menu items */
168
+ children: PropTypes.oneOfType([PropTypes.array, PropTypes.node]).description('sub menu items'),
169
+
170
+ /** right addon, ellipsis or undefined */
171
+ rightAddonType: PropTypes.oneOf(['ellipsis']).description('right addon, ellipsis or undefined'),
172
+ disabledAddonInactive: PropTypes.bool.description(''),
173
+
174
+ /** props passed to MenuItem component */
175
+ checkableProps: PropTypes.object.description('props passed to MenuItem component'),
176
+
177
+ /** custom renderer for menu item */
178
+ customRenderer: PropTypes.func.description('custom renderer for menu item'),
179
+
180
+ /** on click handler */
181
+ onClick: PropTypes.func.description('on click handler'),
182
+ closeMenu: PropTypes.any.description(''),
183
+
184
+ /** component id */
185
+ id: PropTypes.string.description('component id')
186
+ };
187
+ const DSSubMenuWithSchema = describe(SubMenu);
188
+ DSSubMenuWithSchema.propTypes = props;
189
+
190
+ export { DSSubMenuWithSchema, SubMenu as default };
@@ -0,0 +1,64 @@
1
+ import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
2
+ import 'core-js/modules/esnext.async-iterator.map.js';
3
+ import 'core-js/modules/esnext.iterator.map.js';
4
+ import 'core-js/modules/esnext.async-iterator.filter.js';
5
+ import 'core-js/modules/esnext.iterator.constructor.js';
6
+ import 'core-js/modules/esnext.iterator.filter.js';
7
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
8
+ import 'core-js/modules/esnext.iterator.for-each.js';
9
+ import { createElement } from 'react';
10
+ import { isFunction } from '@elliemae/ds-utilities';
11
+ import MenuSeparator from './Separator.js';
12
+ import MenuItem from './MenuItem.js';
13
+ import SubMenu from './SubMenu.js';
14
+ import SelectionGroup from './SelectionGroup.js';
15
+ import MenuItemCheckbox from './MenuItemCheckbox.js';
16
+ import MenuItemRadio from './MenuItemRadio.js';
17
+
18
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
19
+
20
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
21
+
22
+ const itemTypes = () => ({
23
+ separator: MenuSeparator,
24
+ menuitem: MenuItem,
25
+ radio: MenuItemRadio,
26
+ checkbox: MenuItemCheckbox,
27
+ submenu: SubMenu,
28
+ 'selection-group': SelectionGroup
29
+ });
30
+
31
+ const fallback = {
32
+ SelectionGroup: 'selection-group'
33
+ };
34
+ function menuItemFactory() {
35
+ let type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
36
+ let items = arguments.length > 1 ? arguments[1] : undefined;
37
+ let defaultItem = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : itemTypes().menuitem;
38
+ const itemsObject = items || itemTypes();
39
+ const parsedType = fallback[type] || type.toLowerCase();
40
+ return itemsObject[parsedType] || defaultItem;
41
+ }
42
+ function renderMenuItems(options) {
43
+ let factory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : menuItemFactory;
44
+ return options.map((option, index) => {
45
+ if (isFunction(option.renderer)) {
46
+ return option.renderer({
47
+ key: option.id,
48
+ item: option
49
+ });
50
+ }
51
+
52
+ const ItemComponent = factory(option.type);
53
+ const children = option.subItems && renderMenuItems(option.subItems, factory);
54
+ return /*#__PURE__*/createElement(ItemComponent, _objectSpread(_objectSpread({}, option), {}, {
55
+ key: option.id || index,
56
+ item: option,
57
+ onClick: null,
58
+ onMouseDown: option.onClick // onClick callback called in onMouseDown due to events order issue
59
+
60
+ }), children);
61
+ });
62
+ }
63
+
64
+ export { menuItemFactory, renderMenuItems };
@@ -0,0 +1,42 @@
1
+ import _jsx from '@babel/runtime/helpers/esm/jsx';
2
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
3
+ import 'core-js/modules/esnext.iterator.constructor.js';
4
+ import 'core-js/modules/esnext.iterator.for-each.js';
5
+ import 'react';
6
+ import { FixedSizeList } from 'react-window';
7
+ import useHeightByAmountOfItems from './utils/useHeightByAmountOfItems.js';
8
+
9
+ const MenuItem = _ref => {
10
+ let {
11
+ data,
12
+ index,
13
+ style
14
+ } = _ref;
15
+ return /*#__PURE__*/_jsx("div", {
16
+ style: style
17
+ }, index, data && data[index] ? data[index] : '');
18
+ }; // eslint-disable-next-line no-unused-vars
19
+
20
+ function VirtualMenuList(_ref2) {
21
+ let {
22
+ items,
23
+ itemHeight = 32,
24
+ amountItemsInWindow = 5,
25
+ width,
26
+ height
27
+ } = _ref2;
28
+ const computedListHeight = useHeightByAmountOfItems({
29
+ amountItems: amountItemsInWindow,
30
+ itemHeight,
31
+ items
32
+ });
33
+ return /*#__PURE__*/_jsx(FixedSizeList, {
34
+ height: height || computedListHeight,
35
+ itemCount: items.length,
36
+ itemData: items,
37
+ itemSize: itemHeight,
38
+ width: width
39
+ }, void 0, MenuItem);
40
+ }
41
+
42
+ export { VirtualMenuList as default };
package/esm/index.js ADDED
@@ -0,0 +1,13 @@
1
+ export { DSMenuWithSchema, Menu, Menu as default } from './Menu.js';
2
+ export { DSMenuItemWithSchema } from './MenuItems/MenuItem.js';
3
+ export { DSSubMenuWithSchema } from './MenuItems/SubMenu.js';
4
+ export { DSMenuCheckboxGroupWithSchema } from './MenuItems/CheckboxGroup.js';
5
+ export { DSMenuItemCheckeableWithSchema } from './MenuItems/MenuItemCheckable.js';
6
+ export { DSMenuItemRadioWithSchema } from './MenuItems/MenuItemRadio.js';
7
+ export { DSMenuRadioGroupWithSchema } from './MenuItems/RadioGroup.js';
8
+ export { DSMenuSearchableGroupWithSchema } from './MenuItems/SearchableGroup.js';
9
+ export { DSMenuSearchableListWithSchema } from './MenuItems/SearchableList.js';
10
+ export { DSMenuSeparatorWithSchema } from './MenuItems/Separator.js';
11
+ export { DSMenuSelectionGroupWithSchema } from './MenuItems/SelectionGroup.js';
12
+ export { default as MenuCombobox } from './MenuCombobox.js';
13
+ export { menuItemFactory, renderMenuItems } from './MenuItems/menuItemFactory.js';
@@ -1,20 +1,18 @@
1
- import * as React from "react";
2
- import { useMemo } from "react";
1
+ import { useMemo } from 'react';
2
+
3
3
  const calculateHeight = (itemHeight, amountItemsInWindow, itemsLength) => {
4
4
  const realAmountItemsInWindow = itemsLength < amountItemsInWindow ? itemsLength : amountItemsInWindow;
5
5
  return itemHeight * realAmountItemsInWindow;
6
6
  };
7
- function useHeightByAmountOfItems({
8
- itemHeight,
9
- amountItems,
10
- items
11
- }) {
7
+
8
+ function useHeightByAmountOfItems(_ref) {
9
+ let {
10
+ itemHeight,
11
+ amountItems,
12
+ items
13
+ } = _ref;
12
14
  const calculatedHeight = useMemo(() => calculateHeight(itemHeight, amountItems, items.length), [amountItems, items]);
13
15
  return calculatedHeight;
14
16
  }
15
- var useHeightByAmountOfItems_default = useHeightByAmountOfItems;
16
- export {
17
- useHeightByAmountOfItems_default as default,
18
- useHeightByAmountOfItems
19
- };
20
- //# sourceMappingURL=useHeightByAmountOfItems.js.map
17
+
18
+ export { useHeightByAmountOfItems as default };
package/package.json CHANGED
@@ -1,94 +1,83 @@
1
1
  {
2
2
  "name": "@elliemae/ds-menu",
3
- "version": "2.3.0-alpha.8",
3
+ "version": "2.3.0-next.10",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Menu",
6
- "files": [
7
- "dist"
8
- ],
9
- "module": "./dist/esm/index.js",
10
- "main": "./dist/cjs/index.js",
11
- "types": "./dist/types/index.d.ts",
6
+ "module": "./esm/index.js",
7
+ "main": "./cjs/index.js",
8
+ "types": "./types/index.d.ts",
12
9
  "exports": {
13
10
  ".": {
14
- "import": "./dist/esm/index.js",
15
- "require": "./dist/cjs/index.js"
11
+ "import": "./esm/index.js",
12
+ "require": "./cjs/index.js"
16
13
  },
17
14
  "./VirtualMenuList": {
18
- "import": "./dist/esm/VirtualMenuList.js",
19
- "require": "./dist/cjs/VirtualMenuList.js"
15
+ "import": "./esm/VirtualMenuList.js",
16
+ "require": "./cjs/VirtualMenuList.js"
20
17
  },
21
18
  "./utils/useHeightByAmountOfItems": {
22
- "import": "./dist/esm/utils/useHeightByAmountOfItems.js",
23
- "require": "./dist/cjs/utils/useHeightByAmountOfItems.js"
19
+ "import": "./esm/utils/useHeightByAmountOfItems.js",
20
+ "require": "./cjs/utils/useHeightByAmountOfItems.js"
24
21
  },
25
22
  "./MenuItems/SubMenu": {
26
- "import": "./dist/esm/MenuItems/SubMenu.js",
27
- "require": "./dist/cjs/MenuItems/SubMenu.js"
23
+ "import": "./esm/MenuItems/SubMenu.js",
24
+ "require": "./cjs/MenuItems/SubMenu.js"
28
25
  },
29
26
  "./MenuItems/Separator": {
30
- "import": "./dist/esm/MenuItems/Separator.js",
31
- "require": "./dist/cjs/MenuItems/Separator.js"
27
+ "import": "./esm/MenuItems/Separator.js",
28
+ "require": "./cjs/MenuItems/Separator.js"
32
29
  },
33
30
  "./MenuItems/SelectionGroup": {
34
- "import": "./dist/esm/MenuItems/SelectionGroup.js",
35
- "require": "./dist/cjs/MenuItems/SelectionGroup.js"
31
+ "import": "./esm/MenuItems/SelectionGroup.js",
32
+ "require": "./cjs/MenuItems/SelectionGroup.js"
36
33
  },
37
34
  "./MenuItems/SearchableList": {
38
- "import": "./dist/esm/MenuItems/SearchableList.js",
39
- "require": "./dist/cjs/MenuItems/SearchableList.js"
35
+ "import": "./esm/MenuItems/SearchableList.js",
36
+ "require": "./cjs/MenuItems/SearchableList.js"
40
37
  },
41
38
  "./MenuItems/SearchableGroup": {
42
- "import": "./dist/esm/MenuItems/SearchableGroup.js",
43
- "require": "./dist/cjs/MenuItems/SearchableGroup.js"
44
- },
45
- "./MenuItems/renderMenuItems": {
46
- "import": "./dist/esm/MenuItems/renderMenuItems.js",
47
- "require": "./dist/cjs/MenuItems/renderMenuItems.js"
39
+ "import": "./esm/MenuItems/SearchableGroup.js",
40
+ "require": "./cjs/MenuItems/SearchableGroup.js"
48
41
  },
49
42
  "./MenuItems/RadioGroup": {
50
- "import": "./dist/esm/MenuItems/RadioGroup.js",
51
- "require": "./dist/cjs/MenuItems/RadioGroup.js"
43
+ "import": "./esm/MenuItems/RadioGroup.js",
44
+ "require": "./cjs/MenuItems/RadioGroup.js"
52
45
  },
53
46
  "./MenuItems/MenuItemRadio": {
54
- "import": "./dist/esm/MenuItems/MenuItemRadio.js",
55
- "require": "./dist/cjs/MenuItems/MenuItemRadio.js"
47
+ "import": "./esm/MenuItems/MenuItemRadio.js",
48
+ "require": "./cjs/MenuItems/MenuItemRadio.js"
56
49
  },
57
50
  "./MenuItems/menuItemFactory": {
58
- "import": "./dist/esm/MenuItems/menuItemFactory.js",
59
- "require": "./dist/cjs/MenuItems/menuItemFactory.js"
51
+ "import": "./esm/MenuItems/menuItemFactory.js",
52
+ "require": "./cjs/MenuItems/menuItemFactory.js"
60
53
  },
61
54
  "./MenuItems/MenuItemCheckbox": {
62
- "import": "./dist/esm/MenuItems/MenuItemCheckbox.js",
63
- "require": "./dist/cjs/MenuItems/MenuItemCheckbox.js"
55
+ "import": "./esm/MenuItems/MenuItemCheckbox.js",
56
+ "require": "./cjs/MenuItems/MenuItemCheckbox.js"
64
57
  },
65
58
  "./MenuItems/MenuItemCheckable": {
66
- "import": "./dist/esm/MenuItems/MenuItemCheckable.js",
67
- "require": "./dist/cjs/MenuItems/MenuItemCheckable.js"
59
+ "import": "./esm/MenuItems/MenuItemCheckable.js",
60
+ "require": "./cjs/MenuItems/MenuItemCheckable.js"
68
61
  },
69
62
  "./MenuItems/MenuItem": {
70
- "import": "./dist/esm/MenuItems/MenuItem.js",
71
- "require": "./dist/cjs/MenuItems/MenuItem.js"
63
+ "import": "./esm/MenuItems/MenuItem.js",
64
+ "require": "./cjs/MenuItems/MenuItem.js"
72
65
  },
73
66
  "./MenuItems/CheckboxGroup": {
74
- "import": "./dist/esm/MenuItems/CheckboxGroup.js",
75
- "require": "./dist/cjs/MenuItems/CheckboxGroup.js"
76
- },
77
- "./MenuExports": {
78
- "import": "./dist/esm/MenuExports.js",
79
- "require": "./dist/cjs/MenuExports.js"
67
+ "import": "./esm/MenuItems/CheckboxGroup.js",
68
+ "require": "./cjs/MenuItems/CheckboxGroup.js"
80
69
  },
81
70
  "./MenuContext": {
82
- "import": "./dist/esm/MenuContext.js",
83
- "require": "./dist/cjs/MenuContext.js"
71
+ "import": "./esm/MenuContext.js",
72
+ "require": "./cjs/MenuContext.js"
84
73
  },
85
74
  "./MenuCombobox": {
86
- "import": "./dist/esm/MenuCombobox.js",
87
- "require": "./dist/cjs/MenuCombobox.js"
75
+ "import": "./esm/MenuCombobox.js",
76
+ "require": "./cjs/MenuCombobox.js"
88
77
  },
89
78
  "./Menu": {
90
- "import": "./dist/esm/Menu.js",
91
- "require": "./dist/cjs/Menu.js"
79
+ "import": "./esm/Menu.js",
80
+ "require": "./cjs/Menu.js"
92
81
  }
93
82
  },
94
83
  "sideEffects": [
@@ -100,30 +89,36 @@
100
89
  "url": "https://git.elliemae.io/platform-ui/dimsum.git"
101
90
  },
102
91
  "engines": {
103
- "pnpm": ">=6",
104
- "node": ">=16"
92
+ "npm": ">=7",
93
+ "node": ">=14"
105
94
  },
106
95
  "author": "ICE MT",
96
+ "scripts": {
97
+ "dev": "cross-env NODE_ENV=development && node ../../scripts/build/build.js -w",
98
+ "prebuild": "exit 0",
99
+ "predev": "exit 0",
100
+ "build": "node ../../scripts/build/build.js"
101
+ },
107
102
  "dependencies": {
108
- "@elliemae/ds-button": "2.3.0-alpha.8",
109
- "@elliemae/ds-classnames": "2.3.0-alpha.8",
110
- "@elliemae/ds-form": "2.3.0-alpha.8",
111
- "@elliemae/ds-hidden": "2.3.0-alpha.8",
112
- "@elliemae/ds-icons": "2.3.0-alpha.8",
113
- "@elliemae/ds-popper": "2.3.0-alpha.8",
114
- "@elliemae/ds-separator": "2.3.0-alpha.8",
115
- "@elliemae/ds-shared": "2.3.0-alpha.8",
116
- "@elliemae/ds-truncated-tooltip-text": "2.3.0-alpha.8",
117
- "@elliemae/ds-utilities": "2.3.0-alpha.8",
103
+ "@elliemae/ds-button": "2.3.0-next.10",
104
+ "@elliemae/ds-classnames": "2.3.0-next.10",
105
+ "@elliemae/ds-form": "2.3.0-next.10",
106
+ "@elliemae/ds-hidden": "2.3.0-next.10",
107
+ "@elliemae/ds-icons": "2.3.0-next.10",
108
+ "@elliemae/ds-popper": "2.3.0-next.10",
109
+ "@elliemae/ds-separator": "2.3.0-next.10",
110
+ "@elliemae/ds-shared": "2.3.0-next.10",
111
+ "@elliemae/ds-truncated-tooltip-text": "2.3.0-next.10",
112
+ "@elliemae/ds-utilities": "2.3.0-next.10",
118
113
  "prop-types": "~15.7.2",
119
114
  "react-desc": "~4.1.3",
120
115
  "react-spring": "~8.0.27",
121
116
  "react-window": "~1.8.6"
122
117
  },
123
118
  "devDependencies": {
124
- "@testing-library/jest-dom": "~5.15.1",
119
+ "@testing-library/jest-dom": "~5.15.0",
125
120
  "@testing-library/react": "~12.1.2",
126
- "jest-styled-components": "~7.0.8",
121
+ "jest-styled-components": "~7.0.6",
127
122
  "styled-components": "~5.3.3"
128
123
  },
129
124
  "peerDependencies": {
@@ -134,12 +129,7 @@
134
129
  },
135
130
  "publishConfig": {
136
131
  "access": "public",
137
- "typeSafety": false
138
- },
139
- "scripts": {
140
- "dev": "cross-env NODE_ENV=development && node ../../scripts/build/build.js -w",
141
- "prebuild": "exit 0",
142
- "predev": "exit 0",
143
- "build": "node ../../scripts/build/build.js"
132
+ "directory": "dist",
133
+ "generateSubmodules": true
144
134
  }
145
135
  }
@@ -0,0 +1,11 @@
1
+ /// <reference path="../../../../shared/typings/react-desc.d.ts" />
2
+ /// <reference types="react" />
3
+ import { renderMenuItems, menuItemFactory } from './MenuItems/menuItemFactory';
4
+ declare const Menu: any;
5
+ declare const DSMenuWithSchema: {
6
+ (props?: unknown): JSX.Element;
7
+ propTypes: unknown;
8
+ toTypescript: () => import("react-desc").TypescriptSchema;
9
+ };
10
+ export { Menu, menuItemFactory, renderMenuItems, DSMenuWithSchema };
11
+ export default Menu;
@@ -0,0 +1,28 @@
1
+ /// <reference types="react" />
2
+ import PropTypes from 'prop-types';
3
+ declare function MenuCombobox({ dropdownFilterOptions, options, onSelectMenuItem, innerRef, maxOptions, loading, ...rest }: {
4
+ [x: string]: any;
5
+ dropdownFilterOptions?: {} | undefined;
6
+ options?: never[] | undefined;
7
+ onSelectMenuItem?: (() => null) | undefined;
8
+ innerRef: any;
9
+ maxOptions?: number | undefined;
10
+ loading?: boolean | undefined;
11
+ }): JSX.Element;
12
+ declare namespace MenuCombobox {
13
+ var propTypes: {
14
+ /** Options */
15
+ dropdownFilterOptions: PropTypes.Requireable<PropTypes.InferProps<{}>>;
16
+ /** The option or menu items to render */
17
+ options: PropTypes.Requireable<(object | null | undefined)[]>;
18
+ /** Handler when a menu item is selected */
19
+ onSelectMenuItem: PropTypes.Requireable<(...args: any[]) => any>;
20
+ /** Internal ref */
21
+ innerRef: PropTypes.Requireable<object>;
22
+ /** Max options to display in the list */
23
+ maxOptions: PropTypes.Requireable<number>;
24
+ /** Is loading */
25
+ loading: PropTypes.Requireable<boolean>;
26
+ };
27
+ }
28
+ export default MenuCombobox;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: React.Context<unknown>;
3
+ export default _default;
@@ -0,0 +1,32 @@
1
+ /// <reference path="../../../../../shared/typings/react-desc.d.ts" />
2
+ /// <reference types="react" />
3
+ declare function CheckboxGroup(props: any): JSX.Element;
4
+ declare namespace CheckboxGroup {
5
+ var propTypes: {
6
+ active: {
7
+ defaultValue(arg: import("react-desc").ReactDescPossibleDefaultValues): {
8
+ deprecated: import("react-desc").PropTypesDescValidator;
9
+ };
10
+ isRequired: import("react-desc").PropTypesDescValue;
11
+ };
12
+ multi: {
13
+ defaultValue(arg: import("react-desc").ReactDescPossibleDefaultValues): {
14
+ deprecated: import("react-desc").PropTypesDescValidator;
15
+ };
16
+ isRequired: import("react-desc").PropTypesDescValue;
17
+ };
18
+ onCheck: {
19
+ defaultValue(arg: import("react-desc").ReactDescPossibleDefaultValues): {
20
+ deprecated: import("react-desc").PropTypesDescValidator;
21
+ };
22
+ isRequired: import("react-desc").PropTypesDescValue;
23
+ };
24
+ };
25
+ }
26
+ declare const DSMenuCheckboxGroupWithSchema: {
27
+ (props?: unknown): JSX.Element;
28
+ propTypes: unknown;
29
+ toTypescript: () => import("react-desc").TypescriptSchema;
30
+ };
31
+ export default CheckboxGroup;
32
+ export { DSMenuCheckboxGroupWithSchema };