@openwarelabs/blocks 0.6.0 → 0.8.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.
- package/dist/features/Features01/Features01.d.cts +3 -0
- package/dist/features/Features01/Features01.d.ts +3 -0
- package/dist/features/Features01/Features01.types.d.cts +21 -0
- package/dist/features/Features01/Features01.types.d.ts +21 -0
- package/dist/features/Features02/Features02.d.cts +3 -0
- package/dist/features/Features02/Features02.d.ts +3 -0
- package/dist/features/Features02/Features02.types.d.cts +30 -0
- package/dist/features/Features02/Features02.types.d.ts +30 -0
- package/dist/features/Features03/Features03.d.cts +3 -0
- package/dist/features/Features03/Features03.d.ts +3 -0
- package/dist/features/Features03/Features03.types.d.cts +24 -0
- package/dist/features/Features03/Features03.types.d.ts +24 -0
- package/dist/features/Features04/Features04.d.cts +3 -0
- package/dist/features/Features04/Features04.d.ts +3 -0
- package/dist/features/Features04/Features04.types.d.cts +29 -0
- package/dist/features/Features04/Features04.types.d.ts +29 -0
- package/dist/features/Features05/Features05.d.cts +3 -0
- package/dist/features/Features05/Features05.d.ts +3 -0
- package/dist/features/Features05/Features05.types.d.cts +18 -0
- package/dist/features/Features05/Features05.types.d.ts +18 -0
- package/dist/footers/Footer01/Footer01.d.cts +3 -0
- package/dist/footers/Footer01/Footer01.d.ts +3 -0
- package/dist/footers/Footer01/Footer01.types.d.cts +32 -0
- package/dist/footers/Footer01/Footer01.types.d.ts +32 -0
- package/dist/footers/Footer02/Footer02.d.cts +3 -0
- package/dist/footers/Footer02/Footer02.d.ts +3 -0
- package/dist/footers/Footer02/Footer02.types.d.cts +18 -0
- package/dist/footers/Footer02/Footer02.types.d.ts +18 -0
- package/dist/footers/Footer03/Footer03.d.cts +3 -0
- package/dist/footers/Footer03/Footer03.d.ts +3 -0
- package/dist/footers/Footer03/Footer03.types.d.cts +53 -0
- package/dist/footers/Footer03/Footer03.types.d.ts +53 -0
- package/dist/footers/Footer04/Footer04.d.cts +3 -0
- package/dist/footers/Footer04/Footer04.d.ts +3 -0
- package/dist/footers/Footer04/Footer04.types.d.cts +18 -0
- package/dist/footers/Footer04/Footer04.types.d.ts +18 -0
- package/dist/headers/Header01/Header01.d.cts +6 -0
- package/dist/headers/Header01/Header01.d.ts +6 -0
- package/dist/headers/Header01/Header01.types.d.cts +18 -0
- package/dist/headers/Header01/Header01.types.d.ts +18 -0
- package/dist/headers/Header02/Header02.d.cts +6 -0
- package/dist/headers/Header02/Header02.d.ts +6 -0
- package/dist/headers/Header02/Header02.types.d.cts +69 -0
- package/dist/headers/Header02/Header02.types.d.ts +69 -0
- package/dist/headers/Header03/Header03.d.cts +6 -0
- package/dist/headers/Header03/Header03.d.ts +6 -0
- package/dist/headers/Header03/Header03.types.d.cts +24 -0
- package/dist/headers/Header03/Header03.types.d.ts +24 -0
- package/dist/headers/Header04/Header04.d.cts +3 -0
- package/dist/headers/Header04/Header04.d.ts +3 -0
- package/dist/headers/Header04/Header04.types.d.cts +47 -0
- package/dist/headers/Header04/Header04.types.d.ts +47 -0
- package/dist/headers/Header05/Header05.d.cts +3 -0
- package/dist/headers/Header05/Header05.d.ts +3 -0
- package/dist/headers/Header05/Header05.types.d.cts +27 -0
- package/dist/headers/Header05/Header05.types.d.ts +27 -0
- package/dist/index.cjs +1259 -7
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.cts +39 -1
- package/dist/index.d.ts +39 -1
- package/dist/index.js +1272 -20
- package/dist/index.js.map +4 -4
- package/dist/pricing/Pricing01/Pricing01.d.cts +3 -0
- package/dist/pricing/Pricing01/Pricing01.d.ts +3 -0
- package/dist/pricing/Pricing01/Pricing01.types.d.cts +43 -0
- package/dist/pricing/Pricing01/Pricing01.types.d.ts +43 -0
- package/dist/pricing/Pricing02/Pricing02.d.cts +3 -0
- package/dist/pricing/Pricing02/Pricing02.d.ts +3 -0
- package/dist/pricing/Pricing02/Pricing02.types.d.cts +64 -0
- package/dist/pricing/Pricing02/Pricing02.types.d.ts +64 -0
- package/dist/pricing/Pricing03/Pricing03.d.cts +3 -0
- package/dist/pricing/Pricing03/Pricing03.d.ts +3 -0
- package/dist/pricing/Pricing03/Pricing03.types.d.cts +65 -0
- package/dist/pricing/Pricing03/Pricing03.types.d.ts +65 -0
- package/dist/pricing/Pricing04/Pricing04.d.cts +3 -0
- package/dist/pricing/Pricing04/Pricing04.d.ts +3 -0
- package/dist/pricing/Pricing04/Pricing04.types.d.cts +38 -0
- package/dist/pricing/Pricing04/Pricing04.types.d.ts +38 -0
- package/dist/pricing/Pricing05/Pricing05.d.cts +3 -0
- package/dist/pricing/Pricing05/Pricing05.d.ts +3 -0
- package/dist/pricing/Pricing05/Pricing05.types.d.cts +64 -0
- package/dist/pricing/Pricing05/Pricing05.types.d.ts +64 -0
- package/dist/shared/BlockActions.d.cts +1 -1
- package/dist/shared/BlockActions.d.ts +1 -1
- package/dist/shared/BlockBrandLink.d.cts +3 -0
- package/dist/shared/BlockBrandLink.d.ts +3 -0
- package/dist/shared/FooterColumns.d.cts +3 -0
- package/dist/shared/FooterColumns.d.ts +3 -0
- package/dist/shared/icons.d.cts +13 -3
- package/dist/shared/icons.d.ts +13 -3
- package/dist/shared/shared.types.d.cts +49 -1
- package/dist/shared/shared.types.d.ts +49 -1
- package/dist/styles.css +3428 -333
- package/package.json +54 -54
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Features01Props } from "./Features01.types.cjs";
|
|
2
|
+
/** An icon, a short title and a sentence for each feature, in a grid that drops to one column on phones. */
|
|
3
|
+
export declare function Features01({ eyebrow, title, description, features, footer, className, ...props }: Features01Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Features01Props } from "./Features01.types.js";
|
|
2
|
+
/** An icon, a short title and a sentence for each feature, in a grid that drops to one column on phones. */
|
|
3
|
+
export declare function Features01({ eyebrow, title, description, features, footer, className, ...props }: Features01Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
export interface Features01Feature {
|
|
3
|
+
/** A 16px icon, usually from lucide-react, on a tinted tile. */
|
|
4
|
+
icon?: ReactNode;
|
|
5
|
+
/** The feature's name. */
|
|
6
|
+
title: ReactNode;
|
|
7
|
+
/** A sentence or two. */
|
|
8
|
+
description: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export interface Features01Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
11
|
+
/** A small line above the title, such as the section's name. */
|
|
12
|
+
eyebrow?: ReactNode;
|
|
13
|
+
/** The section's heading. */
|
|
14
|
+
title: ReactNode;
|
|
15
|
+
/** A sentence or two under the title. */
|
|
16
|
+
description?: ReactNode;
|
|
17
|
+
/** In three columns, two on tablets and one on phones; six fill two rows. */
|
|
18
|
+
features: Features01Feature[];
|
|
19
|
+
/** A line under the grid, often with a link: "Plus webhooks and an API. Read the docs". */
|
|
20
|
+
footer?: ReactNode;
|
|
21
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
export interface Features01Feature {
|
|
3
|
+
/** A 16px icon, usually from lucide-react, on a tinted tile. */
|
|
4
|
+
icon?: ReactNode;
|
|
5
|
+
/** The feature's name. */
|
|
6
|
+
title: ReactNode;
|
|
7
|
+
/** A sentence or two. */
|
|
8
|
+
description: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export interface Features01Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
11
|
+
/** A small line above the title, such as the section's name. */
|
|
12
|
+
eyebrow?: ReactNode;
|
|
13
|
+
/** The section's heading. */
|
|
14
|
+
title: ReactNode;
|
|
15
|
+
/** A sentence or two under the title. */
|
|
16
|
+
description?: ReactNode;
|
|
17
|
+
/** In three columns, two on tablets and one on phones; six fill two rows. */
|
|
18
|
+
features: Features01Feature[];
|
|
19
|
+
/** A line under the grid, often with a link: "Plus webhooks and an API. Read the docs". */
|
|
20
|
+
footer?: ReactNode;
|
|
21
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Features02Props } from "./Features02.types.cjs";
|
|
2
|
+
/** Rows that swap sides, each a few lines and points beside a picture on a dot grid. */
|
|
3
|
+
export declare function Features02({ eyebrow, title, description, rows, className, ...props }: Features02Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Features02Props } from "./Features02.types.js";
|
|
2
|
+
/** Rows that swap sides, each a few lines and points beside a picture on a dot grid. */
|
|
3
|
+
export declare function Features02({ eyebrow, title, description, rows, className, ...props }: Features02Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockLink } from "../../shared/shared.types.cjs";
|
|
3
|
+
export interface Features02Row {
|
|
4
|
+
/** A small line above the title, in the brand colour: "Agents". */
|
|
5
|
+
kicker?: ReactNode;
|
|
6
|
+
/** A 15px icon before the kicker. */
|
|
7
|
+
icon?: ReactNode;
|
|
8
|
+
/** The row's heading. */
|
|
9
|
+
title: ReactNode;
|
|
10
|
+
/** A sentence or two about it. */
|
|
11
|
+
description: ReactNode;
|
|
12
|
+
/** Short points under it, each with a tick. */
|
|
13
|
+
points?: ReactNode[];
|
|
14
|
+
/** A link at the end, with an arrow: "How agents work". */
|
|
15
|
+
link?: BlockLink;
|
|
16
|
+
/** The picture beside it, on a dot grid: a screenshot, or something drawn. */
|
|
17
|
+
visual: ReactNode;
|
|
18
|
+
/** Describes the visual for screen readers when it isn't an <img> with alt text of its own. */
|
|
19
|
+
visualLabel?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface Features02Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
22
|
+
/** A small line above the title, such as the section's name. */
|
|
23
|
+
eyebrow?: ReactNode;
|
|
24
|
+
/** The section's heading. */
|
|
25
|
+
title: ReactNode;
|
|
26
|
+
/** A sentence or two under the title. */
|
|
27
|
+
description?: ReactNode;
|
|
28
|
+
/** The features, one per row, the picture swapping sides each time. They stack on phones. */
|
|
29
|
+
rows: Features02Row[];
|
|
30
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockLink } from "../../shared/shared.types.js";
|
|
3
|
+
export interface Features02Row {
|
|
4
|
+
/** A small line above the title, in the brand colour: "Agents". */
|
|
5
|
+
kicker?: ReactNode;
|
|
6
|
+
/** A 15px icon before the kicker. */
|
|
7
|
+
icon?: ReactNode;
|
|
8
|
+
/** The row's heading. */
|
|
9
|
+
title: ReactNode;
|
|
10
|
+
/** A sentence or two about it. */
|
|
11
|
+
description: ReactNode;
|
|
12
|
+
/** Short points under it, each with a tick. */
|
|
13
|
+
points?: ReactNode[];
|
|
14
|
+
/** A link at the end, with an arrow: "How agents work". */
|
|
15
|
+
link?: BlockLink;
|
|
16
|
+
/** The picture beside it, on a dot grid: a screenshot, or something drawn. */
|
|
17
|
+
visual: ReactNode;
|
|
18
|
+
/** Describes the visual for screen readers when it isn't an <img> with alt text of its own. */
|
|
19
|
+
visualLabel?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface Features02Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
22
|
+
/** A small line above the title, such as the section's name. */
|
|
23
|
+
eyebrow?: ReactNode;
|
|
24
|
+
/** The section's heading. */
|
|
25
|
+
title: ReactNode;
|
|
26
|
+
/** A sentence or two under the title. */
|
|
27
|
+
description?: ReactNode;
|
|
28
|
+
/** The features, one per row, the picture swapping sides each time. They stack on phones. */
|
|
29
|
+
rows: Features02Row[];
|
|
30
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Features03Props } from "./Features03.types.cjs";
|
|
2
|
+
/** A bento grid: cards of different sizes, the biggest for the feature that matters most. */
|
|
3
|
+
export declare function Features03({ eyebrow, title, description, cards, className, ...props }: Features03Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Features03Props } from "./Features03.types.js";
|
|
2
|
+
/** A bento grid: cards of different sizes, the biggest for the feature that matters most. */
|
|
3
|
+
export declare function Features03({ eyebrow, title, description, cards, className, ...props }: Features03Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
export interface Features03Card {
|
|
3
|
+
/** The card's heading. */
|
|
4
|
+
title: ReactNode;
|
|
5
|
+
/** A line or two about it. */
|
|
6
|
+
description: ReactNode;
|
|
7
|
+
/** The picture in the card: a screenshot, or something drawn. */
|
|
8
|
+
visual: ReactNode;
|
|
9
|
+
/** Describes the visual for screen readers when it isn't an <img> with alt text of its own. */
|
|
10
|
+
visualLabel?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface Features03Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
13
|
+
/** A small line above the title, such as the section's name. */
|
|
14
|
+
eyebrow?: ReactNode;
|
|
15
|
+
/** The section's heading. */
|
|
16
|
+
title: ReactNode;
|
|
17
|
+
/** A lead beside the title, on the right. */
|
|
18
|
+
description?: ReactNode;
|
|
19
|
+
/**
|
|
20
|
+
* The cards. The first is the big one, two columns wide and two rows tall, with a heading and a lead; the rest
|
|
21
|
+
* are dense cards around it. Six fill the grid; on tablets the first and the last span the full width.
|
|
22
|
+
*/
|
|
23
|
+
cards: Features03Card[];
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
export interface Features03Card {
|
|
3
|
+
/** The card's heading. */
|
|
4
|
+
title: ReactNode;
|
|
5
|
+
/** A line or two about it. */
|
|
6
|
+
description: ReactNode;
|
|
7
|
+
/** The picture in the card: a screenshot, or something drawn. */
|
|
8
|
+
visual: ReactNode;
|
|
9
|
+
/** Describes the visual for screen readers when it isn't an <img> with alt text of its own. */
|
|
10
|
+
visualLabel?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface Features03Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
13
|
+
/** A small line above the title, such as the section's name. */
|
|
14
|
+
eyebrow?: ReactNode;
|
|
15
|
+
/** The section's heading. */
|
|
16
|
+
title: ReactNode;
|
|
17
|
+
/** A lead beside the title, on the right. */
|
|
18
|
+
description?: ReactNode;
|
|
19
|
+
/**
|
|
20
|
+
* The cards. The first is the big one, two columns wide and two rows tall, with a heading and a lead; the rest
|
|
21
|
+
* are dense cards around it. Six fill the grid; on tablets the first and the last span the full width.
|
|
22
|
+
*/
|
|
23
|
+
cards: Features03Card[];
|
|
24
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Features04Props } from "./Features04.types.cjs";
|
|
2
|
+
/** A row of tabs, each showing its part of the product with a caption above it. */
|
|
3
|
+
export declare function Features04({ eyebrow, title, description, tabs, defaultTab, labels, className, ...props }: Features04Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Features04Props } from "./Features04.types.js";
|
|
2
|
+
/** A row of tabs, each showing its part of the product with a caption above it. */
|
|
3
|
+
export declare function Features04({ eyebrow, title, description, tabs, defaultTab, labels, className, ...props }: Features04Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
export interface Features04Tab {
|
|
3
|
+
/** The tab's name: "Plan". */
|
|
4
|
+
label: ReactNode;
|
|
5
|
+
/** A 16px icon before it. */
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
/** A sentence above the picture when the tab is open. */
|
|
8
|
+
caption?: ReactNode;
|
|
9
|
+
/** The part of the product it shows: a screenshot, or something drawn. */
|
|
10
|
+
visual: ReactNode;
|
|
11
|
+
}
|
|
12
|
+
export interface Features04Labels {
|
|
13
|
+
/** The row of tabs, for screen readers. @default "Features" */
|
|
14
|
+
tabs?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface Features04Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
17
|
+
/** A small line above the title, such as the section's name. */
|
|
18
|
+
eyebrow?: ReactNode;
|
|
19
|
+
/** The section's heading. */
|
|
20
|
+
title: ReactNode;
|
|
21
|
+
/** A sentence or two under the title. */
|
|
22
|
+
description?: ReactNode;
|
|
23
|
+
/** A row of tabs; each shows its part of the product. */
|
|
24
|
+
tabs: Features04Tab[];
|
|
25
|
+
/** The tab open at first, by index. @default 0 */
|
|
26
|
+
defaultTab?: number;
|
|
27
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
28
|
+
labels?: Features04Labels;
|
|
29
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
export interface Features04Tab {
|
|
3
|
+
/** The tab's name: "Plan". */
|
|
4
|
+
label: ReactNode;
|
|
5
|
+
/** A 16px icon before it. */
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
/** A sentence above the picture when the tab is open. */
|
|
8
|
+
caption?: ReactNode;
|
|
9
|
+
/** The part of the product it shows: a screenshot, or something drawn. */
|
|
10
|
+
visual: ReactNode;
|
|
11
|
+
}
|
|
12
|
+
export interface Features04Labels {
|
|
13
|
+
/** The row of tabs, for screen readers. @default "Features" */
|
|
14
|
+
tabs?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface Features04Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
17
|
+
/** A small line above the title, such as the section's name. */
|
|
18
|
+
eyebrow?: ReactNode;
|
|
19
|
+
/** The section's heading. */
|
|
20
|
+
title: ReactNode;
|
|
21
|
+
/** A sentence or two under the title. */
|
|
22
|
+
description?: ReactNode;
|
|
23
|
+
/** A row of tabs; each shows its part of the product. */
|
|
24
|
+
tabs: Features04Tab[];
|
|
25
|
+
/** The tab open at first, by index. @default 0 */
|
|
26
|
+
defaultTab?: number;
|
|
27
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
28
|
+
labels?: Features04Labels;
|
|
29
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Features05Props } from "./Features05.types.cjs";
|
|
2
|
+
/** A checklist of what's included, with a button, beside one large picture. */
|
|
3
|
+
export declare function Features05({ eyebrow, title, description, items, primaryAction, secondaryLink, visual, className, ...props }: Features05Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Features05Props } from "./Features05.types.js";
|
|
2
|
+
/** A checklist of what's included, with a button, beside one large picture. */
|
|
3
|
+
export declare function Features05({ eyebrow, title, description, items, primaryAction, secondaryLink, visual, className, ...props }: Features05Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction, BlockLink } from "../../shared/shared.types.cjs";
|
|
3
|
+
export interface Features05Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
4
|
+
/** A small line above the title, such as the section's name. */
|
|
5
|
+
eyebrow?: ReactNode;
|
|
6
|
+
/** The section's heading. */
|
|
7
|
+
title: ReactNode;
|
|
8
|
+
/** A sentence or two under the title. */
|
|
9
|
+
description?: ReactNode;
|
|
10
|
+
/** What's included, in two columns, each with a tick. */
|
|
11
|
+
items: ReactNode[];
|
|
12
|
+
/** The main button under the list. */
|
|
13
|
+
primaryAction?: BlockAction;
|
|
14
|
+
/** A text link beside it: "Compare plans". */
|
|
15
|
+
secondaryLink?: BlockLink;
|
|
16
|
+
/** The large picture on the right (under the list on phones), usually a screenshot. */
|
|
17
|
+
visual: ReactNode;
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction, BlockLink } from "../../shared/shared.types.js";
|
|
3
|
+
export interface Features05Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
4
|
+
/** A small line above the title, such as the section's name. */
|
|
5
|
+
eyebrow?: ReactNode;
|
|
6
|
+
/** The section's heading. */
|
|
7
|
+
title: ReactNode;
|
|
8
|
+
/** A sentence or two under the title. */
|
|
9
|
+
description?: ReactNode;
|
|
10
|
+
/** What's included, in two columns, each with a tick. */
|
|
11
|
+
items: ReactNode[];
|
|
12
|
+
/** The main button under the list. */
|
|
13
|
+
primaryAction?: BlockAction;
|
|
14
|
+
/** A text link beside it: "Compare plans". */
|
|
15
|
+
secondaryLink?: BlockLink;
|
|
16
|
+
/** The large picture on the right (under the list on phones), usually a screenshot. */
|
|
17
|
+
visual: ReactNode;
|
|
18
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Footer01Props } from "./Footer01.types.cjs";
|
|
2
|
+
/** The logo and a line, then three or four columns of links, with the small print and a theme switch below. */
|
|
3
|
+
export declare function Footer01({ brand, description, status, columns, legal, legalLinks, themeSwitch, labels, className, ...props }: Footer01Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Footer01Props } from "./Footer01.types.js";
|
|
2
|
+
/** The logo and a line, then three or four columns of links, with the small print and a theme switch below. */
|
|
3
|
+
export declare function Footer01({ brand, description, status, columns, legal, legalLinks, themeSwitch, labels, className, ...props }: Footer01Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockBrand, BlockLink, FooterColumn } from "../../shared/shared.types.cjs";
|
|
3
|
+
export interface Footer01Labels {
|
|
4
|
+
/** The logo link's name. @default `${brand.name} home`, when the name is text */
|
|
5
|
+
home?: string;
|
|
6
|
+
/** Beside the theme switch. @default "Theme" */
|
|
7
|
+
theme?: string;
|
|
8
|
+
/** @default "Light" */
|
|
9
|
+
light?: string;
|
|
10
|
+
/** @default "Dark" */
|
|
11
|
+
dark?: string;
|
|
12
|
+
/** @default "Match the system" */
|
|
13
|
+
system?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface Footer01Props extends Omit<HTMLAttributes<HTMLElement>, "children"> {
|
|
16
|
+
/** The logo and name at the top left. */
|
|
17
|
+
brand: BlockBrand;
|
|
18
|
+
/** A line under it about the product. */
|
|
19
|
+
description?: ReactNode;
|
|
20
|
+
/** A link with a green dot under that: "All systems normal". */
|
|
21
|
+
status?: BlockLink;
|
|
22
|
+
/** Three or four columns of links beside the brand. A link's badge ("New") shows after it. */
|
|
23
|
+
columns: FooterColumn[];
|
|
24
|
+
/** The small print at the bottom left: "© 2026 Acme Ltd." */
|
|
25
|
+
legal: ReactNode;
|
|
26
|
+
/** Links after it: "Cookie settings". */
|
|
27
|
+
legalLinks?: BlockLink[];
|
|
28
|
+
/** A light, dark and system switch at the bottom right, which sets data-theme on <html>. */
|
|
29
|
+
themeSwitch?: boolean;
|
|
30
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
31
|
+
labels?: Footer01Labels;
|
|
32
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockBrand, BlockLink, FooterColumn } from "../../shared/shared.types.js";
|
|
3
|
+
export interface Footer01Labels {
|
|
4
|
+
/** The logo link's name. @default `${brand.name} home`, when the name is text */
|
|
5
|
+
home?: string;
|
|
6
|
+
/** Beside the theme switch. @default "Theme" */
|
|
7
|
+
theme?: string;
|
|
8
|
+
/** @default "Light" */
|
|
9
|
+
light?: string;
|
|
10
|
+
/** @default "Dark" */
|
|
11
|
+
dark?: string;
|
|
12
|
+
/** @default "Match the system" */
|
|
13
|
+
system?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface Footer01Props extends Omit<HTMLAttributes<HTMLElement>, "children"> {
|
|
16
|
+
/** The logo and name at the top left. */
|
|
17
|
+
brand: BlockBrand;
|
|
18
|
+
/** A line under it about the product. */
|
|
19
|
+
description?: ReactNode;
|
|
20
|
+
/** A link with a green dot under that: "All systems normal". */
|
|
21
|
+
status?: BlockLink;
|
|
22
|
+
/** Three or four columns of links beside the brand. A link's badge ("New") shows after it. */
|
|
23
|
+
columns: FooterColumn[];
|
|
24
|
+
/** The small print at the bottom left: "© 2026 Acme Ltd." */
|
|
25
|
+
legal: ReactNode;
|
|
26
|
+
/** Links after it: "Cookie settings". */
|
|
27
|
+
legalLinks?: BlockLink[];
|
|
28
|
+
/** A light, dark and system switch at the bottom right, which sets data-theme on <html>. */
|
|
29
|
+
themeSwitch?: boolean;
|
|
30
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
31
|
+
labels?: Footer01Labels;
|
|
32
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockBrand, BlockLink } from "../../shared/shared.types.cjs";
|
|
3
|
+
export interface Footer02Labels {
|
|
4
|
+
/** The logo link's name. @default `${brand.name} home`, when the name is text */
|
|
5
|
+
home?: string;
|
|
6
|
+
/** The links' name for screen readers. @default "Footer" */
|
|
7
|
+
nav?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface Footer02Props extends Omit<HTMLAttributes<HTMLElement>, "children"> {
|
|
10
|
+
/** Only its logo shows, as a link home; the name is its accessible name. */
|
|
11
|
+
brand: BlockBrand;
|
|
12
|
+
/** One line of links, centred; it wraps on phones. */
|
|
13
|
+
links: BlockLink[];
|
|
14
|
+
/** The small print under them: "© 2026 Acme Ltd. All rights reserved." */
|
|
15
|
+
legal: ReactNode;
|
|
16
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
17
|
+
labels?: Footer02Labels;
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockBrand, BlockLink } from "../../shared/shared.types.js";
|
|
3
|
+
export interface Footer02Labels {
|
|
4
|
+
/** The logo link's name. @default `${brand.name} home`, when the name is text */
|
|
5
|
+
home?: string;
|
|
6
|
+
/** The links' name for screen readers. @default "Footer" */
|
|
7
|
+
nav?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface Footer02Props extends Omit<HTMLAttributes<HTMLElement>, "children"> {
|
|
10
|
+
/** Only its logo shows, as a link home; the name is its accessible name. */
|
|
11
|
+
brand: BlockBrand;
|
|
12
|
+
/** One line of links, centred; it wraps on phones. */
|
|
13
|
+
links: BlockLink[];
|
|
14
|
+
/** The small print under them: "© 2026 Acme Ltd. All rights reserved." */
|
|
15
|
+
legal: ReactNode;
|
|
16
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
17
|
+
labels?: Footer02Labels;
|
|
18
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Footer03Props } from "./Footer03.types.cjs";
|
|
2
|
+
/** A newsletter sign-up across the top, then the brand and columns of links, then the small print. */
|
|
3
|
+
export declare function Footer03({ newsletter, brand, description, columns, legal, legalLinks, labels, className, ...props }: Footer03Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Footer03Props } from "./Footer03.types.js";
|
|
2
|
+
/** A newsletter sign-up across the top, then the brand and columns of links, then the small print. */
|
|
3
|
+
export declare function Footer03({ newsletter, brand, description, columns, legal, legalLinks, labels, className, ...props }: Footer03Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockBrand, BlockLink, FooterColumn } from "../../shared/shared.types.cjs";
|
|
3
|
+
export interface Footer03Labels {
|
|
4
|
+
/** The logo link's name. @default `${brand.name} home`, when the name is text */
|
|
5
|
+
home?: string;
|
|
6
|
+
/** The field's accessible name. @default "Email address" */
|
|
7
|
+
email?: string;
|
|
8
|
+
/** @default "you@example.com" */
|
|
9
|
+
placeholder?: string;
|
|
10
|
+
/** The button that brings the form back. @default "Change" */
|
|
11
|
+
change?: string;
|
|
12
|
+
/** @default "Enter your email address." */
|
|
13
|
+
empty?: string;
|
|
14
|
+
/** @default "That doesn't look like an email address. Check it for a typo." */
|
|
15
|
+
invalid?: string;
|
|
16
|
+
/** Shown when `onSubmit` fails without a message of its own. @default "That didn't go through. Try again in a moment." */
|
|
17
|
+
failed?: string;
|
|
18
|
+
}
|
|
19
|
+
/** The sign-up at the top of the footer. */
|
|
20
|
+
export interface Footer03Newsletter {
|
|
21
|
+
/** The sign-up's heading. */
|
|
22
|
+
title: ReactNode;
|
|
23
|
+
/** A line under it. */
|
|
24
|
+
description?: ReactNode;
|
|
25
|
+
/** The button's words: "Subscribe". */
|
|
26
|
+
submitLabel: ReactNode;
|
|
27
|
+
/** An icon after them, such as an arrow. */
|
|
28
|
+
submitIcon?: ReactNode;
|
|
29
|
+
/** Adds the address to your list. While its promise is pending the button shows a spinner; if it throws, its message shows under the field. */
|
|
30
|
+
onSubmit(email: string): void | Promise<void>;
|
|
31
|
+
/** A line under the field: "One email a month. Unsubscribe whenever you like." */
|
|
32
|
+
note?: ReactNode;
|
|
33
|
+
/** What replaces the form once they've signed up: "Check your inbox". */
|
|
34
|
+
successTitle: ReactNode;
|
|
35
|
+
/** A line beside it, given their address. */
|
|
36
|
+
successDescription?(email: string): ReactNode;
|
|
37
|
+
}
|
|
38
|
+
export interface Footer03Props extends Omit<HTMLAttributes<HTMLElement>, "children"> {
|
|
39
|
+
/** The sign-up across the top. */
|
|
40
|
+
newsletter: Footer03Newsletter;
|
|
41
|
+
/** The logo and name, linking home. */
|
|
42
|
+
brand: BlockBrand;
|
|
43
|
+
/** A line under the logo. */
|
|
44
|
+
description?: ReactNode;
|
|
45
|
+
/** Columns of links beside the brand. */
|
|
46
|
+
columns: FooterColumn[];
|
|
47
|
+
/** The small print at the bottom left. */
|
|
48
|
+
legal: ReactNode;
|
|
49
|
+
/** Links on the right of it: "Privacy", "Terms". */
|
|
50
|
+
legalLinks?: BlockLink[];
|
|
51
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
52
|
+
labels?: Footer03Labels;
|
|
53
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockBrand, BlockLink, FooterColumn } from "../../shared/shared.types.js";
|
|
3
|
+
export interface Footer03Labels {
|
|
4
|
+
/** The logo link's name. @default `${brand.name} home`, when the name is text */
|
|
5
|
+
home?: string;
|
|
6
|
+
/** The field's accessible name. @default "Email address" */
|
|
7
|
+
email?: string;
|
|
8
|
+
/** @default "you@example.com" */
|
|
9
|
+
placeholder?: string;
|
|
10
|
+
/** The button that brings the form back. @default "Change" */
|
|
11
|
+
change?: string;
|
|
12
|
+
/** @default "Enter your email address." */
|
|
13
|
+
empty?: string;
|
|
14
|
+
/** @default "That doesn't look like an email address. Check it for a typo." */
|
|
15
|
+
invalid?: string;
|
|
16
|
+
/** Shown when `onSubmit` fails without a message of its own. @default "That didn't go through. Try again in a moment." */
|
|
17
|
+
failed?: string;
|
|
18
|
+
}
|
|
19
|
+
/** The sign-up at the top of the footer. */
|
|
20
|
+
export interface Footer03Newsletter {
|
|
21
|
+
/** The sign-up's heading. */
|
|
22
|
+
title: ReactNode;
|
|
23
|
+
/** A line under it. */
|
|
24
|
+
description?: ReactNode;
|
|
25
|
+
/** The button's words: "Subscribe". */
|
|
26
|
+
submitLabel: ReactNode;
|
|
27
|
+
/** An icon after them, such as an arrow. */
|
|
28
|
+
submitIcon?: ReactNode;
|
|
29
|
+
/** Adds the address to your list. While its promise is pending the button shows a spinner; if it throws, its message shows under the field. */
|
|
30
|
+
onSubmit(email: string): void | Promise<void>;
|
|
31
|
+
/** A line under the field: "One email a month. Unsubscribe whenever you like." */
|
|
32
|
+
note?: ReactNode;
|
|
33
|
+
/** What replaces the form once they've signed up: "Check your inbox". */
|
|
34
|
+
successTitle: ReactNode;
|
|
35
|
+
/** A line beside it, given their address. */
|
|
36
|
+
successDescription?(email: string): ReactNode;
|
|
37
|
+
}
|
|
38
|
+
export interface Footer03Props extends Omit<HTMLAttributes<HTMLElement>, "children"> {
|
|
39
|
+
/** The sign-up across the top. */
|
|
40
|
+
newsletter: Footer03Newsletter;
|
|
41
|
+
/** The logo and name, linking home. */
|
|
42
|
+
brand: BlockBrand;
|
|
43
|
+
/** A line under the logo. */
|
|
44
|
+
description?: ReactNode;
|
|
45
|
+
/** Columns of links beside the brand. */
|
|
46
|
+
columns: FooterColumn[];
|
|
47
|
+
/** The small print at the bottom left. */
|
|
48
|
+
legal: ReactNode;
|
|
49
|
+
/** Links on the right of it: "Privacy", "Terms". */
|
|
50
|
+
legalLinks?: BlockLink[];
|
|
51
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
52
|
+
labels?: Footer03Labels;
|
|
53
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Footer04Props } from "./Footer04.types.cjs";
|
|
2
|
+
/** A last line of pitch and a button, columns of links, the small print, and the product's name set very large across the bottom. */
|
|
3
|
+
export declare function Footer04({ title, titleMuted, primaryAction, columns, legal, legalLinks, wordmark, className, ...props }: Footer04Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Footer04Props } from "./Footer04.types.js";
|
|
2
|
+
/** A last line of pitch and a button, columns of links, the small print, and the product's name set very large across the bottom. */
|
|
3
|
+
export declare function Footer04({ title, titleMuted, primaryAction, columns, legal, legalLinks, wordmark, className, ...props }: Footer04Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction, BlockLink, FooterColumn } from "../../shared/shared.types.cjs";
|
|
3
|
+
export interface Footer04Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
4
|
+
/** A last line of pitch at the top left, in the heading style. */
|
|
5
|
+
title: ReactNode;
|
|
6
|
+
/** Words after the title, in a muted colour: "All in one place." */
|
|
7
|
+
titleMuted?: ReactNode;
|
|
8
|
+
/** A button under it. */
|
|
9
|
+
primaryAction?: BlockAction;
|
|
10
|
+
/** Columns of links on the right. */
|
|
11
|
+
columns: FooterColumn[];
|
|
12
|
+
/** The small print. */
|
|
13
|
+
legal: ReactNode;
|
|
14
|
+
/** Links beside it. */
|
|
15
|
+
legalLinks?: BlockLink[];
|
|
16
|
+
/** The product's name, set very large across the bottom and cropped at the edge. It's decoration; screen readers skip it. */
|
|
17
|
+
wordmark: string;
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction, BlockLink, FooterColumn } from "../../shared/shared.types.js";
|
|
3
|
+
export interface Footer04Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
4
|
+
/** A last line of pitch at the top left, in the heading style. */
|
|
5
|
+
title: ReactNode;
|
|
6
|
+
/** Words after the title, in a muted colour: "All in one place." */
|
|
7
|
+
titleMuted?: ReactNode;
|
|
8
|
+
/** A button under it. */
|
|
9
|
+
primaryAction?: BlockAction;
|
|
10
|
+
/** Columns of links on the right. */
|
|
11
|
+
columns: FooterColumn[];
|
|
12
|
+
/** The small print. */
|
|
13
|
+
legal: ReactNode;
|
|
14
|
+
/** Links beside it. */
|
|
15
|
+
legalLinks?: BlockLink[];
|
|
16
|
+
/** The product's name, set very large across the bottom and cropped at the edge. It's decoration; screen readers skip it. */
|
|
17
|
+
wordmark: string;
|
|
18
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Header01Props } from "./Header01.types.cjs";
|
|
2
|
+
/**
|
|
3
|
+
* A blurred pill that floats above the page and follows it down: the logo, the links in the middle and one call
|
|
4
|
+
* to action. On phones the links fold into a menu behind a button. Put it first inside the page's scrolling area.
|
|
5
|
+
*/
|
|
6
|
+
export declare function Header01({ brand, links, primaryAction, secondaryLink, labels, className, ...props }: Header01Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Header01Props } from "./Header01.types.js";
|
|
2
|
+
/**
|
|
3
|
+
* A blurred pill that floats above the page and follows it down: the logo, the links in the middle and one call
|
|
4
|
+
* to action. On phones the links fold into a menu behind a button. Put it first inside the page's scrolling area.
|
|
5
|
+
*/
|
|
6
|
+
export declare function Header01({ brand, links, primaryAction, secondaryLink, labels, className, ...props }: Header01Props): import("react").JSX.Element;
|