

<Preview name="SourcesDefaultExample" />

## Overview [#overview]

`Sources` groups response references behind a compact trigger. It is useful when citations should be available without taking over the message body.

## Usage [#usage]

```tsx
import {
  Source,
  Sources,
  SourcesContent,
  SourcesTrigger,
} from "@tilt-legal/cubitt-components/chat-elements";
```

## Examples [#examples]

### Default [#default]

<Tabs items="['Preview', 'Code']">
  <Tab value="Preview">
    <Preview name="SourcesDefaultExample" />
  </Tab>

  <Tab value="Code">
    ```tsx
    <Sources defaultOpen>
      <SourcesTrigger count={sources.length} />
      <SourcesContent>
        {sources.map((source) => (
          <Source href={source.href} key={source.href} title={source.title} />
        ))}
      </SourcesContent>
    </Sources>
    ```
  </Tab>
</Tabs>

### Closed [#closed]

<Tabs items="['Preview', 'Code']">
  <Tab value="Preview">
    <Preview name="SourcesClosedExample" />
  </Tab>

  <Tab value="Code">
    ```tsx
    <Sources>
      <SourcesTrigger count={3} />
      <SourcesContent>
        <Source href="https://example.com/lease-review" title="Lease review memo" />
      </SourcesContent>
    </Sources>
    ```
  </Tab>
</Tabs>

## API Reference [#api-reference]

### Sources [#sources]

Root collapsible wrapper for response sources. Extends Collapsible props.

| Prop           | Type                      | Default | Description                                       |
| -------------- | ------------------------- | ------- | ------------------------------------------------- |
| `open`         | `boolean`                 | -       | Controlled open state inherited from Collapsible. |
| `defaultOpen`  | `boolean`                 | -       | Initial open state when uncontrolled.             |
| `onOpenChange` | `(open: boolean) => void` | -       | Callback fired when the source list opens/closes. |
| `className`    | `string`                  | -       | Additional CSS classes for the root wrapper.      |

### SourcesTrigger [#sourcestrigger]

Trigger for opening and closing the source list. Extends CollapsibleTrigger props.

| Prop        | Type              | Default | Description                                                                     |
| ----------- | ----------------- | ------- | ------------------------------------------------------------------------------- |
| `count`     | `number`          | -       | Number used by the default label, rendered as `Used {count} sources`. Required. |
| `children`  | `React.ReactNode` | -       | Custom trigger content. Replaces the default label and chevron.                 |
| `className` | `string`          | -       | Additional CSS classes for the trigger.                                         |

### SourcesContent [#sourcescontent]

Collapsible panel that contains `Source` links. Extends CollapsiblePanel props.

| Prop        | Type              | Default | Description                            |
| ----------- | ----------------- | ------- | -------------------------------------- |
| `children`  | `React.ReactNode` | -       | Source links or custom source content. |
| `className` | `string`          | -       | Additional CSS classes for the panel.  |

### Source [#source]

External source link. Extends all HTML `a` props.

| Prop       | Type              | Default        | Description                                                                          |
| ---------- | ----------------- | -------------- | ------------------------------------------------------------------------------------ |
| `href`     | `string`          | -              | Source URL.                                                                          |
| `title`    | `string`          | -              | Label used by the default source content. Also maps to the anchor `title` attribute. |
| `children` | `React.ReactNode` | -              | Custom source content. Replaces the default icon/title row.                          |
| `target`   | `string`          | `"_blank"`     | Anchor target. Can be overridden through standard anchor props.                      |
| `rel`      | `string`          | `"noreferrer"` | Anchor relationship. Can be overridden through standard anchor props.                |
