mirror of
https://github.com/bitwarden/browser
synced 2026-02-13 15:03:26 +00:00
51 lines
1.6 KiB
TypeScript
51 lines
1.6 KiB
TypeScript
import { ChangeDetectionStrategy, Component, computed, model } from "@angular/core";
|
|
|
|
let nextId = 0;
|
|
|
|
/**
|
|
* The `bit-disclosure` component is used in tandem with the `bitDisclosureTriggerFor` directive to create an accessible content area whose visibility is controlled by a trigger button.
|
|
*
|
|
* To compose a disclosure and trigger:
|
|
*
|
|
* 1. Create a trigger component (see "Supported Trigger Components" section below)
|
|
* 2. Create a `bit-disclosure`
|
|
* 3. Set a template reference on the `bit-disclosure`
|
|
* 4. Use the `bitDisclosureTriggerFor` directive on the trigger component, and pass it the `bit-disclosure` template reference
|
|
* 5. Set the `open` property on the `bit-disclosure` to init the disclosure as either currently expanded or currently collapsed. The disclosure will default to `false`, meaning it defaults to being hidden.
|
|
*
|
|
* @example
|
|
*
|
|
* ```html
|
|
* <button
|
|
* type="button"
|
|
* bitIconButton="bwi-sliders"
|
|
* buttonType="muted"
|
|
* [bitDisclosureTriggerFor]="disclosureRef"
|
|
* [label]="'Settings' | i18n"
|
|
* ></button>
|
|
* <bit-disclosure #disclosureRef [(open)]="isOpen">click button to hide this content</bit-disclosure>
|
|
* ```
|
|
*/
|
|
@Component({
|
|
selector: "bit-disclosure",
|
|
template: `<ng-content></ng-content>`,
|
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
host: {
|
|
"[class]": "classList()",
|
|
"[id]": "id",
|
|
},
|
|
})
|
|
export class DisclosureComponent {
|
|
/**
|
|
* Controls the visibility of the disclosure content.
|
|
*/
|
|
readonly open = model<boolean>(false);
|
|
|
|
/**
|
|
* Autogenerated id.
|
|
*/
|
|
readonly id = `bit-disclosure-${nextId++}`;
|
|
|
|
protected readonly classList = computed(() => (this.open() ? "" : "tw-hidden"));
|
|
}
|