@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.
Files changed (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +18 -0
  3. package/dist/app.css +1 -0
  4. package/dist/app.js +1 -0
  5. package/dist/storybook.css +1 -0
  6. package/package.json +60 -0
  7. package/src/.DS_Store +0 -0
  8. package/src/app.js +21 -0
  9. package/src/app.scss +8 -0
  10. package/src/foundation/_foundation.scss +108 -0
  11. package/src/helper/_align-items.scss +7 -0
  12. package/src/helper/_align-self.scss +17 -0
  13. package/src/helper/_align.scss +14 -0
  14. package/src/helper/_fluid-typography.scss +7 -0
  15. package/src/helper/_gap.scss +7 -0
  16. package/src/helper/_gutters.scss +7 -0
  17. package/src/helper/_helper.scss +21 -0
  18. package/src/helper/_justify-content.scss +7 -0
  19. package/src/helper/_justify-self.scss +17 -0
  20. package/src/helper/_padding.scss +7 -0
  21. package/src/layout-primitives/_layout-primitives.scss +33 -0
  22. package/src/layout-primitives/both-sides/BothSides.jsx +22 -0
  23. package/src/layout-primitives/both-sides/README.md +54 -0
  24. package/src/layout-primitives/both-sides/_both-sides.scss +24 -0
  25. package/src/layout-primitives/both-sides/stories/index.jsx +51 -0
  26. package/src/layout-primitives/center/Center.jsx +18 -0
  27. package/src/layout-primitives/center/README.md +33 -0
  28. package/src/layout-primitives/center/_center.scss +17 -0
  29. package/src/layout-primitives/center/stories/index.jsx +39 -0
  30. package/src/layout-primitives/cluster/Cluster.jsx +21 -0
  31. package/src/layout-primitives/cluster/README.md +35 -0
  32. package/src/layout-primitives/cluster/_cluster.scss +22 -0
  33. package/src/layout-primitives/cluster/stories/index.jsx +79 -0
  34. package/src/layout-primitives/container/Container.jsx +23 -0
  35. package/src/layout-primitives/container/README.md +39 -0
  36. package/src/layout-primitives/container/_container.scss +18 -0
  37. package/src/layout-primitives/container/stories/index.jsx +65 -0
  38. package/src/layout-primitives/cover/Cover.jsx +30 -0
  39. package/src/layout-primitives/cover/README.md +54 -0
  40. package/src/layout-primitives/cover/_cover.scss +37 -0
  41. package/src/layout-primitives/cover/stories/index.jsx +140 -0
  42. package/src/layout-primitives/decorator/Decorator.jsx +49 -0
  43. package/src/layout-primitives/decorator/README.md +49 -0
  44. package/src/layout-primitives/decorator/_decorator.scss +54 -0
  45. package/src/layout-primitives/decorator/stories/index.jsx +190 -0
  46. package/src/layout-primitives/float/Float.jsx +24 -0
  47. package/src/layout-primitives/float/README.md +24 -0
  48. package/src/layout-primitives/float/_float.scss +29 -0
  49. package/src/layout-primitives/float/stories/index.jsx +78 -0
  50. package/src/layout-primitives/frame/Frame.jsx +19 -0
  51. package/src/layout-primitives/frame/README.md +7 -0
  52. package/src/layout-primitives/frame/_frame.scss +45 -0
  53. package/src/layout-primitives/frame/stories/index.jsx +50 -0
  54. package/src/layout-primitives/gutters/Gutters.jsx +17 -0
  55. package/src/layout-primitives/gutters/README.md +23 -0
  56. package/src/layout-primitives/gutters/_gutters.scss +12 -0
  57. package/src/layout-primitives/gutters/stories/index.jsx +48 -0
  58. package/src/layout-primitives/layers/Layers.jsx +18 -0
  59. package/src/layout-primitives/layers/README.md +32 -0
  60. package/src/layout-primitives/layers/_layers.scss +51 -0
  61. package/src/layout-primitives/layers/stories/index.jsx +133 -0
  62. package/src/layout-primitives/responsive-grid/README.md +11 -0
  63. package/src/layout-primitives/responsive-grid/ResponsiveGrid.jsx +22 -0
  64. package/src/layout-primitives/responsive-grid/_responsive-grid.scss +14 -0
  65. package/src/layout-primitives/responsive-grid/stories/index.jsx +65 -0
  66. package/src/layout-primitives/stack/README.md +24 -0
  67. package/src/layout-primitives/stack/Stack.jsx +22 -0
  68. package/src/layout-primitives/stack/_stack.scss +31 -0
  69. package/src/layout-primitives/stack/stories/index.jsx +123 -0
  70. package/src/layout-primitives/switcher/README.md +17 -0
  71. package/src/layout-primitives/switcher/Switcher.jsx +19 -0
  72. package/src/layout-primitives/switcher/_switcher.scss +19 -0
  73. package/src/layout-primitives/switcher/stories/index.jsx +50 -0
  74. package/src/layout-primitives/text/README.md +16 -0
  75. package/src/layout-primitives/text/Text.jsx +19 -0
  76. package/src/layout-primitives/text/_text.scss +80 -0
  77. package/src/layout-primitives/text/stories/index.jsx +112 -0
  78. package/src/layout-primitives/with-sidebar/README.md +36 -0
  79. package/src/layout-primitives/with-sidebar/WithSidebar.jsx +35 -0
  80. package/src/layout-primitives/with-sidebar/_with-sidebar.scss +58 -0
  81. package/src/layout-primitives/with-sidebar/stories/index.jsx +127 -0
  82. package/src/patterns/features/features-1/Features1.jsx +52 -0
  83. package/src/patterns/features/features-1/stories/index.jsx +68 -0
  84. package/src/patterns/features/features-2/Features2.jsx +33 -0
  85. package/src/patterns/features/features-2/stories/index.jsx +67 -0
  86. package/src/patterns/header/header-1/Header1.jsx +31 -0
  87. package/src/patterns/header/header-1/stories/index.jsx +44 -0
  88. package/src/patterns/header/header-2/Header2.jsx +33 -0
  89. package/src/patterns/header/header-2/stories/index.jsx +44 -0
  90. package/src/patterns/header/header-3/Header3.jsx +30 -0
  91. package/src/patterns/header/header-3/stories/index.jsx +43 -0
  92. package/src/patterns/header/header-4/Header4.jsx +25 -0
  93. package/src/patterns/header/header-4/stories/index.jsx +41 -0
  94. package/src/patterns/header/header-5/Header5.jsx +32 -0
  95. package/src/patterns/header/header-5/stories/index.jsx +43 -0
  96. package/src/patterns/header/header-6/Header6.jsx +34 -0
  97. package/src/patterns/header/header-6/stories/index.jsx +58 -0
  98. package/src/patterns/media-text/media-text-1/MediaText1.jsx +41 -0
  99. package/src/patterns/media-text/media-text-1/stories/index.jsx +34 -0
  100. package/src/patterns/media-text/media-text-2/MediaText2.jsx +39 -0
  101. package/src/patterns/media-text/media-text-2/stories/index.jsx +34 -0
  102. package/src/settings/_body.scss +8 -0
  103. package/src/settings/_html.scss +3 -0
  104. package/src/settings/_root.scss +152 -0
  105. package/src/settings/_settings.scss +3 -0
  106. package/src/stories/1.introduction.stories.mdx +27 -0
  107. package/src/stories/2.get-started.stories.mdx +23 -0
  108. package/src/stories/3.global-api.stories.mdx +57 -0
  109. package/src/storybook.scss +11 -0
  110. 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
+ }