-
-
Notifications
You must be signed in to change notification settings - Fork 9.4k
/
bar.tsx
92 lines (85 loc) · 1.86 KB
/
bar.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import React, { Children, FunctionComponent } from 'react';
import { styled } from '@storybook/theming';
import { ScrollArea } from '../ScrollArea/ScrollArea';
export interface SideProps {
left?: boolean;
right?: boolean;
}
const Side = styled.div<SideProps>(
{
display: 'flex',
whiteSpace: 'nowrap',
flexBasis: 'auto',
flexShrink: 0,
},
({ left }) =>
left
? {
'& > *': {
marginLeft: 15,
},
}
: {},
({ right }) =>
right
? {
marginLeft: 30,
'& > *': {
marginRight: 15,
},
}
: {}
);
Side.displayName = 'Side';
export const Bar = styled(({ children, className }) => (
<ScrollArea horizontal vertical={false} className={className}>
{children}
</ScrollArea>
))(
({ theme }) => ({
color: theme.barTextColor,
width: '100%',
height: 40,
flexShrink: 0,
overflow: 'auto',
overflowY: 'hidden',
}),
({ theme, border }) =>
border
? {
boxShadow: `${theme.appBorderColor} 0 -1px 0 0 inset`,
background: theme.barBg,
}
: {}
);
Bar.displayName = 'Bar';
const BarInner = styled.div<{ bgColor: string }>(({ bgColor }) => ({
display: 'flex',
justifyContent: 'space-between',
position: 'relative',
flexWrap: 'nowrap',
flexShrink: 0,
height: 40,
backgroundColor: bgColor || '',
}));
export interface FlexBarProps {
border?: boolean;
children?: any;
backgroundColor?: string;
}
export const FlexBar: FunctionComponent<FlexBarProps> = ({
children,
backgroundColor,
...rest
}) => {
const [left, right] = Children.toArray(children);
return (
<Bar {...rest}>
<BarInner bgColor={backgroundColor}>
<Side left>{left}</Side>
{right ? <Side right>{right}</Side> : null}
</BarInner>
</Bar>
);
};
FlexBar.displayName = 'FlexBar';