@clr/angular
Version:
Angular components for Clarity
61 lines • 8.11 kB
JavaScript
/*
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
* This software is released under MIT license.
* The full license information can be found in LICENSE in the root directory of this project.
*/
import { AccordionStatus } from '../enums/accordion-status.enum';
import { AccordionStrategy } from '../enums/accordion-strategy.enum';
let accordionCount = 0;
export class AccordionPanelModel {
constructor(id, accordionId) {
this.id = id;
this.accordionId = accordionId;
this.status = AccordionStatus.Inactive;
this.index = null;
this.disabled = false;
this.open = false;
this.templateId = `${this.id}-${this.accordionId}`;
}
}
export class AccordionModel {
constructor() {
this.strategy = AccordionStrategy.Default;
this.accordionCount = accordionCount++;
this._panels = {};
}
get panels() {
return Object.keys(this._panels).map(id => this._panels[id]);
}
setStrategy(strategy) {
this.strategy = strategy;
}
updatePanelOrder(ids) {
ids.forEach((id, index) => (this._panels[id].index = index));
this.removeOldPanels(ids);
}
addPanel(id, open = false) {
this._panels[id] = new AccordionPanelModel(id, this.accordionCount);
this._panels[id].open = open;
}
togglePanel(panelId, open) {
const panelIsOpen = this._panels[panelId].open;
const newOpenState = open !== undefined ? open : !panelIsOpen;
if (newOpenState && this.strategy === AccordionStrategy.Default) {
this.closeAllPanels();
}
this._panels[panelId].open = newOpenState;
}
disablePanel(panelId, disabled) {
this._panels[panelId].disabled = disabled;
}
closeAllPanels() {
this.panels.forEach(panel => (this._panels[panel.id].open = false));
}
removeOldPanels(ids) {
this.panels
.filter(panel => ids.find(id => id === panel.id) === undefined)
.forEach(panel => delete this._panels[panel.id]);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvYWNjb3JkaW9uL21vZGVscy9hY2NvcmRpb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFckUsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBRXZCLE1BQU0sT0FBTyxtQkFBbUI7SUFNOUIsWUFBbUIsRUFBVSxFQUFTLFdBQTRCO1FBQS9DLE9BQUUsR0FBRixFQUFFLENBQVE7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFMbEUsV0FBTSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDbEMsVUFBSyxHQUFXLElBQUksQ0FBQztRQUNyQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFDYixlQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN1QixDQUFDO0NBQ3ZFO0FBRUQsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFDWSxhQUFRLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDO1FBQ3JDLG1CQUFjLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDbEMsWUFBTyxHQUEwQyxFQUFFLENBQUM7SUEyQ2hFLENBQUM7SUF6Q0MsSUFBSSxNQUFNO1FBQ1IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUEyQjtRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBYTtRQUM1QixHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxFQUFVLEVBQUUsSUFBSSxHQUFHLEtBQUs7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBZSxFQUFFLElBQWM7UUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDL0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUM5RCxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLGlCQUFpQixDQUFDLE9BQU8sRUFBRTtZQUMvRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFlLEVBQUUsUUFBaUI7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU8sZUFBZSxDQUFDLEdBQWE7UUFDbkMsSUFBSSxDQUFDLE1BQU07YUFDUixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxTQUFTLENBQUM7YUFDOUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSBCcm9hZGNvbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoZSB0ZXJtIFwiQnJvYWRjb21cIiByZWZlcnMgdG8gQnJvYWRjb20gSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgQWNjb3JkaW9uU3RhdHVzIH0gZnJvbSAnLi4vZW51bXMvYWNjb3JkaW9uLXN0YXR1cy5lbnVtJztcbmltcG9ydCB7IEFjY29yZGlvblN0cmF0ZWd5IH0gZnJvbSAnLi4vZW51bXMvYWNjb3JkaW9uLXN0cmF0ZWd5LmVudW0nO1xuXG5sZXQgYWNjb3JkaW9uQ291bnQgPSAwO1xuXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uUGFuZWxNb2RlbCB7XG4gIHN0YXR1cyA9IEFjY29yZGlvblN0YXR1cy5JbmFjdGl2ZTtcbiAgaW5kZXg6IG51bWJlciA9IG51bGw7XG4gIGRpc2FibGVkID0gZmFsc2U7XG4gIG9wZW4gPSBmYWxzZTtcbiAgdGVtcGxhdGVJZCA9IGAke3RoaXMuaWR9LSR7dGhpcy5hY2NvcmRpb25JZH1gO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgaWQ6IHN0cmluZywgcHVibGljIGFjY29yZGlvbklkOiBudW1iZXIgfCBzdHJpbmcpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25Nb2RlbCB7XG4gIHByb3RlY3RlZCBzdHJhdGVneSA9IEFjY29yZGlvblN0cmF0ZWd5LkRlZmF1bHQ7XG4gIHByb3RlY3RlZCBhY2NvcmRpb25Db3VudCA9IGFjY29yZGlvbkNvdW50Kys7XG4gIHByb3RlY3RlZCBfcGFuZWxzOiB7IFtpZDogc3RyaW5nXTogQWNjb3JkaW9uUGFuZWxNb2RlbCB9ID0ge307XG5cbiAgZ2V0IHBhbmVscygpOiBBY2NvcmRpb25QYW5lbE1vZGVsW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9wYW5lbHMpLm1hcChpZCA9PiB0aGlzLl9wYW5lbHNbaWRdKTtcbiAgfVxuXG4gIHNldFN0cmF0ZWd5KHN0cmF0ZWd5OiBBY2NvcmRpb25TdHJhdGVneSkge1xuICAgIHRoaXMuc3RyYXRlZ3kgPSBzdHJhdGVneTtcbiAgfVxuXG4gIHVwZGF0ZVBhbmVsT3JkZXIoaWRzOiBzdHJpbmdbXSkge1xuICAgIGlkcy5mb3JFYWNoKChpZCwgaW5kZXgpID0+ICh0aGlzLl9wYW5lbHNbaWRdLmluZGV4ID0gaW5kZXgpKTtcbiAgICB0aGlzLnJlbW92ZU9sZFBhbmVscyhpZHMpO1xuICB9XG5cbiAgYWRkUGFuZWwoaWQ6IHN0cmluZywgb3BlbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5fcGFuZWxzW2lkXSA9IG5ldyBBY2NvcmRpb25QYW5lbE1vZGVsKGlkLCB0aGlzLmFjY29yZGlvbkNvdW50KTtcbiAgICB0aGlzLl9wYW5lbHNbaWRdLm9wZW4gPSBvcGVuO1xuICB9XG5cbiAgdG9nZ2xlUGFuZWwocGFuZWxJZDogc3RyaW5nLCBvcGVuPzogYm9vbGVhbikge1xuICAgIGNvbnN0IHBhbmVsSXNPcGVuID0gdGhpcy5fcGFuZWxzW3BhbmVsSWRdLm9wZW47XG4gICAgY29uc3QgbmV3T3BlblN0YXRlID0gb3BlbiAhPT0gdW5kZWZpbmVkID8gb3BlbiA6ICFwYW5lbElzT3BlbjtcbiAgICBpZiAobmV3T3BlblN0YXRlICYmIHRoaXMuc3RyYXRlZ3kgPT09IEFjY29yZGlvblN0cmF0ZWd5LkRlZmF1bHQpIHtcbiAgICAgIHRoaXMuY2xvc2VBbGxQYW5lbHMoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wYW5lbHNbcGFuZWxJZF0ub3BlbiA9IG5ld09wZW5TdGF0ZTtcbiAgfVxuXG4gIGRpc2FibGVQYW5lbChwYW5lbElkOiBzdHJpbmcsIGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcGFuZWxzW3BhbmVsSWRdLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlQWxsUGFuZWxzKCkge1xuICAgIHRoaXMucGFuZWxzLmZvckVhY2gocGFuZWwgPT4gKHRoaXMuX3BhbmVsc1twYW5lbC5pZF0ub3BlbiA9IGZhbHNlKSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU9sZFBhbmVscyhpZHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wYW5lbHNcbiAgICAgIC5maWx0ZXIocGFuZWwgPT4gaWRzLmZpbmQoaWQgPT4gaWQgPT09IHBhbmVsLmlkKSA9PT0gdW5kZWZpbmVkKVxuICAgICAgLmZvckVhY2gocGFuZWwgPT4gZGVsZXRlIHRoaXMuX3BhbmVsc1twYW5lbC5pZF0pO1xuICB9XG59XG4iXX0=