UNPKG

carbon-components-angular

Version:
194 lines 14.7 kB
import { Component, Input, HostBinding, Output, EventEmitter } from "@angular/core"; import { NG_VALUE_ACCESSOR } from "@angular/forms"; import { RadioChange } from "./radio-change.class"; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; /** * class: Radio (extends Checkbox) * * selector: `n-radio` * * source: `src/forms/radio.component.ts` * * ```html * <cds-radio [(ngModel)]="radioState">Radio</cds-radio> * ``` * * Also see: [`RadioGroup`](#cds-radio-group) */ export class Radio { constructor() { this.checked = false; this.name = ""; this.disabled = false; this.labelPlacement = "right"; /** * Sets the HTML required attribute */ this.required = false; /** * Set to `true` for a loading table. */ this.skeleton = false; /** * The id for the `Radio`. */ this.id = `radio-${Radio.radioCount++}`; /** * emits when the state of the radio changes */ this.change = new EventEmitter(); this.hostClass = true; /** * Reflects whether or not the input is disabled at `RadioGroup` level. */ this.disabledFromGroup = false; this._labelledby = ""; /** * Handler provided by the `RadioGroup` to bubble events up */ this.radioChangeHandler = (event) => { }; } set ariaLabelledby(value) { this._labelledby = value; } get ariaLabelledby() { if (this._labelledby) { return this._labelledby; } return `label-${this.id}`; } get labelLeft() { return this.labelPlacement === "left"; } /** * Synchronizes with the `RadioGroup` in the event of a changed `Radio`. * Emits the changes of both the `RadioGroup` and `Radio`. */ onChange(event) { event.stopPropagation(); } onClick(event) { this.checked = event.target.checked; const radioEvent = new RadioChange(this, this.value); this.change.emit(radioEvent); this.radioChangeHandler(radioEvent); } /** * Method called by `RadioGroup` with a callback function to bubble `RadioChange` events * @param fn callback that expects a `RadioChange` as an argument */ registerRadioChangeHandler(fn) { this.radioChangeHandler = fn; } setDisabledFromGroup(disabled) { this.disabledFromGroup = disabled; } } /** * Used to dynamically create unique ids for the `Radio`. */ Radio.radioCount = 0; Radio.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Radio, deps: [], target: i0.ɵɵFactoryTarget.Component }); Radio.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Radio, selector: "cds-radio, ibm-radio", inputs: { checked: "checked", name: "name", disabled: "disabled", labelPlacement: "labelPlacement", ariaLabelledby: "ariaLabelledby", ariaLabel: "ariaLabel", required: "required", value: "value", skeleton: "skeleton", id: "id" }, outputs: { change: "change" }, host: { properties: { "class.cds--radio-button-wrapper": "this.hostClass", "class.cds--radio-button-wrapper--label-left": "this.labelLeft" } }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: Radio, multi: true } ], ngImport: i0, template: ` <input *ngIf="!skeleton" class="cds--radio-button" type="radio" [checked]="checked" [disabled]="disabled || disabledFromGroup" [name]="name" [id]="id" [required]="required" [attr.value]="value" [attr.aria-labelledby]="ariaLabelledby" (change)="onChange($event)" (click)="onClick($event)"> <div *ngIf="skeleton" class="cds--radio-button cds--skeleton"></div> <label class="cds--radio-button__label" [attr.aria-label]="ariaLabel" [ngClass]="{ 'cds--skeleton': skeleton }" [for]="id" id="label-{{id}}"> <span class="cds--radio-button__appearance"></span> <ng-content></ng-content> </label> `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Radio, decorators: [{ type: Component, args: [{ selector: "cds-radio, ibm-radio", template: ` <input *ngIf="!skeleton" class="cds--radio-button" type="radio" [checked]="checked" [disabled]="disabled || disabledFromGroup" [name]="name" [id]="id" [required]="required" [attr.value]="value" [attr.aria-labelledby]="ariaLabelledby" (change)="onChange($event)" (click)="onClick($event)"> <div *ngIf="skeleton" class="cds--radio-button cds--skeleton"></div> <label class="cds--radio-button__label" [attr.aria-label]="ariaLabel" [ngClass]="{ 'cds--skeleton': skeleton }" [for]="id" id="label-{{id}}"> <span class="cds--radio-button__appearance"></span> <ng-content></ng-content> </label> `, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: Radio, multi: true } ] }] }], propDecorators: { checked: [{ type: Input }], name: [{ type: Input }], disabled: [{ type: Input }], labelPlacement: [{ type: Input }], ariaLabelledby: [{ type: Input }], ariaLabel: [{ type: Input }], required: [{ type: Input }], value: [{ type: Input }], skeleton: [{ type: Input }], id: [{ type: Input }], change: [{ type: Output }], hostClass: [{ type: HostBinding, args: ["class.cds--radio-button-wrapper"] }], labelLeft: [{ type: HostBinding, args: ["class.cds--radio-button-wrapper--label-left"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JhZGlvL3JhZGlvLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUVuRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFzQ0gsTUFBTSxPQUFPLEtBQUs7SUFyQ2xCO1FBMkNVLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVWLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsbUJBQWMsR0FBc0IsT0FBTyxDQUFDO1FBa0JyRDs7V0FFRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFLMUI7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFCOztXQUVHO1FBQ00sT0FBRSxHQUFHLFNBQVMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7UUFDNUM7O1dBRUc7UUFDTyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUVILGNBQVMsR0FBRyxJQUFJLENBQUM7UUFNakU7O1dBRUc7UUFDSCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFaEIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFM0I7O1dBRUc7UUFDSCx1QkFBa0IsR0FBRyxDQUFDLEtBQWtCLEVBQUUsRUFBRSxHQUFFLENBQUMsQ0FBQztLQTRCaEQ7SUFqRkEsSUFBYSxjQUFjLENBQUMsS0FBYTtRQUN4QyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2pCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDeEI7UUFDRCxPQUFPLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUE4QkQsSUFBZ0UsU0FBUztRQUN4RSxPQUFPLElBQUksQ0FBQyxjQUFjLEtBQUssTUFBTSxDQUFDO0lBQ3ZDLENBQUM7SUFjRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBWTtRQUNwQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFZO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUksS0FBSyxDQUFDLE1BQTJCLENBQUMsT0FBTyxDQUFDO1FBQzFELE1BQU0sVUFBVSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCwwQkFBMEIsQ0FBQyxFQUFnQztRQUMxRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxRQUFpQjtRQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO0lBQ25DLENBQUM7O0FBN0ZEOztHQUVHO0FBQ0ksZ0JBQVUsR0FBRyxDQUFDLENBQUM7a0dBSlYsS0FBSztzRkFBTCxLQUFLLG9jQVJOO1FBQ1Y7WUFDQyxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLEtBQUssRUFBRSxJQUFJO1NBQ1g7S0FDRCwwQkFqQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMEJUOzJGQVNXLEtBQUs7a0JBckNqQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEwQlQ7b0JBQ0QsU0FBUyxFQUFFO3dCQUNWOzRCQUNDLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsT0FBTzs0QkFDbEIsS0FBSyxFQUFFLElBQUk7eUJBQ1g7cUJBQ0Q7aUJBQ0Q7OEJBT1MsT0FBTztzQkFBZixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRU8sY0FBYztzQkFBMUIsS0FBSztnQkFjRyxTQUFTO3NCQUFqQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsRUFBRTtzQkFBVixLQUFLO2dCQUlJLE1BQU07c0JBQWYsTUFBTTtnQkFFeUMsU0FBUztzQkFBeEQsV0FBVzt1QkFBQyxpQ0FBaUM7Z0JBRWtCLFNBQVM7c0JBQXhFLFdBQVc7dUJBQUMsNkNBQTZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0SG9zdEJpbmRpbmcsXG5cdE91dHB1dCxcblx0RXZlbnRFbWl0dGVyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgUmFkaW9DaGFuZ2UgfSBmcm9tIFwiLi9yYWRpby1jaGFuZ2UuY2xhc3NcIjtcblxuLyoqXG4gKiBjbGFzczogUmFkaW8gKGV4dGVuZHMgQ2hlY2tib3gpXG4gKlxuICogc2VsZWN0b3I6IGBuLXJhZGlvYFxuICpcbiAqIHNvdXJjZTogYHNyYy9mb3Jtcy9yYWRpby5jb21wb25lbnQudHNgXG4gKlxuICogYGBgaHRtbFxuICpcdDxjZHMtcmFkaW8gWyhuZ01vZGVsKV09XCJyYWRpb1N0YXRlXCI+UmFkaW88L2Nkcy1yYWRpbz5cbiAqIGBgYFxuICpcbiAqIEFsc28gc2VlOiBbYFJhZGlvR3JvdXBgXSgjY2RzLXJhZGlvLWdyb3VwKVxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLXJhZGlvLCBpYm0tcmFkaW9cIixcblx0dGVtcGxhdGU6IGBcblx0XHQ8aW5wdXRcblx0XHRcdCpuZ0lmPVwiIXNrZWxldG9uXCJcblx0XHRcdGNsYXNzPVwiY2RzLS1yYWRpby1idXR0b25cIlxuXHRcdFx0dHlwZT1cInJhZGlvXCJcblx0XHRcdFtjaGVja2VkXT1cImNoZWNrZWRcIlxuXHRcdFx0W2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGRpc2FibGVkRnJvbUdyb3VwXCJcblx0XHRcdFtuYW1lXT1cIm5hbWVcIlxuXHRcdFx0W2lkXT1cImlkXCJcblx0XHRcdFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG5cdFx0XHRbYXR0ci52YWx1ZV09XCJ2YWx1ZVwiXG5cdFx0XHRbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkYnlcIlxuXHRcdFx0KGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcblx0XHRcdChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIj5cblx0XHQ8ZGl2ICpuZ0lmPVwic2tlbGV0b25cIiBjbGFzcz1cImNkcy0tcmFkaW8tYnV0dG9uIGNkcy0tc2tlbGV0b25cIj48L2Rpdj5cblx0XHQ8bGFiZWxcblx0XHRcdGNsYXNzPVwiY2RzLS1yYWRpby1idXR0b25fX2xhYmVsXCJcblx0XHRcdFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcblx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0J2Nkcy0tc2tlbGV0b24nOiBza2VsZXRvblxuXHRcdFx0fVwiXG5cdFx0XHRbZm9yXT1cImlkXCJcblx0XHRcdGlkPVwibGFiZWwte3tpZH19XCI+XG5cdFx0XHQ8c3BhbiBjbGFzcz1cImNkcy0tcmFkaW8tYnV0dG9uX19hcHBlYXJhbmNlXCI+PC9zcGFuPlxuXHRcdFx0PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXHRcdDwvbGFiZWw+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IFJhZGlvLFxuXHRcdFx0bXVsdGk6IHRydWVcblx0XHR9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgUmFkaW8ge1xuXHQvKipcblx0ICogVXNlZCB0byBkeW5hbWljYWxseSBjcmVhdGUgdW5pcXVlIGlkcyBmb3IgdGhlIGBSYWRpb2AuXG5cdCAqL1xuXHRzdGF0aWMgcmFkaW9Db3VudCA9IDA7XG5cblx0QElucHV0KCkgY2hlY2tlZCA9IGZhbHNlO1xuXG5cdEBJbnB1dCgpIG5hbWUgPSBcIlwiO1xuXG5cdEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cblx0QElucHV0KCkgbGFiZWxQbGFjZW1lbnQ6IFwicmlnaHRcIiB8IFwibGVmdFwiID0gIFwicmlnaHRcIjtcblxuXHRASW5wdXQoKSBzZXQgYXJpYUxhYmVsbGVkYnkodmFsdWU6IHN0cmluZykge1xuXHRcdHRoaXMuX2xhYmVsbGVkYnkgPSB2YWx1ZTtcblx0fVxuXG5cdGdldCBhcmlhTGFiZWxsZWRieSgpIHtcblx0XHRpZiAodGhpcy5fbGFiZWxsZWRieSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2xhYmVsbGVkYnk7XG5cdFx0fVxuXHRcdHJldHVybiBgbGFiZWwtJHt0aGlzLmlkfWA7XG5cdH1cblxuXHQvKipcblx0ICogVXNlZCB0byBzZXQgdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUgb24gdGhlIGlucHV0IGxhYmVsLlxuXHQgKi9cblx0QElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIEhUTUwgcmVxdWlyZWQgYXR0cmlidXRlXG5cdCAqL1xuXHRASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuXHQvKipcblx0ICogVGhlIHZhbHVlIG9mIHRoZSBgUmFkaW9gLlxuXHQgKi9cblx0QElucHV0KCkgdmFsdWU7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciBhIGxvYWRpbmcgdGFibGUuXG5cdCAqL1xuXHRASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuXHQvKipcblx0ICogVGhlIGlkIGZvciB0aGUgYFJhZGlvYC5cblx0ICovXG5cdEBJbnB1dCgpIGlkID0gYHJhZGlvLSR7UmFkaW8ucmFkaW9Db3VudCsrfWA7XG5cdC8qKlxuXHQgKiBlbWl0cyB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgcmFkaW8gY2hhbmdlc1xuXHQgKi9cblx0QE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UmFkaW9DaGFuZ2U+KCk7XG5cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MuY2RzLS1yYWRpby1idXR0b24td3JhcHBlclwiKSBob3N0Q2xhc3MgPSB0cnVlO1xuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tcmFkaW8tYnV0dG9uLXdyYXBwZXItLWxhYmVsLWxlZnRcIikgZ2V0IGxhYmVsTGVmdCgpIHtcblx0XHRyZXR1cm4gdGhpcy5sYWJlbFBsYWNlbWVudCA9PT0gXCJsZWZ0XCI7XG5cdH1cblxuXHQvKipcblx0ICogUmVmbGVjdHMgd2hldGhlciBvciBub3QgdGhlIGlucHV0IGlzIGRpc2FibGVkIGF0IGBSYWRpb0dyb3VwYCBsZXZlbC5cblx0ICovXG5cdGRpc2FibGVkRnJvbUdyb3VwID0gZmFsc2U7XG5cblx0cHJvdGVjdGVkIF9sYWJlbGxlZGJ5ID0gXCJcIjtcblxuXHQvKipcblx0ICogSGFuZGxlciBwcm92aWRlZCBieSB0aGUgYFJhZGlvR3JvdXBgIHRvIGJ1YmJsZSBldmVudHMgdXBcblx0ICovXG5cdHJhZGlvQ2hhbmdlSGFuZGxlciA9IChldmVudDogUmFkaW9DaGFuZ2UpID0+IHt9O1xuXG5cdC8qKlxuXHQgKiBTeW5jaHJvbml6ZXMgd2l0aCB0aGUgYFJhZGlvR3JvdXBgIGluIHRoZSBldmVudCBvZiBhIGNoYW5nZWQgYFJhZGlvYC5cblx0ICogRW1pdHMgdGhlIGNoYW5nZXMgb2YgYm90aCB0aGUgYFJhZGlvR3JvdXBgIGFuZCBgUmFkaW9gLlxuXHQgKi9cblx0b25DaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cblxuXHRvbkNsaWNrKGV2ZW50OiBFdmVudCkge1xuXHRcdHRoaXMuY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcblx0XHRjb25zdCByYWRpb0V2ZW50ID0gbmV3IFJhZGlvQ2hhbmdlKHRoaXMsIHRoaXMudmFsdWUpO1xuXHRcdHRoaXMuY2hhbmdlLmVtaXQocmFkaW9FdmVudCk7XG5cdFx0dGhpcy5yYWRpb0NoYW5nZUhhbmRsZXIocmFkaW9FdmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIGNhbGxlZCBieSBgUmFkaW9Hcm91cGAgd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJ1YmJsZSBgUmFkaW9DaGFuZ2VgIGV2ZW50c1xuXHQgKiBAcGFyYW0gZm4gY2FsbGJhY2sgdGhhdCBleHBlY3RzIGEgYFJhZGlvQ2hhbmdlYCBhcyBhbiBhcmd1bWVudFxuXHQgKi9cblx0cmVnaXN0ZXJSYWRpb0NoYW5nZUhhbmRsZXIoZm46IChldmVudDogUmFkaW9DaGFuZ2UpID0+IHZvaWQpIHtcblx0XHR0aGlzLnJhZGlvQ2hhbmdlSGFuZGxlciA9IGZuO1xuXHR9XG5cblx0c2V0RGlzYWJsZWRGcm9tR3JvdXAoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmRpc2FibGVkRnJvbUdyb3VwID0gZGlzYWJsZWQ7XG5cdH1cbn1cbiJdfQ==