aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/molecules
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-04-25 12:57:12 +0200
committerArmand Philippot <git@armandphilippot.com>2022-04-25 12:57:12 +0200
commit8a6f09b564d5d2f02d0a2605f6b52070a910aaa3 (patch)
treecd9e2b6ae6be75f4595b9823e67ebb6bc76df8e8 /src/components/molecules
parent782a5a1e794a9a8ef6b0b892cd3f386ed583c680 (diff)
chore: add a PageLayout component
Diffstat (limited to 'src/components/molecules')
-rw-r--r--src/components/molecules/layout/meta.module.scss17
-rw-r--r--src/components/molecules/layout/meta.tsx14
-rw-r--r--src/components/molecules/nav/breadcrumb.stories.tsx13
-rw-r--r--src/components/molecules/nav/breadcrumb.tsx22
4 files changed, 59 insertions, 7 deletions
diff --git a/src/components/molecules/layout/meta.module.scss b/src/components/molecules/layout/meta.module.scss
new file mode 100644
index 0000000..f7cc55b
--- /dev/null
+++ b/src/components/molecules/layout/meta.module.scss
@@ -0,0 +1,17 @@
+@use "@styles/abstracts/mixins" as mix;
+
+.list {
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+
+ @include mix.media("screen") {
+ @include mix.dimensions("sm") {
+ display: flex;
+ flex-flow: column nowrap;
+ }
+ }
+}
+
+.value {
+ word-break: break-all;
+}
diff --git a/src/components/molecules/layout/meta.tsx b/src/components/molecules/layout/meta.tsx
index fcce473..d05396e 100644
--- a/src/components/molecules/layout/meta.tsx
+++ b/src/components/molecules/layout/meta.tsx
@@ -3,6 +3,7 @@ import DescriptionList, {
type DescriptionListItem,
} from '@components/atoms/lists/description-list';
import { FC, ReactNode } from 'react';
+import styles from './meta.module.scss';
export type MetaItem = {
/**
@@ -23,7 +24,7 @@ export type MetaProps = {
/**
* Set additional classnames to the meta wrapper.
*/
- className?: string;
+ className?: DescriptionListProps['className'];
/**
* The meta data.
*/
@@ -43,7 +44,7 @@ export type MetaProps = {
*
* Renders the page metadata.
*/
-const Meta: FC<MetaProps> = ({ data, ...props }) => {
+const Meta: FC<MetaProps> = ({ className, data, ...props }) => {
/**
* Transform the metadata to description list item format.
*
@@ -68,7 +69,14 @@ const Meta: FC<MetaProps> = ({ data, ...props }) => {
return listItems;
};
- return <DescriptionList items={getItems(data)} {...props} />;
+ return (
+ <DescriptionList
+ items={getItems(data)}
+ className={`${styles.list} ${className}`}
+ descriptionClassName={styles.value}
+ {...props}
+ />
+ );
};
export default Meta;
diff --git a/src/components/molecules/nav/breadcrumb.stories.tsx b/src/components/molecules/nav/breadcrumb.stories.tsx
index 500ae6c..e26b480 100644
--- a/src/components/molecules/nav/breadcrumb.stories.tsx
+++ b/src/components/molecules/nav/breadcrumb.stories.tsx
@@ -22,6 +22,19 @@ export default {
required: false,
},
},
+ itemClassName: {
+ control: {
+ type: 'text',
+ },
+ table: {
+ category: 'Styles',
+ },
+ description: 'Set additional classnames to the breadcrumb items.',
+ type: {
+ name: 'string',
+ required: false,
+ },
+ },
items: {
description: 'The breadcrumb items.',
type: {
diff --git a/src/components/molecules/nav/breadcrumb.tsx b/src/components/molecules/nav/breadcrumb.tsx
index 6dc86a0..d184d65 100644
--- a/src/components/molecules/nav/breadcrumb.tsx
+++ b/src/components/molecules/nav/breadcrumb.tsx
@@ -27,6 +27,10 @@ export type BreadcrumbProps = {
*/
className?: string;
/**
+ * Set additional classnames to the breadcrumb items.
+ */
+ itemClassName?: string;
+ /**
* The breadcrumb items
*/
items: BreadcrumbItem[];
@@ -37,9 +41,19 @@ export type BreadcrumbProps = {
*
* Render a breadcrumb navigation.
*/
-const Breadcrumb: FC<BreadcrumbProps> = ({ items, ...props }) => {
+const Breadcrumb: FC<BreadcrumbProps> = ({
+ itemClassName = '',
+ items,
+ ...props
+}) => {
const intl = useIntl();
+ const ariaLabel = intl.formatMessage({
+ defaultMessage: 'Breadcrumb',
+ description: 'Breadcrumb: an accessible name for the breadcrumb nav.',
+ id: '28nnDY',
+ });
+
/**
* Retrieve the breadcrumb list items.
*
@@ -49,12 +63,12 @@ const Breadcrumb: FC<BreadcrumbProps> = ({ items, ...props }) => {
const getListItems = (list: BreadcrumbItem[]): JSX.Element[] => {
return list.map((item, index) => {
const isLastItem = index === list.length - 1;
- const itemClassnames = isLastItem
+ const itemStyles = isLastItem
? `${styles.item} screen-reader-text`
: styles.item;
return (
- <li key={item.id} className={itemClassnames}>
+ <li key={item.id} className={`${itemStyles} ${itemClassName}`}>
{isLastItem ? item.name : <Link href={item.url}>{item.name}</Link>}
</li>
);
@@ -96,7 +110,7 @@ const Breadcrumb: FC<BreadcrumbProps> = ({ items, ...props }) => {
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schemaJsonLd) }}
/>
- <nav {...props}>
+ <nav aria-label={ariaLabel} {...props}>
<span className="screen-reader-text">
{intl.formatMessage({
defaultMessage: 'You are here:',