@openwarelabs/blocks 0.7.0 → 0.9.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/calls-to-action/Cta01/Cta01.d.cts +3 -0
- package/dist/calls-to-action/Cta01/Cta01.d.ts +3 -0
- package/dist/calls-to-action/Cta01/Cta01.types.d.cts +14 -0
- package/dist/calls-to-action/Cta01/Cta01.types.d.ts +14 -0
- package/dist/calls-to-action/Cta02/Cta02.d.cts +3 -0
- package/dist/calls-to-action/Cta02/Cta02.d.ts +3 -0
- package/dist/calls-to-action/Cta02/Cta02.types.d.cts +16 -0
- package/dist/calls-to-action/Cta02/Cta02.types.d.ts +16 -0
- package/dist/calls-to-action/Cta03/Cta03.d.cts +3 -0
- package/dist/calls-to-action/Cta03/Cta03.d.ts +3 -0
- package/dist/calls-to-action/Cta03/Cta03.types.d.cts +18 -0
- package/dist/calls-to-action/Cta03/Cta03.types.d.ts +18 -0
- 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 +1323 -7
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.cts +45 -1
- package/dist/index.d.ts +45 -1
- package/dist/index.js +1336 -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 +3762 -323
- package/package.json +2 -2
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction, BlockLink } from "../../shared/shared.types.cjs";
|
|
3
|
+
export interface Pricing01Plan {
|
|
4
|
+
/** The plan's name. */
|
|
5
|
+
name: ReactNode;
|
|
6
|
+
/** A line on who it's for: "For teams shipping every day." */
|
|
7
|
+
summary?: ReactNode;
|
|
8
|
+
/** The amount, large: "€12". */
|
|
9
|
+
price: ReactNode;
|
|
10
|
+
/** What the amount buys, beside it: "a person a month". */
|
|
11
|
+
unit?: ReactNode;
|
|
12
|
+
/** Its button: primary for the recommended plan, secondary for the rest. */
|
|
13
|
+
action: BlockAction;
|
|
14
|
+
/** A heading over the list: "Everything in Free, plus:". */
|
|
15
|
+
featuresTitle?: ReactNode;
|
|
16
|
+
/** What's included, each with a tick. */
|
|
17
|
+
features: ReactNode[];
|
|
18
|
+
/** The plan most people pick: raised, with a brand edge and a primary button. */
|
|
19
|
+
recommended?: boolean;
|
|
20
|
+
/** A badge beside the name, usually on the recommended plan: "Most teams pick this". */
|
|
21
|
+
badge?: ReactNode;
|
|
22
|
+
}
|
|
23
|
+
export interface Pricing01Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
24
|
+
/** A small line above the title: "Pricing". */
|
|
25
|
+
eyebrow?: ReactNode;
|
|
26
|
+
/** The section's heading. */
|
|
27
|
+
title: ReactNode;
|
|
28
|
+
/** A sentence or two under the title. */
|
|
29
|
+
description?: ReactNode;
|
|
30
|
+
/** The plans, side by side; three look best. They stack on phones. */
|
|
31
|
+
plans: Pricing01Plan[];
|
|
32
|
+
/** A line under the plans for a bigger, priced-by-hand plan, with a link. */
|
|
33
|
+
enterprise?: {
|
|
34
|
+
/** In bold: "Enterprise". */
|
|
35
|
+
title: ReactNode;
|
|
36
|
+
description: ReactNode;
|
|
37
|
+
link: BlockLink;
|
|
38
|
+
/** An 18px icon before it, usually from lucide-react. */
|
|
39
|
+
icon?: ReactNode;
|
|
40
|
+
};
|
|
41
|
+
/** Small print at the end: currency, tax, how to pay. */
|
|
42
|
+
note?: ReactNode;
|
|
43
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction, BlockLink } from "../../shared/shared.types.js";
|
|
3
|
+
export interface Pricing01Plan {
|
|
4
|
+
/** The plan's name. */
|
|
5
|
+
name: ReactNode;
|
|
6
|
+
/** A line on who it's for: "For teams shipping every day." */
|
|
7
|
+
summary?: ReactNode;
|
|
8
|
+
/** The amount, large: "€12". */
|
|
9
|
+
price: ReactNode;
|
|
10
|
+
/** What the amount buys, beside it: "a person a month". */
|
|
11
|
+
unit?: ReactNode;
|
|
12
|
+
/** Its button: primary for the recommended plan, secondary for the rest. */
|
|
13
|
+
action: BlockAction;
|
|
14
|
+
/** A heading over the list: "Everything in Free, plus:". */
|
|
15
|
+
featuresTitle?: ReactNode;
|
|
16
|
+
/** What's included, each with a tick. */
|
|
17
|
+
features: ReactNode[];
|
|
18
|
+
/** The plan most people pick: raised, with a brand edge and a primary button. */
|
|
19
|
+
recommended?: boolean;
|
|
20
|
+
/** A badge beside the name, usually on the recommended plan: "Most teams pick this". */
|
|
21
|
+
badge?: ReactNode;
|
|
22
|
+
}
|
|
23
|
+
export interface Pricing01Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
24
|
+
/** A small line above the title: "Pricing". */
|
|
25
|
+
eyebrow?: ReactNode;
|
|
26
|
+
/** The section's heading. */
|
|
27
|
+
title: ReactNode;
|
|
28
|
+
/** A sentence or two under the title. */
|
|
29
|
+
description?: ReactNode;
|
|
30
|
+
/** The plans, side by side; three look best. They stack on phones. */
|
|
31
|
+
plans: Pricing01Plan[];
|
|
32
|
+
/** A line under the plans for a bigger, priced-by-hand plan, with a link. */
|
|
33
|
+
enterprise?: {
|
|
34
|
+
/** In bold: "Enterprise". */
|
|
35
|
+
title: ReactNode;
|
|
36
|
+
description: ReactNode;
|
|
37
|
+
link: BlockLink;
|
|
38
|
+
/** An 18px icon before it, usually from lucide-react. */
|
|
39
|
+
icon?: ReactNode;
|
|
40
|
+
};
|
|
41
|
+
/** Small print at the end: currency, tax, how to pay. */
|
|
42
|
+
note?: ReactNode;
|
|
43
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Pricing02Props } from "./Pricing02.types.cjs";
|
|
2
|
+
/** Plans in one panel with a switch between monthly and yearly prices, which fade in as they change. */
|
|
3
|
+
export declare function Pricing02({ eyebrow, title, description, plans, periodNote, defaultPeriod, onPeriodChange, note, labels, className, ...props }: Pricing02Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Pricing02Props } from "./Pricing02.types.js";
|
|
2
|
+
/** Plans in one panel with a switch between monthly and yearly prices, which fade in as they change. */
|
|
3
|
+
export declare function Pricing02({ eyebrow, title, description, plans, periodNote, defaultPeriod, onPeriodChange, note, labels, className, ...props }: Pricing02Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction } from "../../shared/shared.types.cjs";
|
|
3
|
+
export type Pricing02Period = "monthly" | "yearly";
|
|
4
|
+
/** What a plan costs in one period. */
|
|
5
|
+
export interface Pricing02Price {
|
|
6
|
+
/** The amount, large: "€10". It fades in when it changes. */
|
|
7
|
+
amount: string;
|
|
8
|
+
/** Beside it: "a person a month". */
|
|
9
|
+
unit?: ReactNode;
|
|
10
|
+
/** A line under it about billing: "€120 billed yearly · save €24". */
|
|
11
|
+
billing?: ReactNode;
|
|
12
|
+
/** The amount is words, such as "Custom", so it's set a little smaller. */
|
|
13
|
+
custom?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface Pricing02Plan {
|
|
16
|
+
/** The plan's name. */
|
|
17
|
+
name: string;
|
|
18
|
+
/** A line on who it's for. */
|
|
19
|
+
summary?: ReactNode;
|
|
20
|
+
/** The price each period, or one price for both (a free plan, a custom one). */
|
|
21
|
+
price: Pricing02Price | Record<Pricing02Period, Pricing02Price>;
|
|
22
|
+
/** Its button: primary for the recommended plan. */
|
|
23
|
+
action: BlockAction;
|
|
24
|
+
/** What's included, each with a tick. */
|
|
25
|
+
features: ReactNode[];
|
|
26
|
+
/** The plan most people pick, picked out with a brand edge and a primary button. */
|
|
27
|
+
recommended?: boolean;
|
|
28
|
+
/** A badge beside the name: "Popular". */
|
|
29
|
+
badge?: ReactNode;
|
|
30
|
+
}
|
|
31
|
+
export interface Pricing02Labels {
|
|
32
|
+
/** The switch's name. @default "Billing period" */
|
|
33
|
+
period?: string;
|
|
34
|
+
/** @default "Monthly" */
|
|
35
|
+
monthly?: string;
|
|
36
|
+
/** @default "Yearly" */
|
|
37
|
+
yearly?: string;
|
|
38
|
+
/** Read out when the switch changes. @default "Showing monthly prices." */
|
|
39
|
+
showingMonthly?: string;
|
|
40
|
+
/** @default "Showing yearly prices." */
|
|
41
|
+
showingYearly?: string;
|
|
42
|
+
/** Each plan's list, for screen readers. @default (name) => `${name} includes` */
|
|
43
|
+
includes?(name: string): string;
|
|
44
|
+
}
|
|
45
|
+
export interface Pricing02Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
46
|
+
/** A small line above the title, such as the section's name. */
|
|
47
|
+
eyebrow?: ReactNode;
|
|
48
|
+
/** The section's heading. */
|
|
49
|
+
title: ReactNode;
|
|
50
|
+
/** A sentence or two under the title. */
|
|
51
|
+
description?: ReactNode;
|
|
52
|
+
/** The plans in one panel, side by side; four fit. */
|
|
53
|
+
plans: Pricing02Plan[];
|
|
54
|
+
/** A line under the switch, such as "Pay yearly and get two months free." */
|
|
55
|
+
periodNote?: ReactNode;
|
|
56
|
+
/** @default "monthly" */
|
|
57
|
+
defaultPeriod?: Pricing02Period;
|
|
58
|
+
/** Runs when the period changes. */
|
|
59
|
+
onPeriodChange?(period: Pricing02Period): void;
|
|
60
|
+
/** Small print at the end. */
|
|
61
|
+
note?: ReactNode;
|
|
62
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
63
|
+
labels?: Pricing02Labels;
|
|
64
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction } from "../../shared/shared.types.js";
|
|
3
|
+
export type Pricing02Period = "monthly" | "yearly";
|
|
4
|
+
/** What a plan costs in one period. */
|
|
5
|
+
export interface Pricing02Price {
|
|
6
|
+
/** The amount, large: "€10". It fades in when it changes. */
|
|
7
|
+
amount: string;
|
|
8
|
+
/** Beside it: "a person a month". */
|
|
9
|
+
unit?: ReactNode;
|
|
10
|
+
/** A line under it about billing: "€120 billed yearly · save €24". */
|
|
11
|
+
billing?: ReactNode;
|
|
12
|
+
/** The amount is words, such as "Custom", so it's set a little smaller. */
|
|
13
|
+
custom?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface Pricing02Plan {
|
|
16
|
+
/** The plan's name. */
|
|
17
|
+
name: string;
|
|
18
|
+
/** A line on who it's for. */
|
|
19
|
+
summary?: ReactNode;
|
|
20
|
+
/** The price each period, or one price for both (a free plan, a custom one). */
|
|
21
|
+
price: Pricing02Price | Record<Pricing02Period, Pricing02Price>;
|
|
22
|
+
/** Its button: primary for the recommended plan. */
|
|
23
|
+
action: BlockAction;
|
|
24
|
+
/** What's included, each with a tick. */
|
|
25
|
+
features: ReactNode[];
|
|
26
|
+
/** The plan most people pick, picked out with a brand edge and a primary button. */
|
|
27
|
+
recommended?: boolean;
|
|
28
|
+
/** A badge beside the name: "Popular". */
|
|
29
|
+
badge?: ReactNode;
|
|
30
|
+
}
|
|
31
|
+
export interface Pricing02Labels {
|
|
32
|
+
/** The switch's name. @default "Billing period" */
|
|
33
|
+
period?: string;
|
|
34
|
+
/** @default "Monthly" */
|
|
35
|
+
monthly?: string;
|
|
36
|
+
/** @default "Yearly" */
|
|
37
|
+
yearly?: string;
|
|
38
|
+
/** Read out when the switch changes. @default "Showing monthly prices." */
|
|
39
|
+
showingMonthly?: string;
|
|
40
|
+
/** @default "Showing yearly prices." */
|
|
41
|
+
showingYearly?: string;
|
|
42
|
+
/** Each plan's list, for screen readers. @default (name) => `${name} includes` */
|
|
43
|
+
includes?(name: string): string;
|
|
44
|
+
}
|
|
45
|
+
export interface Pricing02Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
46
|
+
/** A small line above the title, such as the section's name. */
|
|
47
|
+
eyebrow?: ReactNode;
|
|
48
|
+
/** The section's heading. */
|
|
49
|
+
title: ReactNode;
|
|
50
|
+
/** A sentence or two under the title. */
|
|
51
|
+
description?: ReactNode;
|
|
52
|
+
/** The plans in one panel, side by side; four fit. */
|
|
53
|
+
plans: Pricing02Plan[];
|
|
54
|
+
/** A line under the switch, such as "Pay yearly and get two months free." */
|
|
55
|
+
periodNote?: ReactNode;
|
|
56
|
+
/** @default "monthly" */
|
|
57
|
+
defaultPeriod?: Pricing02Period;
|
|
58
|
+
/** Runs when the period changes. */
|
|
59
|
+
onPeriodChange?(period: Pricing02Period): void;
|
|
60
|
+
/** Small print at the end. */
|
|
61
|
+
note?: ReactNode;
|
|
62
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
63
|
+
labels?: Pricing02Labels;
|
|
64
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Pricing03Props } from "./Pricing03.types.cjs";
|
|
2
|
+
/** Every feature down the side and a tick, a dash or a limit for each plan; one plan at a time on phones. */
|
|
3
|
+
export declare function Pricing03({ eyebrow, title, description, plans, groups, pricesNote, defaultPlan, note, labels, className, ...props }: Pricing03Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Pricing03Props } from "./Pricing03.types.js";
|
|
2
|
+
/** Every feature down the side and a tick, a dash or a limit for each plan; one plan at a time on phones. */
|
|
3
|
+
export declare function Pricing03({ eyebrow, title, description, plans, groups, pricesNote, defaultPlan, note, labels, className, ...props }: Pricing03Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction } from "../../shared/shared.types.cjs";
|
|
3
|
+
export interface Pricing03Plan {
|
|
4
|
+
/** Ties the plan to its values in each row. */
|
|
5
|
+
id: string;
|
|
6
|
+
/** The plan's name. */
|
|
7
|
+
name: string;
|
|
8
|
+
/** The amount, in bold: "€12", or "Custom". */
|
|
9
|
+
price: ReactNode;
|
|
10
|
+
/** After it: "a person a month". */
|
|
11
|
+
unit?: ReactNode;
|
|
12
|
+
/** Its small button: primary for the recommended plan. */
|
|
13
|
+
action: BlockAction;
|
|
14
|
+
/** The plan most people pick: its button is primary. */
|
|
15
|
+
recommended?: boolean;
|
|
16
|
+
/** A badge beside the name: "Popular". */
|
|
17
|
+
badge?: ReactNode;
|
|
18
|
+
}
|
|
19
|
+
/** true is a tick, false a dash, anything else is shown as it is (a limit, such as "1,000 a person"). */
|
|
20
|
+
export type Pricing03Value = boolean | ReactNode;
|
|
21
|
+
export interface Pricing03Row {
|
|
22
|
+
/** The feature's name, down the side. */
|
|
23
|
+
feature: ReactNode;
|
|
24
|
+
/** A line under the feature, in small type. */
|
|
25
|
+
note?: ReactNode;
|
|
26
|
+
/** Each plan's value, by plan id. */
|
|
27
|
+
values: Record<string, Pricing03Value>;
|
|
28
|
+
}
|
|
29
|
+
/** A table of rows under a heading: "Usage", "Security". */
|
|
30
|
+
export interface Pricing03Group {
|
|
31
|
+
/** The group's heading, above its rows. */
|
|
32
|
+
title: string;
|
|
33
|
+
/** The features in the group. */
|
|
34
|
+
rows: Pricing03Row[];
|
|
35
|
+
}
|
|
36
|
+
export interface Pricing03Labels {
|
|
37
|
+
/** The phone plan picker's name. @default "Plan to compare" */
|
|
38
|
+
picker?: string;
|
|
39
|
+
/** Read out for a tick. @default "Included" */
|
|
40
|
+
included?: string;
|
|
41
|
+
/** Read out for a dash. @default "Not included" */
|
|
42
|
+
notIncluded?: string;
|
|
43
|
+
/** Each table's caption, for screen readers. @default (title) => `${title}, by plan` */
|
|
44
|
+
caption?(title: string): string;
|
|
45
|
+
}
|
|
46
|
+
export interface Pricing03Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
47
|
+
/** A small line above the title, such as the section's name. */
|
|
48
|
+
eyebrow?: ReactNode;
|
|
49
|
+
/** The section's heading. */
|
|
50
|
+
title: ReactNode;
|
|
51
|
+
/** A sentence or two under the title. */
|
|
52
|
+
description?: ReactNode;
|
|
53
|
+
/** The plans, as columns. On phones one shows at a time, picked above the table. */
|
|
54
|
+
plans: Pricing03Plan[];
|
|
55
|
+
/** The features, in groups, as rows. */
|
|
56
|
+
groups: Pricing03Group[];
|
|
57
|
+
/** A small line beside the plans' prices: "Prices a month, in euro, before VAT." */
|
|
58
|
+
pricesNote?: ReactNode;
|
|
59
|
+
/** The plan shown first on phones. @default the recommended plan, or the first */
|
|
60
|
+
defaultPlan?: string;
|
|
61
|
+
/** Small print at the end. */
|
|
62
|
+
note?: ReactNode;
|
|
63
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
64
|
+
labels?: Pricing03Labels;
|
|
65
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction } from "../../shared/shared.types.js";
|
|
3
|
+
export interface Pricing03Plan {
|
|
4
|
+
/** Ties the plan to its values in each row. */
|
|
5
|
+
id: string;
|
|
6
|
+
/** The plan's name. */
|
|
7
|
+
name: string;
|
|
8
|
+
/** The amount, in bold: "€12", or "Custom". */
|
|
9
|
+
price: ReactNode;
|
|
10
|
+
/** After it: "a person a month". */
|
|
11
|
+
unit?: ReactNode;
|
|
12
|
+
/** Its small button: primary for the recommended plan. */
|
|
13
|
+
action: BlockAction;
|
|
14
|
+
/** The plan most people pick: its button is primary. */
|
|
15
|
+
recommended?: boolean;
|
|
16
|
+
/** A badge beside the name: "Popular". */
|
|
17
|
+
badge?: ReactNode;
|
|
18
|
+
}
|
|
19
|
+
/** true is a tick, false a dash, anything else is shown as it is (a limit, such as "1,000 a person"). */
|
|
20
|
+
export type Pricing03Value = boolean | ReactNode;
|
|
21
|
+
export interface Pricing03Row {
|
|
22
|
+
/** The feature's name, down the side. */
|
|
23
|
+
feature: ReactNode;
|
|
24
|
+
/** A line under the feature, in small type. */
|
|
25
|
+
note?: ReactNode;
|
|
26
|
+
/** Each plan's value, by plan id. */
|
|
27
|
+
values: Record<string, Pricing03Value>;
|
|
28
|
+
}
|
|
29
|
+
/** A table of rows under a heading: "Usage", "Security". */
|
|
30
|
+
export interface Pricing03Group {
|
|
31
|
+
/** The group's heading, above its rows. */
|
|
32
|
+
title: string;
|
|
33
|
+
/** The features in the group. */
|
|
34
|
+
rows: Pricing03Row[];
|
|
35
|
+
}
|
|
36
|
+
export interface Pricing03Labels {
|
|
37
|
+
/** The phone plan picker's name. @default "Plan to compare" */
|
|
38
|
+
picker?: string;
|
|
39
|
+
/** Read out for a tick. @default "Included" */
|
|
40
|
+
included?: string;
|
|
41
|
+
/** Read out for a dash. @default "Not included" */
|
|
42
|
+
notIncluded?: string;
|
|
43
|
+
/** Each table's caption, for screen readers. @default (title) => `${title}, by plan` */
|
|
44
|
+
caption?(title: string): string;
|
|
45
|
+
}
|
|
46
|
+
export interface Pricing03Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
47
|
+
/** A small line above the title, such as the section's name. */
|
|
48
|
+
eyebrow?: ReactNode;
|
|
49
|
+
/** The section's heading. */
|
|
50
|
+
title: ReactNode;
|
|
51
|
+
/** A sentence or two under the title. */
|
|
52
|
+
description?: ReactNode;
|
|
53
|
+
/** The plans, as columns. On phones one shows at a time, picked above the table. */
|
|
54
|
+
plans: Pricing03Plan[];
|
|
55
|
+
/** The features, in groups, as rows. */
|
|
56
|
+
groups: Pricing03Group[];
|
|
57
|
+
/** A small line beside the plans' prices: "Prices a month, in euro, before VAT." */
|
|
58
|
+
pricesNote?: ReactNode;
|
|
59
|
+
/** The plan shown first on phones. @default the recommended plan, or the first */
|
|
60
|
+
defaultPlan?: string;
|
|
61
|
+
/** Small print at the end. */
|
|
62
|
+
note?: ReactNode;
|
|
63
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
64
|
+
labels?: Pricing03Labels;
|
|
65
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Pricing04Props } from "./Pricing04.types.cjs";
|
|
2
|
+
/** One price with what's included, for a simple product: a wide card with the features on the left and the offer on the right. */
|
|
3
|
+
export declare function Pricing04({ eyebrow, title, description, product, offer, promises, className, ...props }: Pricing04Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Pricing04Props } from "./Pricing04.types.js";
|
|
2
|
+
/** One price with what's included, for a simple product: a wide card with the features on the left and the offer on the right. */
|
|
3
|
+
export declare function Pricing04({ eyebrow, title, description, product, offer, promises, className, ...props }: Pricing04Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction } from "../../shared/shared.types.cjs";
|
|
3
|
+
export interface Pricing04Props 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
|
+
/** The left of the card: what you get. */
|
|
11
|
+
product: {
|
|
12
|
+
name: ReactNode;
|
|
13
|
+
description?: ReactNode;
|
|
14
|
+
/** A heading over the list: "What's included". */
|
|
15
|
+
featuresTitle?: ReactNode;
|
|
16
|
+
/** In two columns, each with a tick. */
|
|
17
|
+
features: ReactNode[];
|
|
18
|
+
};
|
|
19
|
+
/** The right of the card: what it costs, and the button. */
|
|
20
|
+
offer: {
|
|
21
|
+
/** Above the price: "Pay monthly, per person". */
|
|
22
|
+
label?: ReactNode;
|
|
23
|
+
/** The amount, large: "€12". */
|
|
24
|
+
price: ReactNode;
|
|
25
|
+
/** Small, beside it: "EUR". */
|
|
26
|
+
currency?: ReactNode;
|
|
27
|
+
/** Under it: "a person a month, before VAT". */
|
|
28
|
+
unit?: ReactNode;
|
|
29
|
+
action: BlockAction;
|
|
30
|
+
/** Small print under the button. */
|
|
31
|
+
note?: ReactNode;
|
|
32
|
+
};
|
|
33
|
+
/** Short reassurances in a row under the card, each with an icon: "Cancel any time". */
|
|
34
|
+
promises?: Array<{
|
|
35
|
+
text: ReactNode;
|
|
36
|
+
icon?: ReactNode;
|
|
37
|
+
}>;
|
|
38
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction } from "../../shared/shared.types.js";
|
|
3
|
+
export interface Pricing04Props 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
|
+
/** The left of the card: what you get. */
|
|
11
|
+
product: {
|
|
12
|
+
name: ReactNode;
|
|
13
|
+
description?: ReactNode;
|
|
14
|
+
/** A heading over the list: "What's included". */
|
|
15
|
+
featuresTitle?: ReactNode;
|
|
16
|
+
/** In two columns, each with a tick. */
|
|
17
|
+
features: ReactNode[];
|
|
18
|
+
};
|
|
19
|
+
/** The right of the card: what it costs, and the button. */
|
|
20
|
+
offer: {
|
|
21
|
+
/** Above the price: "Pay monthly, per person". */
|
|
22
|
+
label?: ReactNode;
|
|
23
|
+
/** The amount, large: "€12". */
|
|
24
|
+
price: ReactNode;
|
|
25
|
+
/** Small, beside it: "EUR". */
|
|
26
|
+
currency?: ReactNode;
|
|
27
|
+
/** Under it: "a person a month, before VAT". */
|
|
28
|
+
unit?: ReactNode;
|
|
29
|
+
action: BlockAction;
|
|
30
|
+
/** Small print under the button. */
|
|
31
|
+
note?: ReactNode;
|
|
32
|
+
};
|
|
33
|
+
/** Short reassurances in a row under the card, each with an icon: "Cancel any time". */
|
|
34
|
+
promises?: Array<{
|
|
35
|
+
text: ReactNode;
|
|
36
|
+
icon?: ReactNode;
|
|
37
|
+
}>;
|
|
38
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Pricing05Props } from "./Pricing05.types.cjs";
|
|
2
|
+
/** A price per unit in bands, with a slider to estimate the month and the cost of each band beside it. */
|
|
3
|
+
export declare function Pricing05({ eyebrow, title, description, tiers, aside, estimate: words, max, step, defaultValue, marks, currency, locale, action, note, labels, className, ...props }: Pricing05Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Pricing05Props } from "./Pricing05.types.js";
|
|
2
|
+
/** A price per unit in bands, with a slider to estimate the month and the cost of each band beside it. */
|
|
3
|
+
export declare function Pricing05({ eyebrow, title, description, tiers, aside, estimate: words, max, step, defaultValue, marks, currency, locale, action, note, labels, className, ...props }: Pricing05Props): import("react").JSX.Element;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction } from "../../shared/shared.types.cjs";
|
|
3
|
+
/** A price band. Each unit is charged at the band it falls in, like income tax. */
|
|
4
|
+
export interface Pricing05Tier {
|
|
5
|
+
/** Where the band starts: 0, 500, 10000. */
|
|
6
|
+
from: number;
|
|
7
|
+
/** Where it ends; Infinity for the last. */
|
|
8
|
+
to: number;
|
|
9
|
+
/** The price of one unit in it; 0 for free. */
|
|
10
|
+
price: number;
|
|
11
|
+
}
|
|
12
|
+
export interface Pricing05Labels {
|
|
13
|
+
/** One unit: "run". @default "unit" */
|
|
14
|
+
unit?: string;
|
|
15
|
+
/** More than one: "runs". @default "units" */
|
|
16
|
+
units?: string;
|
|
17
|
+
/** After the big number: "runs a month". @default `${units} a month` */
|
|
18
|
+
perMonth?: string;
|
|
19
|
+
/** A free band's price. @default "Free" */
|
|
20
|
+
free?: string;
|
|
21
|
+
/** The list of bands, for screen readers. @default `Price per ${unit}` */
|
|
22
|
+
tiers?: string;
|
|
23
|
+
/** The slider's name. @default `${units} a month`, capitalised */
|
|
24
|
+
slider?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface Pricing05Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
27
|
+
/** A small line above the title, such as the section's name. */
|
|
28
|
+
eyebrow?: ReactNode;
|
|
29
|
+
/** The section's heading. */
|
|
30
|
+
title: ReactNode;
|
|
31
|
+
/** A sentence or two under the title. */
|
|
32
|
+
description?: ReactNode;
|
|
33
|
+
/** The price bands, from 0 up, the last ending at Infinity. */
|
|
34
|
+
tiers: Pricing05Tier[];
|
|
35
|
+
/** A paragraph under the bands: what a unit is. */
|
|
36
|
+
aside?: ReactNode;
|
|
37
|
+
/** The estimate card's words. */
|
|
38
|
+
estimate: {
|
|
39
|
+
title: ReactNode;
|
|
40
|
+
description?: ReactNode;
|
|
41
|
+
/** Over the total: "Estimated month". */
|
|
42
|
+
totalLabel: ReactNode;
|
|
43
|
+
/** Small, under it: "Before VAT, billed on the 1st". */
|
|
44
|
+
totalNote?: ReactNode;
|
|
45
|
+
};
|
|
46
|
+
/** The slider's end. */
|
|
47
|
+
max: number;
|
|
48
|
+
/** @default max / 200 */
|
|
49
|
+
step?: number;
|
|
50
|
+
/** Where the slider starts. */
|
|
51
|
+
defaultValue: number;
|
|
52
|
+
/** Values marked under the slider. @default 0, a quarter, half, three quarters and max */
|
|
53
|
+
marks?: number[];
|
|
54
|
+
/** The currency the prices are in. @default "EUR" */
|
|
55
|
+
currency?: string;
|
|
56
|
+
/** How numbers and money are written. @default the browser's language */
|
|
57
|
+
locale?: string;
|
|
58
|
+
/** The button under the total. */
|
|
59
|
+
action: BlockAction;
|
|
60
|
+
/** Small print under the button. */
|
|
61
|
+
note?: ReactNode;
|
|
62
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
63
|
+
labels?: Pricing05Labels;
|
|
64
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { BlockAction } from "../../shared/shared.types.js";
|
|
3
|
+
/** A price band. Each unit is charged at the band it falls in, like income tax. */
|
|
4
|
+
export interface Pricing05Tier {
|
|
5
|
+
/** Where the band starts: 0, 500, 10000. */
|
|
6
|
+
from: number;
|
|
7
|
+
/** Where it ends; Infinity for the last. */
|
|
8
|
+
to: number;
|
|
9
|
+
/** The price of one unit in it; 0 for free. */
|
|
10
|
+
price: number;
|
|
11
|
+
}
|
|
12
|
+
export interface Pricing05Labels {
|
|
13
|
+
/** One unit: "run". @default "unit" */
|
|
14
|
+
unit?: string;
|
|
15
|
+
/** More than one: "runs". @default "units" */
|
|
16
|
+
units?: string;
|
|
17
|
+
/** After the big number: "runs a month". @default `${units} a month` */
|
|
18
|
+
perMonth?: string;
|
|
19
|
+
/** A free band's price. @default "Free" */
|
|
20
|
+
free?: string;
|
|
21
|
+
/** The list of bands, for screen readers. @default `Price per ${unit}` */
|
|
22
|
+
tiers?: string;
|
|
23
|
+
/** The slider's name. @default `${units} a month`, capitalised */
|
|
24
|
+
slider?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface Pricing05Props extends Omit<HTMLAttributes<HTMLElement>, "title" | "children"> {
|
|
27
|
+
/** A small line above the title, such as the section's name. */
|
|
28
|
+
eyebrow?: ReactNode;
|
|
29
|
+
/** The section's heading. */
|
|
30
|
+
title: ReactNode;
|
|
31
|
+
/** A sentence or two under the title. */
|
|
32
|
+
description?: ReactNode;
|
|
33
|
+
/** The price bands, from 0 up, the last ending at Infinity. */
|
|
34
|
+
tiers: Pricing05Tier[];
|
|
35
|
+
/** A paragraph under the bands: what a unit is. */
|
|
36
|
+
aside?: ReactNode;
|
|
37
|
+
/** The estimate card's words. */
|
|
38
|
+
estimate: {
|
|
39
|
+
title: ReactNode;
|
|
40
|
+
description?: ReactNode;
|
|
41
|
+
/** Over the total: "Estimated month". */
|
|
42
|
+
totalLabel: ReactNode;
|
|
43
|
+
/** Small, under it: "Before VAT, billed on the 1st". */
|
|
44
|
+
totalNote?: ReactNode;
|
|
45
|
+
};
|
|
46
|
+
/** The slider's end. */
|
|
47
|
+
max: number;
|
|
48
|
+
/** @default max / 200 */
|
|
49
|
+
step?: number;
|
|
50
|
+
/** Where the slider starts. */
|
|
51
|
+
defaultValue: number;
|
|
52
|
+
/** Values marked under the slider. @default 0, a quarter, half, three quarters and max */
|
|
53
|
+
marks?: number[];
|
|
54
|
+
/** The currency the prices are in. @default "EUR" */
|
|
55
|
+
currency?: string;
|
|
56
|
+
/** How numbers and money are written. @default the browser's language */
|
|
57
|
+
locale?: string;
|
|
58
|
+
/** The button under the total. */
|
|
59
|
+
action: BlockAction;
|
|
60
|
+
/** Small print under the button. */
|
|
61
|
+
note?: ReactNode;
|
|
62
|
+
/** Words that aren't content (names for screen readers, a menu's name), in English unless you pass your own. */
|
|
63
|
+
labels?: Pricing05Labels;
|
|
64
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { BlockActionButtonProps, BlockActionsProps } from "./shared.types.cjs";
|
|
2
2
|
/** One action as a large pill: a link styled as a button when it has an href, a button otherwise. */
|
|
3
|
-
export declare function BlockActionButton({ action, variant }: BlockActionButtonProps): import("react").JSX.Element;
|
|
3
|
+
export declare function BlockActionButton({ action, variant, size, className, onAfterClick, fullWidth }: BlockActionButtonProps): import("react").JSX.Element;
|
|
4
4
|
/** The primary action and an optional secondary one, side by side. */
|
|
5
5
|
export declare function BlockActions({ primary, secondary, className }: BlockActionsProps): import("react").JSX.Element;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { BlockActionButtonProps, BlockActionsProps } from "./shared.types.js";
|
|
2
2
|
/** One action as a large pill: a link styled as a button when it has an href, a button otherwise. */
|
|
3
|
-
export declare function BlockActionButton({ action, variant }: BlockActionButtonProps): import("react").JSX.Element;
|
|
3
|
+
export declare function BlockActionButton({ action, variant, size, className, onAfterClick, fullWidth }: BlockActionButtonProps): import("react").JSX.Element;
|
|
4
4
|
/** The primary action and an optional secondary one, side by side. */
|
|
5
5
|
export declare function BlockActions({ primary, secondary, className }: BlockActionsProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { FooterColumnsProps } from "./shared.types.cjs";
|
|
2
|
+
/** A footer's columns of links, each a <nav> named by its heading. */
|
|
3
|
+
export declare function FooterColumns({ columns, headingClassName, listClassName, badgeClassName }: FooterColumnsProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { FooterColumnsProps } from "./shared.types.js";
|
|
2
|
+
/** A footer's columns of links, each a <nav> named by its heading. */
|
|
3
|
+
export declare function FooterColumns({ columns, headingClassName, listClassName, badgeClassName }: FooterColumnsProps): import("react").JSX.Element;
|