@elliemae/ds-menu 2.3.0-alpha.6 → 2.3.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) 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 -76
  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/DSMenu.js +0 -127
  59. package/dist/cjs/DSMenu.js.map +0 -7
  60. package/dist/cjs/Menu.js +0 -60
  61. package/dist/cjs/Menu.js.map +0 -7
  62. package/dist/cjs/MenuCombobox.js +0 -70
  63. package/dist/cjs/MenuCombobox.js.map +0 -7
  64. package/dist/cjs/MenuContext.js +0 -38
  65. package/dist/cjs/MenuContext.js.map +0 -7
  66. package/dist/cjs/MenuExports.js +0 -36
  67. package/dist/cjs/MenuExports.js.map +0 -7
  68. package/dist/cjs/MenuItems/CheckboxGroup.js +0 -52
  69. package/dist/cjs/MenuItems/CheckboxGroup.js.map +0 -7
  70. package/dist/cjs/MenuItems/MenuItem.js +0 -156
  71. package/dist/cjs/MenuItems/MenuItem.js.map +0 -7
  72. package/dist/cjs/MenuItems/MenuItemCheckable.js +0 -88
  73. package/dist/cjs/MenuItems/MenuItemCheckable.js.map +0 -7
  74. package/dist/cjs/MenuItems/MenuItemCheckbox.js +0 -48
  75. package/dist/cjs/MenuItems/MenuItemCheckbox.js.map +0 -7
  76. package/dist/cjs/MenuItems/MenuItemRadio.js +0 -53
  77. package/dist/cjs/MenuItems/MenuItemRadio.js.map +0 -7
  78. package/dist/cjs/MenuItems/RadioGroup.js +0 -51
  79. package/dist/cjs/MenuItems/RadioGroup.js.map +0 -7
  80. package/dist/cjs/MenuItems/SearchableGroup.js +0 -97
  81. package/dist/cjs/MenuItems/SearchableGroup.js.map +0 -7
  82. package/dist/cjs/MenuItems/SearchableList.js +0 -114
  83. package/dist/cjs/MenuItems/SearchableList.js.map +0 -7
  84. package/dist/cjs/MenuItems/SelectionGroup.js +0 -102
  85. package/dist/cjs/MenuItems/SelectionGroup.js.map +0 -7
  86. package/dist/cjs/MenuItems/Separator.js +0 -59
  87. package/dist/cjs/MenuItems/Separator.js.map +0 -7
  88. package/dist/cjs/MenuItems/SubMenu.js +0 -186
  89. package/dist/cjs/MenuItems/SubMenu.js.map +0 -7
  90. package/dist/cjs/MenuItems/menuItemFactory.js +0 -41
  91. package/dist/cjs/MenuItems/menuItemFactory.js.map +0 -7
  92. package/dist/cjs/MenuItems/renderMenuItems.js +0 -53
  93. package/dist/cjs/MenuItems/renderMenuItems.js.map +0 -7
  94. package/dist/cjs/VirtualMenuList.js +0 -78
  95. package/dist/cjs/VirtualMenuList.js.map +0 -7
  96. package/dist/cjs/index.js +0 -63
  97. package/dist/cjs/index.js.map +0 -7
  98. package/dist/cjs/utils/useHeightByAmountOfItems.js +0 -49
  99. package/dist/cjs/utils/useHeightByAmountOfItems.js.map +0 -7
  100. package/dist/esm/DSMenu.js +0 -98
  101. package/dist/esm/DSMenu.js.map +0 -7
  102. package/dist/esm/Menu.js +0 -31
  103. package/dist/esm/Menu.js.map +0 -7
  104. package/dist/esm/MenuCombobox.js +0 -41
  105. package/dist/esm/MenuCombobox.js.map +0 -7
  106. package/dist/esm/MenuContext.js +0 -9
  107. package/dist/esm/MenuContext.js.map +0 -7
  108. package/dist/esm/MenuExports.js +0 -7
  109. package/dist/esm/MenuExports.js.map +0 -7
  110. package/dist/esm/MenuItems/CheckboxGroup.js +0 -23
  111. package/dist/esm/MenuItems/CheckboxGroup.js.map +0 -7
  112. package/dist/esm/MenuItems/MenuItem.js +0 -127
  113. package/dist/esm/MenuItems/MenuItem.js.map +0 -7
  114. package/dist/esm/MenuItems/MenuItemCheckable.js +0 -59
  115. package/dist/esm/MenuItems/MenuItemCheckable.js.map +0 -7
  116. package/dist/esm/MenuItems/MenuItemCheckbox.js +0 -19
  117. package/dist/esm/MenuItems/MenuItemCheckbox.js.map +0 -7
  118. package/dist/esm/MenuItems/MenuItemRadio.js +0 -24
  119. package/dist/esm/MenuItems/MenuItemRadio.js.map +0 -7
  120. package/dist/esm/MenuItems/RadioGroup.js +0 -22
  121. package/dist/esm/MenuItems/RadioGroup.js.map +0 -7
  122. package/dist/esm/MenuItems/SearchableGroup.js +0 -68
  123. package/dist/esm/MenuItems/SearchableGroup.js.map +0 -7
  124. package/dist/esm/MenuItems/SearchableList.js +0 -85
  125. package/dist/esm/MenuItems/SearchableList.js.map +0 -7
  126. package/dist/esm/MenuItems/SelectionGroup.js +0 -73
  127. package/dist/esm/MenuItems/SelectionGroup.js.map +0 -7
  128. package/dist/esm/MenuItems/Separator.js +0 -30
  129. package/dist/esm/MenuItems/Separator.js.map +0 -7
  130. package/dist/esm/MenuItems/SubMenu.js +0 -157
  131. package/dist/esm/MenuItems/SubMenu.js.map +0 -7
  132. package/dist/esm/MenuItems/menuItemFactory.js +0 -12
  133. package/dist/esm/MenuItems/menuItemFactory.js.map +0 -7
  134. package/dist/esm/MenuItems/renderMenuItems.js +0 -24
  135. package/dist/esm/MenuItems/renderMenuItems.js.map +0 -7
  136. package/dist/esm/VirtualMenuList.js +0 -49
  137. package/dist/esm/VirtualMenuList.js.map +0 -7
  138. package/dist/esm/index.js +0 -34
  139. package/dist/esm/index.js.map +0 -7
  140. 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,98 +1,83 @@
1
1
  {
2
2
  "name": "@elliemae/ds-menu",
3
- "version": "2.3.0-alpha.6",
3
+ "version": "2.3.0-next.0",
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"
92
- },
93
- "./DSMenu": {
94
- "import": "./dist/esm/DSMenu.js",
95
- "require": "./dist/cjs/DSMenu.js"
79
+ "import": "./esm/Menu.js",
80
+ "require": "./cjs/Menu.js"
96
81
  }
97
82
  },
98
83
  "sideEffects": [
@@ -104,30 +89,36 @@
104
89
  "url": "https://git.elliemae.io/platform-ui/dimsum.git"
105
90
  },
106
91
  "engines": {
107
- "pnpm": ">=6",
108
- "node": ">=16"
92
+ "npm": ">=7",
93
+ "node": ">=14"
109
94
  },
110
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
+ },
111
102
  "dependencies": {
112
- "@elliemae/ds-button": "2.3.0-alpha.6",
113
- "@elliemae/ds-classnames": "2.3.0-alpha.6",
114
- "@elliemae/ds-form": "2.3.0-alpha.6",
115
- "@elliemae/ds-hidden": "2.3.0-alpha.6",
116
- "@elliemae/ds-icons": "2.3.0-alpha.6",
117
- "@elliemae/ds-popper": "2.3.0-alpha.6",
118
- "@elliemae/ds-separator": "2.3.0-alpha.6",
119
- "@elliemae/ds-shared": "2.3.0-alpha.6",
120
- "@elliemae/ds-truncated-tooltip-text": "2.3.0-alpha.6",
121
- "@elliemae/ds-utilities": "2.3.0-alpha.6",
103
+ "@elliemae/ds-button": "2.3.0-next.0",
104
+ "@elliemae/ds-classnames": "2.3.0-next.0",
105
+ "@elliemae/ds-form": "2.3.0-next.0",
106
+ "@elliemae/ds-hidden": "2.3.0-next.0",
107
+ "@elliemae/ds-icons": "2.3.0-next.0",
108
+ "@elliemae/ds-popper": "2.3.0-next.0",
109
+ "@elliemae/ds-separator": "2.3.0-next.0",
110
+ "@elliemae/ds-shared": "2.3.0-next.0",
111
+ "@elliemae/ds-truncated-tooltip-text": "2.3.0-next.0",
112
+ "@elliemae/ds-utilities": "2.3.0-next.0",
122
113
  "prop-types": "~15.7.2",
123
114
  "react-desc": "~4.1.3",
124
115
  "react-spring": "~8.0.27",
125
116
  "react-window": "~1.8.6"
126
117
  },
127
118
  "devDependencies": {
128
- "@testing-library/jest-dom": "~5.15.1",
119
+ "@testing-library/jest-dom": "~5.15.0",
129
120
  "@testing-library/react": "~12.1.2",
130
- "jest-styled-components": "~7.0.8",
121
+ "jest-styled-components": "~7.0.6",
131
122
  "styled-components": "~5.3.3"
132
123
  },
133
124
  "peerDependencies": {
@@ -138,12 +129,7 @@
138
129
  },
139
130
  "publishConfig": {
140
131
  "access": "public",
141
- "typeSafety": false
142
- },
143
- "scripts": {
144
- "dev": "cross-env NODE_ENV=development && node ../../scripts/build/build.js -w",
145
- "prebuild": "exit 0",
146
- "predev": "exit 0",
147
- "build": "node ../../scripts/build/build.js"
132
+ "directory": "dist",
133
+ "generateSubmodules": true
148
134
  }
149
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 };