<commit_before># Collapse

> The Bootstrap `<b-collapse>` component and `v-b-toggle` directive allows you to
  toggle content visibility on your pages.

**Example 1:** Basic collapse
```html
<div>
  <p>
  <b-btn v-b-toggle.collapse1 variant="primary">Toggle Collapse</b-btn>
  </p>

  <b-collapse id="collapse1">
  <b-card>
      Collapse contents Here
      <b-btn v-b-toggle.collapse2 size="sm">Toggle Inner Collapse</b-btn>
      <b-collapse id=collapse2 class="mt-2">
      <b-card>Hello!</b-card>
      </b-collapse>
  </b-card>
  </b-collapse>
</div>
  
<!-- collapse-1.vue -->
```

**Example 2:** Accordion 
```html
<div>
  <b-btn block v-b-toggle.accordion1 variant="primary">Accordion 1</b-btn>
  <b-collapse id="accordion1" visible accordion="my-accordion">
    <b-card>
        Accordion 1 contents Here
    </b-card>
  </b-collapse>
  <b-btn block class="mt-1" v-b-toggle.accordion2 variant="primary">Accordion 2</b-btn>
  <b-collapse id="accordion2" accordion="my-accordion">
    <b-card>
        Accordion 2 contents Here
    </b-card>
  </b-collapse>
  <b-btn block class="mt-1" v-b-toggle.accordion3 variant="primary">Accordion 3</b-btn>
  <b-collapse id="accordion3" accordion="my-accordion">
    <b-card>
        Accordion 3 contents Here
    </b-card>
  </b-collapse>
</div>
  
<!-- collapse-2.vue -->
```

Other elements can easily toggle `<b-collapse>` components using the `v-b-toggle` directive.

```html
<!-- Using modifiers -->
<b-btn v-b-toggle.collapse1>Toggle Collapse</b-btn>

<!-- Using value -->
<b-btn v-b-toggle="'collapse1'">Toggle Collapse</b-btn>

<!-- element to collapse -->
<b-collapse id="collapse1">
    <b-card>
      I am collapsable content!
    </b-card>
</b-collapse>
```

To make the `<b-collapse>` show initially, set the `visible` prop:

```html
<b-btn v-b-toggle.collapse1>Toggle Collapse</b-btn>

<b-collapse visible id="collapse1">
    <b-card>
      I should start open!
    </b-card>
</b-collapse>
```

The component's collapsed (visible) state can also be set with `v-model` which binds to the visible prop:

```html
<b-btn @click="showCollapse = !showCollapse">Toggle Collapse</b-btn>

<b-collapse v-model="showCollapse" id="collapse1">
    <b-card>
      I should start open!
    </b-card>
</b-collapse>

<script>
{
    // inside the vue
    data() {
        return {
            showCollapse: true
        }
    }
}
</script>
```

You can even collapse multiple `<b-collapse>` components via a single `v-b-toggle` by 
providing multiple target ids using modifers:

```html
<b-btn v-b-toggle.collapse1.collapse2>Toggle Collapse 1 and 2</b-btn>

<!-- elements to collapse -->
<b-collapse id="collapse1">
    <b-card>
      I am collapsable content 1!
    </b-card>
</b-collapse>
<b-collapse id="collapse2">
    <b-card>
      I am collapsable content 2!
    </b-card>
</b-collapse>
```


### Accordion Support

Turn a group of `<b-collapse>` components into an accordion by supplying
an accordion group identifier via the `accordion` prop:

```html
<b-btn block v-b-toggle.collapse1>Collapsible Group 1</b-btn>
<b-collapse id="collapse1" accordion="my-accordion" visible>
    <b-card>
      Accordion Panel 1<br>
      I start opened because <code>visible</code> is <code>true</code>
    </b-card>
</b-collapse>
<b-btn block class="mt-2" v-b-toggle.collapse2>Collapsible Group 2</b-btn>
<b-collapse id="collapse2" accordion="my-accordion">
    <b-card>
      Accordion Panel 2
    </b-card>
</b-collapse>
<b-btn block class="mt-2" v-b-toggle.collapse3>Collapsible Group 3</b-btn>
<b-collapse id="collapse3" accordion="my-accordion">
    <b-card>
      Accordion Panel 3
    </b-card>
</b-collapse>
```

**Notes:**
- If using the `v-model` feature of `<b-collaspe>` in accordion mode, do not
bind the `v-model` or `visible` of all the collapses in the accordion group to the same variable.
- Ensure, at most, only one `<b-collapse>` in the accordion group has the `visible` 
prop and/or `v-model` set to `true`.

### Accessibility
The `v-b-toggle` directive will automatically add the ARIA attributes `aria-controls` and `aria-expanded`
to the component that the directive appears on.  `aria-expanded` will reflect the state of 
the tartget `<b-collapse>` component, while `aria-controls` will be set to the ID(s) 
of the target `<b-collapse>` component(s).
<commit_msg>feat(docs): Improved collapse examples and documentation<commit_after># Collapse

> The Bootstrap-Vue `<b-collapse>` component and `v-b-toggle` directive allows you to
  toggle content visibility on your pages. Includes support for making accordions.

```html
<div>
  <b-btn v-b-toggle.collapse1 variant="primary">Toggle Collapse</b-btn>
  <b-collapse id="collapse1" class="mt-2">
    <b-card>
      <p class="card-text">Collapse contents Here</p>
      <b-btn v-b-toggle.collapse1_inner size="sm">Toggle Inner Collapse</b-btn>
      <b-collapse id=collapse1_inner class="mt-2">
        <b-card>Hello!</b-card>
      </b-collapse>
    </b-card>
  </b-collapse>
</div>
  
<!-- collapse-1.vue -->
```

## Usage

Other elements can easily toggle `<b-collapse>` components using the `v-b-toggle` directive.

```html
<div>
  <!-- Using modifiers -->
  <b-btn v-b-toggle.collapse2 class="m-1">Toggle Collapse</b-btn>

  <!-- Using value -->
  <b-btn v-b-toggle="'collapse2'" class="m-1">Toggle Collapse</b-btn>

  <!-- element to collapse -->
  <b-collapse id="collapse2">
    <b-card>
      I am collapsable content!
    </b-card>
  </b-collapse>
</div>

<!-- collapse-2.vue -->
```

### Initial visibility (start expanded)
To make the `<b-collapse>` show initially, set the `visible` prop:

```html
<div>
  <b-btn v-b-toggle.collapse3 class="m-1">Toggle Collapse</b-btn>
  <b-collapse visible id="collapse3">
    <b-card>
      I should start open!
    </b-card>
  </b-collapse>
</div>
  
<!-- collapse-3.vue -->
```

### `v-model` support
The component's collapsed (visible) state can also be set with `v-model` which
binds internally to the `visible` prop.

Note, when using v-model to control `<b-collapse>`, the `aria-*` attributes and
class `collapsed` are not automaticaly placed on the trigger button (as is the case
when using the `v-b-toggle` directive). In this example we must control them ourselves.

```html
<template>
  <div>
    <b-btn @click="showCollapse = !showCollapse"
           :class="showCollapse ? 'collapsed' : null"
           aria-controls="collapse4"
           :aria-expanded="showCollapse ? 'true' : 'false'">
      Toggle Collapse
    </b-btn>
    <b-collapse class="mt-2" v-model="showCollapse" id="collapse4">
      <b-card>
        I should start open!
      </b-card>
    </b-collapse>
  </div>
</template>

<script>
export default {
  data: {
    showCollapse: true
  }
};
</script>

<-- collapse-4.vue -->
```

### Trigger multiple collapse elements
You can even collapse multiple `<b-collapse>` components via a single `v-b-toggle` by 
providing multiple target IDs using modifers:

```html
<div>
  <!-- Single button triggers two b-collapse components -->
  <b-btn v-b-toggle.collapseA.collapseB>Toggle Both Collapse A and B</b-btn>

  <!-- elements to collapse -->
  <b-collapse id="collapsA" class="mt-2">
    <b-card>
      I am collapsable content A!
    </b-card>
  </b-collapse>
  <b-collapse id="collapseB" class="mt-2">
    <b-card>
      I am collapsable content B!
    </b-card>
  </b-collapse>
</div>

<!-- collapse-mult-1.vue -->
```


## Accordion Support

Turn a group of `<b-collapse>` components into an accordion by supplying
an accordion group identifier via the `accordion` prop:

```html
<div>
  <b-card no-body>
    <b-card-header class="p-1">
      <b-btn block v-b-toggle.accordion1 variant="info">Accordion 1</b-btn>
    </b-card-header>
    <b-collapse id="accordion1" visible accordion="my-accordion">
      <b-card-body>
        <p class="card-text">
          I start opened because <code>visible</code> is <code>true</code>
        </p>
        <p class="card-text">
          Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry
          richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor
          brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon
          tempor, sunt aliqua put a bird on it squid single-origin coffee nulla
          assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore
          wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher
          vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic
          synth nesciunt you probably haven't heard of them accusamus labore VHS. 
        </p>
      </b-card-body>
    </b-collapse>
    <b-card-header class="p-1">
      <b-btn block v-b-toggle.accordion2 variant="info">Accordion 2</b-btn>
    </b-card-header>
    <b-collapse id="accordion2" accordion="my-accordion">
      <b-card-body>
        <p class="card-text">
          Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry
          richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor
          brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon
          tempor, sunt aliqua put a bird on it squid single-origin coffee nulla
          assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore
          wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher
          vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic
          synth nesciunt you probably haven't heard of them accusamus labore VHS. 
        </p>
      </b-card-body>
    </b-collapse>
    <b-card-header class="p-1">
      <b-btn block v-b-toggle.accordion3 variant="info">Accordion 3</b-btn>
    </b-card-header>
    <b-collapse id="accordion3" accordion="my-accordion">
      <b-card-body>
        <p class="card-text">
          Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry
          richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor
          brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon
          tempor, sunt aliqua put a bird on it squid single-origin coffee nulla
          assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore
          wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher
          vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic
          synth nesciunt you probably haven't heard of them accusamus labore VHS. 
        </p>
      </b-card-body>
    </b-collapse>
  </b-card>
</div>

<!-- accordion-1.vue -->
```

**Notes:**
- If using the `v-model` feature of `<b-collaspe>` in accordion mode, do not bind the
`v-model` or `visible` prop of all the collapses in the accordion group to the same variable!
- Ensure, at most, only one `<b-collapse>` in the accordion group has the `visible` 
prop and/or `v-model` set to `true`.


## Hiding and showing content in the toggle button based on collapse state
When using the `v-b-toggle` directive, the class `collapsed` will automatically be placed
on the trigger element when the collapse is closed, and removed when open.  You can
use this class to display or hide content within the togger via custom CSS:

**Example HTML markup:**
```html
<b-btn v-b-toggle.myCollapse>
  <span class="when-opened">Close</span>
  <span class="when-closed">Open</span>
  My Collapse
</b-btn>
<b-collapse id="myCollapse">
  <!-- content here -->
</b-collapse>
```
**Example Custom CSS:**
```css
.collapsed > .when-opened,
:not(.collapsed) > .when-closed {
  display: none;
}
```


## Accessibility

The `v-b-toggle` directive will automatically add the ARIA attributes `aria-controls` and `aria-expanded`
to the component that the directive appears on (as well as add the class `collapsed` when not expanded).
`aria-expanded` will reflect the state of the tartget `<b-collapse>` component, while `aria-controls`
will be set to the ID(s) of the target `<b-collapse>` component(s).

If using `v-model` to set the visible state instead of the directive `v-b-toggle`, you will be
required to, on the toggle element, add and control the attributes/class yourself.

While the `v-b-toggle` directive can be placed on almost any HTML element or Vue component, it is
reccomended to use a button or link (or similar component) to act as your toggler. Otherwise your 
trigger elements may be inaccessible to keyboard or screen reader users. If you do place them on
something other than a button or link (or similar component), you should add the attributes
`tabindex="0"` and `role="button"` to allow users of assistive technology to reach your
trigger element.
{'fraction_non_alphanumeric': 0.1346909891492373, 'fraction_numerical': 0.007469727944645384, 'mean_word_length': 3.2032385988103105, 'pattern_counts': {'":': 0, '<': 237, '<?xml version=': 0, '>': 241, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 3, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2957137', 'n_tokens_mistral': 4348, 'n_tokens_neox': 4175, 'n_words': 1350}