# Accordion

A collapsible content component that displays information in a compact, expandable format.

### **Import**
```tsx
import { Accordion } from '@app-studio/web';
```

### **Default**
```tsx
import React from 'react';
import { Accordion } from '../Accordion';
import { Text, Vertical } from 'app-studio';

export const DefaultAccordion = () => {
  return (
    <Vertical gap={20} width="100%" maxWidth={600}>
      <Text marginBottom={10}>Default Accordion (Single)</Text>
      <Accordion type="single" defaultValue="item-1">
        <Accordion.Item value="item-1">
          <Accordion.Trigger>
            <Text fontWeight="bold">What is React?</Text>
          </Accordion.Trigger>
          <Accordion.Content>
            <Text>
              React is a JavaScript library for building user interfaces. It is
              maintained by Facebook and a community of individual developers
              and companies. React can be used as a base in the development of
              single-page or mobile applications.
            </Text>
          </Accordion.Content>
        </Accordion.Item>

        <Accordion.Item value="item-2">
          <Accordion.Trigger>
            <Text fontWeight="bold">What are React Hooks?</Text>
          </Accordion.Trigger>
          <Accordion.Content>
            <Text>
              Hooks are functions that let you hook into React state and
              lifecycle features from function components. Hooks dont work
              inside classes — they let you use React without classes.
            </Text>
          </Accordion.Content>
        </Accordion.Item>

        <Accordion.Item value="item-3">
          <Accordion.Trigger>
            <Text fontWeight="bold">What is JSX?</Text>
          </Accordion.Trigger>
          <Accordion.Content>
            <Text>
              JSX is a syntax extension for JavaScript. It was written to be
              used with React and looks a lot like HTML. Because JSX is
              JavaScript, you can use variables inside it.
            </Text>
          </Accordion.Content>
        </Accordion.Item>
      </Accordion>
    </Vertical>
  );
};
```

### **collapsible**
If true, allows all accordion items to be closed, even when `type` is set to 'single'.

- **Type:** `boolean`
- **Default:** `false`
- **Possible Values:** `true, false`

```tsx
import React from 'react';
import { Accordion } from '../Accordion';
import { Text, Vertical } from 'app-studio';

export const CollapsibleAccordion = () => {
  return (
    <Vertical gap={20} width="100%" maxWidth={600}>
      <Text marginBottom={10}>Collapsible Accordion (Single)</Text>
      <Accordion type="single" defaultValue="item-1" collapsible>
        <Accordion.Item value="item-1">
          <Accordion.Trigger>
            <Text fontWeight="bold">Question 1</Text>
          </Accordion.Trigger>
          <Accordion.Content>
            <Text>
              This is the answer to question 1. Since `collapsible` is true, you
              can click the trigger again to close this item, even though its
              the only one.
            </Text>
          </Accordion.Content>
        </Accordion.Item>

        <Accordion.Item value="item-2">
          <Accordion.Trigger>
            <Text fontWeight="bold">Question 2</Text>
          </Accordion.Trigger>
          <Accordion.Content>
            <Text>
              This is the answer to question 2. Only one item can be open, but
              it can be closed entirely.
            </Text>
          </Accordion.Content>
        </Accordion.Item>
      </Accordion>
    </Vertical>
  );
};
```

### **Disabled**

```tsx
import React from 'react';
import { Accordion } from '../Accordion';
import { Text, Vertical } from 'app-studio';

export const DisabledAccordion = () => {
  return (
    <Vertical gap={20} width="100%" maxWidth={600}>
      <Text marginBottom={10}>Disabled Item</Text>
      <Accordion type="single" defaultValue="disabled-1" collapsible>
        <Accordion.Item value="disabled-1">
          <Accordion.Trigger>
            <Text fontWeight="bold">Regular Item</Text>
          </Accordion.Trigger>
          <Accordion.Content>
            <Text>
              This is a regular accordion item that can be expanded and
              collapsed.
            </Text>
          </Accordion.Content>
        </Accordion.Item>

        <Accordion.Item value="disabled-2" isDisabled>
          <Accordion.Trigger>
            <Text fontWeight="bold">Disabled Item</Text>
          </Accordion.Trigger>
          <Accordion.Content>
            <Text>
              This content wont be accessible because the item is disabled.
            </Text>
          </Accordion.Content>
        </Accordion.Item>

        <Accordion.Item value="disabled-3">
          <Accordion.Trigger>
            <Text fontWeight="bold">Another Regular Item</Text>
          </Accordion.Trigger>
          <Accordion.Content>
            <Text>
              This is another regular accordion item that can be expanded and
              collapsed.
            </Text>
          </Accordion.Content>
        </Accordion.Item>
      </Accordion>
    </Vertical>
  );
};
```

### **Index**

```tsx
export * from './default';
export * from './variants';
export * from './multiple';
export * from './disabled';
export * from './collapsible';
```

### **Multiple**

```tsx
import React from 'react';
import { Accordion } from '../Accordion';
import { Text, Vertical } from 'app-studio';

export const MultipleAccordion = () => {
  return (
    <Vertical gap={20} width="100%" maxWidth={600}>
      <Text marginBottom={10}>Multiple Expanded Items</Text>
      <Accordion type="multiple" defaultValue={['multi-1']}>
        <Accordion.Item value="multi-1">
          <Accordion.Trigger>
            <Text fontWeight="bold">First Item (Initially Expanded)</Text>
          </Accordion.Trigger>
          <Accordion.Content>
            <Text>
              This item is initially expanded. You can expand multiple items at
              once in this accordion.
            </Text>
          </Accordion.Content>
        </Accordion.Item>

        <Accordion.Item value="multi-2">
          <Accordion.Trigger>
            <Text fontWeight="bold">Second Item</Text>
          </Accordion.Trigger>
          <Accordion.Content>
            <Text>
              This is the second item. Try expanding this while the first item
              is still open.
            </Text>
          </Accordion.Content>
        </Accordion.Item>

        <Accordion.Item value="multi-3">
          <Accordion.Trigger>
            <Text fontWeight="bold">Third Item</Text>
          </Accordion.Trigger>
          <Accordion.Content>
            <Text>
              This is the third item. You can have all three items expanded at
              once.
            </Text>
          </Accordion.Content>
        </Accordion.Item>
      </Accordion>
    </Vertical>
  );
};
```

### **Variants**

```tsx
import React from 'react';
import { Accordion } from '../Accordion';
import { Text, Vertical } from 'app-studio';

export const AccordionVariants = () => {
  return (
    <Vertical gap={30} width="100%" maxWidth={600}>
      <Vertical gap={10}>
        <Text fontWeight="bold">Outline Variant</Text>
        <Accordion type="single" defaultValue="outline-1" variant="outline">
          <Accordion.Item value="outline-1">
            <Accordion.Trigger>
              <Text fontWeight="bold">First Item</Text>
            </Accordion.Trigger>
            <Accordion.Content>
              <Text>
                This is the content for the first item in the outline variant
                accordion.
              </Text>
            </Accordion.Content>
          </Accordion.Item>

          <Accordion.Item value="outline-2">
            <Accordion.Trigger>
              <Text fontWeight="bold">Second Item</Text>
            </Accordion.Trigger>
            <Accordion.Content>
              <Text>
                This is the content for the second item in the outline variant
                accordion.
              </Text>
            </Accordion.Content>
          </Accordion.Item>
        </Accordion>
      </Vertical>

      <Vertical gap={10}>
        <Text fontWeight="bold">Filled Variant</Text>
        <Accordion type="single" defaultValue="filled-1" variant="filled">
          <Accordion.Item value="filled-1">
            <Accordion.Trigger>
              <Text fontWeight="bold">First Item</Text>
            </Accordion.Trigger>
            <Accordion.Content>
              <Text>
                This is the content for the first item in the filled variant
                accordion.
              </Text>
            </Accordion.Content>
          </Accordion.Item>

          <Accordion.Item value="filled-2">
            <Accordion.Trigger>
              <Text fontWeight="bold">Second Item</Text>
            </Accordion.Trigger>
            <Accordion.Content>
              <Text>
                This is the content for the second item in the filled variant
                accordion.
              </Text>
            </Accordion.Content>
          </Accordion.Item>
        </Accordion>
      </Vertical>

      <Vertical gap={10}>
        <Text fontWeight="bold">square Shape</Text>
        <Accordion
          type="single"
          defaultValue="square-1"
          shape="square"
          variant="outline"
        >
          <Accordion.Item value="square-1">
            <Accordion.Trigger>
              <Text fontWeight="bold">First Item</Text>
            </Accordion.Trigger>
            <Accordion.Content>
              <Text>
                This is the content for the first item in the square shape
                accordion.
              </Text>
            </Accordion.Content>
          </Accordion.Item>

          <Accordion.Item value="square-2">
            <Accordion.Trigger>
              <Text fontWeight="bold">Second Item</Text>
            </Accordion.Trigger>
            <Accordion.Content>
              <Text>
                This is the content for the second item in the square shape
                accordion.
              </Text>
            </Accordion.Content>
          </Accordion.Item>
        </Accordion>
      </Vertical>
    </Vertical>
  );
};
```

