export class Label { constructor() { this._usedUpperLabels = []; this._usedLowerLabels = []; } draw(lower = false) { if (lower) { return this.pushLower(); } else { return this.pushUpper(); } } pushLower(label) { if (label == undefined) { label = this._generateLabel(this._usedLowerLabels.length + 1); while (this._usedLowerLabels.includes(this.label)) { label = this._generateLabel(this._usedLowerLabels.length + 1); } } this._usedLowerLabels.push(label); return label.toLowerCase(); } pushUpper(label) { if (label == undefined) { label = this._generateLabel(this._usedUpperLabels.length + 1); while (this._usedUpperLabels.includes(this.label)) { label = this._generateLabel(this._usedUpperLabels.length + 1); } } this._usedUpperLabels.push(label); return label.toUpperCase(); } _generateLabel(n) { let label = ""; let labelNumber = n; while (labelNumber > 0) { const letterNumber = (labelNumber - 1) % 26; const currentLetter = String.fromCharCode(letterNumber + 65); label = currentLetter + label; labelNumber = (labelNumber - (letterNumber + 1)) / 26; } return label; } } export const label = new Label();