Skip to main content

Accordion

The TkAccordion component is a user interface element that organizes content under headers, allowing users to expand and collapse sections by clicking on each header. It is particularly useful for improving layout and readability on pages with extensive information.

import { TkAccordion, TkAccordionItem } from '@takeoff-ui/react'

Type

Establishes 2 different accordion styles grouped, divided via type property.

Grouped
Panel 1 Title
Panel 1 Content
Panel 2 Title
Panel 2 Content
Panel 3 Title
Panel 3 Content

Divided
Panel 1 Title
Panel 1 Content
Panel 2 Title
Panel 2 Content
Panel 3 Title
Panel 3 Content
View Code
<TkAccordion type="grouped">
<TkAccordionItem>
<span slot="header">Panel 1 Title</span>
<div slot="content">Panel 1 Content</div>
</TkAccordionItem>
<TkAccordionItem>
<span slot="header">Panel 2 Title</span>
<div slot="content">Panel 2 Content</div>
</TkAccordionItem>
<TkAccordionItem>
<span slot="header">Panel 3 Title</span>
<div slot="content">Panel 3 Content</div>
</TkAccordionItem>
</TkAccordion>

<TkAccordion type="divided">
<TkAccordionItem>
<span slot="header">Panel 1 Title</span>
<div slot="content">Panel 1 Content</div>
</TkAccordionItem>
<TkAccordionItem>
<span slot="header">Panel 2 Title</span>
<div slot="content">Panel 2 Content</div>
</TkAccordionItem>
<TkAccordionItem>
<span slot="header">Panel 3 Title</span>
<div slot="content">Panel 3 Content</div>
</TkAccordionItem>
</TkAccordion>

Allow Multiple

Allows multiple accordion items to be expanded simultaneously.

Panel 1 Content
Panel 2 Content
Panel 3 Content
View Code
<TkAccordion allowMultiple={true}>
<TkAccordionItem header="Panel 1">
<div slot="content">Panel 1 Content</div>
</TkAccordionItem>
<TkAccordionItem header="Panel 2">
<div slot="content">Panel 2 Content</div>
</TkAccordionItem>
<TkAccordionItem header="Panel 3">
<div slot="content">Panel 3 Content</div>
</TkAccordionItem>
</TkAccordion>

Active Index

Tab to expand initially can be defined with the activeIndex property.

Panel 1 Content
Panel 2 Content
Panel 3 Content
View Code
const [active,setActive] = useState([0, 1])
<TkAccordion
allowMultiple={true}
activeIndex={active}
onTkActiveIndexChange={(e: CustomEvent) => setActive(e.detail)}
>
<TkAccordionItem header="Panel 1">
<div slot="content">Panel 1 Content</div>
</TkAccordionItem>
<TkAccordionItem header="Panel 2">
<div slot="content">Panel 2 Content</div>
</TkAccordionItem>
<TkAccordionItem header="Panel 3">
<div slot="content">Panel 3 Content</div>
</TkAccordionItem>
</TkAccordion>

Item Active

Tab to expand initially can be defined with the active property in accordion item component.

Panel 1 Content
Panel 2 Content
Panel 3 Content
View Code
<TkAccordion>
<TkAccordionItem header="Panel 1" active={true}>
<div slot="content">Panel 1 Content</div>
</TkAccordionItem>
<TkAccordionItem header="Panel 2">
<div slot="content">Panel 2 Content</div>
</TkAccordionItem>
<TkAccordionItem header="Panel 3" >
<div slot="content">Panel 3 Content</div>
</TkAccordionItem>
</TkAccordion>

Custom Icon

The icon property on AccordionItem allows for icon customization.

Panel 1 Content
Panel 2 Content
Panel 3 Content
View Code
<TkAccordion>
<TkAccordionItem header="Panel 1" icon="home">
<div slot="content">hello</div>
</TkAccordionItem>
<TkAccordionItem header="Panel 2" icon={{ name: 'home', fill: true, color: 'red' }}>
<div slot="content">merhaba</div>
</TkAccordionItem>
<TkAccordionItem header="Panel 3">
<div slot="content">hallo</div>
</TkAccordionItem>
</TkAccordion>

Arrow Position

Provides 2 positions for opening and closing arrows left, right via arrowPosition property.

Right Positioned Arrows
Panel 1 Title
Panel 1 Content
Panel 2 Title
Panel 2 Content
Panel 3 Title
Panel 3 Content

Left Positioned Arrows
Panel 1 Title
Panel 1 Content
Panel 2 Title
Panel 2 Content
Panel 3 Title
Panel 3 Content
View Code
<TkAccordion arrow-position="left">
<TkAccordionItem size="base" icon="flight">
<span slot="header">Panel 1 Title</span>
<div slot="content">Panel 1 Content</div>
</TkAccordionItem>
<TkAccordionItem icon="flight">
<span slot="header">Panel 2 Title</span>
<div slot="content">Panel 2 Content</div>
</TkAccordionItem>
<TkAccordionItem icon="travel">
<span slot="header">Panel 3 Title</span>
<div slot="content">Panel 3 Content</div>
</TkAccordionItem>
</TkAccordion>

Expand and Collapse Icons

Provides different icon options for expand and collapse expandIcon and collapseIcon properties.

Panel 1 Title
Panel 1 Content
Panel 2 Title
Panel 2 Content
View Code
<TkAccordion expand-icon="add" collapse-icon="remove">
<TkAccordionItem icon="flight">
<span slot="header">Panel 1 Title</span>
<div slot="content">Panel 1 Content</div>
</TkAccordionItem>
<TkAccordionItem icon="flight">
<span slot="header">Panel 2 Title</span>
<div slot="content">Panel 2 Content</div>
</TkAccordionItem>
</TkAccordion>

Size

The size property on AccordionItem controls the size of the panel.

Panel 1 Content
Panel 2 Content
View Code
<TkAccordion>
<TkAccordionItem header="Base Size Panel" size="base">
<div slot="content">Panel 1 Content</div>
</TkAccordionItem>
<TkAccordionItem header="Large Size Panel" size="large">
<div slot="content">Panel 2 Content</div>
</TkAccordionItem>
</TkAccordion>

Accordion API

Props

NameTypeDefaultDescription
(string, number)[], number, stringnullCurrently active panel indexes. Can be a single value or an array. When allowMultiple is false, only the last value in the array will be used. Has priority over AccordionItem's active prop. To prevent conflicts, avoid using both simultaneously.
booleanfalseAllows multiple accordion items to be expanded simultaneously.
"left", "right"'right'Sets the position of opening and closing chevrons.
IIconOptions, string'keyboard_arrow_up'Sets the collapse icon
IIconOptions, string'keyboard_arrow_down'Sets the expand icon
booleanfalseWhether to hide the arrow icons.
"divided", "grouped"'grouped'Sets accordion style for the component.

Events

NameDescription
tk-accordion-item-selectedEmitted when an accordion item is selected
tk-active-index-changeEmitted when an active index is changed

Slots

NameDescription
defaultDefault slot to detect TkAccordionItem components.

Interfaces

IAccordionItemSelect

interface IAccordionItemSelect {
index: string | number;
active: boolean;
}

Accordion Item API

Props

NameTypeDefaultDescription
booleannullSets if the accordion is active.
stringnullHeader text to display.
IIconOptions, stringnullIcon for accordion component.
number, stringnullOptional key for the accordion item.
"base", "large"'base'Sets size for the component.

Events

NameDescription
tk-active-changeEmitted when an active index is changed

Slots

NameDescription
contentCustom content template.
headerCustom header template that overrides the header prop if provided.