@bravobit/bb-foundation 0.32.0 → 0.32.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { CanDisable, CanDisableConstructor, CanHideErrors, CanHideErrorsConstructor, HasError, HasErrorConstructor, IsGrouped, IsGroupedConstructor, IsReadonly, IsReadonlyConstructor, IsRequired, IsRequiredConstructor } from '@bravobit/bb-foundation';
2
- import { EventEmitter, OnDestroy, OnInit, TemplateRef } from '@angular/core';
2
+ import { ChangeDetectorRef, EventEmitter, OnDestroy, OnInit, TemplateRef } from '@angular/core';
3
3
  import { ControlValueAccessor, FormControl, FormGroup } from '@angular/forms';
4
4
  import { BehaviorSubject, Observable } from 'rxjs';
5
5
  import * as i0 from "@angular/core";
@@ -7,6 +7,7 @@ declare class BbDatePickerBase {
7
7
  }
8
8
  declare const BbFilePickerMixinBase: IsRequiredConstructor & IsReadonlyConstructor & CanDisableConstructor & IsGroupedConstructor & HasErrorConstructor & CanHideErrorsConstructor & typeof BbDatePickerBase;
9
9
  export declare class BbDatePicker extends BbFilePickerMixinBase implements ControlValueAccessor, OnInit, OnDestroy, IsRequired, IsReadonly, CanDisable, IsGrouped, HasError, CanHideErrors {
10
+ private _changeDetectorRef;
10
11
  private _localizeId;
11
12
  readonly _yearRegex: RegExp;
12
13
  label: string | TemplateRef<any> | null;
@@ -33,7 +34,7 @@ export declare class BbDatePicker extends BbFilePickerMixinBase implements Contr
33
34
  set value(value: string | null);
34
35
  valueChange: EventEmitter<string>;
35
36
  private _subscription;
36
- constructor(_localizeId: Observable<string>);
37
+ constructor(_changeDetectorRef: ChangeDetectorRef, _localizeId: Observable<string>);
37
38
  ngOnInit(): void;
38
39
  ngOnDestroy(): void;
39
40
  writeValue(value: string | null): void;
@@ -28,8 +28,9 @@ export class BbDatePicker extends BbFilePickerMixinBase {
28
28
  this.parseDateStringInForm(value);
29
29
  this.valueChange.emit(this.value);
30
30
  }
31
- constructor(_localizeId) {
31
+ constructor(_changeDetectorRef, _localizeId) {
32
32
  super();
33
+ this._changeDetectorRef = _changeDetectorRef;
33
34
  this._localizeId = _localizeId;
34
35
  // Readonly data.
35
36
  this._yearRegex = /^(10|[1-9][0-9])\d{2}$/; // Note: 1000 - 9999
@@ -118,12 +119,8 @@ export class BbDatePicker extends BbFilePickerMixinBase {
118
119
  }
119
120
  setDisabledState(isDisabled) {
120
121
  this.disabled = isDisabled;
121
- if (this.disabled) {
122
- this.form?.disable();
123
- }
124
- else {
125
- this.form?.enable();
126
- }
122
+ this.disabled ? this.form?.disable() : this.form?.enable();
123
+ this._changeDetectorRef.markForCheck();
127
124
  }
128
125
  onErrorChange(error) {
129
126
  this.error = !!error;
@@ -249,7 +246,7 @@ export class BbDatePicker extends BbFilePickerMixinBase {
249
246
  // Push the years.
250
247
  return this.years$.next(years);
251
248
  }
252
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: BbDatePicker, deps: [{ token: LOCALIZE_ID }], target: i0.ɵɵFactoryTarget.Component }); }
249
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: BbDatePicker, deps: [{ token: i0.ChangeDetectorRef }, { token: LOCALIZE_ID }], target: i0.ɵɵFactoryTarget.Component }); }
253
250
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: BbDatePicker, selector: "bb-date-picker", inputs: { required: "required", readonly: "readonly", disabled: "disabled", grouped: "grouped", hideErrors: "hideErrors", label: "label", hint: "hint", dayPlaceholder: "dayPlaceholder", monthPlaceholder: "monthPlaceholder", yearPlaceholder: "yearPlaceholder", years: "years", value: "value" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.required": "required", "class.readonly": "readonly", "class.disabled": "disabled", "class.grouped": "grouped", "class.error": "error" }, classAttribute: "bb-date-picker" }, providers: [
254
251
  {
255
252
  provide: NG_VALUE_ACCESSOR,
@@ -284,7 +281,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImpor
284
281
  '[class.grouped]': 'grouped',
285
282
  '[class.error]': 'error'
286
283
  }, inputs: ['required', 'readonly', 'disabled', 'grouped', 'hideErrors'], preserveWhitespaces: false, template: "<!-- Label of the date picker. -->\n<label *ngIf=\"label as labelContent\"\n class=\"bb-date-picker-label\">\n <ng-template [bbTemplate]=\"labelContent\">\n {{ labelContent }}\n </ng-template>\n</label>\n\n<!-- The form containing the year/month/day fields. -->\n<form *ngIf=\"data$ | async as data\"\n [formGroup]=\"form\"\n class=\"bb-date-picker-container\"\n novalidate>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('day')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"day\">\n <option [ngValue]=\"null\">{{ dayPlaceholder }}</option>\n <option *ngFor=\"let day of data?.days; trackBy: trackByValue\"\n [ngValue]=\"day?.value\">\n {{ day?.label }}\n </option>\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('month')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"month\">\n <option [ngValue]=\"null\">{{ monthPlaceholder }}</option>\n <option *ngFor=\"let month of data?.months; trackBy: trackByValue\"\n [ngValue]=\"month?.value\">\n {{ month?.label }}\n </option>\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select *ngIf=\"data?.years?.length > 0; else defaultYearInputTemplate\"\n [class.has-value]=\"!!form?.get('year')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"year\">\n <option [ngValue]=\"null\">{{ yearPlaceholder }}</option>\n <option *ngFor=\"let year of data?.years\"\n [value]=\"year\">\n {{ year }}\n </option>\n </select>\n\n <ng-template #defaultYearInputTemplate>\n <input [placeholder]=\"yearPlaceholder\"\n bbInput\n type=\"text\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n pattern=\"^[0-9]{4}$\"\n formControlName=\"year\"\n autocomplete=\"off\">\n </ng-template>\n </bb-form-control>\n </div>\n</form>\n\n<!-- The date picker error. -->\n<bb-form-error *ngIf=\"!hideErrors\"\n (errorChange)=\"onErrorChange($event)\">\n</bb-form-error>\n\n<!-- The date picker hint. -->\n<p *ngIf=\"hint as hintContent\"\n class=\"bb-date-picker-hint\">\n <ng-template [bbTemplate]=\"hintContent\">\n {{ hintContent }}\n </ng-template>\n</p>\n", styles: [".bb-date-picker{display:block}.bb-date-picker.required>.bb-date-picker-label:after{content:\"*\";color:#c23934;font-size:12px;line-height:1.5}.bb-date-picker.readonly{pointer-events:none}.bb-date-picker.readonly .bb-form-control-container{cursor:default;border:1px dotted #bdc4c9;background-color:#f9f9f9!important}.bb-date-picker.readonly .bb-form-control-container>select:disabled{opacity:1}.bb-date-picker.grouped{margin-bottom:20px}.bb-date-picker.error>.bb-date-picker-label{color:#c23934}.bb-date-picker.error .bb-form-control-container{border:1px solid #962b26;background-color:#c2393440!important;box-shadow:inset 0 3px #b7bcc233,0 6px 6px -6px #0000001a,0 0 0 3px #c2393466!important}.bb-date-picker-label{color:#000;display:block;font-size:16px;font-weight:500;margin-bottom:4px}.bb-date-picker-container{display:flex}.bb-date-picker-item{flex:1}.bb-date-picker-item>bb-form-control.focused{z-index:1;position:relative}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select>option:first-child{color:#d2d2d2}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select:not(.has-value){color:#d2d2d2}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select:not(.has-value)>option:not(:first-child){color:#000}.bb-date-picker-item:not(:first-child):not(:last-child) .bb-form-control-container{border-radius:0!important}.bb-date-picker-item:first-child .bb-form-control-container{border-right:none!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.bb-date-picker-item:last-child .bb-form-control-container{border-left:none!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important}.bb-date-picker-hint{display:block;color:#738694;font-size:13px;margin-top:4px;pointer-events:all}\n"] }]
287
- }], ctorParameters: () => [{ type: i8.Observable, decorators: [{
284
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i8.Observable, decorators: [{
288
285
  type: Inject,
289
286
  args: [LOCALIZE_ID]
290
287
  }] }], propDecorators: { label: [{
@@ -304,4 +301,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImpor
304
301
  }], valueChange: [{
305
302
  type: Output
306
303
  }] } });
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9lbGVtZW50cy9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vZWxlbWVudHMvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBYUgsYUFBYSxFQUNiLFVBQVUsRUFDVixZQUFZLEVBQ1osZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2hCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFFTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILFdBQVcsRUFDWCxTQUFTLEVBQ1QsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixVQUFVLEVBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzdELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7OztBQUUzQyxNQUFNLGdCQUFnQjtDQUNyQjtBQUVELE1BQU0scUJBQXFCLEdBT3JCLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFlB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V0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDOzRCQUMzQyxLQUFLLEVBQUUsSUFBSTt5QkFDZDt3QkFDRDs0QkFDSSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxjQUFjOzRCQUN6QixLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSixRQUNLO3dCQUNGLE9BQU8sRUFBRSxnQkFBZ0I7d0JBQ3pCLGtCQUFrQixFQUFFLFVBQVU7d0JBQzlCLGtCQUFrQixFQUFFLFVBQVU7d0JBQzlCLGtCQUFrQixFQUFFLFVBQVU7d0JBQzlCLGlCQUFpQixFQUFFLFNBQVM7d0JBQzVCLGVBQWUsRUFBRSxPQUFPO3FCQUMzQixVQUNPLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyx1QkFDaEQsS0FBSzs7MEJBOENiLE1BQU07MkJBQUMsV0FBVzt5Q0F0Q3RCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFHRixLQUFLO3NCQURSLEtBQUs7Z0JBc0JGLEtBQUs7c0JBRFIsS0FBSztnQkFNSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDYW5EaXNhYmxlLFxuICAgIENhbkRpc2FibGVDb25zdHJ1Y3RvcixcbiAgICBDYW5IaWRlRXJyb3JzLFxuICAgIENhbkhpZGVFcnJvcnNDb25zdHJ1Y3RvcixcbiAgICBIYXNFcnJvcixcbiAgICBIYXNFcnJvckNvbnN0cnVjdG9yLFxuICAgIElzR3JvdXBlZCxcbiAgICBJc0dyb3VwZWRDb25zdHJ1Y3RvcixcbiAgICBJc1JlYWRvbmx5LFxuICAgIElzUmVhZG9ubHlDb25zdHJ1Y3RvcixcbiAgICBJc1JlcXVpcmVkLFxuICAgIElzUmVxdWlyZWRDb25zdHJ1Y3RvcixcbiAgICBtaXhpbkRpc2FibGVkLFxuICAgIG1peGluRXJyb3IsXG4gICAgbWl4aW5Hcm91cGVkLFxuICAgIG1peGluSGlkZUVycm9ycyxcbiAgICBtaXhpblJlYWRvbmx5LFxuICAgIG1peGluUmVxdWlyZWRcbn0gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBGb3JtQ29udHJvbCxcbiAgICBGb3JtR3JvdXAsXG4gICAgTkdfVkFMSURBVE9SUyxcbiAgICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICBWYWxpZGF0b3JzXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGgsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtMT0NBTElaRV9JRH0gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24vbG9jYWxpemUnO1xuaW1wb3J0IHtmb3JtYXREYXRlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5jbGFzcyBCYkRhdGVQaWNrZXJCYXNlIHtcbn1cblxuY29uc3QgQmJGaWxlUGlja2VyTWl4aW5CYXNlOiBJc1JlcXVpcmVkQ29uc3RydWN0b3JcbiAgICAmIElzUmVhZG9ubHlDb25zdHJ1Y3RvclxuICAgICYgQ2FuRGlzYWJsZUNvbnN0cnVjdG9yXG4gICAgJiBJc0dyb3VwZWRDb25zdHJ1Y3RvclxuICAgICYgSGFzRXJyb3JDb25zdHJ1Y3RvclxuICAgICYgQ2FuSGlkZUVycm9yc0NvbnN0cnVjdG9yXG4gICAgJiB0eXBlb2YgQmJEYXRlUGlja2VyQmFzZVxuICAgID0gbWl4aW5SZXF1aXJlZChtaXhpblJlYWRvbmx5KG1peGluRGlzYWJsZWQobWl4aW5Hcm91cGVkKG1peGluRXJyb3IobWl4aW5IaWRlRXJyb3JzKEJiRGF0ZVBpY2tlckJhc2UpKSkpKSk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYmItZGF0ZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEJiRGF0ZVBpY2tlciksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IEJiRGF0ZVBpY2tlcixcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ2NsYXNzJzogJ2JiLWRhdGUtcGlja2VyJyxcbiAgICAgICAgJ1tjbGFzcy5yZXF1aXJlZF0nOiAncmVxdWlyZWQnLFxuICAgICAgICAnW2NsYXNzLnJlYWRvbmx5XSc6ICdyZWFkb25seScsXG4gICAgICAgICdbY2xhc3MuZGlzYWJsZWRdJzogJ2Rpc2FibGVkJyxcbiAgICAgICAgJ1tjbGFzcy5ncm91cGVkXSc6ICdncm91cGVkJyxcbiAgICAgICAgJ1tjbGFzcy5lcnJvcl0nOiAnZXJyb3InXG4gICAgfSxcbiAgICBpbnB1dHM6IFsncmVxdWlyZWQnLCAncmVhZG9ubHknLCAnZGlzYWJsZWQnLCAnZ3JvdXBlZCcsICdoaWRlRXJyb3JzJ10sXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2Vcbn0pXG5leHBvcnQgY2xhc3MgQmJEYXRlUGlja2VyIGV4dGVuZHMgQmJGaWxlUGlja2VyTWl4aW5CYXNlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95LCBJc1JlcXVpcmVkLCBJc1JlYWRvbmx5LCBDYW5EaXNhYmxlLCBJc0dyb3VwZWQsIEhhc0Vycm9yLCBDYW5IaWRlRXJyb3JzIHtcblxuICAgIC8vIFJlYWRvbmx5IGRhdGEuXG4gICAgcmVhZG9ubHkgX3llYXJSZWdleCA9IC9eKDEwfFsxLTldWzAtOV0pXFxkezJ9JC87IC8vIE5vdGU6IDEwMDAgLSA5OTk5XG5cbiAgICAvLyBJbnB1dHMuXG4gICAgQElucHV0KCkgbGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcbiAgICBASW5wdXQoKSBoaW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gICAgQElucHV0KCkgZGF5UGxhY2Vob2xkZXI6IHN0cmluZyB8IG51bGwgPSAnZGQnO1xuICAgIEBJbnB1dCgpIG1vbnRoUGxhY2Vob2xkZXI6IHN0cmluZyB8IG51bGwgPSAnbW0nO1xuICAgIEBJbnB1dCgpIHllYXJQbGFjZWhvbGRlcjogc3RyaW5nIHwgbnVsbCA9ICd5eXl5JztcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHllYXJzKHZhbHVlOiBbc3RyaW5nIHwgbnVtYmVyLCBzdHJpbmcgfCBudW1iZXJdIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlWWVhcnModmFsdWUpO1xuICAgIH1cblxuICAgIC8vIEZvcm1zLlxuICAgIGZvcm06IEZvcm1Hcm91cDtcbiAgICB0cmFja0J5VmFsdWUgPSAoXywgaXRlbSkgPT4gaXRlbT8udmFsdWU7XG5cbiAgICAvLyBEYXRhLlxuICAgIGRhdGEkOiBPYnNlcnZhYmxlPHtcbiAgICAgICAgZGF5cz86IHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IG51bWJlciB9W10sXG4gICAgICAgIG1vbnRocz86IHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IG51bWJlciB9W10sXG4gICAgICAgIHllYXJzPzogbnVtYmVyW10gfCBudWxsXG4gICAgfT47XG4gICAgeWVhcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXJbXSB8IG51bGw+KG51bGwpO1xuXG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtVG9EYXRlU3RyaW5nKHRoaXMuZm9ybT8udmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIHRoaXMucGFyc2VEYXRlU3RyaW5nSW5Gb3JtKHZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVsbD4oKTtcblxuICAgIC8vIFN1YnNjcmlwdGlvbnMuXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChMT0NBTElaRV9JRCkgcHJpdmF0ZSBfbG9jYWxpemVJZDogT2JzZXJ2YWJsZTxzdHJpbmc+KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY29tcG9zZUZvcm0oKTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlRGF0ZVN0cmluZ0luRm9ybSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShtZXRob2Q6IChfOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayA9IG1ldGhvZDtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChtZXRob2Q6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IG1ldGhvZDtcbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybT8uZGlzYWJsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtPy5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIH07XG5cbiAgICBvbkNoYW5nZUNhbGxiYWNrOiAoXzogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICB9O1xuXG4gICAgb25FcnJvckNoYW5nZShlcnJvcjogeyB0b2tlbjogc3RyaW5nLCBkYXRhPzogYW55IH0gfCBudWxsKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSAhIWVycm9yO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKHt2YWx1ZX06IEZvcm1Db250cm9sPHN0cmluZz4pIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMucGFyc2VEYXRlU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGE/LnllYXIsIGRhdGE/Lm1vbnRoIC0gMSwgZGF0YT8uZGF5KTtcblxuICAgICAgICBjb25zdCBtYXhEYXlzID0gdGhpcy5nZXREYXlzSW5Nb250aChkYXRhPy5tb250aCwgYCR7ZGF0YT8ueWVhcn1gKTtcblxuICAgICAgICBjb25zdCBpc0ludmFsaWREYXRlID0gZGF0ZS50b1N0cmluZygpID09PSAnSW52YWxpZCBEYXRlJztcbiAgICAgICAgY29uc3QgZXhjZWVkZWRNYXhEYXlzID0gZGF0YT8uZGF5ID4gbWF4RGF5cztcblxuICAgICAgICByZXR1cm4gKGlzSW52YWxpZERhdGUgfHwgZXhjZWVkZWRNYXhEYXlzKSAmJiB7XG4gICAgICAgICAgICBpbnZhbGlkRGF0ZTogdHJ1ZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2hhbmdlcygpIHtcbiAgICAgICAgY29uc3QgZGF0ZU9yTnVsbCQgPSB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBtYXAodmFsdWUgPT4gdGhpcy5mb3JtVG9EYXRlU3RyaW5nKHZhbHVlKSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gZGF0ZU9yTnVsbCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGEoKSB7XG4gICAgICAgIGNvbnN0IHllYXJzJCA9IHRoaXMueWVhcnMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICBjb25zdCBtb250aHMkID0gdGhpcy5nZXRNb250aERhdGEoKTtcbiAgICAgICAgY29uc3QgZGF5cyQgPSB0aGlzLmdldERheURhdGEoKTtcblxuICAgICAgICB0aGlzLmRhdGEkID0gY29tYmluZUxhdGVzdChbeWVhcnMkLCBtb250aHMkLCBkYXlzJF0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKFt5ZWFycywgbW9udGhzLCBkYXlzXSkgPT4gKHt5ZWFycywgbW9udGhzLCBkYXlzfSkpLFxuICAgICAgICAgICAgdGFwKGRhdGEgPT4gdGhpcy52ZXJpZnlMaXN0RGF0YShkYXRhPy5kYXlzPy5sZW5ndGgsIGRhdGE/LnllYXJzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZlcmlmeUxpc3REYXRhKG1heERheXM6IG51bWJlciwgeWVhcnM6IG51bWJlcltdIHwgbnVsbCkge1xuICAgICAgICBjb25zdCBkYXlDb250cm9sID0gdGhpcy5mb3JtLmdldCgnZGF5Jyk7XG4gICAgICAgIGlmIChkYXlDb250cm9sPy52YWx1ZSAhPT0gbnVsbCAmJiBkYXlDb250cm9sPy52YWx1ZSA+IG1heERheXMpIHtcbiAgICAgICAgICAgIGRheUNvbnRyb2wucGF0Y2hWYWx1ZShtYXhEYXlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHllYXJDb250cm9sID0gdGhpcy5mb3JtLmdldCgneWVhcicpO1xuICAgICAgICBpZiAoeWVhcnMgIT09IG51bGwgJiYgeWVhckNvbnRyb2w/LnZhbHVlICE9PSBudWxsICYmIHRoaXMuX3llYXJSZWdleC50ZXN0KHllYXJDb250cm9sPy52YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkWWVhciA9IE51bWJlcih5ZWFyQ29udHJvbD8udmFsdWUpO1xuXG4gICAgICAgICAgICBjb25zdCBmaXJzdFllYXIgPSBNYXRoLm1pbiguLi55ZWFycyk7XG4gICAgICAgICAgICBjb25zdCBsYXN0WWVhciA9IE1hdGgubWF4KC4uLnllYXJzKTtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkWWVhciA8IGZpcnN0WWVhciB8fCBzZWxlY3RlZFllYXIgPiBsYXN0WWVhcikge1xuICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4geWVhckNvbnRyb2wucGF0Y2hWYWx1ZShudWxsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERheURhdGEoKSB7XG4gICAgICAgIGNvbnN0IGNvdW50JCA9IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh0aGlzLmZvcm0/LnZhbHVlIGFzIG9iamVjdCksXG4gICAgICAgICAgICBtYXAoKHttb250aCwgeWVhcn0pID0+IHRoaXMuZ2V0RGF5c0luTW9udGgobW9udGgsIHllYXIpKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gY291bnQkLnBpcGUoXG4gICAgICAgICAgICBtYXAoY291bnQgPT4gQXJyYXkoY291bnQpLmZpbGwoMCkubWFwKChfLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogYCR7aW5kZXggKyAxfWAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGluZGV4ICsgMVxuICAgICAgICAgICAgfSkpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9udGhEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemVJZC5waXBlKFxuICAgICAgICAgICAgbWFwKGxvY2FsZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5KDEyKS5maWxsKDApLm1hcCgoXywgbW9udGgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDIwMDAsIG1vbnRoLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBmb3JtYXREYXRlKGRhdGUsICdMTExMJywgbG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtsYWJlbCwgdmFsdWU6IG1vbnRoICsgMX07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcG9zZUZvcm0oKSB7XG4gICAgICAgIGNvbnN0IHtyZXF1aXJlZCwgcGF0dGVybiwgbWluTGVuZ3RoLCBtYXhMZW5ndGh9ID0gVmFsaWRhdG9ycztcbiAgICAgICAgY29uc3QgeWVhclBhdHRlcm4gPSBwYXR0ZXJuKHRoaXMuX3llYXJSZWdleCk7XG4gICAgICAgIGNvbnN0IHllYXJWYWxpZGF0b3JzID0gW3JlcXVpcmVkLCB5ZWFyUGF0dGVybiwgbWluTGVuZ3RoKDQpLCBtYXhMZW5ndGgoNCldO1xuXG4gICAgICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICAgICAgZGF5OiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyPihudWxsLCByZXF1aXJlZCksXG4gICAgICAgICAgICBtb250aDogbmV3IEZvcm1Db250cm9sPG51bWJlcj4obnVsbCwgcmVxdWlyZWQpLFxuICAgICAgICAgICAgeWVhcjogbmV3IEZvcm1Db250cm9sPG51bWJlcj4obnVsbCwgeWVhclZhbGlkYXRvcnMpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VEYXRlU3RyaW5nSW5Gb3JtKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRlIHN0cmluZyB3YXMgbm90IGEgdmFsaWQgZm9ybWF0LCByZXNldCB0aGUgZm9ybS5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWREYXRlU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtPy5yZXNldCh7eWVhcjogbnVsbCwgbW9udGg6IG51bGwsIGRheTogbnVsbH0sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXJzZSB0aGUgZGF0ZSBzdHJpbmcgYW5kIHNhdmUgaW4gdGhlIGZvcm0uXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnBhcnNlRGF0ZVN0cmluZyh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IHllYXIgPSBkYXRhPy55ZWFyICE9PSBudWxsICYmIGRhdGE/LnllYXIgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLnBhZFN0cmluZyhgJHtkYXRhPy55ZWFyfWAsIDQsICcwJylcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSB7Li4uKGRhdGEgPz8ge30pLCB5ZWFyfTtcblxuICAgICAgICB0aGlzLmZvcm0/LnBhdGNoVmFsdWUoZm9ybURhdGEsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZURhdGVTdHJpbmcodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZERhdGVTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBhcnNlIHRoZSBkYXRlIHN0cmluZy5cbiAgICAgICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gdmFsdWU/LnNwbGl0KCctJyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRheTogZGF5ID8gcGFyc2VJbnQoZGF5LCAxMCkgOiBudWxsLFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoID8gcGFyc2VJbnQobW9udGgsIDEwKSA6IG51bGwsXG4gICAgICAgICAgICB5ZWFyOiB5ZWFyID8gcGFyc2VJbnQoeWVhciwgMTApIDogbnVsbFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VZZWFycyh2YWx1ZXM6IFtzdHJpbmcgfCBudW1iZXIsIHN0cmluZyB8IG51bWJlcl0gfCBudWxsKSB7XG4gICAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy55ZWFycyQubmV4dChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBhcnNlIHRoZSB2YWx1ZXMgdG8geWVhcnMgKGluIG51bWJlcnMpLlxuICAgICAgICBjb25zdCBbZmlyc3QsIGxhc3RdID0gdmFsdWVzO1xuICAgICAgICBjb25zdCBmaXJzdFllYXIgPSB0aGlzLnBhcnNlWWVhckZvcm1hdChmaXJzdCk7XG4gICAgICAgIGNvbnN0IGxhc3RZZWFyID0gdGhpcy5wYXJzZVllYXJGb3JtYXQobGFzdCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgY2FzZXMgaW4gd2hlcmUgd2UgY2Fubm90IHBhcnNlLlxuICAgICAgICBpZiAoZmlyc3RZZWFyID09PSBudWxsIHx8IGxhc3RZZWFyID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy55ZWFycyQubmV4dChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBmaXJzdFllYXIgLSBsYXN0WWVhcjtcbiAgICAgICAgY29uc3QgYWJzb2x1dGVEaWZmZXJlbmNlID0gTWF0aC5hYnMoZGlmZmVyZW5jZSkgKyAxO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhbiBhcnJheSB3aXRoIHllYXJzLlxuICAgICAgICBjb25zdCB5ZWFycyA9IEFycmF5KGFic29sdXRlRGlmZmVyZW5jZSlcbiAgICAgICAgICAgIC5maWxsKDApXG4gICAgICAgICAgICAubWFwKChfLCBpbmRleCkgPT4gZGlmZmVyZW5jZSA8IDAgPyAoZmlyc3RZZWFyICsgaW5kZXgpIDogKGZpcnN0WWVhciAtIGluZGV4KSk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgd2UgaGF2ZSBvbmUgb3IgbW9yZSB5ZWFycy5cbiAgICAgICAgaWYgKHllYXJzPy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMueWVhcnMkLm5leHQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQdXNoIHRoZSB5ZWFycy5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcnMkLm5leHQoeWVhcnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybVRvRGF0ZVN0cmluZyA9ICh7eWVhciwgbW9udGgsIGRheX0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybT8uaW52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmVmaXhlZE1vbnRoID0gdGhpcy5wYWRTdHJpbmcoYCR7bW9udGh9YCwgMiwgJzAnKTtcbiAgICAgICAgY29uc3QgcHJlZml4ZWREYXkgPSB0aGlzLnBhZFN0cmluZyhgJHtkYXl9YCwgMiwgJzAnKTtcblxuICAgICAgICByZXR1cm4gW3llYXIsIHByZWZpeGVkTW9udGgsIHByZWZpeGVkRGF5XS5qb2luKCctJyk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcGFyc2VZZWFyRm9ybWF0ID0gKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSB2YWx1ZSB0byBhIGRlZmluaXRpdmUgc3RyaW5nLlxuICAgICAgICBjb25zdCB5ZWFyU3RyaW5nID0gYCR7dmFsdWV9YDtcbiAgICAgICAgY29uc3QgY3VycmVudEZ1bGxZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuXG4gICAgICAgIC8vIEhhbmRsZSBkZWZhdWx0IFwiY3VycmVudFwiIHN5bnRheC5cbiAgICAgICAgaWYgKHllYXJTdHJpbmcgPT09ICdjdXJyZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGdWxsWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBcImN1cnJlbnQgKyB7YW1vdW50fVwiIHN5bnRheC5cbiAgICAgICAgaWYgKC9eY3VycmVudFxccz9cXCtcXHM/XFxkKyQvLnRlc3QoeWVhclN0cmluZykpIHtcbiAgICAgICAgICAgIGNvbnN0IGFtb3VudCA9IE51bWJlcih5ZWFyU3RyaW5nPy5zcGxpdCgnKycpPy5bMV0/LnRyaW0oKSkgPz8gMDtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RnVsbFllYXIgKyBhbW91bnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgXCJjdXJyZW50IC0ge2Ftb3VudH1cIiBzeW50YXguXG4gICAgICAgIGlmICgvXmN1cnJlbnRcXHM/LVxccz9cXGQrJC8udGVzdCh5ZWFyU3RyaW5nKSkge1xuICAgICAgICAgICAgY29uc3QgYW1vdW50ID0gTnVtYmVyKHllYXJTdHJpbmc/LnNwbGl0KCctJyk/LlsxXT8udHJpbSgpKSA/PyAwO1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGdWxsWWVhciAtIGFtb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsaW5nIHRoZSBkZWZhdWx0IG51bWJlciBjYXNlLlxuICAgICAgICBpZiAoL15bMC05XXs0fSQvLnRlc3QoeWVhclN0cmluZykpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoeWVhclN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBjb3VsZCBub3QgcGFyc2UgaXQuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGdldERheXNJbk1vbnRoID0gKG1vbnRoOiBudW1iZXIgfCBudWxsID0gbnVsbCwgeWVhcjogc3RyaW5nIHwgbnVsbCA9IG51bGwpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybT8uaW52YWxpZCB8fCBtb250aCA9PT0gbnVsbCB8fCB5ZWFyID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gMzE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZWRZZWFyID0gcGFyc2VJbnQoeWVhciwgMTApO1xuICAgICAgICByZXR1cm4gbmV3IERhdGUocGFyc2VkWWVhciwgbW9udGgsIDApLmdldERhdGUoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkRGF0ZVN0cmluZyA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlswLTldezR9LVswLTldezJ9LVswLTldezJ9JC8udGVzdCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcGFkU3RyaW5nID0gKHZhbHVlOiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyLCBmaWxsU3RyaW5nOiBzdHJpbmcgPSAnMCcpID0+IHtcbiAgICAgICAgY29uc3QgY291bnQgPSBtYXhMZW5ndGggLSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykge1xuICAgICAgICAgICAgdmFsdWUgPSBgJHtmaWxsU3RyaW5nfSR7dmFsdWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuXG59XG4iLCI8IS0tIExhYmVsIG9mIHRoZSBkYXRlIHBpY2tlci4gLS0+XG48bGFiZWwgKm5nSWY9XCJsYWJlbCBhcyBsYWJlbENvbnRlbnRcIlxuICAgICAgIGNsYXNzPVwiYmItZGF0ZS1waWNrZXItbGFiZWxcIj5cbiAgICA8bmctdGVtcGxhdGUgW2JiVGVtcGxhdGVdPVwibGFiZWxDb250ZW50XCI+XG4gICAgICAgIHt7IGxhYmVsQ29udGVudCB9fVxuICAgIDwvbmctdGVtcGxhdGU+XG48L2xhYmVsPlxuXG48IS0tIFRoZSBmb3JtIGNvbnRhaW5pbmcgdGhlIHllYXIvbW9udGgvZGF5IGZpZWxkcy4gLS0+XG48Zm9ybSAqbmdJZj1cImRhdGEkIHwgYXN5bmMgYXMgZGF0YVwiXG4gICAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgICAgY2xhc3M9XCJiYi1kYXRlLXBpY2tlci1jb250YWluZXJcIlxuICAgICAgbm92YWxpZGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiYmItZGF0ZS1waWNrZXItaXRlbVwiPlxuICAgICAgICA8YmItZm9ybS1jb250cm9sIGhpZGVFcnJvcnM+XG4gICAgICAgICAgICA8c2VsZWN0IFtjbGFzcy5oYXMtdmFsdWVdPVwiISFmb3JtPy5nZXQoJ2RheScpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIGJiSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGF5XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCI+e3sgZGF5UGxhY2Vob2xkZXIgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF0YT8uZGF5czsgdHJhY2tCeTogdHJhY2tCeVZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cImRheT8udmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZGF5Py5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvYmItZm9ybS1jb250cm9sPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJiYi1kYXRlLXBpY2tlci1pdGVtXCI+XG4gICAgICAgIDxiYi1mb3JtLWNvbnRyb2wgaGlkZUVycm9ycz5cbiAgICAgICAgICAgIDxzZWxlY3QgW2NsYXNzLmhhcy12YWx1ZV09XCIhIWZvcm0/LmdldCgnbW9udGgnKT8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBiYklucHV0XG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1vbnRoXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCI+e3sgbW9udGhQbGFjZWhvbGRlciB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG1vbnRoIG9mIGRhdGE/Lm1vbnRoczsgdHJhY2tCeTogdHJhY2tCeVZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cIm1vbnRoPy52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBtb250aD8ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICA8L2JiLWZvcm0tY29udHJvbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYmItZGF0ZS1waWNrZXItaXRlbVwiPlxuICAgICAgICA8YmItZm9ybS1jb250cm9sIGhpZGVFcnJvcnM+XG4gICAgICAgICAgICA8c2VsZWN0ICpuZ0lmPVwiZGF0YT8ueWVhcnM/Lmxlbmd0aCA+IDA7IGVsc2UgZGVmYXVsdFllYXJJbnB1dFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmhhcy12YWx1ZV09XCIhIWZvcm0/LmdldCgneWVhcicpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIGJiSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwieWVhclwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwibnVsbFwiPnt7IHllYXJQbGFjZWhvbGRlciB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHllYXIgb2YgZGF0YT8ueWVhcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInllYXJcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgeWVhciB9fVxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFllYXJJbnB1dFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBbcGxhY2Vob2xkZXJdPVwieWVhclBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgYmJJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgIGlucHV0bW9kZT1cIm51bWVyaWNcIlxuICAgICAgICAgICAgICAgICAgICAgICBtaW5sZW5ndGg9XCI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiNFwiXG4gICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJeWzAtOV17NH0kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwieWVhclwiXG4gICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9iYi1mb3JtLWNvbnRyb2w+XG4gICAgPC9kaXY+XG48L2Zvcm0+XG5cbjwhLS0gVGhlIGRhdGUgcGlja2VyIGVycm9yLiAtLT5cbjxiYi1mb3JtLWVycm9yICpuZ0lmPVwiIWhpZGVFcnJvcnNcIlxuICAgICAgICAgICAgICAgKGVycm9yQ2hhbmdlKT1cIm9uRXJyb3JDaGFuZ2UoJGV2ZW50KVwiPlxuPC9iYi1mb3JtLWVycm9yPlxuXG48IS0tIFRoZSBkYXRlIHBpY2tlciBoaW50LiAtLT5cbjxwICpuZ0lmPVwiaGludCBhcyBoaW50Q29udGVudFwiXG4gICBjbGFzcz1cImJiLWRhdGUtcGlja2VyLWhpbnRcIj5cbiAgICA8bmctdGVtcGxhdGUgW2JiVGVtcGxhdGVdPVwiaGludENvbnRlbnRcIj5cbiAgICAgICAge3sgaGludENvbnRlbnQgfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9wPlxuIl19
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9lbGVtZW50cy9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vZWxlbWVudHMvc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBYUgsYUFBYSxFQUNiLFVBQVUsRUFDVixZQUFZLEVBQ1osZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2hCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFFTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILFdBQVcsRUFDWCxTQUFTLEVBQ1QsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixVQUFVLEVBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBYyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzdELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7OztBQUUzQyxNQUFNLGdCQUFnQjtDQUNyQjtBQUVELE1BQU0scUJBQXFCLEdBT3JCLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBK0IvRyxNQUFNLE9BQU8sWUFBYSxTQUFRLHFCQUFxQjtJQVluRCxJQUNJLEtBQUssQ0FBQyxLQUFnRDtRQUN0RCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFjRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUNJLEtBQUssQ0FBQyxLQUFvQjtRQUMxQixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFPRCxZQUFvQixrQkFBcUMsRUFDaEIsV0FBK0I7UUFDcEUsS0FBSyxFQUFFLENBQUM7UUFGUSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQTNDeEUsaUJBQWlCO1FBQ1IsZUFBVSxHQUFHLHdCQUF3QixDQUFDLENBQUMsb0JBQW9CO1FBRXBFLFVBQVU7UUFDRCxVQUFLLEdBQXFDLElBQUksQ0FBQztRQUMvQyxTQUFJLEdBQXFDLElBQUksQ0FBQztRQUM5QyxtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFDckMscUJBQWdCLEdBQWtCLElBQUksQ0FBQztRQUN2QyxvQkFBZSxHQUFrQixNQUFNLENBQUM7UUFTakQsaUJBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7UUFReEMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFrQixJQUFJLENBQUMsQ0FBQztRQVkxQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRTFELGlCQUFpQjtRQUNULGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQW1DM0Msc0JBQWlCLEdBQWUsR0FBRyxFQUFFO1FBQ3JDLENBQUMsQ0FBQztRQUVGLHFCQUFnQixHQUErQixHQUFHLEVBQUU7UUFDcEQsQ0FBQyxDQUFDO1FBNEtNLHFCQUFnQixHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxFQUFFLEVBQUU7WUFDOUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixPQUFPLElBQUksQ0FBQztZQUNoQixDQUFDO1lBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRXJELE9BQU8sQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7UUFFTSxvQkFBZSxHQUFHLENBQUMsS0FBc0IsRUFBRSxFQUFFO1lBQ2pELDhDQUE4QztZQUM5QyxNQUFNLFVBQVUsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQzlCLE1BQU0sZUFBZSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFakQsbUNBQW1DO1lBQ25DLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLGVBQWUsQ0FBQztZQUMzQixDQUFDO1lBRUQsc0NBQXNDO1lBQ3RDLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hFLE9BQU8sZUFBZSxHQUFHLE1BQU0sQ0FBQztZQUNwQyxDQUFDO1lBRUQsc0NBQXNDO1lBQ3RDLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hFLE9BQU8sZUFBZSxHQUFHLE1BQU0sQ0FBQztZQUNwQyxDQUFDO1lBRUQsb0NBQW9DO1lBQ3BDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBRUQseUJBQXlCO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVNLG1CQUFjLEdBQUcsQ0FBQyxRQUF1QixJQUFJLEVBQUUsT0FBc0IsSUFBSSxFQUFFLEVBQUU7WUFDakYsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDeEQsT0FBTyxFQUFFLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0QyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEQsQ0FBQyxDQUFDO1FBRU0sc0JBQWlCLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtZQUMzQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkYsQ0FBQyxDQUFDO1FBRU0sY0FBUyxHQUFHLENBQUMsS0FBYSxFQUFFLFNBQWlCLEVBQUUsYUFBcUIsR0FBRyxFQUFFLEVBQUU7WUFDL0UsTUFBTSxLQUFLLEdBQUcsU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDdkMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUN6QyxLQUFLLEdBQUcsR0FBRyxVQUFVLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDcEMsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQztJQTVRRixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBb0I7UUFDM0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFrQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0lBQ25DLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFrQjtRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBUUQsYUFBYSxDQUFDLEtBQTJDO1FBQ3JELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUSxDQUFDLEVBQUMsS0FBSyxFQUFzQjtRQUNqQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTlELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxjQUFjLENBQUM7UUFDekQsTUFBTSxlQUFlLEdBQUcsSUFBSSxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUM7UUFFNUMsT0FBTyxDQUFDLGFBQWEsSUFBSSxlQUFlLENBQUMsSUFBSTtZQUN6QyxXQUFXLEVBQUUsSUFBSTtTQUNwQixDQUFDO0lBQ04sQ0FBQztJQUVPLGFBQWE7UUFDakIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUMzQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDMUMsb0JBQW9CLEVBQUUsQ0FDekIsQ0FBQztRQUVGLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVPLE9BQU87UUFDWCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsRUFDdkQsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FDcEUsQ0FBQztJQUNOLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBZSxFQUFFLEtBQXNCO1FBQzFELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksVUFBVSxFQUFFLEtBQUssS0FBSyxJQUFJLElBQUksVUFBVSxFQUFFLEtBQUssR0FBRyxPQUFPLEVBQUUsQ0FBQztZQUM1RCxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksV0FBVyxFQUFFLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUYsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBRXBDLElBQUksWUFBWSxHQUFHLFNBQVMsSUFBSSxZQUFZLEdBQUcsUUFBUSxFQUFFLENBQUM7Z0JBQ3RELE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQy9ELENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVPLFVBQVU7UUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3RDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQWUsQ0FBQyxFQUNyQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFDeEQsb0JBQW9CLEVBQUUsQ0FDekIsQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FDZCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakQsS0FBSyxFQUFFLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNyQixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUM7U0FDbkIsQ0FBQyxDQUFDLENBQUMsQ0FDUCxDQUFDO0lBQ04sQ0FBQztJQUVPLFlBQVk7UUFDaEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDeEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1QsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQy9DLE9BQU8sRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUMsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRU8sV0FBVztRQUNmLE1BQU0sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsR0FBRyxVQUFVLENBQUM7UUFDN0QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxNQUFNLGNBQWMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUM7WUFDdEIsR0FBRyxFQUFFLElBQUksV0FBVyxDQUFTLElBQUksRUFBRSxRQUFRLENBQUM7WUFDNUMsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFTLElBQUksRUFBRSxRQUFRLENBQUM7WUFDOUMsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFTLElBQUksRUFBRSxjQUFjLENBQUM7U0FDdEQsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQW9CO1FBQzlDLDZEQUE2RDtRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1lBQy9FLENBQUM7WUFDRCxPQUFPO1FBQ1gsQ0FBQztRQUVELDhDQUE4QztRQUM5QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLEtBQUssU0FBUztZQUN4RCxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDWCxNQUFNLFFBQVEsR0FBRyxFQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFhO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQseUJBQXlCO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0MsT0FBTztZQUNILEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDbkMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUN6QyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3pDLENBQUM7SUFDTixDQUFDO0lBRU8sVUFBVSxDQUFDLE1BQWlEO1FBQ2hFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELDBDQUEwQztRQUMxQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUM3QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUMsd0NBQXdDO1FBQ3hDLElBQUksU0FBUyxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUN4QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXBELDhCQUE4QjtRQUM5QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7YUFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNQLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRW5GLHNDQUFzQztRQUN0QyxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs4R0EzUFEsWUFBWSxtREE2Q0QsV0FBVztrR0E3Q3RCLFlBQVksa2tCQXZCVjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDO2dCQUMzQyxLQUFLLEVBQUUsSUFBSTthQUNkO1lBQ0Q7Z0JBQ0ksT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFdBQVcsRUFBRSxZQUFZO2dCQUN6QixLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0osaURDNUVMLDZpR0FrRkE7OzJGRE1hLFlBQVk7a0JBN0J4QixTQUFTOytCQUNJLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQzs0QkFDM0MsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7d0JBQ0Q7NEJBQ0ksT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsY0FBYzs0QkFDekIsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0osUUFDSzt3QkFDRixPQUFPLEVBQUUsZ0JBQWdCO3dCQUN6QixrQkFBa0IsRUFBRSxVQUFVO3dCQUM5QixrQkFBa0IsRUFBRSxVQUFVO3dCQUM5QixrQkFBa0IsRUFBRSxVQUFVO3dCQUM5QixpQkFBaUIsRUFBRSxTQUFTO3dCQUM1QixlQUFlLEVBQUUsT0FBTztxQkFDM0IsVUFDTyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsdUJBQ2hELEtBQUs7OzBCQStDYixNQUFNOzJCQUFDLFdBQVc7eUNBdkN0QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0YsS0FBSztzQkFEUixLQUFLO2dCQXNCRixLQUFLO3NCQURSLEtBQUs7Z0JBTUksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2FuRGlzYWJsZSxcbiAgICBDYW5EaXNhYmxlQ29uc3RydWN0b3IsXG4gICAgQ2FuSGlkZUVycm9ycyxcbiAgICBDYW5IaWRlRXJyb3JzQ29uc3RydWN0b3IsXG4gICAgSGFzRXJyb3IsXG4gICAgSGFzRXJyb3JDb25zdHJ1Y3RvcixcbiAgICBJc0dyb3VwZWQsXG4gICAgSXNHcm91cGVkQ29uc3RydWN0b3IsXG4gICAgSXNSZWFkb25seSxcbiAgICBJc1JlYWRvbmx5Q29uc3RydWN0b3IsXG4gICAgSXNSZXF1aXJlZCxcbiAgICBJc1JlcXVpcmVkQ29uc3RydWN0b3IsXG4gICAgbWl4aW5EaXNhYmxlZCxcbiAgICBtaXhpbkVycm9yLFxuICAgIG1peGluR3JvdXBlZCxcbiAgICBtaXhpbkhpZGVFcnJvcnMsXG4gICAgbWl4aW5SZWFkb25seSxcbiAgICBtaXhpblJlcXVpcmVkXG59IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRm9ybUNvbnRyb2wsXG4gICAgRm9ybUdyb3VwLFxuICAgIE5HX1ZBTElEQVRPUlMsXG4gICAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TE9DQUxJWkVfSUR9IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uL2xvY2FsaXplJztcbmltcG9ydCB7Zm9ybWF0RGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuY2xhc3MgQmJEYXRlUGlja2VyQmFzZSB7XG59XG5cbmNvbnN0IEJiRmlsZVBpY2tlck1peGluQmFzZTogSXNSZXF1aXJlZENvbnN0cnVjdG9yXG4gICAgJiBJc1JlYWRvbmx5Q29uc3RydWN0b3JcbiAgICAmIENhbkRpc2FibGVDb25zdHJ1Y3RvclxuICAgICYgSXNHcm91cGVkQ29uc3RydWN0b3JcbiAgICAmIEhhc0Vycm9yQ29uc3RydWN0b3JcbiAgICAmIENhbkhpZGVFcnJvcnNDb25zdHJ1Y3RvclxuICAgICYgdHlwZW9mIEJiRGF0ZVBpY2tlckJhc2VcbiAgICA9IG1peGluUmVxdWlyZWQobWl4aW5SZWFkb25seShtaXhpbkRpc2FibGVkKG1peGluR3JvdXBlZChtaXhpbkVycm9yKG1peGluSGlkZUVycm9ycyhCYkRhdGVQaWNrZXJCYXNlKSkpKSkpO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JiLWRhdGUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBCYkRhdGVQaWNrZXIpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBCYkRhdGVQaWNrZXIsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdjbGFzcyc6ICdiYi1kYXRlLXBpY2tlcicsXG4gICAgICAgICdbY2xhc3MucmVxdWlyZWRdJzogJ3JlcXVpcmVkJyxcbiAgICAgICAgJ1tjbGFzcy5yZWFkb25seV0nOiAncmVhZG9ubHknLFxuICAgICAgICAnW2NsYXNzLmRpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgICAgICdbY2xhc3MuZ3JvdXBlZF0nOiAnZ3JvdXBlZCcsXG4gICAgICAgICdbY2xhc3MuZXJyb3JdJzogJ2Vycm9yJ1xuICAgIH0sXG4gICAgaW5wdXRzOiBbJ3JlcXVpcmVkJywgJ3JlYWRvbmx5JywgJ2Rpc2FibGVkJywgJ2dyb3VwZWQnLCAnaGlkZUVycm9ycyddLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIEJiRGF0ZVBpY2tlciBleHRlbmRzIEJiRmlsZVBpY2tlck1peGluQmFzZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSwgSXNSZXF1aXJlZCwgSXNSZWFkb25seSwgQ2FuRGlzYWJsZSwgSXNHcm91cGVkLCBIYXNFcnJvciwgQ2FuSGlkZUVycm9ycyB7XG5cbiAgICAvLyBSZWFkb25seSBkYXRhLlxuICAgIHJlYWRvbmx5IF95ZWFyUmVnZXggPSAvXigxMHxbMS05XVswLTldKVxcZHsyfSQvOyAvLyBOb3RlOiAxMDAwIC0gOTk5OVxuXG4gICAgLy8gSW5wdXRzLlxuICAgIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gICAgQElucHV0KCkgaGludDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICAgIEBJbnB1dCgpIGRheVBsYWNlaG9sZGVyOiBzdHJpbmcgfCBudWxsID0gJ2RkJztcbiAgICBASW5wdXQoKSBtb250aFBsYWNlaG9sZGVyOiBzdHJpbmcgfCBudWxsID0gJ21tJztcbiAgICBASW5wdXQoKSB5ZWFyUGxhY2Vob2xkZXI6IHN0cmluZyB8IG51bGwgPSAneXl5eSc7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCB5ZWFycyh2YWx1ZTogW3N0cmluZyB8IG51bWJlciwgc3RyaW5nIHwgbnVtYmVyXSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5wYXJzZVllYXJzKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBGb3Jtcy5cbiAgICBmb3JtOiBGb3JtR3JvdXA7XG4gICAgdHJhY2tCeVZhbHVlID0gKF8sIGl0ZW0pID0+IGl0ZW0/LnZhbHVlO1xuXG4gICAgLy8gRGF0YS5cbiAgICBkYXRhJDogT2JzZXJ2YWJsZTx7XG4gICAgICAgIGRheXM/OiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfVtdLFxuICAgICAgICBtb250aHM/OiB7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfVtdLFxuICAgICAgICB5ZWFycz86IG51bWJlcltdIHwgbnVsbFxuICAgIH0+O1xuICAgIHllYXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10gfCBudWxsPihudWxsKTtcblxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVRvRGF0ZVN0cmluZyh0aGlzLmZvcm0/LnZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlRGF0ZVN0cmluZ0luRm9ybSh2YWx1ZSk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+KCk7XG5cbiAgICAvLyBTdWJzY3JpcHRpb25zLlxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgICBASW5qZWN0KExPQ0FMSVpFX0lEKSBwcml2YXRlIF9sb2NhbGl6ZUlkOiBPYnNlcnZhYmxlPHN0cmluZz4pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jb21wb3NlRm9ybSgpO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIHRoaXMucGFyc2VEYXRlU3RyaW5nSW5Gb3JtKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKG1ldGhvZDogKF86IHN0cmluZyB8IG51bGwpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gbWV0aG9kO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKG1ldGhvZDogKCkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gbWV0aG9kO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA/IHRoaXMuZm9ybT8uZGlzYWJsZSgpIDogdGhpcy5mb3JtPy5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgfTtcblxuICAgIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIH07XG5cbiAgICBvbkVycm9yQ2hhbmdlKGVycm9yOiB7IHRva2VuOiBzdHJpbmcsIGRhdGE/OiBhbnkgfSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5lcnJvciA9ICEhZXJyb3I7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoe3ZhbHVlfTogRm9ybUNvbnRyb2w8c3RyaW5nPikge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5wYXJzZURhdGVTdHJpbmcodmFsdWUpO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0YT8ueWVhciwgZGF0YT8ubW9udGggLSAxLCBkYXRhPy5kYXkpO1xuXG4gICAgICAgIGNvbnN0IG1heERheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKGRhdGE/Lm1vbnRoLCBgJHtkYXRhPy55ZWFyfWApO1xuXG4gICAgICAgIGNvbnN0IGlzSW52YWxpZERhdGUgPSBkYXRlLnRvU3RyaW5nKCkgPT09ICdJbnZhbGlkIERhdGUnO1xuICAgICAgICBjb25zdCBleGNlZWRlZE1heERheXMgPSBkYXRhPy5kYXkgPiBtYXhEYXlzO1xuXG4gICAgICAgIHJldHVybiAoaXNJbnZhbGlkRGF0ZSB8fCBleGNlZWRlZE1heERheXMpICYmIHtcbiAgICAgICAgICAgIGludmFsaWREYXRlOiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2VzKCkge1xuICAgICAgICBjb25zdCBkYXRlT3JOdWxsJCA9IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIG1hcCh2YWx1ZSA9PiB0aGlzLmZvcm1Ub0RhdGVTdHJpbmcodmFsdWUpKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBkYXRlT3JOdWxsJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMudmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzdWJzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YSgpIHtcbiAgICAgICAgY29uc3QgeWVhcnMkID0gdGhpcy55ZWFycyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIGNvbnN0IG1vbnRocyQgPSB0aGlzLmdldE1vbnRoRGF0YSgpO1xuICAgICAgICBjb25zdCBkYXlzJCA9IHRoaXMuZ2V0RGF5RGF0YSgpO1xuXG4gICAgICAgIHRoaXMuZGF0YSQgPSBjb21iaW5lTGF0ZXN0KFt5ZWFycyQsIG1vbnRocyQsIGRheXMkXSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoW3llYXJzLCBtb250aHMsIGRheXNdKSA9PiAoe3llYXJzLCBtb250aHMsIGRheXN9KSksXG4gICAgICAgICAgICB0YXAoZGF0YSA9PiB0aGlzLnZlcmlmeUxpc3REYXRhKGRhdGE/LmRheXM/Lmxlbmd0aCwgZGF0YT8ueWVhcnMpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmVyaWZ5TGlzdERhdGEobWF4RGF5czogbnVtYmVyLCB5ZWFyczogbnVtYmVyW10gfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IGRheUNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCdkYXknKTtcbiAgICAgICAgaWYgKGRheUNvbnRyb2w/LnZhbHVlICE9PSBudWxsICYmIGRheUNvbnRyb2w/LnZhbHVlID4gbWF4RGF5cykge1xuICAgICAgICAgICAgZGF5Q29udHJvbC5wYXRjaFZhbHVlKG1heERheXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeWVhckNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCd5ZWFyJyk7XG4gICAgICAgIGlmICh5ZWFycyAhPT0gbnVsbCAmJiB5ZWFyQ29udHJvbD8udmFsdWUgIT09IG51bGwgJiYgdGhpcy5feWVhclJlZ2V4LnRlc3QoeWVhckNvbnRyb2w/LnZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gTnVtYmVyKHllYXJDb250cm9sPy52YWx1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0WWVhciA9IE1hdGgubWluKC4uLnllYXJzKTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RZZWFyID0gTWF0aC5tYXgoLi4ueWVhcnMpO1xuXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRZZWFyIDwgZmlyc3RZZWFyIHx8IHNlbGVjdGVkWWVhciA+IGxhc3RZZWFyKSB7XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB5ZWFyQ29udHJvbC5wYXRjaFZhbHVlKG51bGwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF5RGF0YSgpIHtcbiAgICAgICAgY29uc3QgY291bnQkID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybT8udmFsdWUgYXMgb2JqZWN0KSxcbiAgICAgICAgICAgIG1hcCgoe21vbnRoLCB5ZWFyfSkgPT4gdGhpcy5nZXREYXlzSW5Nb250aChtb250aCwgeWVhcikpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBjb3VudCQucGlwZShcbiAgICAgICAgICAgIG1hcChjb3VudCA9PiBBcnJheShjb3VudCkuZmlsbCgwKS5tYXAoKF8sIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBgJHtpbmRleCArIDF9YCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogaW5kZXggKyAxXG4gICAgICAgICAgICB9KSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNb250aERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6ZUlkLnBpcGUoXG4gICAgICAgICAgICBtYXAobG9jYWxlID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkoMTIpLmZpbGwoMCkubWFwKChfLCBtb250aCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMjAwMCwgbW9udGgsIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGZvcm1hdERhdGUoZGF0ZSwgJ0xMTEwnLCBsb2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2xhYmVsLCB2YWx1ZTogbW9udGggKyAxfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wb3NlRm9ybSgpIHtcbiAgICAgICAgY29uc3Qge3JlcXVpcmVkLCBwYXR0ZXJuLCBtaW5MZW5ndGgsIG1heExlbmd0aH0gPSBWYWxpZGF0b3JzO1xuICAgICAgICBjb25zdCB5ZWFyUGF0dGVybiA9IHBhdHRlcm4odGhpcy5feWVhclJlZ2V4KTtcbiAgICAgICAgY29uc3QgeWVhclZhbGlkYXRvcnMgPSBbcmVxdWlyZWQsIHllYXJQYXR0ZXJuLCBtaW5MZW5ndGgoNCksIG1heExlbmd0aCg0KV07XG5cbiAgICAgICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgICAgICBkYXk6IG5ldyBGb3JtQ29udHJvbDxudW1iZXI+KG51bGwsIHJlcXVpcmVkKSxcbiAgICAgICAgICAgIG1vbnRoOiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyPihudWxsLCByZXF1aXJlZCksXG4gICAgICAgICAgICB5ZWFyOiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyPihudWxsLCB5ZWFyVmFsaWRhdG9ycylcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZURhdGVTdHJpbmdJbkZvcm0odmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhlIGRhdGUgc3RyaW5nIHdhcyBub3QgYSB2YWxpZCBmb3JtYXQsIHJlc2V0IHRoZSBmb3JtLlxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZERhdGVTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0/LnJlc2V0KHt5ZWFyOiBudWxsLCBtb250aDogbnVsbCwgZGF5OiBudWxsfSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBhcnNlIHRoZSBkYXRlIHN0cmluZyBhbmQgc2F2ZSBpbiB0aGUgZm9ybS5cbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMucGFyc2VEYXRlU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgY29uc3QgeWVhciA9IGRhdGE/LnllYXIgIT09IG51bGwgJiYgZGF0YT8ueWVhciAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMucGFkU3RyaW5nKGAke2RhdGE/LnllYXJ9YCwgNCwgJzAnKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IHsuLi4oZGF0YSA/PyB7fSksIHllYXJ9O1xuXG4gICAgICAgIHRoaXMuZm9ybT8ucGF0Y2hWYWx1ZShmb3JtRGF0YSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlRGF0ZVN0cmluZyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkRGF0ZVN0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFyc2UgdGhlIGRhdGUgc3RyaW5nLlxuICAgICAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSB2YWx1ZT8uc3BsaXQoJy0nKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF5OiBkYXkgPyBwYXJzZUludChkYXksIDEwKSA6IG51bGwsXG4gICAgICAgICAgICBtb250aDogbW9udGggPyBwYXJzZUludChtb250aCwgMTApIDogbnVsbCxcbiAgICAgICAgICAgIHllYXI6IHllYXIgPyBwYXJzZUludCh5ZWFyLCAxMCkgOiBudWxsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZVllYXJzKHZhbHVlczogW3N0cmluZyB8IG51bWJlciwgc3RyaW5nIHwgbnVtYmVyXSB8IG51bGwpIHtcbiAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnllYXJzJC5uZXh0KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFyc2UgdGhlIHZhbHVlcyB0byB5ZWFycyAoaW4gbnVtYmVycykuXG4gICAgICAgIGNvbnN0IFtmaXJzdCwgbGFzdF0gPSB2YWx1ZXM7XG4gICAgICAgIGNvbnN0IGZpcnN0WWVhciA9IHRoaXMucGFyc2VZZWFyRm9ybWF0KGZpcnN0KTtcbiAgICAgICAgY29uc3QgbGFzdFllYXIgPSB0aGlzLnBhcnNlWWVhckZvcm1hdChsYXN0KTtcblxuICAgICAgICAvLyBDaGVjayBjYXNlcyBpbiB3aGVyZSB3ZSBjYW5ub3QgcGFyc2UuXG4gICAgICAgIGlmIChmaXJzdFllYXIgPT09IG51bGwgfHwgbGFzdFllYXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnllYXJzJC5uZXh0KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IGZpcnN0WWVhciAtIGxhc3RZZWFyO1xuICAgICAgICBjb25zdCBhYnNvbHV0ZURpZmZlcmVuY2UgPSBNYXRoLmFicyhkaWZmZXJlbmNlKSArIDE7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IHdpdGggeWVhcnMuXG4gICAgICAgIGNvbnN0IHllYXJzID0gQXJyYXkoYWJzb2x1dGVEaWZmZXJlbmNlKVxuICAgICAgICAgICAgLmZpbGwoMClcbiAgICAgICAgICAgIC5tYXAoKF8sIGluZGV4KSA9PiBkaWZmZXJlbmNlIDwgMCA/IChmaXJzdFllYXIgKyBpbmRleCkgOiAoZmlyc3RZZWFyIC0gaW5kZXgpKTtcblxuICAgICAgICAvLyBWYWxpZGF0ZSB3ZSBoYXZlIG9uZSBvciBtb3JlIHllYXJzLlxuICAgICAgICBpZiAoeWVhcnM/Lmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy55ZWFycyQubmV4dChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFB1c2ggdGhlIHllYXJzLlxuICAgICAgICByZXR1cm4gdGhpcy55ZWFycyQubmV4dCh5ZWFycyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtVG9EYXRlU3RyaW5nID0gKHt5ZWFyLCBtb250aCwgZGF5fSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtPy5pbnZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByZWZpeGVkTW9udGggPSB0aGlzLnBhZFN0cmluZyhgJHttb250aH1gLCAyLCAnMCcpO1xuICAgICAgICBjb25zdCBwcmVmaXhlZERheSA9IHRoaXMucGFkU3RyaW5nKGAke2RheX1gLCAyLCAnMCcpO1xuXG4gICAgICAgIHJldHVybiBbeWVhciwgcHJlZml4ZWRNb250aCwgcHJlZml4ZWREYXldLmpvaW4oJy0nKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBwYXJzZVllYXJGb3JtYXQgPSAodmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIHZhbHVlIHRvIGEgZGVmaW5pdGl2ZSBzdHJpbmcuXG4gICAgICAgIGNvbnN0IHllYXJTdHJpbmcgPSBgJHt2YWx1ZX1gO1xuICAgICAgICBjb25zdCBjdXJyZW50RnVsbFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgLy8gSGFuZGxlIGRlZmF1bHQgXCJjdXJyZW50XCIgc3ludGF4LlxuICAgICAgICBpZiAoeWVhclN0cmluZyA9PT0gJ2N1cnJlbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEZ1bGxZZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIFwiY3VycmVudCArIHthbW91bnR9XCIgc3ludGF4LlxuICAgICAgICBpZiAoL15jdXJyZW50XFxzP1xcK1xccz9cXGQrJC8udGVzdCh5ZWFyU3RyaW5nKSkge1xuICAgICAgICAgICAgY29uc3QgYW1vdW50ID0gTnVtYmVyKHllYXJTdHJpbmc/LnNwbGl0KCcrJyk/LlsxXT8udHJpbSgpKSA/PyAwO1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRGdWxsWWVhciArIGFtb3VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSBcImN1cnJlbnQgLSB7YW1vdW50fVwiIHN5bnRheC5cbiAgICAgICAgaWYgKC9eY3VycmVudFxccz8tXFxzP1xcZCskLy50ZXN0KHllYXJTdHJpbmcpKSB7XG4gICAgICAgICAgICBjb25zdCBhbW91bnQgPSBOdW1iZXIoeWVhclN0cmluZz8uc3BsaXQoJy0nKT8uWzFdPy50cmltKCkpID8/IDA7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudEZ1bGxZZWFyIC0gYW1vdW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxpbmcgdGhlIGRlZmF1bHQgbnVtYmVyIGNhc2UuXG4gICAgICAgIGlmICgvXlswLTldezR9JC8udGVzdCh5ZWFyU3RyaW5nKSkge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih5ZWFyU3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIGNvdWxkIG5vdCBwYXJzZSBpdC5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHByaXZhdGUgZ2V0RGF5c0luTW9udGggPSAobW9udGg6IG51bWJlciB8IG51bGwgPSBudWxsLCB5ZWFyOiBzdHJpbmcgfCBudWxsID0gbnVsbCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtPy5pbnZhbGlkIHx8IG1vbnRoID09PSBudWxsIHx8IHllYXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAzMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNlZFllYXIgPSBwYXJzZUludCh5ZWFyLCAxMCk7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShwYXJzZWRZZWFyLCBtb250aCwgMCkuZ2V0RGF0ZSgpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGlzVmFsaWREYXRlU3RyaW5nID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIC9eWzAtOV17NH0tWzAtOV17Mn0tWzAtOV17Mn0kLy50ZXN0KHZhbHVlKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBwYWRTdHJpbmcgPSAodmFsdWU6IHN0cmluZywgbWF4TGVuZ3RoOiBudW1iZXIsIGZpbGxTdHJpbmc6IHN0cmluZyA9ICcwJykgPT4ge1xuICAgICAgICBjb25zdCBjb3VudCA9IG1heExlbmd0aCAtIHZhbHVlLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyBpbmRleCsrKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGAke2ZpbGxTdHJpbmd9JHt2YWx1ZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG5cbn1cbiIsIjwhLS0gTGFiZWwgb2YgdGhlIGRhdGUgcGlja2VyLiAtLT5cbjxsYWJlbCAqbmdJZj1cImxhYmVsIGFzIGxhYmVsQ29udGVudFwiXG4gICAgICAgY2xhc3M9XCJiYi1kYXRlLXBpY2tlci1sYWJlbFwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbYmJUZW1wbGF0ZV09XCJsYWJlbENvbnRlbnRcIj5cbiAgICAgICAge3sgbGFiZWxDb250ZW50IH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbGFiZWw+XG5cbjwhLS0gVGhlIGZvcm0gY29udGFpbmluZyB0aGUgeWVhci9tb250aC9kYXkgZmllbGRzLiAtLT5cbjxmb3JtICpuZ0lmPVwiZGF0YSQgfCBhc3luYyBhcyBkYXRhXCJcbiAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICBjbGFzcz1cImJiLWRhdGUtcGlja2VyLWNvbnRhaW5lclwiXG4gICAgICBub3ZhbGlkYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJiYi1kYXRlLXBpY2tlci1pdGVtXCI+XG4gICAgICAgIDxiYi1mb3JtLWNvbnRyb2wgaGlkZUVycm9ycz5cbiAgICAgICAgICAgIDxzZWxlY3QgW2NsYXNzLmhhcy12YWx1ZV09XCIhIWZvcm0/LmdldCgnZGF5Jyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgYmJJbnB1dFxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkYXlcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIm51bGxcIj57eyBkYXlQbGFjZWhvbGRlciB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGRheSBvZiBkYXRhPy5kYXlzOyB0cmFja0J5OiB0cmFja0J5VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwiZGF5Py52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBkYXk/LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9iYi1mb3JtLWNvbnRyb2w+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJiLWRhdGUtcGlja2VyLWl0ZW1cIj5cbiAgICAgICAgPGJiLWZvcm0tY29udHJvbCBoaWRlRXJyb3JzPlxuICAgICAgICAgICAgPHNlbGVjdCBbY2xhc3MuaGFzLXZhbHVlXT1cIiEhZm9ybT8uZ2V0KCdtb250aCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIGJiSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibW9udGhcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIm51bGxcIj57eyBtb250aFBsYWNlaG9sZGVyIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbW9udGggb2YgZGF0YT8ubW9udGhzOyB0cmFja0J5OiB0cmFja0J5VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVmFsdWVdPVwibW9udGg/LnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG1vbnRoPy5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvYmItZm9ybS1jb250cm9sPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJiYi1kYXRlLXBpY2tlci1pdGVtXCI+XG4gICAgICAgIDxiYi1mb3JtLWNvbnRyb2wgaGlkZUVycm9ycz5cbiAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJkYXRhPy55ZWFycz8ubGVuZ3RoID4gMDsgZWxzZSBkZWZhdWx0WWVhcklucHV0VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaGFzLXZhbHVlXT1cIiEhZm9ybT8uZ2V0KCd5ZWFyJyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgYmJJbnB1dFxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ5ZWFyXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJudWxsXCI+e3sgeWVhclBsYWNlaG9sZGVyIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgeWVhciBvZiBkYXRhPy55ZWFyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwieWVhclwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB5ZWFyIH19XG4gICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0WWVhcklucHV0VGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGlucHV0IFtwbGFjZWhvbGRlcl09XCJ5ZWFyUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICBiYklucHV0XG4gICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRtb2RlPVwibnVtZXJpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgIG1pbmxlbmd0aD1cIjRcIlxuICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIl5bMC05XXs0fSRcIlxuICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ5ZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2JiLWZvcm0tY29udHJvbD5cbiAgICA8L2Rpdj5cbjwvZm9ybT5cblxuPCEtLSBUaGUgZGF0ZSBwaWNrZXIgZXJyb3IuIC0tPlxuPGJiLWZvcm0tZXJyb3IgKm5nSWY9XCIhaGlkZUVycm9yc1wiXG4gICAgICAgICAgICAgICAoZXJyb3JDaGFuZ2UpPVwib25FcnJvckNoYW5nZSgkZXZlbnQpXCI+XG48L2JiLWZvcm0tZXJyb3I+XG5cbjwhLS0gVGhlIGRhdGUgcGlja2VyIGhpbnQuIC0tPlxuPHAgKm5nSWY9XCJoaW50IGFzIGhpbnRDb250ZW50XCJcbiAgIGNsYXNzPVwiYmItZGF0ZS1waWNrZXItaGludFwiPlxuICAgIDxuZy10ZW1wbGF0ZSBbYmJUZW1wbGF0ZV09XCJoaW50Q29udGVudFwiPlxuICAgICAgICB7eyBoaW50Q29udGVudCB9fVxuICAgIDwvbmctdGVtcGxhdGU+XG48L3A+XG4iXX0=
@@ -948,8 +948,9 @@ class BbDatePicker extends BbFilePickerMixinBase {
948
948
  this.parseDateStringInForm(value);
949
949
  this.valueChange.emit(this.value);
950
950
  }
951
- constructor(_localizeId) {
951
+ constructor(_changeDetectorRef, _localizeId) {
952
952
  super();
953
+ this._changeDetectorRef = _changeDetectorRef;
953
954
  this._localizeId = _localizeId;
954
955
  // Readonly data.
955
956
  this._yearRegex = /^(10|[1-9][0-9])\d{2}$/; // Note: 1000 - 9999
@@ -1038,12 +1039,8 @@ class BbDatePicker extends BbFilePickerMixinBase {
1038
1039
  }
1039
1040
  setDisabledState(isDisabled) {
1040
1041
  this.disabled = isDisabled;
1041
- if (this.disabled) {
1042
- this.form?.disable();
1043
- }
1044
- else {
1045
- this.form?.enable();
1046
- }
1042
+ this.disabled ? this.form?.disable() : this.form?.enable();
1043
+ this._changeDetectorRef.markForCheck();
1047
1044
  }
1048
1045
  onErrorChange(error) {
1049
1046
  this.error = !!error;
@@ -1169,7 +1166,7 @@ class BbDatePicker extends BbFilePickerMixinBase {
1169
1166
  // Push the years.
1170
1167
  return this.years$.next(years);
1171
1168
  }
1172
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: BbDatePicker, deps: [{ token: LOCALIZE_ID }], target: i0.ɵɵFactoryTarget.Component }); }
1169
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: BbDatePicker, deps: [{ token: i0.ChangeDetectorRef }, { token: LOCALIZE_ID }], target: i0.ɵɵFactoryTarget.Component }); }
1173
1170
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: BbDatePicker, selector: "bb-date-picker", inputs: { required: "required", readonly: "readonly", disabled: "disabled", grouped: "grouped", hideErrors: "hideErrors", label: "label", hint: "hint", dayPlaceholder: "dayPlaceholder", monthPlaceholder: "monthPlaceholder", yearPlaceholder: "yearPlaceholder", years: "years", value: "value" }, outputs: { valueChange: "valueChange" }, host: { properties: { "class.required": "required", "class.readonly": "readonly", "class.disabled": "disabled", "class.grouped": "grouped", "class.error": "error" }, classAttribute: "bb-date-picker" }, providers: [
1174
1171
  {
1175
1172
  provide: NG_VALUE_ACCESSOR,
@@ -1204,7 +1201,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImpor
1204
1201
  '[class.grouped]': 'grouped',
1205
1202
  '[class.error]': 'error'
1206
1203
  }, inputs: ['required', 'readonly', 'disabled', 'grouped', 'hideErrors'], preserveWhitespaces: false, template: "<!-- Label of the date picker. -->\n<label *ngIf=\"label as labelContent\"\n class=\"bb-date-picker-label\">\n <ng-template [bbTemplate]=\"labelContent\">\n {{ labelContent }}\n </ng-template>\n</label>\n\n<!-- The form containing the year/month/day fields. -->\n<form *ngIf=\"data$ | async as data\"\n [formGroup]=\"form\"\n class=\"bb-date-picker-container\"\n novalidate>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('day')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"day\">\n <option [ngValue]=\"null\">{{ dayPlaceholder }}</option>\n <option *ngFor=\"let day of data?.days; trackBy: trackByValue\"\n [ngValue]=\"day?.value\">\n {{ day?.label }}\n </option>\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('month')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"month\">\n <option [ngValue]=\"null\">{{ monthPlaceholder }}</option>\n <option *ngFor=\"let month of data?.months; trackBy: trackByValue\"\n [ngValue]=\"month?.value\">\n {{ month?.label }}\n </option>\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select *ngIf=\"data?.years?.length > 0; else defaultYearInputTemplate\"\n [class.has-value]=\"!!form?.get('year')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"year\">\n <option [ngValue]=\"null\">{{ yearPlaceholder }}</option>\n <option *ngFor=\"let year of data?.years\"\n [value]=\"year\">\n {{ year }}\n </option>\n </select>\n\n <ng-template #defaultYearInputTemplate>\n <input [placeholder]=\"yearPlaceholder\"\n bbInput\n type=\"text\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n pattern=\"^[0-9]{4}$\"\n formControlName=\"year\"\n autocomplete=\"off\">\n </ng-template>\n </bb-form-control>\n </div>\n</form>\n\n<!-- The date picker error. -->\n<bb-form-error *ngIf=\"!hideErrors\"\n (errorChange)=\"onErrorChange($event)\">\n</bb-form-error>\n\n<!-- The date picker hint. -->\n<p *ngIf=\"hint as hintContent\"\n class=\"bb-date-picker-hint\">\n <ng-template [bbTemplate]=\"hintContent\">\n {{ hintContent }}\n </ng-template>\n</p>\n", styles: [".bb-date-picker{display:block}.bb-date-picker.required>.bb-date-picker-label:after{content:\"*\";color:#c23934;font-size:12px;line-height:1.5}.bb-date-picker.readonly{pointer-events:none}.bb-date-picker.readonly .bb-form-control-container{cursor:default;border:1px dotted #bdc4c9;background-color:#f9f9f9!important}.bb-date-picker.readonly .bb-form-control-container>select:disabled{opacity:1}.bb-date-picker.grouped{margin-bottom:20px}.bb-date-picker.error>.bb-date-picker-label{color:#c23934}.bb-date-picker.error .bb-form-control-container{border:1px solid #962b26;background-color:#c2393440!important;box-shadow:inset 0 3px #b7bcc233,0 6px 6px -6px #0000001a,0 0 0 3px #c2393466!important}.bb-date-picker-label{color:#000;display:block;font-size:16px;font-weight:500;margin-bottom:4px}.bb-date-picker-container{display:flex}.bb-date-picker-item{flex:1}.bb-date-picker-item>bb-form-control.focused{z-index:1;position:relative}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select>option:first-child{color:#d2d2d2}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select:not(.has-value){color:#d2d2d2}.bb-date-picker-item>.bb-form-control>.bb-form-control-container>select:not(.has-value)>option:not(:first-child){color:#000}.bb-date-picker-item:not(:first-child):not(:last-child) .bb-form-control-container{border-radius:0!important}.bb-date-picker-item:first-child .bb-form-control-container{border-right:none!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.bb-date-picker-item:last-child .bb-form-control-container{border-left:none!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important}.bb-date-picker-hint{display:block;color:#738694;font-size:13px;margin-top:4px;pointer-events:all}\n"] }]
1207
- }], ctorParameters: () => [{ type: i8.Observable, decorators: [{
1204
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i8.Observable, decorators: [{
1208
1205
  type: Inject,
1209
1206
  args: [LOCALIZE_ID]
1210
1207
  }] }], propDecorators: { label: [{
@@ -1 +1 @@
1
- {"version":3,"file":"bravobit-bb-foundation-elements.mjs","sources":["../../../projects/bb-foundation/elements/src/lib/dropdown/dropdown.component.ts","../../../projects/bb-foundation/elements/src/lib/dropdown/dropdown.component.html","../../../projects/bb-foundation/elements/src/lib/elements.interfaces.ts","../../../projects/bb-foundation/elements/src/lib/directives/form-submitter.directive.ts","../../../projects/bb-foundation/elements/src/lib/spinner/spinner.component.ts","../../../projects/bb-foundation/elements/src/lib/spinner/spinner.component.html","../../../projects/bb-foundation/elements/src/lib/button/button.component.ts","../../../projects/bb-foundation/elements/src/lib/button/button.component.html","../../../projects/bb-foundation/elements/src/lib/image-picker/image-picker.component.ts","../../../projects/bb-foundation/elements/src/lib/image-picker/image-picker.component.html","../../../projects/bb-foundation/elements/src/lib/directives/form-submit.directive.ts","../../../projects/bb-foundation/elements/src/lib/form-error/form-error.component.ts","../../../projects/bb-foundation/elements/src/lib/form-error/form-error.component.html","../../../projects/bb-foundation/elements/src/lib/form-control/form-control.component.ts","../../../projects/bb-foundation/elements/src/lib/form-control/form-control.component.html","../../../projects/bb-foundation/elements/src/lib/pipes/file-size.pipe.ts","../../../projects/bb-foundation/elements/src/lib/pipes/file-image.pipe.ts","../../../projects/bb-foundation/elements/src/lib/file-picker/file-picker.component.ts","../../../projects/bb-foundation/elements/src/lib/file-picker/file-picker.component.html","../../../projects/bb-foundation/elements/src/lib/directives/input.directive.ts","../../../projects/bb-foundation/elements/src/lib/date-picker/date-picker.component.ts","../../../projects/bb-foundation/elements/src/lib/date-picker/date-picker.component.html","../../../projects/bb-foundation/elements/src/lib/directives/addon.directive.ts","../../../projects/bb-foundation/elements/src/lib/form-group/form-group.component.ts","../../../projects/bb-foundation/elements/src/lib/form-group/form-group.component.html","../../../projects/bb-foundation/elements/src/lib/pipes/relative-time.pipe.ts","../../../projects/bb-foundation/elements/src/lib/checkbox/checkbox.component.ts","../../../projects/bb-foundation/elements/src/lib/checkbox/checkbox.component.html","../../../projects/bb-foundation/elements/src/lib/avatar/avatar.component.ts","../../../projects/bb-foundation/elements/src/lib/avatar/avatar.component.html","../../../projects/bb-foundation/elements/src/lib/icon/icon.component.ts","../../../projects/bb-foundation/elements/src/lib/icon/icon.component.html","../../../projects/bb-foundation/elements/src/lib/tag/tag.component.ts","../../../projects/bb-foundation/elements/src/lib/tag/tag.component.html","../../../projects/bb-foundation/elements/src/lib/elements.module.ts","../../../projects/bb-foundation/elements/src/bravobit-bb-foundation-elements.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n Host,\n HostListener,\n Input,\n Optional,\n ViewEncapsulation\n} from '@angular/core';\nimport {animate, style, transition, trigger} from '@angular/animations';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'bb-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-dropdown'},\n preserveWhitespaces: false,\n animations: [\n trigger('dropdownMenuAnimation', [\n transition(':enter', [\n // 1. Set the initial state.\n style({opacity: 0, transform: 'scale(0.9)'}),\n // 2. Start the animation to show the item.\n animate('80ms cubic-bezier(0, 0, .2, 1)', style({opacity: 1, transform: 'scale(1)'}))\n ]),\n transition(':leave', [\n // 1. Set the initial state.\n style({opacity: 1, transform: 'scale(1)'}),\n // 2. Start the animation to hide the item.\n animate('80ms cubic-bezier(0, 0, .2, 1)', style({opacity: 0, transform: 'scale(0.9)'}))\n ])\n ])\n ]\n\n})\nexport class BbDropdown {\n\n // State.\n visible$ = new BehaviorSubject<boolean>(false);\n\n constructor(private _elementRef: ElementRef) {\n }\n\n toggle() {\n return this.visible$.next(!this.visible$.getValue());\n }\n\n close() {\n return this.visible$.next(false);\n }\n\n @HostListener('document:click', ['$event.target'])\n onDocumentClick(target: HTMLElement) {\n if (!target) {\n return;\n }\n\n if (this._elementRef?.nativeElement?.contains(target)) {\n return;\n }\n\n return this.close();\n }\n\n}\n\n@Directive({\n selector: '[bbDropdownItem]',\n host: {\n 'class': 'bb-dropdown-item'\n }\n})\nexport class BbDropdownItem {\n\n // Inputs.\n @Input() closeOnClick: boolean = true;\n\n constructor(@Optional() @Host() private _parent?: BbDropdown) {\n }\n\n @HostListener('click')\n onClick() {\n if (!this.closeOnClick) {\n return;\n }\n\n this._parent?.close();\n }\n\n}\n","<button (click)=\"toggle()\"\n [class.opened]=\"visible$ | async\"\n type=\"button\">\n <ng-content></ng-content>\n</button>\n\n<div *ngIf=\"visible$ | async\"\n [@dropdownMenuAnimation]=\"true\"\n class=\"bb-dropdown-menu\"\n role=\"list\">\n <ng-content select=\"[bbDropdownItem], hr\"></ng-content>\n</div>\n","import {InjectionToken} from '@angular/core';\n\nexport const ELEMENTS_ICONS: InjectionToken<ElementsIcon[]> = new InjectionToken('elements_icons');\nexport const ELEMENTS_ERRORS: InjectionToken<ElementsError[]> = new InjectionToken('elements_errors');\n\nexport type ElementsIcon = ElementsIconFont | ElementsIconImage | ElementsIconUnknown;\nexport type ElementsError = { [error: string]: (data?: any) => string | { token: string, data?: any }; };\n\nexport interface ElementsIconFont {\n namespace: string;\n className: string;\n uses: 'content' | 'data-attribute';\n type: 'font';\n}\n\nexport interface ElementsIconImage {\n namespace: string;\n name: string;\n src: string;\n type: 'image';\n}\n\nexport interface ElementsIconUnknown {\n type: 'unknown';\n}\n","import {Directive} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\n\n@Directive({\n selector: '[bbFormSubmitter]',\n exportAs: 'bbFormSubmitter'\n})\nexport class BbFormSubmitter {\n\n // State.\n submitted$ = new BehaviorSubject<boolean>(false);\n\n submit() {\n this.submitted$.next(true);\n }\n\n reset() {\n this.submitted$.next(false);\n }\n\n}\n","import {ChangeDetectionStrategy, Component, Input, ViewEncapsulation} from '@angular/core';\nimport {CanDisable, CanDisableConstructor, mixinDisabled} from '@bravobit/bb-foundation';\n\nclass BbSpinnerBase {\n}\n\nconst BbSpinnerMixinBase: CanDisableConstructor\n & typeof BbSpinnerBase\n = mixinDisabled(BbSpinnerBase);\n\n@Component({\n selector: 'bb-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-spinner'},\n inputs: ['color', 'alt', 'disabled'],\n preserveWhitespaces: false\n})\nexport class BbSpinner extends BbSpinnerMixinBase implements CanDisable {\n\n // Inputs.\n @Input() color: string = '#303f9f';\n @Input() alt: string = 'Loading...';\n\n}\n","<!--\n The spinner element.\n\n This element contains a circle with a 25% bar that spins\n indefinitely. The border color can be set via the \"color\"\n property.\n-->\n<div class=\"bb-spinner-container\">\n <div [style.border-left-color]=\"color\"\n [class.disabled]=\"disabled\"\n class=\"bb-spinner-loader\"\n aria-live=\"assertive\"\n role=\"alert\">\n {{ alt }}\n </div>\n <ng-content select=\"img\"></ng-content>\n</div>\n\n<!--\n The content of the spinner.\n\n This element contains the content of the spinner. The user\n can set the content inside the tag.\n-->\n<span class=\"bb-spinner-content\">\n <ng-content></ng-content>\n</span>\n","import {\n CanLoad,\n CanLoadConstructor,\n mixinLoad,\n CanDisable,\n CanDisableConstructor,\n mixinDisabled\n} from '@bravobit/bb-foundation';\nimport {ChangeDetectionStrategy, Component, ElementRef, Input, ViewEncapsulation} from '@angular/core';\n\nclass BbButtonBase {\n constructor(public _elementRef: ElementRef) {\n }\n}\n\nconst BbButtonMixinBase: CanDisableConstructor & CanLoadConstructor\n & typeof BbButtonBase = mixinDisabled(mixinLoad(BbButtonBase));\n\n@Component({\n selector: 'button[bb-button]',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n exportAs: 'bbButton',\n host: {\n 'class': 'bb-button',\n '[class.loading]': 'loading',\n '[attr.disabled]': 'disabled || loading || null'\n },\n inputs: ['disabled', 'loading'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BbButton extends BbButtonMixinBase implements CanDisable, CanLoad {\n\n get nativeElement() {\n return this._elementRef.nativeElement;\n }\n\n constructor(_elementRef: ElementRef<HTMLButtonElement>) {\n super(_elementRef);\n }\n\n focus() {\n this.nativeElement && this.nativeElement.focus();\n }\n\n}\n\n@Component({\n selector: 'a[bb-button]',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n exportAs: 'bbButton, bbAnchor',\n host: {\n 'class': 'bb-button',\n '[attr.tabindex]': '(disabled || loading) ? -1 : (tabIndex || 0)',\n '[attr.disabled]': 'disabled || loading || null',\n '[attr.aria-disabled]': '(disabled || loading).toString()',\n '(click)': 'stopDisabledEvents($event)'\n },\n inputs: ['disabled', 'loading'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BbAnchor extends BbButton {\n\n // Inputs.\n @Input() tabIndex: number;\n\n constructor(_elementRef: ElementRef) {\n super(_elementRef);\n }\n\n stopDisabledEvents(event: Event) {\n // If the button is not disabled (and not loading) let all events pass.\n if (!this.disabled && !this.loading) {\n return;\n }\n\n // If the button is disabled and/or loading stop\n // the event from bubbling up.\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n}\n","<bb-spinner [class.visible]=\"loading\"\n class=\"bb-button-spinner small\">\n</bb-spinner>\n\n<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ImageConverter,\n CanDisableConstructor,\n mixinDisabled,\n IsGroupedConstructor,\n mixinGrouped\n} from '@bravobit/bb-foundation';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {BehaviorSubject} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nclass BbImagePickerBase {\n}\n\nconst BbImagePickerMixinBase: IsGroupedConstructor\n & CanDisableConstructor\n & typeof BbImagePickerBase\n = mixinDisabled(mixinGrouped(BbImagePickerBase));\n\n@Component({\n selector: 'bb-image-picker',\n templateUrl: './image-picker.component.html',\n styleUrls: ['./image-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-image-picker',\n '[class.disabled]': 'disabled',\n '[class.grouped]': 'grouped'\n },\n inputs: ['grouped', 'disabled'],\n providers: [{provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbImagePicker), multi: true}],\n preserveWhitespaces: false\n})\nexport class BbImagePicker extends BbImagePickerMixinBase implements ControlValueAccessor {\n\n // Views.\n @ViewChild('fileInput', {static: true}) fileInput: ElementRef<HTMLInputElement>;\n\n // Inputs.\n @Input() label: string | null = null;\n @Input() placeholder: string | null = null;\n @Input() styleDimensions: { width: string, height: string } | null = null;\n @Input() cropDimensions: { width: number, height: number } | null = null;\n\n // Form.\n private _value$ = new BehaviorSubject<string | null>(null);\n\n constructor(private _converter: ImageConverter) {\n super();\n }\n\n @Input()\n get value() {\n return this._value$.getValue();\n }\n\n @Output() valueChange = new EventEmitter<string | null>();\n\n set value(value: string | null) {\n this._value$.next(value);\n this.valueChange.emit(value);\n }\n\n get image() {\n return this._value$.pipe(\n map(value => value || this.placeholder),\n map(value => value ? `url(${value})` : null)\n );\n }\n\n async onFileChange(event) {\n // Grab the file from the event.\n const file: File = event.target.files[0];\n\n // Check if the file exists.\n if (!file || this.disabled) {\n return;\n }\n\n try {\n this.value = await this._converter.toDataUri(file, this.cropDimensions);\n } catch (error) {\n this.value = null;\n }\n\n this.onChangeCallback(this.value);\n\n if (this.fileInput && this.fileInput.nativeElement) {\n this.fileInput.nativeElement.value = '';\n }\n }\n\n openFilePicker() {\n if (this.disabled) {\n return;\n }\n\n // Execute a click on the file input.\n this.fileInput\n && this.fileInput.nativeElement\n && this.fileInput.nativeElement.click\n && this.fileInput.nativeElement.click();\n }\n\n onTouchedCallback: () => void = () => {\n };\n\n onChangeCallback: (_: string | null) => void = () => {\n };\n\n writeValue(value: string | null) {\n this.value = value;\n }\n\n registerOnChange(method: (_: string | null) => void) {\n this.onChangeCallback = method;\n }\n\n registerOnTouched(method: () => void) {\n this.onTouchedCallback = method;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n}\n","<!-- The input that can open the file picker. -->\n<input #fileInput\n (change)=\"onFileChange($event)\"\n class=\"bb-image-picker-input\"\n type=\"file\"\n tabindex=\"-1\"\n accept=\"image/*\">\n\n<span [style.width]=\"styleDimensions?.width || '100%'\"\n [style.height]=\"styleDimensions?.height || '215px'\"\n [style.background-image]=\"image | async\"\n class=\"bb-image-input-image\">\n </span>\n\n<button *ngIf=\"label as labelText\"\n (click)=\"openFilePicker()\"\n bb-button\n class=\"bb-image-input-button\"\n type=\"button\">\n {{ labelText }}\n</button>\n","import {distinctUntilChanged, map, shareReplay, startWith} from 'rxjs/operators';\nimport {Directive, ElementRef, OnInit, Optional, Self} from '@angular/core';\nimport {EMPTY, fromEvent, merge, Observable} from 'rxjs';\nimport {FormGroupDirective} from '@angular/forms';\n\n@Directive({\n selector: 'form',\n exportAs: 'bbForm'\n})\nexport class BbFormSubmit implements OnInit {\n\n submitStatus$: Observable<boolean>;\n\n constructor(private _host: ElementRef<HTMLFormElement>,\n @Optional() @Self() private _formDirective: FormGroupDirective) {\n }\n\n ngOnInit() {\n // Submit changes.\n const regularSubmitChanges$ = fromEvent(this.nativeElement, 'submit').pipe(\n map(() => true)\n );\n\n // Reactive form submit changes.\n const reactiveSubmitChanges$ = this.reactiveSubmitChanges();\n\n // Reset changes.\n const resetChanges$ = fromEvent(this.nativeElement, 'reset').pipe(\n map(() => false)\n );\n\n // Listen to the submit status.\n this.submitStatus$ = merge(regularSubmitChanges$, reactiveSubmitChanges$, resetChanges$).pipe(\n startWith(false),\n distinctUntilChanged(),\n shareReplay({refCount: true, bufferSize: 1})\n );\n }\n\n submit() {\n this._formDirective?.ngSubmit?.emit();\n }\n\n reset() {\n return this.nativeElement?.reset();\n }\n\n private get nativeElement() {\n return this._host?.nativeElement;\n }\n\n private reactiveSubmitChanges() {\n if (!this._formDirective) {\n return EMPTY;\n }\n\n return this._formDirective.ngSubmit.pipe(\n map(() => true)\n );\n }\n\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Optional,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport {delay, distinctUntilChanged, map, startWith, tap} from 'rxjs/operators';\nimport {BbFormSubmitter} from '../directives/form-submitter.directive';\nimport {ELEMENTS_ERRORS, ElementsError} from '../elements.interfaces';\nimport {BbFormSubmit} from '../directives/form-submit.directive';\nimport {NgControl, ValidationErrors} from '@angular/forms';\nimport {combineLatest, EMPTY, Observable, of} from 'rxjs';\n\n@Component({\n selector: 'bb-form-error',\n templateUrl: './form-error.component.html',\n styleUrls: ['./form-error.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-form-error'\n },\n preserveWhitespaces: false\n})\nexport class BbFormError implements OnInit {\n\n // Inputs.\n @Input()\n set control(value: NgControl) {\n this._ngControl = value;\n }\n\n get control() {\n return this._ngControl;\n }\n\n // Outputs.\n @Output() errorChange = new EventEmitter<{ token: string, data?: any } | null>();\n\n // State.\n error$: Observable<{ token: string, data?: any } | null>;\n\n // Subscriptions.\n private _ngControl: NgControl | null = null;\n\n constructor(@Optional() private _form?: BbFormSubmit,\n @Optional() private _control?: NgControl,\n @Optional() private _formSubmitter?: BbFormSubmitter,\n @Optional() @Inject(ELEMENTS_ERRORS) private _errors?: ElementsError[]) {\n }\n\n ngOnInit() {\n // Set the control if it was not set before.\n if (!this.control) {\n this.control = this._control;\n }\n\n // Listen for the submit changes\n const submitStatus$ = this.submitStatusChanges();\n\n // An observable that emits error changes.\n const errorChanges$ = this.statusChanges().pipe(\n map(() => this.getError(this.control.errors)),\n distinctUntilChanged(),\n map(error => typeof error === 'string' ? {token: error} : error)\n );\n\n // Whenever the user submitted the form we want to\n // listen for any error changes.\n this.error$ = combineLatest([submitStatus$, errorChanges$]).pipe(\n map(([submitted, error]) => {\n // If not submitted return null.\n if (!submitted) {\n return null;\n }\n\n // Return the error if submitted.\n return error;\n }),\n tap(value => this.errorChange.emit(value))\n );\n }\n\n private getError(errors?: ValidationErrors) {\n // Validate the errors exist.\n if (!errors) {\n return null;\n }\n\n // Get the first error in the errors.\n const [errorName] = Object.keys(errors);\n const error = errors[errorName];\n\n // Validate the error exists.\n if (!error) {\n return null;\n }\n\n // Map the arrays into a object so we can\n // access the functions by a key-lookup.\n const errorFunctions = this._errors.reduce((previous, current) => ({...previous, ...current}), {});\n\n // Get the error function.\n const errorFunction = errorFunctions[errorName] || errorFunctions['unknown'];\n\n // Validate the error function exists.\n if (!errorFunction) {\n return null;\n }\n\n // Return the parsed error.\n return errorFunction(error);\n }\n\n private submitStatusChanges() {\n const native$ = this.getNativeFormSubmit();\n const manual$ = this.getManualFormSubmit();\n return combineLatest([native$, manual$]).pipe(\n map(([native, manual]) => native || manual),\n distinctUntilChanged()\n );\n }\n\n private getNativeFormSubmit() {\n if (!this._form) {\n return of(true);\n }\n\n return this._form.submitStatus$;\n }\n\n private getManualFormSubmit() {\n if (!this._formSubmitter) {\n return of(false);\n }\n\n return this._formSubmitter.submitted$.pipe(\n distinctUntilChanged()\n );\n }\n\n private statusChanges() {\n if (!this.control) {\n return EMPTY;\n }\n\n if (!this.control.statusChanges) {\n return EMPTY;\n }\n\n return this.control.statusChanges.pipe(\n startWith(this.control.status as unknown),\n delay(0)\n );\n }\n\n}\n","<ng-container *ngIf=\"error$ | async as error\">\n <p *ngIf=\"error?.token | bbLocalize:{optional: true, data: error?.data} as message\"\n class=\"bb-form-error-message\">\n {{ message }}\n </p>\n</ng-container>","import {\n IsRequired,\n IsRequiredConstructor,\n mixinRequired,\n CanDisable,\n CanDisableConstructor,\n mixinDisabled,\n IsReadonly,\n IsReadonlyConstructor,\n mixinReadonly,\n IsGrouped,\n IsGroupedConstructor,\n mixinGrouped,\n IsFocused,\n IsFocusedConstructor,\n mixinFocused,\n HasError,\n HasErrorConstructor,\n mixinError,\n CanHideErrors,\n CanHideErrorsConstructor,\n mixinHideErrors\n} from '@bravobit/bb-foundation';\nimport {ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\nlet nextUniqueId = 0;\n\nclass BbFormControlBase {\n}\n\nconst BbFormControlMixinBase: IsRequiredConstructor\n & IsGroupedConstructor\n & IsFocusedConstructor\n & IsReadonlyConstructor\n & CanDisableConstructor\n & HasErrorConstructor\n & CanHideErrorsConstructor\n & typeof BbFormControlBase\n = mixinDisabled(mixinFocused(mixinReadonly(mixinGrouped(mixinRequired(mixinError(mixinHideErrors(BbFormControlBase)))))));\n\n@Component({\n selector: 'bb-form-control',\n templateUrl: './form-control.component.html',\n styleUrls: ['./form-control.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-form-control',\n '[class.readonly]': 'readonly',\n '[class.required]': 'required',\n '[class.disabled]': 'disabled',\n '[class.focused]': 'focused',\n '[class.grouped]': 'grouped',\n '[class.arrow]': 'arrow',\n '[class.error]': 'error'\n },\n inputs: ['grouped', 'hideErrors'],\n preserveWhitespaces: false\n})\nexport class BbFormControl extends BbFormControlMixinBase implements IsRequired, IsFocused, IsReadonly, IsGrouped, CanDisable, HasError, CanHideErrors {\n\n // Views.\n @ContentChild(NgControl) ngControl: NgControl;\n\n // Inputs.\n @Input() label: string | TemplateRef<any> | null = null;\n @Input() hint: string | TemplateRef<any> | null = null;\n\n // Data.\n arrow: boolean = false;\n\n // Data.\n labelId = `bb-form-control-${nextUniqueId++}`;\n\n onErrorChange(error: { token: string, data?: any } | null) {\n this.error = !!error;\n }\n\n}\n","<!-- Label of the form control. -->\n<label *ngIf=\"label as labelContent\"\n [attr.for]=\"labelId\"\n class=\"bb-form-control-label\">\n <ng-template [bbTemplate]=\"labelContent\">\n {{ labelContent }}\n </ng-template>\n</label>\n\n<!-- The input with the addons. -->\n<div class=\"bb-form-control-container\">\n <ng-content select=\"[bbPrefix]\"></ng-content>\n <ng-content select=\"[bbInput]\"></ng-content>\n <ng-content select=\"[bbSuffix]\"></ng-content>\n</div>\n\n<!-- The error component. -->\n<bb-form-error *ngIf=\"!hideErrors\"\n [control]=\"ngControl\"\n (errorChange)=\"onErrorChange($event)\">\n</bb-form-error>\n\n<!-- The form control hint. -->\n<p *ngIf=\"hint as hintContent\"\n class=\"bb-form-control-hint\">\n <ng-template [bbTemplate]=\"hintContent\">\n {{ hintContent }}\n </ng-template>\n</p>\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'bbFileSize'\n})\nexport class BbFileSize implements PipeTransform {\n\n transform(value: number) {\n return this.format(value);\n }\n\n private format = (value: number, decimals: number = 2) => {\n if (value === 0) {\n return '0 Bytes';\n }\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const index = Math.floor(Math.log(value) / Math.log(k));\n\n return parseFloat((value / Math.pow(k, index)).toFixed(dm)) + ' ' + sizes[index];\n };\n\n}\n","import {ImageConverter} from '@bravobit/bb-foundation';\nimport {DomSanitizer} from '@angular/platform-browser';\nimport {Pipe, PipeTransform} from '@angular/core';\nimport {Platform} from '@angular/cdk/platform';\n\n@Pipe({\n name: 'bbFileImage'\n})\nexport class BbFileImage implements PipeTransform {\n\n constructor(private _platform: Platform,\n private _image: ImageConverter,\n private _sanitizer: DomSanitizer) {\n }\n\n async transform(file: File) {\n // If the file is not a file return.\n if (!this._platform.isBrowser || !(file instanceof File)) {\n return null;\n }\n\n return this._image.fileToImage(file, [\n 'image/png',\n 'image/jpeg',\n 'image/webp',\n 'image/gif',\n 'image/svg+xml'\n ]).then(image => {\n if (!image) {\n return null;\n }\n\n return {\n background: this._sanitizer.bypassSecurityTrustStyle(`url(${image.src})`),\n aspectRatio: image.height / image.width\n };\n }).catch(() => {\n return null;\n });\n }\n\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n CanDisable,\n CanDisableConstructor,\n IsGrouped,\n IsGroupedConstructor,\n IsRequired,\n IsRequiredConstructor,\n CanHideErrors,\n CanHideErrorsConstructor,\n HasError,\n HasErrorConstructor,\n mixinDisabled,\n mixinGrouped,\n mixinRequired,\n mixinError,\n mixinHideErrors\n} from '@bravobit/bb-foundation';\nimport {ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {animate, style, transition, trigger} from '@angular/animations';\nimport {BehaviorSubject} from 'rxjs';\n\nlet nextUniqueId = 0;\n\nclass BbFilePickerBase {\n}\n\nconst BbFilePickerMixinBase: IsRequiredConstructor\n & CanDisableConstructor\n & IsGroupedConstructor\n & HasErrorConstructor\n & CanHideErrorsConstructor\n & typeof BbFilePickerBase\n = mixinRequired(mixinDisabled(mixinGrouped(mixinError(mixinHideErrors(BbFilePickerBase)))));\n\n@Component({\n selector: 'bb-file-picker',\n templateUrl: './file-picker.component.html',\n styleUrls: ['./file-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BbFilePicker),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: BbFilePicker,\n multi: true\n }\n ],\n host: {\n 'class': 'bb-file-picker',\n '[class.required]': 'required',\n '[class.disabled]': 'disabled',\n '[class.grouped]': 'grouped',\n '[class.hovered]': 'hovered',\n '[class.error]': 'error'\n },\n animations: [\n trigger('bbFilePickerImageAnimation', [\n transition(':enter', [\n style({opacity: 0}),\n animate('200ms', style({opacity: 1}))\n ]),\n transition(':leave', [\n animate('200ms', style({opacity: 0}))\n ])\n ])\n ],\n inputs: ['disabled', 'hideErrors', 'grouped', 'required'],\n preserveWhitespaces: false\n})\nexport class BbFilePicker extends BbFilePickerMixinBase implements ControlValueAccessor, IsRequired, CanDisable, IsGrouped, HasError, CanHideErrors {\n\n // Views.\n @ViewChild('fileInput', {static: true}) fileInput: ElementRef<HTMLInputElement>;\n @ContentChild('extra') extraTemplate: TemplateRef<any>;\n\n // Inputs.\n @Input() label: string | TemplateRef<any> | null = null;\n @Input() hint: string | TemplateRef<any> | null = null;\n @Input() accept: string | null = null;\n @Input() showImages: boolean = true;\n @Input() allowDragging: boolean = true;\n\n // State.\n labelId = `bb-file-picker-${nextUniqueId++}`;\n hovered: boolean = false;\n value$ = new BehaviorSubject<{ file?: File }>({});\n\n @Input()\n get value() {\n const {file} = this.value$.getValue();\n return file;\n }\n\n @Output() valueChange = new EventEmitter<File | null>();\n\n set value(value: File | null) {\n this.value$.next({file: value});\n this.valueChange.emit(value);\n }\n\n @HostListener('dragover', ['$event', 'true'])\n @HostListener('dragleave', ['$event', 'false'])\n onDrag(event: Event, isHovered: boolean) {\n // Validate the input can support drag.\n if (!this.allowDragging || this.disabled) {\n return;\n }\n\n // Prevent the default event action\n // and start the hovering.\n this.preventDefault(event);\n this.hovered = isHovered;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event: Event) {\n // Validate the input can support drag.\n if (!this.allowDragging || this.disabled) {\n return;\n }\n\n // Prevent the default event action\n // and stop the hovering.\n this.preventDefault(event);\n this.hovered = false;\n\n // Save the file.\n this.saveFile(event['dataTransfer'].files);\n\n // Run the on change callback.\n this.onChangeCallback(this.value);\n }\n\n onButtonPressed(file?: File) {\n if (file) {\n this.value = null;\n this.onChangeCallback(this.value);\n return;\n }\n\n return this.openFilePicker();\n }\n\n openFilePicker() {\n return this.fileInput\n && this.fileInput.nativeElement\n && this.fileInput.nativeElement.click\n && this.fileInput.nativeElement.click();\n }\n\n onFileChange(event: Event) {\n // Validate the input is not disabled.\n if (this.disabled) {\n return;\n }\n\n // Extract the file from the event.\n const fileList = this.getFileListFromEvent(event);\n\n // Save the file.\n this.saveFile(fileList);\n\n // Run the on change callback.\n this.onChangeCallback(this.value);\n\n // Clear the file input.\n if (this.fileInput && this.fileInput.nativeElement) {\n this.fileInput.nativeElement.value = '';\n }\n }\n\n onTouchedCallback: () => void = () => {\n };\n\n onChangeCallback: (_: File | null) => void = () => {\n };\n\n writeValue(value: File | null) {\n this.value = value;\n }\n\n registerOnChange(method: (_: File | null) => void) {\n this.onChangeCallback = method;\n }\n\n registerOnTouched(method: () => void) {\n this.onTouchedCallback = method;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n onErrorChange(error: { token: string, data?: any } | null) {\n this.error = !!error;\n }\n\n validate({value}: FormControl<File>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const regexString = (this.accept || '*')\n .replace(/\\*/g, '.\\*')\n .replace(/,/g, '|');\n const mimeTypeRegex = new RegExp(regexString);\n\n const isNotValid = (typeof File === 'undefined') || !(value instanceof File) || !mimeTypeRegex.test(value?.type);\n return isNotValid && {\n invalidFileType: true\n };\n }\n\n private saveFile = (files?: FileList) => {\n // Validate the files exist.\n if (!files) {\n return;\n }\n\n // Retrieve the first file.\n const file = files[0];\n\n // Validate the first file exists.\n if (!file) {\n return;\n }\n\n // Save the file.\n this.value = file;\n };\n\n private getFileListFromEvent = (event: Event) => {\n const element = event.target as HTMLInputElement;\n\n if (!element) {\n return null;\n }\n\n return element.files;\n };\n\n private preventDefault = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n}\n","<!-- The label of the input. -->\n<label *ngIf=\"label as labelContent\"\n [for]=\"labelId\"\n class=\"bb-file-picker-label\">\n <ng-template [bbTemplate]=\"labelContent\">\n {{ labelContent }}\n </ng-template>\n</label>\n\n<!-- The input that can open the file picker. -->\n<input #fileInput\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n (change)=\"onFileChange($event)\"\n class=\"bb-file-picker-input\"\n type=\"file\"\n tabindex=\"-1\">\n\n<div *ngIf=\"value$ | async as data\"\n class=\"bb-file-picker-wrapper\">\n <!-- The button that accepts files. -->\n <div class=\"bb-file-picker-container\">\n <button [class.destructive]=\"!!data?.file\"\n [class.standalone]=\"!allowDragging\"\n [disabled]=\"disabled\"\n [id]=\"labelId\"\n (click)=\"onButtonPressed(data?.file)\"\n type=\"button\"\n class=\"bb-file-picker-button\">\n <ng-container *ngTemplateOutlet=\"data?.file ? closeIcon : uploadIcon\"></ng-container>\n {{ (data?.file ? 'file-picker.remove' : 'file-picker.choose') | bbLocalize }}\n </button>\n <div *ngIf=\"allowDragging\"\n class=\"bb-file-picker-zone\">\n {{ 'file-picker.drop' | bbLocalize }}\n </div>\n </div>\n\n <ng-container *ngIf=\"!!extraTemplate\">\n <ng-container *ngTemplateOutlet=\"extraTemplate; context: {$implicit: data?.file}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"showImages\">\n <div *ngIf=\"data?.file | bbFileImage | async as image\"\n class=\"bb-file-picker-image-container\">\n <div class=\"bb-file-picker-image-wrapper\">\n <div [@bbFilePickerImageAnimation]=\"true\"\n [style.padding-top.%]=\"image?.aspectRatio * 100\"\n [style.background-image]=\"image?.background\"\n class=\"bb-file-picker-image\">\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- Extra information of the file. -->\n <div [class.visible]=\"!!data?.file\"\n class=\"bb-file-picker-info\">\n <span *ngIf=\"data?.file?.name as name\">{{ name }}</span>\n <span *ngIf=\"data?.file?.size as size\">{{ size | bbFileSize }}</span>\n </div>\n</div>\n\n<bb-form-error *ngIf=\"!hideErrors\"\n (errorChange)=\"onErrorChange($event)\">\n</bb-form-error>\n\n<!-- The file picker hint. -->\n<p *ngIf=\"hint as hintContent\"\n class=\"bb-file-picker-hint\">\n <ng-template [bbTemplate]=\"hintContent\">\n {{ hintContent }}\n </ng-template>\n</p>\n\n<!-- Upload icon. -->\n<ng-template #uploadIcon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"bb-file-picker-icon\"\n width=\"24\"\n height=\"24\">\n <path fill=\"currentColor\"\n d=\"M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5a2.5 2.5 0 010-5H17v2H9.41c-.55 0-.55 1 0 1H18c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z\"></path>\n <path fill=\"none\" d=\"M0 0h24v24H0V0z\"></path>\n </svg>\n</ng-template>\n\n<!-- Close icon. -->\n<ng-template #closeIcon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"bb-file-picker-icon\"\n width=\"24\"\n height=\"24\">\n <path fill=\"currentColor\"\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"></path>\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n </svg>\n</ng-template>\n","import {\n Directive,\n DoCheck,\n ElementRef,\n Host,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self\n} from '@angular/core';\nimport {BbFormControl} from '../form-control/form-control.component';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {NgControl} from '@angular/forms';\nimport {Subscription} from 'rxjs';\n\n@Directive({\n selector: 'select[bbInput]',\n host: {\n '[disabled]': 'disabled',\n '(focus)': 'setFocus(true)',\n '(blur)': 'setFocus(false)'\n }\n})\nexport class BbSelect implements OnInit, DoCheck, OnDestroy {\n\n protected hasArrow: boolean = true;\n\n private _subscription: Subscription;\n\n constructor(protected _elementRef: ElementRef,\n @Optional() @Self() protected _ngControl: NgControl,\n @Optional() @Host() protected _formControl: BbFormControl) {\n }\n\n ngOnInit() {\n // Set an arrow on the form control if\n // it requires one.\n this._formControl.arrow = this.hasArrow;\n }\n\n ngDoCheck() {\n if (this._ngControl) {\n this.disabled = this._ngControl.disabled;\n }\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n focus() {\n return this._elementRef?.nativeElement?.focus();\n }\n\n setFocus(hasFocus: boolean) {\n if (!this._formControl) {\n return;\n }\n\n this._formControl.focused = hasFocus;\n }\n\n @HostBinding('attr.id')\n get id() {\n return this._formControl?.labelId ?? null;\n }\n\n get disabled() {\n if (this._ngControl && this._ngControl.disabled !== null) {\n return this._ngControl.disabled;\n }\n\n return this._disabled;\n }\n\n @Input()\n set disabled(newValue: boolean) {\n this._disabled = coerceBooleanProperty(newValue);\n\n if (!this._formControl) {\n return;\n }\n\n this._formControl.disabled = this._disabled;\n }\n\n private _disabled = false;\n\n get required() {\n return this._required;\n }\n\n @Input()\n set required(newValue: boolean) {\n this._required = coerceBooleanProperty(newValue);\n\n if (!this._formControl) {\n return;\n }\n\n this._formControl.required = this._required;\n }\n\n private _required = false;\n\n}\n\n@Directive({\n selector: 'input[bbInput], textarea[bbInput]',\n host: {\n '[disabled]': 'disabled',\n '[readonly]': 'readonly',\n '(focus)': 'setFocus(true)',\n '(blur)': 'setFocus(false)'\n }\n})\nexport class BbInput extends BbSelect {\n\n protected override hasArrow: boolean = false;\n\n constructor(protected override _elementRef: ElementRef,\n @Optional() @Self() protected override _ngControl: NgControl,\n @Optional() @Host() protected override _formControl: BbFormControl) {\n super(_elementRef, _ngControl, _formControl);\n }\n\n get readonly() {\n return this._readonly;\n }\n\n @Input()\n set readonly(newValue: boolean) {\n this._readonly = coerceBooleanProperty(newValue);\n\n if (!this._formControl) {\n return;\n }\n\n this._formControl.readonly = this._readonly;\n }\n\n private _readonly = false;\n\n}\n","import {\n CanDisable,\n CanDisableConstructor,\n CanHideErrors,\n CanHideErrorsConstructor,\n HasError,\n HasErrorConstructor,\n IsGrouped,\n IsGroupedConstructor,\n IsReadonly,\n IsReadonlyConstructor,\n IsRequired,\n IsRequiredConstructor,\n mixinDisabled,\n mixinError,\n mixinGrouped,\n mixinHideErrors,\n mixinReadonly,\n mixinRequired\n} from '@bravobit/bb-foundation';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormGroup,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n Validators\n} from '@angular/forms';\nimport {BehaviorSubject, combineLatest, Observable, Subscription} from 'rxjs';\nimport {distinctUntilChanged, map, startWith, tap} from 'rxjs/operators';\nimport {LOCALIZE_ID} from '@bravobit/bb-foundation/localize';\nimport {formatDate} from '@angular/common';\n\nclass BbDatePickerBase {\n}\n\nconst BbFilePickerMixinBase: IsRequiredConstructor\n & IsReadonlyConstructor\n & CanDisableConstructor\n & IsGroupedConstructor\n & HasErrorConstructor\n & CanHideErrorsConstructor\n & typeof BbDatePickerBase\n = mixinRequired(mixinReadonly(mixinDisabled(mixinGrouped(mixinError(mixinHideErrors(BbDatePickerBase))))));\n\n@Component({\n selector: 'bb-date-picker',\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BbDatePicker),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: BbDatePicker,\n multi: true\n }\n ],\n host: {\n 'class': 'bb-date-picker',\n '[class.required]': 'required',\n '[class.readonly]': 'readonly',\n '[class.disabled]': 'disabled',\n '[class.grouped]': 'grouped',\n '[class.error]': 'error'\n },\n inputs: ['required', 'readonly', 'disabled', 'grouped', 'hideErrors'],\n preserveWhitespaces: false\n})\nexport class BbDatePicker extends BbFilePickerMixinBase implements ControlValueAccessor, OnInit, OnDestroy, IsRequired, IsReadonly, CanDisable, IsGrouped, HasError, CanHideErrors {\n\n // Readonly data.\n readonly _yearRegex = /^(10|[1-9][0-9])\\d{2}$/; // Note: 1000 - 9999\n\n // Inputs.\n @Input() label: string | TemplateRef<any> | null = null;\n @Input() hint: string | TemplateRef<any> | null = null;\n @Input() dayPlaceholder: string | null = 'dd';\n @Input() monthPlaceholder: string | null = 'mm';\n @Input() yearPlaceholder: string | null = 'yyyy';\n\n @Input()\n set years(value: [string | number, string | number] | null) {\n this.parseYears(value);\n }\n\n // Forms.\n form: FormGroup;\n trackByValue = (_, item) => item?.value;\n\n // Data.\n data$: Observable<{\n days?: { label: string, value: number }[],\n months?: { label: string, value: number }[],\n years?: number[] | null\n }>;\n years$ = new BehaviorSubject<number[] | null>(null);\n\n get value() {\n return this.formToDateString(this.form?.value);\n }\n\n @Input()\n set value(value: string | null) {\n this.parseDateStringInForm(value);\n this.valueChange.emit(this.value);\n }\n\n @Output() valueChange = new EventEmitter<string | null>();\n\n // Subscriptions.\n private _subscription = new Subscription();\n\n constructor(@Inject(LOCALIZE_ID) private _localizeId: Observable<string>) {\n super();\n }\n\n ngOnInit() {\n this.composeForm();\n this.getData();\n this.handleChanges();\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n writeValue(value: string | null) {\n this.parseDateStringInForm(value);\n }\n\n registerOnChange(method: (_: string | null) => void) {\n this.onChangeCallback = method;\n }\n\n registerOnTouched(method: () => void) {\n this.onTouchedCallback = method;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n\n if (this.disabled) {\n this.form?.disable();\n } else {\n this.form?.enable();\n }\n }\n\n onTouchedCallback: () => void = () => {\n };\n\n onChangeCallback: (_: string | null) => void = () => {\n };\n\n onErrorChange(error: { token: string, data?: any } | null) {\n this.error = !!error;\n }\n\n validate({value}: FormControl<string>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const data = this.parseDateString(value);\n const date = new Date(data?.year, data?.month - 1, data?.day);\n\n const maxDays = this.getDaysInMonth(data?.month, `${data?.year}`);\n\n const isInvalidDate = date.toString() === 'Invalid Date';\n const exceededMaxDays = data?.day > maxDays;\n\n return (isInvalidDate || exceededMaxDays) && {\n invalidDate: true\n };\n }\n\n private handleChanges() {\n const dateOrNull$ = this.form.valueChanges.pipe(\n map(value => this.formToDateString(value)),\n distinctUntilChanged()\n );\n\n const subscription = dateOrNull$.subscribe(() => {\n this.valueChange.emit(this.value);\n this.onChangeCallback(this.value);\n });\n this._subscription.add(subscription);\n }\n\n private getData() {\n const years$ = this.years$.asObservable();\n const months$ = this.getMonthData();\n const days$ = this.getDayData();\n\n this.data$ = combineLatest([years$, months$, days$]).pipe(\n map(([years, months, days]) => ({years, months, days})),\n tap(data => this.verifyListData(data?.days?.length, data?.years))\n );\n }\n\n private verifyListData(maxDays: number, years: number[] | null) {\n const dayControl = this.form.get('day');\n if (dayControl?.value !== null && dayControl?.value > maxDays) {\n dayControl.patchValue(maxDays);\n }\n\n const yearControl = this.form.get('year');\n if (years !== null && yearControl?.value !== null && this._yearRegex.test(yearControl?.value)) {\n const selectedYear = Number(yearControl?.value);\n\n const firstYear = Math.min(...years);\n const lastYear = Math.max(...years);\n\n if (selectedYear < firstYear || selectedYear > lastYear) {\n Promise.resolve().then(() => yearControl.patchValue(null));\n }\n }\n }\n\n private getDayData() {\n const count$ = this.form.valueChanges.pipe(\n startWith(this.form?.value as object),\n map(({month, year}) => this.getDaysInMonth(month, year)),\n distinctUntilChanged()\n );\n\n return count$.pipe(\n map(count => Array(count).fill(0).map((_, index) => ({\n label: `${index + 1}`,\n value: index + 1\n })))\n );\n }\n\n private getMonthData() {\n return this._localizeId.pipe(\n map(locale => {\n return Array(12).fill(0).map((_, month) => {\n const date = new Date(2000, month, 1);\n const label = formatDate(date, 'LLLL', locale);\n return {label, value: month + 1};\n });\n })\n );\n }\n\n private composeForm() {\n const {required, pattern, minLength, maxLength} = Validators;\n const yearPattern = pattern(this._yearRegex);\n const yearValidators = [required, yearPattern, minLength(4), maxLength(4)];\n\n this.form = new FormGroup({\n day: new FormControl<number>(null, required),\n month: new FormControl<number>(null, required),\n year: new FormControl<number>(null, yearValidators)\n });\n }\n\n private parseDateStringInForm(value: string | null) {\n // If the date string was not a valid format, reset the form.\n if (!this.isValidDateString(value)) {\n if (value !== null) {\n this.form?.reset({year: null, month: null, day: null}, {emitEvent: false});\n }\n return;\n }\n\n // Parse the date string and save in the form.\n const data = this.parseDateString(value);\n const year = data?.year !== null && data?.year !== undefined\n ? this.padString(`${data?.year}`, 4, '0')\n : null;\n const formData = {...(data ?? {}), year};\n\n this.form?.patchValue(formData, {emitEvent: false});\n }\n\n private parseDateString(value: string) {\n if (!this.isValidDateString(value)) {\n return null;\n }\n\n // Parse the date string.\n const [year, month, day] = value?.split('-');\n\n return {\n day: day ? parseInt(day, 10) : null,\n month: month ? parseInt(month, 10) : null,\n year: year ? parseInt(year, 10) : null\n };\n }\n\n private parseYears(values: [string | number, string | number] | null) {\n if (!values) {\n return this.years$.next(null);\n }\n\n // Parse the values to years (in numbers).\n const [first, last] = values;\n const firstYear = this.parseYearFormat(first);\n const lastYear = this.parseYearFormat(last);\n\n // Check cases in where we cannot parse.\n if (firstYear === null || lastYear === null) {\n return this.years$.next(null);\n }\n\n const difference = firstYear - lastYear;\n const absoluteDifference = Math.abs(difference) + 1;\n\n // Create an array with years.\n const years = Array(absoluteDifference)\n .fill(0)\n .map((_, index) => difference < 0 ? (firstYear + index) : (firstYear - index));\n\n // Validate we have one or more years.\n if (years?.length <= 0) {\n return this.years$.next(null);\n }\n\n // Push the years.\n return this.years$.next(years);\n }\n\n private formToDateString = ({year, month, day}) => {\n if (this.form?.invalid) {\n return null;\n }\n\n const prefixedMonth = this.padString(`${month}`, 2, '0');\n const prefixedDay = this.padString(`${day}`, 2, '0');\n\n return [year, prefixedMonth, prefixedDay].join('-');\n };\n\n private parseYearFormat = (value: string | number) => {\n // Transform the value to a definitive string.\n const yearString = `${value}`;\n const currentFullYear = new Date().getFullYear();\n\n // Handle default \"current\" syntax.\n if (yearString === 'current') {\n return currentFullYear;\n }\n\n // Handle \"current + {amount}\" syntax.\n if (/^current\\s?\\+\\s?\\d+$/.test(yearString)) {\n const amount = Number(yearString?.split('+')?.[1]?.trim()) ?? 0;\n return currentFullYear + amount;\n }\n\n // Handle \"current - {amount}\" syntax.\n if (/^current\\s?-\\s?\\d+$/.test(yearString)) {\n const amount = Number(yearString?.split('-')?.[1]?.trim()) ?? 0;\n return currentFullYear - amount;\n }\n\n // Handling the default number case.\n if (/^[0-9]{4}$/.test(yearString)) {\n return Number(yearString);\n }\n\n // We could not parse it.\n return null;\n };\n\n private getDaysInMonth = (month: number | null = null, year: string | null = null) => {\n if (this.form?.invalid || month === null || year === null) {\n return 31;\n }\n\n const parsedYear = parseInt(year, 10);\n return new Date(parsedYear, month, 0).getDate();\n };\n\n private isValidDateString = (value: unknown) => {\n return typeof value === 'string' && /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/.test(value);\n };\n\n private padString = (value: string, maxLength: number, fillString: string = '0') => {\n const count = maxLength - value.length;\n for (let index = 0; index < count; index++) {\n value = `${fillString}${value}`;\n }\n\n return value;\n };\n\n}\n","<!-- Label of the date picker. -->\n<label *ngIf=\"label as labelContent\"\n class=\"bb-date-picker-label\">\n <ng-template [bbTemplate]=\"labelContent\">\n {{ labelContent }}\n </ng-template>\n</label>\n\n<!-- The form containing the year/month/day fields. -->\n<form *ngIf=\"data$ | async as data\"\n [formGroup]=\"form\"\n class=\"bb-date-picker-container\"\n novalidate>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('day')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"day\">\n <option [ngValue]=\"null\">{{ dayPlaceholder }}</option>\n <option *ngFor=\"let day of data?.days; trackBy: trackByValue\"\n [ngValue]=\"day?.value\">\n {{ day?.label }}\n </option>\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('month')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"month\">\n <option [ngValue]=\"null\">{{ monthPlaceholder }}</option>\n <option *ngFor=\"let month of data?.months; trackBy: trackByValue\"\n [ngValue]=\"month?.value\">\n {{ month?.label }}\n </option>\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select *ngIf=\"data?.years?.length > 0; else defaultYearInputTemplate\"\n [class.has-value]=\"!!form?.get('year')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"year\">\n <option [ngValue]=\"null\">{{ yearPlaceholder }}</option>\n <option *ngFor=\"let year of data?.years\"\n [value]=\"year\">\n {{ year }}\n </option>\n </select>\n\n <ng-template #defaultYearInputTemplate>\n <input [placeholder]=\"yearPlaceholder\"\n bbInput\n type=\"text\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n pattern=\"^[0-9]{4}$\"\n formControlName=\"year\"\n autocomplete=\"off\">\n </ng-template>\n </bb-form-control>\n </div>\n</form>\n\n<!-- The date picker error. -->\n<bb-form-error *ngIf=\"!hideErrors\"\n (errorChange)=\"onErrorChange($event)\">\n</bb-form-error>\n\n<!-- The date picker hint. -->\n<p *ngIf=\"hint as hintContent\"\n class=\"bb-date-picker-hint\">\n <ng-template [bbTemplate]=\"hintContent\">\n {{ hintContent }}\n </ng-template>\n</p>\n","import {Directive} from '@angular/core';\n\n@Directive({\n selector: '[bbSuffix]',\n host: {\n 'class': 'bb-suffix'\n }\n})\nexport class BbSuffix {\n}\n\n@Directive({\n selector: '[bbPrefix]',\n host: {\n 'class': 'bb-prefix'\n }\n})\nexport class BbPrefix {\n}\n","import {IsGrouped, IsGroupedConstructor, mixinGrouped} from '@bravobit/bb-foundation';\nimport {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\n\nclass BbFormGroupBase {\n}\n\nconst BbFormGroupMixinBase: IsGroupedConstructor\n & typeof BbFormGroupBase\n = mixinGrouped(BbFormGroupBase);\n\n@Component({\n selector: 'bb-form-group',\n templateUrl: './form-group.component.html',\n styleUrls: ['./form-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-form-group',\n '[class.grouped]': 'grouped'\n },\n inputs: ['grouped'],\n preserveWhitespaces: false\n})\nexport class BbFormGroup extends BbFormGroupMixinBase implements IsGrouped {\n}\n","<ng-content></ng-content>\n","import {Inject, LOCALE_ID, Optional, Pipe, PipeTransform} from '@angular/core';\nimport {Localize} from '@bravobit/bb-foundation/localize';\nimport {formatDate} from '@angular/common';\n\n@Pipe({\n name: 'bbRelativeTime'\n})\nexport class BbRelativeTime implements PipeTransform {\n\n constructor(@Inject(LOCALE_ID) private _localeId: string,\n @Optional() private _localize?: Localize) {\n }\n\n transform(value: string | number | Date) {\n // Parse the value to a date object.\n const date = this.parseAsDate(value);\n\n // Check if the date is valid.\n if (!this.isValidDate(date)) {\n return value;\n }\n\n // Return the formatted date.\n return this.format(date);\n }\n\n private format(date: Date) {\n // It happens tomorrow.\n if (this.isTomorrow(date)) {\n return this.formatString(date, 'times.tomorrow_at', 'shortTime');\n }\n\n // It happened today.\n if (this.isToday(date)) {\n return this.formatString(date, 'times.today_at', 'shortTime');\n }\n\n // It happened yesterday.\n if (this.isYesterday(date)) {\n return this.formatString(date, 'times.yesterday_at', 'shortTime');\n }\n\n // Just return the date.\n return this.formatString(date);\n }\n\n private formatString(date: Date, token?: string, format?: string) {\n // Just return the parsed date.\n if (!this._localize || !token || !format) {\n return formatDate(date, 'mediumDate', this.locale);\n }\n\n // Return the translated formatting.\n return this._localize.translate({\n token: token,\n data: {date: formatDate(date, format, this.locale)}\n });\n }\n\n private get locale() {\n return this._localize?.current?.locale ?? this._localeId;\n }\n\n private isValidDate = (date: Date) => {\n return typeof date === 'object' &&\n typeof date.getTime === 'function' &&\n !isNaN(date.getTime());\n };\n\n private parseAsDate = (value: string | number | Date) => {\n // Add a Z after the date so\n // it is treated as a UTC date.\n if (typeof value === 'string' && /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/.test(value)) {\n return new Date(`${value}Z`);\n }\n\n // Return the regular parsed date.\n return new Date(value);\n };\n\n private isToday = (date: Date) => {\n const today = new Date();\n return date?.getDate() === today?.getDate() &&\n date?.getMonth() === today?.getMonth() &&\n date?.getFullYear() === today?.getFullYear();\n };\n\n private isYesterday = (date: Date) => {\n const yesterday = new Date(new Date()?.setDate(new Date()?.getDate() - 1));\n return date?.getDate() === yesterday?.getDate() &&\n date?.getMonth() === yesterday?.getMonth() &&\n date?.getFullYear() === yesterday?.getFullYear();\n };\n\n private isTomorrow = (date: Date) => {\n const tomorrow = new Date(new Date()?.setDate(new Date()?.getDate() + 1));\n return date?.getDate() === tomorrow?.getDate() &&\n date?.getMonth() === tomorrow?.getMonth() &&\n date?.getFullYear() === tomorrow?.getFullYear();\n };\n\n}\n","import {\n CanDisable,\n CanDisableConstructor,\n mixinDisabled,\n IsGrouped,\n IsGroupedConstructor,\n mixinGrouped\n} from '@bravobit/bb-foundation';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\n\nlet nextUniqueId = 0;\n\nclass BbCheckboxBase {\n}\n\nconst BbCheckboxMixinBase: IsGroupedConstructor\n & CanDisableConstructor\n & typeof BbCheckboxBase\n = mixinDisabled(mixinGrouped(BbCheckboxBase));\n\n@Component({\n selector: 'bb-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbCheckbox), multi: true}\n ],\n host: {\n 'class': 'bb-checkbox',\n '[class.grouped]': 'grouped'\n },\n inputs: ['grouped', 'disabled'],\n preserveWhitespaces: false\n})\nexport class BbCheckbox extends BbCheckboxMixinBase implements ControlValueAccessor, IsGrouped, CanDisable {\n\n // Data.\n labelId = `bb-checkbox-${nextUniqueId++}`;\n\n // Inputs.\n @Input() tabIndex: number;\n\n get checked() {\n return this._checked;\n }\n\n @Input()\n set checked(value: any) {\n this._checked = coerceBooleanProperty(value);\n this._changeDetection.markForCheck();\n }\n\n private _checked: boolean = false;\n\n constructor(private _changeDetection: ChangeDetectorRef) {\n super();\n }\n\n // Methods.\n onChange: (newValue: boolean) => void = () => {\n };\n\n onTouched: () => void = () => {\n };\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this._changeDetection.markForCheck();\n }\n\n writeValue(newValue: boolean) {\n this.checked = newValue;\n }\n\n onInteractionEvent(event: Event) {\n // Stop the propagation to prevent it from bubbling up.\n event.stopPropagation();\n }\n\n onInputClick(event: Event) {\n // Stop the propagation to prevent it from bubbling up.\n event.stopPropagation();\n\n // Toggle the value.\n this.checked = !this.checked;\n\n // Emit the change event.\n this.onChange && this.onChange(this.checked);\n }\n\n}\n","<input [id]=\"labelId\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n (change)=\"onInteractionEvent($event)\"\n (click)=\"onInputClick($event)\"\n class=\"bb-checkbox-input\"\n tabindex=\"-1\"\n type=\"checkbox\">\n\n<label [for]=\"labelId\"\n [attr.tabindex]=\"disabled ? -1 : (tabIndex || 0)\"\n (keyup.space)=\"onInputClick($event)\"\n class=\"bb-checkbox-label\">\n <span>\n <svg width=\"12px\"\n height=\"10px\"\n viewbox=\"0 0 12 10\">\n <polyline points=\"1.5 6 4.5 9 10.5 1\"></polyline>\n </svg>\n </span>\n <span>\n <ng-content></ng-content>\n </span>\n</label>\n","import {ChangeDetectionStrategy, Component, HostBinding, Input, ViewEncapsulation} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'bb-avatar',\n templateUrl: './avatar.component.html',\n styleUrls: ['./avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n host: {\n 'class': 'bb-avatar',\n 'role': 'img',\n '[style.width.px]': 'size',\n '[style.min-width.px]': 'size',\n '[style.height.px]': 'size',\n '[style.min-height.px]': 'size',\n '[style.font-size.px]': 'size * 0.42',\n '[style.color]': 'color',\n '[style.background-color]': 'backgroundColor'\n }\n})\nexport class BbAvatar {\n\n // Inputs.\n @Input() size: number = 40;\n\n // State.\n state$ = new BehaviorSubject<string>('initials');\n\n // Data.\n private _src: string | null = null;\n private _title: string | null = null;\n private _initials: string = '!';\n private _color: string = 'rgb(255, 255, 255)';\n private _backgroundColor: string = 'rgb(66, 66, 66)';\n\n @Input()\n set src(value: string) {\n this._src = value;\n\n if (this._src) {\n this.state$.next('image');\n }\n }\n\n @Input()\n @HostBinding('attr.title')\n set title(value: string) {\n // Set the title and the initials.\n this._title = value ?? '!';\n this._initials = this.getInitials(this._title);\n\n // Generate the colors based on the name.\n const {r, g, b} = this.toRgb(this._title);\n this.setColors(r, g, b);\n }\n\n @Input()\n set tintColor(value: string) {\n const result = this.parseColorFormat(value);\n if (!result) {\n return;\n }\n\n const {r, g, b} = result;\n this.setColors(r, g, b);\n }\n\n get src() {\n return this._src;\n }\n\n get color() {\n return this._color;\n }\n\n get backgroundColor() {\n return this._backgroundColor;\n }\n\n get title() {\n return this._title;\n }\n\n get initials() {\n return this._initials;\n }\n\n private setColors(red: number, green: number, blue: number) {\n this._color = `rgb(${red},${green},${blue})`;\n this._backgroundColor = `rgba(${red},${green},${blue}, 0.25)`;\n }\n\n private toRgb = (value: string) => {\n const baseRed = 128;\n const baseGreen = 128;\n const baseBlue = 128;\n\n let seed = value.charCodeAt(0) ^ value.charCodeAt(1);\n const rand_1 = Math.abs((Math.sin(seed++) * 10000)) % 256;\n const rand_2 = Math.abs((Math.sin(seed++) * 10000)) % 256;\n const rand_3 = Math.abs((Math.sin(seed++) * 10000)) % 256;\n\n const r = Math.round((rand_1 + baseRed) / 2);\n const g = Math.round((rand_2 + baseGreen) / 2);\n const b = Math.round((rand_3 + baseBlue) / 2);\n\n return {r, g, b};\n };\n\n private getInitials = (name: string) => {\n // Get all the initials.\n const names = (name ?? '').split(' ');\n const initials = names\n .map(name => name.charAt(0).toUpperCase())\n .filter(name => /^[a-zA-Z]+$/.test(name));\n\n // Check if there are any initials.\n if (initials?.length <= 0) {\n return null;\n }\n\n // Get the first and last initials.\n if (initials?.length > 1) {\n return `${initials?.[0]}${initials?.[initials?.length - 1]}`;\n }\n\n // Get only the first initial.\n return initials?.[0];\n };\n\n private parseColorFormat = (value: string) => {\n if (!value) {\n return null;\n }\n\n // Hex 3 values.\n let match = value.match(/^#([0-9a-f]{3})$/i);\n if (match && match[1]) {\n const r = parseInt(match[1].charAt(0), 16) * 0x11;\n const g = parseInt(match[1].charAt(1), 16) * 0x11;\n const b = parseInt(match[1].charAt(2), 16) * 0x11;\n\n return {r, g, b};\n }\n\n // Hex 6 values.\n match = value.match(/^#([0-9a-f]{6})$/i);\n if (match && match[1]) {\n const r = parseInt(match[1].substring(0, 2), 16);\n const g = parseInt(match[1].substring(2, 4), 16);\n const b = parseInt(match[1].substring(4, 6), 16);\n\n return {r, g, b};\n }\n\n // Rgb values.\n match = value.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i);\n if (match) {\n const r = parseInt(match[1], 10);\n const g = parseInt(match[2], 10);\n const b = parseInt(match[3], 10);\n\n return {r, g, b};\n }\n\n // Not a supported color format.\n console?.warn?.(`BbAvatar: Unsupported tintColor \"${value}\" was used.`);\n return null;\n };\n\n}\n","<ng-container [ngSwitch]=\"state$ | async\">\n <!-- Image. -->\n <ng-container *ngSwitchCase=\"'image'\">\n <img [src]=\"src\"\n [alt]=\"initials\"\n (error)=\"state$?.next('initials')\"\n class=\"bb-avatar-image\">\n </ng-container>\n\n <!-- Default initials fallback. -->\n <ng-container *ngSwitchDefault>\n {{ initials }}\n </ng-container>\n</ng-container>\n","import {ChangeDetectionStrategy, Component, Inject, Input, Optional, ViewEncapsulation} from '@angular/core';\nimport {ELEMENTS_ICONS, ElementsIcon} from '../elements.interfaces';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'bb-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-icon',\n '[attr.aria-hidden]': 'ariaHidden',\n '[style.width.px]': 'size',\n '[style.height.px]': 'size',\n '[style.min-width.px]': 'size',\n '[style.min-height.px]': 'size',\n '[style.font-size.px]': 'size'\n },\n preserveWhitespaces: false\n})\nexport class BbIcon {\n\n // Data.\n private _src: string | null = null;\n\n // State.\n state$ = new BehaviorSubject<any>(null);\n\n @Input() alt: string | null = null;\n @Input() size: number = 24;\n\n @Input()\n set src(newValue: string | null) {\n this.state$.next(this.convert(newValue));\n this._src = newValue;\n }\n\n get src() {\n return this._src;\n }\n\n @Input()\n set ariaHidden(newValue: boolean) {\n this._ariaHidden = coerceBooleanProperty(newValue);\n }\n\n get ariaHidden() {\n return this._ariaHidden;\n }\n\n private _ariaHidden = true;\n\n constructor(@Optional() @Inject(ELEMENTS_ICONS) private _registry: ElementsIcon[]) {\n }\n\n private convert(src: string | null) {\n const [namespace, value] = (src || '').split(':');\n\n const onError = () => {\n this.warn(`ElementsModule: The icon with src \"${src}\" could not be rendered correctly; Did you put a correct src attribute?`);\n return {type: 'unknown'};\n };\n\n if (!namespace || !value || !this._registry) {\n return onError();\n }\n\n // Try to find a image icon.\n const imageIcon = this.findImageIcon(namespace, value);\n if (imageIcon) {\n return imageIcon;\n }\n\n // Try to find a font icon.\n const fontIcon = this.findFontIcon(namespace, value);\n if (fontIcon) {\n return fontIcon;\n }\n\n // Return the on error function.\n return onError();\n }\n\n private findImageIcon(namespace: string, value: string) {\n const data = this._registry.find(item => item['namespace'] === namespace && item['name'] === value);\n\n if (!data) {\n return null;\n }\n\n return {type: data['type'], src: data['src']};\n }\n\n private findFontIcon(namespace: string, content: string) {\n const data = this._registry.find(item => item['namespace'] === namespace);\n\n if (!data) {\n return null;\n }\n\n const uses = data['uses'];\n if (uses === 'data-attribute') {\n return {type: data['type'], className: data['className'], attribute: content};\n }\n\n return {type: data['type'], className: data['className'], content};\n }\n\n private warn = (content: string) => {\n return console && console.warn && console.warn(content);\n };\n\n}\n","<ng-container *ngIf=\"state$ | async as data\"\n [ngSwitch]=\"data?.type\">\n <i *ngSwitchCase=\"'font'\"\n [attr.data-icon]=\"data?.attribute\"\n [class]=\"data?.className\">\n {{ data?.content }}\n </i>\n <img *ngSwitchCase=\"'image'\"\n [src]=\"data?.src\"\n [alt]=\"alt\">\n <svg *ngSwitchCase=\"'unknown'\"\n viewBox=\"0 0 1 1\">\n <rect x=\"0\" y=\"0\" width=\"1\" height=\"1\" fill=\"#c5c5c5\"></rect>\n </svg>\n</ng-container>\n","import {ChangeDetectionStrategy, Component, EventEmitter, Output, ViewEncapsulation} from '@angular/core';\n\n@Component({\n selector: 'bb-tag',\n templateUrl: './tag.component.html',\n styleUrls: ['./tag.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n host: {'class': 'bb-tag'}\n})\nexport class BbTag {\n\n // Outputs.\n @Output() onClose: EventEmitter<void> = new EventEmitter<void>();\n\n}\n","<ng-content></ng-content>\n\n<button *ngIf=\"onClose?.observed\"\n (click)=\"onClose.emit()\"\n type=\"button\">\n Close\n</button>","import {BbDropdown, BbDropdownItem} from './dropdown/dropdown.component';\nimport {ELEMENTS_ERRORS, ELEMENTS_ICONS} from './elements.interfaces';\nimport {BbFormSubmitter} from './directives/form-submitter.directive';\nimport {BbImagePicker} from './image-picker/image-picker.component';\nimport {BbFormControl} from './form-control/form-control.component';\nimport {BbFilePicker} from './file-picker/file-picker.component';\nimport {BbDatePicker} from './date-picker/date-picker.component';\nimport {LocalizeModule} from '@bravobit/bb-foundation/localize';\nimport {BbPrefix, BbSuffix} from './directives/addon.directive';\nimport {BbFormSubmit} from './directives/form-submit.directive';\nimport {BbInput, BbSelect} from './directives/input.directive';\nimport {BbFormGroup} from './form-group/form-group.component';\nimport {BbFormError} from './form-error/form-error.component';\nimport {BbAnchor, BbButton} from './button/button.component';\nimport {ModuleWithProviders, NgModule} from '@angular/core';\nimport {BbRelativeTime} from './pipes/relative-time.pipe';\nimport {UtilsModule} from '@bravobit/bb-foundation/utils';\nimport {BbCheckbox} from './checkbox/checkbox.component';\nimport {BbSpinner} from './spinner/spinner.component';\nimport {BbFileImage} from './pipes/file-image.pipe';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {BbAvatar} from './avatar/avatar.component';\nimport {BbFileSize} from './pipes/file-size.pipe';\nimport {CommonModule} from '@angular/common';\nimport {BbIcon} from './icon/icon.component';\nimport {BbTag} from './tag/tag.component';\n\nconst DECLARATIONS_EXPORTS = [\n // Directives.\n BbFormError,\n BbFormSubmit,\n BbFormSubmitter,\n BbInput,\n BbSelect,\n BbPrefix,\n BbSuffix,\n // Pipes.\n BbFileSize,\n BbFileImage,\n BbRelativeTime,\n // Components.\n BbButton,\n BbAnchor,\n BbSpinner,\n BbIcon,\n BbFormControl,\n BbFormGroup,\n BbCheckbox,\n BbDropdown,\n BbDropdownItem,\n BbTag,\n BbAvatar,\n BbFilePicker,\n BbImagePicker,\n BbDatePicker\n];\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n LocalizeModule,\n UtilsModule\n ],\n declarations: [...DECLARATIONS_EXPORTS],\n exports: [...DECLARATIONS_EXPORTS, UtilsModule]\n})\nexport class ElementsModule {\n\n static forRoot(): ModuleWithProviders<ElementsModule> {\n return {\n ngModule: ElementsModule,\n providers: [\n {provide: ELEMENTS_ERRORS, useFactory: getErrors, multi: true},\n ELEMENTS_MATERIAL_ICON\n ]\n };\n }\n\n}\n\nexport const ELEMENTS_MATERIAL_ICON = {\n provide: ELEMENTS_ICONS,\n useValue: {namespace: 'material', className: 'material-icons', uses: 'content', type: 'font'},\n multi: true\n};\n\nexport function getErrors() {\n const data = {\n unknown: () => 'form-control-errors.unknown',\n required: () => 'form-control-errors.required',\n pattern: () => 'form-control-errors.pattern',\n email: () => 'form-control-errors.email',\n emailTaken: () => 'form-control-errors.emailTaken',\n passwordMatch: () => 'form-control-errors.passwordMatch',\n confirm: () => 'form-control-errors.confirm',\n fullNumber: () => 'form-control-errors.fullNumber',\n min: ({min}) => ({token: 'form-control-errors.min', data: {min}}),\n max: ({max}) => ({token: 'form-control-errors.max', data: {max}}),\n maxFileSize: ({maxSize}) => ({token: 'form-control-errors.maxFileSize', data: {maxSize}}),\n minDate: ({date}) => ({token: 'form-control-errors.minDate', data: {date}}),\n maxDate: ({date}) => ({token: 'form-control-errors.maxDate', data: {date}}),\n invalidDate: () => 'form-control-errors.invalidDate',\n invalidFileType: () => 'form-control-errors.invalidFileType',\n minlength: ({requiredLength, actualLength}) => ({\n token: 'form-control-errors.minlength',\n data: {requiredLength, actualLength}\n }),\n maxlength: ({requiredLength, actualLength}) => ({\n token: 'form-control-errors.maxlength',\n data: {requiredLength, actualLength}\n })\n };\n\n return data;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.BbSpinner","i1","i2","i3.BbButton","i4","i5","nextUniqueId","i3.BbFormError","BbFilePickerMixinBase","i5.BbFileSize","i6.BbFileImage","i2.BbFormControl","i3","i4.BbFormError","i5.BbFormSubmit","i6.BbInput","i6.BbSelect","i7.BbFormControl"],"mappings":"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"}
1
+ {"version":3,"file":"bravobit-bb-foundation-elements.mjs","sources":["../../../projects/bb-foundation/elements/src/lib/dropdown/dropdown.component.ts","../../../projects/bb-foundation/elements/src/lib/dropdown/dropdown.component.html","../../../projects/bb-foundation/elements/src/lib/elements.interfaces.ts","../../../projects/bb-foundation/elements/src/lib/directives/form-submitter.directive.ts","../../../projects/bb-foundation/elements/src/lib/spinner/spinner.component.ts","../../../projects/bb-foundation/elements/src/lib/spinner/spinner.component.html","../../../projects/bb-foundation/elements/src/lib/button/button.component.ts","../../../projects/bb-foundation/elements/src/lib/button/button.component.html","../../../projects/bb-foundation/elements/src/lib/image-picker/image-picker.component.ts","../../../projects/bb-foundation/elements/src/lib/image-picker/image-picker.component.html","../../../projects/bb-foundation/elements/src/lib/directives/form-submit.directive.ts","../../../projects/bb-foundation/elements/src/lib/form-error/form-error.component.ts","../../../projects/bb-foundation/elements/src/lib/form-error/form-error.component.html","../../../projects/bb-foundation/elements/src/lib/form-control/form-control.component.ts","../../../projects/bb-foundation/elements/src/lib/form-control/form-control.component.html","../../../projects/bb-foundation/elements/src/lib/pipes/file-size.pipe.ts","../../../projects/bb-foundation/elements/src/lib/pipes/file-image.pipe.ts","../../../projects/bb-foundation/elements/src/lib/file-picker/file-picker.component.ts","../../../projects/bb-foundation/elements/src/lib/file-picker/file-picker.component.html","../../../projects/bb-foundation/elements/src/lib/directives/input.directive.ts","../../../projects/bb-foundation/elements/src/lib/date-picker/date-picker.component.ts","../../../projects/bb-foundation/elements/src/lib/date-picker/date-picker.component.html","../../../projects/bb-foundation/elements/src/lib/directives/addon.directive.ts","../../../projects/bb-foundation/elements/src/lib/form-group/form-group.component.ts","../../../projects/bb-foundation/elements/src/lib/form-group/form-group.component.html","../../../projects/bb-foundation/elements/src/lib/pipes/relative-time.pipe.ts","../../../projects/bb-foundation/elements/src/lib/checkbox/checkbox.component.ts","../../../projects/bb-foundation/elements/src/lib/checkbox/checkbox.component.html","../../../projects/bb-foundation/elements/src/lib/avatar/avatar.component.ts","../../../projects/bb-foundation/elements/src/lib/avatar/avatar.component.html","../../../projects/bb-foundation/elements/src/lib/icon/icon.component.ts","../../../projects/bb-foundation/elements/src/lib/icon/icon.component.html","../../../projects/bb-foundation/elements/src/lib/tag/tag.component.ts","../../../projects/bb-foundation/elements/src/lib/tag/tag.component.html","../../../projects/bb-foundation/elements/src/lib/elements.module.ts","../../../projects/bb-foundation/elements/src/bravobit-bb-foundation-elements.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n Host,\n HostListener,\n Input,\n Optional,\n ViewEncapsulation\n} from '@angular/core';\nimport {animate, style, transition, trigger} from '@angular/animations';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'bb-dropdown',\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-dropdown'},\n preserveWhitespaces: false,\n animations: [\n trigger('dropdownMenuAnimation', [\n transition(':enter', [\n // 1. Set the initial state.\n style({opacity: 0, transform: 'scale(0.9)'}),\n // 2. Start the animation to show the item.\n animate('80ms cubic-bezier(0, 0, .2, 1)', style({opacity: 1, transform: 'scale(1)'}))\n ]),\n transition(':leave', [\n // 1. Set the initial state.\n style({opacity: 1, transform: 'scale(1)'}),\n // 2. Start the animation to hide the item.\n animate('80ms cubic-bezier(0, 0, .2, 1)', style({opacity: 0, transform: 'scale(0.9)'}))\n ])\n ])\n ]\n\n})\nexport class BbDropdown {\n\n // State.\n visible$ = new BehaviorSubject<boolean>(false);\n\n constructor(private _elementRef: ElementRef) {\n }\n\n toggle() {\n return this.visible$.next(!this.visible$.getValue());\n }\n\n close() {\n return this.visible$.next(false);\n }\n\n @HostListener('document:click', ['$event.target'])\n onDocumentClick(target: HTMLElement) {\n if (!target) {\n return;\n }\n\n if (this._elementRef?.nativeElement?.contains(target)) {\n return;\n }\n\n return this.close();\n }\n\n}\n\n@Directive({\n selector: '[bbDropdownItem]',\n host: {\n 'class': 'bb-dropdown-item'\n }\n})\nexport class BbDropdownItem {\n\n // Inputs.\n @Input() closeOnClick: boolean = true;\n\n constructor(@Optional() @Host() private _parent?: BbDropdown) {\n }\n\n @HostListener('click')\n onClick() {\n if (!this.closeOnClick) {\n return;\n }\n\n this._parent?.close();\n }\n\n}\n","<button (click)=\"toggle()\"\n [class.opened]=\"visible$ | async\"\n type=\"button\">\n <ng-content></ng-content>\n</button>\n\n<div *ngIf=\"visible$ | async\"\n [@dropdownMenuAnimation]=\"true\"\n class=\"bb-dropdown-menu\"\n role=\"list\">\n <ng-content select=\"[bbDropdownItem], hr\"></ng-content>\n</div>\n","import {InjectionToken} from '@angular/core';\n\nexport const ELEMENTS_ICONS: InjectionToken<ElementsIcon[]> = new InjectionToken('elements_icons');\nexport const ELEMENTS_ERRORS: InjectionToken<ElementsError[]> = new InjectionToken('elements_errors');\n\nexport type ElementsIcon = ElementsIconFont | ElementsIconImage | ElementsIconUnknown;\nexport type ElementsError = { [error: string]: (data?: any) => string | { token: string, data?: any }; };\n\nexport interface ElementsIconFont {\n namespace: string;\n className: string;\n uses: 'content' | 'data-attribute';\n type: 'font';\n}\n\nexport interface ElementsIconImage {\n namespace: string;\n name: string;\n src: string;\n type: 'image';\n}\n\nexport interface ElementsIconUnknown {\n type: 'unknown';\n}\n","import {Directive} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\n\n@Directive({\n selector: '[bbFormSubmitter]',\n exportAs: 'bbFormSubmitter'\n})\nexport class BbFormSubmitter {\n\n // State.\n submitted$ = new BehaviorSubject<boolean>(false);\n\n submit() {\n this.submitted$.next(true);\n }\n\n reset() {\n this.submitted$.next(false);\n }\n\n}\n","import {ChangeDetectionStrategy, Component, Input, ViewEncapsulation} from '@angular/core';\nimport {CanDisable, CanDisableConstructor, mixinDisabled} from '@bravobit/bb-foundation';\n\nclass BbSpinnerBase {\n}\n\nconst BbSpinnerMixinBase: CanDisableConstructor\n & typeof BbSpinnerBase\n = mixinDisabled(BbSpinnerBase);\n\n@Component({\n selector: 'bb-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-spinner'},\n inputs: ['color', 'alt', 'disabled'],\n preserveWhitespaces: false\n})\nexport class BbSpinner extends BbSpinnerMixinBase implements CanDisable {\n\n // Inputs.\n @Input() color: string = '#303f9f';\n @Input() alt: string = 'Loading...';\n\n}\n","<!--\n The spinner element.\n\n This element contains a circle with a 25% bar that spins\n indefinitely. The border color can be set via the \"color\"\n property.\n-->\n<div class=\"bb-spinner-container\">\n <div [style.border-left-color]=\"color\"\n [class.disabled]=\"disabled\"\n class=\"bb-spinner-loader\"\n aria-live=\"assertive\"\n role=\"alert\">\n {{ alt }}\n </div>\n <ng-content select=\"img\"></ng-content>\n</div>\n\n<!--\n The content of the spinner.\n\n This element contains the content of the spinner. The user\n can set the content inside the tag.\n-->\n<span class=\"bb-spinner-content\">\n <ng-content></ng-content>\n</span>\n","import {\n CanLoad,\n CanLoadConstructor,\n mixinLoad,\n CanDisable,\n CanDisableConstructor,\n mixinDisabled\n} from '@bravobit/bb-foundation';\nimport {ChangeDetectionStrategy, Component, ElementRef, Input, ViewEncapsulation} from '@angular/core';\n\nclass BbButtonBase {\n constructor(public _elementRef: ElementRef) {\n }\n}\n\nconst BbButtonMixinBase: CanDisableConstructor & CanLoadConstructor\n & typeof BbButtonBase = mixinDisabled(mixinLoad(BbButtonBase));\n\n@Component({\n selector: 'button[bb-button]',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n exportAs: 'bbButton',\n host: {\n 'class': 'bb-button',\n '[class.loading]': 'loading',\n '[attr.disabled]': 'disabled || loading || null'\n },\n inputs: ['disabled', 'loading'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BbButton extends BbButtonMixinBase implements CanDisable, CanLoad {\n\n get nativeElement() {\n return this._elementRef.nativeElement;\n }\n\n constructor(_elementRef: ElementRef<HTMLButtonElement>) {\n super(_elementRef);\n }\n\n focus() {\n this.nativeElement && this.nativeElement.focus();\n }\n\n}\n\n@Component({\n selector: 'a[bb-button]',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n exportAs: 'bbButton, bbAnchor',\n host: {\n 'class': 'bb-button',\n '[attr.tabindex]': '(disabled || loading) ? -1 : (tabIndex || 0)',\n '[attr.disabled]': 'disabled || loading || null',\n '[attr.aria-disabled]': '(disabled || loading).toString()',\n '(click)': 'stopDisabledEvents($event)'\n },\n inputs: ['disabled', 'loading'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BbAnchor extends BbButton {\n\n // Inputs.\n @Input() tabIndex: number;\n\n constructor(_elementRef: ElementRef) {\n super(_elementRef);\n }\n\n stopDisabledEvents(event: Event) {\n // If the button is not disabled (and not loading) let all events pass.\n if (!this.disabled && !this.loading) {\n return;\n }\n\n // If the button is disabled and/or loading stop\n // the event from bubbling up.\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n\n}\n","<bb-spinner [class.visible]=\"loading\"\n class=\"bb-button-spinner small\">\n</bb-spinner>\n\n<ng-content></ng-content>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ImageConverter,\n CanDisableConstructor,\n mixinDisabled,\n IsGroupedConstructor,\n mixinGrouped\n} from '@bravobit/bb-foundation';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {BehaviorSubject} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nclass BbImagePickerBase {\n}\n\nconst BbImagePickerMixinBase: IsGroupedConstructor\n & CanDisableConstructor\n & typeof BbImagePickerBase\n = mixinDisabled(mixinGrouped(BbImagePickerBase));\n\n@Component({\n selector: 'bb-image-picker',\n templateUrl: './image-picker.component.html',\n styleUrls: ['./image-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-image-picker',\n '[class.disabled]': 'disabled',\n '[class.grouped]': 'grouped'\n },\n inputs: ['grouped', 'disabled'],\n providers: [{provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbImagePicker), multi: true}],\n preserveWhitespaces: false\n})\nexport class BbImagePicker extends BbImagePickerMixinBase implements ControlValueAccessor {\n\n // Views.\n @ViewChild('fileInput', {static: true}) fileInput: ElementRef<HTMLInputElement>;\n\n // Inputs.\n @Input() label: string | null = null;\n @Input() placeholder: string | null = null;\n @Input() styleDimensions: { width: string, height: string } | null = null;\n @Input() cropDimensions: { width: number, height: number } | null = null;\n\n // Form.\n private _value$ = new BehaviorSubject<string | null>(null);\n\n constructor(private _converter: ImageConverter) {\n super();\n }\n\n @Input()\n get value() {\n return this._value$.getValue();\n }\n\n @Output() valueChange = new EventEmitter<string | null>();\n\n set value(value: string | null) {\n this._value$.next(value);\n this.valueChange.emit(value);\n }\n\n get image() {\n return this._value$.pipe(\n map(value => value || this.placeholder),\n map(value => value ? `url(${value})` : null)\n );\n }\n\n async onFileChange(event) {\n // Grab the file from the event.\n const file: File = event.target.files[0];\n\n // Check if the file exists.\n if (!file || this.disabled) {\n return;\n }\n\n try {\n this.value = await this._converter.toDataUri(file, this.cropDimensions);\n } catch (error) {\n this.value = null;\n }\n\n this.onChangeCallback(this.value);\n\n if (this.fileInput && this.fileInput.nativeElement) {\n this.fileInput.nativeElement.value = '';\n }\n }\n\n openFilePicker() {\n if (this.disabled) {\n return;\n }\n\n // Execute a click on the file input.\n this.fileInput\n && this.fileInput.nativeElement\n && this.fileInput.nativeElement.click\n && this.fileInput.nativeElement.click();\n }\n\n onTouchedCallback: () => void = () => {\n };\n\n onChangeCallback: (_: string | null) => void = () => {\n };\n\n writeValue(value: string | null) {\n this.value = value;\n }\n\n registerOnChange(method: (_: string | null) => void) {\n this.onChangeCallback = method;\n }\n\n registerOnTouched(method: () => void) {\n this.onTouchedCallback = method;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n}\n","<!-- The input that can open the file picker. -->\n<input #fileInput\n (change)=\"onFileChange($event)\"\n class=\"bb-image-picker-input\"\n type=\"file\"\n tabindex=\"-1\"\n accept=\"image/*\">\n\n<span [style.width]=\"styleDimensions?.width || '100%'\"\n [style.height]=\"styleDimensions?.height || '215px'\"\n [style.background-image]=\"image | async\"\n class=\"bb-image-input-image\">\n </span>\n\n<button *ngIf=\"label as labelText\"\n (click)=\"openFilePicker()\"\n bb-button\n class=\"bb-image-input-button\"\n type=\"button\">\n {{ labelText }}\n</button>\n","import {distinctUntilChanged, map, shareReplay, startWith} from 'rxjs/operators';\nimport {Directive, ElementRef, OnInit, Optional, Self} from '@angular/core';\nimport {EMPTY, fromEvent, merge, Observable} from 'rxjs';\nimport {FormGroupDirective} from '@angular/forms';\n\n@Directive({\n selector: 'form',\n exportAs: 'bbForm'\n})\nexport class BbFormSubmit implements OnInit {\n\n submitStatus$: Observable<boolean>;\n\n constructor(private _host: ElementRef<HTMLFormElement>,\n @Optional() @Self() private _formDirective: FormGroupDirective) {\n }\n\n ngOnInit() {\n // Submit changes.\n const regularSubmitChanges$ = fromEvent(this.nativeElement, 'submit').pipe(\n map(() => true)\n );\n\n // Reactive form submit changes.\n const reactiveSubmitChanges$ = this.reactiveSubmitChanges();\n\n // Reset changes.\n const resetChanges$ = fromEvent(this.nativeElement, 'reset').pipe(\n map(() => false)\n );\n\n // Listen to the submit status.\n this.submitStatus$ = merge(regularSubmitChanges$, reactiveSubmitChanges$, resetChanges$).pipe(\n startWith(false),\n distinctUntilChanged(),\n shareReplay({refCount: true, bufferSize: 1})\n );\n }\n\n submit() {\n this._formDirective?.ngSubmit?.emit();\n }\n\n reset() {\n return this.nativeElement?.reset();\n }\n\n private get nativeElement() {\n return this._host?.nativeElement;\n }\n\n private reactiveSubmitChanges() {\n if (!this._formDirective) {\n return EMPTY;\n }\n\n return this._formDirective.ngSubmit.pipe(\n map(() => true)\n );\n }\n\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Optional,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport {delay, distinctUntilChanged, map, startWith, tap} from 'rxjs/operators';\nimport {BbFormSubmitter} from '../directives/form-submitter.directive';\nimport {ELEMENTS_ERRORS, ElementsError} from '../elements.interfaces';\nimport {BbFormSubmit} from '../directives/form-submit.directive';\nimport {NgControl, ValidationErrors} from '@angular/forms';\nimport {combineLatest, EMPTY, Observable, of} from 'rxjs';\n\n@Component({\n selector: 'bb-form-error',\n templateUrl: './form-error.component.html',\n styleUrls: ['./form-error.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-form-error'\n },\n preserveWhitespaces: false\n})\nexport class BbFormError implements OnInit {\n\n // Inputs.\n @Input()\n set control(value: NgControl) {\n this._ngControl = value;\n }\n\n get control() {\n return this._ngControl;\n }\n\n // Outputs.\n @Output() errorChange = new EventEmitter<{ token: string, data?: any } | null>();\n\n // State.\n error$: Observable<{ token: string, data?: any } | null>;\n\n // Subscriptions.\n private _ngControl: NgControl | null = null;\n\n constructor(@Optional() private _form?: BbFormSubmit,\n @Optional() private _control?: NgControl,\n @Optional() private _formSubmitter?: BbFormSubmitter,\n @Optional() @Inject(ELEMENTS_ERRORS) private _errors?: ElementsError[]) {\n }\n\n ngOnInit() {\n // Set the control if it was not set before.\n if (!this.control) {\n this.control = this._control;\n }\n\n // Listen for the submit changes\n const submitStatus$ = this.submitStatusChanges();\n\n // An observable that emits error changes.\n const errorChanges$ = this.statusChanges().pipe(\n map(() => this.getError(this.control.errors)),\n distinctUntilChanged(),\n map(error => typeof error === 'string' ? {token: error} : error)\n );\n\n // Whenever the user submitted the form we want to\n // listen for any error changes.\n this.error$ = combineLatest([submitStatus$, errorChanges$]).pipe(\n map(([submitted, error]) => {\n // If not submitted return null.\n if (!submitted) {\n return null;\n }\n\n // Return the error if submitted.\n return error;\n }),\n tap(value => this.errorChange.emit(value))\n );\n }\n\n private getError(errors?: ValidationErrors) {\n // Validate the errors exist.\n if (!errors) {\n return null;\n }\n\n // Get the first error in the errors.\n const [errorName] = Object.keys(errors);\n const error = errors[errorName];\n\n // Validate the error exists.\n if (!error) {\n return null;\n }\n\n // Map the arrays into a object so we can\n // access the functions by a key-lookup.\n const errorFunctions = this._errors.reduce((previous, current) => ({...previous, ...current}), {});\n\n // Get the error function.\n const errorFunction = errorFunctions[errorName] || errorFunctions['unknown'];\n\n // Validate the error function exists.\n if (!errorFunction) {\n return null;\n }\n\n // Return the parsed error.\n return errorFunction(error);\n }\n\n private submitStatusChanges() {\n const native$ = this.getNativeFormSubmit();\n const manual$ = this.getManualFormSubmit();\n return combineLatest([native$, manual$]).pipe(\n map(([native, manual]) => native || manual),\n distinctUntilChanged()\n );\n }\n\n private getNativeFormSubmit() {\n if (!this._form) {\n return of(true);\n }\n\n return this._form.submitStatus$;\n }\n\n private getManualFormSubmit() {\n if (!this._formSubmitter) {\n return of(false);\n }\n\n return this._formSubmitter.submitted$.pipe(\n distinctUntilChanged()\n );\n }\n\n private statusChanges() {\n if (!this.control) {\n return EMPTY;\n }\n\n if (!this.control.statusChanges) {\n return EMPTY;\n }\n\n return this.control.statusChanges.pipe(\n startWith(this.control.status as unknown),\n delay(0)\n );\n }\n\n}\n","<ng-container *ngIf=\"error$ | async as error\">\n <p *ngIf=\"error?.token | bbLocalize:{optional: true, data: error?.data} as message\"\n class=\"bb-form-error-message\">\n {{ message }}\n </p>\n</ng-container>","import {\n IsRequired,\n IsRequiredConstructor,\n mixinRequired,\n CanDisable,\n CanDisableConstructor,\n mixinDisabled,\n IsReadonly,\n IsReadonlyConstructor,\n mixinReadonly,\n IsGrouped,\n IsGroupedConstructor,\n mixinGrouped,\n IsFocused,\n IsFocusedConstructor,\n mixinFocused,\n HasError,\n HasErrorConstructor,\n mixinError,\n CanHideErrors,\n CanHideErrorsConstructor,\n mixinHideErrors\n} from '@bravobit/bb-foundation';\nimport {ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {NgControl} from '@angular/forms';\n\nlet nextUniqueId = 0;\n\nclass BbFormControlBase {\n}\n\nconst BbFormControlMixinBase: IsRequiredConstructor\n & IsGroupedConstructor\n & IsFocusedConstructor\n & IsReadonlyConstructor\n & CanDisableConstructor\n & HasErrorConstructor\n & CanHideErrorsConstructor\n & typeof BbFormControlBase\n = mixinDisabled(mixinFocused(mixinReadonly(mixinGrouped(mixinRequired(mixinError(mixinHideErrors(BbFormControlBase)))))));\n\n@Component({\n selector: 'bb-form-control',\n templateUrl: './form-control.component.html',\n styleUrls: ['./form-control.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-form-control',\n '[class.readonly]': 'readonly',\n '[class.required]': 'required',\n '[class.disabled]': 'disabled',\n '[class.focused]': 'focused',\n '[class.grouped]': 'grouped',\n '[class.arrow]': 'arrow',\n '[class.error]': 'error'\n },\n inputs: ['grouped', 'hideErrors'],\n preserveWhitespaces: false\n})\nexport class BbFormControl extends BbFormControlMixinBase implements IsRequired, IsFocused, IsReadonly, IsGrouped, CanDisable, HasError, CanHideErrors {\n\n // Views.\n @ContentChild(NgControl) ngControl: NgControl;\n\n // Inputs.\n @Input() label: string | TemplateRef<any> | null = null;\n @Input() hint: string | TemplateRef<any> | null = null;\n\n // Data.\n arrow: boolean = false;\n\n // Data.\n labelId = `bb-form-control-${nextUniqueId++}`;\n\n onErrorChange(error: { token: string, data?: any } | null) {\n this.error = !!error;\n }\n\n}\n","<!-- Label of the form control. -->\n<label *ngIf=\"label as labelContent\"\n [attr.for]=\"labelId\"\n class=\"bb-form-control-label\">\n <ng-template [bbTemplate]=\"labelContent\">\n {{ labelContent }}\n </ng-template>\n</label>\n\n<!-- The input with the addons. -->\n<div class=\"bb-form-control-container\">\n <ng-content select=\"[bbPrefix]\"></ng-content>\n <ng-content select=\"[bbInput]\"></ng-content>\n <ng-content select=\"[bbSuffix]\"></ng-content>\n</div>\n\n<!-- The error component. -->\n<bb-form-error *ngIf=\"!hideErrors\"\n [control]=\"ngControl\"\n (errorChange)=\"onErrorChange($event)\">\n</bb-form-error>\n\n<!-- The form control hint. -->\n<p *ngIf=\"hint as hintContent\"\n class=\"bb-form-control-hint\">\n <ng-template [bbTemplate]=\"hintContent\">\n {{ hintContent }}\n </ng-template>\n</p>\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'bbFileSize'\n})\nexport class BbFileSize implements PipeTransform {\n\n transform(value: number) {\n return this.format(value);\n }\n\n private format = (value: number, decimals: number = 2) => {\n if (value === 0) {\n return '0 Bytes';\n }\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const index = Math.floor(Math.log(value) / Math.log(k));\n\n return parseFloat((value / Math.pow(k, index)).toFixed(dm)) + ' ' + sizes[index];\n };\n\n}\n","import {ImageConverter} from '@bravobit/bb-foundation';\nimport {DomSanitizer} from '@angular/platform-browser';\nimport {Pipe, PipeTransform} from '@angular/core';\nimport {Platform} from '@angular/cdk/platform';\n\n@Pipe({\n name: 'bbFileImage'\n})\nexport class BbFileImage implements PipeTransform {\n\n constructor(private _platform: Platform,\n private _image: ImageConverter,\n private _sanitizer: DomSanitizer) {\n }\n\n async transform(file: File) {\n // If the file is not a file return.\n if (!this._platform.isBrowser || !(file instanceof File)) {\n return null;\n }\n\n return this._image.fileToImage(file, [\n 'image/png',\n 'image/jpeg',\n 'image/webp',\n 'image/gif',\n 'image/svg+xml'\n ]).then(image => {\n if (!image) {\n return null;\n }\n\n return {\n background: this._sanitizer.bypassSecurityTrustStyle(`url(${image.src})`),\n aspectRatio: image.height / image.width\n };\n }).catch(() => {\n return null;\n });\n }\n\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostListener,\n Input,\n Output,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n CanDisable,\n CanDisableConstructor,\n IsGrouped,\n IsGroupedConstructor,\n IsRequired,\n IsRequiredConstructor,\n CanHideErrors,\n CanHideErrorsConstructor,\n HasError,\n HasErrorConstructor,\n mixinDisabled,\n mixinGrouped,\n mixinRequired,\n mixinError,\n mixinHideErrors\n} from '@bravobit/bb-foundation';\nimport {ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {animate, style, transition, trigger} from '@angular/animations';\nimport {BehaviorSubject} from 'rxjs';\n\nlet nextUniqueId = 0;\n\nclass BbFilePickerBase {\n}\n\nconst BbFilePickerMixinBase: IsRequiredConstructor\n & CanDisableConstructor\n & IsGroupedConstructor\n & HasErrorConstructor\n & CanHideErrorsConstructor\n & typeof BbFilePickerBase\n = mixinRequired(mixinDisabled(mixinGrouped(mixinError(mixinHideErrors(BbFilePickerBase)))));\n\n@Component({\n selector: 'bb-file-picker',\n templateUrl: './file-picker.component.html',\n styleUrls: ['./file-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BbFilePicker),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: BbFilePicker,\n multi: true\n }\n ],\n host: {\n 'class': 'bb-file-picker',\n '[class.required]': 'required',\n '[class.disabled]': 'disabled',\n '[class.grouped]': 'grouped',\n '[class.hovered]': 'hovered',\n '[class.error]': 'error'\n },\n animations: [\n trigger('bbFilePickerImageAnimation', [\n transition(':enter', [\n style({opacity: 0}),\n animate('200ms', style({opacity: 1}))\n ]),\n transition(':leave', [\n animate('200ms', style({opacity: 0}))\n ])\n ])\n ],\n inputs: ['disabled', 'hideErrors', 'grouped', 'required'],\n preserveWhitespaces: false\n})\nexport class BbFilePicker extends BbFilePickerMixinBase implements ControlValueAccessor, IsRequired, CanDisable, IsGrouped, HasError, CanHideErrors {\n\n // Views.\n @ViewChild('fileInput', {static: true}) fileInput: ElementRef<HTMLInputElement>;\n @ContentChild('extra') extraTemplate: TemplateRef<any>;\n\n // Inputs.\n @Input() label: string | TemplateRef<any> | null = null;\n @Input() hint: string | TemplateRef<any> | null = null;\n @Input() accept: string | null = null;\n @Input() showImages: boolean = true;\n @Input() allowDragging: boolean = true;\n\n // State.\n labelId = `bb-file-picker-${nextUniqueId++}`;\n hovered: boolean = false;\n value$ = new BehaviorSubject<{ file?: File }>({});\n\n @Input()\n get value() {\n const {file} = this.value$.getValue();\n return file;\n }\n\n @Output() valueChange = new EventEmitter<File | null>();\n\n set value(value: File | null) {\n this.value$.next({file: value});\n this.valueChange.emit(value);\n }\n\n @HostListener('dragover', ['$event', 'true'])\n @HostListener('dragleave', ['$event', 'false'])\n onDrag(event: Event, isHovered: boolean) {\n // Validate the input can support drag.\n if (!this.allowDragging || this.disabled) {\n return;\n }\n\n // Prevent the default event action\n // and start the hovering.\n this.preventDefault(event);\n this.hovered = isHovered;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event: Event) {\n // Validate the input can support drag.\n if (!this.allowDragging || this.disabled) {\n return;\n }\n\n // Prevent the default event action\n // and stop the hovering.\n this.preventDefault(event);\n this.hovered = false;\n\n // Save the file.\n this.saveFile(event['dataTransfer'].files);\n\n // Run the on change callback.\n this.onChangeCallback(this.value);\n }\n\n onButtonPressed(file?: File) {\n if (file) {\n this.value = null;\n this.onChangeCallback(this.value);\n return;\n }\n\n return this.openFilePicker();\n }\n\n openFilePicker() {\n return this.fileInput\n && this.fileInput.nativeElement\n && this.fileInput.nativeElement.click\n && this.fileInput.nativeElement.click();\n }\n\n onFileChange(event: Event) {\n // Validate the input is not disabled.\n if (this.disabled) {\n return;\n }\n\n // Extract the file from the event.\n const fileList = this.getFileListFromEvent(event);\n\n // Save the file.\n this.saveFile(fileList);\n\n // Run the on change callback.\n this.onChangeCallback(this.value);\n\n // Clear the file input.\n if (this.fileInput && this.fileInput.nativeElement) {\n this.fileInput.nativeElement.value = '';\n }\n }\n\n onTouchedCallback: () => void = () => {\n };\n\n onChangeCallback: (_: File | null) => void = () => {\n };\n\n writeValue(value: File | null) {\n this.value = value;\n }\n\n registerOnChange(method: (_: File | null) => void) {\n this.onChangeCallback = method;\n }\n\n registerOnTouched(method: () => void) {\n this.onTouchedCallback = method;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n onErrorChange(error: { token: string, data?: any } | null) {\n this.error = !!error;\n }\n\n validate({value}: FormControl<File>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const regexString = (this.accept || '*')\n .replace(/\\*/g, '.\\*')\n .replace(/,/g, '|');\n const mimeTypeRegex = new RegExp(regexString);\n\n const isNotValid = (typeof File === 'undefined') || !(value instanceof File) || !mimeTypeRegex.test(value?.type);\n return isNotValid && {\n invalidFileType: true\n };\n }\n\n private saveFile = (files?: FileList) => {\n // Validate the files exist.\n if (!files) {\n return;\n }\n\n // Retrieve the first file.\n const file = files[0];\n\n // Validate the first file exists.\n if (!file) {\n return;\n }\n\n // Save the file.\n this.value = file;\n };\n\n private getFileListFromEvent = (event: Event) => {\n const element = event.target as HTMLInputElement;\n\n if (!element) {\n return null;\n }\n\n return element.files;\n };\n\n private preventDefault = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n };\n\n}\n","<!-- The label of the input. -->\n<label *ngIf=\"label as labelContent\"\n [for]=\"labelId\"\n class=\"bb-file-picker-label\">\n <ng-template [bbTemplate]=\"labelContent\">\n {{ labelContent }}\n </ng-template>\n</label>\n\n<!-- The input that can open the file picker. -->\n<input #fileInput\n [accept]=\"accept\"\n [disabled]=\"disabled\"\n (change)=\"onFileChange($event)\"\n class=\"bb-file-picker-input\"\n type=\"file\"\n tabindex=\"-1\">\n\n<div *ngIf=\"value$ | async as data\"\n class=\"bb-file-picker-wrapper\">\n <!-- The button that accepts files. -->\n <div class=\"bb-file-picker-container\">\n <button [class.destructive]=\"!!data?.file\"\n [class.standalone]=\"!allowDragging\"\n [disabled]=\"disabled\"\n [id]=\"labelId\"\n (click)=\"onButtonPressed(data?.file)\"\n type=\"button\"\n class=\"bb-file-picker-button\">\n <ng-container *ngTemplateOutlet=\"data?.file ? closeIcon : uploadIcon\"></ng-container>\n {{ (data?.file ? 'file-picker.remove' : 'file-picker.choose') | bbLocalize }}\n </button>\n <div *ngIf=\"allowDragging\"\n class=\"bb-file-picker-zone\">\n {{ 'file-picker.drop' | bbLocalize }}\n </div>\n </div>\n\n <ng-container *ngIf=\"!!extraTemplate\">\n <ng-container *ngTemplateOutlet=\"extraTemplate; context: {$implicit: data?.file}\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"showImages\">\n <div *ngIf=\"data?.file | bbFileImage | async as image\"\n class=\"bb-file-picker-image-container\">\n <div class=\"bb-file-picker-image-wrapper\">\n <div [@bbFilePickerImageAnimation]=\"true\"\n [style.padding-top.%]=\"image?.aspectRatio * 100\"\n [style.background-image]=\"image?.background\"\n class=\"bb-file-picker-image\">\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- Extra information of the file. -->\n <div [class.visible]=\"!!data?.file\"\n class=\"bb-file-picker-info\">\n <span *ngIf=\"data?.file?.name as name\">{{ name }}</span>\n <span *ngIf=\"data?.file?.size as size\">{{ size | bbFileSize }}</span>\n </div>\n</div>\n\n<bb-form-error *ngIf=\"!hideErrors\"\n (errorChange)=\"onErrorChange($event)\">\n</bb-form-error>\n\n<!-- The file picker hint. -->\n<p *ngIf=\"hint as hintContent\"\n class=\"bb-file-picker-hint\">\n <ng-template [bbTemplate]=\"hintContent\">\n {{ hintContent }}\n </ng-template>\n</p>\n\n<!-- Upload icon. -->\n<ng-template #uploadIcon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"bb-file-picker-icon\"\n width=\"24\"\n height=\"24\">\n <path fill=\"currentColor\"\n d=\"M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5a2.5 2.5 0 010-5H17v2H9.41c-.55 0-.55 1 0 1H18c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z\"></path>\n <path fill=\"none\" d=\"M0 0h24v24H0V0z\"></path>\n </svg>\n</ng-template>\n\n<!-- Close icon. -->\n<ng-template #closeIcon>\n <svg xmlns=\"http://www.w3.org/2000/svg\"\n class=\"bb-file-picker-icon\"\n width=\"24\"\n height=\"24\">\n <path fill=\"currentColor\"\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"></path>\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n </svg>\n</ng-template>\n","import {\n Directive,\n DoCheck,\n ElementRef,\n Host,\n HostBinding,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self\n} from '@angular/core';\nimport {BbFormControl} from '../form-control/form-control.component';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {NgControl} from '@angular/forms';\nimport {Subscription} from 'rxjs';\n\n@Directive({\n selector: 'select[bbInput]',\n host: {\n '[disabled]': 'disabled',\n '(focus)': 'setFocus(true)',\n '(blur)': 'setFocus(false)'\n }\n})\nexport class BbSelect implements OnInit, DoCheck, OnDestroy {\n\n protected hasArrow: boolean = true;\n\n private _subscription: Subscription;\n\n constructor(protected _elementRef: ElementRef,\n @Optional() @Self() protected _ngControl: NgControl,\n @Optional() @Host() protected _formControl: BbFormControl) {\n }\n\n ngOnInit() {\n // Set an arrow on the form control if\n // it requires one.\n this._formControl.arrow = this.hasArrow;\n }\n\n ngDoCheck() {\n if (this._ngControl) {\n this.disabled = this._ngControl.disabled;\n }\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n focus() {\n return this._elementRef?.nativeElement?.focus();\n }\n\n setFocus(hasFocus: boolean) {\n if (!this._formControl) {\n return;\n }\n\n this._formControl.focused = hasFocus;\n }\n\n @HostBinding('attr.id')\n get id() {\n return this._formControl?.labelId ?? null;\n }\n\n get disabled() {\n if (this._ngControl && this._ngControl.disabled !== null) {\n return this._ngControl.disabled;\n }\n\n return this._disabled;\n }\n\n @Input()\n set disabled(newValue: boolean) {\n this._disabled = coerceBooleanProperty(newValue);\n\n if (!this._formControl) {\n return;\n }\n\n this._formControl.disabled = this._disabled;\n }\n\n private _disabled = false;\n\n get required() {\n return this._required;\n }\n\n @Input()\n set required(newValue: boolean) {\n this._required = coerceBooleanProperty(newValue);\n\n if (!this._formControl) {\n return;\n }\n\n this._formControl.required = this._required;\n }\n\n private _required = false;\n\n}\n\n@Directive({\n selector: 'input[bbInput], textarea[bbInput]',\n host: {\n '[disabled]': 'disabled',\n '[readonly]': 'readonly',\n '(focus)': 'setFocus(true)',\n '(blur)': 'setFocus(false)'\n }\n})\nexport class BbInput extends BbSelect {\n\n protected override hasArrow: boolean = false;\n\n constructor(protected override _elementRef: ElementRef,\n @Optional() @Self() protected override _ngControl: NgControl,\n @Optional() @Host() protected override _formControl: BbFormControl) {\n super(_elementRef, _ngControl, _formControl);\n }\n\n get readonly() {\n return this._readonly;\n }\n\n @Input()\n set readonly(newValue: boolean) {\n this._readonly = coerceBooleanProperty(newValue);\n\n if (!this._formControl) {\n return;\n }\n\n this._formControl.readonly = this._readonly;\n }\n\n private _readonly = false;\n\n}\n","import {\n CanDisable,\n CanDisableConstructor,\n CanHideErrors,\n CanHideErrorsConstructor,\n HasError,\n HasErrorConstructor,\n IsGrouped,\n IsGroupedConstructor,\n IsReadonly,\n IsReadonlyConstructor,\n IsRequired,\n IsRequiredConstructor,\n mixinDisabled,\n mixinError,\n mixinGrouped,\n mixinHideErrors,\n mixinReadonly,\n mixinRequired\n} from '@bravobit/bb-foundation';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormGroup,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n Validators\n} from '@angular/forms';\nimport {BehaviorSubject, combineLatest, Observable, Subscription} from 'rxjs';\nimport {distinctUntilChanged, map, startWith, tap} from 'rxjs/operators';\nimport {LOCALIZE_ID} from '@bravobit/bb-foundation/localize';\nimport {formatDate} from '@angular/common';\n\nclass BbDatePickerBase {\n}\n\nconst BbFilePickerMixinBase: IsRequiredConstructor\n & IsReadonlyConstructor\n & CanDisableConstructor\n & IsGroupedConstructor\n & HasErrorConstructor\n & CanHideErrorsConstructor\n & typeof BbDatePickerBase\n = mixinRequired(mixinReadonly(mixinDisabled(mixinGrouped(mixinError(mixinHideErrors(BbDatePickerBase))))));\n\n@Component({\n selector: 'bb-date-picker',\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => BbDatePicker),\n multi: true\n },\n {\n provide: NG_VALIDATORS,\n useExisting: BbDatePicker,\n multi: true\n }\n ],\n host: {\n 'class': 'bb-date-picker',\n '[class.required]': 'required',\n '[class.readonly]': 'readonly',\n '[class.disabled]': 'disabled',\n '[class.grouped]': 'grouped',\n '[class.error]': 'error'\n },\n inputs: ['required', 'readonly', 'disabled', 'grouped', 'hideErrors'],\n preserveWhitespaces: false\n})\nexport class BbDatePicker extends BbFilePickerMixinBase implements ControlValueAccessor, OnInit, OnDestroy, IsRequired, IsReadonly, CanDisable, IsGrouped, HasError, CanHideErrors {\n\n // Readonly data.\n readonly _yearRegex = /^(10|[1-9][0-9])\\d{2}$/; // Note: 1000 - 9999\n\n // Inputs.\n @Input() label: string | TemplateRef<any> | null = null;\n @Input() hint: string | TemplateRef<any> | null = null;\n @Input() dayPlaceholder: string | null = 'dd';\n @Input() monthPlaceholder: string | null = 'mm';\n @Input() yearPlaceholder: string | null = 'yyyy';\n\n @Input()\n set years(value: [string | number, string | number] | null) {\n this.parseYears(value);\n }\n\n // Forms.\n form: FormGroup;\n trackByValue = (_, item) => item?.value;\n\n // Data.\n data$: Observable<{\n days?: { label: string, value: number }[],\n months?: { label: string, value: number }[],\n years?: number[] | null\n }>;\n years$ = new BehaviorSubject<number[] | null>(null);\n\n get value() {\n return this.formToDateString(this.form?.value);\n }\n\n @Input()\n set value(value: string | null) {\n this.parseDateStringInForm(value);\n this.valueChange.emit(this.value);\n }\n\n @Output() valueChange = new EventEmitter<string | null>();\n\n // Subscriptions.\n private _subscription = new Subscription();\n\n constructor(private _changeDetectorRef: ChangeDetectorRef,\n @Inject(LOCALIZE_ID) private _localizeId: Observable<string>) {\n super();\n }\n\n ngOnInit() {\n this.composeForm();\n this.getData();\n this.handleChanges();\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n }\n\n writeValue(value: string | null) {\n this.parseDateStringInForm(value);\n }\n\n registerOnChange(method: (_: string | null) => void) {\n this.onChangeCallback = method;\n }\n\n registerOnTouched(method: () => void) {\n this.onTouchedCallback = method;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this.disabled ? this.form?.disable() : this.form?.enable();\n this._changeDetectorRef.markForCheck();\n }\n\n onTouchedCallback: () => void = () => {\n };\n\n onChangeCallback: (_: string | null) => void = () => {\n };\n\n onErrorChange(error: { token: string, data?: any } | null) {\n this.error = !!error;\n }\n\n validate({value}: FormControl<string>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const data = this.parseDateString(value);\n const date = new Date(data?.year, data?.month - 1, data?.day);\n\n const maxDays = this.getDaysInMonth(data?.month, `${data?.year}`);\n\n const isInvalidDate = date.toString() === 'Invalid Date';\n const exceededMaxDays = data?.day > maxDays;\n\n return (isInvalidDate || exceededMaxDays) && {\n invalidDate: true\n };\n }\n\n private handleChanges() {\n const dateOrNull$ = this.form.valueChanges.pipe(\n map(value => this.formToDateString(value)),\n distinctUntilChanged()\n );\n\n const subscription = dateOrNull$.subscribe(() => {\n this.valueChange.emit(this.value);\n this.onChangeCallback(this.value);\n });\n this._subscription.add(subscription);\n }\n\n private getData() {\n const years$ = this.years$.asObservable();\n const months$ = this.getMonthData();\n const days$ = this.getDayData();\n\n this.data$ = combineLatest([years$, months$, days$]).pipe(\n map(([years, months, days]) => ({years, months, days})),\n tap(data => this.verifyListData(data?.days?.length, data?.years))\n );\n }\n\n private verifyListData(maxDays: number, years: number[] | null) {\n const dayControl = this.form.get('day');\n if (dayControl?.value !== null && dayControl?.value > maxDays) {\n dayControl.patchValue(maxDays);\n }\n\n const yearControl = this.form.get('year');\n if (years !== null && yearControl?.value !== null && this._yearRegex.test(yearControl?.value)) {\n const selectedYear = Number(yearControl?.value);\n\n const firstYear = Math.min(...years);\n const lastYear = Math.max(...years);\n\n if (selectedYear < firstYear || selectedYear > lastYear) {\n Promise.resolve().then(() => yearControl.patchValue(null));\n }\n }\n }\n\n private getDayData() {\n const count$ = this.form.valueChanges.pipe(\n startWith(this.form?.value as object),\n map(({month, year}) => this.getDaysInMonth(month, year)),\n distinctUntilChanged()\n );\n\n return count$.pipe(\n map(count => Array(count).fill(0).map((_, index) => ({\n label: `${index + 1}`,\n value: index + 1\n })))\n );\n }\n\n private getMonthData() {\n return this._localizeId.pipe(\n map(locale => {\n return Array(12).fill(0).map((_, month) => {\n const date = new Date(2000, month, 1);\n const label = formatDate(date, 'LLLL', locale);\n return {label, value: month + 1};\n });\n })\n );\n }\n\n private composeForm() {\n const {required, pattern, minLength, maxLength} = Validators;\n const yearPattern = pattern(this._yearRegex);\n const yearValidators = [required, yearPattern, minLength(4), maxLength(4)];\n\n this.form = new FormGroup({\n day: new FormControl<number>(null, required),\n month: new FormControl<number>(null, required),\n year: new FormControl<number>(null, yearValidators)\n });\n }\n\n private parseDateStringInForm(value: string | null) {\n // If the date string was not a valid format, reset the form.\n if (!this.isValidDateString(value)) {\n if (value !== null) {\n this.form?.reset({year: null, month: null, day: null}, {emitEvent: false});\n }\n return;\n }\n\n // Parse the date string and save in the form.\n const data = this.parseDateString(value);\n const year = data?.year !== null && data?.year !== undefined\n ? this.padString(`${data?.year}`, 4, '0')\n : null;\n const formData = {...(data ?? {}), year};\n\n this.form?.patchValue(formData, {emitEvent: false});\n }\n\n private parseDateString(value: string) {\n if (!this.isValidDateString(value)) {\n return null;\n }\n\n // Parse the date string.\n const [year, month, day] = value?.split('-');\n\n return {\n day: day ? parseInt(day, 10) : null,\n month: month ? parseInt(month, 10) : null,\n year: year ? parseInt(year, 10) : null\n };\n }\n\n private parseYears(values: [string | number, string | number] | null) {\n if (!values) {\n return this.years$.next(null);\n }\n\n // Parse the values to years (in numbers).\n const [first, last] = values;\n const firstYear = this.parseYearFormat(first);\n const lastYear = this.parseYearFormat(last);\n\n // Check cases in where we cannot parse.\n if (firstYear === null || lastYear === null) {\n return this.years$.next(null);\n }\n\n const difference = firstYear - lastYear;\n const absoluteDifference = Math.abs(difference) + 1;\n\n // Create an array with years.\n const years = Array(absoluteDifference)\n .fill(0)\n .map((_, index) => difference < 0 ? (firstYear + index) : (firstYear - index));\n\n // Validate we have one or more years.\n if (years?.length <= 0) {\n return this.years$.next(null);\n }\n\n // Push the years.\n return this.years$.next(years);\n }\n\n private formToDateString = ({year, month, day}) => {\n if (this.form?.invalid) {\n return null;\n }\n\n const prefixedMonth = this.padString(`${month}`, 2, '0');\n const prefixedDay = this.padString(`${day}`, 2, '0');\n\n return [year, prefixedMonth, prefixedDay].join('-');\n };\n\n private parseYearFormat = (value: string | number) => {\n // Transform the value to a definitive string.\n const yearString = `${value}`;\n const currentFullYear = new Date().getFullYear();\n\n // Handle default \"current\" syntax.\n if (yearString === 'current') {\n return currentFullYear;\n }\n\n // Handle \"current + {amount}\" syntax.\n if (/^current\\s?\\+\\s?\\d+$/.test(yearString)) {\n const amount = Number(yearString?.split('+')?.[1]?.trim()) ?? 0;\n return currentFullYear + amount;\n }\n\n // Handle \"current - {amount}\" syntax.\n if (/^current\\s?-\\s?\\d+$/.test(yearString)) {\n const amount = Number(yearString?.split('-')?.[1]?.trim()) ?? 0;\n return currentFullYear - amount;\n }\n\n // Handling the default number case.\n if (/^[0-9]{4}$/.test(yearString)) {\n return Number(yearString);\n }\n\n // We could not parse it.\n return null;\n };\n\n private getDaysInMonth = (month: number | null = null, year: string | null = null) => {\n if (this.form?.invalid || month === null || year === null) {\n return 31;\n }\n\n const parsedYear = parseInt(year, 10);\n return new Date(parsedYear, month, 0).getDate();\n };\n\n private isValidDateString = (value: unknown) => {\n return typeof value === 'string' && /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/.test(value);\n };\n\n private padString = (value: string, maxLength: number, fillString: string = '0') => {\n const count = maxLength - value.length;\n for (let index = 0; index < count; index++) {\n value = `${fillString}${value}`;\n }\n\n return value;\n };\n\n}\n","<!-- Label of the date picker. -->\n<label *ngIf=\"label as labelContent\"\n class=\"bb-date-picker-label\">\n <ng-template [bbTemplate]=\"labelContent\">\n {{ labelContent }}\n </ng-template>\n</label>\n\n<!-- The form containing the year/month/day fields. -->\n<form *ngIf=\"data$ | async as data\"\n [formGroup]=\"form\"\n class=\"bb-date-picker-container\"\n novalidate>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('day')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"day\">\n <option [ngValue]=\"null\">{{ dayPlaceholder }}</option>\n <option *ngFor=\"let day of data?.days; trackBy: trackByValue\"\n [ngValue]=\"day?.value\">\n {{ day?.label }}\n </option>\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select [class.has-value]=\"!!form?.get('month')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"month\">\n <option [ngValue]=\"null\">{{ monthPlaceholder }}</option>\n <option *ngFor=\"let month of data?.months; trackBy: trackByValue\"\n [ngValue]=\"month?.value\">\n {{ month?.label }}\n </option>\n </select>\n </bb-form-control>\n </div>\n <div class=\"bb-date-picker-item\">\n <bb-form-control hideErrors>\n <select *ngIf=\"data?.years?.length > 0; else defaultYearInputTemplate\"\n [class.has-value]=\"!!form?.get('year')?.value\"\n bbInput\n autocomplete=\"off\"\n formControlName=\"year\">\n <option [ngValue]=\"null\">{{ yearPlaceholder }}</option>\n <option *ngFor=\"let year of data?.years\"\n [value]=\"year\">\n {{ year }}\n </option>\n </select>\n\n <ng-template #defaultYearInputTemplate>\n <input [placeholder]=\"yearPlaceholder\"\n bbInput\n type=\"text\"\n inputmode=\"numeric\"\n minlength=\"4\"\n maxlength=\"4\"\n pattern=\"^[0-9]{4}$\"\n formControlName=\"year\"\n autocomplete=\"off\">\n </ng-template>\n </bb-form-control>\n </div>\n</form>\n\n<!-- The date picker error. -->\n<bb-form-error *ngIf=\"!hideErrors\"\n (errorChange)=\"onErrorChange($event)\">\n</bb-form-error>\n\n<!-- The date picker hint. -->\n<p *ngIf=\"hint as hintContent\"\n class=\"bb-date-picker-hint\">\n <ng-template [bbTemplate]=\"hintContent\">\n {{ hintContent }}\n </ng-template>\n</p>\n","import {Directive} from '@angular/core';\n\n@Directive({\n selector: '[bbSuffix]',\n host: {\n 'class': 'bb-suffix'\n }\n})\nexport class BbSuffix {\n}\n\n@Directive({\n selector: '[bbPrefix]',\n host: {\n 'class': 'bb-prefix'\n }\n})\nexport class BbPrefix {\n}\n","import {IsGrouped, IsGroupedConstructor, mixinGrouped} from '@bravobit/bb-foundation';\nimport {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';\n\nclass BbFormGroupBase {\n}\n\nconst BbFormGroupMixinBase: IsGroupedConstructor\n & typeof BbFormGroupBase\n = mixinGrouped(BbFormGroupBase);\n\n@Component({\n selector: 'bb-form-group',\n templateUrl: './form-group.component.html',\n styleUrls: ['./form-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-form-group',\n '[class.grouped]': 'grouped'\n },\n inputs: ['grouped'],\n preserveWhitespaces: false\n})\nexport class BbFormGroup extends BbFormGroupMixinBase implements IsGrouped {\n}\n","<ng-content></ng-content>\n","import {Inject, LOCALE_ID, Optional, Pipe, PipeTransform} from '@angular/core';\nimport {Localize} from '@bravobit/bb-foundation/localize';\nimport {formatDate} from '@angular/common';\n\n@Pipe({\n name: 'bbRelativeTime'\n})\nexport class BbRelativeTime implements PipeTransform {\n\n constructor(@Inject(LOCALE_ID) private _localeId: string,\n @Optional() private _localize?: Localize) {\n }\n\n transform(value: string | number | Date) {\n // Parse the value to a date object.\n const date = this.parseAsDate(value);\n\n // Check if the date is valid.\n if (!this.isValidDate(date)) {\n return value;\n }\n\n // Return the formatted date.\n return this.format(date);\n }\n\n private format(date: Date) {\n // It happens tomorrow.\n if (this.isTomorrow(date)) {\n return this.formatString(date, 'times.tomorrow_at', 'shortTime');\n }\n\n // It happened today.\n if (this.isToday(date)) {\n return this.formatString(date, 'times.today_at', 'shortTime');\n }\n\n // It happened yesterday.\n if (this.isYesterday(date)) {\n return this.formatString(date, 'times.yesterday_at', 'shortTime');\n }\n\n // Just return the date.\n return this.formatString(date);\n }\n\n private formatString(date: Date, token?: string, format?: string) {\n // Just return the parsed date.\n if (!this._localize || !token || !format) {\n return formatDate(date, 'mediumDate', this.locale);\n }\n\n // Return the translated formatting.\n return this._localize.translate({\n token: token,\n data: {date: formatDate(date, format, this.locale)}\n });\n }\n\n private get locale() {\n return this._localize?.current?.locale ?? this._localeId;\n }\n\n private isValidDate = (date: Date) => {\n return typeof date === 'object' &&\n typeof date.getTime === 'function' &&\n !isNaN(date.getTime());\n };\n\n private parseAsDate = (value: string | number | Date) => {\n // Add a Z after the date so\n // it is treated as a UTC date.\n if (typeof value === 'string' && /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/.test(value)) {\n return new Date(`${value}Z`);\n }\n\n // Return the regular parsed date.\n return new Date(value);\n };\n\n private isToday = (date: Date) => {\n const today = new Date();\n return date?.getDate() === today?.getDate() &&\n date?.getMonth() === today?.getMonth() &&\n date?.getFullYear() === today?.getFullYear();\n };\n\n private isYesterday = (date: Date) => {\n const yesterday = new Date(new Date()?.setDate(new Date()?.getDate() - 1));\n return date?.getDate() === yesterday?.getDate() &&\n date?.getMonth() === yesterday?.getMonth() &&\n date?.getFullYear() === yesterday?.getFullYear();\n };\n\n private isTomorrow = (date: Date) => {\n const tomorrow = new Date(new Date()?.setDate(new Date()?.getDate() + 1));\n return date?.getDate() === tomorrow?.getDate() &&\n date?.getMonth() === tomorrow?.getMonth() &&\n date?.getFullYear() === tomorrow?.getFullYear();\n };\n\n}\n","import {\n CanDisable,\n CanDisableConstructor,\n mixinDisabled,\n IsGrouped,\n IsGroupedConstructor,\n mixinGrouped\n} from '@bravobit/bb-foundation';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\n\nlet nextUniqueId = 0;\n\nclass BbCheckboxBase {\n}\n\nconst BbCheckboxMixinBase: IsGroupedConstructor\n & CanDisableConstructor\n & typeof BbCheckboxBase\n = mixinDisabled(mixinGrouped(BbCheckboxBase));\n\n@Component({\n selector: 'bb-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbCheckbox), multi: true}\n ],\n host: {\n 'class': 'bb-checkbox',\n '[class.grouped]': 'grouped'\n },\n inputs: ['grouped', 'disabled'],\n preserveWhitespaces: false\n})\nexport class BbCheckbox extends BbCheckboxMixinBase implements ControlValueAccessor, IsGrouped, CanDisable {\n\n // Data.\n labelId = `bb-checkbox-${nextUniqueId++}`;\n\n // Inputs.\n @Input() tabIndex: number;\n\n get checked() {\n return this._checked;\n }\n\n @Input()\n set checked(value: any) {\n this._checked = coerceBooleanProperty(value);\n this._changeDetection.markForCheck();\n }\n\n private _checked: boolean = false;\n\n constructor(private _changeDetection: ChangeDetectorRef) {\n super();\n }\n\n // Methods.\n onChange: (newValue: boolean) => void = () => {\n };\n\n onTouched: () => void = () => {\n };\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this._changeDetection.markForCheck();\n }\n\n writeValue(newValue: boolean) {\n this.checked = newValue;\n }\n\n onInteractionEvent(event: Event) {\n // Stop the propagation to prevent it from bubbling up.\n event.stopPropagation();\n }\n\n onInputClick(event: Event) {\n // Stop the propagation to prevent it from bubbling up.\n event.stopPropagation();\n\n // Toggle the value.\n this.checked = !this.checked;\n\n // Emit the change event.\n this.onChange && this.onChange(this.checked);\n }\n\n}\n","<input [id]=\"labelId\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n (change)=\"onInteractionEvent($event)\"\n (click)=\"onInputClick($event)\"\n class=\"bb-checkbox-input\"\n tabindex=\"-1\"\n type=\"checkbox\">\n\n<label [for]=\"labelId\"\n [attr.tabindex]=\"disabled ? -1 : (tabIndex || 0)\"\n (keyup.space)=\"onInputClick($event)\"\n class=\"bb-checkbox-label\">\n <span>\n <svg width=\"12px\"\n height=\"10px\"\n viewbox=\"0 0 12 10\">\n <polyline points=\"1.5 6 4.5 9 10.5 1\"></polyline>\n </svg>\n </span>\n <span>\n <ng-content></ng-content>\n </span>\n</label>\n","import {ChangeDetectionStrategy, Component, HostBinding, Input, ViewEncapsulation} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'bb-avatar',\n templateUrl: './avatar.component.html',\n styleUrls: ['./avatar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n host: {\n 'class': 'bb-avatar',\n 'role': 'img',\n '[style.width.px]': 'size',\n '[style.min-width.px]': 'size',\n '[style.height.px]': 'size',\n '[style.min-height.px]': 'size',\n '[style.font-size.px]': 'size * 0.42',\n '[style.color]': 'color',\n '[style.background-color]': 'backgroundColor'\n }\n})\nexport class BbAvatar {\n\n // Inputs.\n @Input() size: number = 40;\n\n // State.\n state$ = new BehaviorSubject<string>('initials');\n\n // Data.\n private _src: string | null = null;\n private _title: string | null = null;\n private _initials: string = '!';\n private _color: string = 'rgb(255, 255, 255)';\n private _backgroundColor: string = 'rgb(66, 66, 66)';\n\n @Input()\n set src(value: string) {\n this._src = value;\n\n if (this._src) {\n this.state$.next('image');\n }\n }\n\n @Input()\n @HostBinding('attr.title')\n set title(value: string) {\n // Set the title and the initials.\n this._title = value ?? '!';\n this._initials = this.getInitials(this._title);\n\n // Generate the colors based on the name.\n const {r, g, b} = this.toRgb(this._title);\n this.setColors(r, g, b);\n }\n\n @Input()\n set tintColor(value: string) {\n const result = this.parseColorFormat(value);\n if (!result) {\n return;\n }\n\n const {r, g, b} = result;\n this.setColors(r, g, b);\n }\n\n get src() {\n return this._src;\n }\n\n get color() {\n return this._color;\n }\n\n get backgroundColor() {\n return this._backgroundColor;\n }\n\n get title() {\n return this._title;\n }\n\n get initials() {\n return this._initials;\n }\n\n private setColors(red: number, green: number, blue: number) {\n this._color = `rgb(${red},${green},${blue})`;\n this._backgroundColor = `rgba(${red},${green},${blue}, 0.25)`;\n }\n\n private toRgb = (value: string) => {\n const baseRed = 128;\n const baseGreen = 128;\n const baseBlue = 128;\n\n let seed = value.charCodeAt(0) ^ value.charCodeAt(1);\n const rand_1 = Math.abs((Math.sin(seed++) * 10000)) % 256;\n const rand_2 = Math.abs((Math.sin(seed++) * 10000)) % 256;\n const rand_3 = Math.abs((Math.sin(seed++) * 10000)) % 256;\n\n const r = Math.round((rand_1 + baseRed) / 2);\n const g = Math.round((rand_2 + baseGreen) / 2);\n const b = Math.round((rand_3 + baseBlue) / 2);\n\n return {r, g, b};\n };\n\n private getInitials = (name: string) => {\n // Get all the initials.\n const names = (name ?? '').split(' ');\n const initials = names\n .map(name => name.charAt(0).toUpperCase())\n .filter(name => /^[a-zA-Z]+$/.test(name));\n\n // Check if there are any initials.\n if (initials?.length <= 0) {\n return null;\n }\n\n // Get the first and last initials.\n if (initials?.length > 1) {\n return `${initials?.[0]}${initials?.[initials?.length - 1]}`;\n }\n\n // Get only the first initial.\n return initials?.[0];\n };\n\n private parseColorFormat = (value: string) => {\n if (!value) {\n return null;\n }\n\n // Hex 3 values.\n let match = value.match(/^#([0-9a-f]{3})$/i);\n if (match && match[1]) {\n const r = parseInt(match[1].charAt(0), 16) * 0x11;\n const g = parseInt(match[1].charAt(1), 16) * 0x11;\n const b = parseInt(match[1].charAt(2), 16) * 0x11;\n\n return {r, g, b};\n }\n\n // Hex 6 values.\n match = value.match(/^#([0-9a-f]{6})$/i);\n if (match && match[1]) {\n const r = parseInt(match[1].substring(0, 2), 16);\n const g = parseInt(match[1].substring(2, 4), 16);\n const b = parseInt(match[1].substring(4, 6), 16);\n\n return {r, g, b};\n }\n\n // Rgb values.\n match = value.match(/^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i);\n if (match) {\n const r = parseInt(match[1], 10);\n const g = parseInt(match[2], 10);\n const b = parseInt(match[3], 10);\n\n return {r, g, b};\n }\n\n // Not a supported color format.\n console?.warn?.(`BbAvatar: Unsupported tintColor \"${value}\" was used.`);\n return null;\n };\n\n}\n","<ng-container [ngSwitch]=\"state$ | async\">\n <!-- Image. -->\n <ng-container *ngSwitchCase=\"'image'\">\n <img [src]=\"src\"\n [alt]=\"initials\"\n (error)=\"state$?.next('initials')\"\n class=\"bb-avatar-image\">\n </ng-container>\n\n <!-- Default initials fallback. -->\n <ng-container *ngSwitchDefault>\n {{ initials }}\n </ng-container>\n</ng-container>\n","import {ChangeDetectionStrategy, Component, Inject, Input, Optional, ViewEncapsulation} from '@angular/core';\nimport {ELEMENTS_ICONS, ElementsIcon} from '../elements.interfaces';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {BehaviorSubject} from 'rxjs';\n\n@Component({\n selector: 'bb-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-icon',\n '[attr.aria-hidden]': 'ariaHidden',\n '[style.width.px]': 'size',\n '[style.height.px]': 'size',\n '[style.min-width.px]': 'size',\n '[style.min-height.px]': 'size',\n '[style.font-size.px]': 'size'\n },\n preserveWhitespaces: false\n})\nexport class BbIcon {\n\n // Data.\n private _src: string | null = null;\n\n // State.\n state$ = new BehaviorSubject<any>(null);\n\n @Input() alt: string | null = null;\n @Input() size: number = 24;\n\n @Input()\n set src(newValue: string | null) {\n this.state$.next(this.convert(newValue));\n this._src = newValue;\n }\n\n get src() {\n return this._src;\n }\n\n @Input()\n set ariaHidden(newValue: boolean) {\n this._ariaHidden = coerceBooleanProperty(newValue);\n }\n\n get ariaHidden() {\n return this._ariaHidden;\n }\n\n private _ariaHidden = true;\n\n constructor(@Optional() @Inject(ELEMENTS_ICONS) private _registry: ElementsIcon[]) {\n }\n\n private convert(src: string | null) {\n const [namespace, value] = (src || '').split(':');\n\n const onError = () => {\n this.warn(`ElementsModule: The icon with src \"${src}\" could not be rendered correctly; Did you put a correct src attribute?`);\n return {type: 'unknown'};\n };\n\n if (!namespace || !value || !this._registry) {\n return onError();\n }\n\n // Try to find a image icon.\n const imageIcon = this.findImageIcon(namespace, value);\n if (imageIcon) {\n return imageIcon;\n }\n\n // Try to find a font icon.\n const fontIcon = this.findFontIcon(namespace, value);\n if (fontIcon) {\n return fontIcon;\n }\n\n // Return the on error function.\n return onError();\n }\n\n private findImageIcon(namespace: string, value: string) {\n const data = this._registry.find(item => item['namespace'] === namespace && item['name'] === value);\n\n if (!data) {\n return null;\n }\n\n return {type: data['type'], src: data['src']};\n }\n\n private findFontIcon(namespace: string, content: string) {\n const data = this._registry.find(item => item['namespace'] === namespace);\n\n if (!data) {\n return null;\n }\n\n const uses = data['uses'];\n if (uses === 'data-attribute') {\n return {type: data['type'], className: data['className'], attribute: content};\n }\n\n return {type: data['type'], className: data['className'], content};\n }\n\n private warn = (content: string) => {\n return console && console.warn && console.warn(content);\n };\n\n}\n","<ng-container *ngIf=\"state$ | async as data\"\n [ngSwitch]=\"data?.type\">\n <i *ngSwitchCase=\"'font'\"\n [attr.data-icon]=\"data?.attribute\"\n [class]=\"data?.className\">\n {{ data?.content }}\n </i>\n <img *ngSwitchCase=\"'image'\"\n [src]=\"data?.src\"\n [alt]=\"alt\">\n <svg *ngSwitchCase=\"'unknown'\"\n viewBox=\"0 0 1 1\">\n <rect x=\"0\" y=\"0\" width=\"1\" height=\"1\" fill=\"#c5c5c5\"></rect>\n </svg>\n</ng-container>\n","import {ChangeDetectionStrategy, Component, EventEmitter, Output, ViewEncapsulation} from '@angular/core';\n\n@Component({\n selector: 'bb-tag',\n templateUrl: './tag.component.html',\n styleUrls: ['./tag.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n preserveWhitespaces: false,\n host: {'class': 'bb-tag'}\n})\nexport class BbTag {\n\n // Outputs.\n @Output() onClose: EventEmitter<void> = new EventEmitter<void>();\n\n}\n","<ng-content></ng-content>\n\n<button *ngIf=\"onClose?.observed\"\n (click)=\"onClose.emit()\"\n type=\"button\">\n Close\n</button>","import {BbDropdown, BbDropdownItem} from './dropdown/dropdown.component';\nimport {ELEMENTS_ERRORS, ELEMENTS_ICONS} from './elements.interfaces';\nimport {BbFormSubmitter} from './directives/form-submitter.directive';\nimport {BbImagePicker} from './image-picker/image-picker.component';\nimport {BbFormControl} from './form-control/form-control.component';\nimport {BbFilePicker} from './file-picker/file-picker.component';\nimport {BbDatePicker} from './date-picker/date-picker.component';\nimport {LocalizeModule} from '@bravobit/bb-foundation/localize';\nimport {BbPrefix, BbSuffix} from './directives/addon.directive';\nimport {BbFormSubmit} from './directives/form-submit.directive';\nimport {BbInput, BbSelect} from './directives/input.directive';\nimport {BbFormGroup} from './form-group/form-group.component';\nimport {BbFormError} from './form-error/form-error.component';\nimport {BbAnchor, BbButton} from './button/button.component';\nimport {ModuleWithProviders, NgModule} from '@angular/core';\nimport {BbRelativeTime} from './pipes/relative-time.pipe';\nimport {UtilsModule} from '@bravobit/bb-foundation/utils';\nimport {BbCheckbox} from './checkbox/checkbox.component';\nimport {BbSpinner} from './spinner/spinner.component';\nimport {BbFileImage} from './pipes/file-image.pipe';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {BbAvatar} from './avatar/avatar.component';\nimport {BbFileSize} from './pipes/file-size.pipe';\nimport {CommonModule} from '@angular/common';\nimport {BbIcon} from './icon/icon.component';\nimport {BbTag} from './tag/tag.component';\n\nconst DECLARATIONS_EXPORTS = [\n // Directives.\n BbFormError,\n BbFormSubmit,\n BbFormSubmitter,\n BbInput,\n BbSelect,\n BbPrefix,\n BbSuffix,\n // Pipes.\n BbFileSize,\n BbFileImage,\n BbRelativeTime,\n // Components.\n BbButton,\n BbAnchor,\n BbSpinner,\n BbIcon,\n BbFormControl,\n BbFormGroup,\n BbCheckbox,\n BbDropdown,\n BbDropdownItem,\n BbTag,\n BbAvatar,\n BbFilePicker,\n BbImagePicker,\n BbDatePicker\n];\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n LocalizeModule,\n UtilsModule\n ],\n declarations: [...DECLARATIONS_EXPORTS],\n exports: [...DECLARATIONS_EXPORTS, UtilsModule]\n})\nexport class ElementsModule {\n\n static forRoot(): ModuleWithProviders<ElementsModule> {\n return {\n ngModule: ElementsModule,\n providers: [\n {provide: ELEMENTS_ERRORS, useFactory: getErrors, multi: true},\n ELEMENTS_MATERIAL_ICON\n ]\n };\n }\n\n}\n\nexport const ELEMENTS_MATERIAL_ICON = {\n provide: ELEMENTS_ICONS,\n useValue: {namespace: 'material', className: 'material-icons', uses: 'content', type: 'font'},\n multi: true\n};\n\nexport function getErrors() {\n const data = {\n unknown: () => 'form-control-errors.unknown',\n required: () => 'form-control-errors.required',\n pattern: () => 'form-control-errors.pattern',\n email: () => 'form-control-errors.email',\n emailTaken: () => 'form-control-errors.emailTaken',\n passwordMatch: () => 'form-control-errors.passwordMatch',\n confirm: () => 'form-control-errors.confirm',\n fullNumber: () => 'form-control-errors.fullNumber',\n min: ({min}) => ({token: 'form-control-errors.min', data: {min}}),\n max: ({max}) => ({token: 'form-control-errors.max', data: {max}}),\n maxFileSize: ({maxSize}) => ({token: 'form-control-errors.maxFileSize', data: {maxSize}}),\n minDate: ({date}) => ({token: 'form-control-errors.minDate', data: {date}}),\n maxDate: ({date}) => ({token: 'form-control-errors.maxDate', data: {date}}),\n invalidDate: () => 'form-control-errors.invalidDate',\n invalidFileType: () => 'form-control-errors.invalidFileType',\n minlength: ({requiredLength, actualLength}) => ({\n token: 'form-control-errors.minlength',\n data: {requiredLength, actualLength}\n }),\n maxlength: ({requiredLength, actualLength}) => ({\n token: 'form-control-errors.maxlength',\n data: {requiredLength, actualLength}\n })\n };\n\n return data;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.BbSpinner","i1","i2","i3.BbButton","i4","i5","nextUniqueId","i3.BbFormError","BbFilePickerMixinBase","i5.BbFileSize","i6.BbFileImage","i2.BbFormControl","i3","i4.BbFormError","i5.BbFormSubmit","i6.BbInput","i6.BbSelect","i7.BbFormControl"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bravobit/bb-foundation",
3
- "version": "0.32.0",
3
+ "version": "0.32.1",
4
4
  "description": "The Angular core foundation of the Bravobit team.",
5
5
  "author": {
6
6
  "name": "Stan van Heumen",
@@ -36,30 +36,24 @@
36
36
  "esm": "./esm2022/auth/bravobit-bb-foundation-auth.mjs",
37
37
  "default": "./fesm2022/bravobit-bb-foundation-auth.mjs"
38
38
  },
39
- "./combobox": {
40
- "types": "./combobox/index.d.ts",
41
- "esm2022": "./esm2022/combobox/bravobit-bb-foundation-combobox.mjs",
42
- "esm": "./esm2022/combobox/bravobit-bb-foundation-combobox.mjs",
43
- "default": "./fesm2022/bravobit-bb-foundation-combobox.mjs"
44
- },
45
39
  "./collections": {
46
40
  "types": "./collections/index.d.ts",
47
41
  "esm2022": "./esm2022/collections/bravobit-bb-foundation-collections.mjs",
48
42
  "esm": "./esm2022/collections/bravobit-bb-foundation-collections.mjs",
49
43
  "default": "./fesm2022/bravobit-bb-foundation-collections.mjs"
50
44
  },
51
- "./controls": {
52
- "types": "./controls/index.d.ts",
53
- "esm2022": "./esm2022/controls/bravobit-bb-foundation-controls.mjs",
54
- "esm": "./esm2022/controls/bravobit-bb-foundation-controls.mjs",
55
- "default": "./fesm2022/bravobit-bb-foundation-controls.mjs"
56
- },
57
45
  "./dashboard": {
58
46
  "types": "./dashboard/index.d.ts",
59
47
  "esm2022": "./esm2022/dashboard/bravobit-bb-foundation-dashboard.mjs",
60
48
  "esm": "./esm2022/dashboard/bravobit-bb-foundation-dashboard.mjs",
61
49
  "default": "./fesm2022/bravobit-bb-foundation-dashboard.mjs"
62
50
  },
51
+ "./combobox": {
52
+ "types": "./combobox/index.d.ts",
53
+ "esm2022": "./esm2022/combobox/bravobit-bb-foundation-combobox.mjs",
54
+ "esm": "./esm2022/combobox/bravobit-bb-foundation-combobox.mjs",
55
+ "default": "./fesm2022/bravobit-bb-foundation-combobox.mjs"
56
+ },
63
57
  "./elements": {
64
58
  "types": "./elements/index.d.ts",
65
59
  "esm2022": "./esm2022/elements/bravobit-bb-foundation-elements.mjs",
@@ -72,6 +66,12 @@
72
66
  "esm": "./esm2022/dialog/bravobit-bb-foundation-dialog.mjs",
73
67
  "default": "./fesm2022/bravobit-bb-foundation-dialog.mjs"
74
68
  },
69
+ "./controls": {
70
+ "types": "./controls/index.d.ts",
71
+ "esm2022": "./esm2022/controls/bravobit-bb-foundation-controls.mjs",
72
+ "esm": "./esm2022/controls/bravobit-bb-foundation-controls.mjs",
73
+ "default": "./fesm2022/bravobit-bb-foundation-controls.mjs"
74
+ },
75
75
  "./http": {
76
76
  "types": "./http/index.d.ts",
77
77
  "esm2022": "./esm2022/http/bravobit-bb-foundation-http.mjs",
@@ -96,18 +96,18 @@
96
96
  "esm": "./esm2022/notifications/bravobit-bb-foundation-notifications.mjs",
97
97
  "default": "./fesm2022/bravobit-bb-foundation-notifications.mjs"
98
98
  },
99
- "./recaptcha": {
100
- "types": "./recaptcha/index.d.ts",
101
- "esm2022": "./esm2022/recaptcha/bravobit-bb-foundation-recaptcha.mjs",
102
- "esm": "./esm2022/recaptcha/bravobit-bb-foundation-recaptcha.mjs",
103
- "default": "./fesm2022/bravobit-bb-foundation-recaptcha.mjs"
104
- },
105
99
  "./permissions": {
106
100
  "types": "./permissions/index.d.ts",
107
101
  "esm2022": "./esm2022/permissions/bravobit-bb-foundation-permissions.mjs",
108
102
  "esm": "./esm2022/permissions/bravobit-bb-foundation-permissions.mjs",
109
103
  "default": "./fesm2022/bravobit-bb-foundation-permissions.mjs"
110
104
  },
105
+ "./recaptcha": {
106
+ "types": "./recaptcha/index.d.ts",
107
+ "esm2022": "./esm2022/recaptcha/bravobit-bb-foundation-recaptcha.mjs",
108
+ "esm": "./esm2022/recaptcha/bravobit-bb-foundation-recaptcha.mjs",
109
+ "default": "./fesm2022/bravobit-bb-foundation-recaptcha.mjs"
110
+ },
111
111
  "./rxjs": {
112
112
  "types": "./rxjs/index.d.ts",
113
113
  "esm2022": "./esm2022/rxjs/bravobit-bb-foundation-rxjs.mjs",
@@ -120,18 +120,18 @@
120
120
  "esm": "./esm2022/storage/bravobit-bb-foundation-storage.mjs",
121
121
  "default": "./fesm2022/bravobit-bb-foundation-storage.mjs"
122
122
  },
123
- "./table": {
124
- "types": "./table/index.d.ts",
125
- "esm2022": "./esm2022/table/bravobit-bb-foundation-table.mjs",
126
- "esm": "./esm2022/table/bravobit-bb-foundation-table.mjs",
127
- "default": "./fesm2022/bravobit-bb-foundation-table.mjs"
128
- },
129
123
  "./theming": {
130
124
  "types": "./theming/index.d.ts",
131
125
  "esm2022": "./esm2022/theming/bravobit-bb-foundation-theming.mjs",
132
126
  "esm": "./esm2022/theming/bravobit-bb-foundation-theming.mjs",
133
127
  "default": "./fesm2022/bravobit-bb-foundation-theming.mjs"
134
128
  },
129
+ "./table": {
130
+ "types": "./table/index.d.ts",
131
+ "esm2022": "./esm2022/table/bravobit-bb-foundation-table.mjs",
132
+ "esm": "./esm2022/table/bravobit-bb-foundation-table.mjs",
133
+ "default": "./fesm2022/bravobit-bb-foundation-table.mjs"
134
+ },
135
135
  "./tooltip": {
136
136
  "types": "./tooltip/index.d.ts",
137
137
  "esm2022": "./esm2022/tooltip/bravobit-bb-foundation-tooltip.mjs",