diff --git a/.changeset/warm-taxes-show.md b/.changeset/warm-taxes-show.md
new file mode 100644
index 0000000000..edebd0048e
--- /dev/null
+++ b/.changeset/warm-taxes-show.md
@@ -0,0 +1,5 @@
+---
+'@backstage/canon': minor
+---
+
+Fixes spacing props on layout components and aligned on naming for the Grid component. You should now call the Grid root component using instead of just .
diff --git a/packages/canon/css/components.css b/packages/canon/css/components.css
index f49148da7a..bce8e71a6c 100644
--- a/packages/canon/css/components.css
+++ b/packages/canon/css/components.css
@@ -195,20 +195,20 @@
.canon-Container {
max-width: 120rem;
- padding: 0 var(--canon-space-4);
- margin: 0 auto;
+ padding-inline: var(--canon-space-4);
+ margin-inline: auto;
transition: padding .2s ease-in-out;
}
@media (width >= 640px) {
.canon-Container {
- padding: 0 var(--canon-space-8);
+ padding-inline: var(--canon-space-8);
}
}
@media (width >= 1024px) {
.canon-Container {
- padding: 0 var(--canon-space-12);
+ padding-inline: var(--canon-space-12);
}
}
diff --git a/packages/canon/css/container.css b/packages/canon/css/container.css
index 4ba6b65dee..47744cce1e 100644
--- a/packages/canon/css/container.css
+++ b/packages/canon/css/container.css
@@ -1,18 +1,18 @@
.canon-Container {
max-width: 120rem;
- padding: 0 var(--canon-space-4);
- margin: 0 auto;
+ padding-inline: var(--canon-space-4);
+ margin-inline: auto;
transition: padding .2s ease-in-out;
}
@media (width >= 640px) {
.canon-Container {
- padding: 0 var(--canon-space-8);
+ padding-inline: var(--canon-space-8);
}
}
@media (width >= 1024px) {
.canon-Container {
- padding: 0 var(--canon-space-12);
+ padding-inline: var(--canon-space-12);
}
}
diff --git a/packages/canon/css/styles.css b/packages/canon/css/styles.css
index 2f24ff043a..3107c83908 100644
--- a/packages/canon/css/styles.css
+++ b/packages/canon/css/styles.css
@@ -9419,20 +9419,20 @@
.canon-Container {
max-width: 120rem;
- padding: 0 var(--canon-space-4);
- margin: 0 auto;
+ padding-inline: var(--canon-space-4);
+ margin-inline: auto;
transition: padding .2s ease-in-out;
}
@media (width >= 640px) {
.canon-Container {
- padding: 0 var(--canon-space-8);
+ padding-inline: var(--canon-space-8);
}
}
@media (width >= 1024px) {
.canon-Container {
- padding: 0 var(--canon-space-12);
+ padding-inline: var(--canon-space-12);
}
}
diff --git a/packages/canon/report.api.md b/packages/canon/report.api.md
index f5f4042776..bc0ad71e90 100644
--- a/packages/canon/report.api.md
+++ b/packages/canon/report.api.md
@@ -453,9 +453,8 @@ export type GetPropDefTypes
= {
};
// @public (undocumented)
-export const Grid: ForwardRefExoticComponent<
- GridProps & RefAttributes
-> & {
+export const Grid: {
+ Root: ForwardRefExoticComponent>;
Item: ForwardRefExoticComponent<
GridItemProps & RefAttributes
>;
diff --git a/packages/canon/src/components/Container/Container.stories.tsx b/packages/canon/src/components/Container/Container.stories.tsx
index 5e434b7eb0..ca1165f44c 100644
--- a/packages/canon/src/components/Container/Container.stories.tsx
+++ b/packages/canon/src/components/Container/Container.stories.tsx
@@ -21,6 +21,9 @@ import { Container } from './Container';
const meta = {
title: 'Layout/Container',
component: Container,
+ parameters: {
+ layout: 'fullscreen',
+ },
argTypes: {
children: {
control: false,
@@ -48,14 +51,9 @@ const DecorativeBox = () => (
);
export const Default: Story = {
- parameters: {
- layout: 'fullscreen',
+ args: {
+ children: ,
},
- render: args => (
-
-
-
- ),
};
export const Preview: Story = {
@@ -65,3 +63,45 @@ export const Preview: Story = {
),
};
+
+export const WithPaddingY: Story = {
+ args: {
+ ...Default.args,
+ py: '4',
+ },
+};
+
+export const WithPaddingTop: Story = {
+ args: {
+ ...Default.args,
+ pt: '4',
+ },
+};
+
+export const WithPaddingBottom: Story = {
+ args: {
+ ...Default.args,
+ pb: '4',
+ },
+};
+
+export const WithMarginY: Story = {
+ args: {
+ ...Default.args,
+ my: '4',
+ },
+};
+
+export const WithMarginTop: Story = {
+ args: {
+ ...Default.args,
+ mt: '4',
+ },
+};
+
+export const WithMarginBottom: Story = {
+ args: {
+ ...Default.args,
+ mb: '4',
+ },
+};
diff --git a/packages/canon/src/components/Container/Container.tsx b/packages/canon/src/components/Container/Container.tsx
index 46a5356d56..e670a61a21 100644
--- a/packages/canon/src/components/Container/Container.tsx
+++ b/packages/canon/src/components/Container/Container.tsx
@@ -19,17 +19,31 @@ import { ContainerProps } from './types';
import clsx from 'clsx';
import { displayPropDefs } from '../../props/display.props';
import { extractProps } from '../../utils/extractProps';
+import { spacingPropDefs } from '../../props/spacing.props';
/** @public */
export const Container = forwardRef(
(props, ref) => {
const { children } = props;
+ // Create a subset of spacing props that match the interface
+ const containerSpacingProps = {
+ my: spacingPropDefs.my,
+ mt: spacingPropDefs.mt,
+ mb: spacingPropDefs.mb,
+ py: spacingPropDefs.py,
+ pt: spacingPropDefs.pt,
+ pb: spacingPropDefs.pb,
+ };
+
const propDefs = {
...displayPropDefs,
+ ...containerSpacingProps,
};
const { className, style } = extractProps(props, propDefs);
+ console.log(className, style);
+
return createElement('div', {
ref,
className: clsx('canon-Container', className),
diff --git a/packages/canon/src/components/Container/styles.css b/packages/canon/src/components/Container/styles.css
index 1ebf63987f..ae2bad2c29 100644
--- a/packages/canon/src/components/Container/styles.css
+++ b/packages/canon/src/components/Container/styles.css
@@ -1,18 +1,18 @@
.canon-Container {
max-width: 120rem;
- padding: 0 var(--canon-space-4);
- margin: 0 auto;
+ padding-inline: var(--canon-space-4);
+ margin-inline: auto;
transition: padding 0.2s ease-in-out;
}
@media (min-width: 640px) {
.canon-Container {
- padding: 0 var(--canon-space-8);
+ padding-inline: var(--canon-space-8);
}
}
@media (min-width: 1024px) {
.canon-Container {
- padding: 0 var(--canon-space-12);
+ padding-inline: var(--canon-space-12);
}
}
diff --git a/packages/canon/src/components/Flex/Flex.stories.tsx b/packages/canon/src/components/Flex/Flex.stories.tsx
index bbb5e84692..91b8dc8fb6 100644
--- a/packages/canon/src/components/Flex/Flex.stories.tsx
+++ b/packages/canon/src/components/Flex/Flex.stories.tsx
@@ -62,7 +62,9 @@ export const Default: Story = {
args: {
children: (
<>
- , ,
+
+
+
>
),
},
@@ -70,23 +72,15 @@ export const Default: Story = {
export const ColumnDirection: Story = {
args: {
+ ...Default.args,
direction: 'column',
- children: (
- <>
- , ,
- >
- ),
},
};
export const RowDirection: Story = {
args: {
+ ...Default.args,
direction: 'row',
- children: (
- <>
- , ,
- >
- ),
},
};
diff --git a/packages/canon/src/components/Flex/Flex.tsx b/packages/canon/src/components/Flex/Flex.tsx
index 7c84ed08f8..a53e0d28f4 100644
--- a/packages/canon/src/components/Flex/Flex.tsx
+++ b/packages/canon/src/components/Flex/Flex.tsx
@@ -20,12 +20,14 @@ import clsx from 'clsx';
import { flexPropDefs } from './Flex.props';
import { extractProps } from '../../utils/extractProps';
import { gapPropDefs } from '../../props/gap-props';
+import { spacingPropDefs } from '../../props/spacing.props';
/** @public */
export const Flex = forwardRef((props, ref) => {
const propDefs = {
...gapPropDefs,
...flexPropDefs,
+ ...spacingPropDefs,
};
const { className, style } = extractProps(props, propDefs);
diff --git a/packages/canon/src/components/Grid/Grid.stories.tsx b/packages/canon/src/components/Grid/Grid.stories.tsx
index 233d66bae7..2482afbaca 100644
--- a/packages/canon/src/components/Grid/Grid.stories.tsx
+++ b/packages/canon/src/components/Grid/Grid.stories.tsx
@@ -22,18 +22,7 @@ import { Flex } from '../Flex';
const meta = {
title: 'Layout/Grid',
- component: Grid,
- argTypes: {
- children: {
- control: false,
- },
- className: {
- control: 'text',
- },
- },
- args: {
- gap: '4',
- },
+ component: Grid.Root,
} satisfies Meta;
export default meta;
@@ -53,27 +42,22 @@ const FakeBox = () => (
);
export const Default: Story = {
- args: {},
- render: args => (
-
-
-
-
-
- ),
+ args: {
+ children: (
+ <>
+
+
+
+ >
+ ),
+ },
};
export const LargeGap: Story = {
args: {
+ ...Default.args,
gap: '64px',
},
- render: args => (
-
-
-
-
-
- ),
};
export const ColumnSizes: Story = {
@@ -81,16 +65,16 @@ export const ColumnSizes: Story = {
columns: '12',
},
render: args => (
-
+
{Array.from({ length: 11 }, (_, i) => (
-
+
-
+
))}
),
@@ -101,27 +85,25 @@ export const RowAndColumns: Story = {
columns: '12',
},
render: args => (
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
),
};
diff --git a/packages/canon/src/components/Grid/Grid.tsx b/packages/canon/src/components/Grid/Grid.tsx
index aedce886ed..7bb5486a2d 100644
--- a/packages/canon/src/components/Grid/Grid.tsx
+++ b/packages/canon/src/components/Grid/Grid.tsx
@@ -20,11 +20,13 @@ import { extractProps } from '../../utils/extractProps';
import { gridItemPropDefs, gridPropDefs } from './Grid.props';
import clsx from 'clsx';
import type { GridItemProps, GridProps } from './types';
+import { spacingPropDefs } from '../../props/spacing.props';
-const GridBase = forwardRef((props, ref) => {
+const GridRoot = forwardRef((props, ref) => {
const propDefs = {
...gapPropDefs,
...gridPropDefs,
+ ...spacingPropDefs,
};
const { className, style } = extractProps(props, propDefs);
@@ -53,4 +55,7 @@ const GridItem = forwardRef((props, ref) => {
});
/** @public */
-export const Grid = Object.assign(GridBase, { Item: GridItem });
+export const Grid = {
+ Root: GridRoot,
+ Item: GridItem,
+};