Added (local) fork of @reach/portal to unblock OwnersStack MenuButton PR
Brian Vaughn committed
Apr 9, 2019 at 08:54 UTC
dbf6942512afd314981589b3b5df39766288b55f
10 files changed
+201
-12
.eslintignore
+1
@@ -3,6 +3,7 @@ node_modules
3
shells/browser/chrome/build
4
shells/browser/firefox/build
5
shells/dev/build
6
+vendor
7
8
package-lock.json
9
yarn.lock
\ No newline at end of file
.prettierignore
+1
@@ -3,6 +3,7 @@ node_modules
3
shells/browser/chrome/build
4
shells/browser/firefox/build
5
shells/dev/build
6
+vendor
7
8
package-lock.json
9
yarn.lock
\ No newline at end of file
package.json
+3
-1
@@ -38,6 +38,9 @@
38
],
39
"**/*.js": "eslint --max-warnings 0"
40
},
41
+ "resolutions": {
42
+ "@reach/portal": "file:./vendor/@reach/portal"
43
+ },
44
"dependencies": {
45
"@babel/core": "^7.1.6",
46
"@babel/plugin-proposal-class-properties": "^7.1.0",
@@ -100,7 +103,6 @@
103
"react-color": "^2.11.7",
104
"react-dom": "^16.8.4",
105
"react-is": "^16.8.4",
103
- "react-portal": "^3.1.0",
106
"react-virtualized-auto-sizer": "^1.0.2",
107
"react-window": "^1.5.1",
108
"scheduler": "^0.13",
vendor/@reach/portal/.eslintignore
new
+1
@@ -0,0 +1 @@
1
+index.js
\ No newline at end of file
vendor/@reach/portal/es/index.js
new
+44
@@ -0,0 +1,44 @@
1
+import React from "react";
2
+import { createPortal } from "react-dom";
3
+import Component from "@reach/component-component";
4
+
5
+var Portal = function Portal(_ref) {
6
+ var children = _ref.children,
7
+ _ref$type = _ref.type,
8
+ type = _ref$type === undefined ? "reach-portal" : _ref$type;
9
+ return React.createElement(Component, {
10
+ getRefs: function getRefs() {
11
+ return { mountNode: null, portalNode: null };
12
+ },
13
+ didMount: function didMount(_ref2) {
14
+ var refs = _ref2.refs,
15
+ forceUpdate = _ref2.forceUpdate;
16
+
17
+ // It's possible that the content we are portal has, itself, been portaled.
18
+ // In that case, it's important to append to the correct document element.
19
+ var ownerDocument = refs.mountNode.ownerDocument;
20
+ refs.portalNode = ownerDocument.createElement(type);
21
+ ownerDocument.body.appendChild(refs.portalNode);
22
+ forceUpdate();
23
+ },
24
+ willUnmount: function willUnmount(_ref3) {
25
+ var portalNode = _ref3.refs.portalNode;
26
+
27
+ portalNode.ownerDocument.body.removeChild(portalNode);
28
+ },
29
+ render: function render(_ref4) {
30
+ var refs = _ref4.refs;
31
+ var portalNode = refs.portalNode;
32
+
33
+ if (!portalNode) {
34
+ return React.createElement("div", { ref: function ref(div) {
35
+ return refs.mountNode = div;
36
+ } });
37
+ } else {
38
+ return createPortal(children, portalNode);
39
+ }
40
+ }
41
+ });
42
+};
43
+
44
+export default Portal;
\ No newline at end of file
vendor/@reach/portal/examples/basic.example.js
new
+35
@@ -0,0 +1,35 @@
1
+import React from "react";
2
+import Portal from "../src/index";
3
+
4
+export let name = "Basic";
5
+
6
+export let Example = () => (
7
+ <div
8
+ style={{
9
+ height: 40,
10
+ overflow: "auto"
11
+ }}
12
+ >
13
+ <div style={{ border: "solid 5px", padding: 20, marginLeft: 170 }}>
14
+ This is in the normal react root, with an overflow hidden parent, clips
15
+ the box.
16
+ </div>
17
+ <Portal>
18
+ <div
19
+ style={{
20
+ position: "absolute",
21
+ top: 0,
22
+ left: 20,
23
+ width: 100,
24
+ border: "solid 5px",
25
+ padding: 20,
26
+ background: "#f0f0f0"
27
+ }}
28
+ >
29
+ This is in the portal, rendered in the DOM at the document root so the
30
+ CSS doesn't screw things up, but we render it in the react hierarchy
31
+ where it makes sense.
32
+ </div>
33
+ </Portal>
34
+ </div>
35
+);
vendor/@reach/portal/index.js
new
+56
@@ -0,0 +1,56 @@
1
+"use strict";
2
+
3
+exports.__esModule = true;
4
+
5
+var _react = require("react");
6
+
7
+var _react2 = _interopRequireDefault(_react);
8
+
9
+var _reactDom = require("react-dom");
10
+
11
+var _componentComponent = require("@reach/component-component");
12
+
13
+var _componentComponent2 = _interopRequireDefault(_componentComponent);
14
+
15
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+
17
+var Portal = function Portal(_ref) {
18
+ var children = _ref.children,
19
+ _ref$type = _ref.type,
20
+ type = _ref$type === undefined ? "reach-portal" : _ref$type;
21
+ return _react2.default.createElement(_componentComponent2.default, {
22
+ getRefs: function getRefs() {
23
+ return { mountNode: null, portalNode: null };
24
+ },
25
+ didMount: function didMount(_ref2) {
26
+ var refs = _ref2.refs,
27
+ forceUpdate = _ref2.forceUpdate;
28
+
29
+ // It's possible that the content we are portal has, itself, been portaled.
30
+ // In that case, it's important to append to the correct document element.
31
+ var ownerDocument = refs.mountNode.ownerDocument;
32
+ refs.portalNode = ownerDocument.createElement(type);
33
+ ownerDocument.body.appendChild(refs.portalNode);
34
+ forceUpdate();
35
+ },
36
+ willUnmount: function willUnmount(_ref3) {
37
+ var portalNode = _ref3.refs.portalNode;
38
+
39
+ portalNode.ownerDocument.body.removeChild(portalNode);
40
+ },
41
+ render: function render(_ref4) {
42
+ var refs = _ref4.refs;
43
+ var portalNode = refs.portalNode;
44
+
45
+ if (!portalNode) {
46
+ return _react2.default.createElement("div", { ref: function ref(div) {
47
+ return refs.mountNode = div;
48
+ } });
49
+ } else {
50
+ return (0, _reactDom.createPortal)(children, portalNode);
51
+ }
52
+ }
53
+ });
54
+};
55
+
56
+exports.default = Portal;
\ No newline at end of file
vendor/@reach/portal/package.json
new
+28
@@ -0,0 +1,28 @@
1
+{
2
+ "name": "@reach/portal",
3
+ "version": "0.1.3",
4
+ "description": "Declarative portals for React",
5
+ "main": "index.js",
6
+ "module": "es/index.js",
7
+ "scripts": {
8
+ "test": "echo \"Write some tests you bum!\"",
9
+ "build": "node ../../shared/build-package",
10
+ "lint": "eslint . --max-warnings=0"
11
+ },
12
+ "dependencies": {
13
+ "@reach/component-component": "^0.1.3"
14
+ },
15
+ "peerDependencies": {
16
+ "react": "^16.4.0",
17
+ "react-dom": "^16.4.0"
18
+ },
19
+ "author": "",
20
+ "license": "MIT",
21
+ "files": [
22
+ "es",
23
+ "src",
24
+ "lib",
25
+ "index.js",
26
+ "styles.css"
27
+ ]
28
+}
vendor/@reach/portal/src/index.js
new
+30
@@ -0,0 +1,30 @@
1
+import React from "react";
2
+import { createPortal } from "react-dom";
3
+import Component from "@reach/component-component";
4
+
5
+let Portal = ({ children, type = "reach-portal" }) => (
6
+ <Component
7
+ getRefs={() => ({ mountNode: null, portalNode: null })}
8
+ didMount={({ refs, forceUpdate }) => {
9
+ // It's possible that the content we are portal has, itself, been portaled.
10
+ // In that case, it's important to append to the correct document element.
11
+ const ownerDocument = refs.mountNode.ownerDocument;
12
+ refs.portalNode = ownerDocument.createElement(type);
13
+ ownerDocument.body.appendChild(refs.portalNode);
14
+ forceUpdate();
15
+ }}
16
+ willUnmount={({ refs: { portalNode } }) => {
17
+ portalNode.ownerDocument.body.removeChild(portalNode);
18
+ }}
19
+ render={({ refs }) => {
20
+ const { portalNode } = refs;
21
+ if (!portalNode) {
22
+ return <div ref={div => (refs.mountNode = div)} />;
23
+ } else {
24
+ return createPortal(children, portalNode);
25
+ }
26
+ }}
27
+ />
28
+);
29
+
30
+export default Portal;
yarn.lock
+2
-11
@@ -768,10 +768,8 @@
768
resolved "https://registry.yarnpkg.com/@reach/observe-rect/-/observe-rect-1.0.3.tgz#2ea3dcc369ab22bd9f050a92ea319321356a61e8"
769
integrity sha1-LqPcw2mrIr2fBQqS6jGTITVqYeg=
770
771
-"@reach/portal@^0.1.3":
771
+"@reach/portal@^0.1.3", "@reach/portal@file:./vendor/@reach/portal":
772
version "0.1.3"
773
- resolved "https://registry.yarnpkg.com/@reach/portal/-/portal-0.1.3.tgz#31d820f31bbab73570d5b5a449e2b0fa6457802f"
774
- integrity sha512-yDcu5XZWfWKmKvbOs/uS7vITPVFXmn+XY5V6YcGhlz20KgwG+aJX2c7yvYzO++Zr0qvmtQCmxA4EGEciqIys6g==
773
dependencies:
774
"@reach/component-component" "^0.1.3"
775
@@ -8584,7 +8582,7 @@ promise@^7.1.1:
8582
dependencies:
8583
asap "~2.0.3"
8584
8587
-prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2:
8585
+prop-types@^15.5.10, prop-types@^15.6.1, prop-types@^15.6.2:
8586
version "15.7.2"
8587
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
8588
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -8796,13 +8794,6 @@ react-lifecycles-compat@^3.0.4:
8794
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
8795
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
8796
8799
-react-portal@^3.1.0:
8800
- version "3.2.0"
8801
- resolved "https://registry.yarnpkg.com/react-portal/-/react-portal-3.2.0.tgz#4224e19b2b05d5cbe730a7ba0e34ec7585de0043"
8802
- integrity sha512-avb1FreAZAVCvNNyS2dCpxZiPYPJnAasHYPxdVBTROgNFeI+KSb+OoMHNsC1GbDawESCriPwCX+qKua6WSPIFw==
8803
- dependencies:
8804
- prop-types "^15.5.8"
8805
-
8797
react-virtualized-auto-sizer@^1.0.2:
8798
version "1.0.2"
8799
resolved "https://registry.yarnpkg.com/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.2.tgz#a61dd4f756458bbf63bd895a92379f9b70f803bd"