@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 +6 -2
- package/dist/index.cjs.js +235 -97
- package/dist/index.esm.js +235 -97
- package/dist/typings/elements/pane/Pane.d.ts +2 -0
- package/dist/typings/elements/pane/PaneProvider.d.ts +2 -1
- package/dist/typings/elements/pane/components/SplitterButton.d.ts +12 -0
- package/dist/typings/index.d.ts +1 -1
- package/dist/typings/styled/index.d.ts +1 -0
- package/dist/typings/styled/pane/StyledPaneSplitter.d.ts +4 -0
- package/dist/typings/styled/pane/StyledPaneSplitterButton.d.ts +19 -0
- package/dist/typings/types/index.d.ts +16 -3
- package/dist/typings/utils/{useSplitterContext.d.ts → usePaneProviderContext.d.ts} +9 -7
- package/dist/typings/utils/usePaneSplitterContext.d.ts +23 -0
- package/package.json +7 -3
package/dist/index.esm.js
CHANGED
|
@@ -10,8 +10,11 @@ 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 { ChevronButton } from '@zendeskgarden/react-buttons';
|
|
14
|
+
import { useId, composeEventHandlers } from '@zendeskgarden/container-utilities';
|
|
13
15
|
import mergeRefs from 'react-merge-refs';
|
|
14
16
|
import { SplitterPosition, SplitterOrientation, useSplitter, SplitterType } from '@zendeskgarden/container-splitter';
|
|
17
|
+
import { Tooltip } from '@zendeskgarden/react-tooltips';
|
|
15
18
|
|
|
16
19
|
function ownKeys(object, enumerableOnly) {
|
|
17
20
|
var keys = Object.keys(object);
|
|
@@ -176,7 +179,7 @@ var SPACE = [false, 'xxs', 'xs', 'sm', 'md', 'lg', 'xl', 'xxl'];
|
|
|
176
179
|
var WRAP = ['nowrap', 'wrap', 'wrap-reverse'];
|
|
177
180
|
var ORIENTATION = ['top', 'bottom', 'start', 'end'];
|
|
178
181
|
|
|
179
|
-
var COMPONENT_ID$
|
|
182
|
+
var COMPONENT_ID$6 = 'grid.col';
|
|
180
183
|
var colorStyles$3 = function colorStyles(props) {
|
|
181
184
|
var backgroundColor = getColor('primaryHue', 600, props.theme, 0.1);
|
|
182
185
|
return css(["background-clip:content-box;background-color:", ";"], backgroundColor);
|
|
@@ -222,20 +225,20 @@ var flexStyles$1 = function flexStyles(size, alignSelf, textAlign, offset, order
|
|
|
222
225
|
var mediaStyles$1 = function mediaStyles(minWidth, size, alignSelf, textAlign, offset, order, props) {
|
|
223
226
|
return css(["@media (min-width:", "){", ";}"], minWidth, flexStyles$1(size, alignSelf, textAlign, offset, order, props));
|
|
224
227
|
};
|
|
225
|
-
var sizeStyles$
|
|
228
|
+
var sizeStyles$4 = function sizeStyles(props) {
|
|
226
229
|
var padding = props.gutters ? math("".concat(props.theme.space[props.gutters], " / 2")) : 0;
|
|
227
230
|
return css(["padding-right:", ";padding-left:", ";"], padding, padding);
|
|
228
231
|
};
|
|
229
232
|
var StyledCol = styled.div.attrs({
|
|
230
|
-
'data-garden-id': COMPONENT_ID$
|
|
231
|
-
'data-garden-version': '8.
|
|
233
|
+
'data-garden-id': COMPONENT_ID$6,
|
|
234
|
+
'data-garden-version': '8.53.1'
|
|
232
235
|
}).withConfig({
|
|
233
236
|
displayName: "StyledCol",
|
|
234
237
|
componentId: "sc-inuw62-0"
|
|
235
238
|
})(["box-sizing:border-box;width:100%;", ";", ";", ";", ";", ";", ";", ";", ";", ";"], function (props) {
|
|
236
239
|
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);
|
|
237
240
|
}, function (props) {
|
|
238
|
-
return sizeStyles$
|
|
241
|
+
return sizeStyles$4(props);
|
|
239
242
|
}, function (props) {
|
|
240
243
|
return props.debug && colorStyles$3(props);
|
|
241
244
|
}, function (props) {
|
|
@@ -249,44 +252,44 @@ var StyledCol = styled.div.attrs({
|
|
|
249
252
|
}, function (props) {
|
|
250
253
|
return mediaStyles$1(props.theme.breakpoints.xl, props.xl, props.alignSelfXl, props.textAlignXl, props.offsetXl, props.orderXl, props);
|
|
251
254
|
}, function (props) {
|
|
252
|
-
return retrieveComponentStyles(COMPONENT_ID$
|
|
255
|
+
return retrieveComponentStyles(COMPONENT_ID$6, props);
|
|
253
256
|
});
|
|
254
257
|
StyledCol.defaultProps = {
|
|
255
258
|
columns: 12,
|
|
256
259
|
theme: DEFAULT_THEME
|
|
257
260
|
};
|
|
258
261
|
|
|
259
|
-
var COMPONENT_ID$
|
|
262
|
+
var COMPONENT_ID$5 = 'grid.grid';
|
|
260
263
|
var colorStyles$2 = function colorStyles(props) {
|
|
261
264
|
var borderColor = getColor(props.theme.palette.crimson, 400, props.theme, 0.5);
|
|
262
265
|
var borderWidth = math("".concat(props.theme.borderWidths.sm, " * 2"));
|
|
263
266
|
return css(["box-shadow:-", " 0 0 0 ", ",", " 0 0 0 ", ";"], borderWidth, borderColor, borderWidth, borderColor);
|
|
264
267
|
};
|
|
265
|
-
var sizeStyles$
|
|
268
|
+
var sizeStyles$3 = function sizeStyles(props) {
|
|
266
269
|
var padding = props.gutters ? math("".concat(props.theme.space[props.gutters], " / 2")) : 0;
|
|
267
270
|
return css(["padding-right:", ";padding-left:", ";"], padding, padding);
|
|
268
271
|
};
|
|
269
272
|
var StyledGrid = styled.div.attrs({
|
|
270
|
-
'data-garden-id': COMPONENT_ID$
|
|
271
|
-
'data-garden-version': '8.
|
|
273
|
+
'data-garden-id': COMPONENT_ID$5,
|
|
274
|
+
'data-garden-version': '8.53.1'
|
|
272
275
|
}).withConfig({
|
|
273
276
|
displayName: "StyledGrid",
|
|
274
277
|
componentId: "sc-oxgg5i-0"
|
|
275
278
|
})(["direction:", ";margin-right:auto;margin-left:auto;width:100%;box-sizing:border-box;", ";", ";", ";"], function (props) {
|
|
276
279
|
return props.theme.rtl && 'rtl';
|
|
277
280
|
}, function (props) {
|
|
278
|
-
return sizeStyles$
|
|
281
|
+
return sizeStyles$3(props);
|
|
279
282
|
}, function (props) {
|
|
280
283
|
return props.debug && colorStyles$2(props);
|
|
281
284
|
}, function (props) {
|
|
282
|
-
return retrieveComponentStyles(COMPONENT_ID$
|
|
285
|
+
return retrieveComponentStyles(COMPONENT_ID$5, props);
|
|
283
286
|
});
|
|
284
287
|
StyledGrid.defaultProps = {
|
|
285
288
|
gutters: 'md',
|
|
286
289
|
theme: DEFAULT_THEME
|
|
287
290
|
};
|
|
288
291
|
|
|
289
|
-
var COMPONENT_ID$
|
|
292
|
+
var COMPONENT_ID$4 = 'grid.row';
|
|
290
293
|
var colorStyles$1 = function colorStyles(props) {
|
|
291
294
|
var borderColor = getColor(props.theme.palette.mint, 600, props.theme, 0.5);
|
|
292
295
|
var borderWidth = props.theme.borderWidths.sm;
|
|
@@ -312,20 +315,20 @@ var flexStyles = function flexStyles(alignItems, justifyContent, wrap) {
|
|
|
312
315
|
var mediaStyles = function mediaStyles(minWidth, alignItems, justifyContent, wrap) {
|
|
313
316
|
return css(["@media (min-width:", "){", ";}"], minWidth, flexStyles(alignItems, justifyContent, wrap));
|
|
314
317
|
};
|
|
315
|
-
var sizeStyles$
|
|
318
|
+
var sizeStyles$2 = function sizeStyles(props) {
|
|
316
319
|
var margin = props.gutters ? math("".concat(props.theme.space[props.gutters], " / 2")) : 0;
|
|
317
320
|
return css(["margin-right:-", ";margin-left:-", ";"], margin, margin);
|
|
318
321
|
};
|
|
319
322
|
var StyledRow = styled.div.attrs({
|
|
320
|
-
'data-garden-id': COMPONENT_ID$
|
|
321
|
-
'data-garden-version': '8.
|
|
323
|
+
'data-garden-id': COMPONENT_ID$4,
|
|
324
|
+
'data-garden-version': '8.53.1'
|
|
322
325
|
}).withConfig({
|
|
323
326
|
displayName: "StyledRow",
|
|
324
327
|
componentId: "sc-xjsdg1-0"
|
|
325
328
|
})(["display:flex;box-sizing:border-box;", " ", ";", ";", ";", ";", ";", ";", ";", ";"], function (props) {
|
|
326
329
|
return flexStyles(props.alignItems, props.justifyContent, props.wrapAll);
|
|
327
330
|
}, function (props) {
|
|
328
|
-
return sizeStyles$
|
|
331
|
+
return sizeStyles$2(props);
|
|
329
332
|
}, function (props) {
|
|
330
333
|
return props.debug && colorStyles$1(props);
|
|
331
334
|
}, function (props) {
|
|
@@ -339,42 +342,42 @@ var StyledRow = styled.div.attrs({
|
|
|
339
342
|
}, function (props) {
|
|
340
343
|
return mediaStyles(props.theme.breakpoints.xl, props.alignItemsXl, props.justifyContentXl, props.wrapXl);
|
|
341
344
|
}, function (props) {
|
|
342
|
-
return retrieveComponentStyles(COMPONENT_ID$
|
|
345
|
+
return retrieveComponentStyles(COMPONENT_ID$4, props);
|
|
343
346
|
});
|
|
344
347
|
StyledRow.defaultProps = {
|
|
345
348
|
wrapAll: 'wrap',
|
|
346
349
|
theme: DEFAULT_THEME
|
|
347
350
|
};
|
|
348
351
|
|
|
349
|
-
var COMPONENT_ID$
|
|
352
|
+
var COMPONENT_ID$3 = 'pane';
|
|
350
353
|
var StyledPane = styled.div.attrs({
|
|
351
|
-
'data-garden-id': COMPONENT_ID$
|
|
352
|
-
'data-garden-version': '8.
|
|
354
|
+
'data-garden-id': COMPONENT_ID$3,
|
|
355
|
+
'data-garden-version': '8.53.1'
|
|
353
356
|
}).withConfig({
|
|
354
357
|
displayName: "StyledPane",
|
|
355
358
|
componentId: "sc-1ltjst7-0"
|
|
356
359
|
})(["position:relative;min-width:0;min-height:0;", ";"], function (props) {
|
|
357
|
-
return retrieveComponentStyles(COMPONENT_ID$
|
|
360
|
+
return retrieveComponentStyles(COMPONENT_ID$3, props);
|
|
358
361
|
});
|
|
359
362
|
StyledPane.defaultProps = {
|
|
360
363
|
theme: DEFAULT_THEME
|
|
361
364
|
};
|
|
362
365
|
|
|
363
|
-
var COMPONENT_ID$
|
|
366
|
+
var COMPONENT_ID$2 = 'pane.content';
|
|
364
367
|
var StyledPaneContent = styled.div.attrs({
|
|
365
|
-
'data-garden-id': COMPONENT_ID$
|
|
366
|
-
'data-garden-version': '8.
|
|
368
|
+
'data-garden-id': COMPONENT_ID$2,
|
|
369
|
+
'data-garden-version': '8.53.1'
|
|
367
370
|
}).withConfig({
|
|
368
371
|
displayName: "StyledPaneContent",
|
|
369
372
|
componentId: "sc-1b38mbh-0"
|
|
370
373
|
})(["height:100%;overflow:auto;", ";"], function (props) {
|
|
371
|
-
return retrieveComponentStyles(COMPONENT_ID$
|
|
374
|
+
return retrieveComponentStyles(COMPONENT_ID$2, props);
|
|
372
375
|
});
|
|
373
376
|
StyledPaneContent.defaultProps = {
|
|
374
377
|
theme: DEFAULT_THEME
|
|
375
378
|
};
|
|
376
379
|
|
|
377
|
-
var COMPONENT_ID = 'pane.splitter';
|
|
380
|
+
var COMPONENT_ID$1 = 'pane.splitter';
|
|
378
381
|
var colorStyles = function colorStyles(props) {
|
|
379
382
|
var color = getColor('neutralHue', 300, props.theme);
|
|
380
383
|
var hoverColor = getColor('primaryHue', 600, props.theme);
|
|
@@ -382,7 +385,7 @@ var colorStyles = function colorStyles(props) {
|
|
|
382
385
|
var boxShadow = props.theme.shadows.md(rgba(hoverColor, 0.35));
|
|
383
386
|
return 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);
|
|
384
387
|
};
|
|
385
|
-
var sizeStyles = function sizeStyles(props) {
|
|
388
|
+
var sizeStyles$1 = function sizeStyles(props) {
|
|
386
389
|
var size = math("".concat(props.theme.shadowWidths.md, " * 2"));
|
|
387
390
|
var offset = math("-".concat(size, " / 2"));
|
|
388
391
|
var cursor;
|
|
@@ -438,21 +441,80 @@ var sizeStyles = function sizeStyles(props) {
|
|
|
438
441
|
}
|
|
439
442
|
break;
|
|
440
443
|
}
|
|
441
|
-
return css(["
|
|
444
|
+
return 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', math("".concat(props.theme.borderWidths.sm, " * 2")), props.theme.borderRadii.md);
|
|
442
445
|
};
|
|
443
446
|
var StyledPaneSplitter = styled.div.attrs({
|
|
444
|
-
'data-garden-id': COMPONENT_ID,
|
|
445
|
-
'data-garden-version': '8.
|
|
447
|
+
'data-garden-id': COMPONENT_ID$1,
|
|
448
|
+
'data-garden-version': '8.53.1'
|
|
446
449
|
}).withConfig({
|
|
447
450
|
displayName: "StyledPaneSplitter",
|
|
448
451
|
componentId: "sc-jylemn-0"
|
|
449
|
-
})(["position:absolute;z-index:1;", ";&:
|
|
450
|
-
return retrieveComponentStyles(COMPONENT_ID, props);
|
|
452
|
+
})(["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) {
|
|
453
|
+
return retrieveComponentStyles(COMPONENT_ID$1, props);
|
|
451
454
|
});
|
|
452
455
|
StyledPaneSplitter.defaultProps = {
|
|
453
456
|
theme: DEFAULT_THEME
|
|
454
457
|
};
|
|
455
458
|
|
|
459
|
+
var COMPONENT_ID = 'pane.splitter_button';
|
|
460
|
+
var transformStyles = function transformStyles(props) {
|
|
461
|
+
var degrees = 0;
|
|
462
|
+
if (props.isRotated) {
|
|
463
|
+
degrees = props.theme.rtl ? -180 : 180;
|
|
464
|
+
}
|
|
465
|
+
if (props.orientation === 'end') {
|
|
466
|
+
degrees += props.theme.rtl ? -90 : 90;
|
|
467
|
+
} else if (props.orientation === 'start') {
|
|
468
|
+
degrees += props.theme.rtl ? 90 : -90;
|
|
469
|
+
} else if (props.orientation === 'bottom') {
|
|
470
|
+
degrees += 180;
|
|
471
|
+
}
|
|
472
|
+
return css(["& > svg{transform:rotate(", "deg);}"], degrees);
|
|
473
|
+
};
|
|
474
|
+
var sizeStyles = function sizeStyles(props) {
|
|
475
|
+
var size = "".concat(props.theme.space.base * 6, "px");
|
|
476
|
+
var isVertical = props.orientation === 'start' || props.orientation === 'end';
|
|
477
|
+
var top;
|
|
478
|
+
var left;
|
|
479
|
+
var right;
|
|
480
|
+
var bottom;
|
|
481
|
+
if (props.placement === 'start') {
|
|
482
|
+
if (isVertical) {
|
|
483
|
+
top = size;
|
|
484
|
+
} else if (props.theme.rtl) {
|
|
485
|
+
right = size;
|
|
486
|
+
} else {
|
|
487
|
+
left = size;
|
|
488
|
+
}
|
|
489
|
+
} else if (props.placement === 'end') {
|
|
490
|
+
if (isVertical) {
|
|
491
|
+
bottom = size;
|
|
492
|
+
} else if (props.theme.rtl) {
|
|
493
|
+
left = size;
|
|
494
|
+
} else {
|
|
495
|
+
right = size;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
return css(["top:", ";right:", ";bottom:", ";left:", ";width:", ";min-width:", ";height:", ";"], top, right, bottom, left, size, size, size);
|
|
499
|
+
};
|
|
500
|
+
var StyledPaneSplitterButton = styled(ChevronButton).attrs({
|
|
501
|
+
'data-garden-id': COMPONENT_ID,
|
|
502
|
+
'data-garden-version': '8.53.1',
|
|
503
|
+
isBasic: true,
|
|
504
|
+
isPill: true,
|
|
505
|
+
size: 'small'
|
|
506
|
+
}).withConfig({
|
|
507
|
+
displayName: "StyledPaneSplitterButton",
|
|
508
|
+
componentId: "sc-zh032e-0"
|
|
509
|
+
})(["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) {
|
|
510
|
+
return props.theme.colors.background;
|
|
511
|
+
}, function (props) {
|
|
512
|
+
return retrieveComponentStyles(COMPONENT_ID, props);
|
|
513
|
+
});
|
|
514
|
+
StyledPaneSplitterButton.defaultProps = {
|
|
515
|
+
theme: DEFAULT_THEME
|
|
516
|
+
};
|
|
517
|
+
|
|
456
518
|
var GridContext = createContext({
|
|
457
519
|
gutters: 'md'
|
|
458
520
|
});
|
|
@@ -576,30 +638,14 @@ Row.propTypes = {
|
|
|
576
638
|
wrapXl: PropTypes.oneOf(WRAP)
|
|
577
639
|
};
|
|
578
640
|
|
|
579
|
-
var
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
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);
|
|
641
|
+
var PaneProviderContext = createContext({});
|
|
642
|
+
var usePaneProviderContextData = function usePaneProviderContextData(providerId) {
|
|
643
|
+
var context = useContext(PaneProviderContext);
|
|
644
|
+
var id = providerId || context.providerId;
|
|
645
|
+
return id && context.contextData ? context.contextData[id] : undefined;
|
|
646
|
+
};
|
|
647
|
+
var usePaneProviderContext = function usePaneProviderContext() {
|
|
648
|
+
return useContext(PaneProviderContext);
|
|
603
649
|
};
|
|
604
650
|
|
|
605
651
|
var getPixelsPerFr = function getPixelsPerFr(totalFrs, totalDimension) {
|
|
@@ -615,7 +661,8 @@ var convertToPixels = function convertToPixels(values, pixelsPerFr) {
|
|
|
615
661
|
}, {});
|
|
616
662
|
};
|
|
617
663
|
var PaneProvider = function PaneProvider(_ref3) {
|
|
618
|
-
var
|
|
664
|
+
var id = _ref3.id,
|
|
665
|
+
totalPanesWidth = _ref3.totalPanesWidth,
|
|
619
666
|
totalPanesHeight = _ref3.totalPanesHeight,
|
|
620
667
|
defaultRowValues = _ref3.defaultRowValues,
|
|
621
668
|
defaultColumnValues = _ref3.defaultColumnValues,
|
|
@@ -635,17 +682,17 @@ var PaneProvider = function PaneProvider(_ref3) {
|
|
|
635
682
|
var rowsTrack = isControlled ? rowValues : rowState;
|
|
636
683
|
var columnsTrack = isControlled ? columnValues : columnState;
|
|
637
684
|
var setRowsTrack = useCallback(function (values) {
|
|
638
|
-
if (onChange) {
|
|
685
|
+
if (isControlled && onChange) {
|
|
639
686
|
return onChange(values(rowsTrack), columnsTrack);
|
|
640
687
|
}
|
|
641
688
|
return setRowState(values);
|
|
642
|
-
}, [onChange, setRowState, columnsTrack, rowsTrack]);
|
|
689
|
+
}, [isControlled, onChange, setRowState, columnsTrack, rowsTrack]);
|
|
643
690
|
var setColumnsTrack = useCallback(function (values) {
|
|
644
|
-
if (onChange) {
|
|
691
|
+
if (isControlled && onChange) {
|
|
645
692
|
return onChange(rowsTrack, values(columnsTrack));
|
|
646
693
|
}
|
|
647
694
|
return setColumnState(values);
|
|
648
|
-
}, [onChange, setColumnState, rowsTrack, columnsTrack]);
|
|
695
|
+
}, [isControlled, onChange, setColumnState, rowsTrack, columnsTrack]);
|
|
649
696
|
var totalFractions = useMemo(function () {
|
|
650
697
|
return {
|
|
651
698
|
rows: Object.values(rowsTrack).reduce(function (prev, value) {
|
|
@@ -686,15 +733,15 @@ var PaneProvider = function PaneProvider(_ref3) {
|
|
|
686
733
|
columnArray: columnArray
|
|
687
734
|
};
|
|
688
735
|
}, [rowsTrack, columnsTrack]);
|
|
689
|
-
var setRowValue = useCallback(function (isTop,
|
|
736
|
+
var setRowValue = useCallback(function (isTop, splitterId, value) {
|
|
690
737
|
var rows = layoutIndices.rows,
|
|
691
738
|
rowArray = layoutIndices.rowArray;
|
|
692
739
|
var stealFromTraversal = isTop ? -1 : 1;
|
|
693
740
|
var addToTraversal = 0;
|
|
694
741
|
setRowsTrack(function (state) {
|
|
695
|
-
var oldValue = rowsTrack[
|
|
696
|
-
var stealFromIndex = rows[
|
|
697
|
-
var addToIndex = rows[
|
|
742
|
+
var oldValue = rowsTrack[splitterId];
|
|
743
|
+
var stealFromIndex = rows[splitterId] + stealFromTraversal;
|
|
744
|
+
var addToIndex = rows[splitterId] + addToTraversal;
|
|
698
745
|
var stealFromKey = rowArray[stealFromIndex];
|
|
699
746
|
var addToKey = rowArray[addToIndex];
|
|
700
747
|
var difference = oldValue - value;
|
|
@@ -704,15 +751,15 @@ var PaneProvider = function PaneProvider(_ref3) {
|
|
|
704
751
|
return nextState;
|
|
705
752
|
});
|
|
706
753
|
}, [layoutIndices, rowsTrack, setRowsTrack]);
|
|
707
|
-
var setColumnValue = useCallback(function (isStart,
|
|
754
|
+
var setColumnValue = useCallback(function (isStart, splitterId, value) {
|
|
708
755
|
var columns = layoutIndices.columns,
|
|
709
756
|
columnArray = layoutIndices.columnArray;
|
|
710
|
-
var stealFromTraversal = isStart ?
|
|
711
|
-
var addToTraversal =
|
|
757
|
+
var stealFromTraversal = isStart ? -1 : 1;
|
|
758
|
+
var addToTraversal = 0;
|
|
712
759
|
setColumnsTrack(function (state) {
|
|
713
|
-
var stealFromIndex = columns[
|
|
714
|
-
var addToIndex = columns[
|
|
715
|
-
var oldValue = columnsTrack[
|
|
760
|
+
var stealFromIndex = columns[splitterId] + stealFromTraversal;
|
|
761
|
+
var addToIndex = columns[splitterId] + addToTraversal;
|
|
762
|
+
var oldValue = columnsTrack[splitterId];
|
|
716
763
|
var stealFromKey = columnArray[stealFromIndex];
|
|
717
764
|
var addToKey = columnArray[addToIndex];
|
|
718
765
|
var difference = oldValue - value;
|
|
@@ -756,22 +803,28 @@ var PaneProvider = function PaneProvider(_ref3) {
|
|
|
756
803
|
return "".concat(rowsTrack[row], "fr");
|
|
757
804
|
}).join(' ');
|
|
758
805
|
}, [layoutIndices, rowsTrack, layoutStateInPixels]);
|
|
759
|
-
var
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
806
|
+
var providerId = useId(id);
|
|
807
|
+
var parentPaneProviderContext = usePaneProviderContext();
|
|
808
|
+
var paneProviderContext = useMemo(function () {
|
|
809
|
+
return providerId ? {
|
|
810
|
+
providerId: providerId,
|
|
811
|
+
contextData: _objectSpread2(_objectSpread2({}, parentPaneProviderContext.contextData), {}, _defineProperty({}, providerId, {
|
|
812
|
+
columnState: columnState,
|
|
813
|
+
rowState: rowState,
|
|
814
|
+
setRowValue: setRowValue,
|
|
815
|
+
setColumnValue: setColumnValue,
|
|
816
|
+
getRowValue: getRowValue,
|
|
817
|
+
getColumnValue: getColumnValue,
|
|
818
|
+
totalPanesHeight: totalPanesHeight,
|
|
819
|
+
totalPanesWidth: totalPanesWidth,
|
|
820
|
+
pixelsPerFr: pixelsPerFr
|
|
821
|
+
}))
|
|
822
|
+
} : {};
|
|
823
|
+
}, [providerId, parentPaneProviderContext, rowState, columnState, setRowValue, setColumnValue, getRowValue, getColumnValue, totalPanesHeight, totalPanesWidth, pixelsPerFr]);
|
|
824
|
+
return React.createElement(PaneProviderContext.Provider, {
|
|
825
|
+
value: paneProviderContext
|
|
774
826
|
}, children === null || children === void 0 ? void 0 : children({
|
|
827
|
+
id: providerId,
|
|
775
828
|
getRowValue: getRowValue,
|
|
776
829
|
getColumnValue: getColumnValue,
|
|
777
830
|
getGridTemplateColumns: getGridTemplateColumns,
|
|
@@ -780,6 +833,7 @@ var PaneProvider = function PaneProvider(_ref3) {
|
|
|
780
833
|
};
|
|
781
834
|
PaneProvider.displayName = 'PaneProvider';
|
|
782
835
|
PaneProvider.propTypes = {
|
|
836
|
+
id: PropTypes.string,
|
|
783
837
|
totalPanesWidth: PropTypes.number.isRequired,
|
|
784
838
|
totalPanesHeight: PropTypes.number.isRequired,
|
|
785
839
|
defaultRowValues: PropTypes.object,
|
|
@@ -799,9 +853,21 @@ var usePaneContext = function usePaneContext() {
|
|
|
799
853
|
return useContext(PaneContext);
|
|
800
854
|
};
|
|
801
855
|
|
|
802
|
-
var
|
|
856
|
+
var PaneSplitterContext = createContext({
|
|
857
|
+
orientation: 'start',
|
|
858
|
+
min: 0,
|
|
859
|
+
max: 0,
|
|
860
|
+
layoutKey: '',
|
|
861
|
+
valueNow: 0,
|
|
862
|
+
isRow: false
|
|
863
|
+
});
|
|
864
|
+
var usePaneSplitterContext = function usePaneSplitterContext() {
|
|
865
|
+
return useContext(PaneSplitterContext);
|
|
866
|
+
};
|
|
867
|
+
|
|
868
|
+
var _excluded$1 = ["providerId", "layoutKey", "min", "max", "orientation"];
|
|
803
869
|
var orientationToPosition = {
|
|
804
|
-
start: SplitterPosition.
|
|
870
|
+
start: SplitterPosition.LEADS,
|
|
805
871
|
end: SplitterPosition.TRAILS,
|
|
806
872
|
top: SplitterPosition.LEADS,
|
|
807
873
|
bottom: SplitterPosition.TRAILS
|
|
@@ -819,18 +885,21 @@ var orientationToDimension = {
|
|
|
819
885
|
bottom: 'rows'
|
|
820
886
|
};
|
|
821
887
|
var SplitterComponent = forwardRef(function (_ref, ref) {
|
|
822
|
-
var
|
|
888
|
+
var providerId = _ref.providerId,
|
|
889
|
+
layoutKey = _ref.layoutKey,
|
|
823
890
|
min = _ref.min,
|
|
824
891
|
max = _ref.max,
|
|
825
892
|
orientation = _ref.orientation,
|
|
826
893
|
props = _objectWithoutProperties(_ref, _excluded$1);
|
|
827
|
-
var
|
|
894
|
+
var paneProviderContext = usePaneProviderContextData(providerId);
|
|
828
895
|
var paneContext = usePaneContext();
|
|
829
896
|
var themeContext = useContext(ThemeContext);
|
|
830
897
|
var position = orientationToPosition[orientation];
|
|
831
898
|
var isRow = orientationToDimension[orientation] === 'rows';
|
|
832
899
|
var splitterOrientation = paneToSplitterOrientation[orientation];
|
|
833
|
-
var pixelsPerFr =
|
|
900
|
+
var pixelsPerFr = paneProviderContext ? paneProviderContext.pixelsPerFr[orientationToDimension[orientation]] : 0;
|
|
901
|
+
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);
|
|
902
|
+
var valueInFr = isRow ? paneProviderContext === null || paneProviderContext === void 0 ? void 0 : paneProviderContext.getRowValue(layoutKey) : paneProviderContext === null || paneProviderContext === void 0 ? void 0 : paneProviderContext.getColumnValue(layoutKey);
|
|
834
903
|
var _useSplitter = useSplitter({
|
|
835
904
|
type: SplitterType.VARIABLE,
|
|
836
905
|
orientation: splitterOrientation,
|
|
@@ -841,11 +910,11 @@ var SplitterComponent = forwardRef(function (_ref, ref) {
|
|
|
841
910
|
environment: window,
|
|
842
911
|
onChange: function onChange(valueNow) {
|
|
843
912
|
if (isRow) {
|
|
844
|
-
return
|
|
913
|
+
return paneProviderContext === null || paneProviderContext === void 0 ? void 0 : paneProviderContext.setRowValue(orientation === 'top', layoutKey, valueNow / pixelsPerFr);
|
|
845
914
|
}
|
|
846
|
-
return
|
|
915
|
+
return paneProviderContext === null || paneProviderContext === void 0 ? void 0 : paneProviderContext.setColumnValue(orientation === 'start', layoutKey, valueNow / pixelsPerFr);
|
|
847
916
|
},
|
|
848
|
-
valueNow:
|
|
917
|
+
valueNow: value
|
|
849
918
|
}),
|
|
850
919
|
getSeparatorProps = _useSplitter.getSeparatorProps,
|
|
851
920
|
getPrimaryPaneProps = _useSplitter.getPrimaryPaneProps;
|
|
@@ -857,11 +926,22 @@ var SplitterComponent = forwardRef(function (_ref, ref) {
|
|
|
857
926
|
var separatorProps = getSeparatorProps({
|
|
858
927
|
'aria-controls': paneContext.id
|
|
859
928
|
});
|
|
860
|
-
return React.createElement(
|
|
929
|
+
return React.createElement(PaneSplitterContext.Provider, {
|
|
930
|
+
value: useMemo(function () {
|
|
931
|
+
return {
|
|
932
|
+
orientation: orientation,
|
|
933
|
+
layoutKey: layoutKey,
|
|
934
|
+
min: min,
|
|
935
|
+
max: max,
|
|
936
|
+
valueNow: valueInFr,
|
|
937
|
+
isRow: isRow
|
|
938
|
+
};
|
|
939
|
+
}, [orientation, layoutKey, min, max, valueInFr, isRow])
|
|
940
|
+
}, React.createElement(StyledPaneSplitter, _extends({
|
|
861
941
|
orientation: orientation
|
|
862
942
|
}, separatorProps, props, {
|
|
863
943
|
ref: mergeRefs([separatorProps.ref, ref])
|
|
864
|
-
}));
|
|
944
|
+
})));
|
|
865
945
|
});
|
|
866
946
|
SplitterComponent.displayName = 'Pane.Splitter';
|
|
867
947
|
SplitterComponent.propTypes = {
|
|
@@ -883,6 +963,63 @@ var ContentComponent = forwardRef(function (props, ref) {
|
|
|
883
963
|
ContentComponent.displayName = 'Pane.Content';
|
|
884
964
|
var Content = ContentComponent;
|
|
885
965
|
|
|
966
|
+
var SplitterButtonComponent = forwardRef(function (props, ref) {
|
|
967
|
+
var label = props.label,
|
|
968
|
+
defaultPlacement = props.placement;
|
|
969
|
+
var _usePaneSplitterConte = usePaneSplitterContext(),
|
|
970
|
+
orientation = _usePaneSplitterConte.orientation,
|
|
971
|
+
layoutKey = _usePaneSplitterConte.layoutKey,
|
|
972
|
+
min = _usePaneSplitterConte.min,
|
|
973
|
+
max = _usePaneSplitterConte.max,
|
|
974
|
+
isRow = _usePaneSplitterConte.isRow,
|
|
975
|
+
valueNow = _usePaneSplitterConte.valueNow,
|
|
976
|
+
providerId = _usePaneSplitterConte.providerId;
|
|
977
|
+
var paneProviderContext = usePaneProviderContextData(providerId);
|
|
978
|
+
var isTop = orientation === 'top';
|
|
979
|
+
var isStart = orientation === 'start';
|
|
980
|
+
var isMin = valueNow === min;
|
|
981
|
+
var placement = defaultPlacement;
|
|
982
|
+
if (!defaultPlacement) {
|
|
983
|
+
if (isRow) {
|
|
984
|
+
placement = 'center';
|
|
985
|
+
} else {
|
|
986
|
+
placement = 'start';
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
var setValue = useCallback(function (value) {
|
|
990
|
+
if (isRow) {
|
|
991
|
+
paneProviderContext.setRowValue(isTop, layoutKey, value);
|
|
992
|
+
return;
|
|
993
|
+
}
|
|
994
|
+
paneProviderContext.setColumnValue(isStart, layoutKey, value);
|
|
995
|
+
}, [isRow, isTop, isStart, layoutKey, paneProviderContext]);
|
|
996
|
+
var onClick = composeEventHandlers(props.onClick, function () {
|
|
997
|
+
if (isMin) {
|
|
998
|
+
setValue(max);
|
|
999
|
+
} else {
|
|
1000
|
+
setValue(min);
|
|
1001
|
+
}
|
|
1002
|
+
});
|
|
1003
|
+
var onKeyDown = composeEventHandlers(props.onKeyDown, function (event) {
|
|
1004
|
+
return event.stopPropagation();
|
|
1005
|
+
}
|
|
1006
|
+
);
|
|
1007
|
+
return React.createElement(Tooltip, {
|
|
1008
|
+
content: label
|
|
1009
|
+
}, React.createElement(StyledPaneSplitterButton, _extends({
|
|
1010
|
+
"aria-label": label
|
|
1011
|
+
}, props, {
|
|
1012
|
+
placement: placement,
|
|
1013
|
+
orientation: orientation,
|
|
1014
|
+
isRotated: isMin,
|
|
1015
|
+
ref: ref,
|
|
1016
|
+
onClick: onClick,
|
|
1017
|
+
onKeyDown: onKeyDown
|
|
1018
|
+
})));
|
|
1019
|
+
});
|
|
1020
|
+
SplitterButtonComponent.displayName = 'Pane.SplitterButton';
|
|
1021
|
+
var SplitterButton = SplitterButtonComponent;
|
|
1022
|
+
|
|
886
1023
|
var _excluded = ["children"];
|
|
887
1024
|
var PaneComponent = forwardRef(function (_ref, ref) {
|
|
888
1025
|
var children = _ref.children,
|
|
@@ -910,5 +1047,6 @@ PaneComponent.displayName = 'Pane';
|
|
|
910
1047
|
var Pane = PaneComponent;
|
|
911
1048
|
Pane.Content = Content;
|
|
912
1049
|
Pane.Splitter = Splitter;
|
|
1050
|
+
Pane.SplitterButton = SplitterButton;
|
|
913
1051
|
|
|
914
1052
|
export { ALIGN_ITEMS as ARRAY_ALIGN_ITEMS, ALIGN_SELF as ARRAY_ALIGN_SELF, DIRECTION as ARRAY_DIRECTION, JUSTIFY_CONTENT as ARRAY_JUSTIFY_CONTENT, SPACE as ARRAY_SPACE, TEXT_ALIGN as ARRAY_TEXT_ALIGN, WRAP as ARRAY_WRAP, Col, Grid, Pane, PaneProvider, Row };
|
|
@@ -7,10 +7,12 @@
|
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import { Splitter } from './components/Splitter';
|
|
9
9
|
import { Content } from './components/Content';
|
|
10
|
+
import { SplitterButton } from './components/SplitterButton';
|
|
10
11
|
/**
|
|
11
12
|
* @extends HTMLAttributes<HTMLDivElement>
|
|
12
13
|
*/
|
|
13
14
|
export declare const Pane: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>> & {
|
|
14
15
|
Content: typeof Content;
|
|
15
16
|
Splitter: typeof Splitter;
|
|
17
|
+
SplitterButton: typeof SplitterButton;
|
|
16
18
|
};
|
|
@@ -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>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Zendesk, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed under the Apache License, Version 2.0
|
|
5
|
+
* found at http://www.apache.org/licenses/LICENSE-2.0.
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react';
|
|
8
|
+
import { ISplitterButtonProps } from '../../../types';
|
|
9
|
+
/**
|
|
10
|
+
* @extends ButtonHTMLAttributes<HTMLButtonElement>
|
|
11
|
+
*/
|
|
12
|
+
export declare const SplitterButton: React.ForwardRefExoticComponent<ISplitterButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
package/dist/typings/index.d.ts
CHANGED
|
@@ -10,4 +10,4 @@ export { Row } from './elements/Row';
|
|
|
10
10
|
export { PaneProvider } from './elements/pane/PaneProvider';
|
|
11
11
|
export { Pane } from './elements/pane/Pane';
|
|
12
12
|
export { ALIGN_ITEMS as ARRAY_ALIGN_ITEMS, ALIGN_SELF as ARRAY_ALIGN_SELF, DIRECTION as ARRAY_DIRECTION, JUSTIFY_CONTENT as ARRAY_JUSTIFY_CONTENT, TEXT_ALIGN as ARRAY_TEXT_ALIGN, SPACE as ARRAY_SPACE, WRAP as ARRAY_WRAP } from './types';
|
|
13
|
-
export type { IPaneProviderProps, ISplitterProps, IColProps, IGridProps, IRowProps, AlignItems as ALIGN_ITEMS, AlignSelf as ALIGN_SELF, Direction as DIRECTION, JustifyContent as JUSTIFY_CONTENT, TextAlign as TEXT_ALIGN, GridNumber as GRID_NUMBER, Breakpoint as BREAKPOINT, Space as SPACE, Wrap as WRAP } from './types';
|
|
13
|
+
export type { IPaneProviderProps, ISplitterProps, ISplitterButtonProps, IColProps, IGridProps, IRowProps, AlignItems as ALIGN_ITEMS, AlignSelf as ALIGN_SELF, Direction as DIRECTION, JustifyContent as JUSTIFY_CONTENT, TextAlign as TEXT_ALIGN, GridNumber as GRID_NUMBER, Breakpoint as BREAKPOINT, Space as SPACE, Wrap as WRAP } from './types';
|
|
@@ -9,6 +9,10 @@ import { Orientation } from '../../types';
|
|
|
9
9
|
interface IStyledPaneSplitterProps {
|
|
10
10
|
orientation: Orientation;
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* 1. Elevated initial context to pickup full-width hover
|
|
14
|
+
* 2. Stack below splitter button.
|
|
15
|
+
*/
|
|
12
16
|
export declare const StyledPaneSplitter: import("styled-components").StyledComponent<"div", DefaultTheme, {
|
|
13
17
|
'data-garden-id': string;
|
|
14
18
|
'data-garden-version': string;
|