@ebay/ui-core-react 4.0.5 → 4.1.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.
- package/ebay-menu/index.d.ts +1 -1
- package/ebay-menu/index.d.ts.map +1 -1
- package/ebay-menu/index.js +11 -0
- package/ebay-menu/menu.d.ts +8 -4
- package/ebay-menu/menu.d.ts.map +1 -1
- package/ebay-menu/menu.js +4 -4
- package/ebay-menu-button/README.md +69 -0
- package/ebay-menu-button/index.d.ts +6 -0
- package/ebay-menu-button/index.d.ts.map +1 -0
- package/ebay-menu-button/index.js +21 -0
- package/ebay-menu-button/menu-button-item.d.ts +3 -0
- package/ebay-menu-button/menu-button-item.d.ts.map +1 -0
- package/ebay-menu-button/menu-button-item.js +5 -0
- package/ebay-menu-button/menu-button-label.d.ts +4 -0
- package/ebay-menu-button/menu-button-label.d.ts.map +1 -0
- package/ebay-menu-button/menu-button-label.js +11 -0
- package/ebay-menu-button/menu-button-separator.d.ts +5 -0
- package/ebay-menu-button/menu-button-separator.d.ts.map +1 -0
- package/ebay-menu-button/menu-button-separator.js +34 -0
- package/ebay-menu-button/menu-button.d.ts +28 -0
- package/ebay-menu-button/menu-button.d.ts.map +1 -0
- package/ebay-menu-button/menu-button.js +129 -0
- package/ebay-menu-button/types.d.ts +2 -0
- package/ebay-menu-button/types.d.ts.map +1 -0
- package/ebay-menu-button/types.js +2 -0
- package/package.json +1 -1
package/ebay-menu/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { default as EbayMenu } from './menu';
|
|
2
2
|
export { default as EbayMenuItem, MenuItemProps } from './menu-item';
|
|
3
3
|
export { default as EbayMenuSeparator } from './menu-item-separator';
|
|
4
|
-
export
|
|
4
|
+
export * from './types';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/ebay-menu/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ebay-menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACpE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ebay-menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACpE,cAAc,SAAS,CAAA"}
|
package/ebay-menu/index.js
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
2
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
13
|
var menu_1 = require("./menu");
|
|
4
14
|
Object.defineProperty(exports, "EbayMenu", { enumerable: true, get: function () { return menu_1.default; } });
|
|
@@ -6,3 +16,4 @@ var menu_item_1 = require("./menu-item");
|
|
|
6
16
|
Object.defineProperty(exports, "EbayMenuItem", { enumerable: true, get: function () { return menu_item_1.default; } });
|
|
7
17
|
var menu_item_separator_1 = require("./menu-item-separator");
|
|
8
18
|
Object.defineProperty(exports, "EbayMenuSeparator", { enumerable: true, get: function () { return menu_item_separator_1.default; } });
|
|
19
|
+
__exportStar(require("./types"), exports);
|
package/ebay-menu/menu.d.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { ComponentProps, FC } from 'react';
|
|
2
2
|
import { EbayMenuType, EbayMenuPriority } from './index';
|
|
3
|
-
declare type
|
|
3
|
+
declare type ContainerDivProps = Omit<ComponentProps<'div'>, 'onKeyDown' | 'onChange'>;
|
|
4
|
+
declare type ContainerSpanProps = Omit<ComponentProps<'span'>, 'onKeyDown' | 'onChange'>;
|
|
4
5
|
declare type Callback = (i: number, checked: boolean) => void;
|
|
5
|
-
declare type Props =
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
declare type Props = ContainerDivProps & ContainerSpanProps & {
|
|
7
|
+
autofocus?: boolean;
|
|
8
|
+
baseEl?: 'div' | 'span';
|
|
8
9
|
checked?: number;
|
|
10
|
+
className?: string;
|
|
11
|
+
priority?: EbayMenuPriority;
|
|
12
|
+
type?: EbayMenuType;
|
|
9
13
|
onKeyDown?: Callback;
|
|
10
14
|
onSelect?: Callback;
|
|
11
15
|
onChange?: Callback;
|
package/ebay-menu/menu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/ebay-menu/menu.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEV,cAAc,EAAE,EAAE,EACrB,MAAM,OAAO,CAAA;AAMd,OAAO,EAAgB,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAEtE,aAAK,
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/ebay-menu/menu.tsx"],"names":[],"mappings":"AAAA,OAAc,EAEV,cAAc,EAAE,EAAE,EACrB,MAAM,OAAO,CAAA;AAMd,OAAO,EAAgB,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAEtE,aAAK,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC,CAAA;AAC9E,aAAK,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC,CAAA;AAEhF,aAAK,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;AACrD,aAAK,KAAK,GAAG,iBAAiB,GAAG,kBAAkB,GAAG;IAClD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACvB,CAAA;AAID,QAAA,MAAM,QAAQ,EAAE,EAAE,CAAC,KAAK,CAqGvB,CAAA;AAED,eAAe,QAAQ,CAAA"}
|
package/ebay-menu/menu.js
CHANGED
|
@@ -52,10 +52,10 @@ var event_utils_1 = require("../common/event-utils");
|
|
|
52
52
|
var index_1 = require("./index");
|
|
53
53
|
var changedIndex = function (arr1, arr2) { return arr1.findIndex(function (x, i) { return arr2[i] !== x; }); };
|
|
54
54
|
var EbayMenu = function (_a) {
|
|
55
|
-
var type = _a.type,
|
|
55
|
+
var _b = _a.baseEl, Container = _b === void 0 ? 'span' : _b, type = _a.type, _c = _a.priority, priority = _c === void 0 ? 'secondary' : _c, checked = _a.checked, className = _a.className, _d = _a.onKeyDown, onKeyDown = _d === void 0 ? function () { } : _d, _e = _a.onChange, onChange = _e === void 0 ? function () { } : _e, _f = _a.onSelect, onSelect = _f === void 0 ? function () { } : _f, children = _a.children, rest = __rest(_a, ["baseEl", "type", "priority", "checked", "className", "onKeyDown", "onChange", "onSelect", "children"]);
|
|
56
56
|
var childrenArray = react_1.Children.toArray(children);
|
|
57
|
-
var
|
|
58
|
-
var
|
|
57
|
+
var _g = use_roving_index_1.default(children, index_1.EbayMenuItem), focusedIndex = _g[0], setFocusedIndex = _g[1];
|
|
58
|
+
var _h = react_1.useState(childrenArray.map(function () { return false; })), checkedIndexes = _h[0], setCheckedIndexes = _h[1];
|
|
59
59
|
var updateIndex = function (index, value, resetOthers) {
|
|
60
60
|
if (resetOthers === void 0) { resetOthers = false; }
|
|
61
61
|
setCheckedIndexes(function (prevCheckedIndexes) {
|
|
@@ -106,7 +106,7 @@ var EbayMenu = function (_a) {
|
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
}, [checkedIndexes]);
|
|
109
|
-
return (react_1.default.createElement(
|
|
109
|
+
return (react_1.default.createElement(Container, __assign({}, rest, { className: classnames_1.default(className, 'menu') }),
|
|
110
110
|
react_1.default.createElement("div", { className: "menu__items", role: "menu" }, childrenArray.map(function (child, i) {
|
|
111
111
|
var _a = child.props, _b = _a.onClick, onClick = _b === void 0 ? function () { } : _b, _c = _a.onFocus, onFocus = _c === void 0 ? function () { } : _c, itemRest = __rest(_a, ["onClick", "onFocus"]);
|
|
112
112
|
return react_1.cloneElement(child, __assign(__assign({}, itemRest), { type: type, focused: i === focusedIndex, tabIndex: focusedIndex === undefined ? 0 : -1, checked: checkedIndexes[i], onFocus: function (e) {
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# ebay-menu-button
|
|
2
|
+
|
|
3
|
+
## Demo
|
|
4
|
+
[Storybook](https://pages.github.corp.ebay.com/React/ebayui-core-react/master/?path=/story/ebay-menu-button--default)
|
|
5
|
+
|
|
6
|
+
## Install
|
|
7
|
+
```
|
|
8
|
+
yarn add ebayui-core-react
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
```jsx harmony
|
|
13
|
+
import {
|
|
14
|
+
EbayMenuButton,
|
|
15
|
+
EbayMenuButtonItem as Item,
|
|
16
|
+
EbayMenuButtonSeparator as Separator,
|
|
17
|
+
EbayMenuButtonLabel as Label
|
|
18
|
+
} from 'ebayui-core-react/ebay-menu-button';
|
|
19
|
+
import '@ebay/skin/menu-button';
|
|
20
|
+
<EbayMenuButton text="Menu">
|
|
21
|
+
<Item>Item 1</Item>
|
|
22
|
+
<Item>Item 2</Item>
|
|
23
|
+
<Item>Item 3</Item>
|
|
24
|
+
<Separator />
|
|
25
|
+
<Item>Log in</Item>
|
|
26
|
+
</EbayMenuButton>
|
|
27
|
+
// With a complext label
|
|
28
|
+
<EbayMenuButton a11yText="Menu">
|
|
29
|
+
<Label><img src="menu-logo.svg" /></Label>
|
|
30
|
+
<Item>Item 1</Item>
|
|
31
|
+
<Item>Item 2</Item>
|
|
32
|
+
</EbayMenuButton>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## EbayMenuButton Attributes
|
|
36
|
+
|
|
37
|
+
Name | Type | Required | Description
|
|
38
|
+
--- |----------| --- | ---
|
|
39
|
+
`text` | String | No | button label text
|
|
40
|
+
`a11yText` | String | Only without a text label | a11y text for the button
|
|
41
|
+
`noToggleIcon` | Boolean | No | whether to hide the chevron toggle icon
|
|
42
|
+
`expanded` | Boolean | No | whether content is expanded
|
|
43
|
+
`type` | String | No | can be `radio` or `checkbox`
|
|
44
|
+
`reverse` | Boolean | No | expand menu flyout to the left
|
|
45
|
+
`fixWidth` | Boolean | No | Constrain items container width to button width
|
|
46
|
+
`borderless` | Boolean | No | Whether button has borders
|
|
47
|
+
`size` | String | No | button size: `large` or `regular` (default)
|
|
48
|
+
`priority` | String | No | button size: `primary`, `secondary` (default), `tertiary`, `none`
|
|
49
|
+
`checked` | Number | No | will set the corresponding index item to checked state and use the `aria-checked` attribute in markup
|
|
50
|
+
`disabled` | Boolean | No | will disable the entire dropdown (disables the ebay-button label) if set to true
|
|
51
|
+
`variant` | String | No | will change the button style: `overflow`, `form` or `button`
|
|
52
|
+
`collapseOnSelect` | Boolean | No | Will collapse whole menu when an item is selected in menu. Typically used in type=`radio`
|
|
53
|
+
`prefixId` | String | No | The id of an external element to use as the prefix label for the menu button. Cannot be used with `prefix-label` (NOT YET IMPLEMENTED)
|
|
54
|
+
`prefixLabel` | String | No |The label to add before each selected item on the button. Cannot be used with `prefix-id` (NOT YET IMPLEMENTED)
|
|
55
|
+
`onExpand` | Function | No | Called when content is expanded
|
|
56
|
+
`onCollapse` | Function | No | Called when content is collapsed
|
|
57
|
+
`onSelect` | Function | No | props: ( index: number ), triggered on item clicked (not for type `radio`/`checkbox`)
|
|
58
|
+
`onChange` | Function | No | props: (index: number, checked: number[], checkedValues: string[]), triggered on item `checked` change, (for type `radio`/`checkbox` only)
|
|
59
|
+
|
|
60
|
+
## EbayMenuButtonItem Attributes
|
|
61
|
+
|
|
62
|
+
Name | Type | Required | Description
|
|
63
|
+
--- | --- | --- | ---
|
|
64
|
+
`value` | String | No | for type `radio`, `checkbox`: the value to use with callbacks for `checkedValues[]`
|
|
65
|
+
`checked` | Boolean | No | for type `radio`, `checkbox`: whether or not the item is checked
|
|
66
|
+
`disabled` | Boolean | No | makes the menu item disabled
|
|
67
|
+
`badgeNumber` | Number | No | used as the number to be placed in the badge
|
|
68
|
+
`badgeAriaLabel` | Number | No | used as the number to be placed in the badge (NOT YET IMPLEMENTED)
|
|
69
|
+
`onClick` | Function | No | For a non-link menu item, with param `{ originalEvent }`
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as EbayMenuButton, EbayMenuButtonProps } from './menu-button';
|
|
2
|
+
export { default as EbayMenuButtonItem } from './menu-button-item';
|
|
3
|
+
export { default as EbayMenuButtonSeparator } from './menu-button-separator';
|
|
4
|
+
export { default as EbayMenuButtonLabel } from './menu-button-label';
|
|
5
|
+
export * from './types';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ebay-menu-button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACpE,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
var menu_button_1 = require("./menu-button");
|
|
14
|
+
Object.defineProperty(exports, "EbayMenuButton", { enumerable: true, get: function () { return menu_button_1.default; } });
|
|
15
|
+
var menu_button_item_1 = require("./menu-button-item");
|
|
16
|
+
Object.defineProperty(exports, "EbayMenuButtonItem", { enumerable: true, get: function () { return menu_button_item_1.default; } });
|
|
17
|
+
var menu_button_separator_1 = require("./menu-button-separator");
|
|
18
|
+
Object.defineProperty(exports, "EbayMenuButtonSeparator", { enumerable: true, get: function () { return menu_button_separator_1.default; } });
|
|
19
|
+
var menu_button_label_1 = require("./menu-button-label");
|
|
20
|
+
Object.defineProperty(exports, "EbayMenuButtonLabel", { enumerable: true, get: function () { return menu_button_label_1.default; } });
|
|
21
|
+
__exportStar(require("./types"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-button-item.d.ts","sourceRoot":"","sources":["../../src/ebay-menu-button/menu-button-item.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,eAAe,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-button-label.d.ts","sourceRoot":"","sources":["../../src/ebay-menu-button/menu-button-label.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAEjC,QAAA,MAAM,mBAAmB,EAAE,EAAsC,CAAA;AAEjE,eAAe,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var react_1 = __importDefault(require("react"));
|
|
7
|
+
var EbayMenuButtonLabel = function (_a) {
|
|
8
|
+
var children = _a.children;
|
|
9
|
+
return react_1.default.createElement(react_1.default.Fragment, null, children);
|
|
10
|
+
};
|
|
11
|
+
exports.default = EbayMenuButtonLabel;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-button-separator.d.ts","sourceRoot":"","sources":["../../src/ebay-menu-button/menu-button-separator.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAGjD,aAAK,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;AAEjC,QAAA,MAAM,uBAAuB,EAAE,EAAE,CAAC,KAAK,CAStC,CAAA;AAED,eAAe,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
14
|
+
var t = {};
|
|
15
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
16
|
+
t[p] = s[p];
|
|
17
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
18
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
19
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
20
|
+
t[p[i]] = s[p[i]];
|
|
21
|
+
}
|
|
22
|
+
return t;
|
|
23
|
+
};
|
|
24
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
25
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
26
|
+
};
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
var react_1 = __importDefault(require("react"));
|
|
29
|
+
var classnames_1 = __importDefault(require("classnames"));
|
|
30
|
+
var EbayMenuButtonSeparator = function (_a) {
|
|
31
|
+
var className = _a.className, rest = __rest(_a, ["className"]);
|
|
32
|
+
return (react_1.default.createElement("hr", __assign({}, rest, { className: classnames_1.default(className, 'menu-button__separator'), role: "separator" })));
|
|
33
|
+
};
|
|
34
|
+
exports.default = EbayMenuButtonSeparator;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { ComponentProps, FC } from 'react';
|
|
2
|
+
import { EbayMenuType } from '../ebay-menu';
|
|
3
|
+
import { EbayButtonProps } from '../ebay-button';
|
|
4
|
+
import { EbayMenuButtonVariant } from './index';
|
|
5
|
+
export declare type EbayMenuButtonProps = {
|
|
6
|
+
a11yText?: string;
|
|
7
|
+
className?: string;
|
|
8
|
+
fixWidth?: boolean;
|
|
9
|
+
reverse?: boolean;
|
|
10
|
+
text?: string;
|
|
11
|
+
type?: EbayMenuType;
|
|
12
|
+
variant?: EbayMenuButtonVariant;
|
|
13
|
+
onCollapse?: () => void;
|
|
14
|
+
onExpand?: () => void;
|
|
15
|
+
onChange?: () => void;
|
|
16
|
+
onSelect?: () => void;
|
|
17
|
+
expanded?: boolean;
|
|
18
|
+
noToggleIcon?: boolean;
|
|
19
|
+
checked?: number;
|
|
20
|
+
collapseOnSelect?: boolean;
|
|
21
|
+
prefixId?: string;
|
|
22
|
+
prefixLabel?: string;
|
|
23
|
+
};
|
|
24
|
+
declare type MenuEvents = 'onSelect' | 'onChange';
|
|
25
|
+
declare type Props = Omit<EbayButtonProps, 'type' | 'variant' | 'onKeyDown'> & Omit<ComponentProps<'button'>, 'type' | MenuEvents> & Omit<ComponentProps<'a'>, MenuEvents> & EbayMenuButtonProps;
|
|
26
|
+
declare const EbayMenuButton: FC<Props>;
|
|
27
|
+
export default EbayMenuButton;
|
|
28
|
+
//# sourceMappingURL=menu-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu-button.d.ts","sourceRoot":"","sources":["../../src/ebay-menu-button/menu-button.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAgB,cAAc,EAAE,EAAE,EAA+B,MAAM,OAAO,CAAA;AAM5F,OAAO,EAAY,YAAY,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAc,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAG5D,OAAO,EAAoE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEjH,oBAAY,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAA;AAED,aAAK,UAAU,GAAG,UAAU,GAAG,UAAU,CAAA;AACzC,aAAK,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC,GAChE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,GACnD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GACrC,mBAAmB,CAAA;AAEvB,QAAA,MAAM,cAAc,EAAE,EAAE,CAAC,KAAK,CA4H7B,CAAA;AAaD,eAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
+
if (mod && mod.__esModule) return mod;
|
|
27
|
+
var result = {};
|
|
28
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
+
__setModuleDefault(result, mod);
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
32
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
33
|
+
var t = {};
|
|
34
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
35
|
+
t[p] = s[p];
|
|
36
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
37
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
38
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
39
|
+
t[p[i]] = s[p[i]];
|
|
40
|
+
}
|
|
41
|
+
return t;
|
|
42
|
+
};
|
|
43
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
44
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
45
|
+
};
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
var react_1 = __importStar(require("react"));
|
|
48
|
+
var classnames_1 = __importDefault(require("classnames"));
|
|
49
|
+
var component_utils_1 = require("../common/component-utils");
|
|
50
|
+
var event_utils_1 = require("../common/event-utils");
|
|
51
|
+
var random_id_1 = require("../common/random-id");
|
|
52
|
+
var ebay_menu_1 = require("../ebay-menu");
|
|
53
|
+
var ebay_button_1 = require("../ebay-button");
|
|
54
|
+
var ebay_icon_button_1 = require("../ebay-icon-button");
|
|
55
|
+
var ebay_icon_1 = require("../ebay-icon");
|
|
56
|
+
var index_1 = require("./index");
|
|
57
|
+
var EbayMenuButton = function (_a) {
|
|
58
|
+
var type = _a.type, _b = _a.variant, variant = _b === void 0 ? 'button' : _b, className = _a.className, _c = _a.text, text = _c === void 0 ? '' : _c, fixWidth = _a.fixWidth, reverse = _a.reverse, defaultExpanded = _a.expanded, noToggleIcon = _a.noToggleIcon, checked = _a.checked, collapseOnSelect = _a.collapseOnSelect, a11yText = _a.a11yText, _d = _a.onClick, onClick = _d === void 0 ? function () { } : _d, _e = _a.onExpand, onExpand = _e === void 0 ? function () { } : _e, _f = _a.onCollapse, onCollapse = _f === void 0 ? function () { } : _f, _g = _a.onChange, onChange = _g === void 0 ? function () { } : _g, _h = _a.onSelect, onSelect = _h === void 0 ? function () { } : _h, children = _a.children, rest = __rest(_a, ["type", "variant", "className", "text", "fixWidth", "reverse", "expanded", "noToggleIcon", "checked", "collapseOnSelect", "a11yText", "onClick", "onExpand", "onCollapse", "onChange", "onSelect", "children"]);
|
|
59
|
+
var _j = react_1.useState(defaultExpanded), expanded = _j[0], setExpanded = _j[1];
|
|
60
|
+
var _k = react_1.useState(), menuId = _k[0], setMenuId = _k[1];
|
|
61
|
+
var buttonRef = react_1.useRef(null);
|
|
62
|
+
var menuRef = react_1.useRef();
|
|
63
|
+
var menuItems = component_utils_1.filterByType(children, [index_1.EbayMenuButtonItem, index_1.EbayMenuButtonSeparator]);
|
|
64
|
+
var menuButtonLabel = component_utils_1.findComponent(children, index_1.EbayMenuButtonLabel);
|
|
65
|
+
var icon = component_utils_1.findComponent(children, ebay_icon_1.EbayIcon);
|
|
66
|
+
var textLabel = text ? react_1.default.createElement("span", null, text) : null;
|
|
67
|
+
var label = labelWithIcon(menuButtonLabel || textLabel, icon);
|
|
68
|
+
var wrapperClasses = classnames_1.default('menu-button', className, expanded && 'menu-button--expanded');
|
|
69
|
+
var menuClasses = classnames_1.default('menu-button__menu', {
|
|
70
|
+
'menu-button__menu--fix-width': fixWidth,
|
|
71
|
+
'menu-button__menu--reverse': reverse
|
|
72
|
+
});
|
|
73
|
+
react_1.useEffect(function () {
|
|
74
|
+
var handleBackgroundClick = function (e) {
|
|
75
|
+
var menuEl = menuRef.current;
|
|
76
|
+
var menuClicked = menuEl && menuEl.contains(e.target);
|
|
77
|
+
if (collapseOnSelect || !menuClicked) {
|
|
78
|
+
setExpanded(false);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
if (expanded) {
|
|
82
|
+
onExpand();
|
|
83
|
+
// On React 18 useEffect hooks runs synchronous instead of asynchronous as React 17 or prior
|
|
84
|
+
// causing the event listener to be attached to the document at the same time that the dialog
|
|
85
|
+
// opens. Adding a timeout so the event is attached after the click event that opened the modal
|
|
86
|
+
// is finished.
|
|
87
|
+
setTimeout(function () {
|
|
88
|
+
document.addEventListener('click', handleBackgroundClick, false);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
else if (expanded === false) {
|
|
92
|
+
onCollapse();
|
|
93
|
+
}
|
|
94
|
+
return function () { return document.removeEventListener('click', handleBackgroundClick, false); };
|
|
95
|
+
}, [expanded]);
|
|
96
|
+
react_1.useEffect(function () {
|
|
97
|
+
setMenuId(random_id_1.randomId());
|
|
98
|
+
}, []);
|
|
99
|
+
var handleMenuKeydown = function (e) {
|
|
100
|
+
event_utils_1.handleEscapeKeydown(e, function () {
|
|
101
|
+
var _a;
|
|
102
|
+
setExpanded(false);
|
|
103
|
+
(_a = buttonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
var buttonProps = __assign({ ref: buttonRef, className: 'menu-button__button', 'aria-expanded': !!expanded, 'aria-haspopup': true, 'aria-label': a11yText, 'aria-controls': menuId, onClick: function (e) {
|
|
107
|
+
setExpanded(!expanded);
|
|
108
|
+
onClick(e);
|
|
109
|
+
} }, rest);
|
|
110
|
+
return (react_1.default.createElement("span", { className: wrapperClasses },
|
|
111
|
+
variant === 'overflow' ?
|
|
112
|
+
react_1.default.createElement(ebay_icon_button_1.EbayIconButton, __assign({ icon: "overflowVertical16" }, buttonProps)) :
|
|
113
|
+
react_1.default.createElement(ebay_button_1.EbayButton, __assign({ variant: variant === 'form' ? 'form' : undefined, bodyState: noToggleIcon ? undefined : 'expand' }, buttonProps), label),
|
|
114
|
+
react_1.default.createElement(ebay_menu_1.EbayMenu, { baseEl: "div", ref: menuRef, type: type, className: menuClasses, tabIndex: -1, id: menuId, autofocus: true, checked: checked, onKeyDown: handleMenuKeydown, onChange: onChange, onSelect: onSelect }, menuItems.map(function (item, i) {
|
|
115
|
+
return react_1.cloneElement(item, __assign(__assign({}, item.props), { className: classnames_1.default(item.props.className, 'menu-button__item'), key: i }));
|
|
116
|
+
}))));
|
|
117
|
+
};
|
|
118
|
+
function labelWithIcon(label, icon) {
|
|
119
|
+
if (!icon) {
|
|
120
|
+
return label;
|
|
121
|
+
}
|
|
122
|
+
if (!label) {
|
|
123
|
+
return icon;
|
|
124
|
+
}
|
|
125
|
+
return react_1.default.createElement(react_1.default.Fragment, null,
|
|
126
|
+
icon,
|
|
127
|
+
label);
|
|
128
|
+
}
|
|
129
|
+
exports.default = EbayMenuButton;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ebay-menu-button/types.ts"],"names":[],"mappings":"AAAA,oBAAY,qBAAqB,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAA"}
|