2026-02-05 14:54:19 +03:30
|
|
|
"use client";
|
|
|
|
|
|
|
|
|
|
import {
|
|
|
|
|
Accordion,
|
|
|
|
|
AccordionContent,
|
|
|
|
|
AccordionItem,
|
|
|
|
|
AccordionTrigger,
|
|
|
|
|
} from "@/components/ui/accordion";
|
|
|
|
|
import type { CollapseBlockPayload } from "@/lib/blog-blocks";
|
2026-02-05 17:58:28 +03:30
|
|
|
import { Icon } from "@iconify/react";
|
2026-02-05 14:54:19 +03:30
|
|
|
|
|
|
|
|
interface BlogCollapseSectionProps {
|
|
|
|
|
section: CollapseBlockPayload;
|
|
|
|
|
/** Optional prefix for accordion item ids (e.g. for multiple sections on one page). */
|
|
|
|
|
idPrefix?: string;
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-05 17:58:28 +03:30
|
|
|
|
2026-02-05 14:54:19 +03:30
|
|
|
export function BlogCollapseSection({
|
|
|
|
|
section,
|
|
|
|
|
idPrefix = "collapse",
|
|
|
|
|
}: BlogCollapseSectionProps) {
|
|
|
|
|
if (!section.items.length) return null;
|
|
|
|
|
|
|
|
|
|
return (
|
2026-02-05 17:58:28 +03:30
|
|
|
<div className="my-8 space-y-4 border rounded-xl p-6">
|
2026-02-05 14:54:19 +03:30
|
|
|
{section.title ? (
|
|
|
|
|
<h2 className="text-2xl font-bold !mt-0 mb-4 scroll-mt-24">
|
|
|
|
|
{section.title}
|
|
|
|
|
</h2>
|
|
|
|
|
) : null}
|
2026-02-05 17:58:28 +03:30
|
|
|
<Accordion type="single" collapsible className="w-full gap-1">
|
2026-02-05 14:54:19 +03:30
|
|
|
{section.items.map((item, i) => (
|
|
|
|
|
<AccordionItem
|
|
|
|
|
key={i}
|
|
|
|
|
value={`${idPrefix}-${i}`}
|
2026-02-05 17:58:28 +03:30
|
|
|
className="border-none !m-0 hover:bg-muted has-[[data-state=open]]:bg-muted px-4 rounded-md"
|
2026-02-05 14:54:19 +03:30
|
|
|
>
|
2026-02-05 17:58:28 +03:30
|
|
|
<AccordionTrigger className="group/trigger text-right hover:no-underline cursor-pointer py-4 [&>svg]:shrink-0">
|
|
|
|
|
<span className="flex gap-1 items-center">
|
|
|
|
|
<Icon
|
|
|
|
|
icon="lucide:circle-small"
|
|
|
|
|
className="size-5 group-data-[state=open]/trigger:hidden"
|
|
|
|
|
/>
|
|
|
|
|
<Icon
|
|
|
|
|
icon="lucide:dot"
|
|
|
|
|
className="size-5 hidden group-data-[state=open]/trigger:inline-block"
|
|
|
|
|
/>
|
|
|
|
|
{item.question}
|
|
|
|
|
</span>
|
2026-02-05 14:54:19 +03:30
|
|
|
</AccordionTrigger>
|
|
|
|
|
<AccordionContent className="text-muted-foreground leading-relaxed text-justify">
|
2026-02-05 17:58:28 +03:30
|
|
|
<div dangerouslySetInnerHTML={{ __html: item.answer }} />
|
2026-02-05 14:54:19 +03:30
|
|
|
</AccordionContent>
|
|
|
|
|
</AccordionItem>
|
|
|
|
|
))}
|
|
|
|
|
</Accordion>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|