@ebay/ui-core-react 1.3.0 → 1.4.2

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.
@@ -0,0 +1,2 @@
1
+ export declare const range: (start: number, stop: number, step?: number) => number[];
2
+ //# sourceMappingURL=range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../../src/common/range.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,UAAU,MAAM,QAAO,MAAM,oBAAY,MAAM,EACwB,CAAA"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.range = void 0;
4
+ exports.range = function (start, stop, step) {
5
+ if (step === void 0) { step = 1; }
6
+ return Array(Math.ceil(((stop + 1) - start) / step)).fill(start).map(function (x, y) { return x + y * step; });
7
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"dialog-base-with-state.d.ts","sourceRoot":"","sources":["../../src/ebay-dialog-base/dialog-base-with-state.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAY,YAAY,EAAE,MAAM,OAAO,CAAA;AAGrD,OAAO,EAAc,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAGrE,eAAO,MAAM,mBAAmB,mDAM7B,eAAe,CAAC,WAAW,CAAC,KAAG,YAiCjC,CAAA;AAED,eAAe,mBAAmB,CAAA"}
1
+ {"version":3,"file":"dialog-base-with-state.d.ts","sourceRoot":"","sources":["../../src/ebay-dialog-base/dialog-base-with-state.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAY,YAAY,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,EAAc,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAGrE,eAAO,MAAM,mBAAmB,mDAM7B,eAAe,CAAC,WAAW,CAAC,KAAG,YA+BjC,CAAA;AAED,eAAe,mBAAmB,CAAA"}
@@ -40,13 +40,9 @@ var __rest = (this && this.__rest) || function (s, e) {
40
40
  }
41
41
  return t;
42
42
  };
43
- var __importDefault = (this && this.__importDefault) || function (mod) {
44
- return (mod && mod.__esModule) ? mod : { "default": mod };
45
- };
46
43
  Object.defineProperty(exports, "__esModule", { value: true });
47
44
  exports.DialogBaseWithState = void 0;
48
45
  var react_1 = __importStar(require("react"));
49
- var react_focus_lock_1 = __importDefault(require("react-focus-lock"));
50
46
  var react_remove_scroll_1 = require("react-remove-scroll");
51
47
  var dialogBase_1 = require("./components/dialogBase");
52
48
  var index_1 = require("./index");
@@ -61,8 +57,7 @@ exports.DialogBaseWithState = function (_a) {
61
57
  return ![index_1.EbayDialogHeader, index_1.EbayDialogFooter, index_1.EbayDialogCloseButton].some(function (c) { return c === child.type; });
62
58
  });
63
59
  var dialogBase = (react_1.default.createElement(dialogBase_1.DialogBase, __assign({}, rest, { open: open, isModal: shouldRenderModal, header: header, footer: footer, closeButton: closeButton, animated: animated }), content));
64
- var renderOverLay = function () { return shouldRenderModal ? (react_1.default.createElement(react_focus_lock_1.default, { returnFocus: { preventScroll: false } },
65
- react_1.default.createElement(react_remove_scroll_1.RemoveScroll, { enabled: open }, dialogBase))) : dialogBase; };
60
+ var renderOverLay = function () { return shouldRenderModal ? (react_1.default.createElement(react_remove_scroll_1.RemoveScroll, { enabled: open }, dialogBase)) : dialogBase; };
66
61
  return animated || open ? renderOverLay() : null;
67
62
  };
68
63
  exports.default = exports.DialogBaseWithState;
@@ -0,0 +1,36 @@
1
+ # ebay-star-rating
2
+ For full stars use (rating from 0-5): ebay-star-rating-{rating} For half stars use: ebay-star-rating-{rating}-5 DS v1.0.0
3
+ ## Demo
4
+ [Storybook](https://opensource.ebay.com/ebayui-core-react/main/?path=/story/ebay-star-rating--dynamic-stars)
5
+
6
+ ## Usage
7
+ ```
8
+ yarn add @ebay/ui-core-react
9
+ ```
10
+
11
+ ### Import JS
12
+ ```jsx harmony
13
+ import { EbayStarRating } from '@ebay/ui-core-react/ebay-star-rating'
14
+ ```
15
+
16
+ ## Import following styles from Skin
17
+ ```jsx harmony
18
+ import '@ebay/skin/star-rating'
19
+ ```
20
+
21
+ ## ...or using SCSS/CSS
22
+ ```jsx harmony
23
+ import '@ebay/skin/star-rating.css'
24
+ ```
25
+
26
+ ```jsx harmony
27
+ <EbayStarRating aria-label="Star Rating" value="1"/>
28
+ <EbayStarRating aria-label="Star Rating" value="0-5"/>
29
+ ```
30
+
31
+ ## Attributes
32
+
33
+ Name | Type | Stateful | Description
34
+ --- | --- | --- | ---
35
+ | `a11yText` | String | No | Yes | text for non-decorative inline icon; icon is assumed to be decorative if this is not passed |
36
+ | `value` | String | No | Yes | The amount of stars to be filled. Can be "2-5" for 2 and a half stars. |
@@ -0,0 +1,3 @@
1
+ export { default as EbayStarRating } from './star-rating';
2
+ export * from './star-rating';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ebay-star-rating/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,eAAe,CAAA;AACzD,cAAc,eAAe,CAAA"}
@@ -0,0 +1,15 @@
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 star_rating_1 = require("./star-rating");
14
+ Object.defineProperty(exports, "EbayStarRating", { enumerable: true, get: function () { return star_rating_1.default; } });
15
+ __exportStar(require("./star-rating"), exports);
@@ -0,0 +1,8 @@
1
+ import { ComponentProps, FC } from 'react';
2
+ declare type Props = ComponentProps<'div'> & {
3
+ a11yText?: string;
4
+ value?: string;
5
+ };
6
+ declare const EbayStarRating: FC<Props>;
7
+ export default EbayStarRating;
8
+ //# sourceMappingURL=star-rating.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"star-rating.d.ts","sourceRoot":"","sources":["../../src/ebay-star-rating/star-rating.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAKjD,aAAK,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAA;AAED,QAAA,MAAM,cAAc,EAAE,EAAE,CAAC,KAAK,CAe7B,CAAA;AAGD,eAAe,cAAc,CAAA"}
@@ -0,0 +1,37 @@
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 ebay_icon_1 = require("../ebay-icon");
31
+ var range_1 = require("../common/range");
32
+ var stars = range_1.range(1, 5);
33
+ var EbayStarRating = function (_a) {
34
+ var value = _a.value, a11yText = _a.a11yText, className = _a.className, rest = __rest(_a, ["value", "a11yText", "className"]);
35
+ return (react_1.default.createElement("div", __assign({ role: "img", "aria-label": a11yText, className: classnames_1.default('star-rating', className), "data-stars": value }, rest), stars.map(function (i) { return (react_1.default.createElement(ebay_icon_1.EbayIcon, { key: i, className: "star-rating__icon", name: "starDynamic" })); })));
36
+ };
37
+ exports.default = EbayStarRating;
@@ -0,0 +1,37 @@
1
+ # ebay-star-rating-select
2
+ use (rating from 0-5)
3
+ ## Demo
4
+ [Storybook](https://opensource.ebay.com/ebayui-core-react/main/?path=/story/ebay-star-rating-select--isolated)
5
+
6
+ ## Usage
7
+ ```
8
+ yarn add @ebay/ui-core-react
9
+ ```
10
+
11
+ ### Import JS
12
+ ```jsx harmony
13
+ import { EbayStarRatingSelect } from '@ebay/ui-core-react/ebay-star-rating-select'
14
+ ```
15
+
16
+ ## Import following styles from Skin
17
+ ```jsx harmony
18
+ import '@ebay/skin/star-rating-select'
19
+ ```
20
+
21
+ ## ...or using SCSS/CSS
22
+ ```jsx harmony
23
+ import '@ebay/skin/star-rating.css'
24
+ ```
25
+
26
+ ```jsx harmony
27
+ <EbayStarRatingSelect value={1}>
28
+ ```
29
+
30
+ ## Attributes
31
+
32
+ Name | Type | Stateful | Description
33
+ --- | --- | --- | ---
34
+ | `a11yStarText` | array | No | Yes | array of strings for star inputs |
35
+ | `a11yText` | String | No | Yes | container aria-label |
36
+ | `value` | String | No | Yes | The amount of stars to be filled. Can be "2-5" for 2 and a half stars.|
37
+ | `disabled` | Boolean | No | Rating stars are disabled or not
@@ -0,0 +1,3 @@
1
+ export { default as EbayStarRatingSelect } from './star-rating-select';
2
+ export * from './star-rating-select';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ebay-star-rating-select/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AACtE,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,15 @@
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 star_rating_select_1 = require("./star-rating-select");
14
+ Object.defineProperty(exports, "EbayStarRatingSelect", { enumerable: true, get: function () { return star_rating_select_1.default; } });
15
+ __exportStar(require("./star-rating-select"), exports);
@@ -0,0 +1,14 @@
1
+ import { ChangeEvent, ComponentProps, FC, MouseEvent } from 'react';
2
+ declare type Props = ComponentProps<'div'> & {
3
+ a11yText?: string;
4
+ value?: string;
5
+ a11yStarText?: string[];
6
+ disabled?: boolean;
7
+ name?: string;
8
+ onKeyDown?: (e: MouseEvent, value: number) => void;
9
+ onChange?: (event: ChangeEvent<HTMLInputElement>, value: string | number) => void;
10
+ onFocus?: (event: ChangeEvent<HTMLInputElement>, value: string | number) => void;
11
+ };
12
+ declare const EbayStarRatingSelect: FC<Props>;
13
+ export default EbayStarRatingSelect;
14
+ //# sourceMappingURL=star-rating-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"star-rating-select.d.ts","sourceRoot":"","sources":["../../src/ebay-star-rating-select/star-rating-select.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,EAAuB,MAAM,OAAO,CAAA;AAM/F,aAAK,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAClF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;CACpF,CAAA;AASD,QAAA,MAAM,oBAAoB,EAAE,EAAE,CAAC,KAAK,CAgEnC,CAAA;AAED,eAAe,oBAAoB,CAAA"}
@@ -0,0 +1,89 @@
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 ebay_icon_1 = require("../ebay-icon");
50
+ var range_1 = require("../common/range");
51
+ var random_id_1 = require("../common/random-id");
52
+ var stars = range_1.range(1, 5);
53
+ var getValue = function (val) {
54
+ var value = parseInt(val, 0) || 0;
55
+ if (value > 5) {
56
+ value = 0;
57
+ }
58
+ return value;
59
+ };
60
+ var EbayStarRatingSelect = function (_a) {
61
+ var _b = _a.value, value = _b === void 0 ? 0 : _b, a11yText = _a.a11yText, className = _a.className, _c = _a.a11yStarText, a11yStarText = _c === void 0 ? [] : _c, disabled = _a.disabled, onChange = _a.onChange, onFocus = _a.onFocus, onKeyDown = _a.onKeyDown, _d = _a.name, name = _d === void 0 ? "star-rating-" + random_id_1.randomId() : _d, rest = __rest(_a, ["value", "a11yText", "className", "a11yStarText", "disabled", "onChange", "onFocus", "onKeyDown", "name"]);
62
+ var _e = react_1.useState(getValue(value)), checkedValue = _e[0], setChecked = _e[1];
63
+ react_1.useEffect(function () {
64
+ setChecked(getValue(value));
65
+ }, [value]);
66
+ var handleKeyDown = function (i) { return function (e) {
67
+ if (!disabled && onKeyDown) {
68
+ setChecked(getValue(i));
69
+ onKeyDown(e, i);
70
+ }
71
+ }; };
72
+ var handleClick = function (i) { return function (e) {
73
+ if (!disabled && onChange) {
74
+ setChecked(getValue(i));
75
+ onChange(e, i);
76
+ }
77
+ }; };
78
+ var handleFocus = function (i) { return function (e) {
79
+ if (!disabled && onFocus) {
80
+ setChecked(getValue(i));
81
+ onFocus(e, i);
82
+ }
83
+ }; };
84
+ return (react_1.default.createElement("div", __assign({ role: a11yText && 'radiogroup', "aria-label": a11yText, className: classnames_1.default('star-rating-select', className) }, rest), stars.map(function (i) { return (react_1.default.createElement("span", { className: "star-rating-select__radio", key: i },
85
+ react_1.default.createElement("input", { "aria-label": a11yStarText === null || a11yStarText === void 0 ? void 0 : a11yStarText[i - 1], className: classnames_1.default('star-rating-select__control', { 'star-rating-select__control--filled': i <= checkedValue }), type: "radio", name: name, value: i, disabled: disabled, defaultChecked: checkedValue === i, onClick: handleClick(i), onFocus: handleFocus(i), onKeyDown: handleKeyDown(i) }),
86
+ react_1.default.createElement("span", { className: "star-rating-select__radio-icon" },
87
+ react_1.default.createElement(ebay_icon_1.EbayIcon, { className: "star-rating__icon", name: "starDynamic" })))); })));
88
+ };
89
+ exports.default = EbayStarRatingSelect;
@@ -1,4 +1,4 @@
1
- import { Component, ComponentProps, ReactElement } from 'react';
1
+ import { ComponentProps, FC } from 'react';
2
2
  import { Activation, Size } from './types';
3
3
  declare type TabsProps = ComponentProps<'div'> & {
4
4
  index?: number;
@@ -8,21 +8,6 @@ declare type TabsProps = ComponentProps<'div'> & {
8
8
  activation?: Activation;
9
9
  onTabSelect?: (index: number) => void;
10
10
  };
11
- declare type State = {
12
- selectedIndex: number;
13
- focusedIndex: number;
14
- };
15
- declare class Tabs extends Component<TabsProps, State> {
16
- headings: HTMLElement[];
17
- constructor(props: TabsProps);
18
- componentDidUpdate(prevProps: TabsProps): void;
19
- onTabSelect(i: number): void;
20
- /**
21
- * Handle a11y for heading
22
- * https://ebay.gitbooks.io/mindpatterns/content/disclosure/tabs.html
23
- */
24
- onTabKeyDown(ev: KeyboardEvent, index: number): void;
25
- render(): ReactElement;
26
- }
11
+ declare const Tabs: FC<TabsProps>;
27
12
  export default Tabs;
28
13
  //# sourceMappingURL=tabs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/ebay-tabs/tabs.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAItE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAI1C,aAAK,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAE9D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF,aAAK,KAAK,GAAG;IACT,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACxB,CAAA;AAGD,cAAM,IAAK,SAAQ,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC;IAC1C,QAAQ,EAAE,WAAW,EAAE,CAAC;gBAEZ,KAAK,EAAE,SAAS;IAc5B,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAO9C,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAU5B;;;OAGG;IACH,YAAY,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAyBpD,MAAM,IAAI,YAAY;CA2DzB;AAED,eAAe,IAAI,CAAA"}
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/ebay-tabs/tabs.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAgB,cAAc,EAAE,EAAE,EAAuB,MAAM,OAAO,CAAA;AAIpF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAI1C,aAAK,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAE9D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF,QAAA,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CA0GvB,CAAA;AAED,eAAe,IAAI,CAAA"}
package/ebay-tabs/tabs.js CHANGED
@@ -1,17 +1,4 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- extendStatics(d, b);
11
- function __() { this.constructor = d; }
12
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
- };
14
- })();
15
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
3
  if (k2 === undefined) k2 = k;
17
4
  Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
@@ -41,99 +28,79 @@ var tab_1 = __importDefault(require("./tab"));
41
28
  var tab_panel_1 = __importDefault(require("./tab-panel"));
42
29
  var component_utils_1 = require("../common/component-utils");
43
30
  var classnames_1 = __importDefault(require("classnames"));
44
- // todo: convert to hooks
45
- var Tabs = /** @class */ (function (_super) {
46
- __extends(Tabs, _super);
47
- function Tabs(props) {
48
- var _this = _super.call(this, props) || this;
49
- var _a = props.index, index = _a === void 0 ? 0 : _a;
50
- _this.onTabSelect = _this.onTabSelect.bind(_this);
51
- _this.headings = [];
52
- _this.state = {
53
- selectedIndex: index,
54
- focusedIndex: index
55
- };
56
- return _this;
57
- }
58
- Tabs.prototype.componentDidUpdate = function (prevProps) {
59
- var _a;
60
- if (this.props.index !== prevProps.index) {
61
- this.onTabSelect(this.props.index);
62
- }
63
- (_a = this.headings[this.state.focusedIndex]) === null || _a === void 0 ? void 0 : _a.focus();
64
- };
65
- Tabs.prototype.onTabSelect = function (i) {
66
- if (this.props.onTabSelect) {
67
- this.props.onTabSelect(i);
68
- }
69
- this.setState({
70
- selectedIndex: i,
71
- focusedIndex: i
72
- });
31
+ var Tabs = function (_a) {
32
+ var id = _a.id, className = _a.className, _b = _a.index, index = _b === void 0 ? 0 : _b, _c = _a.size, size = _c === void 0 ? 'medium' : _c, _d = _a.activation, activation = _d === void 0 ? 'auto' : _d, _e = _a.onTabSelect, onTabSelect = _e === void 0 ? function () { } : _e, children = _a.children;
33
+ var headings = [];
34
+ var _f = react_1.useState(index), selectedIndex = _f[0], setSelectedIndex = _f[1];
35
+ var _g = react_1.useState(index), focusedIndex = _g[0], setFocusedIndex = _g[1];
36
+ var onSelect = function (i) {
37
+ onTabSelect(i);
38
+ setSelectedIndex(i);
39
+ setFocusedIndex(i);
73
40
  };
74
41
  /**
75
42
  * Handle a11y for heading
76
43
  * https://ebay.gitbooks.io/mindpatterns/content/disclosure/tabs.html
77
44
  */
78
- Tabs.prototype.onTabKeyDown = function (ev, index) {
79
- var _this = this;
80
- var _a = this.props, _b = _a.activation, activation = _b === void 0 ? 'auto' : _b, children = _a.children;
45
+ var onKeyDown = function (ev, i) {
81
46
  event_utils_1.handleActionKeydown(ev, function () {
82
47
  ev.preventDefault();
83
48
  if (activation === 'manual') {
84
- _this.onTabSelect(index);
49
+ onSelect(i);
85
50
  }
86
51
  });
87
52
  event_utils_1.handleLeftRightArrowsKeydown(ev, function () {
88
53
  ev.preventDefault();
89
54
  var len = component_utils_1.filterByType(children, tab_1.default).length;
90
55
  var direction = ['Left', 'ArrowLeft'].includes(ev.key) ? -1 : 1;
91
- var nextIndex = (_this.state.focusedIndex + len + direction) % len;
92
- _this.setState({ focusedIndex: nextIndex });
56
+ var nextIndex = (focusedIndex + len + direction) % len;
57
+ setFocusedIndex(nextIndex);
93
58
  if (activation !== 'manual') {
94
- _this.onTabSelect(nextIndex);
59
+ onSelect(nextIndex);
95
60
  }
96
61
  });
97
62
  };
98
- Tabs.prototype.render = function () {
99
- var _this = this;
100
- var _a = this.props, id = _a.id, className = _a.className, _b = _a.size, size = _b === void 0 ? 'medium' : _b, children = _a.children;
101
- var fake = component_utils_1.filterBy(children, function (_a) {
102
- var type = _a.type, props = _a.props;
103
- return type === tab_1.default && props.href;
104
- }).length > 0;
105
- var large = size === 'large';
106
- var tabHeadings = component_utils_1.filterByType(children, tab_1.default).map(function (item, i) {
107
- var _a = item.props, href = _a.href, content = _a.children;
108
- var itemProps = {
109
- refCallback: function (ref) { _this.headings[i] = ref; },
110
- index: i,
111
- parentId: id,
112
- selected: _this.state.selectedIndex === i,
113
- href: href,
114
- children: content,
115
- onClick: function () { _this.onTabSelect(i); },
116
- onKeyDown: function (e) { _this.onTabKeyDown(e, i); }
117
- };
118
- return react_1.default.cloneElement(item, itemProps);
119
- });
120
- var tabPanels = component_utils_1.filterByType(children, tab_panel_1.default).map(function (item, i) {
121
- var content = item.props.children;
122
- var itemProps = {
123
- index: i,
124
- parentId: id,
125
- selected: _this.state.selectedIndex === i,
126
- fake: fake,
127
- children: content
128
- };
129
- return react_1.default.cloneElement(item, itemProps);
130
- });
131
- return fake ? (react_1.default.createElement("div", { id: id, className: classnames_1.default(className, 'fake-tabs') },
132
- react_1.default.createElement("ul", { className: classnames_1.default('fake-tabs__items', { 'fake-tabs__items--large': large }) }, tabHeadings),
133
- react_1.default.createElement("div", { className: "fake-tabs__content" }, tabPanels))) : (react_1.default.createElement("div", { id: id, className: classnames_1.default(className, 'tabs') },
134
- react_1.default.createElement("div", { className: classnames_1.default('tabs__items', { 'tabs__items--large': large }), role: "tablist" }, tabHeadings),
135
- react_1.default.createElement("div", { className: "tabs__content" }, tabPanels)));
136
- };
137
- return Tabs;
138
- }(react_1.Component));
63
+ react_1.useEffect(function () {
64
+ onSelect(index);
65
+ }, [index]);
66
+ react_1.useEffect(function () {
67
+ var _a;
68
+ (_a = headings[focusedIndex]) === null || _a === void 0 ? void 0 : _a.focus();
69
+ }, [focusedIndex]);
70
+ var isFake = component_utils_1.filterBy(children, function (_a) {
71
+ var type = _a.type, props = _a.props;
72
+ return type === tab_1.default && props.href;
73
+ }).length > 0;
74
+ var isLarge = size === 'large';
75
+ var tabHeadings = component_utils_1.filterByType(children, tab_1.default).map(function (item, i) {
76
+ var _a = item.props, href = _a.href, content = _a.children;
77
+ var itemProps = {
78
+ refCallback: function (ref) { headings[i] = ref; },
79
+ index: i,
80
+ parentId: id,
81
+ selected: selectedIndex === i,
82
+ href: href,
83
+ children: content,
84
+ onClick: function () { onSelect(i); },
85
+ onKeyDown: function (e) { onKeyDown(e, i); }
86
+ };
87
+ return react_1.cloneElement(item, itemProps);
88
+ });
89
+ var tabPanels = component_utils_1.filterByType(children, tab_panel_1.default).map(function (item, i) {
90
+ var content = item.props.children;
91
+ var itemProps = {
92
+ index: i,
93
+ parentId: id,
94
+ selected: selectedIndex === i,
95
+ fake: isFake,
96
+ children: content
97
+ };
98
+ return react_1.cloneElement(item, itemProps);
99
+ });
100
+ return isFake ? (react_1.default.createElement("div", { id: id, className: classnames_1.default(className, 'fake-tabs') },
101
+ react_1.default.createElement("ul", { className: classnames_1.default('fake-tabs__items', { 'fake-tabs__items--large': isLarge }) }, tabHeadings),
102
+ react_1.default.createElement("div", { className: "fake-tabs__content" }, tabPanels))) : (react_1.default.createElement("div", { id: id, className: classnames_1.default(className, 'tabs') },
103
+ react_1.default.createElement("div", { className: classnames_1.default('tabs__items', { 'tabs__items--large': isLarge }), role: "tablist" }, tabHeadings),
104
+ react_1.default.createElement("div", { className: "tabs__content" }, tabPanels)));
105
+ };
139
106
  exports.default = Tabs;
package/index.d.ts CHANGED
@@ -14,6 +14,8 @@ export { EbayProgressBar, EbayProgressBarProps } from './ebay-progress-bar';
14
14
  export { EbayRadio } from './ebay-radio';
15
15
  export { EbayBadge } from './ebay-badge';
16
16
  export { EbaySignal, SignalStatus } from './ebay-signal';
17
+ export { EbayStarRating } from './ebay-star-rating';
18
+ export { EbayStarRatingSelect } from './ebay-star-rating-select';
17
19
  export { EbaySwitch } from './ebay-switch';
18
20
  export { EbayCheckbox } from './ebay-checkbox';
19
21
  export { EbayBreadcrumbs, EbayBreadcrumbItem } from './ebay-breadcrumbs';
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/index.js CHANGED
@@ -44,6 +44,10 @@ var ebay_badge_1 = require("./ebay-badge");
44
44
  Object.defineProperty(exports, "EbayBadge", { enumerable: true, get: function () { return ebay_badge_1.EbayBadge; } });
45
45
  var ebay_signal_1 = require("./ebay-signal");
46
46
  Object.defineProperty(exports, "EbaySignal", { enumerable: true, get: function () { return ebay_signal_1.EbaySignal; } });
47
+ var ebay_star_rating_1 = require("./ebay-star-rating");
48
+ Object.defineProperty(exports, "EbayStarRating", { enumerable: true, get: function () { return ebay_star_rating_1.EbayStarRating; } });
49
+ var ebay_star_rating_select_1 = require("./ebay-star-rating-select");
50
+ Object.defineProperty(exports, "EbayStarRatingSelect", { enumerable: true, get: function () { return ebay_star_rating_select_1.EbayStarRatingSelect; } });
47
51
  var ebay_switch_1 = require("./ebay-switch");
48
52
  Object.defineProperty(exports, "EbaySwitch", { enumerable: true, get: function () { return ebay_switch_1.EbaySwitch; } });
49
53
  var ebay_checkbox_1 = require("./ebay-checkbox");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ebay/ui-core-react",
3
- "version": "1.3.0",
3
+ "version": "1.4.2",
4
4
  "description": "Skin components build off React",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -49,7 +49,6 @@
49
49
  "classnames": "^2.2.6",
50
50
  "makeup-keyboard-trap": "^0.4.1",
51
51
  "makeup-screenreader-trap": "^0.4.1",
52
- "react-focus-lock": "^2.9.1",
53
52
  "react-remove-scroll": "^2.2.0"
54
53
  },
55
54
  "devDependencies": {