react-grid-layout 1.2.1 → 1.2.5

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.
package/.flowconfig CHANGED
@@ -1,5 +1,5 @@
1
1
  [version]
2
- ^0.145.0
2
+ ^0.150.1
3
3
 
4
4
  [ignore]
5
5
  <PROJECT_ROOT>/build/.*
package/CHANGELOG.md CHANGED
@@ -1,5 +1,45 @@
1
1
  # Changelog
2
2
 
3
+ 1.2.5 (May 10, 2021)
4
+ ---
5
+
6
+ ### Bugfixes
7
+ - Ensure no negative positions are possible when compacting
8
+ - Thanks @DonnyLi [#829](https://github.com/react-grid-layout/react-grid-layout/pull/829)
9
+ - Fixes [#535](https://github.com/react-grid-layout/react-grid-layout/issues/535)
10
+ - Fix resizing on mobile. This was caused by the `ref` refactor to remove ReactDOM in 1.2.3.
11
+ - Fixes #[1458](https://github.com/react-grid-layout/react-grid-layout/issues/1458)
12
+ - Note: this upgrades `react-resizable` to `3.0.1`, which like our other deps, is only compatible with `React@>=16.3`.
13
+
14
+ ### Documentation
15
+ - Document new arity of `resizeHandle` (`(axis: ResizeHandleAxis, ref: ReactRef<HTMLElement>) => React$Element`)
16
+ - Remove references to the deprecated `verticalCompact` prop
17
+
18
+ 1.2.4 (Mar 18, 2021)
19
+ ---
20
+
21
+ *This version fixes a serious render bug in `<WidthProvider>`. 1.2.3 should not be used.*
22
+
23
+ ### Bugfixes
24
+ - Fix failure to mount when layout is WidthProvider-wrapped and `measureBeforeMount` is `true`.
25
+ - Ref: [#1428](https://github.com/react-grid-layout/react-grid-layout/issues/1428)
26
+ - `<WidthProvider>` no longer updates grid with if it has been set to 0. This prevents unnecessary updates
27
+ if the grid is set to `display: none;`. Thanks @405go [#1427](https://github.com/react-grid-layout/react-grid-layout/pull/1427)
28
+
29
+ 1.2.3 (Mar 16, 2021)
30
+ ---
31
+
32
+ ### New Features
33
+ - React-Grid-Layout is now fully compatible with `<React.StrictMode>`.
34
+ - Usage of `ReactDOM` has been removed by using `React.createRef()` inside RGL, and the new [`nodeRef` prop](https://github.com/react-grid-layout/react-draggable/blob/master/CHANGELOG.md#440-may-12-2020) in `react-draggable`.
35
+
36
+ 1.2.2 (Mar 1, 2021)
37
+ ---
38
+
39
+ ### Bugfixes
40
+ - `onResize` as changed in 1.2.1 did not correctly save the layout. This is now fixed.
41
+ - As you might guess, we need more test coverage! PRs are very welcome, I'll buy you beers on Cashapp or Patreon or whatever you like.
42
+
3
43
  1.2.1 (Mar 1, 2021)
4
44
  ---
5
45
 
package/README.md CHANGED
@@ -16,7 +16,7 @@ RGL is React-only and does not require jQuery.
16
16
  ![BitMEX UI](http://i.imgur.com/oo1NT6c.gif)
17
17
  > GIF from production usage on [BitMEX.com](https://www.bitmex.com)
18
18
 
19
- [**[Demo](https://react-grid-layout.github.io/react-grid-layout/examples/0-showcase.html) | [Changelog](/CHANGELOG.md) | [CodeSandbox Editable demo](https://codesandbox.io/s/5wy3rz5z1x?module=%2Fsrc%2FShowcaseLayout.js)**]
19
+ [**[Demo](https://react-grid-layout.github.io/react-grid-layout/) | [Changelog](/CHANGELOG.md) | [CodeSandbox Editable demo](https://codesandbox.io/s/5wy3rz5z1x?module=%2Fsrc%2FShowcaseLayout.js)**]
20
20
 
21
21
  ## Table of Contents
22
22
 
@@ -92,11 +92,12 @@ RGL is React-only and does not require jQuery.
92
92
  * Separate layouts per responsive breakpoint
93
93
  * Grid Items placed using CSS Transforms
94
94
  * Performance with CSS Transforms: [on](http://i.imgur.com/FTogpLp.jpg) / [off](http://i.imgur.com/gOveMm8.jpg), note paint (green) as % of time
95
+ * Compatibility with `<React.StrictMode>`
95
96
 
96
97
  |Version | Compatibility |
97
98
  |----------------|------------------|
98
- | >= 0.17.0 | React 0.16 |
99
- | >= 0.11.3 | React 0.14 & v15 |
99
+ | >= 0.17.0 | React 16 & 17 |
100
+ | >= 0.11.3 | React 0.14 & 15 |
100
101
  | >= 0.10.0 | React 0.14 |
101
102
  | 0.8. - 0.9.2 | React 0.13 |
102
103
  | < 0.8 | React 0.12 |
@@ -272,9 +273,6 @@ draggableCancel: ?string = '',
272
273
  // If you forget the leading . it will not work.
273
274
  draggableHandle: ?string = '',
274
275
 
275
- // If true, the layout will compact vertically
276
- verticalCompact: ?boolean = true,
277
-
278
276
  // Compaction type.
279
277
  compactType: ?('vertical' | 'horizontal') = 'vertical';
280
278
 
@@ -344,7 +342,8 @@ isDroppable: ?boolean = false
344
342
  // 'ne' - Northeast handle (top-right)
345
343
  resizeHandles: ?Array<'s' | 'w' | 'e' | 'n' | 'sw' | 'nw' | 'se' | 'ne'> = ['se']
346
344
  // Custom component for resize handles
347
- resizeHandle?: ReactElement<any> | ((resizeHandleAxis: ResizeHandleAxis) => ReactElement<any>)
345
+ // See `handle` as used in https://github.com/react-grid-layout/react-resizable#props
346
+ resizeHandle?: ReactElement<any> | ((resizeHandleAxis: ResizeHandleAxis, ref: ReactRef<HTMLElement>) => ReactElement<any>)
348
347
 
349
348
  //
350
349
  // Callbacks
package/build/GridItem.js CHANGED
@@ -9,8 +9,6 @@ exports.default = void 0;
9
9
 
10
10
  var _react = _interopRequireDefault(require("react"));
11
11
 
12
- var _reactDom = _interopRequireDefault(require("react-dom"));
13
-
14
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
15
13
 
16
14
  var _reactDraggable = require("react-draggable");
@@ -27,7 +25,7 @@ var _classnames = _interopRequireDefault(require("classnames"));
27
25
 
28
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
27
 
30
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
28
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
31
29
 
32
30
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
33
31
 
@@ -78,7 +76,7 @@ var GridItem = /*#__PURE__*/function (_React$Component) {
78
76
  className: ""
79
77
  });
80
78
 
81
- _defineProperty(_assertThisInitialized(_this), "currentNode", void 0);
79
+ _defineProperty(_assertThisInitialized(_this), "elementRef", /*#__PURE__*/_react.default.createRef());
82
80
 
83
81
  _defineProperty(_assertThisInitialized(_this), "onDragStart", function (e, _ref) {
84
82
  var node = _ref.node;
@@ -273,26 +271,19 @@ var GridItem = /*#__PURE__*/function (_React$Component) {
273
271
  ) {
274
272
  var droppingPosition = this.props.droppingPosition;
275
273
  if (!droppingPosition) return;
274
+ var node = this.elementRef.current; // Can't find DOM node (are we unmounted?)
275
+
276
+ if (!node) return;
276
277
  var prevDroppingPosition = prevProps.droppingPosition || {
277
278
  left: 0,
278
279
  top: 0
279
280
  };
280
281
  var dragging = this.state.dragging;
281
-
282
- if (!this.currentNode) {
283
- // eslint-disable-next-line react/no-find-dom-node
284
- this.currentNode = ((_reactDom.default.findDOMNode(this)
285
- /*: any*/
286
- )
287
- /*: HTMLElement*/
288
- );
289
- }
290
-
291
282
  var shouldDrag = dragging && droppingPosition.left !== prevDroppingPosition.left || droppingPosition.top !== prevDroppingPosition.top;
292
283
 
293
284
  if (!dragging) {
294
285
  this.onDragStart(droppingPosition.e, {
295
- node: this.currentNode,
286
+ node: node,
296
287
  deltaX: droppingPosition.left,
297
288
  deltaY: droppingPosition.top
298
289
  });
@@ -300,7 +291,7 @@ var GridItem = /*#__PURE__*/function (_React$Component) {
300
291
  var deltaX = droppingPosition.left - dragging.left;
301
292
  var deltaY = droppingPosition.top - dragging.top;
302
293
  this.onDrag(droppingPosition.e, {
303
- node: this.currentNode,
294
+ node: node,
304
295
  deltaX: deltaX,
305
296
  deltaY: deltaY
306
297
  });
@@ -383,7 +374,8 @@ var GridItem = /*#__PURE__*/function (_React$Component) {
383
374
  onStop: this.onDragStop,
384
375
  handle: this.props.handle,
385
376
  cancel: ".react-resizable-handle" + (this.props.cancel ? "," + this.props.cancel : ""),
386
- scale: this.props.transformScale
377
+ scale: this.props.transformScale,
378
+ nodeRef: this.elementRef
387
379
  }, child);
388
380
  }
389
381
  /**
@@ -422,7 +414,8 @@ var GridItem = /*#__PURE__*/function (_React$Component) {
422
414
  var maxes = (0, _calculateUtils.calcGridItemPosition)(positionParams, 0, 0, maxW, maxH);
423
415
  var minConstraints = [mins.width, mins.height];
424
416
  var maxConstraints = [Math.min(maxes.width, maxWidth), Math.min(maxes.height, Infinity)];
425
- return /*#__PURE__*/_react.default.createElement(_reactResizable.Resizable, {
417
+ return /*#__PURE__*/_react.default.createElement(_reactResizable.Resizable // These are opts for the resize handle itself
418
+ , {
426
419
  draggableOpts: {
427
420
  disabled: !isResizable
428
421
  },
@@ -518,6 +511,7 @@ var GridItem = /*#__PURE__*/function (_React$Component) {
518
511
 
519
512
 
520
513
  var newChild = /*#__PURE__*/_react.default.cloneElement(child, {
514
+ ref: this.elementRef,
521
515
  className: (0, _classnames.default)("react-grid-item", child.props.className, this.props.className, {
522
516
  static: this.props.static,
523
517
  resizing: Boolean(this.state.resizing),
@@ -598,7 +592,7 @@ _defineProperty(GridItem, "propTypes", {
598
592
  // ID is nice to have for callbacks
599
593
  i: _propTypes.default.string.isRequired,
600
594
  // Resize handle options
601
- resizeHandles: _ReactGridLayoutPropTypes.resizeHandlesType,
595
+ resizeHandles: _ReactGridLayoutPropTypes.resizeHandleAxesType,
602
596
  resizeHandle: _ReactGridLayoutPropTypes.resizeHandleType,
603
597
  // Functions
604
598
  onDragStop: _propTypes.default.func,
@@ -23,11 +23,19 @@ var _ReactGridLayoutPropTypes = _interopRequireDefault(require("./ReactGridLayou
23
23
 
24
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
25
 
26
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
26
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
27
 
28
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
28
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
29
 
30
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
30
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
31
+
32
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
33
+
34
+ function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
35
+
36
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
37
+
38
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
31
39
 
32
40
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
33
41
 
@@ -37,7 +45,7 @@ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread n
37
45
 
38
46
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
39
47
 
40
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
48
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
41
49
 
42
50
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
43
51
 
@@ -464,45 +472,50 @@ var ReactGridLayout = /*#__PURE__*/function (_React$Component) {
464
472
  var _this$props4 = this.props,
465
473
  cols = _this$props4.cols,
466
474
  preventCollision = _this$props4.preventCollision;
467
- var originalLayoutItem
468
- /*: ?LayoutItem*/
469
- = (0, _utils.getLayoutItem)(layout, i);
470
- if (!originalLayoutItem) return; // We're going to modify this object now, so clone it first.
471
-
472
- var l = (0, _utils.cloneLayoutItem)(originalLayoutItem); // Something like quad tree should be used
473
- // to find collisions faster
474
-
475
- var hasCollisions;
476
-
477
- if (preventCollision) {
478
- var collisions = (0, _utils.getAllCollisions)(layout, _objectSpread(_objectSpread({}, l), {}, {
479
- w: w,
480
- h: h
481
- })).filter(function (layoutItem) {
482
- return layoutItem.i !== l.i;
483
- });
484
- hasCollisions = collisions.length > 0; // If we're colliding, we need adjust the placeholder.
485
-
486
- if (hasCollisions) {
487
- // adjust w && h to maximum allowed space
488
- var leastX = Infinity,
489
- leastY = Infinity;
490
- collisions.forEach(function (layoutItem) {
491
- if (layoutItem.x > l.x) leastX = Math.min(leastX, layoutItem.x);
492
- if (layoutItem.y > l.y) leastY = Math.min(leastY, layoutItem.y);
475
+
476
+ var _withLayoutItem = (0, _utils.withLayoutItem)(layout, i, function (l) {
477
+ // Something like quad tree should be used
478
+ // to find collisions faster
479
+ var hasCollisions;
480
+
481
+ if (preventCollision) {
482
+ var collisions = (0, _utils.getAllCollisions)(layout, _objectSpread(_objectSpread({}, l), {}, {
483
+ w: w,
484
+ h: h
485
+ })).filter(function (layoutItem) {
486
+ return layoutItem.i !== l.i;
493
487
  });
494
- if (Number.isFinite(leastX)) l.w = leastX - l.x;
495
- if (Number.isFinite(leastY)) l.h = leastY - l.y;
488
+ hasCollisions = collisions.length > 0; // If we're colliding, we need adjust the placeholder.
489
+
490
+ // If we're colliding, we need adjust the placeholder.
491
+ if (hasCollisions) {
492
+ // adjust w && h to maximum allowed space
493
+ var leastX = Infinity,
494
+ leastY = Infinity;
495
+ collisions.forEach(function (layoutItem) {
496
+ if (layoutItem.x > l.x) leastX = Math.min(leastX, layoutItem.x);
497
+ if (layoutItem.y > l.y) leastY = Math.min(leastY, layoutItem.y);
498
+ });
499
+ if (Number.isFinite(leastX)) l.w = leastX - l.x;
500
+ if (Number.isFinite(leastY)) l.h = leastY - l.y;
501
+ }
502
+ }
503
+
504
+ if (!hasCollisions) {
505
+ // Set new width and height.
506
+ l.w = w;
507
+ l.h = h;
496
508
  }
497
- }
498
509
 
499
- if (!hasCollisions) {
500
- // Set new width and height.
501
- l.w = w;
502
- l.h = h;
503
- } // Create placeholder element (display only)
510
+ return l;
511
+ }),
512
+ _withLayoutItem2 = _slicedToArray(_withLayoutItem, 2),
513
+ newLayout = _withLayoutItem2[0],
514
+ l = _withLayoutItem2[1]; // Shouldn't ever happen, but typechecking makes it necessary
504
515
 
505
516
 
517
+ if (!l) return; // Create placeholder element (display only)
518
+
506
519
  var placeholder = {
507
520
  w: l.w,
508
521
  h: l.h,
@@ -511,10 +524,10 @@ var ReactGridLayout = /*#__PURE__*/function (_React$Component) {
511
524
  static: true,
512
525
  i: i
513
526
  };
514
- this.props.onResize(layout, oldResizeItem, l, placeholder, e, node); // Re-compact the layout and set the drag placeholder.
527
+ this.props.onResize(newLayout, oldResizeItem, l, placeholder, e, node); // Re-compact the newLayout and set the drag placeholder.
515
528
 
516
529
  this.setState({
517
- layout: (0, _utils.compact)(layout, (0, _utils.compactType)(this.props), cols),
530
+ layout: (0, _utils.compact)(newLayout, (0, _utils.compactType)(this.props), cols),
518
531
  activeDrag: placeholder
519
532
  });
520
533
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.resizeHandleType = exports.resizeHandlesType = void 0;
6
+ exports.default = exports.resizeHandleType = exports.resizeHandleAxesType = void 0;
7
7
 
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
 
@@ -21,12 +21,12 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
21
21
  // 'nw' - Northwest handle (top-left)
22
22
  // 'se' - Southeast handle (bottom-right)
23
23
  // 'ne' - Northeast handle (top-right)
24
- var resizeHandlesType
24
+ var resizeHandleAxesType
25
25
  /*: ReactPropsChainableTypeChecker*/
26
26
  = _propTypes.default.arrayOf(_propTypes.default.oneOf(["s", "w", "e", "n", "sw", "nw", "se", "ne"])); // Custom component for resize handles
27
27
 
28
28
 
29
- exports.resizeHandlesType = resizeHandlesType;
29
+ exports.resizeHandleAxesType = resizeHandleAxesType;
30
30
 
31
31
  var resizeHandleType
32
32
  /*: ReactPropsChainableTypeChecker*/
@@ -54,7 +54,7 @@ var resizeHandleType
54
54
  useCSSTransforms: boolean,
55
55
  transformScale: number,
56
56
  droppingItem: $Shape<LayoutItem>,
57
- resizeHandles: ResizeHandles,
57
+ resizeHandles: ResizeHandleAxis[],
58
58
  resizeHandle?: ResizeHandle,
59
59
 
60
60
  // Callbacks
@@ -156,7 +156,7 @@ var _default = {
156
156
  // If true, an external element can trigger onDrop callback with a specific grid position as a parameter
157
157
  isDroppable: _propTypes.default.bool,
158
158
  // Resize handle options
159
- resizeHandles: resizeHandlesType,
159
+ resizeHandles: resizeHandleAxesType,
160
160
  resizeHandle: resizeHandleType,
161
161
  //
162
162
  // Callbacks
@@ -21,9 +21,9 @@ var _ReactGridLayout = _interopRequireDefault(require("./ReactGridLayout"));
21
21
 
22
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
23
 
24
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
25
 
26
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
27
 
28
28
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
29
29
 
@@ -31,7 +31,7 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
31
31
 
32
32
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
33
33
 
34
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
34
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
35
35
 
36
36
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
37
37
 
@@ -5,19 +5,19 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = WidthProvider;
8
+ exports.default = WidthProvideRGL;
9
9
 
10
10
  var React = _interopRequireWildcard(require("react"));
11
11
 
12
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
13
 
14
- var _reactDom = _interopRequireDefault(require("react-dom"));
14
+ var _classnames = _interopRequireDefault(require("classnames"));
15
15
 
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
 
18
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
18
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
19
 
20
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
20
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
21
 
22
22
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
23
23
 
@@ -47,24 +47,20 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
47
47
 
48
48
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
49
49
 
50
+ var layoutClassName = "react-grid-layout";
50
51
  /*
51
52
  * A simple HOC that provides facility for listening to container resizes.
52
53
  *
53
54
  * The Flow type is pretty janky here. I can't just spread `WPProps` into this returned object - I wish I could - but it triggers
54
55
  * a flow bug of some sort that causes it to stop typechecking.
55
56
  */
56
- function WidthProvider
57
+
58
+ function WidthProvideRGL
57
59
  /*:: <Config>*/
58
60
  (ComposedComponent
59
61
  /*: React.AbstractComponent<Config>*/
60
62
  )
61
- /*: React.AbstractComponent<{|
62
- ...Config,
63
- measureBeforeMount?: boolean,
64
- className?: string,
65
- style?: Object,
66
- width?: number
67
- |}>*/
63
+ /*: React.AbstractComponent<ComposedProps<Config>>*/
68
64
  {
69
65
  var _class, _temp;
70
66
 
@@ -88,17 +84,21 @@ function WidthProvider
88
84
  width: 1280
89
85
  });
90
86
 
87
+ _defineProperty(_assertThisInitialized(_this), "elementRef", /*#__PURE__*/React.createRef());
88
+
91
89
  _defineProperty(_assertThisInitialized(_this), "mounted", false);
92
90
 
93
91
  _defineProperty(_assertThisInitialized(_this), "onWindowResize", function () {
94
- if (!_this.mounted) return; // eslint-disable-next-line react/no-find-dom-node
95
-
96
- var node = _reactDom.default.findDOMNode(_assertThisInitialized(_this)); // Flow casts this to Text | Element
97
-
98
-
99
- if (node instanceof HTMLElement) _this.setState({
100
- width: node.offsetWidth
101
- });
92
+ if (!_this.mounted) return;
93
+ var node = _this.elementRef.current; // Flow casts this to Text | Element
94
+ // fix: grid position error when node or parentNode display is none by window resize
95
+ // #924 #1084
96
+
97
+ if (node instanceof HTMLElement && node.offsetWidth) {
98
+ _this.setState({
99
+ width: node.offsetWidth
100
+ });
101
+ }
102
102
  });
103
103
 
104
104
  return _this;
@@ -129,12 +129,16 @@ function WidthProvider
129
129
 
130
130
  if (measureBeforeMount && !this.mounted) {
131
131
  return /*#__PURE__*/React.createElement("div", {
132
- className: this.props.className,
133
- style: this.props.style
132
+ className: (0, _classnames.default)(this.props.className, layoutClassName),
133
+ style: this.props.style // $FlowIgnore ref types
134
+ ,
135
+ ref: this.elementRef
134
136
  });
135
137
  }
136
138
 
137
- return /*#__PURE__*/React.createElement(ComposedComponent, _extends({}, rest, this.state));
139
+ return /*#__PURE__*/React.createElement(ComposedComponent, _extends({
140
+ innerRef: this.elementRef
141
+ }, rest, this.state));
138
142
  }
139
143
  }]);
140
144
 
package/build/utils.js CHANGED
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.bottom = bottom;
7
7
  exports.cloneLayout = cloneLayout;
8
+ exports.modifyLayout = modifyLayout;
9
+ exports.withLayoutItem = withLayoutItem;
8
10
  exports.cloneLayoutItem = cloneLayoutItem;
9
11
  exports.childrenEqual = childrenEqual;
10
12
  exports.fastPositionEqual = fastPositionEqual;
@@ -36,7 +38,7 @@ var _react = _interopRequireDefault(require("react"));
36
38
 
37
39
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
38
40
 
39
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
41
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
40
42
 
41
43
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
42
44
 
@@ -79,6 +81,48 @@ function cloneLayout(layout
79
81
  }
80
82
 
81
83
  return newLayout;
84
+ } // Modify a layoutItem inside a layout. Returns a new Layout,
85
+ // does not mutate. Carries over all other LayoutItems unmodified.
86
+
87
+
88
+ function modifyLayout(layout
89
+ /*: Layout*/
90
+ , layoutItem
91
+ /*: LayoutItem*/
92
+ )
93
+ /*: Layout*/
94
+ {
95
+ var newLayout = Array(layout.length);
96
+
97
+ for (var i = 0, len = layout.length; i < len; i++) {
98
+ if (layoutItem.i === layout[i].i) {
99
+ newLayout[i] = layoutItem;
100
+ } else {
101
+ newLayout[i] = layout[i];
102
+ }
103
+ }
104
+
105
+ return newLayout;
106
+ } // Function to be called to modify a layout item.
107
+ // Does defensive clones to ensure the layout is not modified.
108
+
109
+
110
+ function withLayoutItem(layout
111
+ /*: Layout*/
112
+ , itemKey
113
+ /*: string*/
114
+ , cb
115
+ /*: LayoutItem => LayoutItem*/
116
+ )
117
+ /*: [Layout, ?LayoutItem]*/
118
+ {
119
+ var item = getLayoutItem(layout, itemKey);
120
+ if (!item) return [layout, null];
121
+ item = cb(cloneLayoutItem(item)); // defensive clone then modify
122
+ // FIXME could do this faster if we already knew the index
123
+
124
+ layout = modifyLayout(layout, item);
125
+ return [layout, item];
82
126
  } // Fast path to cloning, since this is monomorphic
83
127
 
84
128
 
@@ -318,8 +362,11 @@ function compactItem(compareWith
318
362
  l.x = cols - l.w;
319
363
  l.y++;
320
364
  }
321
- }
365
+ } // Ensure that there are no negative positions
366
+
322
367
 
368
+ l.y = Math.max(l.y, 0);
369
+ l.x = Math.max(l.x, 0);
323
370
  return l;
324
371
  }
325
372
  /**
@@ -727,13 +774,15 @@ function synchronizeLayoutWithChildren(initialLayout
727
774
  if (g) {
728
775
  if (!isProduction) {
729
776
  validateLayout([g], "ReactGridLayout.children");
730
- }
777
+ } // FIXME clone not really necessary here
778
+
731
779
 
732
780
  layout[i] = cloneLayoutItem(_objectSpread(_objectSpread({}, g), {}, {
733
781
  i: child.key
734
782
  }));
735
783
  } else {
736
784
  // Nothing provided: ensure this is added to the bottom
785
+ // FIXME clone not really necessary here
737
786
  layout[i] = cloneLayoutItem({
738
787
  w: 1,
739
788
  h: 1,