From a07fd4e021cf7dd347aeb27830a025ded6fff04b Mon Sep 17 00:00:00 2001 From: Ben Grynhaus Date: Tue, 14 Apr 2020 23:20:47 +0300 Subject: [PATCH 1/4] upgrade `@popperjs/core` to 2.3.3 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0a2bdb3..b21c873 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "@babel/preset-react": "^7.9.4", "@emotion/core": "^10.0.28", "@emotion/styled": "^10.0.27", - "@popperjs/core": "^2.2.1", + "@popperjs/core": "^2.3.3", "@rollup/plugin-commonjs": "^11.0.2", "@rollup/plugin-node-resolve": "^7.1.1", "@rollup/plugin-replace": "^2.3.1", diff --git a/yarn.lock b/yarn.lock index 09dcaba..5749a3a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1251,10 +1251,10 @@ "@parcel/utils" "^1.11.0" physical-cpu-count "^2.0.0" -"@popperjs/core@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.2.1.tgz#d7d1d7fbdc1f2aa24e62f4ef4b001be7727340c5" - integrity sha512-BChdj3idQiLi+7vPhE6gEDiPzpozvSrUqbSMoSTlRbOQkU0p6u4si0UBydegTyphsYSZC2AUHGYYICP0gqmEVg== +"@popperjs/core@^2.3.3": + version "2.3.3" + resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.3.3.tgz#8731722aeb7330e8fd9eb5d424be6b98dea7d6da" + integrity sha512-yEvVC8RfhRPkD9TUn7cFcLcgoJePgZRAOR7T21rcRY5I8tpuhzeWfGa7We7tB14fe9R7wENdqUABcMdwD4SQLw== "@rollup/plugin-commonjs@^11.0.2": version "11.0.2" From 3ee8ab519959ed8eaa81313ce57d7c84c9b24153 Mon Sep 17 00:00:00 2001 From: Ben Grynhaus Date: Wed, 15 Apr 2020 01:29:05 +0300 Subject: [PATCH 2/4] fix typescript types --- src/Popper.js | 3 ++- typings/react-popper.d.ts | 27 +++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/Popper.js b/src/Popper.js index f7e9c85..d9e70f9 100644 --- a/src/Popper.js +++ b/src/Popper.js @@ -5,6 +5,7 @@ import { type Placement, type PositioningStrategy, type VirtualElement, + type StrictModifiers, type Modifier, } from '@popperjs/core/lib'; import { ManagerReferenceNodeContext } from './Manager'; @@ -13,7 +14,7 @@ import { unwrapArray, setRef } from './utils'; import { usePopper } from './usePopper'; type ReferenceElement = ?(VirtualElement | HTMLElement); -type Modifiers = Array<$Shape>>; +type Modifiers = Array>>; export type PopperArrowProps = {| ref: Ref, diff --git a/typings/react-popper.d.ts b/typings/react-popper.d.ts index dc7b1c4..42bf860 100644 --- a/typings/react-popper.d.ts +++ b/typings/react-popper.d.ts @@ -1,5 +1,8 @@ -import * as React from 'react'; import * as PopperJS from '@popperjs/core'; +import * as React from 'react'; + +// Utility type +type UnionWhere = U extends M ? U : never; interface ManagerProps { children: React.ReactNode; @@ -37,16 +40,32 @@ export interface PopperChildrenProps { arrowProps: PopperArrowProps; } -export interface PopperProps { +type StrictModifierNames = NonNullable; + +export type StrictModifier< + Name extends StrictModifierNames = StrictModifierNames +> = UnionWhere; + +export type Modifier< + Name, + Options extends object = object +> = Name extends StrictModifierNames + ? StrictModifier + : Partial>; + +export interface PopperProps { children: (props: PopperChildrenProps) => React.ReactNode; innerRef?: React.Ref; - modifiers?: Array>>; + modifiers?: ReadonlyArray>; placement?: PopperJS.Placement; strategy?: PopperJS.PositioningStrategy; referenceElement?: HTMLElement | PopperJS.VirtualElement; onFirstUpdate?: (state: Partial) => void; } -export class Popper extends React.Component {} +export class Popper extends React.Component< + PopperProps, + {} +> {} export function usePopper( referenceElement?: Element | null, From 66d3b1b75140b8214d05bc500f5197aa0e1ccac6 Mon Sep 17 00:00:00 2001 From: Ben Grynhaus Date: Wed, 15 Apr 2020 02:05:29 +0300 Subject: [PATCH 3/4] add missing VirtualElement type for `usePopper` hook in TypeScript --- typings/react-popper.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/typings/react-popper.d.ts b/typings/react-popper.d.ts index 42bf860..89efb5e 100644 --- a/typings/react-popper.d.ts +++ b/typings/react-popper.d.ts @@ -68,7 +68,7 @@ export class Popper extends React.Component< > {} export function usePopper( - referenceElement?: Element | null, + referenceElement?: Element | PopperJS.VirtualElement | null, popperElement?: HTMLElement | null, options?: Partial & { createPopper?: typeof PopperJS.createPopper; From 06b79e3d7dfe49ff7f5fa7c8d4ca811ad12f845e Mon Sep 17 00:00:00 2001 From: Ben Grynhaus Date: Wed, 15 Apr 2020 01:51:40 +0300 Subject: [PATCH 4/4] better TypeScript modifier types for `usePopper` --- typings/react-popper.d.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/typings/react-popper.d.ts b/typings/react-popper.d.ts index 89efb5e..a8176dd 100644 --- a/typings/react-popper.d.ts +++ b/typings/react-popper.d.ts @@ -67,11 +67,12 @@ export class Popper extends React.Component< {} > {} -export function usePopper( +export function usePopper( referenceElement?: Element | PopperJS.VirtualElement | null, popperElement?: HTMLElement | null, - options?: Partial & { + options?: Omit, 'modifiers'> & { createPopper?: typeof PopperJS.createPopper; + modifiers?: ReadonlyArray>; } ): { styles: { [key: string]: React.CSSProperties };