feat: add Email link component

This commit is contained in:
Stefan Imhoff
2023-04-24 15:14:30 +02:00
parent d6674f7504
commit 7de48dacb6
4 changed files with 52 additions and 6 deletions

View File

@@ -0,0 +1,44 @@
---
import { Sprite } from 'astro-icon';
import { TextLink } from '../components';
export interface Props {
text?: string;
}
const { text = 'Email', ...props } = Astro.props;
---
<TextLink class="group" href="#protected-email" data-email-link {...props}>
{text}
<span
class="more-icon relative inline-flex mis-[0.2em] inline-start-[0.2em] block-start-[0.3em]"
>
<Sprite
name="ri:mail-send-line"
aria-hidden="true"
class="h-icon w-icon group-hover:translate-x-1 transition-transform duration-500 ease-in-out"
/>
</span>
</TextLink>
<script>
function handleClick(event: Event) {
event.preventDefault();
const currentTarget = event.currentTarget;
if (currentTarget instanceof HTMLElement) {
const { name, domain, tld } = currentTarget.dataset;
if (name && domain && tld) {
const mailto = `mailto:${name}@${domain}.${tld}`;
window.open(mailto, '_blank');
}
}
}
const links = document.querySelectorAll('[data-email-link]');
links.forEach((link) => {
link.addEventListener('click', handleClick);
});
</script>

View File

@@ -1,5 +1,6 @@
// @ts-nocheck
import DownloadLink from './DownloadLink.astro';
import EmailLink from './EmailLink.astro';
import MoreLink from './MoreLink.astro';
export * from './AffiliateLink';
@@ -26,4 +27,4 @@ export * from './Title';
export * from './UnorderedList';
export * from './Verse';
export * from './YouTubeVideo';
export { DownloadLink, MoreLink };
export { DownloadLink, EmailLink, MoreLink };

View File

@@ -6,6 +6,7 @@ import {
ColorSwatch,
Divider,
DownloadLink,
EmailLink,
Flag,
Headline,
Image,
@@ -33,6 +34,7 @@ export const mapping = {
Book,
ColorSwatch,
DownloadLink,
EmailLink,
Flag,
h1: Title,
h2: Headline,

View File

@@ -3,15 +3,14 @@ layout: ../layouts/PageLayout.astro
title: Imprint
---
import { mapping } from '../mdx-components.ts';
import { mapping } from "../mdx-components.ts";
export const components = mapping;
### Contact Person
Stefan Imhoff \
Walter-Heitmann-Str. 2 \
22159 Hamburg \
[Contact](#)
Stefan Imhoff<br />
Walter-Heitmann-Str. 2<br />
22159 Hamburg<br /><><EmailLink data-domain="stefanimhoff" data-name="hey" data-tld="de" text="Contact" /></>
### License