@inc2734/unitone-css 0.23.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/LICENSE +21 -0
- package/README.md +18 -0
- package/dist/app.css +1 -0
- package/dist/app.js +1 -0
- package/dist/storybook.css +1 -0
- package/package.json +60 -0
- package/src/.DS_Store +0 -0
- package/src/app.js +21 -0
- package/src/app.scss +8 -0
- package/src/foundation/_foundation.scss +108 -0
- package/src/helper/_align-items.scss +7 -0
- package/src/helper/_align-self.scss +17 -0
- package/src/helper/_align.scss +14 -0
- package/src/helper/_fluid-typography.scss +7 -0
- package/src/helper/_gap.scss +7 -0
- package/src/helper/_gutters.scss +7 -0
- package/src/helper/_helper.scss +21 -0
- package/src/helper/_justify-content.scss +7 -0
- package/src/helper/_justify-self.scss +17 -0
- package/src/helper/_padding.scss +7 -0
- package/src/layout-primitives/_layout-primitives.scss +33 -0
- package/src/layout-primitives/both-sides/BothSides.jsx +22 -0
- package/src/layout-primitives/both-sides/README.md +54 -0
- package/src/layout-primitives/both-sides/_both-sides.scss +24 -0
- package/src/layout-primitives/both-sides/stories/index.jsx +51 -0
- package/src/layout-primitives/center/Center.jsx +18 -0
- package/src/layout-primitives/center/README.md +33 -0
- package/src/layout-primitives/center/_center.scss +17 -0
- package/src/layout-primitives/center/stories/index.jsx +39 -0
- package/src/layout-primitives/cluster/Cluster.jsx +21 -0
- package/src/layout-primitives/cluster/README.md +35 -0
- package/src/layout-primitives/cluster/_cluster.scss +22 -0
- package/src/layout-primitives/cluster/stories/index.jsx +79 -0
- package/src/layout-primitives/container/Container.jsx +23 -0
- package/src/layout-primitives/container/README.md +39 -0
- package/src/layout-primitives/container/_container.scss +18 -0
- package/src/layout-primitives/container/stories/index.jsx +65 -0
- package/src/layout-primitives/cover/Cover.jsx +30 -0
- package/src/layout-primitives/cover/README.md +54 -0
- package/src/layout-primitives/cover/_cover.scss +37 -0
- package/src/layout-primitives/cover/stories/index.jsx +140 -0
- package/src/layout-primitives/decorator/Decorator.jsx +49 -0
- package/src/layout-primitives/decorator/README.md +49 -0
- package/src/layout-primitives/decorator/_decorator.scss +54 -0
- package/src/layout-primitives/decorator/stories/index.jsx +190 -0
- package/src/layout-primitives/float/Float.jsx +24 -0
- package/src/layout-primitives/float/README.md +24 -0
- package/src/layout-primitives/float/_float.scss +29 -0
- package/src/layout-primitives/float/stories/index.jsx +78 -0
- package/src/layout-primitives/frame/Frame.jsx +19 -0
- package/src/layout-primitives/frame/README.md +7 -0
- package/src/layout-primitives/frame/_frame.scss +45 -0
- package/src/layout-primitives/frame/stories/index.jsx +50 -0
- package/src/layout-primitives/gutters/Gutters.jsx +17 -0
- package/src/layout-primitives/gutters/README.md +23 -0
- package/src/layout-primitives/gutters/_gutters.scss +12 -0
- package/src/layout-primitives/gutters/stories/index.jsx +48 -0
- package/src/layout-primitives/layers/Layers.jsx +18 -0
- package/src/layout-primitives/layers/README.md +32 -0
- package/src/layout-primitives/layers/_layers.scss +51 -0
- package/src/layout-primitives/layers/stories/index.jsx +133 -0
- package/src/layout-primitives/responsive-grid/README.md +11 -0
- package/src/layout-primitives/responsive-grid/ResponsiveGrid.jsx +22 -0
- package/src/layout-primitives/responsive-grid/_responsive-grid.scss +14 -0
- package/src/layout-primitives/responsive-grid/stories/index.jsx +65 -0
- package/src/layout-primitives/stack/README.md +24 -0
- package/src/layout-primitives/stack/Stack.jsx +22 -0
- package/src/layout-primitives/stack/_stack.scss +31 -0
- package/src/layout-primitives/stack/stories/index.jsx +123 -0
- package/src/layout-primitives/switcher/README.md +17 -0
- package/src/layout-primitives/switcher/Switcher.jsx +19 -0
- package/src/layout-primitives/switcher/_switcher.scss +19 -0
- package/src/layout-primitives/switcher/stories/index.jsx +50 -0
- package/src/layout-primitives/text/README.md +16 -0
- package/src/layout-primitives/text/Text.jsx +19 -0
- package/src/layout-primitives/text/_text.scss +80 -0
- package/src/layout-primitives/text/stories/index.jsx +112 -0
- package/src/layout-primitives/with-sidebar/README.md +36 -0
- package/src/layout-primitives/with-sidebar/WithSidebar.jsx +35 -0
- package/src/layout-primitives/with-sidebar/_with-sidebar.scss +58 -0
- package/src/layout-primitives/with-sidebar/stories/index.jsx +127 -0
- package/src/patterns/features/features-1/Features1.jsx +52 -0
- package/src/patterns/features/features-1/stories/index.jsx +68 -0
- package/src/patterns/features/features-2/Features2.jsx +33 -0
- package/src/patterns/features/features-2/stories/index.jsx +67 -0
- package/src/patterns/header/header-1/Header1.jsx +31 -0
- package/src/patterns/header/header-1/stories/index.jsx +44 -0
- package/src/patterns/header/header-2/Header2.jsx +33 -0
- package/src/patterns/header/header-2/stories/index.jsx +44 -0
- package/src/patterns/header/header-3/Header3.jsx +30 -0
- package/src/patterns/header/header-3/stories/index.jsx +43 -0
- package/src/patterns/header/header-4/Header4.jsx +25 -0
- package/src/patterns/header/header-4/stories/index.jsx +41 -0
- package/src/patterns/header/header-5/Header5.jsx +32 -0
- package/src/patterns/header/header-5/stories/index.jsx +43 -0
- package/src/patterns/header/header-6/Header6.jsx +34 -0
- package/src/patterns/header/header-6/stories/index.jsx +58 -0
- package/src/patterns/media-text/media-text-1/MediaText1.jsx +41 -0
- package/src/patterns/media-text/media-text-1/stories/index.jsx +34 -0
- package/src/patterns/media-text/media-text-2/MediaText2.jsx +39 -0
- package/src/patterns/media-text/media-text-2/stories/index.jsx +34 -0
- package/src/settings/_body.scss +8 -0
- package/src/settings/_html.scss +3 -0
- package/src/settings/_root.scss +152 -0
- package/src/settings/_settings.scss +3 -0
- package/src/stories/1.introduction.stories.mdx +27 -0
- package/src/stories/2.get-started.stories.mdx +23 -0
- package/src/stories/3.global-api.stories.mdx +57 -0
- package/src/storybook.scss +11 -0
- package/src/variables/_variables.scss +22 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
@mixin abstract-both-sides() {
|
|
2
|
+
--unitone--gap: var(--unitone--s1);
|
|
3
|
+
--unitone--align-items: flex-start;
|
|
4
|
+
--unitone--content-width: fit-content;
|
|
5
|
+
--unitone--content-max-width: var(--unitone--measure);
|
|
6
|
+
|
|
7
|
+
display: flex;
|
|
8
|
+
gap: var(--unitone--gap);
|
|
9
|
+
flex-wrap: wrap;
|
|
10
|
+
align-items: var(--unitone--align-items);
|
|
11
|
+
justify-content: space-between;
|
|
12
|
+
|
|
13
|
+
> * {
|
|
14
|
+
flex-basis: var(--unitone--content-width);
|
|
15
|
+
flex-grow: 0;
|
|
16
|
+
max-width: min(100%, var(--unitone--content-max-width));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@mixin both-sides() {
|
|
21
|
+
[data-unitone-layout~="both-sides"] {
|
|
22
|
+
@include abstract-both-sides();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import readme from '../README.md';
|
|
3
|
+
|
|
4
|
+
import { BothSides } from '../BothSides';
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
title: 'Layout Primitives/BothSides',
|
|
8
|
+
component: BothSides,
|
|
9
|
+
parameters: {
|
|
10
|
+
notes: { readme },
|
|
11
|
+
},
|
|
12
|
+
argTypes: {
|
|
13
|
+
gap: {
|
|
14
|
+
control: { type: 'inline-radio' },
|
|
15
|
+
description:
|
|
16
|
+
'Gap. Set by CSS var `--unitone--gap` or `data-unitone-layout` attribute `-gap:x`.',
|
|
17
|
+
options: [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7],
|
|
18
|
+
table: { defaultValue: { summary: 'var(--unitone--s1)' } },
|
|
19
|
+
type: { name: 'number', required: false },
|
|
20
|
+
},
|
|
21
|
+
alignItems: {
|
|
22
|
+
control: { type: 'inline-radio' },
|
|
23
|
+
description: '`--unitone--align-items`',
|
|
24
|
+
description:
|
|
25
|
+
'Alignment of the row direction. Set by CSS var `--unitone--align-items` or `data-unitone-layout` attribute `-align-items:x`.',
|
|
26
|
+
options: ['start', 'center', 'end'],
|
|
27
|
+
table: { defaultValue: { summary: 'start' } },
|
|
28
|
+
type: { name: 'string', required: false },
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
args: {
|
|
32
|
+
gap: 1,
|
|
33
|
+
alignItems: 'start',
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const content =
|
|
38
|
+
'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.';
|
|
39
|
+
|
|
40
|
+
export const Default = (args) => {
|
|
41
|
+
return (
|
|
42
|
+
<BothSides {...args}>
|
|
43
|
+
<p>{content}</p>
|
|
44
|
+
<ul>
|
|
45
|
+
<li>Lorem</li>
|
|
46
|
+
<li>ipsum</li>
|
|
47
|
+
<li>dolor</li>
|
|
48
|
+
</ul>
|
|
49
|
+
</BothSides>
|
|
50
|
+
);
|
|
51
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export const Center = ({ withText, style, ...props }) => {
|
|
4
|
+
style = {
|
|
5
|
+
...style,
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
return (
|
|
9
|
+
<div
|
|
10
|
+
data-unitone-layout={['center', true === withText ? `-with-text` : undefined]
|
|
11
|
+
.filter(Boolean)
|
|
12
|
+
.join(' ')}
|
|
13
|
+
style={style}
|
|
14
|
+
>
|
|
15
|
+
{props.children}
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
18
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
## Usage
|
|
2
|
+
|
|
3
|
+
```html
|
|
4
|
+
<div data-unitone-layout="text">
|
|
5
|
+
<h2>Lorem ipsum dolor sit amet, consectetur adipisicing elit</h2>
|
|
6
|
+
<p>
|
|
7
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt
|
|
8
|
+
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
|
|
9
|
+
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
10
|
+
reprehenderit in voluptate velit esse cill
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<div data-unitone-layout="center">
|
|
14
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<h3>Lorem ipsum dolor sit amet, consectetur adipisicing elit</h3>
|
|
18
|
+
<p>
|
|
19
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt
|
|
20
|
+
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
|
|
21
|
+
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
22
|
+
reprehenderit in voluptate velit esse cill
|
|
23
|
+
</p>
|
|
24
|
+
</div>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Centering with text
|
|
28
|
+
|
|
29
|
+
```html
|
|
30
|
+
<div data-unitone-layout="center -with-text">
|
|
31
|
+
...
|
|
32
|
+
</div>
|
|
33
|
+
```
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
@mixin abstract-center() {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
align-items: center;
|
|
5
|
+
margin-right: auto;
|
|
6
|
+
margin-left: auto;
|
|
7
|
+
|
|
8
|
+
&[data-unitone-layout~="-with-text"] {
|
|
9
|
+
text-align: center;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@mixin center() {
|
|
14
|
+
[data-unitone-layout~="center"] {
|
|
15
|
+
@include abstract-center();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import readme from '../README.md';
|
|
3
|
+
|
|
4
|
+
import { Center } from '../Center';
|
|
5
|
+
import { Stack } from '../../stack/Stack';
|
|
6
|
+
|
|
7
|
+
export default {
|
|
8
|
+
title: 'Layout Primitives/Center',
|
|
9
|
+
component: Center,
|
|
10
|
+
parameters: {
|
|
11
|
+
notes: { readme },
|
|
12
|
+
},
|
|
13
|
+
argTypes: {
|
|
14
|
+
withText: {
|
|
15
|
+
control: { type: 'inline-radio' },
|
|
16
|
+
description: 'Centering with text. Set by `data-unitone-layout` attribute `-with-text`.',
|
|
17
|
+
options: [false, true],
|
|
18
|
+
table: { defaultValue: { summary: false } },
|
|
19
|
+
type: { name: 'boolean', required: false },
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
args: {
|
|
23
|
+
withText: false,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export const Default = (args) => {
|
|
28
|
+
return (
|
|
29
|
+
<Stack>
|
|
30
|
+
<Center {...args}>Lorem ipsum dolor sit amet, consectetur adipisicing elit</Center>
|
|
31
|
+
<Center {...args}>
|
|
32
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt
|
|
33
|
+
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
|
|
34
|
+
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
|
|
35
|
+
voluptate velit esse cill
|
|
36
|
+
</Center>
|
|
37
|
+
</Stack>
|
|
38
|
+
);
|
|
39
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export const Cluster = ({ alignItems, gap, justifyContent, tagName = 'div', style, ...props }) => {
|
|
4
|
+
const Tag = tagName;
|
|
5
|
+
|
|
6
|
+
return (
|
|
7
|
+
<Tag
|
|
8
|
+
data-unitone-layout={[
|
|
9
|
+
'cluster',
|
|
10
|
+
'undefined' !== typeof gap ? `-gap:${gap}` : undefined,
|
|
11
|
+
'undefined' !== typeof alignItems ? `-align-items:${alignItems}` : undefined,
|
|
12
|
+
'undefined' !== typeof justifyContent ? `-justify-content:${justifyContent}` : undefined,
|
|
13
|
+
]
|
|
14
|
+
.filter(Boolean)
|
|
15
|
+
.join(' ')}
|
|
16
|
+
style={style}
|
|
17
|
+
>
|
|
18
|
+
{props.children}
|
|
19
|
+
</Tag>
|
|
20
|
+
);
|
|
21
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
## Usage
|
|
2
|
+
|
|
3
|
+
```html
|
|
4
|
+
<ul data-unitone-layout="cluster">
|
|
5
|
+
<li>Lorem ipsum</li>
|
|
6
|
+
<li>dolor sit</li>
|
|
7
|
+
<li>amet consectetur</li>
|
|
8
|
+
<li>adipisicing elit</li>
|
|
9
|
+
<li>sed do</li>
|
|
10
|
+
</ul>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### Customizing align
|
|
14
|
+
|
|
15
|
+
```html
|
|
16
|
+
<ul data-unitone-layout="cluster -align-items:center">
|
|
17
|
+
...
|
|
18
|
+
</ul>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Customizing justify
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<ul data-unitone-layout="cluster -justify-content:space-between">
|
|
25
|
+
...
|
|
26
|
+
</ul>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Customizing gap
|
|
30
|
+
|
|
31
|
+
```html
|
|
32
|
+
<ul data-unitone-layout="cluster -gap:1">
|
|
33
|
+
...
|
|
34
|
+
</ul>
|
|
35
|
+
```
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
@mixin abstract-cluster() {
|
|
2
|
+
--unitone--align-items: flex-start;
|
|
3
|
+
--unitone--gap: calc(var(--unitone--s1) / 2) var(--unitone--s1);
|
|
4
|
+
--unitone--justify-content: flex-start;
|
|
5
|
+
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-wrap: wrap;
|
|
8
|
+
gap: var(--unitone--gap);
|
|
9
|
+
justify-content: var(--unitone--justify-content);
|
|
10
|
+
align-items: var(--unitone--align-items);
|
|
11
|
+
list-style: none;
|
|
12
|
+
|
|
13
|
+
> * {
|
|
14
|
+
margin: 0;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@mixin cluster() {
|
|
19
|
+
[data-unitone-layout~="cluster"] {
|
|
20
|
+
@include abstract-cluster();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import readme from '../README.md';
|
|
3
|
+
|
|
4
|
+
import { Cluster } from '../Cluster';
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
title: 'Layout Primitives/Cluster',
|
|
8
|
+
component: Cluster,
|
|
9
|
+
parameters: {
|
|
10
|
+
notes: { readme },
|
|
11
|
+
},
|
|
12
|
+
argTypes: {
|
|
13
|
+
alignItems: {
|
|
14
|
+
control: { type: 'inline-radio' },
|
|
15
|
+
description: '`--unitone--align-items`',
|
|
16
|
+
description:
|
|
17
|
+
'Alignment of the row direction. Set by CSS var `--unitone--align-items` or `data-unitone-layout` attribute `-align-items:x`.',
|
|
18
|
+
options: ['start', 'center', 'end'],
|
|
19
|
+
table: { defaultValue: { summary: 'start' } },
|
|
20
|
+
type: { name: 'string', required: false },
|
|
21
|
+
},
|
|
22
|
+
gap: {
|
|
23
|
+
control: { type: 'inline-radio' },
|
|
24
|
+
description:
|
|
25
|
+
'Gap. Set by CSS var `--unitone--gap` or `data-unitone-layout` attribute `-gap:x`.',
|
|
26
|
+
options: [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7],
|
|
27
|
+
table: { defaultValue: { summary: 'var(--unitone--s1)' } },
|
|
28
|
+
type: { name: 'number', required: false },
|
|
29
|
+
},
|
|
30
|
+
justifyContent: {
|
|
31
|
+
control: { type: 'inline-radio' },
|
|
32
|
+
description:
|
|
33
|
+
'Alignment of the column direction. Set by CSS var `--unitone--justify-content` or `data-unitone-layout` attribute `-justify-content:x`.',
|
|
34
|
+
options: ['start', 'center', 'end', 'space-between'],
|
|
35
|
+
table: { defaultValue: { summary: 'start' } },
|
|
36
|
+
type: { name: 'string', required: false },
|
|
37
|
+
},
|
|
38
|
+
tagName: {
|
|
39
|
+
table: { disable: true },
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
args: {
|
|
43
|
+
alignItems: 'start',
|
|
44
|
+
gap: 1,
|
|
45
|
+
justifyContent: 'start',
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export const Default = (args) => {
|
|
50
|
+
return (
|
|
51
|
+
<Cluster tagName="ul" {...args}>
|
|
52
|
+
<li>Lorem ipsum</li>
|
|
53
|
+
<li>dolor sit</li>
|
|
54
|
+
<li>amet consectetur</li>
|
|
55
|
+
<li>adipisicing elit</li>
|
|
56
|
+
<li>sed do</li>
|
|
57
|
+
</Cluster>
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const ExampleHeader = (args) => {
|
|
62
|
+
return (
|
|
63
|
+
<Cluster gap={args.gap} justifyContent="space-between" alignItems="center">
|
|
64
|
+
<div>LOGO</div>
|
|
65
|
+
<Cluster tagName="ul" gap={args.gap}>
|
|
66
|
+
<li>Lorem ipsum</li>
|
|
67
|
+
<li>dolor sit</li>
|
|
68
|
+
<li>amet consectetur</li>
|
|
69
|
+
<li>adipisicing elit</li>
|
|
70
|
+
<li>sed do</li>
|
|
71
|
+
</Cluster>
|
|
72
|
+
</Cluster>
|
|
73
|
+
);
|
|
74
|
+
};
|
|
75
|
+
ExampleHeader.storyName = 'Example : Header';
|
|
76
|
+
ExampleHeader.argTypes = {
|
|
77
|
+
justifyContent: { table: { disable: true } },
|
|
78
|
+
alignItems: { table: { disable: true } },
|
|
79
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export const Container = ({ align, gutters, maxWidth, text, style, ...props }) => {
|
|
4
|
+
style = {
|
|
5
|
+
...style,
|
|
6
|
+
'--unitone--max-width': !!maxWidth ? maxWidth : undefined,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
return (
|
|
10
|
+
<div
|
|
11
|
+
data-unitone-layout={[
|
|
12
|
+
'container',
|
|
13
|
+
'undefined' !== typeof align ? `-align:${align}` : undefined,
|
|
14
|
+
'undefined' !== typeof gutters ? `-gutters:${gutters}` : undefined,
|
|
15
|
+
]
|
|
16
|
+
.filter(Boolean)
|
|
17
|
+
.join(' ')}
|
|
18
|
+
style={style}
|
|
19
|
+
>
|
|
20
|
+
{props.children}
|
|
21
|
+
</div>
|
|
22
|
+
);
|
|
23
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
## Usage
|
|
2
|
+
|
|
3
|
+
```html
|
|
4
|
+
<div data-unitone-layout="container">
|
|
5
|
+
<div data-unitone-layout="text" style="--unitone--max-width: 100%">
|
|
6
|
+
<h2>Lorem ipsum dolor sit amet, consectetur adipisicing elit</h2>
|
|
7
|
+
<p>
|
|
8
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt
|
|
9
|
+
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
|
|
10
|
+
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
11
|
+
reprehenderit in voluptate velit esse cill
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
<h3>Lorem ipsum dolor sit amet, consectetur adipisicing elit</h3>
|
|
15
|
+
<p>
|
|
16
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt
|
|
17
|
+
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
|
|
18
|
+
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
19
|
+
reprehenderit in voluptate velit esse cill
|
|
20
|
+
</p>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Customizing gutters
|
|
26
|
+
|
|
27
|
+
```html
|
|
28
|
+
<div data-unitone-layout="container -gutters:1">
|
|
29
|
+
...
|
|
30
|
+
</div>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Alignment
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<div data-unitone-layout="container -align:start">
|
|
37
|
+
...
|
|
38
|
+
</div>
|
|
39
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
@mixin abstract-container() {
|
|
2
|
+
--unitone--gutters: var(--unitone--rem1);
|
|
3
|
+
--unitone--max-width: var(--unitone--container-max-width);
|
|
4
|
+
|
|
5
|
+
box-sizing: content-box;
|
|
6
|
+
margin-right: auto;
|
|
7
|
+
margin-left: auto;
|
|
8
|
+
padding-right: var(--unitone--gutters);
|
|
9
|
+
padding-left: var(--unitone--gutters);
|
|
10
|
+
max-width: 100%;
|
|
11
|
+
width: min(100% - var(--unitone--gutters) * 2, var(--unitone--max-width));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@mixin container() {
|
|
15
|
+
[data-unitone-layout~="container"] {
|
|
16
|
+
@include abstract-container();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import readme from '../README.md';
|
|
3
|
+
|
|
4
|
+
import { Container } from '../Container';
|
|
5
|
+
import { Text } from '../../text/Text';
|
|
6
|
+
|
|
7
|
+
export default {
|
|
8
|
+
title: 'Layout Primitives/Container',
|
|
9
|
+
component: Container,
|
|
10
|
+
parameters: {
|
|
11
|
+
notes: { readme },
|
|
12
|
+
},
|
|
13
|
+
argTypes: {
|
|
14
|
+
align: {
|
|
15
|
+
control: { type: 'inline-radio' },
|
|
16
|
+
description: 'Alignment of the container. Set by `data-unitone-layout` attribute `-align:x`.',
|
|
17
|
+
options: ['start', 'center', 'end'],
|
|
18
|
+
table: { defaultValue: { summary: '' } },
|
|
19
|
+
type: { name: 'string', required: false },
|
|
20
|
+
},
|
|
21
|
+
gutters: {
|
|
22
|
+
control: { type: 'inline-radio' },
|
|
23
|
+
description:
|
|
24
|
+
'Gutters. Set by CSS var `--unitone--gutters` or `data-unitone-layout` attribute `-gutters:x`.',
|
|
25
|
+
options: [0, 1, 2, 3, 4, 5, 6, 7],
|
|
26
|
+
table: { defaultValue: { summary: 'var(--unitone--rem1)' } },
|
|
27
|
+
type: { name: 'number', required: false },
|
|
28
|
+
},
|
|
29
|
+
maxWidth: {
|
|
30
|
+
control: { type: 'text' },
|
|
31
|
+
description: 'Max width. Set by CSS var `--unitone--max-width`.',
|
|
32
|
+
table: { defaultValue: { summary: '1280px' } },
|
|
33
|
+
type: { name: 'string', required: false },
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
args: {
|
|
37
|
+
align: '',
|
|
38
|
+
gutters: 1,
|
|
39
|
+
maxWidth: '1280px',
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const Default = (args) => {
|
|
44
|
+
return (
|
|
45
|
+
<Container {...args}>
|
|
46
|
+
<Text maxWidth="inherit">
|
|
47
|
+
<h2>Lorem ipsum dolor sit amet, consectetur adipisicing elit</h2>
|
|
48
|
+
<p>
|
|
49
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt
|
|
50
|
+
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
|
|
51
|
+
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
52
|
+
reprehenderit in voluptate velit esse cill
|
|
53
|
+
</p>
|
|
54
|
+
|
|
55
|
+
<h3>Lorem ipsum dolor sit amet, consectetur adipisicing elit</h3>
|
|
56
|
+
<p>
|
|
57
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt
|
|
58
|
+
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
|
|
59
|
+
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
|
|
60
|
+
reprehenderit in voluptate velit esse cill
|
|
61
|
+
</p>
|
|
62
|
+
</Text>
|
|
63
|
+
</Container>
|
|
64
|
+
);
|
|
65
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export const Cover = ({ gap, minHeight, justifyContent, noPadding, style, ...props }) => {
|
|
4
|
+
style = {
|
|
5
|
+
...style,
|
|
6
|
+
'--unitone--min-height': !!minHeight ? minHeight : undefined,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
return (
|
|
10
|
+
<div
|
|
11
|
+
data-unitone-layout={[
|
|
12
|
+
'cover',
|
|
13
|
+
noPadding ? '-no-padding' : undefined,
|
|
14
|
+
'undefined' !== typeof gap ? `-gap:${gap}` : undefined,
|
|
15
|
+
'undefined' !== typeof justifyContent ? `-justify-content:${justifyContent}` : undefined,
|
|
16
|
+
]
|
|
17
|
+
.filter(Boolean)
|
|
18
|
+
.join(' ')}
|
|
19
|
+
style={style}
|
|
20
|
+
>
|
|
21
|
+
{props.children}
|
|
22
|
+
</div>
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export const CoverContent = ({ tagName = 'div', ...props }) => {
|
|
27
|
+
const Tag = tagName;
|
|
28
|
+
|
|
29
|
+
return <Tag data-unitone-layout="cover__content">{props.children}</Tag>;
|
|
30
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
## Usage
|
|
2
|
+
|
|
3
|
+
```html
|
|
4
|
+
<div data-unitone-layout="decorator" style="--unitone--background-color: #000; --unitone--color: #fff; --unitone--padding: 0">
|
|
5
|
+
<div data-unitone-layout="cover">
|
|
6
|
+
<p>Lorem ipsum</p>
|
|
7
|
+
<div data-unitone-layout="cover__center">
|
|
8
|
+
<div data-unitone-layout="stack">
|
|
9
|
+
<h1 style="--unitone--font-size: 6">Lorem ipsum dolor sit amet</h1>
|
|
10
|
+
<p>
|
|
11
|
+
consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
|
|
12
|
+
magna aliqua.
|
|
13
|
+
</p>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
<p>sed do</p>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Bottom
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<div data-unitone-layout="decorator" style="--unitone--background-color: #000; --unitone--color: #fff; --unitone--padding: 0">
|
|
25
|
+
<div data-unitone-layout="cover">
|
|
26
|
+
<p>Lorem ipsum</p>
|
|
27
|
+
<div data-unitone-layout="cover_bottom">
|
|
28
|
+
<div data-unitone-layout="stack">
|
|
29
|
+
<h1 style="--unitone--font-size: 6">Lorem ipsum dolor sit amet</h1>
|
|
30
|
+
<p>
|
|
31
|
+
consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
|
|
32
|
+
magna aliqua.
|
|
33
|
+
</p>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### No padding
|
|
41
|
+
|
|
42
|
+
```html
|
|
43
|
+
<div data-unitone-layout="cover -no-padding">
|
|
44
|
+
...
|
|
45
|
+
</div>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Customizing gap
|
|
49
|
+
|
|
50
|
+
```html
|
|
51
|
+
<div data-unitone-layout="cover -gap:1">
|
|
52
|
+
...
|
|
53
|
+
</div>
|
|
54
|
+
```
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
@mixin abstract-cover() {
|
|
2
|
+
--unitone--gap: var(--unitone--s1);
|
|
3
|
+
--unitone--min-height: 100vh;
|
|
4
|
+
--unitone--justify-content: center;
|
|
5
|
+
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-flow: column;
|
|
8
|
+
gap: var(--unitone--gap);
|
|
9
|
+
justify-content: var(--unitone--justify-content);
|
|
10
|
+
min-height: var(--unitone--min-height);
|
|
11
|
+
padding: var(--unitone--gap);
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
|
|
14
|
+
> * {
|
|
15
|
+
margin-top: 0;
|
|
16
|
+
margin-bottom: 0;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
&[data-unitone-layout~="-no-padding"] {
|
|
20
|
+
padding: 0;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@mixin abstract-cover__content() {
|
|
25
|
+
margin-top: auto;
|
|
26
|
+
margin-bottom: auto;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@mixin cover() {
|
|
30
|
+
[data-unitone-layout~="cover"] {
|
|
31
|
+
@include abstract-cover();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
[data-unitone-layout~="cover__content"] {
|
|
35
|
+
@include abstract-cover__content();
|
|
36
|
+
}
|
|
37
|
+
}
|