achat-maison-albi-fr/src/components/ui/blocks/AccordionItem.astro
Emil Gulamov a9b4e8c0dc Update testimonials and improve code readability
Refactored the image URL in testimonials and reduced redundancy in the FeaturesStats and accordion components, enhancing code readability. Also, implemented dynamic id generation in the FAQ component, improving scalability and maintainability. Added new pages to the website and updated the meta information, improving SEO.
2024-02-14 22:56:43 +04:00

49 lines
1.8 KiB
Text

---
const { id, collapseId, heading, content, first } = Astro.props;
interface Props {
id: string;
collapseId: string;
heading: string;
content: string;
first?: boolean;
}
const ACCORDION_CLASS_DEFAULT = "hs-accordion pb-3 active";
const ACCORDION_CLASS_COLLAPSED = "hs-accordion pt-6 pb-3";
const ACCORDION_CONTENT_CLASS = "hs-accordion-content w-full overflow-hidden transition-[height] duration-300";
function getAccordionClass(first: boolean) {
return first ? ACCORDION_CLASS_DEFAULT : ACCORDION_CLASS_COLLAPSED;
}
const SVG_PARAMS = { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", "stroke": "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" };
---
<div
class={getAccordionClass(first)}
id={id}
>
<button
class="hs-accordion-toggle group inline-flex w-full items-center justify-between gap-x-3 text-balance rounded-lg pb-3 text-start font-bold text-neutral-800 outline-none ring-zinc-500 transition hover:text-neutral-500 focus-visible:ring dark:text-neutral-200 dark:ring-zinc-200 dark:hover:text-neutral-400 dark:focus:outline-none md:text-lg"
aria-controls={collapseId}
>
{heading}
<svg
class="block h-5 w-5 flex-shrink-0 text-neutral-600 group-hover:text-neutral-500 hs-accordion-active:hidden dark:text-neutral-400"
{...SVG_PARAMS}
><path d="m6 9 6 6 6-6"></path></svg
>
<svg
class="hidden h-5 w-5 flex-shrink-0 text-neutral-600 group-hover:text-neutral-500 hs-accordion-active:block dark:text-neutral-400"
{...SVG_PARAMS}
><path d="m18 15-6-6-6 6"></path></svg
>
</button>
<div
aria-labelledby={id}
class={`${first ? ACCORDION_CONTENT_CLASS : 'hidden ' + ACCORDION_CONTENT_CLASS}`}
id={collapseId}
>
<p class="text-pretty text-neutral-600 dark:text-neutral-400">
{content}
</p>
</div>
</div>