Documentação
Accordion
Um conjunto de cabeçalhos interativos empilhados verticalmente, cada um revelando uma seção de conteúdo.
Carregando…
"use client";
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@blips/ui/components/accordion";
export default function AccordionDemo() {
return (
<Accordion type="single" collapsible className="w-full">
<AccordionItem value="item-1">
<AccordionTrigger>Is it accessible?</AccordionTrigger>
<AccordionContent>
Yes. It adheres to the WAI-ARIA design pattern.
</AccordionContent>
</AccordionItem>
<AccordionItem value="item-2">
<AccordionTrigger>Is it styled?</AccordionTrigger>
<AccordionContent>
Yes. It comes with default styles that matches the other components'
aesthetic.
</AccordionContent>
</AccordionItem>
<AccordionItem value="item-3">
<AccordionTrigger>Is it animated?</AccordionTrigger>
<AccordionContent>
Yes. It's animated by default, but you can disable it if you prefer.
</AccordionContent>
</AccordionItem>
</Accordion>
);
}
Instalação
Uso
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@blips/ui/components/accordion"<Accordion type="single" collapsible defaultValue="item-1">
<AccordionItem value="item-1">
<AccordionTrigger>É acessível?</AccordionTrigger>
<AccordionContent>
Sim. Segue o padrão de design WAI-ARIA.
</AccordionContent>
</AccordionItem>
</Accordion>Exemplos
Básico
Um accordion básico que mostra um item por vez. O primeiro item começa aberto por padrão.
Carregando…
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@blips/ui/components/accordion";
const items = [
{
value: "item-1",
trigger: "How do I reset my password?",
content:
"Click on 'Forgot Password' on the login page, enter your email address, and we'll send you a link to reset your password. The link will expire in 24 hours.",
},
{
value: "item-2",
trigger: "Can I change my subscription plan?",
content:
"Yes, you can upgrade or downgrade your plan at any time from your account settings. Changes will be reflected in your next billing cycle.",
},
{
value: "item-3",
trigger: "What payment methods do you accept?",
content:
"We accept all major credit cards, PayPal, and bank transfers. All payments are processed securely through our payment partners.",
},
];
export function AccordionBasic() {
return (
<Accordion
type="single"
collapsible
defaultValue="item-1"
className="max-w-lg"
>
{items.map((item) => (
<AccordionItem key={item.value} value={item.value}>
<AccordionTrigger>{item.trigger}</AccordionTrigger>
<AccordionContent>{item.content}</AccordionContent>
</AccordionItem>
))}
</Accordion>
);
}
Múltiplos
Use type="multiple" para permitir que vários itens fiquem abertos ao mesmo tempo.
Carregando…
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@blips/ui/components/accordion";
const items = [
{
value: "notifications",
trigger: "Notification Settings",
content:
"Manage how you receive notifications. You can enable email alerts for updates or push notifications for mobile devices.",
},
{
value: "privacy",
trigger: "Privacy & Security",
content:
"Control your privacy settings and security preferences. Enable two-factor authentication, manage connected devices, review active sessions, and configure data sharing preferences. You can also download your data or delete your account.",
},
{
value: "billing",
trigger: "Billing & Subscription",
content:
"View your current plan, payment history, and upcoming invoices. Update your payment method, change your subscription tier, or cancel your subscription.",
},
];
export function AccordionMultiple() {
return (
<Accordion
type="multiple"
className="max-w-lg"
defaultValue={["notifications"]}
>
{items.map((item) => (
<AccordionItem key={item.value} value={item.value}>
<AccordionTrigger>{item.trigger}</AccordionTrigger>
<AccordionContent>{item.content}</AccordionContent>
</AccordionItem>
))}
</Accordion>
);
}
Desabilitado
Use a prop disabled no AccordionItem para desabilitar itens individuais.
Carregando…
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@blips/ui/components/accordion";
export default function AccordionDisabled() {
return (
<Accordion type="single" collapsible className="w-full">
<AccordionItem value="item-1">
<AccordionTrigger>Can I access my account history?</AccordionTrigger>
<AccordionContent>
Yes, you can view your complete account history including all
transactions, plan changes, and support tickets in the Account History
section of your dashboard.
</AccordionContent>
</AccordionItem>
<AccordionItem value="item-2" disabled>
<AccordionTrigger>Premium feature information</AccordionTrigger>
<AccordionContent>
This section contains information about premium features. Upgrade your
plan to access this content.
</AccordionContent>
</AccordionItem>
<AccordionItem value="item-3">
<AccordionTrigger>How do I update my email address?</AccordionTrigger>
<AccordionContent>
You can update your email address in your account settings.
You'll receive a verification email at your new address to
confirm the change.
</AccordionContent>
</AccordionItem>
</Accordion>
);
}
Bordas
Adicione border ao Accordion e border-b last:border-b-0 ao AccordionItem para adicionar bordas aos itens.
Carregando…
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@blips/ui/components/accordion";
const items = [
{
value: "billing",
trigger: "How does billing work?",
content:
"We offer monthly and annual subscription plans. Billing is charged at the beginning of each cycle, and you can cancel anytime. All plans include automatic backups, 24/7 support, and unlimited team members.",
},
{
value: "security",
trigger: "Is my data secure?",
content:
"Yes. We use end-to-end encryption, SOC 2 Type II compliance, and regular third-party security audits. All data is encrypted at rest and in transit using industry-standard protocols.",
},
{
value: "integration",
trigger: "What integrations do you support?",
content:
"We integrate with 500+ popular tools including Slack, Zapier, Salesforce, HubSpot, and more. You can also build custom integrations using our REST API and webhooks.",
},
];
export default function AccordionBorders() {
return (
<Accordion
type="single"
collapsible
className="max-w-lg rounded-lg border"
defaultValue="billing"
>
{items.map((item) => (
<AccordionItem
key={item.value}
value={item.value}
className="border-b px-4 last:border-b-0"
>
<AccordionTrigger>{item.trigger}</AccordionTrigger>
<AccordionContent>{item.content}</AccordionContent>
</AccordionItem>
))}
</Accordion>
);
}
Card
Envolva o Accordion em um componente Card.
Carregando…
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@blips/ui/components/accordion";
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from "@blips/ui/components/card";
const items = [
{
value: "plans",
trigger: "What subscription plans do you offer?",
content:
"We offer three subscription tiers: Starter ($9/month), Professional ($29/month), and Enterprise ($99/month). Each plan includes increasing storage limits, API access, priority support, and team collaboration features.",
},
{
value: "billing",
trigger: "How does billing work?",
content:
"Billing occurs automatically at the start of each billing cycle. We accept all major credit cards, PayPal, and ACH transfers for enterprise customers. You'll receive an invoice via email after each payment.",
},
{
value: "cancel",
trigger: "How do I cancel my subscription?",
content:
"You can cancel your subscription anytime from your account settings. There are no cancellation fees or penalties. Your access will continue until the end of your current billing period.",
},
];
export default function AccordionCard() {
return (
<Card className="w-full max-w-sm">
<CardHeader>
<CardTitle>Subscription & Billing</CardTitle>
<CardDescription>
Common questions about your account, plans, payments and
cancellations.
</CardDescription>
</CardHeader>
<CardContent>
<Accordion type="single" collapsible defaultValue="plans">
{items.map((item) => (
<AccordionItem key={item.value} value={item.value}>
<AccordionTrigger>{item.trigger}</AccordionTrigger>
<AccordionContent>{item.content}</AccordionContent>
</AccordionItem>
))}
</Accordion>
</CardContent>
</Card>
);
}
Referência da API
Consulte a documentação do Radix UI para mais informações.