Accordion
Organizes content into collapsible sections, allowing users to focus on one section at a time.
	<script lang="ts">
  import { Accordion } from "$lib";
  import { CaretDown } from "phosphor-svelte";
  import { slide } from "svelte/transition";
 
  const items = [
    {
      title: "What is the meaning of life?",
      content:
        "To become a better person, to help others, and to leave the world a better place than you found it."
    },
    {
      title: "How do I become a better person?",
      content:
        "Read books, listen to podcasts, and surround yourself with people who inspire you."
    },
    {
      title: "What is the best way to help others?",
      content: "Give them your time, attention, and love."
    }
  ];
</script>
 
<Accordion.Root class="w-full sm:max-w-[70%]" multiple>
  {#each items as item, i}
    <Accordion.Item value="${i}" class="group border-b border-dark-10 px-1.5">
      <Accordion.Header>
        <Accordion.Trigger
          class="flex w-full flex-1 items-center justify-between py-5 text-[15px] font-medium transition-all [&[data-state=open]>span>svg]:rotate-180 "
        >
          {item.title}
          <span
            class="inline-flex items-center justify-center rounded-[7px] bg-transparent transition-all sq-8 hover:bg-dark-10"
          >
            <CaretDown class="transition-all duration-200 sq-[18px]" />
          </span>
        </Accordion.Trigger>
      </Accordion.Header>
      <Accordion.Content
        transition={slide}
        transitionConfig={{ duration: 200 }}
        class="pb-[25px] text-sm tracking-[-0.01em]"
      >
        {item.content}
      </Accordion.Content>
    </Accordion.Item>
  {/each}
</Accordion.Root>
	
	<script lang="ts">
  import { Accordion } from "$lib";
  import { CaretDown } from "phosphor-svelte";
  import { slide } from "svelte/transition";
 
  const items = [
    {
      title: "What is the meaning of life?",
      content:
        "To become a better person, to help others, and to leave the world a better place than you found it."
    },
    {
      title: "How do I become a better person?",
      content:
        "Read books, listen to podcasts, and surround yourself with people who inspire you."
    },
    {
      title: "What is the best way to help others?",
      content: "Give them your time, attention, and love."
    }
  ];
</script>
 
<Accordion.Root class="w-full sm:max-w-[70%]" multiple>
  {#each items as item, i}
    <Accordion.Item value="${i}" class="group border-b border-dark-10 px-1.5">
      <Accordion.Header>
        <Accordion.Trigger
          class="flex w-full flex-1 items-center justify-between py-5 text-[15px] font-medium transition-all [&[data-state=open]>span>svg]:rotate-180 "
        >
          {item.title}
          <span
            class="inline-flex items-center justify-center rounded-[7px] bg-transparent transition-all sq-8 hover:bg-dark-10"
          >
            <CaretDown class="transition-all duration-200 sq-[18px]" />
          </span>
        </Accordion.Trigger>
      </Accordion.Header>
      <Accordion.Content
        transition={slide}
        transitionConfig={{ duration: 200 }}
        class="pb-[25px] text-sm tracking-[-0.01em]"
      >
        {item.content}
      </Accordion.Content>
    </Accordion.Item>
  {/each}
</Accordion.Root>
	
Structure
	<script lang="ts">
  import { Accordion } from "bits-ui";
</script>
 
<Accordion.Root>
  <Accordion.Item>
    <Accordion.Header>
      <Accordion.Trigger />
    </Accordion.Header>
    <Accordion.Content />
  </Accordion.Item>
</Accordion.Root>
	
	<script lang="ts">
  import { Accordion } from "bits-ui";
</script>
 
<Accordion.Root>
  <Accordion.Item>
    <Accordion.Header>
      <Accordion.Trigger />
    </Accordion.Header>
    <Accordion.Content />
  </Accordion.Item>
</Accordion.Root>
	
Component API
The root accordion component used to set and manage the state of the accordion.
| Property | Type | Description | 
|---|---|---|
multiple   |  boolean |  Whether or not multiple accordion items can be active at the same time. Default:
								 false   |  
disabled   |  boolean |  Whether or not the accordion is disabled. Default:
								 false   |  
value   |  union   |  The active accordion item value. Default:
								 —— undefined    |  
onValueChange   |  function   |  A callback function called when the active accordion item value changes. Default:
								 —— undefined    |  
asChild   |  boolean |  Whether to use render delegation with this component or not. Default:
								 false   |  
el   |  HTMLDivElement |  The underlying DOM element being rendered. You can bind to this to programatically interact with the element. Default:
								 —— undefined    |  
| Slot Property | Type | Description | 
|---|---|---|
builder   |  object   |  The builder attributes and actions to apply to the element if using the   |  
| Data Attribute | Value | Description | 
|---|---|---|
data-orientation  |  enum   |  The orientation of the accordion.  |  
data-accordion-root  |   |  Present on the root element.  |  
An accordion item.
| Property | Type | Description | 
|---|---|---|
value *  Required  |  string |  The value of the accordion item. Default:
								 —— undefined    |  
disabled   |  boolean |  Whether or not the accordion item is disabled. Default:
								 false   |  
asChild   |  boolean |  Whether to use render delegation with this component or not. Default:
								 false   |  
el   |  HTMLDivElement |  The underlying DOM element being rendered. You can bind to this to programatically interact with the element. Default:
								 —— undefined    |  
| Slot Property | Type | Description | 
|---|---|---|
builder   |  object   |  The builder attributes and actions to apply to the element if using the   |  
| Data Attribute | Value | Description | 
|---|---|---|
data-state  |  enum   |  The state of the accordion item.  |  
data-disabled  |   |  Present when the accordion item is disabled.  |  
data-accordion-item  |  —— |  Present on the item element.  |  
The accordion item header, which wraps the trigger and makes it more accessible.
| Property | Type | Description | 
|---|---|---|
level   |  enum   |  The heading level to use for the header. This will be set as the  Default:
								 —— undefined    |  
asChild   |  boolean |  Whether to use render delegation with this component or not. Default:
								 false   |  
el   |  HTMLDivElement |  The underlying DOM element being rendered. You can bind to this to programatically interact with the element. Default:
								 —— undefined    |  
| Slot Property | Type | Description | 
|---|---|---|
builder   |  object   |  The builder attributes and actions to apply to the element if using the   |  
| Data Attribute | Value | Description | 
|---|---|---|
data-heading-level  |  enum   |  The heading level of the header.  |  
data-accordion-header  |  —— |  Present on the header element.  |  
The accordion item trigger, which opens and closes the accordion item.
| Property | Type | Description | 
|---|---|---|
asChild   |  boolean |  Whether to use render delegation with this component or not. Default:
								 false   |  
el   |  HTMLButtonElement |  The underlying DOM element being rendered. You can bind to this to programatically interact with the element. Default:
								 —— undefined    |  
| Slot Property | Type | Description | 
|---|---|---|
builder   |  object   |  The builder attributes and actions to apply to the element if using the   |  
| Data Attribute | Value | Description | 
|---|---|---|
data-state  |  enum   |  The state of the accordion item.  |  
data-disabled  |  —— |  Present when the accordion item is disabled.  |  
data-value  |  —— |  The value of the accordion item.  |  
data-accordion-trigger  |  —— |  Present on the trigger element.  |  
The accordion item content, which is displayed when the item is open.
| Property | Type | Description | 
|---|---|---|
transition   |  function   |  A Svelte transition function to use when transitioning the content in and out. Default:
								 —— undefined    |  
transitionConfig   |  TransitionConfig |  The configuration to apply to the transition. Default:
								 —— undefined    |  
inTransition   |  function   |  A Svelte transition function to use when transitioning the content in and out. Default:
								 —— undefined    |  
inTransitionConfig   |  TransitionConfig |  The configuration to apply to the transition. Default:
								 —— undefined    |  
outTransition   |  function   |  A Svelte transition function to use when transitioning the content in and out. Default:
								 —— undefined    |  
outTransitionConfig   |  TransitionConfig |  The configuration to apply to the transition. Default:
								 —— undefined    |  
asChild   |  boolean |  Whether to use render delegation with this component or not. Default:
								 false   |  
el   |  HTMLDivElement |  The underlying DOM element being rendered. You can bind to this to programatically interact with the element. Default:
								 —— undefined    |  
| Slot Property | Type | Description | 
|---|---|---|
builder   |  object   |  The builder attributes and actions to apply to the element if using the   |  
| Data Attribute | Value | Description | 
|---|---|---|
data-state  |  enum   |  The state of the accordion item.  |  
data-disabled  |  —— |  Present when the accordion item is disabled.  |  
data-value  |  —— |  The value of the accordion item.  |  
data-accordion-content  |  —— |  Present on the content element.  |