diff --git a/packages/canon/docs/Home.mdx b/packages/canon/docs/Home.mdx
index e0530ce9063e2..3a00de5d070da 100644
--- a/packages/canon/docs/Home.mdx
+++ b/packages/canon/docs/Home.mdx
@@ -1,5 +1,13 @@
import { Unstyled } from '@storybook/blocks';
-import { Columns, Text, ComponentStatus, Banner, Title } from './components';
+import {
+ Columns,
+ Text,
+ ComponentStatus,
+ Banner,
+ Title,
+ Roadmap,
+} from './components';
+import { list } from './components/Roadmap/list';
@@ -19,7 +27,7 @@ import { Columns, Text, ComponentStatus, Banner, Title } from './components';
- Project Status
+ Component Status
We are still in the process of documenting the API and building the
@@ -29,51 +37,45 @@ import { Columns, Text, ComponentStatus, Banner, Title } from './components';
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+ Roadmap
+
+
+
+
diff --git a/packages/canon/docs/components/Columns/columns.css.ts b/packages/canon/docs/components/Columns/columns.css.ts
index 6efe97c34960b..0b5ec18aef879 100644
--- a/packages/canon/docs/components/Columns/columns.css.ts
+++ b/packages/canon/docs/components/Columns/columns.css.ts
@@ -18,7 +18,7 @@ import { style } from '@vanilla-extract/css';
export const styles = style({
display: 'grid',
- gridTemplateColumns: 'repeat(2, 1fr)',
+ gridTemplateColumns: 'repeat(3, 1fr)',
rowGap: '20px',
columnGap: '80px',
});
diff --git a/packages/canon/docs/components/ComponentStatus/component-status.css.ts b/packages/canon/docs/components/ComponentStatus/component-status.css.ts
index 80d222132dd90..5cce5adb5da42 100644
--- a/packages/canon/docs/components/ComponentStatus/component-status.css.ts
+++ b/packages/canon/docs/components/ComponentStatus/component-status.css.ts
@@ -57,12 +57,17 @@ export const pill = recipe({
borderColor: '#FFD000',
color: '#D79927',
},
- review: {
+ alpha: {
backgroundColor: '#D7F9D7',
borderColor: '#4ED14A',
color: '#3A9837',
},
- done: {
+ beta: {
+ backgroundColor: '#D7F9D7',
+ borderColor: '#4ED14A',
+ color: '#3A9837',
+ },
+ stable: {
backgroundColor: '#D7F9D7',
borderColor: '#4ED14A',
color: '#3A9837',
diff --git a/packages/canon/docs/components/ComponentStatus/index.tsx b/packages/canon/docs/components/ComponentStatus/index.tsx
index fde52e3b37d33..64d552ea97914 100644
--- a/packages/canon/docs/components/ComponentStatus/index.tsx
+++ b/packages/canon/docs/components/ComponentStatus/index.tsx
@@ -24,7 +24,7 @@ export const ComponentStatus = ({
link,
}: {
name: string;
- status: 'notStarted' | 'inProgress' | 'review' | 'done';
+ status: 'notStarted' | 'inProgress' | 'alpha' | 'beta' | 'stable';
style?: React.CSSProperties;
link?: string;
}) => {
@@ -40,8 +40,9 @@ export const ComponentStatus = ({
{status === 'notStarted' && 'Not Started'}
{status === 'inProgress' && 'In Progress'}
- {status === 'review' && 'Ready for Review'}
- {status === 'done' && 'Done'}
+ {status === 'alpha' && 'Alpha'}
+ {status === 'beta' && 'Beta'}
+ {status === 'stable' && 'Stable'}
);
diff --git a/packages/canon/docs/components/Roadmap/index.tsx b/packages/canon/docs/components/Roadmap/index.tsx
new file mode 100644
index 0000000000000..2177ea558f8ed
--- /dev/null
+++ b/packages/canon/docs/components/Roadmap/index.tsx
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2024 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import React from 'react';
+import { RoadmapItem } from './list';
+
+export const Roadmap = ({ list }: { list: RoadmapItem[] }) => {
+ const orderList = ['inProgress', 'notStarted', 'completed'];
+ return (
+
+ {list
+ .sort(
+ (a, b) => orderList.indexOf(a.status) - orderList.indexOf(b.status),
+ )
+ .map(Item)}
+
+ );
+};
+
+const Item = ({
+ title,
+ status = 'notStarted',
+}: {
+ title: string;
+ status: 'notStarted' | 'inProgress' | 'inReview' | 'completed';
+}) => {
+ return (
+
+
+
+ {status === 'notStarted' && 'Not Started'}
+ {status === 'inProgress' && 'In Progress'}
+ {status === 'inReview' && 'Ready for Review'}
+ {status === 'completed' && 'Completed'}
+
+
+ );
+};
diff --git a/packages/canon/docs/components/Roadmap/list.ts b/packages/canon/docs/components/Roadmap/list.ts
new file mode 100644
index 0000000000000..f854a65b8d8d9
--- /dev/null
+++ b/packages/canon/docs/components/Roadmap/list.ts
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2024 The Backstage Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export type RoadmapItem = {
+ title: string;
+ status: 'notStarted' | 'inProgress' | 'inReview' | 'completed';
+};
+
+export const list: RoadmapItem[] = [
+ {
+ title: 'Add collapsing across breakpoints for the Inline component',
+ status: 'notStarted',
+ },
+ {
+ title: 'Add reversing the order for the Inline component',
+ status: 'notStarted',
+ },
+ {
+ title: 'Set up Storybook',
+ status: 'completed',
+ },
+ {
+ title: 'Set up iconography',
+ status: 'completed',
+ },
+ {
+ title: 'Set up global tokens',
+ status: 'inProgress',
+ },
+ {
+ title: 'Set up theming system',
+ status: 'inProgress',
+ },
+ {
+ title: 'Create first pass at box component',
+ status: 'completed',
+ },
+ {
+ title: 'Create first pass at stack component',
+ status: 'completed',
+ },
+ {
+ title: 'Create first pass at inline component',
+ status: 'completed',
+ },
+];
diff --git a/packages/canon/docs/components/Roadmap/styles.css b/packages/canon/docs/components/Roadmap/styles.css
new file mode 100644
index 0000000000000..e47aecf7faa6a
--- /dev/null
+++ b/packages/canon/docs/components/Roadmap/styles.css
@@ -0,0 +1,102 @@
+.roadmap {
+ display: flex;
+ flex-direction: column;
+}
+
+.roadmap .roadmap-item {
+ font-family: 'Geist', sans-serif;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ border-bottom: 1px solid #e0e0e0;
+ padding: 8px 0px;
+}
+
+.roadmap .roadmap-item .left {
+ display: flex;
+ align-items: center;
+ padding-left: 12px;
+ gap: 12px;
+}
+
+.roadmap .roadmap-item .dot {
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ background-color: #e0e0e0;
+}
+
+.roadmap .roadmap-item.notStarted {
+ color: #000;
+}
+
+.roadmap .roadmap-item.inProgress {
+ color: #000;
+}
+
+.roadmap .roadmap-item.inReview {
+ color: #000;
+}
+
+.roadmap .roadmap-item.completed .title {
+ color: #a2a2a2;
+ text-decoration: line-through;
+}
+
+.roadmap .roadmap-item.notStarted .dot {
+ background-color: #d1d1d1;
+}
+
+.roadmap .roadmap-item.inProgress .dot {
+ background-color: #ffd000;
+}
+
+.roadmap .roadmap-item.inReview .dot {
+ background-color: #4ed14a;
+}
+
+.roadmap .roadmap-item.completed .dot {
+ background-color: #4ed14a;
+}
+
+.roadmap .roadmap-item .title {
+ font-weight: 300;
+ font-size: 16px;
+}
+
+.roadmap .roadmap-item .pill {
+ display: inline-flex;
+ align-items: center;
+ height: 24px;
+ padding: 0px 8px;
+ border-radius: 40px;
+ font-size: 12px;
+ font-weight: 600;
+ margin-left: 8px;
+ border-style: solid;
+ border-width: 1px;
+}
+
+.roadmap .roadmap-item.notStarted .pill {
+ background-color: #f2f2f2;
+ border-color: #cdcdcd;
+ color: #888888;
+}
+
+.roadmap .roadmap-item.inProgress .pill {
+ background-color: #fff2b9;
+ border-color: #ffd000;
+ color: #d79927;
+}
+
+.roadmap .roadmap-item.inReview .pill {
+ background-color: #d7f9d7;
+ border-color: #4ed14a;
+ color: #3a9837;
+}
+
+.roadmap .roadmap-item.completed .pill {
+ background-color: #d7f9d7;
+ border-color: #4ed14a;
+ color: #3a9837;
+}
diff --git a/packages/canon/docs/components/index.ts b/packages/canon/docs/components/index.ts
index 88a8cb0391af5..7ad07bec6a70f 100644
--- a/packages/canon/docs/components/index.ts
+++ b/packages/canon/docs/components/index.ts
@@ -23,3 +23,4 @@ export * from './ComponentStatus';
export * from './LayoutComponents';
export * from './Banner';
export * from './IconLibrary';
+export * from './Roadmap';
diff --git a/packages/canon/docs/components/styles.css b/packages/canon/docs/components/styles.css
index 63df6016094a3..698085ad19338 100644
--- a/packages/canon/docs/components/styles.css
+++ b/packages/canon/docs/components/styles.css
@@ -1 +1,2 @@
@import './IconLibrary/styles.css';
+@import './Roadmap/styles.css';