From 9201c9b565775c9c8910981640d1a7cdee71ba3a Mon Sep 17 00:00:00 2001 From: Mac Lockard Date: Fri, 1 Nov 2019 23:34:29 -0700 Subject: [PATCH] Allow ref objects to be passed (#308) * Allow ref objects to be passed * fix tests * Added tests --- .size-snapshot.json | 22 ++--- package.json | 6 +- src/Popper.js | 14 +-- src/Popper.test.js | 34 +++++++ src/RefTypes.js | 4 + src/Reference.js | 11 ++- src/utils.js | 16 ++++ typings/react-popper.d.ts | 15 +-- yarn.lock | 194 ++++++++++++++++++++++++++++++++------ 9 files changed, 256 insertions(+), 60 deletions(-) create mode 100644 src/RefTypes.js diff --git a/.size-snapshot.json b/.size-snapshot.json index b458abd..782efc8 100644 --- a/.size-snapshot.json +++ b/.size-snapshot.json @@ -1,25 +1,25 @@ { "dist/index.umd.js": { - "bundled": 66802, - "minified": 23724, - "gzipped": 7169 + "bundled": 67132, + "minified": 23802, + "gzipped": 7191 }, "dist/index.umd.min.js": { - "bundled": 31438, - "minified": 12846, - "gzipped": 4182 + "bundled": 31768, + "minified": 12924, + "gzipped": 4205 }, "dist/index.esm.js": { - "bundled": 12271, - "minified": 7288, - "gzipped": 2066, + "bundled": 12577, + "minified": 7364, + "gzipped": 2096, "treeshaked": { "rollup": { - "code": 3754, + "code": 3832, "import_statements": 137 }, "webpack": { - "code": 4860 + "code": 4938 } } } diff --git a/package.json b/package.json index 357528d..7ab2bdc 100644 --- a/package.json +++ b/package.json @@ -84,9 +84,9 @@ "babel-jest": "^24.0.0", "cross-env": "^5.1.4", "emotion": "^9.1.1", - "enzyme": "^3.3.0", - "enzyme-adapter-react-16": "^1.1.1", - "enzyme-to-json": "^3.3.3", + "enzyme": "^3.10.0", + "enzyme-adapter-react-16": "^1.14.0", + "enzyme-to-json": "^3.4.0", "eslint": "^4.19.1", "eslint-config-prettier": "^2.9.0", "eslint-plugin-flowtype": "^2.46.1", diff --git a/src/Popper.js b/src/Popper.js index bee2cb7..9aae465 100644 --- a/src/Popper.js +++ b/src/Popper.js @@ -9,19 +9,19 @@ import PopperJS, { } from 'popper.js'; import type { Style } from 'typed-styles'; import { ManagerContext } from './Manager'; -import { safeInvoke, unwrapArray, shallowEqual } from './utils'; +import { unwrapArray, setRef, shallowEqual } from './utils'; +import { type Ref } from "./RefTypes"; -type getRefFn = (?HTMLElement) => void; type ReferenceElement = ReferenceObject | HTMLElement | null; type StyleOffsets = { top: number, left: number }; type StylePosition = { position: 'absolute' | 'fixed' }; export type PopperArrowProps = { - ref: getRefFn, + ref: Ref, style: StyleOffsets & Style, }; export type PopperChildrenProps = {| - ref: getRefFn, + ref: Ref, style: StyleOffsets & StylePosition & Style, placement: Placement, outOfBoundaries: ?boolean, @@ -33,7 +33,7 @@ export type PopperChildren = PopperChildrenProps => React.Node; export type PopperProps = { children: PopperChildren, eventsEnabled?: boolean, - innerRef?: getRefFn, + innerRef?: Ref, modifiers?: Modifiers, placement?: Placement, positionFixed?: boolean, @@ -76,7 +76,7 @@ export class InnerPopper extends React.Component { setPopperNode = (popperNode: ?HTMLElement) => { if (!popperNode || this.popperNode === popperNode) return; - safeInvoke(this.props.innerRef, popperNode); + setRef(this.props.innerRef, popperNode); this.popperNode = popperNode; this.updatePopperInstance(); @@ -200,7 +200,7 @@ export class InnerPopper extends React.Component { } componentWillUnmount() { - safeInvoke(this.props.innerRef, null); + setRef(this.props.innerRef, null) this.destroyPopperInstance(); } diff --git a/src/Popper.test.js b/src/Popper.test.js index 6cb2d1f..27c7c82 100644 --- a/src/Popper.test.js +++ b/src/Popper.test.js @@ -86,6 +86,40 @@ describe('Popper component', () => { ).not.toThrow(); }); + it('accepts a ref function', () => { + const myRef = jest.fn(); + const referenceElement = document.createElement('div'); + mount( + + {({ ref, style, placement}) => ( +
+ )} + + ) + expect(myRef).toBeCalled(); + }); + + it('accepts a ref object', () => { + const myRef = (React: any).createRef(); + const referenceElement = document.createElement('div'); + mount( + + {({ ref, style, placement}) => ( +
+ )} + + ) + expect(myRef.current).toBeDefined(); + }); + it('accepts a `referenceElement` property', () => { class VirtualReference { getBoundingClientRect() { diff --git a/src/RefTypes.js b/src/RefTypes.js new file mode 100644 index 0000000..78a4ab4 --- /dev/null +++ b/src/RefTypes.js @@ -0,0 +1,4 @@ +type RefHandler = (?HTMLElement) => void; +type RefObject = { current?: HTMLElement}; + +export type Ref = RefHandler | RefObject; diff --git a/src/Reference.js b/src/Reference.js index 5cfe0e8..2ef243e 100644 --- a/src/Reference.js +++ b/src/Reference.js @@ -2,12 +2,13 @@ import * as React from 'react'; import warning from 'warning'; import { ManagerContext } from './Manager'; -import { safeInvoke, unwrapArray } from './utils'; +import { safeInvoke, unwrapArray, setRef } from './utils'; +import { type Ref } from "./RefTypes"; -export type ReferenceChildrenProps = { ref: (?HTMLElement) => void }; +export type ReferenceChildrenProps = { ref: Ref }; export type ReferenceProps = { children: ReferenceChildrenProps => React.Node, - innerRef?: (?HTMLElement) => void, + innerRef?: Ref, }; type InnerReferenceProps = { @@ -18,12 +19,12 @@ class InnerReference extends React.Component< ReferenceProps & InnerReferenceProps > { refHandler = (node: ?HTMLElement) => { - safeInvoke(this.props.innerRef, node); + setRef(this.props.innerRef, node) safeInvoke(this.props.setReferenceNode, node); }; componentWillUnmount() { - safeInvoke(this.props.innerRef, null); + setRef(this.props.innerRef, null) } render() { diff --git a/src/utils.js b/src/utils.js index 2af2b58..f736fcf 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,5 +1,7 @@ // @flow +import { type Ref } from "./RefTypes"; + /** * Takes an argument and if it's an array, returns the first item in the array, * otherwise returns the argument. Used for Preact compatibility. @@ -38,3 +40,17 @@ export const shallowEqual = (objA: { [key: string]: any}, objB: { [key: string]: return true; } + +/** + * Sets a ref using either a ref callback or a ref object + */ +export const setRef = (ref: ?Ref, node: ?HTMLElement) => { + // if its a function call it + if (typeof ref === "function") { + return safeInvoke(ref, node); + } + // otherwise we should treat it as a ref object + else if (ref != null) { + ref.current = node; + } +} diff --git a/typings/react-popper.d.ts b/typings/react-popper.d.ts index 5f0198b..42e0ac9 100644 --- a/typings/react-popper.d.ts +++ b/typings/react-popper.d.ts @@ -6,20 +6,21 @@ interface ManagerProps { } export class Manager extends React.Component { } -type RefHandler = (ref: HTMLElement | SVGElement | null) => void; - interface ReferenceChildrenProps { - ref: RefHandler; + // React refs are supposed to be contravariant (allows a more general type to be passed rather than a more specific one) + // However, Typescript currently can't infer that fact for refs + // See https://github.com/microsoft/TypeScript/issues/30748 for more information + ref: React.Ref; } interface ReferenceProps { children: (props: ReferenceChildrenProps) => React.ReactNode; - innerRef?: RefHandler; + innerRef?: React.Ref; } export class Reference extends React.Component { } export interface PopperArrowProps { - ref: RefHandler; + ref: React.Ref; style: React.CSSProperties; } @@ -27,7 +28,7 @@ export interface PopperChildrenProps { arrowProps: PopperArrowProps; outOfBoundaries: boolean | null; placement: PopperJS.Placement; - ref: RefHandler; + ref: React.Ref; scheduleUpdate: () => void; style: React.CSSProperties; } @@ -35,7 +36,7 @@ export interface PopperChildrenProps { export interface PopperProps { children: (props: PopperChildrenProps) => React.ReactNode; eventsEnabled?: boolean; - innerRef?: RefHandler; + innerRef?: React.Ref; modifiers?: PopperJS.Modifiers; placement?: PopperJS.Placement; positionFixed?: boolean; diff --git a/yarn.lock b/yarn.lock index d62bf81..4927dc8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1087,6 +1087,22 @@ acorn@^6.0.1, acorn@^6.0.5: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.5.tgz#81730c0815f3f3b34d8efa95cb7430965f4d887a" integrity sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg== +airbnb-prop-types@^2.15.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz#5287820043af1eb469f5b0af0d6f70da6c52aaef" + integrity sha512-jUh2/hfKsRjNFC4XONQrxo/n/3GG4Tn6Hl0WlFQN5PY9OMC9loSCoAYKnZsWaP8wEfd5xcrPloK0Zg6iS1xwVA== + dependencies: + array.prototype.find "^2.1.0" + function.prototype.name "^1.1.1" + has "^1.0.3" + is-regex "^1.0.4" + object-is "^1.0.1" + object.assign "^4.1.0" + object.entries "^1.1.0" + prop-types "^15.7.2" + prop-types-exact "^1.2.0" + react-is "^16.9.0" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -1233,6 +1249,11 @@ array-equal@^1.0.0: resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= + array-includes@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" @@ -1263,6 +1284,14 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.find@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.0.tgz#630f2eaf70a39e608ac3573e45cf8ccd0ede9ad7" + integrity sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.13.0" + array.prototype.flat@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4" @@ -2940,49 +2969,62 @@ entities@^1.1.1, entities@~1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== -enzyme-adapter-react-16@^1.1.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.8.0.tgz#7055d8e908d8d27b807cf4292244db3c815ca11d" - integrity sha512-7cVHIKutqnesGeM3CjNFHSvktpypSWBokrBO8wIW+BVx+HGxWCF87W9TpkIIYJqgCtdw9FQGFrAbLg8kSwPRuQ== +enzyme-adapter-react-16@^1.14.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.1.tgz#8ad55332be7091dc53a25d7d38b3485fc2ba50d5" + integrity sha512-yMPxrP3vjJP+4wL/qqfkT6JAIctcwKF+zXO6utlGPgUJT2l4tzrdjMDWGd/Pp1BjHBcljhN24OzNEGRteibJhA== dependencies: - enzyme-adapter-utils "^1.10.0" - function.prototype.name "^1.1.0" + enzyme-adapter-utils "^1.12.1" + enzyme-shallow-equal "^1.0.0" + has "^1.0.3" object.assign "^4.1.0" object.values "^1.1.0" - prop-types "^15.6.2" - react-is "^16.7.0" + prop-types "^15.7.2" + react-is "^16.10.2" react-test-renderer "^16.0.0-0" + semver "^5.7.0" -enzyme-adapter-utils@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.10.0.tgz#5836169f68b9e8733cb5b69cad5da2a49e34f550" - integrity sha512-VnIXJDYVTzKGbdW+lgK8MQmYHJquTQZiGzu/AseCZ7eHtOMAj4Rtvk8ZRopodkfPves0EXaHkXBDkVhPa3t0jA== +enzyme-adapter-utils@^1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.1.tgz#e828e0d038e2b1efa4b9619ce896226f85c9dd88" + integrity sha512-KWiHzSjZaLEoDCOxY8Z1RAbUResbqKN5bZvenPbfKtWorJFVETUw754ebkuCQ3JKm0adx1kF8JaiR+PHPiP47g== dependencies: - function.prototype.name "^1.1.0" + airbnb-prop-types "^2.15.0" + function.prototype.name "^1.1.1" object.assign "^4.1.0" - object.fromentries "^2.0.0" - prop-types "^15.6.2" - semver "^5.6.0" + object.fromentries "^2.0.1" + prop-types "^15.7.2" + semver "^5.7.0" -enzyme-to-json@^3.3.3: - version "3.3.5" - resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.3.5.tgz#f8eb82bd3d5941c9d8bc6fd9140030777d17d0af" - integrity sha512-DmH1wJ68HyPqKSYXdQqB33ZotwfUhwQZW3IGXaNXgR69Iodaoj8TF/D9RjLdz4pEhGq2Tx2zwNUIjBuqoZeTgA== +enzyme-shallow-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.0.tgz#d8e4603495e6ea279038eef05a4bf4887b55dc69" + integrity sha512-VUf+q5o1EIv2ZaloNQQtWCJM9gpeux6vudGVH6vLmfPXFLRuxl5+Aq3U260wof9nn0b0i+P5OEUXm1vnxkRpXQ== dependencies: - lodash "^4.17.4" + has "^1.0.3" + object-is "^1.0.1" -enzyme@^3.3.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.8.0.tgz#646d2d5d0798cb98fdec39afcee8a53237b47ad5" - integrity sha512-bfsWo5nHyZm1O1vnIsbwdfhU989jk+squU9NKvB+Puwo5j6/Wg9pN5CO0YJelm98Dao3NPjkDZk+vvgwpMwYxw== +enzyme-to-json@^3.4.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.4.2.tgz#e5e3f3d7f6700be72885e77b0792a2d20846b021" + integrity sha512-tlzvJPPONTaTR2eKrWTt/pxknTjXgcNbxcYkxNfB0CwC8Pfc5xmSycaTwaQ1HXpN1zv6A7lAhnMV58HOIXTkFg== + dependencies: + lodash "^4.17.12" + +enzyme@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.10.0.tgz#7218e347c4a7746e133f8e964aada4a3523452f6" + integrity sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg== dependencies: array.prototype.flat "^1.2.1" cheerio "^1.0.0-rc.2" function.prototype.name "^1.1.0" has "^1.0.3" + html-element-map "^1.0.0" is-boolean-object "^1.0.0" is-callable "^1.1.4" is-number-object "^1.0.3" + is-regex "^1.0.4" is-string "^1.0.4" is-subset "^0.1.1" lodash.escape "^4.0.1" @@ -3022,6 +3064,22 @@ es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.5. is-regex "^1.0.4" object-keys "^1.0.12" +es-abstract@^1.13.0, es-abstract@^1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.15.0.tgz#8884928ec7e40a79e3c9bc812d37d10c8b24cc57" + integrity sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.0" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-inspect "^1.6.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.1.0" + string.prototype.trimright "^2.1.0" + es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" @@ -3713,11 +3771,26 @@ function.prototype.name@^1.1.0: function-bind "^1.1.1" is-callable "^1.1.3" +function.prototype.name@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.1.tgz#6d252350803085abc2ad423d4fe3be2f9cbda392" + integrity sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + functions-have-names "^1.1.1" + is-callable "^1.1.4" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +functions-have-names@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.1.1.tgz#79d35927f07b8e7103d819fed475b64ccf7225ea" + integrity sha512-U0kNHUoxwPNPWOJaMG7Z00d4a/qZVrFtzWJRaK8V9goaVOCXBSQSJpt3MYGNtkScKEBKovxLjnNdC9MlXwo5Pw== + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -4027,6 +4100,13 @@ html-comment-regex@^1.1.0: resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== +html-element-map@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.1.0.tgz#e5aab9a834caf883b421f8bd9eaedcaac887d63c" + integrity sha512-iqiG3dTZmy+uUaTmHarTL+3/A2VW9ox/9uasKEZC+R/wAtUrTcRlXPSaPqsnWPfIu8wqn09jQNwMRqzL54jSYA== + dependencies: + array-filter "^1.0.0" + html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" @@ -5304,6 +5384,11 @@ lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.3.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== +lodash@^4.17.12: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -5935,6 +6020,11 @@ object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.0.6: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -5952,7 +6042,7 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.entries@^1.0.4: +object.entries@^1.0.4, object.entries@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== @@ -5972,6 +6062,16 @@ object.fromentries@^2.0.0: function-bind "^1.1.1" has "^1.0.1" +object.fromentries@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.1.tgz#050f077855c7af8ae6649f45c80b16ee2d31e704" + integrity sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.15.0" + function-bind "^1.1.1" + has "^1.0.3" + object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" @@ -7065,7 +7165,16 @@ prompts@^2.0.1: kleur "^3.0.0" sisteransi "^1.0.0" -prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2: +prop-types-exact@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869" + integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== + dependencies: + has "^1.0.3" + object.assign "^4.1.0" + reflect.ownkeys "^0.2.0" + +prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -7260,6 +7369,11 @@ react-emotion@^9.1.1: babel-plugin-emotion "^9.2.11" create-emotion-styled "^9.2.8" +react-is@^16.10.2, react-is@^16.9.0: + version "16.10.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.2.tgz#984120fd4d16800e9a738208ab1fba422d23b5ab" + integrity sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA== + react-is@^16.7.0, react-is@^16.8.1: version "16.9.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb" @@ -7373,6 +7487,11 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" +reflect.ownkeys@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" + integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= + regenerate-unicode-properties@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" @@ -7800,6 +7919,11 @@ schema-utils@^1.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== +semver@^5.7.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + send@0.16.2: version "0.16.2" resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" @@ -8218,6 +8342,22 @@ string.prototype.trim@^1.1.2: es-abstract "^1.5.0" function-bind "^1.0.2" +string.prototype.trimleft@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"