aboutsummaryrefslogtreecommitdiffstats
path: root/packages/website/ts/@next/components/newLayout.tsx
blob: 8598b8f12f35b31f3e0a1c5f3ab035ddf35404c4 (plain) (blame)
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
93
94
95
96
97
98
99
import * as React from 'react';
import styled from 'styled-components';

interface WrapProps {
    isFullWidth?: boolean;
    isTextCentered?: boolean;
}

interface SectionProps {
    isPadded?: boolean;
    isFullWidth?: boolean;
    isFlex?: boolean;
    flexBreakpoint?: string;
    maxWidth?: string;
    bgColor?: 'dark' | 'light' | string;
}

interface FlexProps {
    padding?: string;
    isFlex?: boolean;
}

interface ColumnProps {
    padding?: string;
}

export const Section = (props: SectionProps) => {
    return (
        <SectionBase {...props}>
            <Wrap {...props}>
                {props.children}
            </Wrap>
        </SectionBase>
    );
};

export const Column = styled.div`
    width: ${props => props.width};
    max-width: ${props => props.maxWidth};
    padding: ${props => props.padding};

    @media (max-width: 768px) {
        width: 100%;
        margin-bottom: 60px;
    }
`;

export const FlexWrap = styled.div`
    padding: ${props => props.padding};

    @media (min-width: ${props => props.flexBreakpoint || '768px'}) {
        display: ${props => props.isFlex && 'flex'};
        justify-content: ${props => props.isFlex && 'space-between'};
    }
`;

export const WrapSticky = styled.div`
    position: sticky;
    top: ${props => props.offsetTop || '60px'};
`;

const SectionBase = styled.section`
    margin: 0 auto;
    padding: ${props => props.isPadded && '120px 0'};
    background-color: ${props => props.theme[`${props.bgColor}BgColor`] || props.bgColor};

    @media (max-width: 768px) {
        padding: ${props => props.isPadded && '40px 0'};
    }
`;

const Wrap = styled(FlexWrap)`
    width: calc(100% - 60px);
    max-width: ${props => !props.isFullWidth && (props.maxWidth || '895px')};
    margin: 0 auto;
    text-align: ${props => props.isTextCentered && 'center'};
`;

export const WrapGrid = styled(Wrap)`
    display: flex;
    flex-wrap: ${props => props.isWrapped && `wrap`};
    justify-content: ${props => props.isCentered ? `center` : 'space-between'};
`;

Section.defaultProps = {
    isPadded: true,
};

FlexWrap.defaultProps = {
    isFlex: true,
};

WrapGrid.defaultProps = {
    isCentered: true,
};

Wrap.defaultProps = {
    isFlex: false,
};