@zendeskgarden/react-grid 8.51.0 → 8.53.1

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/README.md CHANGED
@@ -84,11 +84,15 @@ import { PaneProvider, Pane } from '@zendeskgarden/react-grid';
84
84
  </Pane>
85
85
  <Pane>
86
86
  <Pane.Content>Pane 2</Pane.Content>
87
- <Pane.Splitter layoutKey="row-1" min={0} max={2} orientation="bottom" />
87
+ <Pane.Splitter layoutKey="row-1" min={0} max={2} orientation="bottom">
88
+ <Pane.SplitterButton label="toggle row-1" />
89
+ </Pane.Splitter>
88
90
  </Pane>
89
91
  <Pane>
90
92
  <Pane.Content>Pane 3</Pane.Content>
91
- <Pane.Splitter layoutKey="row-2" min={0} max={2} orientation="top" />
93
+ <Pane.Splitter layoutKey="row-2" min={0} max={2} orientation="top">
94
+ <Pane.SplitterButton label="toggle row-2" placement="end" />
95
+ </Pane.Splitter>
92
96
  </Pane>
93
97
  <Pane>
94
98
  <Pane.Content>Pane 4</Pane.Content>
package/dist/index.cjs.js CHANGED
@@ -14,8 +14,11 @@ 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 reactButtons = require('@zendeskgarden/react-buttons');
18
+ var containerUtilities = require('@zendeskgarden/container-utilities');
17
19
  var mergeRefs = require('react-merge-refs');
18
20
  var containerSplitter = require('@zendeskgarden/container-splitter');
21
+ var reactTooltips = require('@zendeskgarden/react-tooltips');
19
22
 
20
23
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
21
24
 
@@ -187,7 +190,7 @@ var SPACE = [false, 'xxs', 'xs', 'sm', 'md', 'lg', 'xl', 'xxl'];
187
190
  var WRAP = ['nowrap', 'wrap', 'wrap-reverse'];
188
191
  var ORIENTATION = ['top', 'bottom', 'start', 'end'];
189
192
 
190
- var COMPONENT_ID$5 = 'grid.col';
193
+ var COMPONENT_ID$6 = 'grid.col';
191
194
  var colorStyles$3 = function colorStyles(props) {
192
195
  var backgroundColor = reactTheming.getColor('primaryHue', 600, props.theme, 0.1);
193
196
  return styled.css(["background-clip:content-box;background-color:", ";"], backgroundColor);
@@ -233,20 +236,20 @@ var flexStyles$1 = function flexStyles(size, alignSelf, textAlign, offset, order
233
236
  var mediaStyles$1 = function mediaStyles(minWidth, size, alignSelf, textAlign, offset, order, props) {
234
237
  return styled.css(["@media (min-width:", "){", ";}"], minWidth, flexStyles$1(size, alignSelf, textAlign, offset, order, props));
235
238
  };
236
- var sizeStyles$3 = function sizeStyles(props) {
239
+ var sizeStyles$4 = function sizeStyles(props) {
237
240
  var padding = props.gutters ? polished.math("".concat(props.theme.space[props.gutters], " / 2")) : 0;
238
241
  return styled.css(["padding-right:", ";padding-left:", ";"], padding, padding);
239
242
  };
240
243
  var StyledCol = styled__default["default"].div.attrs({
241
- 'data-garden-id': COMPONENT_ID$5,
242
- 'data-garden-version': '8.51.0'
244
+ 'data-garden-id': COMPONENT_ID$6,
245
+ 'data-garden-version': '8.53.1'
243
246
  }).withConfig({
244
247
  displayName: "StyledCol",
245
248
  componentId: "sc-inuw62-0"
246
249
  })(["box-sizing:border-box;width:100%;", ";", ";", ";", ";", ";", ";", ";", ";", ";"], function (props) {
247
250
  return flexStyles$1(!props.sizeAll && (props.xs || props.sm || props.md || props.lg || props.xl) ? undefined : props.sizeAll || false, props.alignSelf, props.textAlign, props.offset, props.order, props);
248
251
  }, function (props) {
249
- return sizeStyles$3(props);
252
+ return sizeStyles$4(props);
250
253
  }, function (props) {
251
254
  return props.debug && colorStyles$3(props);
252
255
  }, function (props) {
@@ -260,44 +263,44 @@ var StyledCol = styled__default["default"].div.attrs({
260
263
  }, function (props) {
261
264
  return mediaStyles$1(props.theme.breakpoints.xl, props.xl, props.alignSelfXl, props.textAlignXl, props.offsetXl, props.orderXl, props);
262
265
  }, function (props) {
263
- return reactTheming.retrieveComponentStyles(COMPONENT_ID$5, props);
266
+ return reactTheming.retrieveComponentStyles(COMPONENT_ID$6, props);
264
267
  });
265
268
  StyledCol.defaultProps = {
266
269
  columns: 12,
267
270
  theme: reactTheming.DEFAULT_THEME
268
271
  };
269
272
 
270
- var COMPONENT_ID$4 = 'grid.grid';
273
+ var COMPONENT_ID$5 = 'grid.grid';
271
274
  var colorStyles$2 = function colorStyles(props) {
272
275
  var borderColor = reactTheming.getColor(props.theme.palette.crimson, 400, props.theme, 0.5);
273
276
  var borderWidth = polished.math("".concat(props.theme.borderWidths.sm, " * 2"));
274
277
  return styled.css(["box-shadow:-", " 0 0 0 ", ",", " 0 0 0 ", ";"], borderWidth, borderColor, borderWidth, borderColor);
275
278
  };
276
- var sizeStyles$2 = function sizeStyles(props) {
279
+ var sizeStyles$3 = function sizeStyles(props) {
277
280
  var padding = props.gutters ? polished.math("".concat(props.theme.space[props.gutters], " / 2")) : 0;
278
281
  return styled.css(["padding-right:", ";padding-left:", ";"], padding, padding);
279
282
  };
280
283
  var StyledGrid = styled__default["default"].div.attrs({
281
- 'data-garden-id': COMPONENT_ID$4,
282
- 'data-garden-version': '8.51.0'
284
+ 'data-garden-id': COMPONENT_ID$5,
285
+ 'data-garden-version': '8.53.1'
283
286
  }).withConfig({
284
287
  displayName: "StyledGrid",
285
288
  componentId: "sc-oxgg5i-0"
286
289
  })(["direction:", ";margin-right:auto;margin-left:auto;width:100%;box-sizing:border-box;", ";", ";", ";"], function (props) {
287
290
  return props.theme.rtl && 'rtl';
288
291
  }, function (props) {
289
- return sizeStyles$2(props);
292
+ return sizeStyles$3(props);
290
293
  }, function (props) {
291
294
  return props.debug && colorStyles$2(props);
292
295
  }, function (props) {
293
- return reactTheming.retrieveComponentStyles(COMPONENT_ID$4, props);
296
+ return reactTheming.retrieveComponentStyles(COMPONENT_ID$5, props);
294
297
  });
295
298
  StyledGrid.defaultProps = {
296
299
  gutters: 'md',
297
300
  theme: reactTheming.DEFAULT_THEME
298
301
  };
299
302
 
300
- var COMPONENT_ID$3 = 'grid.row';
303
+ var COMPONENT_ID$4 = 'grid.row';
301
304
  var colorStyles$1 = function colorStyles(props) {
302
305
  var borderColor = reactTheming.getColor(props.theme.palette.mint, 600, props.theme, 0.5);
303
306
  var borderWidth = props.theme.borderWidths.sm;
@@ -323,20 +326,20 @@ var flexStyles = function flexStyles(alignItems, justifyContent, wrap) {
323
326
  var mediaStyles = function mediaStyles(minWidth, alignItems, justifyContent, wrap) {
324
327
  return styled.css(["@media (min-width:", "){", ";}"], minWidth, flexStyles(alignItems, justifyContent, wrap));
325
328
  };
326
- var sizeStyles$1 = function sizeStyles(props) {
329
+ var sizeStyles$2 = function sizeStyles(props) {
327
330
  var margin = props.gutters ? polished.math("".concat(props.theme.space[props.gutters], " / 2")) : 0;
328
331
  return styled.css(["margin-right:-", ";margin-left:-", ";"], margin, margin);
329
332
  };
330
333
  var StyledRow = styled__default["default"].div.attrs({
331
- 'data-garden-id': COMPONENT_ID$3,
332
- 'data-garden-version': '8.51.0'
334
+ 'data-garden-id': COMPONENT_ID$4,
335
+ 'data-garden-version': '8.53.1'
333
336
  }).withConfig({
334
337
  displayName: "StyledRow",
335
338
  componentId: "sc-xjsdg1-0"
336
339
  })(["display:flex;box-sizing:border-box;", " ", ";", ";", ";", ";", ";", ";", ";", ";"], function (props) {
337
340
  return flexStyles(props.alignItems, props.justifyContent, props.wrapAll);
338
341
  }, function (props) {
339
- return sizeStyles$1(props);
342
+ return sizeStyles$2(props);
340
343
  }, function (props) {
341
344
  return props.debug && colorStyles$1(props);
342
345
  }, function (props) {
@@ -350,42 +353,42 @@ var StyledRow = styled__default["default"].div.attrs({
350
353
  }, function (props) {
351
354
  return mediaStyles(props.theme.breakpoints.xl, props.alignItemsXl, props.justifyContentXl, props.wrapXl);
352
355
  }, function (props) {
353
- return reactTheming.retrieveComponentStyles(COMPONENT_ID$3, props);
356
+ return reactTheming.retrieveComponentStyles(COMPONENT_ID$4, props);
354
357
  });
355
358
  StyledRow.defaultProps = {
356
359
  wrapAll: 'wrap',
357
360
  theme: reactTheming.DEFAULT_THEME
358
361
  };
359
362
 
360
- var COMPONENT_ID$2 = 'pane';
363
+ var COMPONENT_ID$3 = 'pane';
361
364
  var StyledPane = styled__default["default"].div.attrs({
362
- 'data-garden-id': COMPONENT_ID$2,
363
- 'data-garden-version': '8.51.0'
365
+ 'data-garden-id': COMPONENT_ID$3,
366
+ 'data-garden-version': '8.53.1'
364
367
  }).withConfig({
365
368
  displayName: "StyledPane",
366
369
  componentId: "sc-1ltjst7-0"
367
370
  })(["position:relative;min-width:0;min-height:0;", ";"], function (props) {
368
- return reactTheming.retrieveComponentStyles(COMPONENT_ID$2, props);
371
+ return reactTheming.retrieveComponentStyles(COMPONENT_ID$3, props);
369
372
  });
370
373
  StyledPane.defaultProps = {
371
374
  theme: reactTheming.DEFAULT_THEME
372
375
  };
373
376
 
374
- var COMPONENT_ID$1 = 'pane.content';
377
+ var COMPONENT_ID$2 = 'pane.content';
375
378
  var StyledPaneContent = styled__default["default"].div.attrs({
376
- 'data-garden-id': COMPONENT_ID$1,
377
- 'data-garden-version': '8.51.0'
379
+ 'data-garden-id': COMPONENT_ID$2,
380
+ 'data-garden-version': '8.53.1'
378
381
  }).withConfig({
379
382
  displayName: "StyledPaneContent",
380
383
  componentId: "sc-1b38mbh-0"
381
384
  })(["height:100%;overflow:auto;", ";"], function (props) {
382
- return reactTheming.retrieveComponentStyles(COMPONENT_ID$1, props);
385
+ return reactTheming.retrieveComponentStyles(COMPONENT_ID$2, props);
383
386
  });
384
387
  StyledPaneContent.defaultProps = {
385
388
  theme: reactTheming.DEFAULT_THEME
386
389
  };
387
390
 
388
- var COMPONENT_ID = 'pane.splitter';
391
+ var COMPONENT_ID$1 = 'pane.splitter';
389
392
  var colorStyles = function colorStyles(props) {
390
393
  var color = reactTheming.getColor('neutralHue', 300, props.theme);
391
394
  var hoverColor = reactTheming.getColor('primaryHue', 600, props.theme);
@@ -393,7 +396,7 @@ var colorStyles = function colorStyles(props) {
393
396
  var boxShadow = props.theme.shadows.md(polished.rgba(hoverColor, 0.35));
394
397
  return styled.css(["&::before{background-color:", ";}&:hover::before,&[data-garden-focus-visible]::before{background-color:", ";}&[data-garden-focus-visible]::before{box-shadow:", ";}&:active::before{background-color:", ";}"], color, hoverColor, boxShadow, activeColor);
395
398
  };
396
- var sizeStyles = function sizeStyles(props) {
399
+ var sizeStyles$1 = function sizeStyles(props) {
397
400
  var size = polished.math("".concat(props.theme.shadowWidths.md, " * 2"));
398
401
  var offset = polished.math("-".concat(size, " / 2"));
399
402
  var cursor;
@@ -449,21 +452,80 @@ var sizeStyles = function sizeStyles(props) {
449
452
  }
450
453
  break;
451
454
  }
452
- return styled.css(["display:flex;top:", ";right:", ";bottom:", ";left:", ";cursor:", ";width:", ";height:", ";&::before{transition:box-shadow 0.1s ease-in-out,background-color 0.25s ease-in-out,width 0.25s ease-in-out,height 0.25s ease-in-out;margin:auto;width:", ";height:", ";}&:hover::before,&[data-garden-focus-visible]::before,&:focus::before{", ":", ";}&[data-garden-focus-visible]::before{border-radius:", ";}"], top, right, bottom, left, cursor, width, height, separatorWidth, separatorHeight, width === '100%' ? 'height' : 'width', polished.math("".concat(props.theme.borderWidths.sm, " * 2")), props.theme.borderRadii.md);
455
+ return styled.css(["top:", ";right:", ";bottom:", ";left:", ";cursor:", ";width:", ";height:", ";&::before{width:", ";height:", ";}&:hover::before,&[data-garden-focus-visible]::before,&:focus::before{", ":", ";}&[data-garden-focus-visible]::before{border-radius:", ";}"], top, right, bottom, left, cursor, width, height, separatorWidth, separatorHeight, width === '100%' ? 'height' : 'width', polished.math("".concat(props.theme.borderWidths.sm, " * 2")), props.theme.borderRadii.md);
453
456
  };
454
457
  var StyledPaneSplitter = styled__default["default"].div.attrs({
455
- 'data-garden-id': COMPONENT_ID,
456
- 'data-garden-version': '8.51.0'
458
+ 'data-garden-id': COMPONENT_ID$1,
459
+ 'data-garden-version': '8.53.1'
457
460
  }).withConfig({
458
461
  displayName: "StyledPaneSplitter",
459
462
  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
- return reactTheming.retrieveComponentStyles(COMPONENT_ID, props);
463
+ })(["display:flex;position:absolute;align-items:center;justify-content:center;z-index:1;user-select:none;", ";&:focus{outline:none;}&::before{position:absolute;transition:box-shadow 0.1s ease-in-out,background-color 0.25s ease-in-out;z-index:-1;content:'';}", ";", ";"], sizeStyles$1, colorStyles, function (props) {
464
+ return reactTheming.retrieveComponentStyles(COMPONENT_ID$1, props);
462
465
  });
463
466
  StyledPaneSplitter.defaultProps = {
464
467
  theme: reactTheming.DEFAULT_THEME
465
468
  };
466
469
 
470
+ var COMPONENT_ID = 'pane.splitter_button';
471
+ var transformStyles = function transformStyles(props) {
472
+ var degrees = 0;
473
+ if (props.isRotated) {
474
+ degrees = props.theme.rtl ? -180 : 180;
475
+ }
476
+ if (props.orientation === 'end') {
477
+ degrees += props.theme.rtl ? -90 : 90;
478
+ } else if (props.orientation === 'start') {
479
+ degrees += props.theme.rtl ? 90 : -90;
480
+ } else if (props.orientation === 'bottom') {
481
+ degrees += 180;
482
+ }
483
+ return styled.css(["& > svg{transform:rotate(", "deg);}"], degrees);
484
+ };
485
+ var sizeStyles = function sizeStyles(props) {
486
+ var size = "".concat(props.theme.space.base * 6, "px");
487
+ var isVertical = props.orientation === 'start' || props.orientation === 'end';
488
+ var top;
489
+ var left;
490
+ var right;
491
+ var bottom;
492
+ if (props.placement === 'start') {
493
+ if (isVertical) {
494
+ top = size;
495
+ } else if (props.theme.rtl) {
496
+ right = size;
497
+ } else {
498
+ left = size;
499
+ }
500
+ } else if (props.placement === 'end') {
501
+ if (isVertical) {
502
+ bottom = size;
503
+ } else if (props.theme.rtl) {
504
+ left = size;
505
+ } else {
506
+ right = size;
507
+ }
508
+ }
509
+ return styled.css(["top:", ";right:", ";bottom:", ";left:", ";width:", ";min-width:", ";height:", ";"], top, right, bottom, left, size, size, size);
510
+ };
511
+ var StyledPaneSplitterButton = styled__default["default"](reactButtons.ChevronButton).attrs({
512
+ 'data-garden-id': COMPONENT_ID,
513
+ 'data-garden-version': '8.53.1',
514
+ isBasic: true,
515
+ isPill: true,
516
+ size: 'small'
517
+ }).withConfig({
518
+ displayName: "StyledPaneSplitterButton",
519
+ componentId: "sc-zh032e-0"
520
+ })(["position:absolute;transition:box-shadow 0.1s ease-in-out,background-color 0.25s ease-in-out,opacity 0.25s ease-in-out 0.1s;opacity:0;&[data-garden-focus-visible],", ":hover &,", "[data-garden-focus-visible] &{opacity:1;}", ";", ";&::before{position:absolute;z-index:-1;background-color:", ";width:100%;height:100%;content:'';}", ";"], StyledPaneSplitter, StyledPaneSplitter, sizeStyles, transformStyles, function (props) {
521
+ return props.theme.colors.background;
522
+ }, function (props) {
523
+ return reactTheming.retrieveComponentStyles(COMPONENT_ID, props);
524
+ });
525
+ StyledPaneSplitterButton.defaultProps = {
526
+ theme: reactTheming.DEFAULT_THEME
527
+ };
528
+
467
529
  var GridContext = React.createContext({
468
530
  gutters: 'md'
469
531
  });
@@ -587,30 +649,14 @@ Row.propTypes = {
587
649
  wrapXl: PropTypes__default["default"].oneOf(WRAP)
588
650
  };
589
651
 
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);
652
+ var PaneProviderContext = React.createContext({});
653
+ var usePaneProviderContextData = function usePaneProviderContextData(providerId) {
654
+ var context = React.useContext(PaneProviderContext);
655
+ var id = providerId || context.providerId;
656
+ return id && context.contextData ? context.contextData[id] : undefined;
657
+ };
658
+ var usePaneProviderContext = function usePaneProviderContext() {
659
+ return React.useContext(PaneProviderContext);
614
660
  };
615
661
 
616
662
  var getPixelsPerFr = function getPixelsPerFr(totalFrs, totalDimension) {
@@ -626,7 +672,8 @@ var convertToPixels = function convertToPixels(values, pixelsPerFr) {
626
672
  }, {});
627
673
  };
628
674
  var PaneProvider = function PaneProvider(_ref3) {
629
- var totalPanesWidth = _ref3.totalPanesWidth,
675
+ var id = _ref3.id,
676
+ totalPanesWidth = _ref3.totalPanesWidth,
630
677
  totalPanesHeight = _ref3.totalPanesHeight,
631
678
  defaultRowValues = _ref3.defaultRowValues,
632
679
  defaultColumnValues = _ref3.defaultColumnValues,
@@ -646,17 +693,17 @@ var PaneProvider = function PaneProvider(_ref3) {
646
693
  var rowsTrack = isControlled ? rowValues : rowState;
647
694
  var columnsTrack = isControlled ? columnValues : columnState;
648
695
  var setRowsTrack = React.useCallback(function (values) {
649
- if (onChange) {
696
+ if (isControlled && onChange) {
650
697
  return onChange(values(rowsTrack), columnsTrack);
651
698
  }
652
699
  return setRowState(values);
653
- }, [onChange, setRowState, columnsTrack, rowsTrack]);
700
+ }, [isControlled, onChange, setRowState, columnsTrack, rowsTrack]);
654
701
  var setColumnsTrack = React.useCallback(function (values) {
655
- if (onChange) {
702
+ if (isControlled && onChange) {
656
703
  return onChange(rowsTrack, values(columnsTrack));
657
704
  }
658
705
  return setColumnState(values);
659
- }, [onChange, setColumnState, rowsTrack, columnsTrack]);
706
+ }, [isControlled, onChange, setColumnState, rowsTrack, columnsTrack]);
660
707
  var totalFractions = React.useMemo(function () {
661
708
  return {
662
709
  rows: Object.values(rowsTrack).reduce(function (prev, value) {
@@ -697,15 +744,15 @@ var PaneProvider = function PaneProvider(_ref3) {
697
744
  columnArray: columnArray
698
745
  };
699
746
  }, [rowsTrack, columnsTrack]);
700
- var setRowValue = React.useCallback(function (isTop, id, value) {
747
+ var setRowValue = React.useCallback(function (isTop, splitterId, value) {
701
748
  var rows = layoutIndices.rows,
702
749
  rowArray = layoutIndices.rowArray;
703
750
  var stealFromTraversal = isTop ? -1 : 1;
704
751
  var addToTraversal = 0;
705
752
  setRowsTrack(function (state) {
706
- var oldValue = rowsTrack[id];
707
- var stealFromIndex = rows[id] + stealFromTraversal;
708
- var addToIndex = rows[id] + addToTraversal;
753
+ var oldValue = rowsTrack[splitterId];
754
+ var stealFromIndex = rows[splitterId] + stealFromTraversal;
755
+ var addToIndex = rows[splitterId] + addToTraversal;
709
756
  var stealFromKey = rowArray[stealFromIndex];
710
757
  var addToKey = rowArray[addToIndex];
711
758
  var difference = oldValue - value;
@@ -715,15 +762,15 @@ var PaneProvider = function PaneProvider(_ref3) {
715
762
  return nextState;
716
763
  });
717
764
  }, [layoutIndices, rowsTrack, setRowsTrack]);
718
- var setColumnValue = React.useCallback(function (isStart, id, value) {
765
+ var setColumnValue = React.useCallback(function (isStart, splitterId, value) {
719
766
  var columns = layoutIndices.columns,
720
767
  columnArray = layoutIndices.columnArray;
721
- var stealFromTraversal = isStart ? 0 : 1;
722
- var addToTraversal = isStart ? -1 : 0;
768
+ var stealFromTraversal = isStart ? -1 : 1;
769
+ var addToTraversal = 0;
723
770
  setColumnsTrack(function (state) {
724
- var stealFromIndex = columns[id] + stealFromTraversal;
725
- var addToIndex = columns[id] + addToTraversal;
726
- var oldValue = columnsTrack[id];
771
+ var stealFromIndex = columns[splitterId] + stealFromTraversal;
772
+ var addToIndex = columns[splitterId] + addToTraversal;
773
+ var oldValue = columnsTrack[splitterId];
727
774
  var stealFromKey = columnArray[stealFromIndex];
728
775
  var addToKey = columnArray[addToIndex];
729
776
  var difference = oldValue - value;
@@ -767,22 +814,28 @@ var PaneProvider = function PaneProvider(_ref3) {
767
814
  return "".concat(rowsTrack[row], "fr");
768
815
  }).join(' ');
769
816
  }, [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
817
+ var providerId = containerUtilities.useId(id);
818
+ var parentPaneProviderContext = usePaneProviderContext();
819
+ var paneProviderContext = React.useMemo(function () {
820
+ return providerId ? {
821
+ providerId: providerId,
822
+ contextData: _objectSpread2(_objectSpread2({}, parentPaneProviderContext.contextData), {}, _defineProperty({}, providerId, {
823
+ columnState: columnState,
824
+ rowState: rowState,
825
+ setRowValue: setRowValue,
826
+ setColumnValue: setColumnValue,
827
+ getRowValue: getRowValue,
828
+ getColumnValue: getColumnValue,
829
+ totalPanesHeight: totalPanesHeight,
830
+ totalPanesWidth: totalPanesWidth,
831
+ pixelsPerFr: pixelsPerFr
832
+ }))
833
+ } : {};
834
+ }, [providerId, parentPaneProviderContext, rowState, columnState, setRowValue, setColumnValue, getRowValue, getColumnValue, totalPanesHeight, totalPanesWidth, pixelsPerFr]);
835
+ return React__default["default"].createElement(PaneProviderContext.Provider, {
836
+ value: paneProviderContext
785
837
  }, children === null || children === void 0 ? void 0 : children({
838
+ id: providerId,
786
839
  getRowValue: getRowValue,
787
840
  getColumnValue: getColumnValue,
788
841
  getGridTemplateColumns: getGridTemplateColumns,
@@ -791,6 +844,7 @@ var PaneProvider = function PaneProvider(_ref3) {
791
844
  };
792
845
  PaneProvider.displayName = 'PaneProvider';
793
846
  PaneProvider.propTypes = {
847
+ id: PropTypes__default["default"].string,
794
848
  totalPanesWidth: PropTypes__default["default"].number.isRequired,
795
849
  totalPanesHeight: PropTypes__default["default"].number.isRequired,
796
850
  defaultRowValues: PropTypes__default["default"].object,
@@ -810,9 +864,21 @@ var usePaneContext = function usePaneContext() {
810
864
  return React.useContext(PaneContext);
811
865
  };
812
866
 
813
- var _excluded$1 = ["layoutKey", "min", "max", "orientation"];
867
+ var PaneSplitterContext = React.createContext({
868
+ orientation: 'start',
869
+ min: 0,
870
+ max: 0,
871
+ layoutKey: '',
872
+ valueNow: 0,
873
+ isRow: false
874
+ });
875
+ var usePaneSplitterContext = function usePaneSplitterContext() {
876
+ return React.useContext(PaneSplitterContext);
877
+ };
878
+
879
+ var _excluded$1 = ["providerId", "layoutKey", "min", "max", "orientation"];
814
880
  var orientationToPosition = {
815
- start: containerSplitter.SplitterPosition.TRAILS,
881
+ start: containerSplitter.SplitterPosition.LEADS,
816
882
  end: containerSplitter.SplitterPosition.TRAILS,
817
883
  top: containerSplitter.SplitterPosition.LEADS,
818
884
  bottom: containerSplitter.SplitterPosition.TRAILS
@@ -830,18 +896,21 @@ var orientationToDimension = {
830
896
  bottom: 'rows'
831
897
  };
832
898
  var SplitterComponent = React.forwardRef(function (_ref, ref) {
833
- var layoutKey = _ref.layoutKey,
899
+ var providerId = _ref.providerId,
900
+ layoutKey = _ref.layoutKey,
834
901
  min = _ref.min,
835
902
  max = _ref.max,
836
903
  orientation = _ref.orientation,
837
904
  props = _objectWithoutProperties(_ref, _excluded$1);
838
- var splitterContext = useSplitterContext();
905
+ var paneProviderContext = usePaneProviderContextData(providerId);
839
906
  var paneContext = usePaneContext();
840
907
  var themeContext = React.useContext(styled.ThemeContext);
841
908
  var position = orientationToPosition[orientation];
842
909
  var isRow = orientationToDimension[orientation] === 'rows';
843
910
  var splitterOrientation = paneToSplitterOrientation[orientation];
844
- var pixelsPerFr = splitterContext.pixelsPerFr[orientationToDimension[orientation]];
911
+ var pixelsPerFr = paneProviderContext ? paneProviderContext.pixelsPerFr[orientationToDimension[orientation]] : 0;
912
+ var value = isRow ? paneProviderContext === null || paneProviderContext === void 0 ? void 0 : paneProviderContext.getRowValue(layoutKey, true) : paneProviderContext === null || paneProviderContext === void 0 ? void 0 : paneProviderContext.getColumnValue(layoutKey, true);
913
+ var valueInFr = isRow ? paneProviderContext === null || paneProviderContext === void 0 ? void 0 : paneProviderContext.getRowValue(layoutKey) : paneProviderContext === null || paneProviderContext === void 0 ? void 0 : paneProviderContext.getColumnValue(layoutKey);
845
914
  var _useSplitter = containerSplitter.useSplitter({
846
915
  type: containerSplitter.SplitterType.VARIABLE,
847
916
  orientation: splitterOrientation,
@@ -852,11 +921,11 @@ var SplitterComponent = React.forwardRef(function (_ref, ref) {
852
921
  environment: window,
853
922
  onChange: function onChange(valueNow) {
854
923
  if (isRow) {
855
- return splitterContext.setRowValue(orientation === 'top', layoutKey, valueNow / pixelsPerFr);
924
+ return paneProviderContext === null || paneProviderContext === void 0 ? void 0 : paneProviderContext.setRowValue(orientation === 'top', layoutKey, valueNow / pixelsPerFr);
856
925
  }
857
- return splitterContext.setColumnValue(orientation === 'start', layoutKey, valueNow / pixelsPerFr);
926
+ return paneProviderContext === null || paneProviderContext === void 0 ? void 0 : paneProviderContext.setColumnValue(orientation === 'start', layoutKey, valueNow / pixelsPerFr);
858
927
  },
859
- valueNow: isRow ? splitterContext.getRowValue(layoutKey, true) : splitterContext.getColumnValue(layoutKey, true)
928
+ valueNow: value
860
929
  }),
861
930
  getSeparatorProps = _useSplitter.getSeparatorProps,
862
931
  getPrimaryPaneProps = _useSplitter.getPrimaryPaneProps;
@@ -868,11 +937,22 @@ var SplitterComponent = React.forwardRef(function (_ref, ref) {
868
937
  var separatorProps = getSeparatorProps({
869
938
  'aria-controls': paneContext.id
870
939
  });
871
- return React__default["default"].createElement(StyledPaneSplitter, _extends({
940
+ return React__default["default"].createElement(PaneSplitterContext.Provider, {
941
+ value: React.useMemo(function () {
942
+ return {
943
+ orientation: orientation,
944
+ layoutKey: layoutKey,
945
+ min: min,
946
+ max: max,
947
+ valueNow: valueInFr,
948
+ isRow: isRow
949
+ };
950
+ }, [orientation, layoutKey, min, max, valueInFr, isRow])
951
+ }, React__default["default"].createElement(StyledPaneSplitter, _extends({
872
952
  orientation: orientation
873
953
  }, separatorProps, props, {
874
954
  ref: mergeRefs__default["default"]([separatorProps.ref, ref])
875
- }));
955
+ })));
876
956
  });
877
957
  SplitterComponent.displayName = 'Pane.Splitter';
878
958
  SplitterComponent.propTypes = {
@@ -894,6 +974,63 @@ var ContentComponent = React.forwardRef(function (props, ref) {
894
974
  ContentComponent.displayName = 'Pane.Content';
895
975
  var Content = ContentComponent;
896
976
 
977
+ var SplitterButtonComponent = React.forwardRef(function (props, ref) {
978
+ var label = props.label,
979
+ defaultPlacement = props.placement;
980
+ var _usePaneSplitterConte = usePaneSplitterContext(),
981
+ orientation = _usePaneSplitterConte.orientation,
982
+ layoutKey = _usePaneSplitterConte.layoutKey,
983
+ min = _usePaneSplitterConte.min,
984
+ max = _usePaneSplitterConte.max,
985
+ isRow = _usePaneSplitterConte.isRow,
986
+ valueNow = _usePaneSplitterConte.valueNow,
987
+ providerId = _usePaneSplitterConte.providerId;
988
+ var paneProviderContext = usePaneProviderContextData(providerId);
989
+ var isTop = orientation === 'top';
990
+ var isStart = orientation === 'start';
991
+ var isMin = valueNow === min;
992
+ var placement = defaultPlacement;
993
+ if (!defaultPlacement) {
994
+ if (isRow) {
995
+ placement = 'center';
996
+ } else {
997
+ placement = 'start';
998
+ }
999
+ }
1000
+ var setValue = React.useCallback(function (value) {
1001
+ if (isRow) {
1002
+ paneProviderContext.setRowValue(isTop, layoutKey, value);
1003
+ return;
1004
+ }
1005
+ paneProviderContext.setColumnValue(isStart, layoutKey, value);
1006
+ }, [isRow, isTop, isStart, layoutKey, paneProviderContext]);
1007
+ var onClick = containerUtilities.composeEventHandlers(props.onClick, function () {
1008
+ if (isMin) {
1009
+ setValue(max);
1010
+ } else {
1011
+ setValue(min);
1012
+ }
1013
+ });
1014
+ var onKeyDown = containerUtilities.composeEventHandlers(props.onKeyDown, function (event) {
1015
+ return event.stopPropagation();
1016
+ }
1017
+ );
1018
+ return React__default["default"].createElement(reactTooltips.Tooltip, {
1019
+ content: label
1020
+ }, React__default["default"].createElement(StyledPaneSplitterButton, _extends({
1021
+ "aria-label": label
1022
+ }, props, {
1023
+ placement: placement,
1024
+ orientation: orientation,
1025
+ isRotated: isMin,
1026
+ ref: ref,
1027
+ onClick: onClick,
1028
+ onKeyDown: onKeyDown
1029
+ })));
1030
+ });
1031
+ SplitterButtonComponent.displayName = 'Pane.SplitterButton';
1032
+ var SplitterButton = SplitterButtonComponent;
1033
+
897
1034
  var _excluded = ["children"];
898
1035
  var PaneComponent = React.forwardRef(function (_ref, ref) {
899
1036
  var children = _ref.children,
@@ -921,6 +1058,7 @@ PaneComponent.displayName = 'Pane';
921
1058
  var Pane = PaneComponent;
922
1059
  Pane.Content = Content;
923
1060
  Pane.Splitter = Splitter;
1061
+ Pane.SplitterButton = SplitterButton;
924
1062
 
925
1063
  exports.ARRAY_ALIGN_ITEMS = ALIGN_ITEMS;
926
1064
  exports.ARRAY_ALIGN_SELF = ALIGN_SELF;