@zendeskgarden/react-grid 9.0.0-next.2 → 9.0.0-next.21

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.
Files changed (34) hide show
  1. package/README.md +10 -10
  2. package/dist/esm/elements/Col.js +72 -0
  3. package/dist/esm/elements/Grid.js +54 -0
  4. package/dist/esm/elements/Row.js +58 -0
  5. package/dist/esm/elements/pane/Pane.js +55 -0
  6. package/dist/esm/elements/pane/PaneProvider.js +197 -0
  7. package/dist/esm/elements/pane/components/Content.js +30 -0
  8. package/dist/esm/elements/pane/components/Splitter.js +128 -0
  9. package/dist/esm/elements/pane/components/SplitterButton.js +91 -0
  10. package/dist/esm/index.js +12 -0
  11. package/dist/esm/styled/StyledCol.js +89 -0
  12. package/dist/esm/styled/StyledGrid.js +49 -0
  13. package/dist/esm/styled/StyledRow.js +65 -0
  14. package/dist/esm/styled/pane/StyledPane.js +22 -0
  15. package/dist/esm/styled/pane/StyledPaneContent.js +22 -0
  16. package/dist/esm/styled/pane/StyledPaneSplitter.js +119 -0
  17. package/dist/esm/styled/pane/StyledPaneSplitterButton.js +46 -0
  18. package/dist/esm/styled/pane/StyledPaneSplitterButtonContainer.js +128 -0
  19. package/dist/esm/types/index.js +16 -0
  20. package/dist/esm/utils/useGridContext.js +16 -0
  21. package/dist/esm/utils/usePaneContext.js +16 -0
  22. package/dist/esm/utils/usePaneProviderContext.js +17 -0
  23. package/dist/esm/utils/usePaneSplitterContext.js +22 -0
  24. package/dist/index.cjs.js +292 -157
  25. package/dist/typings/elements/Col.d.ts +2 -0
  26. package/dist/typings/elements/Grid.d.ts +7 -1
  27. package/dist/typings/elements/Row.d.ts +2 -0
  28. package/dist/typings/index.d.ts +1 -1
  29. package/dist/typings/styled/index.d.ts +1 -0
  30. package/dist/typings/styled/pane/StyledPaneSplitter.d.ts +0 -1
  31. package/dist/typings/styled/pane/StyledPaneSplitterButton.d.ts +3 -7
  32. package/dist/typings/styled/pane/StyledPaneSplitterButtonContainer.d.ts +18 -0
  33. package/package.json +10 -10
  34. package/dist/index.esm.js +0 -903
@@ -0,0 +1,91 @@
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, { forwardRef, useCallback } from 'react';
8
+ import { Tooltip } from '@zendeskgarden/react-tooltips';
9
+ import { composeEventHandlers } from '@zendeskgarden/container-utilities';
10
+ import '../../../styled/StyledCol.js';
11
+ import '../../../styled/StyledGrid.js';
12
+ import '../../../styled/StyledRow.js';
13
+ import '../../../styled/pane/StyledPane.js';
14
+ import '../../../styled/pane/StyledPaneContent.js';
15
+ import '../../../styled/pane/StyledPaneSplitter.js';
16
+ import { StyledPaneSplitterButton } from '../../../styled/pane/StyledPaneSplitterButton.js';
17
+ import { StyledPaneSplitterButtonContainer } from '../../../styled/pane/StyledPaneSplitterButtonContainer.js';
18
+ import usePaneSplitterContext from '../../../utils/usePaneSplitterContext.js';
19
+ import { usePaneProviderContextData } from '../../../utils/usePaneProviderContext.js';
20
+
21
+ const SplitterButtonComponent = forwardRef((props, ref) => {
22
+ const {
23
+ label,
24
+ placement: defaultPlacement
25
+ } = props;
26
+ const {
27
+ orientation,
28
+ layoutKey,
29
+ min,
30
+ max,
31
+ isRow,
32
+ valueNow,
33
+ size,
34
+ providerId
35
+ } = usePaneSplitterContext();
36
+ const paneProviderContext = usePaneProviderContextData(providerId);
37
+ const isTop = orientation === 'top';
38
+ const isStart = orientation === 'start';
39
+ const isMin = valueNow === min;
40
+ let placement = defaultPlacement;
41
+ if (!defaultPlacement) {
42
+ if (isRow) {
43
+ placement = 'center';
44
+ } else {
45
+ placement = 'start';
46
+ }
47
+ }
48
+ const setValue = useCallback(value => {
49
+ if (isRow) {
50
+ paneProviderContext.setRowValue(isTop, layoutKey, value);
51
+ } else {
52
+ paneProviderContext.setColumnValue(isStart, layoutKey, value);
53
+ }
54
+ }, [isRow, isTop, isStart, layoutKey, paneProviderContext]);
55
+ const onClick = composeEventHandlers(props.onClick, () => {
56
+ if (isMin) {
57
+ setValue(max);
58
+ } else {
59
+ setValue(min);
60
+ }
61
+ });
62
+ const onKeyDown = composeEventHandlers(props.onKeyDown, event => event.stopPropagation()
63
+ );
64
+ const onMouseDown = composeEventHandlers(props.onMouseDown, event => event.stopPropagation()
65
+ );
66
+ return React.createElement(StyledPaneSplitterButtonContainer, {
67
+ orientation: orientation,
68
+ placement: placement,
69
+ splitterSize: size || 0
70
+ }, React.createElement(Tooltip, {
71
+ content: label,
72
+ zIndex: 2,
73
+ style: {
74
+ cursor: 'default'
75
+ },
76
+ onMouseDown: e => e.stopPropagation()
77
+ }, React.createElement(StyledPaneSplitterButton, Object.assign({
78
+ "aria-label": label
79
+ }, props, {
80
+ orientation: orientation,
81
+ isRotated: isMin,
82
+ ref: ref,
83
+ onClick: onClick,
84
+ onKeyDown: onKeyDown,
85
+ onMouseDown: onMouseDown
86
+ }))));
87
+ });
88
+ SplitterButtonComponent.displayName = 'Pane.SplitterButton';
89
+ const SplitterButton = SplitterButtonComponent;
90
+
91
+ export { SplitterButton };
@@ -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
+ export { Col } from './elements/Col.js';
8
+ export { Grid } from './elements/Grid.js';
9
+ export { Row } from './elements/Row.js';
10
+ export { PaneProvider } from './elements/pane/PaneProvider.js';
11
+ export { Pane } from './elements/pane/Pane.js';
12
+ export { ALIGN_ITEMS, ALIGN_SELF, DIRECTION, JUSTIFY_CONTENT, SPACE, TEXT_ALIGN, WRAP } from './types/index.js';
@@ -0,0 +1,89 @@
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 styled, { css } from 'styled-components';
8
+ import { math } from 'polished';
9
+ import { retrieveComponentStyles, DEFAULT_THEME, getColor } from '@zendeskgarden/react-theming';
10
+
11
+ const COMPONENT_ID = 'grid.col';
12
+ const colorStyles = _ref => {
13
+ let {
14
+ theme
15
+ } = _ref;
16
+ const backgroundColor = getColor({
17
+ theme,
18
+ variable: 'background.primaryEmphasis',
19
+ dark: {
20
+ transparency: theme.opacity[200]
21
+ },
22
+ light: {
23
+ transparency: theme.opacity[100]
24
+ }
25
+ });
26
+ return css(["background-clip:content-box;background-color:", ";"], backgroundColor);
27
+ };
28
+ const flexStyles = (size, alignSelf, textAlign, offset, order, props) => {
29
+ const margin = offset && `${math(`${offset} / ${props.columns} * 100`)}%`;
30
+ let flexBasis;
31
+ let flexGrow;
32
+ let maxWidth;
33
+ let width;
34
+ if (typeof size === 'boolean') {
35
+ flexBasis = 0;
36
+ flexGrow = 1;
37
+ maxWidth = '100%';
38
+ } else if (size === 'auto') {
39
+ flexBasis = 'auto';
40
+ flexGrow = 0;
41
+ maxWidth = '100%';
42
+ width = 'auto';
43
+ } else if (size !== undefined) {
44
+ flexBasis = `${math(`${size} / ${props.columns} * 100`)}%`;
45
+ flexGrow = 0;
46
+ maxWidth = flexBasis;
47
+ }
48
+ let horizontalAlign;
49
+ if (textAlign === 'start') {
50
+ horizontalAlign = props.theme.rtl ? 'right' : 'left';
51
+ } else if (textAlign === 'end') {
52
+ horizontalAlign = props.theme.rtl ? 'left' : 'right';
53
+ } else {
54
+ horizontalAlign = textAlign;
55
+ }
56
+ let flexOrder;
57
+ if (order === 'first') {
58
+ flexOrder = -1;
59
+ } else if (order === 'last') {
60
+ flexOrder = math(`${props.columns} + 1`);
61
+ } else {
62
+ flexOrder = order;
63
+ }
64
+ return css(["flex-basis:", ";flex-grow:", ";flex-shrink:", ";align-self:", ";order:", ";margin-", ":", ";width:", ";max-width:", ";text-align:", ";"], flexBasis, flexGrow, size && 0, alignSelf === 'start' || alignSelf === 'end' ? `flex-${alignSelf}` : alignSelf, flexOrder, props.theme.rtl ? 'right' : 'left', margin, width, maxWidth, horizontalAlign);
65
+ };
66
+ const mediaStyles = (minWidth, size, alignSelf, textAlign, offset, order, props) => {
67
+ return css(["@media (min-width:", "){", ";}"], minWidth, flexStyles(size, alignSelf, textAlign, offset, order, props));
68
+ };
69
+ const sizeStyles = _ref2 => {
70
+ let {
71
+ theme,
72
+ gutters
73
+ } = _ref2;
74
+ const padding = gutters ? math(`${theme.space[gutters]} / 2`) : 0;
75
+ return css(["padding-right:", ";padding-left:", ";"], padding, padding);
76
+ };
77
+ const StyledCol = styled.div.attrs({
78
+ 'data-garden-id': COMPONENT_ID,
79
+ 'data-garden-version': '9.0.0-next.21'
80
+ }).withConfig({
81
+ displayName: "StyledCol",
82
+ componentId: "sc-inuw62-0"
83
+ })(["box-sizing:border-box;width:100%;", ";", ";", ";", ";", ";", ";", ";", ";", ";"], props => flexStyles(!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), sizeStyles, props => props.debug && colorStyles(props), props => mediaStyles(props.theme.breakpoints.xs, props.xs, props.alignSelfXs, props.textAlignXs, props.offsetXs, props.orderXs, props), props => mediaStyles(props.theme.breakpoints.sm, props.sm, props.alignSelfSm, props.textAlignSm, props.offsetSm, props.orderSm, props), props => mediaStyles(props.theme.breakpoints.md, props.md, props.alignSelfMd, props.textAlignMd, props.offsetMd, props.orderMd, props), props => mediaStyles(props.theme.breakpoints.lg, props.lg, props.alignSelfLg, props.textAlignLg, props.offsetLg, props.orderLg, props), props => mediaStyles(props.theme.breakpoints.xl, props.xl, props.alignSelfXl, props.textAlignXl, props.offsetXl, props.orderXl, props), props => retrieveComponentStyles(COMPONENT_ID, props));
84
+ StyledCol.defaultProps = {
85
+ columns: 12,
86
+ theme: DEFAULT_THEME
87
+ };
88
+
89
+ export { StyledCol };
@@ -0,0 +1,49 @@
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 styled, { css } from 'styled-components';
8
+ import { math } from 'polished';
9
+ import { retrieveComponentStyles, DEFAULT_THEME, getColor } from '@zendeskgarden/react-theming';
10
+
11
+ const COMPONENT_ID = 'grid.grid';
12
+ const colorStyles = _ref => {
13
+ let {
14
+ theme,
15
+ debug
16
+ } = _ref;
17
+ const borderColor = debug && getColor({
18
+ theme,
19
+ hue: 'crimson',
20
+ shade: 700,
21
+ transparency: theme.opacity[600]
22
+ });
23
+ const borderWidth = debug && math(`${theme.borderWidths.sm} * 2`);
24
+ return css(["color-scheme:only ", ";box-shadow:", ";"], theme.colors.base, debug && `
25
+ -${borderWidth} 0 0 0 ${borderColor},
26
+ ${borderWidth} 0 0 0 ${borderColor}
27
+ `);
28
+ };
29
+ const sizeStyles = _ref2 => {
30
+ let {
31
+ theme,
32
+ gutters
33
+ } = _ref2;
34
+ const padding = gutters ? math(`${theme.space[gutters]} / 2`) : 0;
35
+ return css(["padding-right:", ";padding-left:", ";"], padding, padding);
36
+ };
37
+ const StyledGrid = styled.div.attrs({
38
+ 'data-garden-id': COMPONENT_ID,
39
+ 'data-garden-version': '9.0.0-next.21'
40
+ }).withConfig({
41
+ displayName: "StyledGrid",
42
+ componentId: "sc-oxgg5i-0"
43
+ })(["direction:", ";margin-right:auto;margin-left:auto;width:100%;box-sizing:border-box;", ";", ";", ";"], props => props.theme.rtl && 'rtl', sizeStyles, colorStyles, props => retrieveComponentStyles(COMPONENT_ID, props));
44
+ StyledGrid.defaultProps = {
45
+ gutters: 'md',
46
+ theme: DEFAULT_THEME
47
+ };
48
+
49
+ export { StyledGrid };
@@ -0,0 +1,65 @@
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 styled, { css } from 'styled-components';
8
+ import { math } from 'polished';
9
+ import { retrieveComponentStyles, DEFAULT_THEME, getColor } from '@zendeskgarden/react-theming';
10
+
11
+ const COMPONENT_ID = 'grid.row';
12
+ const colorStyles = _ref => {
13
+ let {
14
+ theme
15
+ } = _ref;
16
+ const borderColor = getColor({
17
+ theme,
18
+ hue: 'mint',
19
+ shade: 700,
20
+ transparency: theme.opacity[600]
21
+ });
22
+ const borderWidth = theme.borderWidths.sm;
23
+ return css(["box-shadow:inset 0 ", " 0 0 ", ",inset 0 -", " 0 0 ", ";"], borderWidth, borderColor, borderWidth, borderColor);
24
+ };
25
+ const flexStyles = (alignItems, justifyContent, wrap) => {
26
+ let flexAlignItems;
27
+ let flexJustifyContent;
28
+ if (alignItems === 'start' || alignItems === 'end') {
29
+ flexAlignItems = `flex-${alignItems}`;
30
+ } else {
31
+ flexAlignItems = alignItems;
32
+ }
33
+ if (justifyContent === 'start' || justifyContent === 'end') {
34
+ flexJustifyContent = `flex-${justifyContent}`;
35
+ } else if (justifyContent === 'between' || justifyContent === 'around') {
36
+ flexJustifyContent = `space-${justifyContent}`;
37
+ } else {
38
+ flexJustifyContent = justifyContent;
39
+ }
40
+ return css(["flex-wrap:", ";align-items:", ";justify-content:", ";"], wrap, flexAlignItems, flexJustifyContent);
41
+ };
42
+ const mediaStyles = (minWidth, alignItems, justifyContent, wrap) => {
43
+ return css(["@media (min-width:", "){", ";}"], minWidth, flexStyles(alignItems, justifyContent, wrap));
44
+ };
45
+ const sizeStyles = _ref2 => {
46
+ let {
47
+ theme,
48
+ gutters
49
+ } = _ref2;
50
+ const margin = gutters ? math(`${theme.space[gutters]} / 2`) : 0;
51
+ return css(["margin-right:-", ";margin-left:-", ";"], margin, margin);
52
+ };
53
+ const StyledRow = styled.div.attrs({
54
+ 'data-garden-id': COMPONENT_ID,
55
+ 'data-garden-version': '9.0.0-next.21'
56
+ }).withConfig({
57
+ displayName: "StyledRow",
58
+ componentId: "sc-xjsdg1-0"
59
+ })(["display:flex;box-sizing:border-box;", " ", ";", ";", ";", ";", ";", ";", ";", ";"], props => flexStyles(props.alignItems, props.justifyContent, props.wrapAll), sizeStyles, props => props.debug && colorStyles(props), props => mediaStyles(props.theme.breakpoints.xs, props.alignItemsXs, props.justifyContentXs, props.wrapXs), props => mediaStyles(props.theme.breakpoints.sm, props.alignItemsSm, props.justifyContentSm, props.wrapSm), props => mediaStyles(props.theme.breakpoints.md, props.alignItemsMd, props.justifyContentMd, props.wrapMd), props => mediaStyles(props.theme.breakpoints.lg, props.alignItemsLg, props.justifyContentLg, props.wrapLg), props => mediaStyles(props.theme.breakpoints.xl, props.alignItemsXl, props.justifyContentXl, props.wrapXl), props => retrieveComponentStyles(COMPONENT_ID, props));
60
+ StyledRow.defaultProps = {
61
+ wrapAll: 'wrap',
62
+ theme: DEFAULT_THEME
63
+ };
64
+
65
+ export { StyledRow };
@@ -0,0 +1,22 @@
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 styled from 'styled-components';
8
+ import { retrieveComponentStyles, DEFAULT_THEME } from '@zendeskgarden/react-theming';
9
+
10
+ const COMPONENT_ID = 'pane';
11
+ const StyledPane = styled.div.attrs({
12
+ 'data-garden-id': COMPONENT_ID,
13
+ 'data-garden-version': '9.0.0-next.21'
14
+ }).withConfig({
15
+ displayName: "StyledPane",
16
+ componentId: "sc-1ltjst7-0"
17
+ })(["position:relative;min-width:0;min-height:0;", ";"], props => retrieveComponentStyles(COMPONENT_ID, props));
18
+ StyledPane.defaultProps = {
19
+ theme: DEFAULT_THEME
20
+ };
21
+
22
+ export { StyledPane };
@@ -0,0 +1,22 @@
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 styled from 'styled-components';
8
+ import { retrieveComponentStyles, DEFAULT_THEME } from '@zendeskgarden/react-theming';
9
+
10
+ const COMPONENT_ID = 'pane.content';
11
+ const StyledPaneContent = styled.div.attrs({
12
+ 'data-garden-id': COMPONENT_ID,
13
+ 'data-garden-version': '9.0.0-next.21'
14
+ }).withConfig({
15
+ displayName: "StyledPaneContent",
16
+ componentId: "sc-1b38mbh-0"
17
+ })(["height:100%;overflow:auto;color-scheme:only ", ";&[hidden]{display:none;}", ";"], p => p.theme.colors.base, props => retrieveComponentStyles(COMPONENT_ID, props));
18
+ StyledPaneContent.defaultProps = {
19
+ theme: DEFAULT_THEME
20
+ };
21
+
22
+ export { StyledPaneContent };
@@ -0,0 +1,119 @@
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 styled, { css } from 'styled-components';
8
+ import { math } from 'polished';
9
+ import { SELECTOR_FOCUS_VISIBLE, retrieveComponentStyles, DEFAULT_THEME, getColor, focusStyles } from '@zendeskgarden/react-theming';
10
+
11
+ const COMPONENT_ID = 'pane.splitter';
12
+ const colorStyles = _ref => {
13
+ let {
14
+ theme
15
+ } = _ref;
16
+ const color = getColor({
17
+ theme,
18
+ variable: 'border.default'
19
+ });
20
+ const options = {
21
+ theme,
22
+ variable: 'border.primaryEmphasis'
23
+ };
24
+ const hoverColor = getColor(options);
25
+ const activeColor = getColor({
26
+ ...options,
27
+ dark: {
28
+ offset: -200
29
+ },
30
+ light: {
31
+ offset: 200
32
+ }
33
+ });
34
+ return css(["&::before{background-color:", ";}&:hover::before{background-color:", ";}", " &:active::before{background-color:", ";}"], color, hoverColor, focusStyles({
35
+ theme,
36
+ styles: {
37
+ backgroundColor: hoverColor
38
+ },
39
+ selector: '&:focus-visible::before'
40
+ }), activeColor);
41
+ };
42
+ const sizeStyles = _ref2 => {
43
+ let {
44
+ theme,
45
+ orientation,
46
+ isFixed
47
+ } = _ref2;
48
+ const size = math(`${theme.shadowWidths.md} * 2`);
49
+ const separatorSize = math(`${theme.borderWidths.sm} * 2`);
50
+ const offset = math(`-${size} / 2`);
51
+ let cursor;
52
+ let top;
53
+ let right;
54
+ let left;
55
+ let bottom;
56
+ let width;
57
+ let height;
58
+ let separatorWidth;
59
+ let separatorHeight;
60
+ switch (orientation) {
61
+ case 'top':
62
+ cursor = 'row-resize';
63
+ top = offset;
64
+ width = '100%';
65
+ height = size;
66
+ separatorWidth = width;
67
+ separatorHeight = theme.borderWidths.sm;
68
+ break;
69
+ case 'bottom':
70
+ cursor = 'row-resize';
71
+ bottom = offset;
72
+ width = '100%';
73
+ height = size;
74
+ separatorWidth = width;
75
+ separatorHeight = theme.borderWidths.sm;
76
+ break;
77
+ case 'start':
78
+ cursor = 'col-resize';
79
+ top = 0;
80
+ width = size;
81
+ height = '100%';
82
+ separatorWidth = theme.borderWidths.sm;
83
+ separatorHeight = height;
84
+ if (theme.rtl) {
85
+ right = offset;
86
+ } else {
87
+ left = offset;
88
+ }
89
+ break;
90
+ case 'end':
91
+ default:
92
+ cursor = 'col-resize';
93
+ top = 0;
94
+ width = size;
95
+ height = '100%';
96
+ separatorWidth = theme.borderWidths.sm;
97
+ separatorHeight = height;
98
+ if (theme.rtl) {
99
+ left = offset;
100
+ } else {
101
+ right = offset;
102
+ }
103
+ break;
104
+ }
105
+ const dimensionProperty = width === '100%' ? 'height' : 'width';
106
+ return css(["top:", ";right:", ";bottom:", ";left:", ";cursor:", ";width:", ";height:", ";&::before{width:", ";height:", ";}&:hover::before{", ":", ";}&:focus::before,&:focus-visible::before{", ":", ";}&:focus-visible::before{border-radius:", ";}"], top, right, bottom, left, isFixed ? 'pointer' : cursor, width, height, separatorWidth, separatorHeight, dimensionProperty, separatorSize, dimensionProperty, separatorSize, theme.borderRadii.md);
107
+ };
108
+ const StyledPaneSplitter = styled.div.attrs({
109
+ 'data-garden-id': COMPONENT_ID,
110
+ 'data-garden-version': '9.0.0-next.21'
111
+ }).withConfig({
112
+ displayName: "StyledPaneSplitter",
113
+ componentId: "sc-jylemn-0"
114
+ })(["display:flex;position:absolute;align-items:center;justify-content:center;z-index:1;user-select:none;", ";", "{z-index:2;}&::before{position:absolute;transition:box-shadow 0.1s ease-in-out,background-color 0.25s ease-in-out;z-index:-1;content:'';}", ";", ";"], sizeStyles, SELECTOR_FOCUS_VISIBLE, colorStyles, props => retrieveComponentStyles(COMPONENT_ID, props));
115
+ StyledPaneSplitter.defaultProps = {
116
+ theme: DEFAULT_THEME
117
+ };
118
+
119
+ export { StyledPaneSplitter };
@@ -0,0 +1,46 @@
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 styled, { css } from 'styled-components';
8
+ import { DEFAULT_THEME } from '@zendeskgarden/react-theming';
9
+ import { ChevronButton } from '@zendeskgarden/react-buttons';
10
+
11
+ const getSize = theme => theme.space.base * 6;
12
+ const sizeStyles = _ref => {
13
+ let {
14
+ theme
15
+ } = _ref;
16
+ const size = `${getSize(theme)}px`;
17
+ return css(["width:", ";min-width:", ";height:", ";"], size, size, size);
18
+ };
19
+ const transformStyles = props => {
20
+ let degrees = 0;
21
+ if (props.isRotated) {
22
+ degrees = props.theme.rtl ? -180 : 180;
23
+ }
24
+ if (props.orientation === 'end') {
25
+ degrees += props.theme.rtl ? -90 : 90;
26
+ } else if (props.orientation === 'start') {
27
+ degrees += props.theme.rtl ? 90 : -90;
28
+ } else if (props.orientation === 'bottom') {
29
+ degrees += 180;
30
+ }
31
+ return css(["& > svg{transform:rotate(", "deg);}"], degrees);
32
+ };
33
+ const StyledPaneSplitterButton = styled(ChevronButton).attrs({
34
+ 'data-garden-version': '9.0.0-next.21',
35
+ isBasic: true,
36
+ isPill: true,
37
+ size: 'small'
38
+ }).withConfig({
39
+ displayName: "StyledPaneSplitterButton",
40
+ componentId: "sc-zh032e-0"
41
+ })(["", ";", ";"], sizeStyles, transformStyles);
42
+ StyledPaneSplitterButton.defaultProps = {
43
+ theme: DEFAULT_THEME
44
+ };
45
+
46
+ export { StyledPaneSplitterButton, getSize };
@@ -0,0 +1,128 @@
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 styled, { css } from 'styled-components';
8
+ import { stripUnit, math } from 'polished';
9
+ import { retrieveComponentStyles, DEFAULT_THEME, getColor } from '@zendeskgarden/react-theming';
10
+ import { StyledPaneSplitter } from './StyledPaneSplitter.js';
11
+ import { getSize } from './StyledPaneSplitterButton.js';
12
+
13
+ const COMPONENT_ID = 'pane.splitter_button_container';
14
+ const colorStyles = _ref => {
15
+ let {
16
+ theme
17
+ } = _ref;
18
+ const backgroundColor = getColor({
19
+ theme,
20
+ variable: 'background.raised'
21
+ });
22
+ const boxShadow = theme.shadows.lg(`${theme.space.base}px`, `${theme.space.base * 2}px`, getColor({
23
+ variable: 'shadow.small',
24
+ theme
25
+ }));
26
+ return css(["box-shadow:", ";background-color:", ";"], boxShadow, backgroundColor);
27
+ };
28
+ const positionStyles = _ref2 => {
29
+ let {
30
+ theme,
31
+ placement,
32
+ splitterSize,
33
+ orientation
34
+ } = _ref2;
35
+ let top;
36
+ let left;
37
+ let right;
38
+ let bottom;
39
+ const size = getSize(theme);
40
+ const inset = `-${size / 2}px`;
41
+ if (placement === 'center' || splitterSize < size * 3) {
42
+ const center = `${splitterSize / 2 - size / 2}px`;
43
+ switch (`${orientation}-${theme.rtl ? 'rtl' : 'ltr'}`) {
44
+ case 'top-ltr':
45
+ case 'top-rtl':
46
+ top = inset;
47
+ left = center;
48
+ break;
49
+ case 'start-ltr':
50
+ case 'end-rtl':
51
+ top = center;
52
+ left = inset;
53
+ break;
54
+ case 'end-ltr':
55
+ case 'start-rtl':
56
+ top = center;
57
+ right = inset;
58
+ break;
59
+ case 'bottom-ltr':
60
+ case 'bottom-rtl':
61
+ bottom = inset;
62
+ right = center;
63
+ break;
64
+ }
65
+ } else {
66
+ const offset = `${size}px`;
67
+ switch (`${orientation}-${placement}-${theme.rtl ? 'rtl' : 'ltr'}`) {
68
+ case 'top-end-ltr':
69
+ case 'top-end-rtl':
70
+ case 'top-start-rtl':
71
+ top = inset;
72
+ right = offset;
73
+ break;
74
+ case 'bottom-end-ltr':
75
+ case 'bottom-end-rtl':
76
+ case 'bottom-start-rtl':
77
+ bottom = inset;
78
+ right = offset;
79
+ break;
80
+ case 'start-start-ltr':
81
+ case 'end-start-rtl':
82
+ top = offset;
83
+ left = inset;
84
+ break;
85
+ case 'start-end-ltr':
86
+ case 'end-end-rtl':
87
+ bottom = offset;
88
+ left = inset;
89
+ break;
90
+ case 'end-start-ltr':
91
+ case 'start-start-rtl':
92
+ top = offset;
93
+ right = inset;
94
+ break;
95
+ case 'end-end-ltr':
96
+ case 'start-end-rtl':
97
+ bottom = offset;
98
+ right = inset;
99
+ break;
100
+ case 'top-start-ltr':
101
+ top = inset;
102
+ left = offset;
103
+ break;
104
+ case 'bottom-start-ltr':
105
+ bottom = inset;
106
+ left = offset;
107
+ break;
108
+ }
109
+ }
110
+ return css(["top:", ";right:", ";bottom:", ";left:", ";"], top, right, bottom, left);
111
+ };
112
+ const sizeStyles = _ref3 => {
113
+ let {
114
+ theme
115
+ } = _ref3;
116
+ const size = getSize(theme);
117
+ return css(["border-radius:", "px;width:", "px;height:", "px;"], size, size, size);
118
+ };
119
+ const minimumSplitterSize = theme => stripUnit(math(`${theme.shadowWidths.md} * 2 + ${getSize(theme)}`));
120
+ const StyledPaneSplitterButtonContainer = styled.div.withConfig({
121
+ displayName: "StyledPaneSplitterButtonContainer",
122
+ componentId: "sc-1w84y62-0"
123
+ })(["display:", ";position:absolute;transition:box-shadow 0.1s ease-in-out,opacity 0.25s ease-in-out 0.1s;opacity:0;z-index:2;", ";", ";", ";&:hover,&:focus-within,", ":hover ~ &,", ":focus-visible ~ &{opacity:1;}", ";"], props => props.splitterSize <= minimumSplitterSize(props.theme) ? 'none' : undefined, positionStyles, sizeStyles, colorStyles, StyledPaneSplitter, StyledPaneSplitter, props => retrieveComponentStyles(COMPONENT_ID, props));
124
+ StyledPaneSplitterButtonContainer.defaultProps = {
125
+ theme: DEFAULT_THEME
126
+ };
127
+
128
+ export { StyledPaneSplitterButtonContainer };
@@ -0,0 +1,16 @@
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
+ const ALIGN_ITEMS = ['start', 'end', 'center', 'baseline', 'stretch'];
8
+ const ALIGN_SELF = ['auto', ...ALIGN_ITEMS];
9
+ const DIRECTION = ['row', 'row-reverse', 'column', 'column-reverse'];
10
+ const JUSTIFY_CONTENT = ['start', 'end', 'center', 'between', 'around'];
11
+ const TEXT_ALIGN = ['start', 'end', 'center', 'justify'];
12
+ const SPACE = [false, 'xxs', 'xs', 'sm', 'md', 'lg', 'xl', 'xxl'];
13
+ const WRAP = ['nowrap', 'wrap', 'wrap-reverse'];
14
+ const ORIENTATION = ['top', 'bottom', 'start', 'end'];
15
+
16
+ export { ALIGN_ITEMS, ALIGN_SELF, DIRECTION, JUSTIFY_CONTENT, ORIENTATION, SPACE, TEXT_ALIGN, WRAP };
@@ -0,0 +1,16 @@
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 { createContext, useContext } from 'react';
8
+
9
+ const GridContext = createContext({
10
+ gutters: 'md'
11
+ });
12
+ const useGridContext = () => {
13
+ return useContext(GridContext);
14
+ };
15
+
16
+ export { GridContext, useGridContext as default };