Collapse

Toggle visibility of content sections. Great for accordions and expandable sections.

Basic Collapse

This content can be collapsed and expanded by clicking the button above.
<button class="ui-btn ui-btn--primary" data-ui-toggle="collapse" data-ui-target="#content">
  Toggle Content
</button>
<div id="content" class="ui-collapse">
  <div class="ui-card ui-mt-3">
    <div class="ui-card__body">
      Hidden content here
    </div>
  </div>
</div>
<button class="ui-btn ui-btn--primary"
        data-ui-toggle="collapse"
        data-ui-target="#content"
        ng-click="onToggle()">
  {{ buttonLabel }}
</button>
<div id="content" class="ui-collapse">
  <div class="ui-card ui-mt-3">
    <div class="ui-card__body">
      {{ content }}
    </div>
  </div>
</div>
<button class="ui-btn ui-btn--primary"
        data-ui-toggle="collapse"
        data-ui-target="#content"
        (click)="onToggle()">
  {{ buttonLabel }}
</button>
<div id="content" class="ui-collapse">
  <div class="ui-card ui-mt-3">
    <div class="ui-card__body">
      {{ content }}
    </div>
  </div>
</div>
<button className="ui-btn ui-btn--primary"
        data-ui-toggle="collapse"
        data-ui-target="#content"
        onClick={handleToggle}>
  {buttonLabel}
</button>
<div id="content" className="ui-collapse">
  <div className="ui-card ui-mt-3">
    <div className="ui-card__body">
      {content}
    </div>
  </div>
</div>

Initially Open

Add the ui-collapse--show class to make the content visible by default.

This content is visible by default (has ui-collapse--show class).
<button data-ui-toggle="collapse" data-ui-target="#content">Toggle</button>
<div id="content" class="ui-collapse ui-collapse--show">
  <!-- Content visible by default -->
</div>

Accordion Example

Use multiple collapse elements to create an accordion.

Content for section 1
Content for section 2
Content for section 3
<div class="ui-card">
  <div class="ui-card__header">
    <button class="ui-btn ui-btn--ghost ui-btn--block" data-ui-toggle="collapse" data-ui-target="#acc1">
      Section 1
    </button>
  </div>
  <div id="acc1" class="ui-collapse ui-collapse--show">
    <div class="ui-card__body">Content for section 1</div>
  </div>
</div>

<div class="ui-card ui-mt-2">
  <div class="ui-card__header">
    <button class="ui-btn ui-btn--ghost ui-btn--block" data-ui-toggle="collapse" data-ui-target="#acc2">
      Section 2
    </button>
  </div>
  <div id="acc2" class="ui-collapse">
    <div class="ui-card__body">Content for section 2</div>
  </div>
</div>

Events

Collapse emits custom events that you can listen to.

Event Description
ui:collapse:show Fired before showing (cancelable)
ui:collapse:shown Fired after shown
ui:collapse:hide Fired before hiding (cancelable)
ui:collapse:hidden Fired after hidden
document.addEventListener('ui:collapse:shown', (e) => {
  console.log('Collapse shown:', e.target.id);
});

document.addEventListener('ui:collapse:hidden', (e) => {
  console.log('Collapse hidden:', e.target.id);
});
// In your controller
angular.module('app').controller('CollapseCtrl', function($scope, $document) {
  $document[0].addEventListener('ui:collapse:shown', function(e) {
    $scope.$apply(function() {
      console.log('Collapse shown:', e.target.id);
    });
  });

  $document[0].addEventListener('ui:collapse:hidden', function(e) {
    $scope.$apply(function() {
      console.log('Collapse hidden:', e.target.id);
    });
  });
});
import { Component, OnInit, OnDestroy } from '@angular/core';

@Component({ ... })
export class CollapseComponent implements OnInit, OnDestroy {
  private shownHandler = (e: Event) => console.log('Collapse shown:', (e.target as Element).id);
  private hiddenHandler = (e: Event) => console.log('Collapse hidden:', (e.target as Element).id);

  ngOnInit() {
    document.addEventListener('ui:collapse:shown', this.shownHandler);
    document.addEventListener('ui:collapse:hidden', this.hiddenHandler);
  }

  ngOnDestroy() {
    document.removeEventListener('ui:collapse:shown', this.shownHandler);
    document.removeEventListener('ui:collapse:hidden', this.hiddenHandler);
  }
}
import { useEffect } from 'react';

function CollapseExample() {
  useEffect(() => {
    const handleShown = (e) => console.log('Collapse shown:', e.target.id);
    const handleHidden = (e) => console.log('Collapse hidden:', e.target.id);

    document.addEventListener('ui:collapse:shown', handleShown);
    document.addEventListener('ui:collapse:hidden', handleHidden);

    return () => {
      document.removeEventListener('ui:collapse:shown', handleShown);
      document.removeEventListener('ui:collapse:hidden', handleHidden);
    };
  }, []);

  return ( /* ... */ );
}

Data Attributes

Attribute Description
data-ui-toggle="collapse" Marks element as collapse trigger
data-ui-target="#id" Target collapse element selector

CSS Classes Reference

Class Description
.ui-collapse Base collapse class (hidden by default)
.ui-collapse--show Makes collapse visible
.ui-collapse--collapsing Applied during animation (added by JS)