@zendeskgarden/react-grid 8.51.0 → 8.52.0

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/dist/index.cjs.js CHANGED
@@ -14,6 +14,7 @@ var PropTypes = require('prop-types');
14
14
  var styled = require('styled-components');
15
15
  var polished = require('polished');
16
16
  var reactTheming = require('@zendeskgarden/react-theming');
17
+ var containerUtilities = require('@zendeskgarden/container-utilities');
17
18
  var mergeRefs = require('react-merge-refs');
18
19
  var containerSplitter = require('@zendeskgarden/container-splitter');
19
20
 
@@ -239,7 +240,7 @@ var sizeStyles$3 = function sizeStyles(props) {
239
240
  };
240
241
  var StyledCol = styled__default["default"].div.attrs({
241
242
  'data-garden-id': COMPONENT_ID$5,
242
- 'data-garden-version': '8.51.0'
243
+ 'data-garden-version': '8.52.0'
243
244
  }).withConfig({
244
245
  displayName: "StyledCol",
245
246
  componentId: "sc-inuw62-0"
@@ -279,7 +280,7 @@ var sizeStyles$2 = function sizeStyles(props) {
279
280
  };
280
281
  var StyledGrid = styled__default["default"].div.attrs({
281
282
  'data-garden-id': COMPONENT_ID$4,
282
- 'data-garden-version': '8.51.0'
283
+ 'data-garden-version': '8.52.0'
283
284
  }).withConfig({
284
285
  displayName: "StyledGrid",
285
286
  componentId: "sc-oxgg5i-0"
@@ -329,7 +330,7 @@ var sizeStyles$1 = function sizeStyles(props) {
329
330
  };
330
331
  var StyledRow = styled__default["default"].div.attrs({
331
332
  'data-garden-id': COMPONENT_ID$3,
332
- 'data-garden-version': '8.51.0'
333
+ 'data-garden-version': '8.52.0'
333
334
  }).withConfig({
334
335
  displayName: "StyledRow",
335
336
  componentId: "sc-xjsdg1-0"
@@ -360,7 +361,7 @@ StyledRow.defaultProps = {
360
361
  var COMPONENT_ID$2 = 'pane';
361
362
  var StyledPane = styled__default["default"].div.attrs({
362
363
  'data-garden-id': COMPONENT_ID$2,
363
- 'data-garden-version': '8.51.0'
364
+ 'data-garden-version': '8.52.0'
364
365
  }).withConfig({
365
366
  displayName: "StyledPane",
366
367
  componentId: "sc-1ltjst7-0"
@@ -374,7 +375,7 @@ StyledPane.defaultProps = {
374
375
  var COMPONENT_ID$1 = 'pane.content';
375
376
  var StyledPaneContent = styled__default["default"].div.attrs({
376
377
  'data-garden-id': COMPONENT_ID$1,
377
- 'data-garden-version': '8.51.0'
378
+ 'data-garden-version': '8.52.0'
378
379
  }).withConfig({
379
380
  displayName: "StyledPaneContent",
380
381
  componentId: "sc-1b38mbh-0"
@@ -453,11 +454,11 @@ var sizeStyles = function sizeStyles(props) {
453
454
  };
454
455
  var StyledPaneSplitter = styled__default["default"].div.attrs({
455
456
  'data-garden-id': COMPONENT_ID,
456
- 'data-garden-version': '8.51.0'
457
+ 'data-garden-version': '8.52.0'
457
458
  }).withConfig({
458
459
  displayName: "StyledPaneSplitter",
459
460
  componentId: "sc-jylemn-0"
460
- })(["position:absolute;z-index:1;", ";&:hover,&[data-garden-focus-visible]{z-index:2;}&:focus{outline:none;}&::before{display:block;content:'';}", ";", ";"], sizeStyles, colorStyles, function (props) {
461
+ })(["position:absolute;z-index:1;user-select:none;", ";&:hover,&[data-garden-focus-visible]{z-index:2;}&:focus{outline:none;}&::before{display:block;content:'';}", ";", ";"], sizeStyles, colorStyles, function (props) {
461
462
  return reactTheming.retrieveComponentStyles(COMPONENT_ID, props);
462
463
  });
463
464
  StyledPaneSplitter.defaultProps = {
@@ -587,30 +588,14 @@ Row.propTypes = {
587
588
  wrapXl: PropTypes__default["default"].oneOf(WRAP)
588
589
  };
589
590
 
590
- var SplitterContext = React.createContext({
591
- setRowValue: function setRowValue() {
592
- return undefined;
593
- },
594
- setColumnValue: function setColumnValue() {
595
- return undefined;
596
- },
597
- getColumnValue: function getColumnValue() {
598
- return 0;
599
- },
600
- getRowValue: function getRowValue() {
601
- return 0;
602
- },
603
- rowState: {},
604
- columnState: {},
605
- totalPanesHeight: 1,
606
- totalPanesWidth: 1,
607
- pixelsPerFr: {
608
- rows: 0,
609
- columns: 0
610
- }
611
- });
612
- var useSplitterContext = function useSplitterContext() {
613
- return React.useContext(SplitterContext);
591
+ var PaneProviderContext = React.createContext({});
592
+ var usePaneProviderContextData = function usePaneProviderContextData(providerId) {
593
+ var context = React.useContext(PaneProviderContext);
594
+ var id = providerId || context.providerId;
595
+ return id && context.contextData ? context.contextData[id] : undefined;
596
+ };
597
+ var usePaneProviderContext = function usePaneProviderContext() {
598
+ return React.useContext(PaneProviderContext);
614
599
  };
615
600
 
616
601
  var getPixelsPerFr = function getPixelsPerFr(totalFrs, totalDimension) {
@@ -626,7 +611,8 @@ var convertToPixels = function convertToPixels(values, pixelsPerFr) {
626
611
  }, {});
627
612
  };
628
613
  var PaneProvider = function PaneProvider(_ref3) {
629
- var totalPanesWidth = _ref3.totalPanesWidth,
614
+ var id = _ref3.id,
615
+ totalPanesWidth = _ref3.totalPanesWidth,
630
616
  totalPanesHeight = _ref3.totalPanesHeight,
631
617
  defaultRowValues = _ref3.defaultRowValues,
632
618
  defaultColumnValues = _ref3.defaultColumnValues,
@@ -646,17 +632,17 @@ var PaneProvider = function PaneProvider(_ref3) {
646
632
  var rowsTrack = isControlled ? rowValues : rowState;
647
633
  var columnsTrack = isControlled ? columnValues : columnState;
648
634
  var setRowsTrack = React.useCallback(function (values) {
649
- if (onChange) {
635
+ if (isControlled && onChange) {
650
636
  return onChange(values(rowsTrack), columnsTrack);
651
637
  }
652
638
  return setRowState(values);
653
- }, [onChange, setRowState, columnsTrack, rowsTrack]);
639
+ }, [isControlled, onChange, setRowState, columnsTrack, rowsTrack]);
654
640
  var setColumnsTrack = React.useCallback(function (values) {
655
- if (onChange) {
641
+ if (isControlled && onChange) {
656
642
  return onChange(rowsTrack, values(columnsTrack));
657
643
  }
658
644
  return setColumnState(values);
659
- }, [onChange, setColumnState, rowsTrack, columnsTrack]);
645
+ }, [isControlled, onChange, setColumnState, rowsTrack, columnsTrack]);
660
646
  var totalFractions = React.useMemo(function () {
661
647
  return {
662
648
  rows: Object.values(rowsTrack).reduce(function (prev, value) {
@@ -697,15 +683,15 @@ var PaneProvider = function PaneProvider(_ref3) {
697
683
  columnArray: columnArray
698
684
  };
699
685
  }, [rowsTrack, columnsTrack]);
700
- var setRowValue = React.useCallback(function (isTop, id, value) {
686
+ var setRowValue = React.useCallback(function (isTop, splitterId, value) {
701
687
  var rows = layoutIndices.rows,
702
688
  rowArray = layoutIndices.rowArray;
703
689
  var stealFromTraversal = isTop ? -1 : 1;
704
690
  var addToTraversal = 0;
705
691
  setRowsTrack(function (state) {
706
- var oldValue = rowsTrack[id];
707
- var stealFromIndex = rows[id] + stealFromTraversal;
708
- var addToIndex = rows[id] + addToTraversal;
692
+ var oldValue = rowsTrack[splitterId];
693
+ var stealFromIndex = rows[splitterId] + stealFromTraversal;
694
+ var addToIndex = rows[splitterId] + addToTraversal;
709
695
  var stealFromKey = rowArray[stealFromIndex];
710
696
  var addToKey = rowArray[addToIndex];
711
697
  var difference = oldValue - value;
@@ -715,15 +701,15 @@ var PaneProvider = function PaneProvider(_ref3) {
715
701
  return nextState;
716
702
  });
717
703
  }, [layoutIndices, rowsTrack, setRowsTrack]);
718
- var setColumnValue = React.useCallback(function (isStart, id, value) {
704
+ var setColumnValue = React.useCallback(function (isStart, splitterId, value) {
719
705
  var columns = layoutIndices.columns,
720
706
  columnArray = layoutIndices.columnArray;
721
707
  var stealFromTraversal = isStart ? 0 : 1;
722
708
  var addToTraversal = isStart ? -1 : 0;
723
709
  setColumnsTrack(function (state) {
724
- var stealFromIndex = columns[id] + stealFromTraversal;
725
- var addToIndex = columns[id] + addToTraversal;
726
- var oldValue = columnsTrack[id];
710
+ var stealFromIndex = columns[splitterId] + stealFromTraversal;
711
+ var addToIndex = columns[splitterId] + addToTraversal;
712
+ var oldValue = columnsTrack[splitterId];
727
713
  var stealFromKey = columnArray[stealFromIndex];
728
714
  var addToKey = columnArray[addToIndex];
729
715
  var difference = oldValue - value;
@@ -767,22 +753,28 @@ var PaneProvider = function PaneProvider(_ref3) {
767
753
  return "".concat(rowsTrack[row], "fr");
768
754
  }).join(' ');
769
755
  }, [layoutIndices, rowsTrack, layoutStateInPixels]);
770
- var splitterContext = React.useMemo(function () {
771
- return {
772
- columnState: columnState,
773
- rowState: rowState,
774
- setRowValue: setRowValue,
775
- setColumnValue: setColumnValue,
776
- getRowValue: getRowValue,
777
- getColumnValue: getColumnValue,
778
- totalPanesHeight: totalPanesHeight,
779
- totalPanesWidth: totalPanesWidth,
780
- pixelsPerFr: pixelsPerFr
781
- };
782
- }, [rowState, columnState, setRowValue, setColumnValue, getRowValue, getColumnValue, totalPanesHeight, totalPanesWidth, pixelsPerFr]);
783
- return React__default["default"].createElement(SplitterContext.Provider, {
784
- value: splitterContext
756
+ var providerId = containerUtilities.useId(id);
757
+ var parentPaneProviderContext = usePaneProviderContext();
758
+ var paneProviderContext = React.useMemo(function () {
759
+ return providerId ? {
760
+ providerId: providerId,
761
+ contextData: _objectSpread2(_objectSpread2({}, parentPaneProviderContext.contextData), {}, _defineProperty({}, providerId, {
762
+ columnState: columnState,
763
+ rowState: rowState,
764
+ setRowValue: setRowValue,
765
+ setColumnValue: setColumnValue,
766
+ getRowValue: getRowValue,
767
+ getColumnValue: getColumnValue,
768
+ totalPanesHeight: totalPanesHeight,
769
+ totalPanesWidth: totalPanesWidth,
770
+ pixelsPerFr: pixelsPerFr
771
+ }))
772
+ } : {};
773
+ }, [providerId, parentPaneProviderContext, rowState, columnState, setRowValue, setColumnValue, getRowValue, getColumnValue, totalPanesHeight, totalPanesWidth, pixelsPerFr]);
774
+ return React__default["default"].createElement(PaneProviderContext.Provider, {
775
+ value: paneProviderContext
785
776
  }, children === null || children === void 0 ? void 0 : children({
777
+ id: providerId,
786
778
  getRowValue: getRowValue,
787
779
  getColumnValue: getColumnValue,
788
780
  getGridTemplateColumns: getGridTemplateColumns,
@@ -791,6 +783,7 @@ var PaneProvider = function PaneProvider(_ref3) {
791
783
  };
792
784
  PaneProvider.displayName = 'PaneProvider';
793
785
  PaneProvider.propTypes = {
786
+ id: PropTypes__default["default"].string,
794
787
  totalPanesWidth: PropTypes__default["default"].number.isRequired,
795
788
  totalPanesHeight: PropTypes__default["default"].number.isRequired,
796
789
  defaultRowValues: PropTypes__default["default"].object,
@@ -810,7 +803,7 @@ var usePaneContext = function usePaneContext() {
810
803
  return React.useContext(PaneContext);
811
804
  };
812
805
 
813
- var _excluded$1 = ["layoutKey", "min", "max", "orientation"];
806
+ var _excluded$1 = ["providerId", "layoutKey", "min", "max", "orientation"];
814
807
  var orientationToPosition = {
815
808
  start: containerSplitter.SplitterPosition.TRAILS,
816
809
  end: containerSplitter.SplitterPosition.TRAILS,
@@ -830,18 +823,19 @@ var orientationToDimension = {
830
823
  bottom: 'rows'
831
824
  };
832
825
  var SplitterComponent = React.forwardRef(function (_ref, ref) {
833
- var layoutKey = _ref.layoutKey,
826
+ var providerId = _ref.providerId,
827
+ layoutKey = _ref.layoutKey,
834
828
  min = _ref.min,
835
829
  max = _ref.max,
836
830
  orientation = _ref.orientation,
837
831
  props = _objectWithoutProperties(_ref, _excluded$1);
838
- var splitterContext = useSplitterContext();
832
+ var paneProviderContext = usePaneProviderContextData(providerId);
839
833
  var paneContext = usePaneContext();
840
834
  var themeContext = React.useContext(styled.ThemeContext);
841
835
  var position = orientationToPosition[orientation];
842
836
  var isRow = orientationToDimension[orientation] === 'rows';
843
837
  var splitterOrientation = paneToSplitterOrientation[orientation];
844
- var pixelsPerFr = splitterContext.pixelsPerFr[orientationToDimension[orientation]];
838
+ var pixelsPerFr = paneProviderContext ? paneProviderContext.pixelsPerFr[orientationToDimension[orientation]] : 0;
845
839
  var _useSplitter = containerSplitter.useSplitter({
846
840
  type: containerSplitter.SplitterType.VARIABLE,
847
841
  orientation: splitterOrientation,
@@ -852,11 +846,11 @@ var SplitterComponent = React.forwardRef(function (_ref, ref) {
852
846
  environment: window,
853
847
  onChange: function onChange(valueNow) {
854
848
  if (isRow) {
855
- return splitterContext.setRowValue(orientation === 'top', layoutKey, valueNow / pixelsPerFr);
849
+ return paneProviderContext && paneProviderContext.setRowValue(orientation === 'top', layoutKey, valueNow / pixelsPerFr);
856
850
  }
857
- return splitterContext.setColumnValue(orientation === 'start', layoutKey, valueNow / pixelsPerFr);
851
+ return paneProviderContext && paneProviderContext.setColumnValue(orientation === 'start', layoutKey, valueNow / pixelsPerFr);
858
852
  },
859
- valueNow: isRow ? splitterContext.getRowValue(layoutKey, true) : splitterContext.getColumnValue(layoutKey, true)
853
+ valueNow: isRow ? paneProviderContext && paneProviderContext.getRowValue(layoutKey, true) : paneProviderContext && paneProviderContext.getColumnValue(layoutKey, true)
860
854
  }),
861
855
  getSeparatorProps = _useSplitter.getSeparatorProps,
862
856
  getPrimaryPaneProps = _useSplitter.getPrimaryPaneProps;
package/dist/index.esm.js CHANGED
@@ -10,6 +10,7 @@ import PropTypes from 'prop-types';
10
10
  import styled, { css, ThemeContext } from 'styled-components';
11
11
  import { math, rgba } from 'polished';
12
12
  import { retrieveComponentStyles, DEFAULT_THEME, getColor } from '@zendeskgarden/react-theming';
13
+ import { useId } from '@zendeskgarden/container-utilities';
13
14
  import mergeRefs from 'react-merge-refs';
14
15
  import { SplitterPosition, SplitterOrientation, useSplitter, SplitterType } from '@zendeskgarden/container-splitter';
15
16
 
@@ -228,7 +229,7 @@ var sizeStyles$3 = function sizeStyles(props) {
228
229
  };
229
230
  var StyledCol = styled.div.attrs({
230
231
  'data-garden-id': COMPONENT_ID$5,
231
- 'data-garden-version': '8.51.0'
232
+ 'data-garden-version': '8.52.0'
232
233
  }).withConfig({
233
234
  displayName: "StyledCol",
234
235
  componentId: "sc-inuw62-0"
@@ -268,7 +269,7 @@ var sizeStyles$2 = function sizeStyles(props) {
268
269
  };
269
270
  var StyledGrid = styled.div.attrs({
270
271
  'data-garden-id': COMPONENT_ID$4,
271
- 'data-garden-version': '8.51.0'
272
+ 'data-garden-version': '8.52.0'
272
273
  }).withConfig({
273
274
  displayName: "StyledGrid",
274
275
  componentId: "sc-oxgg5i-0"
@@ -318,7 +319,7 @@ var sizeStyles$1 = function sizeStyles(props) {
318
319
  };
319
320
  var StyledRow = styled.div.attrs({
320
321
  'data-garden-id': COMPONENT_ID$3,
321
- 'data-garden-version': '8.51.0'
322
+ 'data-garden-version': '8.52.0'
322
323
  }).withConfig({
323
324
  displayName: "StyledRow",
324
325
  componentId: "sc-xjsdg1-0"
@@ -349,7 +350,7 @@ StyledRow.defaultProps = {
349
350
  var COMPONENT_ID$2 = 'pane';
350
351
  var StyledPane = styled.div.attrs({
351
352
  'data-garden-id': COMPONENT_ID$2,
352
- 'data-garden-version': '8.51.0'
353
+ 'data-garden-version': '8.52.0'
353
354
  }).withConfig({
354
355
  displayName: "StyledPane",
355
356
  componentId: "sc-1ltjst7-0"
@@ -363,7 +364,7 @@ StyledPane.defaultProps = {
363
364
  var COMPONENT_ID$1 = 'pane.content';
364
365
  var StyledPaneContent = styled.div.attrs({
365
366
  'data-garden-id': COMPONENT_ID$1,
366
- 'data-garden-version': '8.51.0'
367
+ 'data-garden-version': '8.52.0'
367
368
  }).withConfig({
368
369
  displayName: "StyledPaneContent",
369
370
  componentId: "sc-1b38mbh-0"
@@ -442,11 +443,11 @@ var sizeStyles = function sizeStyles(props) {
442
443
  };
443
444
  var StyledPaneSplitter = styled.div.attrs({
444
445
  'data-garden-id': COMPONENT_ID,
445
- 'data-garden-version': '8.51.0'
446
+ 'data-garden-version': '8.52.0'
446
447
  }).withConfig({
447
448
  displayName: "StyledPaneSplitter",
448
449
  componentId: "sc-jylemn-0"
449
- })(["position:absolute;z-index:1;", ";&:hover,&[data-garden-focus-visible]{z-index:2;}&:focus{outline:none;}&::before{display:block;content:'';}", ";", ";"], sizeStyles, colorStyles, function (props) {
450
+ })(["position:absolute;z-index:1;user-select:none;", ";&:hover,&[data-garden-focus-visible]{z-index:2;}&:focus{outline:none;}&::before{display:block;content:'';}", ";", ";"], sizeStyles, colorStyles, function (props) {
450
451
  return retrieveComponentStyles(COMPONENT_ID, props);
451
452
  });
452
453
  StyledPaneSplitter.defaultProps = {
@@ -576,30 +577,14 @@ Row.propTypes = {
576
577
  wrapXl: PropTypes.oneOf(WRAP)
577
578
  };
578
579
 
579
- var SplitterContext = createContext({
580
- setRowValue: function setRowValue() {
581
- return undefined;
582
- },
583
- setColumnValue: function setColumnValue() {
584
- return undefined;
585
- },
586
- getColumnValue: function getColumnValue() {
587
- return 0;
588
- },
589
- getRowValue: function getRowValue() {
590
- return 0;
591
- },
592
- rowState: {},
593
- columnState: {},
594
- totalPanesHeight: 1,
595
- totalPanesWidth: 1,
596
- pixelsPerFr: {
597
- rows: 0,
598
- columns: 0
599
- }
600
- });
601
- var useSplitterContext = function useSplitterContext() {
602
- return useContext(SplitterContext);
580
+ var PaneProviderContext = createContext({});
581
+ var usePaneProviderContextData = function usePaneProviderContextData(providerId) {
582
+ var context = useContext(PaneProviderContext);
583
+ var id = providerId || context.providerId;
584
+ return id && context.contextData ? context.contextData[id] : undefined;
585
+ };
586
+ var usePaneProviderContext = function usePaneProviderContext() {
587
+ return useContext(PaneProviderContext);
603
588
  };
604
589
 
605
590
  var getPixelsPerFr = function getPixelsPerFr(totalFrs, totalDimension) {
@@ -615,7 +600,8 @@ var convertToPixels = function convertToPixels(values, pixelsPerFr) {
615
600
  }, {});
616
601
  };
617
602
  var PaneProvider = function PaneProvider(_ref3) {
618
- var totalPanesWidth = _ref3.totalPanesWidth,
603
+ var id = _ref3.id,
604
+ totalPanesWidth = _ref3.totalPanesWidth,
619
605
  totalPanesHeight = _ref3.totalPanesHeight,
620
606
  defaultRowValues = _ref3.defaultRowValues,
621
607
  defaultColumnValues = _ref3.defaultColumnValues,
@@ -635,17 +621,17 @@ var PaneProvider = function PaneProvider(_ref3) {
635
621
  var rowsTrack = isControlled ? rowValues : rowState;
636
622
  var columnsTrack = isControlled ? columnValues : columnState;
637
623
  var setRowsTrack = useCallback(function (values) {
638
- if (onChange) {
624
+ if (isControlled && onChange) {
639
625
  return onChange(values(rowsTrack), columnsTrack);
640
626
  }
641
627
  return setRowState(values);
642
- }, [onChange, setRowState, columnsTrack, rowsTrack]);
628
+ }, [isControlled, onChange, setRowState, columnsTrack, rowsTrack]);
643
629
  var setColumnsTrack = useCallback(function (values) {
644
- if (onChange) {
630
+ if (isControlled && onChange) {
645
631
  return onChange(rowsTrack, values(columnsTrack));
646
632
  }
647
633
  return setColumnState(values);
648
- }, [onChange, setColumnState, rowsTrack, columnsTrack]);
634
+ }, [isControlled, onChange, setColumnState, rowsTrack, columnsTrack]);
649
635
  var totalFractions = useMemo(function () {
650
636
  return {
651
637
  rows: Object.values(rowsTrack).reduce(function (prev, value) {
@@ -686,15 +672,15 @@ var PaneProvider = function PaneProvider(_ref3) {
686
672
  columnArray: columnArray
687
673
  };
688
674
  }, [rowsTrack, columnsTrack]);
689
- var setRowValue = useCallback(function (isTop, id, value) {
675
+ var setRowValue = useCallback(function (isTop, splitterId, value) {
690
676
  var rows = layoutIndices.rows,
691
677
  rowArray = layoutIndices.rowArray;
692
678
  var stealFromTraversal = isTop ? -1 : 1;
693
679
  var addToTraversal = 0;
694
680
  setRowsTrack(function (state) {
695
- var oldValue = rowsTrack[id];
696
- var stealFromIndex = rows[id] + stealFromTraversal;
697
- var addToIndex = rows[id] + addToTraversal;
681
+ var oldValue = rowsTrack[splitterId];
682
+ var stealFromIndex = rows[splitterId] + stealFromTraversal;
683
+ var addToIndex = rows[splitterId] + addToTraversal;
698
684
  var stealFromKey = rowArray[stealFromIndex];
699
685
  var addToKey = rowArray[addToIndex];
700
686
  var difference = oldValue - value;
@@ -704,15 +690,15 @@ var PaneProvider = function PaneProvider(_ref3) {
704
690
  return nextState;
705
691
  });
706
692
  }, [layoutIndices, rowsTrack, setRowsTrack]);
707
- var setColumnValue = useCallback(function (isStart, id, value) {
693
+ var setColumnValue = useCallback(function (isStart, splitterId, value) {
708
694
  var columns = layoutIndices.columns,
709
695
  columnArray = layoutIndices.columnArray;
710
696
  var stealFromTraversal = isStart ? 0 : 1;
711
697
  var addToTraversal = isStart ? -1 : 0;
712
698
  setColumnsTrack(function (state) {
713
- var stealFromIndex = columns[id] + stealFromTraversal;
714
- var addToIndex = columns[id] + addToTraversal;
715
- var oldValue = columnsTrack[id];
699
+ var stealFromIndex = columns[splitterId] + stealFromTraversal;
700
+ var addToIndex = columns[splitterId] + addToTraversal;
701
+ var oldValue = columnsTrack[splitterId];
716
702
  var stealFromKey = columnArray[stealFromIndex];
717
703
  var addToKey = columnArray[addToIndex];
718
704
  var difference = oldValue - value;
@@ -756,22 +742,28 @@ var PaneProvider = function PaneProvider(_ref3) {
756
742
  return "".concat(rowsTrack[row], "fr");
757
743
  }).join(' ');
758
744
  }, [layoutIndices, rowsTrack, layoutStateInPixels]);
759
- var splitterContext = useMemo(function () {
760
- return {
761
- columnState: columnState,
762
- rowState: rowState,
763
- setRowValue: setRowValue,
764
- setColumnValue: setColumnValue,
765
- getRowValue: getRowValue,
766
- getColumnValue: getColumnValue,
767
- totalPanesHeight: totalPanesHeight,
768
- totalPanesWidth: totalPanesWidth,
769
- pixelsPerFr: pixelsPerFr
770
- };
771
- }, [rowState, columnState, setRowValue, setColumnValue, getRowValue, getColumnValue, totalPanesHeight, totalPanesWidth, pixelsPerFr]);
772
- return React.createElement(SplitterContext.Provider, {
773
- value: splitterContext
745
+ var providerId = useId(id);
746
+ var parentPaneProviderContext = usePaneProviderContext();
747
+ var paneProviderContext = useMemo(function () {
748
+ return providerId ? {
749
+ providerId: providerId,
750
+ contextData: _objectSpread2(_objectSpread2({}, parentPaneProviderContext.contextData), {}, _defineProperty({}, providerId, {
751
+ columnState: columnState,
752
+ rowState: rowState,
753
+ setRowValue: setRowValue,
754
+ setColumnValue: setColumnValue,
755
+ getRowValue: getRowValue,
756
+ getColumnValue: getColumnValue,
757
+ totalPanesHeight: totalPanesHeight,
758
+ totalPanesWidth: totalPanesWidth,
759
+ pixelsPerFr: pixelsPerFr
760
+ }))
761
+ } : {};
762
+ }, [providerId, parentPaneProviderContext, rowState, columnState, setRowValue, setColumnValue, getRowValue, getColumnValue, totalPanesHeight, totalPanesWidth, pixelsPerFr]);
763
+ return React.createElement(PaneProviderContext.Provider, {
764
+ value: paneProviderContext
774
765
  }, children === null || children === void 0 ? void 0 : children({
766
+ id: providerId,
775
767
  getRowValue: getRowValue,
776
768
  getColumnValue: getColumnValue,
777
769
  getGridTemplateColumns: getGridTemplateColumns,
@@ -780,6 +772,7 @@ var PaneProvider = function PaneProvider(_ref3) {
780
772
  };
781
773
  PaneProvider.displayName = 'PaneProvider';
782
774
  PaneProvider.propTypes = {
775
+ id: PropTypes.string,
783
776
  totalPanesWidth: PropTypes.number.isRequired,
784
777
  totalPanesHeight: PropTypes.number.isRequired,
785
778
  defaultRowValues: PropTypes.object,
@@ -799,7 +792,7 @@ var usePaneContext = function usePaneContext() {
799
792
  return useContext(PaneContext);
800
793
  };
801
794
 
802
- var _excluded$1 = ["layoutKey", "min", "max", "orientation"];
795
+ var _excluded$1 = ["providerId", "layoutKey", "min", "max", "orientation"];
803
796
  var orientationToPosition = {
804
797
  start: SplitterPosition.TRAILS,
805
798
  end: SplitterPosition.TRAILS,
@@ -819,18 +812,19 @@ var orientationToDimension = {
819
812
  bottom: 'rows'
820
813
  };
821
814
  var SplitterComponent = forwardRef(function (_ref, ref) {
822
- var layoutKey = _ref.layoutKey,
815
+ var providerId = _ref.providerId,
816
+ layoutKey = _ref.layoutKey,
823
817
  min = _ref.min,
824
818
  max = _ref.max,
825
819
  orientation = _ref.orientation,
826
820
  props = _objectWithoutProperties(_ref, _excluded$1);
827
- var splitterContext = useSplitterContext();
821
+ var paneProviderContext = usePaneProviderContextData(providerId);
828
822
  var paneContext = usePaneContext();
829
823
  var themeContext = useContext(ThemeContext);
830
824
  var position = orientationToPosition[orientation];
831
825
  var isRow = orientationToDimension[orientation] === 'rows';
832
826
  var splitterOrientation = paneToSplitterOrientation[orientation];
833
- var pixelsPerFr = splitterContext.pixelsPerFr[orientationToDimension[orientation]];
827
+ var pixelsPerFr = paneProviderContext ? paneProviderContext.pixelsPerFr[orientationToDimension[orientation]] : 0;
834
828
  var _useSplitter = useSplitter({
835
829
  type: SplitterType.VARIABLE,
836
830
  orientation: splitterOrientation,
@@ -841,11 +835,11 @@ var SplitterComponent = forwardRef(function (_ref, ref) {
841
835
  environment: window,
842
836
  onChange: function onChange(valueNow) {
843
837
  if (isRow) {
844
- return splitterContext.setRowValue(orientation === 'top', layoutKey, valueNow / pixelsPerFr);
838
+ return paneProviderContext && paneProviderContext.setRowValue(orientation === 'top', layoutKey, valueNow / pixelsPerFr);
845
839
  }
846
- return splitterContext.setColumnValue(orientation === 'start', layoutKey, valueNow / pixelsPerFr);
840
+ return paneProviderContext && paneProviderContext.setColumnValue(orientation === 'start', layoutKey, valueNow / pixelsPerFr);
847
841
  },
848
- valueNow: isRow ? splitterContext.getRowValue(layoutKey, true) : splitterContext.getColumnValue(layoutKey, true)
842
+ valueNow: isRow ? paneProviderContext && paneProviderContext.getRowValue(layoutKey, true) : paneProviderContext && paneProviderContext.getColumnValue(layoutKey, true)
849
843
  }),
850
844
  getSeparatorProps = _useSplitter.getSeparatorProps,
851
845
  getPrimaryPaneProps = _useSplitter.getPrimaryPaneProps;
@@ -7,9 +7,10 @@
7
7
  import PropTypes from 'prop-types';
8
8
  import { IPaneProviderProps } from '../../types';
9
9
  export declare const PaneProvider: {
10
- ({ totalPanesWidth, totalPanesHeight, defaultRowValues, defaultColumnValues, rowValues, columnValues, onChange, children }: IPaneProviderProps): JSX.Element;
10
+ ({ id, totalPanesWidth, totalPanesHeight, defaultRowValues, defaultColumnValues, rowValues, columnValues, onChange, children }: IPaneProviderProps): JSX.Element;
11
11
  displayName: string;
12
12
  propTypes: {
13
+ id: PropTypes.Requireable<string>;
13
14
  totalPanesWidth: PropTypes.Validator<number>;
14
15
  totalPanesHeight: PropTypes.Validator<number>;
15
16
  defaultRowValues: PropTypes.Requireable<object>;
@@ -155,6 +155,8 @@ export interface IRowProps extends HTMLAttributes<HTMLDivElement> {
155
155
  export declare const ORIENTATION: readonly ["top", "bottom", "start", "end"];
156
156
  export declare type Orientation = typeof ORIENTATION[number];
157
157
  export interface IPaneProviderProps {
158
+ /** Identifies the pane provider */
159
+ id?: string;
158
160
  /** Provides the total width, in `px` units, of all panes in the layout */
159
161
  totalPanesWidth: number;
160
162
  /** Provides the total height, in `px` units, of all panes in the layout */
@@ -175,14 +177,16 @@ export interface IPaneProviderProps {
175
177
  */
176
178
  onChange?: (rowValues: Record<string, number>, columnValues: Record<string, number>) => void;
177
179
  /**
178
- * Surfaces render prop functions for applying splitter state to the supporting layout
180
+ * Surfaces render props for applying splitter state to the supporting layout
179
181
  *
182
+ * @param id Provides the `id` prop, if specified; otherwise, a generated ID.
180
183
  * @param getColumnValue Gets column value by key
181
184
  * @param getRowValue Gets row value by key
182
185
  * @param getGridTemplateRows Gets grid template rows track
183
186
  * @param getGridTemplateColumns Gets grid template columns track
184
187
  */
185
- children?: ({ getColumnValue, getRowValue, getGridTemplateRows, getGridTemplateColumns }: {
188
+ children?: ({ id, getColumnValue, getRowValue, getGridTemplateRows, getGridTemplateColumns }: {
189
+ id: string;
186
190
  getColumnValue: (splitterKey: string, isPixels?: boolean) => number;
187
191
  getRowValue: (splitterKey: string, isPixels?: boolean) => number;
188
192
  getGridTemplateRows: (isPixels?: boolean) => string;
@@ -190,6 +194,8 @@ export interface IPaneProviderProps {
190
194
  }) => ReactNode;
191
195
  }
192
196
  export interface ISplitterProps extends HTMLAttributes<HTMLDivElement> {
197
+ /** Identifies the associated `PaneProvider`. Assumes the closest parent provider, by default. */
198
+ providerId?: string;
193
199
  /** Specifies the splitter key */
194
200
  layoutKey: string;
195
201
  /** Sets a minimum, in `fr` units, for splitter position */
@@ -5,7 +5,7 @@
5
5
  * found at http://www.apache.org/licenses/LICENSE-2.0.
6
6
  */
7
7
  /// <reference types="react" />
8
- interface ISplitterContext {
8
+ interface IPaneProviderContextData {
9
9
  rowState: Record<string, number>;
10
10
  columnState: Record<string, number>;
11
11
  setRowValue: (isTop: boolean, id: string, value: number) => void;
@@ -19,9 +19,11 @@ interface ISplitterContext {
19
19
  columns: number;
20
20
  };
21
21
  }
22
- export declare const SplitterContext: import("react").Context<ISplitterContext>;
23
- /**
24
- * Retrieve Splitter component context
25
- */
26
- declare const useSplitterContext: () => ISplitterContext;
27
- export default useSplitterContext;
22
+ interface IPaneProviderContext {
23
+ providerId?: string;
24
+ contextData?: Record<string, IPaneProviderContextData>;
25
+ }
26
+ export declare const PaneProviderContext: import("react").Context<IPaneProviderContext>;
27
+ export declare const usePaneProviderContextData: (providerId?: string | undefined) => IPaneProviderContextData | undefined;
28
+ declare const usePaneProviderContext: () => IPaneProviderContext;
29
+ export default usePaneProviderContext;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zendeskgarden/react-grid",
3
- "version": "8.51.0",
3
+ "version": "8.52.0",
4
4
  "description": "Components relating to layout grids in the Garden Design System",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Zendesk Garden <garden@zendesk.com>",
@@ -22,6 +22,7 @@
22
22
  "types": "dist/typings/index.d.ts",
23
23
  "dependencies": {
24
24
  "@zendeskgarden/container-splitter": "^0.2.3",
25
+ "@zendeskgarden/container-utilities": "^0.7.1",
25
26
  "polished": "^4.0.0",
26
27
  "prop-types": "^15.5.7",
27
28
  "react-merge-refs": "^1.1.0"
@@ -33,7 +34,8 @@
33
34
  "styled-components": "^4.2.0 || ^5.0.0"
34
35
  },
35
36
  "devDependencies": {
36
- "@zendeskgarden/react-theming": "^8.51.0"
37
+ "@zendeskgarden/react-theming": "^8.52.0",
38
+ "use-resize-observer": "^9.0.0"
37
39
  },
38
40
  "keywords": [
39
41
  "components",
@@ -45,5 +47,5 @@
45
47
  "access": "public"
46
48
  },
47
49
  "zendeskgarden:src": "src/index.ts",
48
- "gitHead": "a932647429f0a79984650d2521f357ed8320d1d0"
50
+ "gitHead": "1bc3c4a001a73769a5e33b7431e8b5f895b7caec"
49
51
  }