/* global React, ReactDOM, GiftyData */ const { useState, useEffect } = React; // Logo (full wordmark PNG) — used in sub-page navs, footers, and admin function LogoMini({ size = 30, white = false }) { return ( Gifty ); } // Simple header used by sub-pages function SubpageNav({ current }) { return ( ); } function PageFooter() { return ( ); } // ===== Works listing ===== function WorksApp() { const [works, setWorks] = useState(GiftyData.getWorks()); useEffect(() => { const onChange = () => setWorks(GiftyData.getWorks()); window.addEventListener("gifty:cms-change", onChange); return () => window.removeEventListener("gifty:cms-change", onChange); }, []); return ( <>
Works

WORKS #ご支援・制作実績

公式LINE構築、Instagram運用、業務効率化まで。これまでにご一緒させていただいたお客様の事例をご紹介します。

{works.length === 0 ? (

まだ実績はありません

管理画面から実績を追加できます。

) : (
{works.map((w) => ( {w.images && w.images.length > 0 && (
= 2 ? "cols-2" : ""}`}> {w.images.slice(0, 2).map((src, i) => ( ))}
)}
{(w.tags || []).map((t, i) => {t})}
{w.client}
{w.title}
{w.summary &&
{w.summary}
}
{w.category} {w.createdAt || ""}
))}
)}
); } // ===== Blog listing ===== function BlogApp() { const [posts, setPosts] = useState(GiftyData.getPosts()); useEffect(() => { const onChange = () => setPosts(GiftyData.getPosts()); window.addEventListener("gifty:cms-change", onChange); return () => window.removeEventListener("gifty:cms-change", onChange); }, []); return ( <>
Blog

BLOG #お便り

日々の現場から得た気づきや、ファンづくり・余白づくりのヒント。気の向くままに、お便りのように綴っています。

{posts.length === 0 ? (

まだ記事はありません

管理画面から記事を追加できます。

) : ( )}
); } // ===== Blog detail (single post) ===== function PostApp() { const params = new URLSearchParams(location.search); const id = params.get("id"); const post = id ? GiftyData.getPost(id) : null; if (!post) { return ( <>

記事が見つかりません

Blog一覧に戻る

); } return ( <>
← Blog一覧に戻る {post.cover ? (
) : (
{(post.category || "B")[0]}
)}
{post.category && {post.category}} {post.createdAt || ""}

{post.title}

{post.body || post.excerpt}
); } // ===== Work detail ===== function WorkApp() { const params = new URLSearchParams(location.search); const id = params.get("id"); const work = id ? GiftyData.getWork(id) : null; if (!work) { return ( <>

実績が見つかりません

Works一覧に戻る

); } return ( <>
← Works一覧に戻る
{(work.tags || []).map((t, i) => {t})}
{work.client}

{work.title}

{work.summary &&
{work.summary}
}
{(work.images || []).map((src, i) => ( {`${work.client} ))}
); } Object.assign(window, { WorksApp, BlogApp, PostApp, WorkApp, SubpageNav, PageFooter, LogoMini });