# Faq 8

A shadcn/ui block from the [@diarmuradi](https://diarmuradi.com) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/diarmuradi/faq-8).

- Page, with a live preview: https://shadcn.exchange/r/diarmuradi/faq-8
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/diarmuradi/faq-8-light-ceb80f9a2d7b425f.png
- Registry item: https://diarmuradi.com/r/faq-8.json
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://diarmuradi.com/r/faq-8.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Dependencies

- npm packages: `lucide-react`
- Registry items: `https://diarmuradi.com/r/styles/base-nova/accordion.json`, `https://diarmuradi.com/r/styles/base-nova/badge.json`, `https://diarmuradi.com/r/styles/base-nova/button.json`, `https://diarmuradi.com/r/styles/base-nova/fancy-button.json`

## Files

### `faq.tsx`

```tsx
"use client"

import Link from "next/link"

import {
  Accordion,
  AccordionContent,
  AccordionItem,
  AccordionTrigger,
} from "@/components/ui/accordion"
import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
import { FancyButton } from "@/components/ui/fancy-button"
import { ChevronDownIcon, ChevronUpIcon } from 'lucide-react'

type FaqItem = {
  value: string
  question: string
  answer: string
}

const faqs: FaqItem[][] = [
  [
    {
      value: "item-1",
      question: "What countries do you support?",
      answer:
        "We support 45+ countries across North America, Europe, Asia, and Australia. The list on our site updates as we add regions.",
    },
    {
      value: "item-2",
      question: "How secure is my financial data?",
      answer:
        "Bank-level encryption, two-factor authentication, and compliance with PSD2, GDPR, and SOC 2. Data is encrypted at rest and in transit.",
    },
    {
      value: "item-3",
      question: "Is there a free trial available?",
      answer:
        "Yes. 14 days with full access. No card required. After the trial, pick the plan that fits.",
    },
  ],
  [
    {
      value: "item-4",
      question: "How long do transfers usually take?",
      answer:
        "Domestic transfers finish in 1-2 business days. International is 3-5 days depending on the destination bank.",
    },
    {
      value: "item-5",
      question: "Can I upgrade or downgrade my plan anytime?",
      answer:
        "Yes. Changes apply immediately and we prorate any difference on the next invoice.",
    },
    {
      value: "item-6",
      question: "Do you offer support in other languages?",
      answer:
        "English, Spanish, French, and German during business hours. More languages are on the roadmap.",
    },
  ],
]

export function Faq() {
  return (
    <section
      aria-label="FAQ"
      className="mx-auto flex w-full max-w-4xl flex-col gap-8 text-foreground motion-reduce:**:animate-none motion-reduce:**:transition-none"
    >
      <header className="flex flex-col gap-3 md:items-center md:text-center">
        <Badge variant="secondary" className="w-fit">
          Two columns
        </Badge>
        <div className="flex flex-col gap-2 md:items-center">
          <h1 className="text-3xl font-semibold tracking-tight text-balance sm:text-4xl md:text-5xl">
            Scan both sides at once
          </h1>
          <p className="text-muted-foreground">
            Six common questions in a balanced grid. Open either column without
            swiping.
          </p>
        </div>
      </header>

      <h2 className="sr-only">Questions</h2>
      <div className="grid gap-4 md:grid-cols-2">
        {faqs.map((items) => (
          <Accordion
            key={items[0].value}
            defaultValue={items.slice(0, 1).map((item) => item.value)}
            className="gap-2"
          >
            {items.map((item) => (
              <AccordionItem
                key={item.value}
                value={item.value}
                className="overflow-hidden rounded-xl border-0 bg-muted"
              >
                <AccordionTrigger className="p-4 text-left hover:no-underline *:data-[slot=accordion-trigger-icon]:hidden">
                  <span className="font-medium">{item.question}</span>
                  <span className="ml-auto flex size-7 shrink-0 items-center justify-center">
                    <ChevronDownIcon  aria-hidden="true" className="size-3.5 text-muted-foreground group-aria-expanded/accordion-trigger:hidden" />
                    <ChevronUpIcon  aria-hidden="true" className="hidden size-3.5 text-muted-foreground group-aria-expanded/accordion-trigger:inline" />
                  </span>
                </AccordionTrigger>
                <AccordionContent className="px-4 pb-4 text-sm text-muted-foreground">
                  {item.answer}
                </AccordionContent>
              </AccordionItem>
            ))}
          </Accordion>
        ))}
      </div>

      <div className="flex flex-col items-start gap-3 md:items-center">
        <FancyButton size="lg">Talk to sales</FancyButton>
        <div className="flex flex-col items-start gap-0.5 text-sm text-muted-foreground md:items-center">
          <span>Need something specific? Email</span>
          <Button
            variant="link"
            className="h-auto p-0"
            nativeButton={false}
            role="link"
            render={<Link href="mailto:user@example.com" role="link" />}
          >
            user@example.com
          </Button>
        </div>
      </div>
    </section>
  )
}
```
