@zendeskgarden/react-grid 8.50.1 → 8.51.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,12 +14,56 @@ 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 mergeRefs = require('react-merge-refs');
18
+ var containerSplitter = require('@zendeskgarden/container-splitter');
17
19
 
18
20
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
19
21
 
20
22
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
21
23
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
22
24
  var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
25
+ var mergeRefs__default = /*#__PURE__*/_interopDefaultLegacy(mergeRefs);
26
+
27
+ function ownKeys(object, enumerableOnly) {
28
+ var keys = Object.keys(object);
29
+
30
+ if (Object.getOwnPropertySymbols) {
31
+ var symbols = Object.getOwnPropertySymbols(object);
32
+ enumerableOnly && (symbols = symbols.filter(function (sym) {
33
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
34
+ })), keys.push.apply(keys, symbols);
35
+ }
36
+
37
+ return keys;
38
+ }
39
+
40
+ function _objectSpread2(target) {
41
+ for (var i = 1; i < arguments.length; i++) {
42
+ var source = null != arguments[i] ? arguments[i] : {};
43
+ i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
44
+ _defineProperty(target, key, source[key]);
45
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
46
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
47
+ });
48
+ }
49
+
50
+ return target;
51
+ }
52
+
53
+ function _defineProperty(obj, key, value) {
54
+ if (key in obj) {
55
+ Object.defineProperty(obj, key, {
56
+ value: value,
57
+ enumerable: true,
58
+ configurable: true,
59
+ writable: true
60
+ });
61
+ } else {
62
+ obj[key] = value;
63
+ }
64
+
65
+ return obj;
66
+ }
23
67
 
24
68
  function _extends() {
25
69
  _extends = Object.assign || function (target) {
@@ -75,6 +119,65 @@ function _objectWithoutProperties(source, excluded) {
75
119
  return target;
76
120
  }
77
121
 
122
+ function _slicedToArray(arr, i) {
123
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
124
+ }
125
+
126
+ function _arrayWithHoles(arr) {
127
+ if (Array.isArray(arr)) return arr;
128
+ }
129
+
130
+ function _iterableToArrayLimit(arr, i) {
131
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
132
+
133
+ if (_i == null) return;
134
+ var _arr = [];
135
+ var _n = true;
136
+ var _d = false;
137
+
138
+ var _s, _e;
139
+
140
+ try {
141
+ for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
142
+ _arr.push(_s.value);
143
+
144
+ if (i && _arr.length === i) break;
145
+ }
146
+ } catch (err) {
147
+ _d = true;
148
+ _e = err;
149
+ } finally {
150
+ try {
151
+ if (!_n && _i["return"] != null) _i["return"]();
152
+ } finally {
153
+ if (_d) throw _e;
154
+ }
155
+ }
156
+
157
+ return _arr;
158
+ }
159
+
160
+ function _unsupportedIterableToArray(o, minLen) {
161
+ if (!o) return;
162
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
163
+ var n = Object.prototype.toString.call(o).slice(8, -1);
164
+ if (n === "Object" && o.constructor) n = o.constructor.name;
165
+ if (n === "Map" || n === "Set") return Array.from(o);
166
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
167
+ }
168
+
169
+ function _arrayLikeToArray(arr, len) {
170
+ if (len == null || len > arr.length) len = arr.length;
171
+
172
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
173
+
174
+ return arr2;
175
+ }
176
+
177
+ function _nonIterableRest() {
178
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
179
+ }
180
+
78
181
  var ALIGN_ITEMS = ['start', 'end', 'center', 'baseline', 'stretch'];
79
182
  var ALIGN_SELF = ['auto'].concat(ALIGN_ITEMS);
80
183
  var DIRECTION = ['row', 'row-reverse', 'column', 'column-reverse'];
@@ -82,9 +185,10 @@ var JUSTIFY_CONTENT = ['start', 'end', 'center', 'between', 'around'];
82
185
  var TEXT_ALIGN = ['start', 'end', 'center', 'justify'];
83
186
  var SPACE = [false, 'xxs', 'xs', 'sm', 'md', 'lg', 'xl', 'xxl'];
84
187
  var WRAP = ['nowrap', 'wrap', 'wrap-reverse'];
188
+ var ORIENTATION = ['top', 'bottom', 'start', 'end'];
85
189
 
86
- var COMPONENT_ID$2 = 'grid.col';
87
- var colorStyles$2 = function colorStyles(props) {
190
+ var COMPONENT_ID$5 = 'grid.col';
191
+ var colorStyles$3 = function colorStyles(props) {
88
192
  var backgroundColor = reactTheming.getColor('primaryHue', 600, props.theme, 0.1);
89
193
  return styled.css(["background-clip:content-box;background-color:", ";"], backgroundColor);
90
194
  };
@@ -129,22 +233,22 @@ var flexStyles$1 = function flexStyles(size, alignSelf, textAlign, offset, order
129
233
  var mediaStyles$1 = function mediaStyles(minWidth, size, alignSelf, textAlign, offset, order, props) {
130
234
  return styled.css(["@media (min-width:", "){", ";}"], minWidth, flexStyles$1(size, alignSelf, textAlign, offset, order, props));
131
235
  };
132
- var sizeStyles$2 = function sizeStyles(props) {
236
+ var sizeStyles$3 = function sizeStyles(props) {
133
237
  var padding = props.gutters ? polished.math("".concat(props.theme.space[props.gutters], " / 2")) : 0;
134
238
  return styled.css(["padding-right:", ";padding-left:", ";"], padding, padding);
135
239
  };
136
240
  var StyledCol = styled__default["default"].div.attrs({
137
- 'data-garden-id': COMPONENT_ID$2,
138
- 'data-garden-version': '8.50.1'
241
+ 'data-garden-id': COMPONENT_ID$5,
242
+ 'data-garden-version': '8.51.0'
139
243
  }).withConfig({
140
244
  displayName: "StyledCol",
141
245
  componentId: "sc-inuw62-0"
142
246
  })(["box-sizing:border-box;width:100%;", ";", ";", ";", ";", ";", ";", ";", ";", ";"], function (props) {
143
247
  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);
144
248
  }, function (props) {
145
- return sizeStyles$2(props);
249
+ return sizeStyles$3(props);
146
250
  }, function (props) {
147
- return props.debug && colorStyles$2(props);
251
+ return props.debug && colorStyles$3(props);
148
252
  }, function (props) {
149
253
  return mediaStyles$1(props.theme.breakpoints.xs, props.xs, props.alignSelfXs, props.textAlignXs, props.offsetXs, props.orderXs, props);
150
254
  }, function (props) {
@@ -156,45 +260,45 @@ var StyledCol = styled__default["default"].div.attrs({
156
260
  }, function (props) {
157
261
  return mediaStyles$1(props.theme.breakpoints.xl, props.xl, props.alignSelfXl, props.textAlignXl, props.offsetXl, props.orderXl, props);
158
262
  }, function (props) {
159
- return reactTheming.retrieveComponentStyles(COMPONENT_ID$2, props);
263
+ return reactTheming.retrieveComponentStyles(COMPONENT_ID$5, props);
160
264
  });
161
265
  StyledCol.defaultProps = {
162
266
  columns: 12,
163
267
  theme: reactTheming.DEFAULT_THEME
164
268
  };
165
269
 
166
- var COMPONENT_ID$1 = 'grid.grid';
167
- var colorStyles$1 = function colorStyles(props) {
270
+ var COMPONENT_ID$4 = 'grid.grid';
271
+ var colorStyles$2 = function colorStyles(props) {
168
272
  var borderColor = reactTheming.getColor(props.theme.palette.crimson, 400, props.theme, 0.5);
169
273
  var borderWidth = polished.math("".concat(props.theme.borderWidths.sm, " * 2"));
170
274
  return styled.css(["box-shadow:-", " 0 0 0 ", ",", " 0 0 0 ", ";"], borderWidth, borderColor, borderWidth, borderColor);
171
275
  };
172
- var sizeStyles$1 = function sizeStyles(props) {
276
+ var sizeStyles$2 = function sizeStyles(props) {
173
277
  var padding = props.gutters ? polished.math("".concat(props.theme.space[props.gutters], " / 2")) : 0;
174
278
  return styled.css(["padding-right:", ";padding-left:", ";"], padding, padding);
175
279
  };
176
280
  var StyledGrid = styled__default["default"].div.attrs({
177
- 'data-garden-id': COMPONENT_ID$1,
178
- 'data-garden-version': '8.50.1'
281
+ 'data-garden-id': COMPONENT_ID$4,
282
+ 'data-garden-version': '8.51.0'
179
283
  }).withConfig({
180
284
  displayName: "StyledGrid",
181
285
  componentId: "sc-oxgg5i-0"
182
286
  })(["direction:", ";margin-right:auto;margin-left:auto;width:100%;box-sizing:border-box;", ";", ";", ";"], function (props) {
183
287
  return props.theme.rtl && 'rtl';
184
288
  }, function (props) {
185
- return sizeStyles$1(props);
289
+ return sizeStyles$2(props);
186
290
  }, function (props) {
187
- return props.debug && colorStyles$1(props);
291
+ return props.debug && colorStyles$2(props);
188
292
  }, function (props) {
189
- return reactTheming.retrieveComponentStyles(COMPONENT_ID$1, props);
293
+ return reactTheming.retrieveComponentStyles(COMPONENT_ID$4, props);
190
294
  });
191
295
  StyledGrid.defaultProps = {
192
296
  gutters: 'md',
193
297
  theme: reactTheming.DEFAULT_THEME
194
298
  };
195
299
 
196
- var COMPONENT_ID = 'grid.row';
197
- var colorStyles = function colorStyles(props) {
300
+ var COMPONENT_ID$3 = 'grid.row';
301
+ var colorStyles$1 = function colorStyles(props) {
198
302
  var borderColor = reactTheming.getColor(props.theme.palette.mint, 600, props.theme, 0.5);
199
303
  var borderWidth = props.theme.borderWidths.sm;
200
304
  return styled.css(["box-shadow:inset 0 ", " 0 0 ", ",inset 0 -", " 0 0 ", ";"], borderWidth, borderColor, borderWidth, borderColor);
@@ -219,22 +323,22 @@ var flexStyles = function flexStyles(alignItems, justifyContent, wrap) {
219
323
  var mediaStyles = function mediaStyles(minWidth, alignItems, justifyContent, wrap) {
220
324
  return styled.css(["@media (min-width:", "){", ";}"], minWidth, flexStyles(alignItems, justifyContent, wrap));
221
325
  };
222
- var sizeStyles = function sizeStyles(props) {
326
+ var sizeStyles$1 = function sizeStyles(props) {
223
327
  var margin = props.gutters ? polished.math("".concat(props.theme.space[props.gutters], " / 2")) : 0;
224
328
  return styled.css(["margin-right:-", ";margin-left:-", ";"], margin, margin);
225
329
  };
226
330
  var StyledRow = styled__default["default"].div.attrs({
227
- 'data-garden-id': COMPONENT_ID,
228
- 'data-garden-version': '8.50.1'
331
+ 'data-garden-id': COMPONENT_ID$3,
332
+ 'data-garden-version': '8.51.0'
229
333
  }).withConfig({
230
334
  displayName: "StyledRow",
231
335
  componentId: "sc-xjsdg1-0"
232
336
  })(["display:flex;box-sizing:border-box;", " ", ";", ";", ";", ";", ";", ";", ";", ";"], function (props) {
233
337
  return flexStyles(props.alignItems, props.justifyContent, props.wrapAll);
234
338
  }, function (props) {
235
- return sizeStyles(props);
339
+ return sizeStyles$1(props);
236
340
  }, function (props) {
237
- return props.debug && colorStyles(props);
341
+ return props.debug && colorStyles$1(props);
238
342
  }, function (props) {
239
343
  return mediaStyles(props.theme.breakpoints.xs, props.alignItemsXs, props.justifyContentXs, props.wrapXs);
240
344
  }, function (props) {
@@ -246,13 +350,120 @@ var StyledRow = styled__default["default"].div.attrs({
246
350
  }, function (props) {
247
351
  return mediaStyles(props.theme.breakpoints.xl, props.alignItemsXl, props.justifyContentXl, props.wrapXl);
248
352
  }, function (props) {
249
- return reactTheming.retrieveComponentStyles(COMPONENT_ID, props);
353
+ return reactTheming.retrieveComponentStyles(COMPONENT_ID$3, props);
250
354
  });
251
355
  StyledRow.defaultProps = {
252
356
  wrapAll: 'wrap',
253
357
  theme: reactTheming.DEFAULT_THEME
254
358
  };
255
359
 
360
+ var COMPONENT_ID$2 = 'pane';
361
+ var StyledPane = styled__default["default"].div.attrs({
362
+ 'data-garden-id': COMPONENT_ID$2,
363
+ 'data-garden-version': '8.51.0'
364
+ }).withConfig({
365
+ displayName: "StyledPane",
366
+ componentId: "sc-1ltjst7-0"
367
+ })(["position:relative;min-width:0;min-height:0;", ";"], function (props) {
368
+ return reactTheming.retrieveComponentStyles(COMPONENT_ID$2, props);
369
+ });
370
+ StyledPane.defaultProps = {
371
+ theme: reactTheming.DEFAULT_THEME
372
+ };
373
+
374
+ var COMPONENT_ID$1 = 'pane.content';
375
+ var StyledPaneContent = styled__default["default"].div.attrs({
376
+ 'data-garden-id': COMPONENT_ID$1,
377
+ 'data-garden-version': '8.51.0'
378
+ }).withConfig({
379
+ displayName: "StyledPaneContent",
380
+ componentId: "sc-1b38mbh-0"
381
+ })(["height:100%;overflow:auto;", ";"], function (props) {
382
+ return reactTheming.retrieveComponentStyles(COMPONENT_ID$1, props);
383
+ });
384
+ StyledPaneContent.defaultProps = {
385
+ theme: reactTheming.DEFAULT_THEME
386
+ };
387
+
388
+ var COMPONENT_ID = 'pane.splitter';
389
+ var colorStyles = function colorStyles(props) {
390
+ var color = reactTheming.getColor('neutralHue', 300, props.theme);
391
+ var hoverColor = reactTheming.getColor('primaryHue', 600, props.theme);
392
+ var activeColor = reactTheming.getColor('primaryHue', 800, props.theme);
393
+ var boxShadow = props.theme.shadows.md(polished.rgba(hoverColor, 0.35));
394
+ 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
+ };
396
+ var sizeStyles = function sizeStyles(props) {
397
+ var size = polished.math("".concat(props.theme.shadowWidths.md, " * 2"));
398
+ var offset = polished.math("-".concat(size, " / 2"));
399
+ var cursor;
400
+ var top;
401
+ var right;
402
+ var left;
403
+ var bottom;
404
+ var width;
405
+ var height;
406
+ var separatorWidth;
407
+ var separatorHeight;
408
+ switch (props.orientation) {
409
+ case 'top':
410
+ cursor = 'row-resize';
411
+ top = offset;
412
+ width = '100%';
413
+ height = size;
414
+ separatorWidth = width;
415
+ separatorHeight = props.theme.borderWidths.sm;
416
+ break;
417
+ case 'end':
418
+ cursor = 'col-resize';
419
+ top = 0;
420
+ width = size;
421
+ height = '100%';
422
+ separatorWidth = props.theme.borderWidths.sm;
423
+ separatorHeight = height;
424
+ if (props.theme.rtl) {
425
+ left = offset;
426
+ } else {
427
+ right = offset;
428
+ }
429
+ break;
430
+ case 'bottom':
431
+ cursor = 'row-resize';
432
+ bottom = offset;
433
+ width = '100%';
434
+ height = size;
435
+ separatorWidth = width;
436
+ separatorHeight = props.theme.borderWidths.sm;
437
+ break;
438
+ case 'start':
439
+ cursor = 'col-resize';
440
+ top = 0;
441
+ width = size;
442
+ height = '100%';
443
+ separatorWidth = props.theme.borderWidths.sm;
444
+ separatorHeight = height;
445
+ if (props.theme.rtl) {
446
+ right = offset;
447
+ } else {
448
+ left = offset;
449
+ }
450
+ break;
451
+ }
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);
453
+ };
454
+ var StyledPaneSplitter = styled__default["default"].div.attrs({
455
+ 'data-garden-id': COMPONENT_ID,
456
+ 'data-garden-version': '8.51.0'
457
+ }).withConfig({
458
+ displayName: "StyledPaneSplitter",
459
+ 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);
462
+ });
463
+ StyledPaneSplitter.defaultProps = {
464
+ theme: reactTheming.DEFAULT_THEME
465
+ };
466
+
256
467
  var GridContext = React.createContext({
257
468
  gutters: 'md'
258
469
  });
@@ -260,10 +471,10 @@ var useGridContext = function useGridContext() {
260
471
  return React.useContext(GridContext);
261
472
  };
262
473
 
263
- var _excluded$2 = ["size"];
474
+ var _excluded$4 = ["size"];
264
475
  var Col = React__default["default"].forwardRef(function (_ref, ref) {
265
476
  var size = _ref.size,
266
- props = _objectWithoutProperties(_ref, _excluded$2);
477
+ props = _objectWithoutProperties(_ref, _excluded$4);
267
478
  var _useGridContext = useGridContext(),
268
479
  columns = _useGridContext.columns,
269
480
  gutters = _useGridContext.gutters,
@@ -310,11 +521,11 @@ Col.propTypes = {
310
521
  orderXl: PropTypes__default["default"].oneOfType([PropTypes__default["default"].number, PropTypes__default["default"].string])
311
522
  };
312
523
 
313
- var _excluded$1 = ["columns", "debug"];
524
+ var _excluded$3 = ["columns", "debug"];
314
525
  var Grid = React__default["default"].forwardRef(function (_ref, ref) {
315
526
  var columns = _ref.columns,
316
527
  debug = _ref.debug,
317
- props = _objectWithoutProperties(_ref, _excluded$1);
528
+ props = _objectWithoutProperties(_ref, _excluded$3);
318
529
  var value = React.useMemo(function () {
319
530
  return {
320
531
  columns: columns,
@@ -340,10 +551,10 @@ Grid.defaultProps = {
340
551
  gutters: 'md'
341
552
  };
342
553
 
343
- var _excluded = ["wrap"];
554
+ var _excluded$2 = ["wrap"];
344
555
  var Row = React__default["default"].forwardRef(function (_ref, ref) {
345
556
  var wrap = _ref.wrap,
346
- props = _objectWithoutProperties(_ref, _excluded);
557
+ props = _objectWithoutProperties(_ref, _excluded$2);
347
558
  var _useGridContext = useGridContext(),
348
559
  gutters = _useGridContext.gutters,
349
560
  debug = _useGridContext.debug;
@@ -376,6 +587,341 @@ Row.propTypes = {
376
587
  wrapXl: PropTypes__default["default"].oneOf(WRAP)
377
588
  };
378
589
 
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);
614
+ };
615
+
616
+ var getPixelsPerFr = function getPixelsPerFr(totalFrs, totalDimension) {
617
+ return totalDimension / totalFrs;
618
+ };
619
+ var convertToPixels = function convertToPixels(values, pixelsPerFr) {
620
+ return Object.entries(values).reduce(function (prev, _ref) {
621
+ var _ref2 = _slicedToArray(_ref, 2),
622
+ key = _ref2[0],
623
+ value = _ref2[1];
624
+ prev[key] = value * pixelsPerFr;
625
+ return prev;
626
+ }, {});
627
+ };
628
+ var PaneProvider = function PaneProvider(_ref3) {
629
+ var totalPanesWidth = _ref3.totalPanesWidth,
630
+ totalPanesHeight = _ref3.totalPanesHeight,
631
+ defaultRowValues = _ref3.defaultRowValues,
632
+ defaultColumnValues = _ref3.defaultColumnValues,
633
+ rowValues = _ref3.rowValues,
634
+ columnValues = _ref3.columnValues,
635
+ onChange = _ref3.onChange,
636
+ children = _ref3.children;
637
+ var isControlled = rowValues !== undefined && rowValues !== null && columnValues !== undefined && columnValues !== null;
638
+ var _useState = React.useState(defaultRowValues || {}),
639
+ _useState2 = _slicedToArray(_useState, 2),
640
+ rowState = _useState2[0],
641
+ setRowState = _useState2[1];
642
+ var _useState3 = React.useState(defaultColumnValues || {}),
643
+ _useState4 = _slicedToArray(_useState3, 2),
644
+ columnState = _useState4[0],
645
+ setColumnState = _useState4[1];
646
+ var rowsTrack = isControlled ? rowValues : rowState;
647
+ var columnsTrack = isControlled ? columnValues : columnState;
648
+ var setRowsTrack = React.useCallback(function (values) {
649
+ if (onChange) {
650
+ return onChange(values(rowsTrack), columnsTrack);
651
+ }
652
+ return setRowState(values);
653
+ }, [onChange, setRowState, columnsTrack, rowsTrack]);
654
+ var setColumnsTrack = React.useCallback(function (values) {
655
+ if (onChange) {
656
+ return onChange(rowsTrack, values(columnsTrack));
657
+ }
658
+ return setColumnState(values);
659
+ }, [onChange, setColumnState, rowsTrack, columnsTrack]);
660
+ var totalFractions = React.useMemo(function () {
661
+ return {
662
+ rows: Object.values(rowsTrack).reduce(function (prev, value) {
663
+ return value + prev;
664
+ }, 0),
665
+ columns: Object.values(columnsTrack).reduce(function (prev, value) {
666
+ return value + prev;
667
+ }, 0)
668
+ };
669
+ }, [rowsTrack, columnsTrack]);
670
+ var pixelsPerFr = React.useMemo(function () {
671
+ return {
672
+ rows: getPixelsPerFr(totalFractions.rows, totalPanesHeight),
673
+ columns: getPixelsPerFr(totalFractions.columns, totalPanesWidth)
674
+ };
675
+ }, [totalFractions, totalPanesHeight, totalPanesWidth]);
676
+ var layoutStateInPixels = React.useMemo(function () {
677
+ return {
678
+ rows: convertToPixels(rowsTrack, pixelsPerFr.rows),
679
+ columns: convertToPixels(columnsTrack, pixelsPerFr.columns)
680
+ };
681
+ }, [rowsTrack, columnsTrack, pixelsPerFr]);
682
+ var layoutIndices = React.useMemo(function () {
683
+ var rowArray = Object.keys(rowsTrack);
684
+ var columnArray = Object.keys(columnsTrack);
685
+ var rows = rowArray.reduce(function (prev, key, index) {
686
+ prev[key] = index;
687
+ return prev;
688
+ }, {});
689
+ var columns = columnArray.reduce(function (prev, key, index) {
690
+ prev[key] = index;
691
+ return prev;
692
+ }, {});
693
+ return {
694
+ rows: rows,
695
+ columns: columns,
696
+ rowArray: rowArray,
697
+ columnArray: columnArray
698
+ };
699
+ }, [rowsTrack, columnsTrack]);
700
+ var setRowValue = React.useCallback(function (isTop, id, value) {
701
+ var rows = layoutIndices.rows,
702
+ rowArray = layoutIndices.rowArray;
703
+ var stealFromTraversal = isTop ? -1 : 1;
704
+ var addToTraversal = 0;
705
+ setRowsTrack(function (state) {
706
+ var oldValue = rowsTrack[id];
707
+ var stealFromIndex = rows[id] + stealFromTraversal;
708
+ var addToIndex = rows[id] + addToTraversal;
709
+ var stealFromKey = rowArray[stealFromIndex];
710
+ var addToKey = rowArray[addToIndex];
711
+ var difference = oldValue - value;
712
+ var nextState = _objectSpread2({}, state);
713
+ nextState[addToKey] = rowsTrack[addToKey] - difference;
714
+ nextState[stealFromKey] = rowsTrack[stealFromKey] + difference;
715
+ return nextState;
716
+ });
717
+ }, [layoutIndices, rowsTrack, setRowsTrack]);
718
+ var setColumnValue = React.useCallback(function (isStart, id, value) {
719
+ var columns = layoutIndices.columns,
720
+ columnArray = layoutIndices.columnArray;
721
+ var stealFromTraversal = isStart ? 0 : 1;
722
+ var addToTraversal = isStart ? -1 : 0;
723
+ setColumnsTrack(function (state) {
724
+ var stealFromIndex = columns[id] + stealFromTraversal;
725
+ var addToIndex = columns[id] + addToTraversal;
726
+ var oldValue = columnsTrack[id];
727
+ var stealFromKey = columnArray[stealFromIndex];
728
+ var addToKey = columnArray[addToIndex];
729
+ var difference = oldValue - value;
730
+ var nextState = _objectSpread2({}, state);
731
+ nextState[addToKey] = columnsTrack[addToKey] - difference;
732
+ nextState[stealFromKey] = columnsTrack[stealFromKey] + difference;
733
+ return nextState;
734
+ });
735
+ }, [layoutIndices, columnsTrack, setColumnsTrack]);
736
+ var getColumnValue = React.useCallback(function (splitterKey, isPixels) {
737
+ if (isPixels) {
738
+ return layoutStateInPixels.columns[splitterKey];
739
+ }
740
+ return columnsTrack[splitterKey];
741
+ }, [columnsTrack, layoutStateInPixels]);
742
+ var getRowValue = React.useCallback(function (splitterKey, isPixels) {
743
+ if (isPixels) {
744
+ return layoutStateInPixels.rows[splitterKey];
745
+ }
746
+ return rowsTrack[splitterKey];
747
+ }, [rowsTrack, layoutStateInPixels]);
748
+ var getGridTemplateColumns = React.useCallback(function (isPixels) {
749
+ var columnArray = layoutIndices.columnArray;
750
+ if (isPixels) {
751
+ return columnArray.map(function (col) {
752
+ return "".concat(layoutStateInPixels.columns[col], "px");
753
+ }).join(' ');
754
+ }
755
+ return columnArray.map(function (col) {
756
+ return "".concat(columnsTrack[col], "fr");
757
+ }).join(' ');
758
+ }, [layoutIndices, columnsTrack, layoutStateInPixels]);
759
+ var getGridTemplateRows = React.useCallback(function (isPixels) {
760
+ var rowArray = layoutIndices.rowArray;
761
+ if (isPixels) {
762
+ return rowArray.map(function (row) {
763
+ return "".concat(layoutStateInPixels.rows[row], "px");
764
+ }).join(' ');
765
+ }
766
+ return rowArray.map(function (row) {
767
+ return "".concat(rowsTrack[row], "fr");
768
+ }).join(' ');
769
+ }, [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
785
+ }, children === null || children === void 0 ? void 0 : children({
786
+ getRowValue: getRowValue,
787
+ getColumnValue: getColumnValue,
788
+ getGridTemplateColumns: getGridTemplateColumns,
789
+ getGridTemplateRows: getGridTemplateRows
790
+ }));
791
+ };
792
+ PaneProvider.displayName = 'PaneProvider';
793
+ PaneProvider.propTypes = {
794
+ totalPanesWidth: PropTypes__default["default"].number.isRequired,
795
+ totalPanesHeight: PropTypes__default["default"].number.isRequired,
796
+ defaultRowValues: PropTypes__default["default"].object,
797
+ defaultColumnValues: PropTypes__default["default"].object,
798
+ rowValues: PropTypes__default["default"].object,
799
+ columnValues: PropTypes__default["default"].object,
800
+ onChange: PropTypes__default["default"].func,
801
+ children: PropTypes__default["default"].func
802
+ };
803
+
804
+ var PaneContext = React.createContext({
805
+ setId: function setId() {
806
+ return undefined;
807
+ }
808
+ });
809
+ var usePaneContext = function usePaneContext() {
810
+ return React.useContext(PaneContext);
811
+ };
812
+
813
+ var _excluded$1 = ["layoutKey", "min", "max", "orientation"];
814
+ var orientationToPosition = {
815
+ start: containerSplitter.SplitterPosition.TRAILS,
816
+ end: containerSplitter.SplitterPosition.TRAILS,
817
+ top: containerSplitter.SplitterPosition.LEADS,
818
+ bottom: containerSplitter.SplitterPosition.TRAILS
819
+ };
820
+ var paneToSplitterOrientation = {
821
+ start: containerSplitter.SplitterOrientation.VERTICAL,
822
+ end: containerSplitter.SplitterOrientation.VERTICAL,
823
+ top: containerSplitter.SplitterOrientation.HORIZONTAL,
824
+ bottom: containerSplitter.SplitterOrientation.HORIZONTAL
825
+ };
826
+ var orientationToDimension = {
827
+ start: 'columns',
828
+ end: 'columns',
829
+ top: 'rows',
830
+ bottom: 'rows'
831
+ };
832
+ var SplitterComponent = React.forwardRef(function (_ref, ref) {
833
+ var layoutKey = _ref.layoutKey,
834
+ min = _ref.min,
835
+ max = _ref.max,
836
+ orientation = _ref.orientation,
837
+ props = _objectWithoutProperties(_ref, _excluded$1);
838
+ var splitterContext = useSplitterContext();
839
+ var paneContext = usePaneContext();
840
+ var themeContext = React.useContext(styled.ThemeContext);
841
+ var position = orientationToPosition[orientation];
842
+ var isRow = orientationToDimension[orientation] === 'rows';
843
+ var splitterOrientation = paneToSplitterOrientation[orientation];
844
+ var pixelsPerFr = splitterContext.pixelsPerFr[orientationToDimension[orientation]];
845
+ var _useSplitter = containerSplitter.useSplitter({
846
+ type: containerSplitter.SplitterType.VARIABLE,
847
+ orientation: splitterOrientation,
848
+ position: position,
849
+ min: min * pixelsPerFr,
850
+ max: max * pixelsPerFr,
851
+ rtl: themeContext.rtl,
852
+ environment: window,
853
+ onChange: function onChange(valueNow) {
854
+ if (isRow) {
855
+ return splitterContext.setRowValue(orientation === 'top', layoutKey, valueNow / pixelsPerFr);
856
+ }
857
+ return splitterContext.setColumnValue(orientation === 'start', layoutKey, valueNow / pixelsPerFr);
858
+ },
859
+ valueNow: isRow ? splitterContext.getRowValue(layoutKey, true) : splitterContext.getColumnValue(layoutKey, true)
860
+ }),
861
+ getSeparatorProps = _useSplitter.getSeparatorProps,
862
+ getPrimaryPaneProps = _useSplitter.getPrimaryPaneProps;
863
+ React.useEffect(function () {
864
+ if (!paneContext.id) {
865
+ paneContext.setId(getPrimaryPaneProps().id);
866
+ }
867
+ }, [paneContext, getPrimaryPaneProps]);
868
+ var separatorProps = getSeparatorProps({
869
+ 'aria-controls': paneContext.id
870
+ });
871
+ return React__default["default"].createElement(StyledPaneSplitter, _extends({
872
+ orientation: orientation
873
+ }, separatorProps, props, {
874
+ ref: mergeRefs__default["default"]([separatorProps.ref, ref])
875
+ }));
876
+ });
877
+ SplitterComponent.displayName = 'Pane.Splitter';
878
+ SplitterComponent.propTypes = {
879
+ layoutKey: PropTypes__default["default"].string.isRequired,
880
+ min: PropTypes__default["default"].number.isRequired,
881
+ max: PropTypes__default["default"].number.isRequired,
882
+ orientation: PropTypes__default["default"].oneOf(ORIENTATION)
883
+ };
884
+ SplitterComponent.defaultProps = {
885
+ orientation: 'end'
886
+ };
887
+ var Splitter = SplitterComponent;
888
+
889
+ var ContentComponent = React.forwardRef(function (props, ref) {
890
+ return React__default["default"].createElement(StyledPaneContent, _extends({
891
+ ref: ref
892
+ }, props));
893
+ });
894
+ ContentComponent.displayName = 'Pane.Content';
895
+ var Content = ContentComponent;
896
+
897
+ var _excluded = ["children"];
898
+ var PaneComponent = React.forwardRef(function (_ref, ref) {
899
+ var children = _ref.children,
900
+ props = _objectWithoutProperties(_ref, _excluded);
901
+ var _useState = React.useState(),
902
+ _useState2 = _slicedToArray(_useState, 2),
903
+ paneId = _useState2[0],
904
+ setPaneId = _useState2[1];
905
+ var paneContext = React.useMemo(function () {
906
+ return {
907
+ id: paneId,
908
+ setId: function setId(id) {
909
+ return setPaneId(id);
910
+ }
911
+ };
912
+ }, [paneId]);
913
+ return React__default["default"].createElement(PaneContext.Provider, {
914
+ value: paneContext
915
+ }, React__default["default"].createElement(StyledPane, _extends({
916
+ id: paneId,
917
+ ref: ref
918
+ }, props), children));
919
+ });
920
+ PaneComponent.displayName = 'Pane';
921
+ var Pane = PaneComponent;
922
+ Pane.Content = Content;
923
+ Pane.Splitter = Splitter;
924
+
379
925
  exports.ARRAY_ALIGN_ITEMS = ALIGN_ITEMS;
380
926
  exports.ARRAY_ALIGN_SELF = ALIGN_SELF;
381
927
  exports.ARRAY_DIRECTION = DIRECTION;
@@ -385,4 +931,6 @@ exports.ARRAY_TEXT_ALIGN = TEXT_ALIGN;
385
931
  exports.ARRAY_WRAP = WRAP;
386
932
  exports.Col = Col;
387
933
  exports.Grid = Grid;
934
+ exports.Pane = Pane;
935
+ exports.PaneProvider = PaneProvider;
388
936
  exports.Row = Row;