diff options
Diffstat (limited to 'src/components/SocialShare.astro')
| -rw-r--r-- | src/components/SocialShare.astro | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/components/SocialShare.astro b/src/components/SocialShare.astro new file mode 100644 index 0000000..a818822 --- /dev/null +++ b/src/components/SocialShare.astro @@ -0,0 +1,77 @@ +--- +export interface Props { + /** Page URL (defaults to current page) */ + url?: string; + /** Page title */ + title?: string; +} + +const { url, title } = Astro.props; +const pageUrl = url ?? Astro.url.href; +const pageTitle = title ?? ""; + +const encodedUrl = encodeURIComponent(pageUrl); +const encodedTitle = encodeURIComponent(pageTitle); + +const SHARE_LINKS = [ + { + label: "X", + href: `https://x.com/intent/tweet?url=${encodedUrl}&text=${encodedTitle}`, + svg: '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4l11.733 16h4.267l-11.733-16z"/><path d="M4 20l6.768-6.768m2.46-2.46L20 4"/></svg>', + }, + { + label: "Facebook", + href: `https://www.facebook.com/sharer/sharer.php?u=${encodedUrl}`, + svg: '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"/></svg>', + }, + { + label: "LINE", + href: `https://social-plugins.line.me/lineit/share?url=${encodedUrl}`, + svg: '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12h2"/><path d="M6 8v8"/><path d="M10 6v12"/><path d="M14 9.5V20"/><path d="M18 6v12"/><path d="M22 8v8"/></svg>', + }, +]; +--- + +<div class="social-share"> + <span class="social-share-label">Share:</span> + {SHARE_LINKS.map((link) => ( + <a + href={link.href} + target="_blank" + rel="noopener noreferrer" + class="social-share-btn" + title={`${link.label}で共有`} + > + <span set:html={link.svg} /> + </a> + ))} +</div> + +<style> + @layer starlight.core { + .social-share { + display: flex; + align-items: center; + gap: 0.5rem; + margin-top: 2rem; + padding-top: 1rem; + border-top: 1px solid var(--sl-color-gray-5); + } + .social-share-label { + font-size: 0.85rem; + color: var(--sl-color-gray-2); + } + .social-share-btn { + color: var(--sl-color-gray-2); + padding: 0.35rem; + border-radius: 4px; + transition: color 0.2s, background 0.2s; + display: flex; + align-items: center; + } + .social-share-btn:hover { + color: var(--sl-color-white); + background: var(--sl-color-gray-5); + } + } +</style> |
