Accordion
An accordion is a UI component that consists of a vertical stack of headers that can be expanded or collapsed to reveal or hide associated content sections.
Basic
Source Code
import {
Accordion,
AccordionControl,
AccordionItem,
AccordionPanel,
} from '@ocean-network-express/magenta-ui/react';
import React from 'react';
import { CONTAINERS } from '../../utils/Accordion/containers';
export function Basic() {
return (Default open
-
You can set the default open item by passing the
defaultOpenIdprop to the Accordion component. -
By default,
multipleprop is set tofalse. So, setdefaultOpenIdas a string:
Source Code
import {
Accordion,
AccordionControl,
AccordionItem,
AccordionPanel,
} from '@ocean-network-express/magenta-ui/react';
import React from 'react';
import { CONTAINERS } from '../../utils/Accordion/containers';
export function DefaultOpenSingle() {
return (- When
multipleprop is set totrue, setdefaultOpenIdas an array of strings:
Source Code
import {
Accordion,
AccordionControl,
AccordionItem,
AccordionPanel,
} from '@ocean-network-express/magenta-ui/react';
import React from 'react';
import { CONTAINERS } from '../../utils/Accordion/containers';
export function DefaultOpenMultiple() {
return (Controlled openId state
-
You can control
Accordionstate withopenIdandonChangeprops. -
By default,
multipleprop is set tofalse. So, setopenIdas string:
Source Code
import {
Accordion,
AccordionControl,
AccordionItem,
AccordionPanel,
} from '@ocean-network-express/magenta-ui/react';
import React from 'react';
import { CONTAINERS } from '../../utils/Accordion/containers';
export function ControlledSingle() {
const [openId, setOpenId] = React.useState<string | undefined>('Dry');- When
multipleprop is set totrue, setopenIdas an array of strings:
Source Code
import {
Accordion,
AccordionControl,
AccordionItem,
AccordionPanel,
} from '@ocean-network-express/magenta-ui/react';
import React from 'react';
import { CONTAINERS } from '../../utils/Accordion/containers';
export function ControlledMultiple() {
const [openId, setOpenId] = React.useState<string[]>(['Dry', 'Flat']);Sizes
-
Accordion supports 4 sizes
sm,md,lgandresponsiveand can be changed by passing thesizeprop. -
Default size is
lg.
Source Code
import {
Accordion,
AccordionControl,
AccordionItem,
AccordionPanel,
} from '@ocean-network-express/magenta-ui/react';
import React from 'react';
import { CONTAINERS } from '../../utils/Accordion/containers';
export function Sizes() {
return (- With size
responsive, the component will be responsive to the viewport.
Screen prefix | Screen width | Component size |
|---|---|---|
xs → xl | 0px → 1279px | sm |
xl → 3xl | 1280px → 1919px | md |
3xl → ∞ | 1920px → ∞ | lg |
Source Code
import {
Accordion,
AccordionControl,
AccordionItem,
AccordionPanel,
} from '@ocean-network-express/magenta-ui/react';
import React from 'react';
import { CONTAINERS } from '../../utils/Accordion/containers';
export function ResponsiveSize() {
return (Arrow position
- Arrow position can be changed by passing the
arrowPositionprop on the Accordion component. - Default arrow position is
right.
Source Code
import {
Accordion,
AccordionControl,
AccordionItem,
AccordionPanel,
} from '@ocean-network-express/magenta-ui/react';
import React from 'react';
import { CONTAINERS } from '../../utils/Accordion/containers';
export function ArrowPosition() {
return (Custom AccordionControl label
Source Code
import {
Accordion,
AccordionControl,
AccordionItem,
AccordionPanel,
} from '@ocean-network-express/magenta-ui/react';
import React from 'react';
import { CONTAINERS } from '../../utils/Accordion/containers';
export function CustomLabel() {
return (Custom arrow icon
- Use the
arrowIconprop on the AccordionControl component to change the indicator icon. The component handles the turning transition automatically.
Source Code
import { CaretDownFill } from '@ocean-network-express/magenta-ui/icons';
import {
Accordion,
AccordionControl,
AccordionItem,
AccordionPanel,
} from '@ocean-network-express/magenta-ui/react';
import React from 'react';
export function CustomArrowIcon() {
return (
<div className="flex flex-col gap-4 min-w-[350px]">Disabled
- Disabled state can be enabled by setting
disabledprop totrueon AccordionItem component.
Source Code
import {
Accordion,
AccordionControl,
AccordionItem,
AccordionPanel,
} from '@ocean-network-express/magenta-ui/react';
import React from 'react';
import { CONTAINERS } from '../../utils/Accordion/containers';
export function Disabled() {
const items = CONTAINERS.map((item, index) => ({Stacked
- Accordion can be stacked by setting the
stackedprop totrue. - By default, Accordion will be
separated.
Default Separated
Stacked
Source Code
import {
Accordion,
AccordionControl,
AccordionItem,
AccordionPanel,
Text,
} from '@ocean-network-express/magenta-ui/react';
import React from 'react';
import { CONTAINERS } from '../../utils/Accordion/containers';
export function Stacked() {Nested accordions
Source Code
import {
Accordion,
AccordionControl,
AccordionItem,
AccordionPanel,
Button,
Text,
} from '@ocean-network-express/magenta-ui/react';
import React from 'react';
import { CONTAINERS } from '../../utils/Accordion/containers';
TypeScript
AccordionPropstype exported from @ocean-network-express/magenta-ui/react is a generic, it accepts boolean type that describes multiple state:
Source Code
import { type AccordionProps } from '@ocean-network-express/magenta-ui/react';
type MultipleAccordionProps = AccordionProps<true>;
type DefaultAccordionProps = AccordionProps<false>;
Accessibility
Accordion follows WAI-ARIA recommendations:
Keyboard interactions
Key | Description |
|---|---|
ArrowDown | Moves focus to next item |
ArrowUp | Moves focus to previous item |
Home | Moves focus to first item |
End | Moves focus to last item |
Space/Enter | Toggles focused item opened state |
Was this page helpful?
Expandable Panel