@hintoric/email 0.0.0-stage → 0.1.1
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/README.md +53 -2
- package/dist/components/Avatar.d.ts +37 -0
- package/dist/components/Avatar.d.ts.map +1 -0
- package/dist/components/Button.d.ts +39 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Card.d.ts +17 -0
- package/dist/components/Card.d.ts.map +1 -0
- package/dist/components/Chip.d.ts +34 -0
- package/dist/components/Chip.d.ts.map +1 -0
- package/dist/components/Divider.d.ts +13 -0
- package/dist/components/Divider.d.ts.map +1 -0
- package/dist/components/HintoricLogo.d.ts +6 -0
- package/dist/components/HintoricLogo.d.ts.map +1 -0
- package/dist/components/Layout.d.ts +28 -0
- package/dist/components/Layout.d.ts.map +1 -0
- package/dist/components/Link.d.ts +18 -0
- package/dist/components/Link.d.ts.map +1 -0
- package/dist/components/Typography.d.ts +19 -0
- package/dist/components/Typography.d.ts.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +801 -0
- package/dist/index.js.map +1 -0
- package/dist/render.d.ts +9 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/safeUrl.d.ts +4 -0
- package/dist/safeUrl.d.ts.map +1 -0
- package/dist/styles.d.ts +18 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/templates/SecurityActivityAlert/SecurityActivityAlertEmail.d.ts +18 -0
- package/dist/templates/SecurityActivityAlert/SecurityActivityAlertEmail.d.ts.map +1 -0
- package/dist/templates/SecurityActivityAlert/index.d.ts +5 -0
- package/dist/templates/SecurityActivityAlert/index.d.ts.map +1 -0
- package/dist/templates/SecurityActivityAlert/messages.d.ts +4 -0
- package/dist/templates/SecurityActivityAlert/messages.d.ts.map +1 -0
- package/dist/templates/SecurityActivityAlert/types.d.ts +78 -0
- package/dist/templates/SecurityActivityAlert/types.d.ts.map +1 -0
- package/dist/tokens.d.ts +50 -0
- package/dist/tokens.d.ts.map +1 -0
- package/package.json +59 -3
package/README.md
CHANGED
|
@@ -1,3 +1,54 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.hintoric.com/assets/logo/white.svg" />
|
|
4
|
+
<source media="(prefers-color-scheme: light)" srcset="https://cdn.hintoric.com/assets/logo/black.svg" />
|
|
5
|
+
<img src="https://cdn.hintoric.com/assets/logo/black.svg" alt="hintoric" width="240" />
|
|
6
|
+
</picture>
|
|
7
|
+
</p>
|
|
2
8
|
|
|
3
|
-
|
|
9
|
+
<p align="center">
|
|
10
|
+
Transactional email components in <a href="https://www.npmjs.com/package/@hintoric/ui">@hintoric/ui</a>'s look, built on <a href="https://react.email">react-email</a>.
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
## What this is
|
|
14
|
+
|
|
15
|
+
Mail clients understand neither Tailwind classes nor CSS variables, and run no JavaScript, so
|
|
16
|
+
`@hintoric/ui`'s components can't be sent as they are. `@hintoric/email` has email counterparts of
|
|
17
|
+
the most important ones — `Typography`, `Button`, `Link`, `Divider`,
|
|
18
|
+
`Card`, `Avatar` and `Chip` — with the same `variant`, `color` and `size` props,
|
|
19
|
+
rendered as tables and inline styles. A visual test suite compares every variant × colour of each
|
|
20
|
+
against its web component in light and dark.
|
|
21
|
+
|
|
22
|
+
It also ships `Layout` (a message framed like hintoric's auth screens), `renderEmail` and
|
|
23
|
+
ready-made templates such as `SecurityActivityAlertEmail`.
|
|
24
|
+
|
|
25
|
+
## Install
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install @hintoric/email
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { Layout, Typography, Button, renderEmail } from '@hintoric/email';
|
|
35
|
+
|
|
36
|
+
const { html, text } = await renderEmail(
|
|
37
|
+
<Layout lang="de" preview="Neue Anmeldung" footer="Muster GmbH · Musterstraße 1">
|
|
38
|
+
<Typography level="h3" component="h1" textAlign="center">
|
|
39
|
+
Neue Anmeldung
|
|
40
|
+
</Typography>
|
|
41
|
+
<Button href="https://app.example.com/security" size="lg" fullWidth>
|
|
42
|
+
Aktivität prüfen
|
|
43
|
+
</Button>
|
|
44
|
+
</Layout>,
|
|
45
|
+
);
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Docs
|
|
49
|
+
|
|
50
|
+
Components, templates and live previews: [ui.hintoric.dev/email](https://ui.hintoric.dev/email)
|
|
51
|
+
|
|
52
|
+
## License
|
|
53
|
+
|
|
54
|
+
MIT
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { EmailColor, EmailVariant } from '../tokens';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
/** avatarVariants.ts: 32/40/48px boxes, text-sm/base/lg, medium/medium/semibold. */
|
|
4
|
+
declare const SIZES: {
|
|
5
|
+
readonly sm: {
|
|
6
|
+
readonly box: 32;
|
|
7
|
+
readonly fontSize: "14px";
|
|
8
|
+
readonly fontWeight: 500;
|
|
9
|
+
};
|
|
10
|
+
readonly md: {
|
|
11
|
+
readonly box: 40;
|
|
12
|
+
readonly fontSize: "16px";
|
|
13
|
+
readonly fontWeight: 500;
|
|
14
|
+
};
|
|
15
|
+
readonly lg: {
|
|
16
|
+
readonly box: 48;
|
|
17
|
+
readonly fontSize: "18px";
|
|
18
|
+
readonly fontWeight: 600;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export interface AvatarProps {
|
|
22
|
+
variant?: EmailVariant;
|
|
23
|
+
color?: EmailColor;
|
|
24
|
+
size?: keyof typeof SIZES;
|
|
25
|
+
/** An https image. Without one, `children` (usually initials) is shown. */
|
|
26
|
+
src?: string;
|
|
27
|
+
alt?: string;
|
|
28
|
+
children?: React.ReactNode;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Avatar for email, defaulting to soft / neutral like the web Avatar. Unlike
|
|
32
|
+
* Card, outlined and plain stay transparent — Joy's Avatar has no surface
|
|
33
|
+
* fallback. The initials are centred by a table cell, since email has no flexbox.
|
|
34
|
+
*/
|
|
35
|
+
export declare function Avatar({ variant, color, size, src, alt, children }: AvatarProps): React.JSX.Element;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=Avatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../src/components/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAA6B,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAG1F,oFAAoF;AACpF,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;CAID,CAAC;AAEX,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,CAAC;IAC1B,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,EAAE,OAAgB,EAAE,KAAiB,EAAE,IAAW,EAAE,GAAG,EAAE,GAAQ,EAAE,QAAQ,EAAE,EAAE,WAAW,qBAwChH"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { EmailColor, EmailVariant } from '../tokens';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
declare const SIZES: {
|
|
4
|
+
readonly sm: {
|
|
5
|
+
readonly minHeight: 32;
|
|
6
|
+
readonly paddingInline: 12;
|
|
7
|
+
readonly fontSize: 14;
|
|
8
|
+
readonly lineHeight: 21;
|
|
9
|
+
};
|
|
10
|
+
readonly md: {
|
|
11
|
+
readonly minHeight: 36;
|
|
12
|
+
readonly paddingInline: 16;
|
|
13
|
+
readonly fontSize: 14;
|
|
14
|
+
readonly lineHeight: 21;
|
|
15
|
+
};
|
|
16
|
+
readonly lg: {
|
|
17
|
+
readonly minHeight: 44;
|
|
18
|
+
readonly paddingInline: 24;
|
|
19
|
+
readonly fontSize: 16;
|
|
20
|
+
readonly lineHeight: 24;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export interface ButtonProps {
|
|
24
|
+
/** Rendered only for http(s) URLs; anything else renders nothing — a button nobody can follow is worse than none. */
|
|
25
|
+
href: string;
|
|
26
|
+
variant?: EmailVariant;
|
|
27
|
+
color?: EmailColor;
|
|
28
|
+
size?: keyof typeof SIZES;
|
|
29
|
+
/** `rounded-full`, as on the web Button. */
|
|
30
|
+
pill?: boolean;
|
|
31
|
+
/** Stretches to the container — the usual call-to-action layout in a narrow email. */
|
|
32
|
+
fullWidth?: boolean;
|
|
33
|
+
style?: React.CSSProperties;
|
|
34
|
+
children: React.ReactNode;
|
|
35
|
+
}
|
|
36
|
+
/** Button for email: a link styled as the web Button, built on react-email's Outlook-safe Button. */
|
|
37
|
+
export declare function Button({ href, variant, color, size, pill, fullWidth, style, children }: ButtonProps): React.JSX.Element | null;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=Button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAA0C,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AASvG,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;CAID,CAAC;AAEX,MAAM,WAAW,WAAW;IAC1B,qHAAqH;IACrH,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,CAAC;IAC1B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sFAAsF;IACtF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,qGAAqG;AACrG,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,OAAiB,EAAE,KAAiB,EAAE,IAAW,EAAE,IAAY,EAAE,SAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,4BA0ChJ"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { EmailColor, EmailVariant } from '../tokens';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export interface CardProps {
|
|
4
|
+
variant?: EmailVariant;
|
|
5
|
+
color?: EmailColor;
|
|
6
|
+
style?: React.CSSProperties;
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Card for email: Sheet's variant colours plus Card's own `rounded-md p-4`,
|
|
11
|
+
* defaulting to outlined / neutral like the web Card. Outlined and plain fill
|
|
12
|
+
* with `surface`, as Joy's Sheet does. A one-cell table, because that is the
|
|
13
|
+
* only box Outlook pads reliably; Card's `gap-2` has no email equivalent, so
|
|
14
|
+
* spacing between children is theirs to set.
|
|
15
|
+
*/
|
|
16
|
+
export declare function Card({ variant, color, style, children }: CardProps): React.JSX.Element;
|
|
17
|
+
//# sourceMappingURL=Card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAwD,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAErH,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,EAAE,OAAoB,EAAE,KAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,qBA4B3F"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { EmailColor, EmailVariant } from '../tokens';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* chipVariants.ts: `min-h-5/6/7`, `px-1.5/2/3`, `text-xs/sm/base` at a 1.5
|
|
5
|
+
* line-height. As with Button, the min-height becomes vertical padding.
|
|
6
|
+
*/
|
|
7
|
+
declare const SIZES: {
|
|
8
|
+
readonly sm: {
|
|
9
|
+
readonly minHeight: 20;
|
|
10
|
+
readonly paddingInline: 6;
|
|
11
|
+
readonly fontSize: 12;
|
|
12
|
+
};
|
|
13
|
+
readonly md: {
|
|
14
|
+
readonly minHeight: 24;
|
|
15
|
+
readonly paddingInline: 8;
|
|
16
|
+
readonly fontSize: 14;
|
|
17
|
+
};
|
|
18
|
+
readonly lg: {
|
|
19
|
+
readonly minHeight: 28;
|
|
20
|
+
readonly paddingInline: 12;
|
|
21
|
+
readonly fontSize: 16;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export interface ChipProps {
|
|
25
|
+
variant?: EmailVariant;
|
|
26
|
+
color?: EmailColor;
|
|
27
|
+
size?: keyof typeof SIZES;
|
|
28
|
+
style?: React.CSSProperties;
|
|
29
|
+
children: React.ReactNode;
|
|
30
|
+
}
|
|
31
|
+
/** Chip for email, defaulting to soft / neutral like the web Chip; outlined and plain fill with `surface`. */
|
|
32
|
+
export declare function Chip({ variant, color, size, style, children }: ChipProps): React.JSX.Element;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=Chip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chip.d.ts","sourceRoot":"","sources":["../../src/components/Chip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAA2C,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAExG;;;GAGG;AACH,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;CAID,CAAC;AAEX,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,CAAC;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,8GAA8G;AAC9G,wBAAgB,IAAI,CAAC,EAAE,OAAgB,EAAE,KAAiB,EAAE,IAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,qBA8BpG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface DividerProps {
|
|
3
|
+
/** Spacing around the line — the web Divider has none of its own either. */
|
|
4
|
+
style?: React.CSSProperties;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Divider for email: a 1px line in `--color-divider`. A div rather than an
|
|
8
|
+
* <hr>, whose borders Outlook and Gmail each draw differently. `background`
|
|
9
|
+
* carries a solid fallback that Outlook's Word engine — which drops rgba() —
|
|
10
|
+
* keeps; every other client takes the rgba `background-color` after it.
|
|
11
|
+
*/
|
|
12
|
+
export declare function Divider({ style }: DividerProps): React.JSX.Element;
|
|
13
|
+
//# sourceMappingURL=Divider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Divider.d.ts","sourceRoot":"","sources":["../../src/components/Divider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,YAAY;IAC3B,4EAA4E;IAC5E,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,qBAW9C"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The email counterpart of the web HintoricLogo: the black wordmark, swapped
|
|
3
|
+
* for the white one where the client applies the dark stylesheet.
|
|
4
|
+
*/
|
|
5
|
+
export declare function HintoricLogo(): import("react").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=HintoricLogo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HintoricLogo.d.ts","sourceRoot":"","sources":["../../src/components/HintoricLogo.tsx"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,wBAAgB,YAAY,gCAqB3B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface LayoutProps {
|
|
3
|
+
/** The `lang` of the message — screen readers pick their voice from it. */
|
|
4
|
+
lang: string;
|
|
5
|
+
/**
|
|
6
|
+
* The line inbox lists show after the subject. Without one, clients take the
|
|
7
|
+
* first text they find, which is usually the brand name.
|
|
8
|
+
*/
|
|
9
|
+
preview: string;
|
|
10
|
+
/** Rendered under the card: why the reader got this, the sender's legal line. */
|
|
11
|
+
footer?: React.ReactNode;
|
|
12
|
+
/** Forces a scheme for previews. Left out, the email follows the reader's OS where the client supports that. */
|
|
13
|
+
colorScheme?: 'light' | 'dark';
|
|
14
|
+
children: React.ReactNode;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The whole document, laid out like core's AuthScreen: a 440px outlined card
|
|
18
|
+
* with a 20px radius and 48px padding on a `surface-1` page, the fine print
|
|
19
|
+
* centred under it. In dark the page and card swap surfaces, as AuthScreen's do.
|
|
20
|
+
*/
|
|
21
|
+
export declare function Layout({ lang, preview, footer, colorScheme, children }: LayoutProps): React.JSX.Element;
|
|
22
|
+
/**
|
|
23
|
+
* The dark-mode stylesheet on its own. Layout includes it; render it
|
|
24
|
+
* once yourself when email components are shown inside a normal page — a
|
|
25
|
+
* preview, the docs — so they follow that page's `data-color-scheme`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function ColorSchemeStyles(): React.JSX.Element;
|
|
28
|
+
//# sourceMappingURL=Layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Layout.d.ts","sourceRoot":"","sources":["../../src/components/Layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,gHAAgH;IAChH,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,WAAW,qBA8BnF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,sBAEhC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { EmailColor } from '../tokens';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export interface LinkProps {
|
|
4
|
+
/** Rendered only for http(s) and mailto URLs; anything else becomes plain text. */
|
|
5
|
+
href: string;
|
|
6
|
+
color?: EmailColor;
|
|
7
|
+
/**
|
|
8
|
+
* The web Link defaults to `hover`, but there is no reliable hover in email,
|
|
9
|
+
* so the default here is `always`: an inbox reader needs to see a link is
|
|
10
|
+
* one without touching it.
|
|
11
|
+
*/
|
|
12
|
+
underline?: 'none' | 'always';
|
|
13
|
+
style?: React.CSSProperties;
|
|
14
|
+
children: React.ReactNode;
|
|
15
|
+
}
|
|
16
|
+
/** Link for email: the web Link's `--color-*-main` colour, which steps from 500 to 400 in dark. */
|
|
17
|
+
export declare function Link({ href, color, underline, style, children }: LinkProps): React.JSX.Element;
|
|
18
|
+
//# sourceMappingURL=Link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../src/components/Link.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAGnE,MAAM,WAAW,SAAS;IACxB,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC9B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,mGAAmG;AACnG,wBAAgB,IAAI,CAAC,EAAE,IAAI,EAAE,KAAiB,EAAE,SAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,qBAYjG"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export type TypographyLevel = 'h1' | 'h2' | 'h3' | 'h4' | 'title-lg' | 'title-md' | 'title-sm' | 'body-lg' | 'body-md' | 'body-sm' | 'body-xs';
|
|
3
|
+
export interface TypographyProps {
|
|
4
|
+
level?: TypographyLevel;
|
|
5
|
+
/** The element to render. Defaults to the same tag the web Typography picks for the level. */
|
|
6
|
+
component?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span' | 'div';
|
|
7
|
+
textAlign?: 'left' | 'center' | 'right';
|
|
8
|
+
/**
|
|
9
|
+
* Overrides the level's ink, like Joy's `textColor="text.tertiary"`.
|
|
10
|
+
* `icon` is the theme's faintest ink — for fine print that should recede.
|
|
11
|
+
*/
|
|
12
|
+
textColor?: 'primary' | 'secondary' | 'tertiary' | 'icon';
|
|
13
|
+
/** Margin, spacing and the like — there is no Stack in email, so spacing lives on the text. */
|
|
14
|
+
style?: React.CSSProperties;
|
|
15
|
+
children?: React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
/** Typography for email: the same levels, sizes and ink colours, as inline styles. */
|
|
18
|
+
export declare function Typography({ level, component, textAlign, textColor, style, children }: TypographyProps): React.JSX.Element;
|
|
19
|
+
//# sourceMappingURL=Typography.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Typography.d.ts","sourceRoot":"","sources":["../../src/components/Typography.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,eAAe,GACvB,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,UAAU,GACV,UAAU,GACV,UAAU,GACV,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,CAAC;AAsCd,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,8FAA8F;IAC9F,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,MAAM,GAAG,KAAK,CAAC;IAC3E,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACxC;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;IAC1D,+FAA+F;IAC/F,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AASD,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,EAAE,KAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,eAAe,qBAsBlH"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export { renderEmail } from './render';
|
|
2
|
+
export type { RenderedEmailBody } from './render';
|
|
3
|
+
export { EMAIL_COLORS, EMAIL_VARIANTS, emailFonts, emailPalette, emailRadius, emailSchemes, mainColor, variantTokens, } from './tokens';
|
|
4
|
+
export type { EmailColor, EmailScheme, EmailSchemeTokens, EmailVariant, EmailVariantTokens } from './tokens';
|
|
5
|
+
export { safeHref, safeImageSrc } from './safeUrl';
|
|
6
|
+
export { Layout, ColorSchemeStyles } from './components/Layout';
|
|
7
|
+
export type { LayoutProps } from './components/Layout';
|
|
8
|
+
export { Typography } from './components/Typography';
|
|
9
|
+
export type { TypographyLevel, TypographyProps } from './components/Typography';
|
|
10
|
+
export { Button } from './components/Button';
|
|
11
|
+
export type { ButtonProps } from './components/Button';
|
|
12
|
+
export { Link } from './components/Link';
|
|
13
|
+
export type { LinkProps } from './components/Link';
|
|
14
|
+
export { Divider } from './components/Divider';
|
|
15
|
+
export type { DividerProps } from './components/Divider';
|
|
16
|
+
export { Card } from './components/Card';
|
|
17
|
+
export type { CardProps } from './components/Card';
|
|
18
|
+
export { Avatar } from './components/Avatar';
|
|
19
|
+
export type { AvatarProps } from './components/Avatar';
|
|
20
|
+
export { Chip } from './components/Chip';
|
|
21
|
+
export type { ChipProps } from './components/Chip';
|
|
22
|
+
export { HintoricLogo } from './components/HintoricLogo';
|
|
23
|
+
export * from './templates/SecurityActivityAlert';
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,SAAS,EACT,aAAa,GACd,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC7G,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,cAAc,mCAAmC,CAAC"}
|