diff --git a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/chrome/long Items scroll.png b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/chrome/long Items scroll.png index bf49833029..73a9c272fe 100644 --- a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/chrome/long Items scroll.png +++ b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/chrome/long Items scroll.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57f7c4ebc85ae12ffe7cb6cb1bcfd8f5e79d1154c562c7f5ca805946743b7f38 -size 166068 +oid sha256:a3fbf9adf302794ea49340cf76e7559f52f8785861ffde83ce8aedf103edfab1 +size 124100 diff --git a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/chrome8px/long Items scroll.png b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/chrome8px/long Items scroll.png index 66afc00baf..3eaaae506f 100644 --- a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/chrome8px/long Items scroll.png +++ b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/chrome8px/long Items scroll.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a8aadf74d5eddd15061f5d39e3712607e7afccbe1ed3922c2212ab94b72f41d8 -size 171586 +oid sha256:667fd2d28a3c02d6e52622886d4d26d307bb68c2ab17994f084bc15621d319b5 +size 133190 diff --git a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/firefox/long Items scroll.png b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/firefox/long Items scroll.png index bef36ac86c..36570d70d6 100644 --- a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/firefox/long Items scroll.png +++ b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/firefox/long Items scroll.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f899aa9148b084fa8f05f000080b927bda4bcdf45895395f10be2cc8c2b4b18 -size 66416 +oid sha256:465926c7e9ed4bc545876a1f285d333bf13a13f5613037e2ed755874fe4b6411 +size 47578 diff --git a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/firefox8px/long Items scroll.png b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/firefox8px/long Items scroll.png index f779791ce6..cbfc14b67b 100644 --- a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/firefox8px/long Items scroll.png +++ b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/firefox8px/long Items scroll.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83a192ce71ed64eb0a90d58f8ea858af02f2e12203f17455e4b4ed0d85cbf56b -size 76424 +oid sha256:2e20f8389a9b6cb574cac0255a4ac3993207ef02f9ff49c0cf009406dae5c777 +size 54944 diff --git a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/ie11/long Items scroll.png b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/ie11/long Items scroll.png index a7ca2ad5de..ccdd3b8c69 100644 --- a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/ie11/long Items scroll.png +++ b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/ie11/long Items scroll.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6ff0f9b7db0ed4b868a32c611b67a817403fcc333a53b5fed009ffea6fcada2a -size 89854 +oid sha256:b9a79c098bae4e7cda0d5ffac45fe076110fa650c9fdd985fad06fcea1ec9947 +size 66014 diff --git a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/ie118px/long Items scroll.png b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/ie118px/long Items scroll.png index cd2e46e0cf..91ca56bad6 100644 --- a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/ie118px/long Items scroll.png +++ b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/long Items scroll/ie118px/long Items scroll.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16ebd1ebe027b9fc874eec825c2d7702a7d29b7991545afe036e4648cbd31202 -size 95197 +oid sha256:3e232ee2a0a922f724df22c031882fa44c8aa88a02686522044b820c25942e33 +size 70203 diff --git a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/chrome/short Items scroll.png b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/chrome/short Items scroll.png index 8e5efd2952..46f36b8204 100644 --- a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/chrome/short Items scroll.png +++ b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/chrome/short Items scroll.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70b923a97c6ef6e34a792ef1a2ceeff3f6cf0e4b8718a344136c4fc7879e7a1b -size 91591 +oid sha256:b57cefc08cb64957def6599f640cd774a75d09182c15d1af72cb562a1e50b7c9 +size 76773 diff --git a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/chrome8px/short Items scroll.png b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/chrome8px/short Items scroll.png index 97d299e140..fb413a4fa0 100644 --- a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/chrome8px/short Items scroll.png +++ b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/chrome8px/short Items scroll.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9735d414f6a319d8cf7b90535f27088731405eec4dfdc3822339af3c00fd3e6 -size 102866 +oid sha256:5d6bbf3f32a188d826a17af7ec87fb5a6e52263359add42e531c7af200293fa4 +size 87161 diff --git a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/firefox/short Items scroll.png b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/firefox/short Items scroll.png index 10a2372aee..4362c04daa 100644 --- a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/firefox/short Items scroll.png +++ b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/firefox/short Items scroll.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b856b3635617469ec3050bdd4ffc699776a1dfcb48eee6e694a0e9491e6dec0 -size 49286 +oid sha256:e508ea6465cabe1cc8d20fe6bf98655f0b23e516aaee41ab2fa5a46c791237fb +size 42363 diff --git a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/firefox8px/short Items scroll.png b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/firefox8px/short Items scroll.png index c4b160ba16..9b53ff9000 100644 --- a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/firefox8px/short Items scroll.png +++ b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/firefox8px/short Items scroll.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b988fd9119766ee13e1ea304ab553e7b1f8bb74403bf203c9ef109b9fe477a90 -size 55624 +oid sha256:999289a1a1968691f7913f76b65e5583f9f542965b3cf9f24c993d9b0c42046e +size 47994 diff --git a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/ie11/short Items scroll.png b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/ie11/short Items scroll.png index 0675df85ec..9caa50f62d 100644 --- a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/ie11/short Items scroll.png +++ b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/ie11/short Items scroll.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e95e90a7083ae165477f7c2c59a719d71633f04ea81f55beca495f31d9fc7aee -size 54278 +oid sha256:30a79bfb2b398614afd08eca8d1ba45da6b500999c81e1b09c645cc6a42e542c +size 46384 diff --git a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/ie118px/short Items scroll.png b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/ie118px/short Items scroll.png index 3deba9bda6..b8218a42b1 100644 --- a/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/ie118px/short Items scroll.png +++ b/packages/react-ui/.creevey/images/DropdownContainer/various aligns, portals, items and scrolls/short Items scroll/ie118px/short Items scroll.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:982d3dc6cca39e8ed720d6335e141831f680af6cf4f6885dc3011a792bd3d844 -size 57647 +oid sha256:dcbc0cf71b47df5f4b047973ca5273389233ab6bcfd54ef5d8918fd3a42c8d4e +size 49830 diff --git a/packages/react-ui/components/DateInput/helpers/SelectionHelpers.tsx b/packages/react-ui/components/DateInput/helpers/SelectionHelpers.tsx index 6cb555b3e1..ed08e4738e 100644 --- a/packages/react-ui/components/DateInput/helpers/SelectionHelpers.tsx +++ b/packages/react-ui/components/DateInput/helpers/SelectionHelpers.tsx @@ -2,7 +2,7 @@ export const selectNodeContents = (node: HTMLElement | null, start?: number, end if (!node) { return; } - if (document.createRange) { + if ('createRange' in document) { try { const selection = window.getSelection(); const range = window.document.createRange(); diff --git a/packages/react-ui/components/Input/Input.tsx b/packages/react-ui/components/Input/Input.tsx index b1f749d7b5..fce9a04771 100644 --- a/packages/react-ui/components/Input/Input.tsx +++ b/packages/react-ui/components/Input/Input.tsx @@ -466,7 +466,7 @@ export class Input extends React.Component { if (this.props.selectAllOnFocus) { // https://github.com/facebook/react/issues/7769 - this.input ? this.selectAll() : this.delaySelectAll(); + this.input && !isIE11 ? this.selectAll() : this.delaySelectAll(); } if (this.props.onFocus) { diff --git a/packages/react-ui/components/Textarea/Textarea.tsx b/packages/react-ui/components/Textarea/Textarea.tsx index 92d1836472..b1e002b8b4 100644 --- a/packages/react-ui/components/Textarea/Textarea.tsx +++ b/packages/react-ui/components/Textarea/Textarea.tsx @@ -2,6 +2,7 @@ import React, { ReactNode } from 'react'; import PropTypes from 'prop-types'; import throttle from 'lodash.throttle'; import cn from 'classnames'; +import raf from 'raf'; import { isKeyEnter } from '../../lib/events/keyboard/identifiers'; import { polyfillPlaceholder } from '../../lib/polyfillPlaceholder'; @@ -11,7 +12,7 @@ import { ThemeContext } from '../../lib/theming/ThemeContext'; import { Theme } from '../../lib/theming/Theme'; import { RenderLayer } from '../../internal/RenderLayer'; import { ResizeDetector } from '../../internal/ResizeDetector'; -import { isBrowser } from '../../lib/client'; +import { isBrowser, isIE11 } from '../../lib/client'; import { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper'; import { isTestEnv } from '../../lib/currentEnvironment'; @@ -189,6 +190,7 @@ export class Textarea extends React.Component { }; private theme!: Theme; + private selectAllId: number | null = null; private node: Nullable; private fakeNode: Nullable; private counter: Nullable; @@ -221,6 +223,7 @@ export class Textarea extends React.Component { if (this.props.showLengthCounter && this.textareaObserver) { this.textareaObserver.disconnect(); } + this.cancelDelayedSelectAll(); } public componentDidUpdate(prevProps: TextareaProps) { @@ -286,6 +289,15 @@ export class Textarea extends React.Component { } }; + private delaySelectAll = (): number => (this.selectAllId = raf(this.selectAll)); + + private cancelDelayedSelectAll = (): void => { + if (this.selectAllId) { + raf.cancel(this.selectAllId); + this.selectAllId = null; + } + }; + private renderMain = (props: CommonWrapperRestProps) => { const { width = DEFAULT_WIDTH, @@ -497,7 +509,8 @@ export class Textarea extends React.Component { this.setState({ isCounterVisible: true }); if (this.props.selectAllOnFocus) { - this.selectAll(); + // https://github.com/facebook/react/issues/7769 + this.node && !isIE11 ? this.selectAll() : this.delaySelectAll(); } if (this.props.onFocus) { diff --git a/packages/react-ui/internal/DropdownContainer/__stories__/DropdownContainer.stories.tsx b/packages/react-ui/internal/DropdownContainer/__stories__/DropdownContainer.stories.tsx index c729378f30..54df7185aa 100644 --- a/packages/react-ui/internal/DropdownContainer/__stories__/DropdownContainer.stories.tsx +++ b/packages/react-ui/internal/DropdownContainer/__stories__/DropdownContainer.stories.tsx @@ -151,7 +151,7 @@ class VariousAlignsPortalsItemsAndScrolls extends React.Component { dropdownProps={{ align, disablePortal }} > - + {`${row}/${col}/align-${align}/portal-${!disablePortal}; `.repeat(long ? 3 : 1)} diff --git a/packages/react-ui/lib/LayoutEvents.ts b/packages/react-ui/lib/LayoutEvents.ts index 1fde228116..8bc6330716 100644 --- a/packages/react-ui/lib/LayoutEvents.ts +++ b/packages/react-ui/lib/LayoutEvents.ts @@ -10,13 +10,13 @@ function getEmitter() { } function listenBrowserEvents() { - window.addEventListener('scroll', emit); - window.addEventListener('resize', emit); + window.addEventListener('scroll', emit, { capture: true }); + window.addEventListener('resize', emit, { capture: true }); } function unlistenBrowserEvents() { - window.removeEventListener('scroll', emit); - window.removeEventListener('resize', emit); + window.removeEventListener('scroll', emit, { capture: true }); + window.removeEventListener('resize', emit, { capture: true }); } export function addListener(callback: () => void) { diff --git a/packages/react-ui/lib/listenFocusOutside.ts b/packages/react-ui/lib/listenFocusOutside.ts index a54c898e13..f22b6babf2 100644 --- a/packages/react-ui/lib/listenFocusOutside.ts +++ b/packages/react-ui/lib/listenFocusOutside.ts @@ -22,7 +22,7 @@ function addHandleEvent() { document.body.addEventListener( isFirefox ? 'focus' : ('focusin' as 'focus'), isFirefox ? debounce(handleNativeFocus, 0, { leading: true, trailing: false }) : handleNativeFocus, - isFirefox, + { capture: true }, ); } diff --git a/packages/react-ui/package.json b/packages/react-ui/package.json index d7a185def5..8d2c7abfec 100644 --- a/packages/react-ui/package.json +++ b/packages/react-ui/package.json @@ -154,8 +154,8 @@ "webpack": "^4.41.2" }, "peerDependencies": { - "react": ">=16.9 <17", - "react-dom": ">=16.9 <17" + "react": ">=16.9", + "react-dom": ">=16.9" }, "jest": { "testResultsProcessor": "jest-teamcity-reporter",