@guardian/stand 0.0.34 → 0.0.36
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/dist/components/grid/Grid.cjs +37 -0
- package/dist/components/grid/Grid.js +14 -0
- package/dist/components/grid/styles.cjs +106 -0
- package/dist/components/grid/styles.js +98 -0
- package/dist/components/layout/Layout.cjs +114 -0
- package/dist/components/layout/Layout.js +83 -0
- package/dist/components/layout/styles.cjs +92 -0
- package/dist/components/layout/styles.js +83 -0
- package/dist/grid.cjs +10 -0
- package/dist/grid.js +2 -0
- package/dist/index.cjs +4 -0
- package/dist/index.js +2 -0
- package/dist/layout.cjs +10 -0
- package/dist/layout.js +2 -0
- package/dist/styleD/build/css/base/typography.css +2 -2
- package/dist/styleD/build/css/component/TopBar.css +2 -2
- package/dist/styleD/build/css/component/alertBanner.css +1 -1
- package/dist/styleD/build/css/component/autocomplete.css +1 -1
- package/dist/styleD/build/css/component/avatar.css +1 -1
- package/dist/styleD/build/css/component/button.css +3 -3
- package/dist/styleD/build/css/component/checkbox.css +2 -2
- package/dist/styleD/build/css/component/favicon.css +1 -1
- package/dist/styleD/build/css/component/form.css +1 -1
- package/dist/styleD/build/css/component/grid.css +14 -0
- package/dist/styleD/build/css/component/inlineMessage.css +1 -1
- package/dist/styleD/build/css/component/layout.css +30 -0
- package/dist/styleD/build/css/component/link.css +1 -1
- package/dist/styleD/build/css/component/menu.css +3 -3
- package/dist/styleD/build/css/component/radioGroup.css +3 -3
- package/dist/styleD/build/css/component/select.css +2 -2
- package/dist/styleD/build/css/component/tagTable.css +1 -1
- package/dist/styleD/build/css/component/textArea.css +2 -2
- package/dist/styleD/build/css/component/textInput.css +2 -2
- package/dist/styleD/build/css/component/userMenu.css +6 -6
- package/dist/styleD/build/css/semantic/breakpoints.css +3 -12
- package/dist/styleD/build/css/semantic/typography.css +61 -61
- package/dist/styleD/build/typescript/component/grid.cjs +16 -0
- package/dist/styleD/build/typescript/component/grid.js +14 -0
- package/dist/styleD/build/typescript/component/layout.cjs +48 -0
- package/dist/styleD/build/typescript/component/layout.js +46 -0
- package/dist/styleD/build/typescript/component/link.cjs +1 -1
- package/dist/styleD/build/typescript/component/link.js +1 -1
- package/dist/styleD/build/typescript/semantic/breakpoints.cjs +3 -24
- package/dist/styleD/build/typescript/semantic/breakpoints.js +3 -24
- package/dist/styleD/utils/semantic/mq.cjs +4 -4
- package/dist/styleD/utils/semantic/mq.js +4 -4
- package/dist/types/components/grid/Grid.d.ts +3 -0
- package/dist/types/components/grid/sandbox.d.ts +5 -0
- package/dist/types/components/grid/styles.d.ts +11 -0
- package/dist/types/components/grid/styles.test.d.ts +1 -0
- package/dist/types/components/grid/types.d.ts +25 -0
- package/dist/types/components/layout/Layout.d.ts +19 -0
- package/dist/types/components/layout/sandbox.d.ts +5 -0
- package/dist/types/components/layout/styles.d.ts +16 -0
- package/dist/types/components/layout/types.d.ts +20 -0
- package/dist/types/components/topbar/styles.d.ts +2 -2
- package/dist/types/grid.d.ts +20 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/layout.d.ts +20 -0
- package/dist/types/styleD/build/typescript/component/grid.d.ts +16 -0
- package/dist/types/styleD/build/typescript/component/layout.d.ts +48 -0
- package/dist/types/styleD/build/typescript/semantic/breakpoints.d.ts +3 -24
- package/dist/types/styleD/utils/semantic/mq.d.ts +5 -14
- package/package.json +21 -2
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('@emotion/react/jsx-runtime');
|
|
4
|
+
var mergeDeep = require('../../util/mergeDeep.cjs');
|
|
5
|
+
var styles = require('./styles.cjs');
|
|
6
|
+
|
|
7
|
+
function Grid({
|
|
8
|
+
children,
|
|
9
|
+
theme = {},
|
|
10
|
+
cssOverrides,
|
|
11
|
+
as: Component = "div",
|
|
12
|
+
...props
|
|
13
|
+
}) {
|
|
14
|
+
const mergedTheme = mergeDeep.mergeDeep(styles.defaultGridTheme, theme);
|
|
15
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Component, { css: [styles.gridStyles(mergedTheme), cssOverrides], ...props, children });
|
|
16
|
+
}
|
|
17
|
+
function Item({
|
|
18
|
+
children,
|
|
19
|
+
theme = {},
|
|
20
|
+
cssOverrides,
|
|
21
|
+
size,
|
|
22
|
+
offset,
|
|
23
|
+
...props
|
|
24
|
+
}) {
|
|
25
|
+
const mergedTheme = mergeDeep.mergeDeep(styles.defaultGridTheme, theme);
|
|
26
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
27
|
+
"div",
|
|
28
|
+
{
|
|
29
|
+
css: [styles.itemStyles(mergedTheme, { size, offset }), cssOverrides],
|
|
30
|
+
...props,
|
|
31
|
+
children
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
exports.Grid = Grid;
|
|
37
|
+
exports.Item = Item;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx } from '@emotion/react/jsx-runtime';
|
|
2
|
+
import { mergeDeep } from '../../util/mergeDeep.js';
|
|
3
|
+
import { gridStyles, itemStyles, defaultGridTheme } from './styles.js';
|
|
4
|
+
|
|
5
|
+
function Grid({ children, theme = {}, cssOverrides, as: Component = "div", ...props }) {
|
|
6
|
+
const mergedTheme = mergeDeep(defaultGridTheme, theme);
|
|
7
|
+
return jsx(Component, { css: [gridStyles(mergedTheme), cssOverrides], ...props, children });
|
|
8
|
+
}
|
|
9
|
+
function Item({ children, theme = {}, cssOverrides, size, offset, ...props }) {
|
|
10
|
+
const mergedTheme = mergeDeep(defaultGridTheme, theme);
|
|
11
|
+
return jsx("div", { css: [itemStyles(mergedTheme, { size, offset }), cssOverrides], ...props, children });
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { Grid, Item };
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('@emotion/react');
|
|
4
|
+
var grid = require('../../styleD/build/typescript/component/grid.cjs');
|
|
5
|
+
var mq = require('../../styleD/utils/semantic/mq.cjs');
|
|
6
|
+
|
|
7
|
+
const defaultGridTheme = grid.componentGrid;
|
|
8
|
+
const isResponsiveGridSize = (size) => typeof size === "object";
|
|
9
|
+
const isResponsiveOffset = (offset) => typeof offset === "object";
|
|
10
|
+
const clampToColumns = (value, columns) => Math.max(0, Math.min(value, columns));
|
|
11
|
+
const numericOffsetMargin = (offset, theme) => `calc(((100% - (${theme.shared.columns} - 1) * ${theme.shared.gap}) * ${offset} / ${theme.shared.columns}) + ${offset} * ${theme.shared.gap})`;
|
|
12
|
+
const numericSizeWidth = (size, theme) => `calc(((100% - (${theme.shared.columns} - 1) * ${theme.shared.gap}) * ${size} / ${theme.shared.columns}) + (${size} - 1) * ${theme.shared.gap})`;
|
|
13
|
+
const fixedSizeStyles = (size, theme) => {
|
|
14
|
+
if (size === "grow") {
|
|
15
|
+
return react.css`
|
|
16
|
+
flex-basis: 0;
|
|
17
|
+
flex-grow: 1;
|
|
18
|
+
max-width: 100%;
|
|
19
|
+
`;
|
|
20
|
+
}
|
|
21
|
+
if (size === "auto") {
|
|
22
|
+
return react.css`
|
|
23
|
+
flex-basis: auto;
|
|
24
|
+
flex-grow: 0;
|
|
25
|
+
flex-shrink: 0;
|
|
26
|
+
width: auto;
|
|
27
|
+
max-width: none;
|
|
28
|
+
`;
|
|
29
|
+
}
|
|
30
|
+
const clampedSize = clampToColumns(size, theme.shared.columns);
|
|
31
|
+
const width = numericSizeWidth(clampedSize, theme);
|
|
32
|
+
return react.css`
|
|
33
|
+
flex-basis: ${width};
|
|
34
|
+
flex-grow: 0;
|
|
35
|
+
width: ${width};
|
|
36
|
+
max-width: ${width};
|
|
37
|
+
`;
|
|
38
|
+
};
|
|
39
|
+
const fixedOffsetStyles = (offset, theme) => {
|
|
40
|
+
if (offset === "auto") {
|
|
41
|
+
return react.css`
|
|
42
|
+
margin-left: auto;
|
|
43
|
+
`;
|
|
44
|
+
}
|
|
45
|
+
const clampedOffset = clampToColumns(offset, theme.shared.columns);
|
|
46
|
+
return react.css`
|
|
47
|
+
margin-left: ${numericOffsetMargin(clampedOffset, theme)};
|
|
48
|
+
`;
|
|
49
|
+
};
|
|
50
|
+
const offsetStyles = (offset, theme) => {
|
|
51
|
+
if (typeof offset === "undefined") {
|
|
52
|
+
return react.css``;
|
|
53
|
+
}
|
|
54
|
+
if (!isResponsiveOffset(offset)) {
|
|
55
|
+
return fixedOffsetStyles(offset, theme);
|
|
56
|
+
}
|
|
57
|
+
return react.css`
|
|
58
|
+
${Object.entries(offset).map(
|
|
59
|
+
([breakpoint, breakpointOffset]) => react.css`
|
|
60
|
+
${mq.from[breakpoint]} {
|
|
61
|
+
${fixedOffsetStyles(breakpointOffset, theme)}
|
|
62
|
+
}
|
|
63
|
+
`
|
|
64
|
+
)}
|
|
65
|
+
`;
|
|
66
|
+
};
|
|
67
|
+
const sizeStyles = (size, theme) => {
|
|
68
|
+
if (typeof size === "undefined") {
|
|
69
|
+
return fixedSizeStyles(theme.shared.columns, theme);
|
|
70
|
+
}
|
|
71
|
+
if (!isResponsiveGridSize(size)) {
|
|
72
|
+
return fixedSizeStyles(size, theme);
|
|
73
|
+
}
|
|
74
|
+
return react.css`
|
|
75
|
+
${Object.entries(size).map(
|
|
76
|
+
([breakpoint, breakpointSize]) => react.css`
|
|
77
|
+
${mq.from[breakpoint]} {
|
|
78
|
+
${fixedSizeStyles(breakpointSize, theme)}
|
|
79
|
+
}
|
|
80
|
+
`
|
|
81
|
+
)}
|
|
82
|
+
`;
|
|
83
|
+
};
|
|
84
|
+
const gridStyles = (theme) => {
|
|
85
|
+
return react.css`
|
|
86
|
+
display: ${theme.shared.display};
|
|
87
|
+
width: ${theme.shared.width};
|
|
88
|
+
flex-direction: ${theme.shared.direction};
|
|
89
|
+
flex-wrap: ${theme.shared.wrap};
|
|
90
|
+
padding: 0 ${theme.shared.gap};
|
|
91
|
+
gap: ${theme.shared.gap};
|
|
92
|
+
justify-content: ${theme.shared.justifyContent};
|
|
93
|
+
align-items: ${theme.shared.alignItems};
|
|
94
|
+
`;
|
|
95
|
+
};
|
|
96
|
+
const itemStyles = (theme, { size, offset }) => {
|
|
97
|
+
return react.css`
|
|
98
|
+
min-width: 0;
|
|
99
|
+
${sizeStyles(size, theme)}
|
|
100
|
+
${offsetStyles(offset, theme)}
|
|
101
|
+
`;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
exports.defaultGridTheme = defaultGridTheme;
|
|
105
|
+
exports.gridStyles = gridStyles;
|
|
106
|
+
exports.itemStyles = itemStyles;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { css } from '@emotion/react';
|
|
2
|
+
import { componentGrid } from '../../styleD/build/typescript/component/grid.js';
|
|
3
|
+
import { from } from '../../styleD/utils/semantic/mq.js';
|
|
4
|
+
|
|
5
|
+
const defaultGridTheme = componentGrid;
|
|
6
|
+
const isResponsiveGridSize = (size) => typeof size === "object";
|
|
7
|
+
const isResponsiveOffset = (offset) => typeof offset === "object";
|
|
8
|
+
const clampToColumns = (value, columns) => Math.max(0, Math.min(value, columns));
|
|
9
|
+
const numericOffsetMargin = (offset, theme) => `calc(((100% - (${theme.shared.columns} - 1) * ${theme.shared.gap}) * ${offset} / ${theme.shared.columns}) + ${offset} * ${theme.shared.gap})`;
|
|
10
|
+
const numericSizeWidth = (size, theme) => `calc(((100% - (${theme.shared.columns} - 1) * ${theme.shared.gap}) * ${size} / ${theme.shared.columns}) + (${size} - 1) * ${theme.shared.gap})`;
|
|
11
|
+
const fixedSizeStyles = (size, theme) => {
|
|
12
|
+
if (size === "grow") {
|
|
13
|
+
return css`
|
|
14
|
+
flex-basis: 0;
|
|
15
|
+
flex-grow: 1;
|
|
16
|
+
max-width: 100%;
|
|
17
|
+
`;
|
|
18
|
+
}
|
|
19
|
+
if (size === "auto") {
|
|
20
|
+
return css`
|
|
21
|
+
flex-basis: auto;
|
|
22
|
+
flex-grow: 0;
|
|
23
|
+
flex-shrink: 0;
|
|
24
|
+
width: auto;
|
|
25
|
+
max-width: none;
|
|
26
|
+
`;
|
|
27
|
+
}
|
|
28
|
+
const clampedSize = clampToColumns(size, theme.shared.columns);
|
|
29
|
+
const width = numericSizeWidth(clampedSize, theme);
|
|
30
|
+
return css`
|
|
31
|
+
flex-basis: ${width};
|
|
32
|
+
flex-grow: 0;
|
|
33
|
+
width: ${width};
|
|
34
|
+
max-width: ${width};
|
|
35
|
+
`;
|
|
36
|
+
};
|
|
37
|
+
const fixedOffsetStyles = (offset, theme) => {
|
|
38
|
+
if (offset === "auto") {
|
|
39
|
+
return css`
|
|
40
|
+
margin-left: auto;
|
|
41
|
+
`;
|
|
42
|
+
}
|
|
43
|
+
const clampedOffset = clampToColumns(offset, theme.shared.columns);
|
|
44
|
+
return css`
|
|
45
|
+
margin-left: ${numericOffsetMargin(clampedOffset, theme)};
|
|
46
|
+
`;
|
|
47
|
+
};
|
|
48
|
+
const offsetStyles = (offset, theme) => {
|
|
49
|
+
if (typeof offset === "undefined") {
|
|
50
|
+
return css``;
|
|
51
|
+
}
|
|
52
|
+
if (!isResponsiveOffset(offset)) {
|
|
53
|
+
return fixedOffsetStyles(offset, theme);
|
|
54
|
+
}
|
|
55
|
+
return css`
|
|
56
|
+
${Object.entries(offset).map(([breakpoint, breakpointOffset]) => css`
|
|
57
|
+
${from[breakpoint]} {
|
|
58
|
+
${fixedOffsetStyles(breakpointOffset, theme)}
|
|
59
|
+
}
|
|
60
|
+
`)}
|
|
61
|
+
`;
|
|
62
|
+
};
|
|
63
|
+
const sizeStyles = (size, theme) => {
|
|
64
|
+
if (typeof size === "undefined") {
|
|
65
|
+
return fixedSizeStyles(theme.shared.columns, theme);
|
|
66
|
+
}
|
|
67
|
+
if (!isResponsiveGridSize(size)) {
|
|
68
|
+
return fixedSizeStyles(size, theme);
|
|
69
|
+
}
|
|
70
|
+
return css`
|
|
71
|
+
${Object.entries(size).map(([breakpoint, breakpointSize]) => css`
|
|
72
|
+
${from[breakpoint]} {
|
|
73
|
+
${fixedSizeStyles(breakpointSize, theme)}
|
|
74
|
+
}
|
|
75
|
+
`)}
|
|
76
|
+
`;
|
|
77
|
+
};
|
|
78
|
+
const gridStyles = (theme) => {
|
|
79
|
+
return css`
|
|
80
|
+
display: ${theme.shared.display};
|
|
81
|
+
width: ${theme.shared.width};
|
|
82
|
+
flex-direction: ${theme.shared.direction};
|
|
83
|
+
flex-wrap: ${theme.shared.wrap};
|
|
84
|
+
padding: 0 ${theme.shared.gap};
|
|
85
|
+
gap: ${theme.shared.gap};
|
|
86
|
+
justify-content: ${theme.shared.justifyContent};
|
|
87
|
+
align-items: ${theme.shared.alignItems};
|
|
88
|
+
`;
|
|
89
|
+
};
|
|
90
|
+
const itemStyles = (theme, { size, offset }) => {
|
|
91
|
+
return css`
|
|
92
|
+
min-width: 0;
|
|
93
|
+
${sizeStyles(size, theme)}
|
|
94
|
+
${offsetStyles(offset, theme)}
|
|
95
|
+
`;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export { defaultGridTheme, gridStyles, itemStyles };
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('@emotion/react/jsx-runtime');
|
|
4
|
+
var react = require('@emotion/react');
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var mergeDeep = require('../../util/mergeDeep.cjs');
|
|
7
|
+
var AlertBanner = require('../alert-banner/AlertBanner.cjs');
|
|
8
|
+
var Grid = require('../grid/Grid.cjs');
|
|
9
|
+
var TopBar = require('../topbar/TopBar.cjs');
|
|
10
|
+
var styles = require('./styles.cjs');
|
|
11
|
+
|
|
12
|
+
function Sidebar({
|
|
13
|
+
children,
|
|
14
|
+
layoutSmBreakpoint = "hidden",
|
|
15
|
+
theme = {},
|
|
16
|
+
cssOverrides,
|
|
17
|
+
...props
|
|
18
|
+
}) {
|
|
19
|
+
const mergedTheme = mergeDeep.mergeDeep(styles.defaultSidebarTheme, theme);
|
|
20
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
21
|
+
"aside",
|
|
22
|
+
{
|
|
23
|
+
css: [styles.sidebarStyles(mergedTheme, { layoutSmBreakpoint }), cssOverrides],
|
|
24
|
+
...props,
|
|
25
|
+
children
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
function Layout({
|
|
30
|
+
children,
|
|
31
|
+
fluid = true,
|
|
32
|
+
theme = {},
|
|
33
|
+
cssOverrides,
|
|
34
|
+
...props
|
|
35
|
+
}) {
|
|
36
|
+
const mergedTheme = mergeDeep.mergeDeep(styles.defaultLayoutTheme, theme);
|
|
37
|
+
let alertBanner = null;
|
|
38
|
+
let topBar = null;
|
|
39
|
+
let sidebar = null;
|
|
40
|
+
let main = null;
|
|
41
|
+
React.Children.forEach(children, (child) => {
|
|
42
|
+
if (!React.isValidElement(child)) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (child.type === AlertBanner.AlertBanner) {
|
|
46
|
+
const alertBannerChild = child;
|
|
47
|
+
const alertBannerCssOverrides = Array.isArray(
|
|
48
|
+
alertBannerChild.props.cssOverrides
|
|
49
|
+
) ? alertBannerChild.props.cssOverrides : alertBannerChild.props.cssOverrides ? [alertBannerChild.props.cssOverrides] : [];
|
|
50
|
+
alertBanner ?? (alertBanner = React.cloneElement(alertBannerChild, {
|
|
51
|
+
cssOverrides: [styles.alertBannerLayoutStyles(), ...alertBannerCssOverrides]
|
|
52
|
+
}));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (child.type === TopBar.TopBar) {
|
|
56
|
+
const topBarChild = child;
|
|
57
|
+
const topBarCssOverrides = Array.isArray(topBarChild.props.cssOverrides) ? topBarChild.props.cssOverrides : topBarChild.props.cssOverrides ? [topBarChild.props.cssOverrides] : [];
|
|
58
|
+
topBar ?? (topBar = React.cloneElement(topBarChild, {
|
|
59
|
+
cssOverrides: [styles.topBarLayoutStyles(), ...topBarCssOverrides]
|
|
60
|
+
}));
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (child.type === Sidebar) {
|
|
64
|
+
const sidebarChild = child;
|
|
65
|
+
const sidebarCssOverrides = Array.isArray(sidebarChild.props.cssOverrides) ? sidebarChild.props.cssOverrides : sidebarChild.props.cssOverrides ? [sidebarChild.props.cssOverrides] : [];
|
|
66
|
+
sidebar ?? (sidebar = React.cloneElement(sidebarChild, {
|
|
67
|
+
cssOverrides: [styles.sidebarLayoutStyles(), ...sidebarCssOverrides]
|
|
68
|
+
}));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (child.type === Grid.Grid) {
|
|
72
|
+
const gridChild = child;
|
|
73
|
+
const gridCssOverrides = Array.isArray(gridChild.props.cssOverrides) ? gridChild.props.cssOverrides : gridChild.props.cssOverrides ? [gridChild.props.cssOverrides] : [];
|
|
74
|
+
main ?? (main = React.cloneElement(gridChild, {
|
|
75
|
+
as: "main",
|
|
76
|
+
cssOverrides: [
|
|
77
|
+
styles.mainLayoutStyles(mergedTheme, { fluid }),
|
|
78
|
+
...gridCssOverrides
|
|
79
|
+
]
|
|
80
|
+
}));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (!main) {
|
|
84
|
+
const childWithProps = child;
|
|
85
|
+
if ("cssOverrides" in childWithProps.props) {
|
|
86
|
+
const childCssOverrides = Array.isArray(
|
|
87
|
+
childWithProps.props.cssOverrides
|
|
88
|
+
) ? childWithProps.props.cssOverrides : [childWithProps.props.cssOverrides ?? react.css``];
|
|
89
|
+
main ?? (main = React.cloneElement(childWithProps, {
|
|
90
|
+
cssOverrides: [
|
|
91
|
+
styles.mainLayoutStyles(mergedTheme, { fluid }),
|
|
92
|
+
...childCssOverrides
|
|
93
|
+
]
|
|
94
|
+
}));
|
|
95
|
+
} else {
|
|
96
|
+
main ?? (main = React.cloneElement(childWithProps, {
|
|
97
|
+
css: [
|
|
98
|
+
styles.mainLayoutStyles(mergedTheme, { fluid }),
|
|
99
|
+
childWithProps.props.css
|
|
100
|
+
]
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { css: [styles.layoutStyles(mergedTheme), cssOverrides], ...props, children: [
|
|
106
|
+
alertBanner,
|
|
107
|
+
topBar,
|
|
108
|
+
sidebar,
|
|
109
|
+
main
|
|
110
|
+
] });
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
exports.Layout = Layout;
|
|
114
|
+
exports.Sidebar = Sidebar;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { jsxs, jsx } from '@emotion/react/jsx-runtime';
|
|
2
|
+
import { css } from '@emotion/react';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { mergeDeep } from '../../util/mergeDeep.js';
|
|
5
|
+
import { AlertBanner } from '../alert-banner/AlertBanner.js';
|
|
6
|
+
import { Grid } from '../grid/Grid.js';
|
|
7
|
+
import { TopBar } from '../topbar/TopBar.js';
|
|
8
|
+
import { alertBannerLayoutStyles, topBarLayoutStyles, sidebarLayoutStyles, mainLayoutStyles, layoutStyles, sidebarStyles, defaultSidebarTheme, defaultLayoutTheme } from './styles.js';
|
|
9
|
+
|
|
10
|
+
function Sidebar({ children, layoutSmBreakpoint = "hidden", theme = {}, cssOverrides, ...props }) {
|
|
11
|
+
const mergedTheme = mergeDeep(defaultSidebarTheme, theme);
|
|
12
|
+
return jsx("aside", { css: [sidebarStyles(mergedTheme, { layoutSmBreakpoint }), cssOverrides], ...props, children });
|
|
13
|
+
}
|
|
14
|
+
function Layout({ children, fluid = true, theme = {}, cssOverrides, ...props }) {
|
|
15
|
+
const mergedTheme = mergeDeep(defaultLayoutTheme, theme);
|
|
16
|
+
let alertBanner = null;
|
|
17
|
+
let topBar = null;
|
|
18
|
+
let sidebar = null;
|
|
19
|
+
let main = null;
|
|
20
|
+
React.Children.forEach(children, (child) => {
|
|
21
|
+
if (!React.isValidElement(child)) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (child.type === AlertBanner) {
|
|
25
|
+
const alertBannerChild = child;
|
|
26
|
+
const alertBannerCssOverrides = Array.isArray(alertBannerChild.props.cssOverrides) ? alertBannerChild.props.cssOverrides : alertBannerChild.props.cssOverrides ? [alertBannerChild.props.cssOverrides] : [];
|
|
27
|
+
alertBanner ?? (alertBanner = React.cloneElement(alertBannerChild, {
|
|
28
|
+
cssOverrides: [alertBannerLayoutStyles(), ...alertBannerCssOverrides]
|
|
29
|
+
}));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (child.type === TopBar) {
|
|
33
|
+
const topBarChild = child;
|
|
34
|
+
const topBarCssOverrides = Array.isArray(topBarChild.props.cssOverrides) ? topBarChild.props.cssOverrides : topBarChild.props.cssOverrides ? [topBarChild.props.cssOverrides] : [];
|
|
35
|
+
topBar ?? (topBar = React.cloneElement(topBarChild, {
|
|
36
|
+
cssOverrides: [topBarLayoutStyles(), ...topBarCssOverrides]
|
|
37
|
+
}));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (child.type === Sidebar) {
|
|
41
|
+
const sidebarChild = child;
|
|
42
|
+
const sidebarCssOverrides = Array.isArray(sidebarChild.props.cssOverrides) ? sidebarChild.props.cssOverrides : sidebarChild.props.cssOverrides ? [sidebarChild.props.cssOverrides] : [];
|
|
43
|
+
sidebar ?? (sidebar = React.cloneElement(sidebarChild, {
|
|
44
|
+
cssOverrides: [sidebarLayoutStyles(), ...sidebarCssOverrides]
|
|
45
|
+
}));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (child.type === Grid) {
|
|
49
|
+
const gridChild = child;
|
|
50
|
+
const gridCssOverrides = Array.isArray(gridChild.props.cssOverrides) ? gridChild.props.cssOverrides : gridChild.props.cssOverrides ? [gridChild.props.cssOverrides] : [];
|
|
51
|
+
main ?? (main = React.cloneElement(gridChild, {
|
|
52
|
+
as: "main",
|
|
53
|
+
cssOverrides: [
|
|
54
|
+
mainLayoutStyles(mergedTheme, { fluid }),
|
|
55
|
+
...gridCssOverrides
|
|
56
|
+
]
|
|
57
|
+
}));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (!main) {
|
|
61
|
+
const childWithProps = child;
|
|
62
|
+
if ("cssOverrides" in childWithProps.props) {
|
|
63
|
+
const childCssOverrides = Array.isArray(childWithProps.props.cssOverrides) ? childWithProps.props.cssOverrides : [childWithProps.props.cssOverrides ?? css``];
|
|
64
|
+
main ?? (main = React.cloneElement(childWithProps, {
|
|
65
|
+
cssOverrides: [
|
|
66
|
+
mainLayoutStyles(mergedTheme, { fluid }),
|
|
67
|
+
...childCssOverrides
|
|
68
|
+
]
|
|
69
|
+
}));
|
|
70
|
+
} else {
|
|
71
|
+
main ?? (main = React.cloneElement(childWithProps, {
|
|
72
|
+
css: [
|
|
73
|
+
mainLayoutStyles(mergedTheme, { fluid }),
|
|
74
|
+
childWithProps.props.css
|
|
75
|
+
]
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
return jsxs("div", { css: [layoutStyles(mergedTheme), cssOverrides], ...props, children: [alertBanner, topBar, sidebar, main] });
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export { Layout, Sidebar };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('@emotion/react');
|
|
4
|
+
var layout = require('../../styleD/build/typescript/component/layout.cjs');
|
|
5
|
+
var mq = require('../../styleD/utils/semantic/mq.cjs');
|
|
6
|
+
|
|
7
|
+
const defaultLayoutTheme = layout.componentLayout["layout"];
|
|
8
|
+
const defaultSidebarTheme = layout.componentLayout["sidebar"];
|
|
9
|
+
const alertBannerLayoutStyles = () => {
|
|
10
|
+
return react.css`
|
|
11
|
+
grid-area: alertbanner;
|
|
12
|
+
`;
|
|
13
|
+
};
|
|
14
|
+
const topBarLayoutStyles = () => {
|
|
15
|
+
return react.css`
|
|
16
|
+
grid-area: topbar;
|
|
17
|
+
`;
|
|
18
|
+
};
|
|
19
|
+
const sidebarLayoutStyles = () => {
|
|
20
|
+
return react.css`
|
|
21
|
+
grid-area: sidebar;
|
|
22
|
+
`;
|
|
23
|
+
};
|
|
24
|
+
const mainLayoutStyles = (theme, { fluid }) => {
|
|
25
|
+
return react.css`
|
|
26
|
+
grid-area: main;
|
|
27
|
+
${fluid ? "" : react.css`
|
|
28
|
+
max-width: ${theme.shared["max-width"]};
|
|
29
|
+
margin-left: ${theme.shared["margin-left"]};
|
|
30
|
+
margin-right: ${theme.shared["margin-right"]};
|
|
31
|
+
`}
|
|
32
|
+
`;
|
|
33
|
+
};
|
|
34
|
+
const layoutStyles = (theme) => {
|
|
35
|
+
return react.css`
|
|
36
|
+
display: ${theme.shared.display};
|
|
37
|
+
min-height: ${theme.shared.minHeight};
|
|
38
|
+
width: ${theme.shared.width};
|
|
39
|
+
|
|
40
|
+
grid-template-areas: ${theme.sm.gridTemplateAreas};
|
|
41
|
+
grid-template-columns: ${theme.sm.gridTemplateColumns};
|
|
42
|
+
grid-template-rows: ${theme.sm.gridTemplateRows};
|
|
43
|
+
|
|
44
|
+
${mq.from.md} {
|
|
45
|
+
grid-template-areas: ${theme.md.gridTemplateAreas};
|
|
46
|
+
grid-template-columns: ${theme.md.gridTemplateColumns};
|
|
47
|
+
grid-template-rows: ${theme.md.gridTemplateRows};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
${mq.from.lg} {
|
|
51
|
+
grid-template-areas: ${theme.lg.gridTemplateAreas};
|
|
52
|
+
grid-template-columns: ${theme.lg.gridTemplateColumns};
|
|
53
|
+
grid-template-rows: ${theme.lg.gridTemplateRows};
|
|
54
|
+
}
|
|
55
|
+
`;
|
|
56
|
+
};
|
|
57
|
+
const sidebarStyles = (theme, { layoutSmBreakpoint }) => {
|
|
58
|
+
return react.css`
|
|
59
|
+
${mq.from.sm} {
|
|
60
|
+
${(() => {
|
|
61
|
+
switch (layoutSmBreakpoint) {
|
|
62
|
+
case "above-grid":
|
|
63
|
+
return react.css`
|
|
64
|
+
display: ${theme.sm.aboveGrid.display};
|
|
65
|
+
`;
|
|
66
|
+
case "hidden":
|
|
67
|
+
return react.css`
|
|
68
|
+
display: ${theme.sm.hidden.display};
|
|
69
|
+
`;
|
|
70
|
+
}
|
|
71
|
+
})()}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
${mq.from.md} {
|
|
75
|
+
display: ${theme.md.display};
|
|
76
|
+
width: ${theme.md.width};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
${mq.from.lg} {
|
|
80
|
+
width: ${theme.lg.width};
|
|
81
|
+
}
|
|
82
|
+
`;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
exports.alertBannerLayoutStyles = alertBannerLayoutStyles;
|
|
86
|
+
exports.defaultLayoutTheme = defaultLayoutTheme;
|
|
87
|
+
exports.defaultSidebarTheme = defaultSidebarTheme;
|
|
88
|
+
exports.layoutStyles = layoutStyles;
|
|
89
|
+
exports.mainLayoutStyles = mainLayoutStyles;
|
|
90
|
+
exports.sidebarLayoutStyles = sidebarLayoutStyles;
|
|
91
|
+
exports.sidebarStyles = sidebarStyles;
|
|
92
|
+
exports.topBarLayoutStyles = topBarLayoutStyles;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { css } from '@emotion/react';
|
|
2
|
+
import { componentLayout } from '../../styleD/build/typescript/component/layout.js';
|
|
3
|
+
import { from } from '../../styleD/utils/semantic/mq.js';
|
|
4
|
+
|
|
5
|
+
const defaultLayoutTheme = componentLayout["layout"];
|
|
6
|
+
const defaultSidebarTheme = componentLayout["sidebar"];
|
|
7
|
+
const alertBannerLayoutStyles = () => {
|
|
8
|
+
return css`
|
|
9
|
+
grid-area: alertbanner;
|
|
10
|
+
`;
|
|
11
|
+
};
|
|
12
|
+
const topBarLayoutStyles = () => {
|
|
13
|
+
return css`
|
|
14
|
+
grid-area: topbar;
|
|
15
|
+
`;
|
|
16
|
+
};
|
|
17
|
+
const sidebarLayoutStyles = () => {
|
|
18
|
+
return css`
|
|
19
|
+
grid-area: sidebar;
|
|
20
|
+
`;
|
|
21
|
+
};
|
|
22
|
+
const mainLayoutStyles = (theme, { fluid }) => {
|
|
23
|
+
return css`
|
|
24
|
+
grid-area: main;
|
|
25
|
+
${fluid ? "" : css`
|
|
26
|
+
max-width: ${theme.shared["max-width"]};
|
|
27
|
+
margin-left: ${theme.shared["margin-left"]};
|
|
28
|
+
margin-right: ${theme.shared["margin-right"]};
|
|
29
|
+
`}
|
|
30
|
+
`;
|
|
31
|
+
};
|
|
32
|
+
const layoutStyles = (theme) => {
|
|
33
|
+
return css`
|
|
34
|
+
display: ${theme.shared.display};
|
|
35
|
+
min-height: ${theme.shared.minHeight};
|
|
36
|
+
width: ${theme.shared.width};
|
|
37
|
+
|
|
38
|
+
grid-template-areas: ${theme.sm.gridTemplateAreas};
|
|
39
|
+
grid-template-columns: ${theme.sm.gridTemplateColumns};
|
|
40
|
+
grid-template-rows: ${theme.sm.gridTemplateRows};
|
|
41
|
+
|
|
42
|
+
${from.md} {
|
|
43
|
+
grid-template-areas: ${theme.md.gridTemplateAreas};
|
|
44
|
+
grid-template-columns: ${theme.md.gridTemplateColumns};
|
|
45
|
+
grid-template-rows: ${theme.md.gridTemplateRows};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
${from.lg} {
|
|
49
|
+
grid-template-areas: ${theme.lg.gridTemplateAreas};
|
|
50
|
+
grid-template-columns: ${theme.lg.gridTemplateColumns};
|
|
51
|
+
grid-template-rows: ${theme.lg.gridTemplateRows};
|
|
52
|
+
}
|
|
53
|
+
`;
|
|
54
|
+
};
|
|
55
|
+
const sidebarStyles = (theme, { layoutSmBreakpoint }) => {
|
|
56
|
+
return css`
|
|
57
|
+
${from.sm} {
|
|
58
|
+
${(() => {
|
|
59
|
+
switch (layoutSmBreakpoint) {
|
|
60
|
+
case "above-grid":
|
|
61
|
+
return css`
|
|
62
|
+
display: ${theme.sm.aboveGrid.display};
|
|
63
|
+
`;
|
|
64
|
+
case "hidden":
|
|
65
|
+
return css`
|
|
66
|
+
display: ${theme.sm.hidden.display};
|
|
67
|
+
`;
|
|
68
|
+
}
|
|
69
|
+
})()}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
${from.md} {
|
|
73
|
+
display: ${theme.md.display};
|
|
74
|
+
width: ${theme.md.width};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
${from.lg} {
|
|
78
|
+
width: ${theme.lg.width};
|
|
79
|
+
}
|
|
80
|
+
`;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export { alertBannerLayoutStyles, defaultLayoutTheme, defaultSidebarTheme, layoutStyles, mainLayoutStyles, sidebarLayoutStyles, sidebarStyles, topBarLayoutStyles };
|
package/dist/grid.cjs
ADDED
package/dist/grid.js
ADDED
package/dist/index.cjs
CHANGED
|
@@ -10,10 +10,12 @@ var button = require('./styleD/build/typescript/component/button.cjs');
|
|
|
10
10
|
var checkbox = require('./styleD/build/typescript/component/checkbox.cjs');
|
|
11
11
|
var favicon = require('./styleD/build/typescript/component/favicon.cjs');
|
|
12
12
|
var datePicker = require('./styleD/build/typescript/component/datePicker.cjs');
|
|
13
|
+
var grid = require('./styleD/build/typescript/component/grid.cjs');
|
|
13
14
|
var form = require('./styleD/build/typescript/component/form.cjs');
|
|
14
15
|
var icon = require('./styleD/build/typescript/component/icon.cjs');
|
|
15
16
|
var inlineMessage = require('./styleD/build/typescript/component/inlineMessage.cjs');
|
|
16
17
|
var menu = require('./styleD/build/typescript/component/menu.cjs');
|
|
18
|
+
var layout = require('./styleD/build/typescript/component/layout.cjs');
|
|
17
19
|
var link = require('./styleD/build/typescript/component/link.cjs');
|
|
18
20
|
var alertBanner = require('./styleD/build/typescript/component/alertBanner.cjs');
|
|
19
21
|
var radioGroup = require('./styleD/build/typescript/component/radioGroup.cjs');
|
|
@@ -45,10 +47,12 @@ exports.componentButton = button.componentButton;
|
|
|
45
47
|
exports.componentCheckbox = checkbox.componentCheckbox;
|
|
46
48
|
exports.componentFavicon = favicon.componentFavicon;
|
|
47
49
|
exports.componentDatePicker = datePicker.componentDatePicker;
|
|
50
|
+
exports.componentGrid = grid.componentGrid;
|
|
48
51
|
exports.componentForm = form.componentForm;
|
|
49
52
|
exports.componentIcon = icon.componentIcon;
|
|
50
53
|
exports.componentInlineMessage = inlineMessage.componentInlineMessage;
|
|
51
54
|
exports.componentMenu = menu.componentMenu;
|
|
55
|
+
exports.componentLayout = layout.componentLayout;
|
|
52
56
|
exports.componentLink = link.componentLink;
|
|
53
57
|
exports.componentAlertBanner = alertBanner.componentAlertBanner;
|
|
54
58
|
exports.componentRadioGroup = radioGroup.componentRadioGroup;
|
package/dist/index.js
CHANGED
|
@@ -8,10 +8,12 @@ export { componentButton } from './styleD/build/typescript/component/button.js';
|
|
|
8
8
|
export { componentCheckbox } from './styleD/build/typescript/component/checkbox.js';
|
|
9
9
|
export { componentFavicon } from './styleD/build/typescript/component/favicon.js';
|
|
10
10
|
export { componentDatePicker } from './styleD/build/typescript/component/datePicker.js';
|
|
11
|
+
export { componentGrid } from './styleD/build/typescript/component/grid.js';
|
|
11
12
|
export { componentForm } from './styleD/build/typescript/component/form.js';
|
|
12
13
|
export { componentIcon } from './styleD/build/typescript/component/icon.js';
|
|
13
14
|
export { componentInlineMessage } from './styleD/build/typescript/component/inlineMessage.js';
|
|
14
15
|
export { componentMenu } from './styleD/build/typescript/component/menu.js';
|
|
16
|
+
export { componentLayout } from './styleD/build/typescript/component/layout.js';
|
|
15
17
|
export { componentLink } from './styleD/build/typescript/component/link.js';
|
|
16
18
|
export { componentAlertBanner } from './styleD/build/typescript/component/alertBanner.js';
|
|
17
19
|
export { componentRadioGroup } from './styleD/build/typescript/component/radioGroup.js';
|