Components Data display
Accordion
StableStacked headings that each reveal a section, with single or multiple open items.
Use Accordion to shorten long pages whose sections people read selectively, such as FAQs, settings groups and policy details. Avoid hiding content everyone needs. Built on the WAI-ARIA accordion pattern with real headings and buttons.
Overview
eSignify pushes signatures through your Exchange relay, so every email sent from Outlook, mobile or web gets the right signature.
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@bindshq/stance-react';
const faqs = [
[
'deploy',
'How are signatures deployed?',
'eSignify pushes signatures through your Exchange relay, so every email sent from Outlook, mobile or web gets the right signature.',
],
[
'change',
'Can people edit their own details?',
'Yes. Admins choose which fields people can edit, such as job title or phone number. Everything else is locked to the template.',
],
[
'remove',
'What happens when someone leaves?',
'Removing a user stops future deployments. Their last signature stays in sent mail but is no longer updated.',
],
] as const;
export function Basic() {
return (
<Accordion defaultValue="deploy">
{faqs.map(([value, q, a]) => (
<AccordionItem key={value} value={value}>
<AccordionTrigger>{q}</AccordionTrigger>
<AccordionContent>{a}</AccordionContent>
</AccordionItem>
))}
</Accordion>
);
}Light, dark and high contrast
Every Stance component is designed and tested in all three appearance modes.
eSignify pushes signatures through your Exchange relay, so every email sent from Outlook, mobile or web gets the right signature.
eSignify pushes signatures through your Exchange relay, so every email sent from Outlook, mobile or web gets the right signature.
eSignify pushes signatures through your Exchange relay, so every email sent from Outlook, mobile or web gets the right signature.
Import
import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from '@bindshq/stance-react';Examples
eSignify pushes signatures through your Exchange relay, so every email sent from Outlook, mobile or web gets the right signature.
Yes. Admins choose which fields people can edit, such as job title or phone number. Everything else is locked to the template.
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@bindshq/stance-react';
const faqs = [
[
'deploy',
'How are signatures deployed?',
'eSignify pushes signatures through your Exchange relay, so every email sent from Outlook, mobile or web gets the right signature.',
],
[
'change',
'Can people edit their own details?',
'Yes. Admins choose which fields people can edit, such as job title or phone number. Everything else is locked to the template.',
],
[
'remove',
'What happens when someone leaves?',
'Removing a user stops future deployments. Their last signature stays in sent mail but is no longer updated.',
],
] as const;
export function Multiple() {
return (
<Accordion type="multiple" defaultValue={['deploy', 'change']}>
{faqs.map(([value, q, a]) => (
<AccordionItem key={value} value={value}>
<AccordionTrigger>{q}</AccordionTrigger>
<AccordionContent>{a}</AccordionContent>
</AccordionItem>
))}
</Accordion>
);
}import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@bindshq/stance-react';
export function Separated() {
return (
<Accordion variant="separated" headingLevel={4}>
<AccordionItem value="relay">
<AccordionTrigger>Exchange relay</AccordionTrigger>
<AccordionContent>Connected to smtp.binds.si on port 587.</AccordionContent>
</AccordionItem>
<AccordionItem value="azure">
<AccordionTrigger>Azure AD sync</AccordionTrigger>
<AccordionContent>Syncs users and departments every hour.</AccordionContent>
</AccordionItem>
<AccordionItem value="google" disabled>
<AccordionTrigger>Google Workspace (coming soon)</AccordionTrigger>
<AccordionContent>Not yet available.</AccordionContent>
</AccordionItem>
</Accordion>
);
}API reference
Accordion
| Prop | Type | Default | Description |
|---|---|---|---|
type | 'single' | 'multiple' | 'single' | One or many open items. |
value | string | null | string[] | None | Controlled open item(s). |
defaultValue | string | null | string[] | None | Initially open item(s). |
onValueChange | (value) => void | None | Called when items open or close. |
collapsible | boolean | true | Single mode: allow closing the open item. |
headingLevel | 2 | 3 | 4 | 5 | 6 | 3 | Heading level wrapping each trigger. |
variant | 'default' | 'separated' | 'default' | Ruled list or separate panels. |
disabled | boolean | false | Disable all items. |
AccordionItem
| Prop | Type | Default | Description |
|---|---|---|---|
value* required | string | None | Unique item value. |
disabled | boolean | None | Disable this item. |
AccordionTrigger
| Prop | Type | Default | Description |
|---|---|---|---|
hideIndicator | boolean | false | Hide the chevron. |
AccordionContent
| Prop | Type | Default | Description |
|---|---|---|---|
forceMount | boolean | false | Keep mounted while closed. |
Accessibility
- Each trigger is a button inside a heading, with aria-expanded and aria-controls.
- Each panel is a region labelled by its trigger.
- Arrow keys, Home and End move between headers; disabled items are skipped.
- Closed panels are removed from the accessibility tree.
Keyboard
| Keys | Action |
|---|---|
| Enter Space | Opens or closes the focused section. |
| ArrowDown ArrowUp | Moves to the next or previous header. |
| Home End | Moves to the first or last header. |
| Tab | Moves through headers and into open panels. |
Usage guidelines
Do
- Write triggers as clear questions or section names.
Don’t
- Nest accordions.
- Hide critical information in a closed panel.