verben-ng-ui 1.2.56 → 1.2.58

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.
@@ -352,8 +352,8 @@ export class DatePickerComponent {
352
352
  return;
353
353
  }
354
354
  const isInsidePane = targetElement.closest('.cdk-overlay-pane') !== null;
355
- if (!this.datePickerContainer.nativeElement.contains(targetElement) &&
356
- this.showCalendar &&
355
+ // !this.datePickerContainer.nativeElement.contains(targetElement)
356
+ if (this.showCalendar &&
357
357
  this.datePickerExpansion &&
358
358
  !this.datePickerExpansion.nativeElement.contains(targetElement) &&
359
359
  !isInsidePane) {
@@ -367,7 +367,7 @@ export class DatePickerComponent {
367
367
  useExisting: forwardRef(() => DatePickerComponent),
368
368
  multi: true,
369
369
  },
370
- ], viewQueries: [{ propertyName: "datePickerContainer", first: true, predicate: ["datePickerContainer"], descendants: true, static: true }, { propertyName: "datePickerExpansion", first: true, predicate: ["datePickerExpansion"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"datePickerContainer.offsetWidth\"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n }\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.calendar-container{position:relative}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{position:absolute;top:100%;left:0;border:1px solid #ccc;background-color:#fff;z-index:10;border-radius:4px}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{position:absolute;top:110%;left:0;width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a;z-index:20}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i5.TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "directive", type: i6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] });
370
+ ], viewQueries: [{ propertyName: "datePickerContainer", first: true, predicate: ["datePickerContainer"], descendants: true, static: true }, { propertyName: "datePickerExpansion", first: true, predicate: ["datePickerExpansion"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"datePickerContainer.offsetWidth\"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n }\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{border:1px solid #ccc;background-color:#fff;border-radius:4px;height:45vh;max-height:370px;overflow-y:auto}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i5.TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "directive", type: i6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] });
371
371
  }
372
372
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DatePickerComponent, decorators: [{
373
373
  type: Component,
@@ -377,7 +377,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
377
377
  useExisting: forwardRef(() => DatePickerComponent),
378
378
  multi: true,
379
379
  },
380
- ], template: "<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"datePickerContainer.offsetWidth\"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n }\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.calendar-container{position:relative}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{position:absolute;top:100%;left:0;border:1px solid #ccc;background-color:#fff;z-index:10;border-radius:4px}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{position:absolute;top:110%;left:0;width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a;z-index:20}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"] }]
380
+ ], template: "<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"datePickerContainer.offsetWidth\"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n }\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{border:1px solid #ccc;background-color:#fff;border-radius:4px;height:45vh;max-height:370px;overflow-y:auto}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"] }]
381
381
  }], propDecorators: { placeholder: [{
382
382
  type: Input
383
383
  }], format: [{
@@ -418,4 +418,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
418
418
  type: HostListener,
419
419
  args: ['document:click', ['$event.target']]
420
420
  }] } });
421
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQWN6RSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLFdBQVcsR0FBRyxhQUFhLENBQUM7SUFDNUIsTUFBTSxHQUFHLFlBQVksQ0FBQztJQUN0QixPQUFPLENBQVE7SUFDZixPQUFPLENBQVE7SUFDZixRQUFRLEdBQWEsS0FBSyxDQUFDO0lBQzNCLE9BQU8sR0FBWSxNQUFNLENBQUM7SUFDMUIsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNyQixZQUFZLEdBQVksSUFBSSxDQUFDO0lBQzdCLGVBQWUsR0FBVyxlQUFlLENBQUM7SUFDMUMsZ0JBQWdCLEdBQVcsZ0JBQWdCLENBQUM7SUFDNUMsSUFBSSxHQUF5QixJQUFJLENBQUM7SUFDbEMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUUxQixlQUFlLEdBQVcsT0FBTyxDQUFDO0lBQ2xDLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFL0IsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7SUFFdkQsbUJBQW1CLENBQWM7SUFFakMsbUJBQW1CLENBQWM7SUFF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Ozs0RkQxTWEsbUJBQW1CO2tCQVovQixTQUFTOytCQUNFLGlCQUFpQixhQUdoQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7OEJBR1EsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFFUCxtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdsRCxtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQTZhbkQsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBmb3J3YXJkUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERyb3Bkb3duQ2hhbmdlRXZlbnQgfSBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2Ryb3AtZG93bic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1kYXRlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5jc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBkYXRlJztcbiAgQElucHV0KCkgZm9ybWF0ID0gJ01NL0REL1lZWVknO1xuICBASW5wdXQoKSBtaW5EYXRlPzogRGF0ZTtcbiAgQElucHV0KCkgbWF4RGF0ZT86IERhdGU7XG4gIEBJbnB1dCgpIGRpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBiZ0NvbG9yPzogc3RyaW5nID0gJyNmZmYnO1xuICBASW5wdXQoKSBib3JkZXI/OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgdXNlRHJvcGRvd25zOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgeWVhclBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0IGEgeWVhcic7XG4gIEBJbnB1dCgpIG1vbnRoUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3QgYSBtb250aCc7XG4gIEBJbnB1dCgpIGRhdGU6IERhdGUgfCBudWxsIHwgc3RyaW5nID0gbnVsbDtcbiAgQElucHV0KCkgc2hvd1RpbWU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBkYXRlUGlja2VyV2lkdGg6IHN0cmluZyA9ICc0MDBweCc7XG4gIEBJbnB1dCgpIHVzZURlZmF1bHREYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGRhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyQ29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZGF0ZVBpY2tlckNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXJFeHBhbnNpb24nLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZGF0ZVBpY2tlckV4cGFuc2lvbiE6IEVsZW1lbnRSZWY7XG5cbiAgeWVhclJhbmdlOiBudW1iZXJbXSA9IFtdO1xuICBmaWx0ZXJlZFllYXJSYW5nZTogbnVtYmVyW10gPSBbXTtcblxuICBzZWxlY3RlZERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgdGVtcFNlbGVjdGVkRGF0ZTogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIHNob3dDYWxlbmRhciA9IGZhbHNlO1xuXG4gIHdlZWtEYXlzID0gWydNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsICdTdW4nXTtcbiAgbW9udGhzID0gW1xuICAgICdKYW51YXJ5JyxcbiAgICAnRmVicnVhcnknLFxuICAgICdNYXJjaCcsXG4gICAgJ0FwcmlsJyxcbiAgICAnTWF5JyxcbiAgICAnSnVuZScsXG4gICAgJ0p1bHknLFxuICAgICdBdWd1c3QnLFxuICAgICdTZXB0ZW1iZXInLFxuICAgICdPY3RvYmVyJyxcbiAgICAnTm92ZW1iZXInLFxuICAgICdEZWNlbWJlcicsXG4gIF07XG5cbiAgc2VsZWN0ZWRNb250aDogbnVtYmVyID0gMTtcbiAgc2VsZWN0ZWRNb250aFN0cmluZzogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkWWVhcjogbnVtYmVyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuXG4gIHByaXZhdGUgb25DaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xuICBwcml2YXRlIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5zYW5pdGl6ZURhdGVTdHJpbmcodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJzZWREYXRlID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgdGhpcy5kYXRlID0gcGFyc2VkRGF0ZTtcblxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpO1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcblxuICAgICAgaWYgKHRoaXMuc2hvd1RpbWUpIHtcbiAgICAgICAgdGhpcy5pbml0VGltZUZyb21EYXRlKHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGlmICh0aGlzLmRhdGUpIHtcbiAgICAgIGxldCBkID0gdGhpcy5kYXRlO1xuICAgICAgaWYgKHR5cGVvZiBkID09PSAnc3RyaW5nJykgZCA9IHRoaXMuc2FuaXRpemVEYXRlU3RyaW5nKGQpO1xuXG4gICAgICBjb25zdCBwYXJzZWREYXRlID0gbmV3IERhdGUoZCk7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpO1xuICAgICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbmV3IERhdGUocGFyc2VkRGF0ZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9udGggPSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpO1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXIgPSB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH1cbiAgfVxuXG4gIGlzU2FtZURhdGUoZDE6IERhdGUsIGQyOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGQxLmdldEZ1bGxZZWFyKCkgPT09IGQyLmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgIGQxLmdldE1vbnRoKCkgPT09IGQyLmdldE1vbnRoKCkgJiZcbiAgICAgIGQxLmdldERhdGUoKSA9PT0gZDIuZ2V0RGF0ZSgpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICAgIGNvbnN0IGVuZFllYXIgPSBjdXJyZW50WWVhciArIDEwO1xuICAgIHRoaXMueWVhclJhbmdlID0gQXJyYXkuZnJvbShcbiAgICAgIHsgbGVuZ3RoOiBlbmRZZWFyIC0gMTk2MCArIDEgfSxcbiAgICAgIChfLCBpKSA9PiAxOTYwICsgaVxuICAgICk7XG4gICAgdGhpcy55ZWFyUmFuZ2Uuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuXG4gICAgaWYgKCF0aGlzLmRhdGUgJiYgdGhpcy51c2VEZWZhdWx0RGF0ZSkge1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHBhZCA9IChuOiBudW1iZXIpID0+IG4udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuXG4gICAgICBjb25zdCBsb2NhbERhdGVTdHJpbmcgPSBgJHtub3cuZ2V0RnVsbFllYXIoKX0tJHtwYWQoXG4gICAgICAgIG5vdy5nZXRNb250aCgpICsgMVxuICAgICAgKX0tJHtwYWQobm93LmdldERhdGUoKSl9VCR7cGFkKG5vdy5nZXRIb3VycygpKX06JHtwYWQoXG4gICAgICAgIG5vdy5nZXRNaW51dGVzKClcbiAgICAgICl9OiR7cGFkKG5vdy5nZXRTZWNvbmRzKCkpfWA7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUobG9jYWxEYXRlU3RyaW5nKTtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGxvY2FsRGF0ZVN0cmluZyk7XG4gICAgICB0aGlzLmRhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZTtcblxuICAgICAgaWYgKHRoaXMuc2hvd1RpbWUpIHtcbiAgICAgICAgY29uc3QgaG91cnMgPSBub3cuZ2V0SG91cnMoKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IG5vdy5nZXRNaW51dGVzKCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgdGhpcy50ZW1wVGltZSA9IGAke3RoaXMuc2VsZWN0ZWRIb3VyfToke3RoaXMuc2VsZWN0ZWRNaW51dGV9YDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgICAgdGhpcy5vbkNoYW5nZShsb2NhbERhdGVTdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkaXNwbGF5RGF0ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcnNlZERhdGUgPVxuICAgICAgdHlwZW9mIHRoaXMuZGF0ZSA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZSh0aGlzLmRhdGUpIDogdGhpcy5kYXRlO1xuICAgIHJldHVybiBwYXJzZWREYXRlID8gdGhpcy5mb3JtYXREYXRlKHBhcnNlZERhdGUsIHRoaXMuZm9ybWF0KSA6ICcnO1xuICB9XG5cbiAgdGVtcFRpbWU6IHN0cmluZyA9ICcnO1xuICBzZWxlY3RlZEhvdXIgPSAnMDAnO1xuICBzZWxlY3RlZE1pbnV0ZSA9ICcwMCc7XG5cbiAgc2hvd0hvdXJPcHRpb25zID0gZmFsc2U7XG4gIHNob3dNaW51dGVPcHRpb25zID0gZmFsc2U7XG5cbiAgaG91cnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gU3RyaW5nKGkpLnBhZFN0YXJ0KDIsICcwJykpO1xuICBtaW51dGVzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogNjAgfSwgKF8sIGkpID0+IFN0cmluZyhpKS5wYWRTdGFydCgyLCAnMCcpKTtcblxuICB0b2dnbGVIb3VyRHJvcGRvd24oKSB7XG4gICAgdGhpcy5zaG93SG91ck9wdGlvbnMgPSAhdGhpcy5zaG93SG91ck9wdGlvbnM7XG4gICAgdGhpcy5zaG93TWludXRlT3B0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgdG9nZ2xlTWludXRlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5zaG93TWludXRlT3B0aW9ucyA9ICF0aGlzLnNob3dNaW51dGVPcHRpb25zO1xuICAgIHRoaXMuc2hvd0hvdXJPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICBzZWxlY3RIb3VyKGg6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaDtcbiAgICB0aGlzLnNob3dIb3VyT3B0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgc2VsZWN0TWludXRlKG06IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtO1xuICAgIHRoaXMuc2hvd01pbnV0ZU9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHRvZ2dsZUNhbGVuZGFyKCkge1xuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gIXRoaXMuc2hvd0NhbGVuZGFyO1xuXG4gICAgaWYgKHRoaXMuZGF0ZSkge1xuICAgICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy5kYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gdGhpcy51c2VEZWZhdWx0RGF0ZSA/IG5ldyBEYXRlKCkgOiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRlbXBTZWxlY3RlZERhdGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5nZXRNb250aCgpO1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoU3RyaW5nID0gdGhpcy5tb250aHNbdGhpcy5zZWxlY3RlZE1vbnRoXTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyID0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvd1RpbWUgJiYgIXRoaXMudGVtcFRpbWUpIHtcbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IGlzVG9kYXkgPVxuICAgICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgJiYgdGhpcy5pc1NhbWVEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSwgdG9kYXkpO1xuXG4gICAgICBjb25zdCBob3VycyA9IGlzVG9kYXkgPyB0b2RheS5nZXRIb3VycygpIDogMDtcbiAgICAgIGNvbnN0IG1pbnV0ZXMgPSBpc1RvZGF5ID8gdG9kYXkuZ2V0TWludXRlcygpIDogMDtcblxuICAgICAgaWYgKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSkge1xuICAgICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgIH1cbiAgfVxuXG4gIGluaXRUaW1lRnJvbURhdGUoZGF0ZTogRGF0ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZT8uc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIDAsIDApO1xuICB9XG4gIGNsZWFyRGF0ZSgpIHtcbiAgICB0aGlzLmRhdGUgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBudWxsO1xuICAgIHRoaXMudGVtcFRpbWUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9ICcwMCc7XG4gICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9ICcwMCc7XG5cbiAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdChudWxsKTtcblxuICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcblxuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XG4gIH1cblxuICBmaXhUb1VUQyhkYXRlVmFsdWU6IGFueSkge1xuICAgIGlmICghZGF0ZVZhbHVlKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGRhdGUgPSBkYXRlVmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVZhbHVlIDogbmV3IERhdGUoZGF0ZVZhbHVlKTtcbiAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgIERhdGUuVVRDKFxuICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGRhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgZGF0ZS5nZXREYXRlKCksXG4gICAgICAgIGRhdGUuZ2V0SG91cnMoKSxcbiAgICAgICAgZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICAgIGRhdGUuZ2V0U2Vjb25kcygpLFxuICAgICAgICBkYXRlLmdldE1pbGxpc2Vjb25kcygpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbmZpcm0oKSB7XG4gICAgaWYgKCF0aGlzLnRlbXBTZWxlY3RlZERhdGUpIHJldHVybjtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSkpIHJldHVybjtcblxuICAgIGNvbnN0IGhvdXJzID0gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICBjb25zdCBtaW51dGVzID0gTnVtYmVyKHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuXG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCAwLCAwKTtcblxuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy50ZW1wU2VsZWN0ZWREYXRlKTtcbiAgICB0aGlzLmRhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZTtcblxuICAgIGNvbnN0IHBhZCA9IChuOiBudW1iZXIpID0+IG4udG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGxvY2FsRGF0ZVN0cmluZyA9IGAke3RoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCl9LSR7cGFkKFxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKSArIDFcbiAgICApfS0ke3BhZCh0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCkpfVQke3BhZChcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLmdldEhvdXJzKClcbiAgICApfToke3BhZCh0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNaW51dGVzKCkpfToke3BhZChcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLmdldFNlY29uZHMoKVxuICAgICl9YDtcblxuICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKGxvY2FsRGF0ZVN0cmluZyk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcblxuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XG4gIH1cblxuICBzZXRUb1N0YXJ0T2ZEYXkoKSB7XG4gICAgaWYgKCF0aGlzLnRlbXBTZWxlY3RlZERhdGUpIHJldHVybjtcblxuICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gJzAwJztcbiAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gJzAwJztcblxuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnRlbXBTZWxlY3RlZERhdGUpO1xuICB9XG5cbiAgc2V0VG9FbmRPZkRheSgpIHtcbiAgICBpZiAoIXRoaXMudGVtcFNlbGVjdGVkRGF0ZSkgcmV0dXJuO1xuXG4gICAgdGhpcy5zZWxlY3RlZEhvdXIgPSAnMjMnO1xuICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSAnNTknO1xuXG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG4gICAgdGhpcy50ZW1wVGltZSA9IGAke3RoaXMuc2VsZWN0ZWRIb3VyfToke3RoaXMuc2VsZWN0ZWRNaW51dGV9YDtcblxuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy50ZW1wU2VsZWN0ZWREYXRlKTtcbiAgfVxuXG4gIHByZXZpb3VzTW9udGgoKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoLS07XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNb250aCA8IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IDExO1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXItLTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVUZW1wU2VsZWN0ZWREYXRlKCk7XG4gIH1cblxuICBuZXh0TW9udGgoKSB7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoKys7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRNb250aCA+IDExKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9udGggPSAwO1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXIrKztcbiAgICB9XG4gICAgdGhpcy51cGRhdGVUZW1wU2VsZWN0ZWREYXRlKCk7XG4gIH1cblxuICBvbkRyb3Bkb3duWWVhckNoYW5nZShldmVudDogRHJvcGRvd25DaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRZZWFyID0gZXZlbnQudmFsdWU7XG4gICAgdGhpcy51cGRhdGVUZW1wU2VsZWN0ZWREYXRlKCk7XG4gIH1cblxuICBvbkRyb3Bkb3duTW9udGhDaGFuZ2UoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9udGggPSB0aGlzLm1vbnRocy5pbmRleE9mKGV2ZW50LnZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKTtcbiAgfVxuXG4gIHVwZGF0ZVRlbXBTZWxlY3RlZERhdGUoKSB7XG4gICAgaWYgKCF0aGlzLnRlbXBTZWxlY3RlZERhdGUpIHJldHVybjtcbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0TW9udGgodGhpcy5zZWxlY3RlZE1vbnRoKTtcbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0RnVsbFllYXIodGhpcy5zZWxlY3RlZFllYXIpO1xuICB9XG5cbiAgZ2V0RGF5c0luTW9udGgoKTogKERhdGUgfCBudWxsKVtdIHtcbiAgICBjb25zdCBkYXlzOiAoRGF0ZSB8IG51bGwpW10gPSBbXTtcbiAgICBjb25zdCB5ZWFyID0gdGhpcy5zZWxlY3RlZFllYXI7XG4gICAgY29uc3QgbW9udGggPSB0aGlzLnNlbGVjdGVkTW9udGg7XG5cbiAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkuZ2V0RGF5KCk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gZmlyc3REYXlPZk1vbnRoID09PSAwID8gNiA6IGZpcnN0RGF5T2ZNb250aCAtIDE7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7XG4gICAgICBkYXlzLnB1c2gobnVsbCk7XG4gICAgfVxuXG4gICAgY29uc3QgdG90YWxEYXlzID0gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKCk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdG90YWxEYXlzOyBpKyspIHtcbiAgICAgIGNvbnN0IGRheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBpKTtcbiAgICAgIGRheXMucHVzaChkYXkpO1xuICAgIH1cbiAgICByZXR1cm4gZGF5cztcbiAgfVxuXG4gIHNhbml0aXplRGF0ZVN0cmluZyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWU/LmVuZHNXaXRoKCdaJykgPyB2YWx1ZS5zbGljZSgwLCAtMSkgOiB2YWx1ZTtcbiAgfVxuXG4gIGlzRGlzYWJsZWQoZGF5OiBEYXRlIHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGF5RGF0ZSA9IHRoaXMudG9EYXRlKGRheSk7XG5cbiAgICBpZiAodGhpcy5taW5EYXRlICYmIGRheURhdGUgPCB0aGlzLnN0cmlwVGltZSh0aGlzLnRvRGF0ZSh0aGlzLm1pbkRhdGUpKSlcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLm1heERhdGUgJiYgZGF5RGF0ZSA+IHRoaXMuc3RyaXBUaW1lKHRoaXMudG9EYXRlKHRoaXMubWF4RGF0ZSkpKVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHN0cmlwVGltZShkYXRlOiBEYXRlIHwgc3RyaW5nKTogRGF0ZSB7XG4gICAgY29uc3QgZCA9IHRoaXMudG9EYXRlKGRhdGUpO1xuICAgIHJldHVybiBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIGQuZ2V0TW9udGgoKSwgZC5nZXREYXRlKCkpO1xuICB9XG5cbiAgdG9EYXRlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKTogRGF0ZSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnNhbml0aXplRGF0ZVN0cmluZyh2YWx1ZSkpO1xuICB9XG5cbiAgaXMyNEhvdXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHNlbGVjdFRlbXBvcmFyeURhdGUoZGF5OiBEYXRlKSB7XG4gICAgaWYgKCF0aGlzLnRlbXBTZWxlY3RlZERhdGUpIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGRheSk7XG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZChkYXkpKSByZXR1cm47XG5cbiAgICBjb25zdCBpc05ld0RhdGUgPSAhdGhpcy5pc1NhbWVEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSwgZGF5KTtcbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkYXkpO1xuXG4gICAgaWYgKHRoaXMuc2hvd1RpbWUpIHtcbiAgICAgIGlmIChpc05ld0RhdGUpIHtcbiAgICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBpc1RvZGF5ID1cbiAgICAgICAgICBkYXkuZ2V0RnVsbFllYXIoKSA9PT0gdG9kYXkuZ2V0RnVsbFllYXIoKSAmJlxuICAgICAgICAgIGRheS5nZXRNb250aCgpID09PSB0b2RheS5nZXRNb250aCgpICYmXG4gICAgICAgICAgZGF5LmdldERhdGUoKSA9PT0gdG9kYXkuZ2V0RGF0ZSgpO1xuXG4gICAgICAgIGNvbnN0IGhvdXJzID0gaXNUb2RheSA/IHRvZGF5LmdldEhvdXJzKCkgOiAwO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gaXNUb2RheSA/IHRvZGF5LmdldE1pbnV0ZXMoKSA6IDA7XG5cbiAgICAgICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCAwLCAwKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGhvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG1pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICB0aGlzLnRlbXBUaW1lID0gYCR7dGhpcy5zZWxlY3RlZEhvdXJ9OiR7dGhpcy5zZWxlY3RlZE1pbnV0ZX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgW2gsIG1dID0gdGhpcy50ZW1wVGltZS5zcGxpdCgnOicpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGg7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzU2VsZWN0ZWQoZGF5OiBEYXRlKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnRlbXBTZWxlY3RlZERhdGUpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiAoXG4gICAgICBkYXkuZ2V0RGF0ZSgpID09PSB0aGlzLnRlbXBTZWxlY3RlZERhdGUuZ2V0RGF0ZSgpICYmXG4gICAgICBkYXkuZ2V0TW9udGgoKSA9PT0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgJiZcbiAgICAgIGRheS5nZXRGdWxsWWVhcigpID09PSB0aGlzLnRlbXBTZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKVxuICAgICk7XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3QgbW9udGggPSAoZGF0ZS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSAnREQvTU0vWVlZWSc6XG4gICAgICAgIHJldHVybiBgJHtkYXl9LyR7bW9udGh9LyR7eWVhcn1gO1xuICAgICAgY2FzZSAnTU0vREQvWVlZWSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYCR7bW9udGh9LyR7ZGF5fS8ke3llYXJ9YDtcbiAgICB9XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5zaG93Q2FsZW5kYXIgPSBmYWxzZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXG4gIG9uQ2xpY2tPdXRzaWRlKHRhcmdldEVsZW1lbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5zaG93Q2FsZW5kYXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNJbnNpZGVQYW5lID0gdGFyZ2V0RWxlbWVudC5jbG9zZXN0KCcuY2RrLW92ZXJsYXktcGFuZScpICE9PSBudWxsO1xuICAgIGlmIChcbiAgICAgICF0aGlzLmRhdGVQaWNrZXJDb250YWluZXIubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXRFbGVtZW50KSAmJlxuICAgICAgdGhpcy5zaG93Q2FsZW5kYXIgJiZcbiAgICAgIHRoaXMuZGF0ZVBpY2tlckV4cGFuc2lvbiAmJlxuICAgICAgIXRoaXMuZGF0ZVBpY2tlckV4cGFuc2lvbi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldEVsZW1lbnQpICYmXG4gICAgICAhaXNJbnNpZGVQYW5lXG4gICAgKSB7XG4gICAgICB0aGlzLnNob3dDYWxlbmRhciA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAjZGF0ZVBpY2tlckNvbnRhaW5lciBjbGFzcz1cImRhdGUtcGlja2VyXCI+XG4gIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1jb250YWluZXJcIj5cbiAgICA8aW5wdXRcbiAgICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICAgICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgW3ZhbHVlXT1cImRpc3BsYXlEYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwiIWRpc2FibGVkICYmIHRvZ2dsZUNhbGVuZGFyKClcIlxuICAgICAgY2xhc3M9XCJ3LWZ1bGwgYmxvY2tcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYmdDb2xvclwiXG4gICAgICBbc3R5bGUuYm9yZGVyXT1cImJvcmRlclwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdjdXJzb3Itbm90LWFsbG93ZWQnOiBkaXNhYmxlZCA9PT0gdHJ1ZSxcbiAgICAgICAgJ2N1cnNvci1wb2ludGVyJzogZGlzYWJsZWQgPT09IGZhbHNlXG4gICAgICB9XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgLz5cbiAgICA8dmVyYmVuLXN2Z1xuICAgICAgKGNsaWNrKT1cIiFkaXNhYmxlZCAmJiB0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgIGNsYXNzPVwiaWNvblwiXG4gICAgICBbaWNvbl09XCInY2FsZW5kYXInXCJcbiAgICA+PC92ZXJiZW4tc3ZnPlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGVcbiAgICBjZGtDb25uZWN0ZWRPdmVybGF5XG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aF09XCJkYXRlUGlja2VyQ29udGFpbmVyLm9mZnNldFdpZHRoXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidHJpZ2dlclwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwiW1xuICAgICAge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgIG92ZXJsYXlZOiAndG9wJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICBvdmVybGF5WTogJ2JvdHRvbSdcbiAgICAgIH1cbiAgICBdXCJcbiAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwic2hvd0NhbGVuZGFyXCJcbiAgICAoZGV0YWNoKT1cInNob3dDYWxlbmRhciA9IGZhbHNlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhclwiIFtzdHlsZS53aWR0aF09XCJkYXRlUGlja2VyV2lkdGhcIiAjZGF0ZVBpY2tlckV4cGFuc2lvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1oZWFkZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF1c2VEcm9wZG93bnM7IGVsc2UgZHJvcGRvd25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicHJldmlvdXNNb250aCgpXCI+XG4gICAgICAgICAgICA8dmVyYmVuLXN2ZyBbd2lkdGhdPVwiMjBcIiBbaWNvbl09XCInY2hldnJvbi1sZWZ0J1wiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8c3Bhbj57eyBtb250aHNbc2VsZWN0ZWRNb250aF0gfX0ge3sgc2VsZWN0ZWRZZWFyIH19PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5leHRNb250aCgpXCI+XG4gICAgICAgICAgICA8dmVyYmVuLXN2ZyBbd2lkdGhdPVwiMjBcIiBbaWNvbl09XCInY2hldnJvbi1yaWdodCdcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25zPlxuICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwieWVhclBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkRyb3Bkb3duWWVhckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInllYXJSYW5nZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkWWVhclwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzkwcHgnXCJcbiAgICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuXG4gICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJtb250aFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkRyb3Bkb3duTW9udGhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJtb250aHNcIlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wLWRvd25cIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1vbnRoU3RyaW5nXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCInOTBweCdcIlxuICAgICAgICAgID48L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtcGlja2VyIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCIgKm5nSWY9XCJzaG93VGltZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGJveCByb3VuZGVkIHB4LTIgcHktMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVIb3VyRHJvcGRvd24oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHNlbGVjdGVkSG91ciB9fVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93SG91ck9wdGlvbnNcIiBjbGFzcz1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBoIG9mIGhvdXJzXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImggPT09IHNlbGVjdGVkSG91clwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEhvdXIoaClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgaCB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPHNwYW4+Ojwvc3Bhbj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGJveCByb3VuZGVkIHB4LTIgcHktMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNaW51dGVEcm9wZG93bigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgc2VsZWN0ZWRNaW51dGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd01pbnV0ZU9wdGlvbnNcIiBjbGFzcz1cImRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtIG9mIG1pbnV0ZXNcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwibSA9PT0gc2VsZWN0ZWRNaW51dGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RNaW51dGUobSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgbSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDx2ZXJiZW4tdG9vbHRpcFxuICAgICAgICAgICAgICBbdG9wXT1cIictNDBweCdcIlxuICAgICAgICAgICAgICBbdGV4dENvbG9yXT1cIicjMDAwJ1wiXG4gICAgICAgICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJyNEM0QzRDMnXCJcbiAgICAgICAgICAgICAgW2xlZnRdPVwiJzAnXCJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIicxMDBweCdcIlxuICAgICAgICAgICAgICBbdG9vbHRpcENvbnRlbnRdPVwidG9vbHRpcFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgI3Rvb2x0aXBcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0VG9TdGFydE9mRGF5KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNFwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNFwiXG4gICAgICAgICAgICAgICAgW2ljb25dPVwiJ3N1bidcIlxuICAgICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgPC92ZXJiZW4tdG9vbHRpcD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbHRpcFRlbXBsYXRlPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14c1wiPlNldCBzdGFydCBvZiBkYXk8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHZlcmJlbi10b29sdGlwXG4gICAgICAgICAgICAgIFt0b3BdPVwiJy00MHB4J1wiXG4gICAgICAgICAgICAgIFt0ZXh0Q29sb3JdPVwiJyMwMDAnXCJcbiAgICAgICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCInI0QzRDNEMydcIlxuICAgICAgICAgICAgICBbbGVmdF09XCInMCdcIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiJzEwMHB4J1wiXG4gICAgICAgICAgICAgIFt0b29sdGlwQ29udGVudF09XCJlbmRPZkRheVRvb2x0aXBcIlxuICAgICAgICAgICAgICAjZW5kT2ZEYXlUaXBcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0VG9FbmRPZkRheSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTRcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTRcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cIidtb29uJ1wiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICA8L3ZlcmJlbi10b29sdGlwPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VuZE9mRGF5VG9vbHRpcD5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHNcIj5TZXQgZW5kIG9mIGRheTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx2ZXJiZW4tdG9vbHRpcFxuICAgICAgICAgICAgW3RvcF09XCInLTQwcHgnXCJcbiAgICAgICAgICAgIFt0ZXh0Q29sb3JdPVwiJyMwMDAnXCJcbiAgICAgICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJyNEM0QzRDMnXCJcbiAgICAgICAgICAgIFtsZWZ0XT1cIicwJ1wiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzEwMHB4J1wiXG4gICAgICAgICAgICBbdG9vbHRpcENvbnRlbnRdPVwiY2xlYXJUb29sdGlwXCJcbiAgICAgICAgICAgICNjbGVhckRhdGVUaXBcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEYXRlKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIjE0XCJcbiAgICAgICAgICAgICAgW2hlaWdodF09XCIxNFwiXG4gICAgICAgICAgICAgIFtpY29uXT1cIidjbG9zZSdcIlxuICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICA8L3ZlcmJlbi10b29sdGlwPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjbGVhclRvb2x0aXA+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHNcIj5jbGVhciBkYXRlPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndlZWtkYXlzXCI+XG4gICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrRGF5c1wiPnt7IGRheSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF5IG9mIGdldERheXNJbk1vbnRoKClcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXk7IGVsc2UgZW1wdHlcIlxuICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChkYXkpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoZGF5KVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGVkLWRheSc6IGlzRGlzYWJsZWQoZGF5KSB9XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFRlbXBvcmFyeURhdGUoZGF5KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGRheS5nZXREYXRlKCkgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbXB0eS1kYXRlXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWZvb3RlclwiPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjb25maXJtKClcIj5PSzwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
421
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQWN6RSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLFdBQVcsR0FBRyxhQUFhLENBQUM7SUFDNUIsTUFBTSxHQUFHLFlBQVksQ0FBQztJQUN0QixPQUFPLENBQVE7SUFDZixPQUFPLENBQVE7SUFDZixRQUFRLEdBQWEsS0FBSyxDQUFDO0lBQzNCLE9BQU8sR0FBWSxNQUFNLENBQUM7SUFDMUIsTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUNyQixZQUFZLEdBQVksSUFBSSxDQUFDO0lBQzdCLGVBQWUsR0FBVyxlQUFlLENBQUM7SUFDMUMsZ0JBQWdCLEdBQVcsZ0JBQWdCLENBQUM7SUFDNUMsSUFBSSxHQUF5QixJQUFJLENBQUM7SUFDbEMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUUxQixlQUFlLEdBQVcsT0FBTyxDQUFDO0lBQ2xDLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFL0IsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7SUFFdkQsbUJBQW1CLENBQWM7SUFFakMsbUJBQW1CLENBQWM7SUFF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Q1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzhCQUdRLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRVAsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHbEQsbUJBQW1CO3NCQURsQixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkE2YW5ELGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgZm9yd2FyZFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEcm9wZG93bkNoYW5nZUV2ZW50IH0gZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kcm9wLWRvd24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGF0ZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlLXBpY2tlci5jb21wb25lbnQuY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QgZGF0ZSc7XG4gIEBJbnB1dCgpIGZvcm1hdCA9ICdNTS9ERC9ZWVlZJztcbiAgQElucHV0KCkgbWluRGF0ZT86IERhdGU7XG4gIEBJbnB1dCgpIG1heERhdGU/OiBEYXRlO1xuICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYmdDb2xvcj86IHN0cmluZyA9ICcjZmZmJztcbiAgQElucHV0KCkgYm9yZGVyPzogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHVzZURyb3Bkb3duczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHllYXJQbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBhIHllYXInO1xuICBASW5wdXQoKSBtb250aFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0IGEgbW9udGgnO1xuICBASW5wdXQoKSBkYXRlOiBEYXRlIHwgbnVsbCB8IHN0cmluZyA9IG51bGw7XG4gIEBJbnB1dCgpIHNob3dUaW1lOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZGF0ZVBpY2tlcldpZHRoOiBzdHJpbmcgPSAnNDAwcHgnO1xuICBASW5wdXQoKSB1c2VEZWZhdWx0RGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBkYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlIHwgbnVsbD4oKTtcbiAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlckNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGRhdGVQaWNrZXJDb250YWluZXIhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyRXhwYW5zaW9uJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGRhdGVQaWNrZXJFeHBhbnNpb24hOiBFbGVtZW50UmVmO1xuXG4gIHllYXJSYW5nZTogbnVtYmVyW10gPSBbXTtcbiAgZmlsdGVyZWRZZWFyUmFuZ2U6IG51bWJlcltdID0gW107XG5cbiAgc2VsZWN0ZWREYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIHRlbXBTZWxlY3RlZERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICBzaG93Q2FsZW5kYXIgPSBmYWxzZTtcblxuICB3ZWVrRGF5cyA9IFsnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnLCAnU3VuJ107XG4gIG1vbnRocyA9IFtcbiAgICAnSmFudWFyeScsXG4gICAgJ0ZlYnJ1YXJ5JyxcbiAgICAnTWFyY2gnLFxuICAgICdBcHJpbCcsXG4gICAgJ01heScsXG4gICAgJ0p1bmUnLFxuICAgICdKdWx5JyxcbiAgICAnQXVndXN0JyxcbiAgICAnU2VwdGVtYmVyJyxcbiAgICAnT2N0b2JlcicsXG4gICAgJ05vdmVtYmVyJyxcbiAgICAnRGVjZW1iZXInLFxuICBdO1xuXG4gIHNlbGVjdGVkTW9udGg6IG51bWJlciA9IDE7XG4gIHNlbGVjdGVkTW9udGhTdHJpbmc6IHN0cmluZyA9ICcnO1xuICBzZWxlY3RlZFllYXI6IG51bWJlciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcblxuICBwcml2YXRlIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuc2FuaXRpemVEYXRlU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgIHRoaXMuZGF0ZSA9IHBhcnNlZERhdGU7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUocGFyc2VkRGF0ZSk7XG4gICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgIHRoaXMuaW5pdFRpbWVGcm9tRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBpZiAodGhpcy5kYXRlKSB7XG4gICAgICBsZXQgZCA9IHRoaXMuZGF0ZTtcbiAgICAgIGlmICh0eXBlb2YgZCA9PT0gJ3N0cmluZycpIGQgPSB0aGlzLnNhbml0aXplRGF0ZVN0cmluZyhkKTtcblxuICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGQpO1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpO1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyID0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG4gIH1cblxuICBpc1NhbWVEYXRlKGQxOiBEYXRlLCBkMjogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBkMS5nZXRGdWxsWWVhcigpID09PSBkMi5nZXRGdWxsWWVhcigpICYmXG4gICAgICBkMS5nZXRNb250aCgpID09PSBkMi5nZXRNb250aCgpICYmXG4gICAgICBkMS5nZXREYXRlKCkgPT09IGQyLmdldERhdGUoKVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBlbmRZZWFyID0gY3VycmVudFllYXIgKyAxMDtcbiAgICB0aGlzLnllYXJSYW5nZSA9IEFycmF5LmZyb20oXG4gICAgICB7IGxlbmd0aDogZW5kWWVhciAtIDE5NjAgKyAxIH0sXG4gICAgICAoXywgaSkgPT4gMTk2MCArIGlcbiAgICApO1xuICAgIHRoaXMueWVhclJhbmdlLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcblxuICAgIGlmICghdGhpcy5kYXRlICYmIHRoaXMudXNlRGVmYXVsdERhdGUpIHtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBwYWQgPSAobjogbnVtYmVyKSA9PiBuLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcblxuICAgICAgY29uc3QgbG9jYWxEYXRlU3RyaW5nID0gYCR7bm93LmdldEZ1bGxZZWFyKCl9LSR7cGFkKFxuICAgICAgICBub3cuZ2V0TW9udGgoKSArIDFcbiAgICAgICl9LSR7cGFkKG5vdy5nZXREYXRlKCkpfVQke3BhZChub3cuZ2V0SG91cnMoKSl9OiR7cGFkKFxuICAgICAgICBub3cuZ2V0TWludXRlcygpXG4gICAgICApfToke3BhZChub3cuZ2V0U2Vjb25kcygpKX1gO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGxvY2FsRGF0ZVN0cmluZyk7XG4gICAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShsb2NhbERhdGVTdHJpbmcpO1xuICAgICAgdGhpcy5kYXRlID0gdGhpcy5zZWxlY3RlZERhdGU7XG5cbiAgICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gbm93LmdldEhvdXJzKCk7XG4gICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBub3cuZ2V0TWludXRlcygpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgIHRoaXMub25DaGFuZ2UobG9jYWxEYXRlU3RyaW5nKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGlzcGxheURhdGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJzZWREYXRlID1cbiAgICAgIHR5cGVvZiB0aGlzLmRhdGUgPT09ICdzdHJpbmcnID8gbmV3IERhdGUodGhpcy5kYXRlKSA6IHRoaXMuZGF0ZTtcbiAgICByZXR1cm4gcGFyc2VkRGF0ZSA/IHRoaXMuZm9ybWF0RGF0ZShwYXJzZWREYXRlLCB0aGlzLmZvcm1hdCkgOiAnJztcbiAgfVxuXG4gIHRlbXBUaW1lOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRIb3VyID0gJzAwJztcbiAgc2VsZWN0ZWRNaW51dGUgPSAnMDAnO1xuXG4gIHNob3dIb3VyT3B0aW9ucyA9IGZhbHNlO1xuICBzaG93TWludXRlT3B0aW9ucyA9IGZhbHNlO1xuXG4gIGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IFN0cmluZyhpKS5wYWRTdGFydCgyLCAnMCcpKTtcbiAgbWludXRlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDYwIH0sIChfLCBpKSA9PiBTdHJpbmcoaSkucGFkU3RhcnQoMiwgJzAnKSk7XG5cbiAgdG9nZ2xlSG91ckRyb3Bkb3duKCkge1xuICAgIHRoaXMuc2hvd0hvdXJPcHRpb25zID0gIXRoaXMuc2hvd0hvdXJPcHRpb25zO1xuICAgIHRoaXMuc2hvd01pbnV0ZU9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHRvZ2dsZU1pbnV0ZURyb3Bkb3duKCkge1xuICAgIHRoaXMuc2hvd01pbnV0ZU9wdGlvbnMgPSAhdGhpcy5zaG93TWludXRlT3B0aW9ucztcbiAgICB0aGlzLnNob3dIb3VyT3B0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgc2VsZWN0SG91cihoOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGg7XG4gICAgdGhpcy5zaG93SG91ck9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHNlbGVjdE1pbnV0ZShtOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbTtcbiAgICB0aGlzLnNob3dNaW51dGVPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICB0b2dnbGVDYWxlbmRhcigpIHtcbiAgICB0aGlzLnNob3dDYWxlbmRhciA9ICF0aGlzLnNob3dDYWxlbmRhcjtcblxuICAgIGlmICh0aGlzLmRhdGUpIHtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZSA9IHRoaXMudXNlRGVmYXVsdERhdGUgPyBuZXcgRGF0ZSgpIDogbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZW1wU2VsZWN0ZWREYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9udGggPSB0aGlzLnRlbXBTZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aFN0cmluZyA9IHRoaXMubW9udGhzW3RoaXMuc2VsZWN0ZWRNb250aF07XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dUaW1lICYmICF0aGlzLnRlbXBUaW1lKSB7XG4gICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBpc1RvZGF5ID1cbiAgICAgICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlICYmIHRoaXMuaXNTYW1lRGF0ZSh0aGlzLnRlbXBTZWxlY3RlZERhdGUsIHRvZGF5KTtcblxuICAgICAgY29uc3QgaG91cnMgPSBpc1RvZGF5ID8gdG9kYXkuZ2V0SG91cnMoKSA6IDA7XG4gICAgICBjb25zdCBtaW51dGVzID0gaXNUb2RheSA/IHRvZGF5LmdldE1pbnV0ZXMoKSA6IDA7XG5cbiAgICAgIGlmICh0aGlzLnRlbXBTZWxlY3RlZERhdGUpIHtcbiAgICAgICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCAwLCAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gaG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG1pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgdGhpcy50ZW1wVGltZSA9IGAke3RoaXMuc2VsZWN0ZWRIb3VyfToke3RoaXMuc2VsZWN0ZWRNaW51dGV9YDtcbiAgICB9XG4gIH1cblxuICBpbml0VGltZUZyb21EYXRlKGRhdGU6IERhdGUpIHtcbiAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICBjb25zdCBtaW51dGVzID0gZGF0ZS5nZXRNaW51dGVzKCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGhvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgdGhpcy50ZW1wVGltZSA9IGAke3RoaXMuc2VsZWN0ZWRIb3VyfToke3RoaXMuc2VsZWN0ZWRNaW51dGV9YDtcbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGU/LnNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCAwLCAwKTtcbiAgfVxuICBjbGVhckRhdGUoKSB7XG4gICAgdGhpcy5kYXRlID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICB0aGlzLnRlbXBUaW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZEhvdXIgPSAnMDAnO1xuICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSAnMDAnO1xuXG4gICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCk7XG5cbiAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG5cbiAgICB0aGlzLnNob3dDYWxlbmRhciA9IGZhbHNlO1xuICB9XG5cbiAgZml4VG9VVEMoZGF0ZVZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIWRhdGVWYWx1ZSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBkYXRlID0gZGF0ZVZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVWYWx1ZSA6IG5ldyBEYXRlKGRhdGVWYWx1ZSk7XG4gICAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gbmV3IERhdGUoXG4gICAgICBEYXRlLlVUQyhcbiAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICBkYXRlLmdldEhvdXJzKCksXG4gICAgICAgIGRhdGUuZ2V0TWludXRlcygpLFxuICAgICAgICBkYXRlLmdldFNlY29uZHMoKSxcbiAgICAgICAgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb25maXJtKCkge1xuICAgIGlmICghdGhpcy50ZW1wU2VsZWN0ZWREYXRlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCh0aGlzLnRlbXBTZWxlY3RlZERhdGUpKSByZXR1cm47XG5cbiAgICBjb25zdCBob3VycyA9IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cik7XG4gICAgY29uc3QgbWludXRlcyA9IE51bWJlcih0aGlzLnNlbGVjdGVkTWludXRlKTtcblxuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgMCwgMCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSk7XG4gICAgdGhpcy5kYXRlID0gdGhpcy5zZWxlY3RlZERhdGU7XG5cbiAgICBjb25zdCBwYWQgPSAobjogbnVtYmVyKSA9PiBuLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBsb2NhbERhdGVTdHJpbmcgPSBgJHt0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpfS0ke3BhZChcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgKyAxXG4gICAgKX0tJHtwYWQodGhpcy5zZWxlY3RlZERhdGUuZ2V0RGF0ZSgpKX1UJHtwYWQoXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRIb3VycygpXG4gICAgKX06JHtwYWQodGhpcy5zZWxlY3RlZERhdGUuZ2V0TWludXRlcygpKX06JHtwYWQoXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRTZWNvbmRzKClcbiAgICApfWA7XG5cbiAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgdGhpcy5vbkNoYW5nZShsb2NhbERhdGVTdHJpbmcpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG5cbiAgICB0aGlzLnNob3dDYWxlbmRhciA9IGZhbHNlO1xuICB9XG5cbiAgc2V0VG9TdGFydE9mRGF5KCkge1xuICAgIGlmICghdGhpcy50ZW1wU2VsZWN0ZWREYXRlKSByZXR1cm47XG5cbiAgICB0aGlzLnNlbGVjdGVkSG91ciA9ICcwMCc7XG4gICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9ICcwMCc7XG5cbiAgICB0aGlzLnRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgdGhpcy50ZW1wVGltZSA9IGAke3RoaXMuc2VsZWN0ZWRIb3VyfToke3RoaXMuc2VsZWN0ZWRNaW51dGV9YDtcblxuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodGhpcy50ZW1wU2VsZWN0ZWREYXRlKTtcbiAgfVxuXG4gIHNldFRvRW5kT2ZEYXkoKSB7XG4gICAgaWYgKCF0aGlzLnRlbXBTZWxlY3RlZERhdGUpIHJldHVybjtcblxuICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gJzIzJztcbiAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gJzU5JztcblxuICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICAgIHRoaXMudGVtcFRpbWUgPSBgJHt0aGlzLnNlbGVjdGVkSG91cn06JHt0aGlzLnNlbGVjdGVkTWludXRlfWA7XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMudGVtcFNlbGVjdGVkRGF0ZSk7XG4gIH1cblxuICBwcmV2aW91c01vbnRoKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRNb250aC0tO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkTW9udGggPCAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTW9udGggPSAxMTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyLS07XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGVtcFNlbGVjdGVkRGF0ZSgpO1xuICB9XG5cbiAgbmV4dE1vbnRoKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRNb250aCsrO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkTW9udGggPiAxMSkge1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gMDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyKys7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGVtcFNlbGVjdGVkRGF0ZSgpO1xuICB9XG5cbiAgb25Ecm9wZG93blllYXJDaGFuZ2UoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkWWVhciA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMudXBkYXRlVGVtcFNlbGVjdGVkRGF0ZSgpO1xuICB9XG5cbiAgb25Ecm9wZG93bk1vbnRoQ2hhbmdlKGV2ZW50OiBEcm9wZG93bkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5tb250aHMuaW5kZXhPZihldmVudC52YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVUZW1wU2VsZWN0ZWREYXRlKCk7XG4gIH1cblxuICB1cGRhdGVUZW1wU2VsZWN0ZWREYXRlKCkge1xuICAgIGlmICghdGhpcy50ZW1wU2VsZWN0ZWREYXRlKSByZXR1cm47XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldE1vbnRoKHRoaXMuc2VsZWN0ZWRNb250aCk7XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlLnNldEZ1bGxZZWFyKHRoaXMuc2VsZWN0ZWRZZWFyKTtcbiAgfVxuXG4gIGdldERheXNJbk1vbnRoKCk6IChEYXRlIHwgbnVsbClbXSB7XG4gICAgY29uc3QgZGF5czogKERhdGUgfCBudWxsKVtdID0gW107XG4gICAgY29uc3QgeWVhciA9IHRoaXMuc2VsZWN0ZWRZZWFyO1xuICAgIGNvbnN0IG1vbnRoID0gdGhpcy5zZWxlY3RlZE1vbnRoO1xuXG4gICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpLmdldERheSgpO1xuICAgIGNvbnN0IG9mZnNldCA9IGZpcnN0RGF5T2ZNb250aCA9PT0gMCA/IDYgOiBmaXJzdERheU9mTW9udGggLSAxO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykge1xuICAgICAgZGF5cy5wdXNoKG51bGwpO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdGFsRGF5cyA9IG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsRGF5czsgaSsrKSB7XG4gICAgICBjb25zdCBkYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSk7XG4gICAgICBkYXlzLnB1c2goZGF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGRheXM7XG4gIH1cblxuICBzYW5pdGl6ZURhdGVTdHJpbmcodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlPy5lbmRzV2l0aCgnWicpID8gdmFsdWUuc2xpY2UoMCwgLTEpIDogdmFsdWU7XG4gIH1cblxuICBpc0Rpc2FibGVkKGRheTogRGF0ZSB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRheURhdGUgPSB0aGlzLnRvRGF0ZShkYXkpO1xuXG4gICAgaWYgKHRoaXMubWluRGF0ZSAmJiBkYXlEYXRlIDwgdGhpcy5zdHJpcFRpbWUodGhpcy50b0RhdGUodGhpcy5taW5EYXRlKSkpXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodGhpcy5tYXhEYXRlICYmIGRheURhdGUgPiB0aGlzLnN0cmlwVGltZSh0aGlzLnRvRGF0ZSh0aGlzLm1heERhdGUpKSlcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpcFRpbWUoZGF0ZTogRGF0ZSB8IHN0cmluZyk6IERhdGUge1xuICAgIGNvbnN0IGQgPSB0aGlzLnRvRGF0ZShkYXRlKTtcbiAgICByZXR1cm4gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIGQuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIHRvRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyk6IERhdGUge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gbmV3IERhdGUodGhpcy5zYW5pdGl6ZURhdGVTdHJpbmcodmFsdWUpKTtcbiAgfVxuXG4gIGlzMjRIb3VyOiBib29sZWFuID0gdHJ1ZTtcblxuICBzZWxlY3RUZW1wb3JhcnlEYXRlKGRheTogRGF0ZSkge1xuICAgIGlmICghdGhpcy50ZW1wU2VsZWN0ZWREYXRlKSB0aGlzLnRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShkYXkpO1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQoZGF5KSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaXNOZXdEYXRlID0gIXRoaXMuaXNTYW1lRGF0ZSh0aGlzLnRlbXBTZWxlY3RlZERhdGUsIGRheSk7XG4gICAgdGhpcy50ZW1wU2VsZWN0ZWREYXRlID0gbmV3IERhdGUoZGF5KTtcblxuICAgIGlmICh0aGlzLnNob3dUaW1lKSB7XG4gICAgICBpZiAoaXNOZXdEYXRlKSB7XG4gICAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9XG4gICAgICAgICAgZGF5LmdldEZ1bGxZZWFyKCkgPT09IHRvZGF5LmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgICAgICBkYXkuZ2V0TW9udGgoKSA9PT0gdG9kYXkuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgIGRheS5nZXREYXRlKCkgPT09IHRvZGF5LmdldERhdGUoKTtcblxuICAgICAgICBjb25zdCBob3VycyA9IGlzVG9kYXkgPyB0b2RheS5nZXRIb3VycygpIDogMDtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IGlzVG9kYXkgPyB0b2RheS5nZXRNaW51dGVzKCkgOiAwO1xuXG4gICAgICAgIHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcywgMCwgMCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgdGhpcy50ZW1wVGltZSA9IGAke3RoaXMuc2VsZWN0ZWRIb3VyfToke3RoaXMuc2VsZWN0ZWRNaW51dGV9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IFtoLCBtXSA9IHRoaXMudGVtcFRpbWUuc3BsaXQoJzonKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBoO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1NlbGVjdGVkKGRheTogRGF0ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy50ZW1wU2VsZWN0ZWREYXRlKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gKFxuICAgICAgZGF5LmdldERhdGUoKSA9PT0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldERhdGUoKSAmJlxuICAgICAgZGF5LmdldE1vbnRoKCkgPT09IHRoaXMudGVtcFNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICYmXG4gICAgICBkYXkuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy50ZW1wU2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKClcbiAgICApO1xuICB9XG5cbiAgZm9ybWF0RGF0ZShkYXRlOiBEYXRlLCBmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IG1vbnRoID0gKGRhdGUuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgJ0REL01NL1lZWVknOlxuICAgICAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcbiAgICAgIGNhc2UgJ01NL0REL1lZWVknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGAke21vbnRofS8ke2RheX0vJHt5ZWFyfWA7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuc2hvd0NhbGVuZGFyID0gZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50LnRhcmdldCddKVxuICBvbkNsaWNrT3V0c2lkZSh0YXJnZXRFbGVtZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuc2hvd0NhbGVuZGFyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzSW5zaWRlUGFuZSA9IHRhcmdldEVsZW1lbnQuY2xvc2VzdCgnLmNkay1vdmVybGF5LXBhbmUnKSAhPT0gbnVsbDtcblxuICAgIC8vICF0aGlzLmRhdGVQaWNrZXJDb250YWluZXIubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXRFbGVtZW50KVxuICAgIGlmIChcbiAgICAgIHRoaXMuc2hvd0NhbGVuZGFyICYmXG4gICAgICB0aGlzLmRhdGVQaWNrZXJFeHBhbnNpb24gJiZcbiAgICAgICF0aGlzLmRhdGVQaWNrZXJFeHBhbnNpb24ubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXRFbGVtZW50KSAmJlxuICAgICAgIWlzSW5zaWRlUGFuZVxuICAgICkge1xuICAgICAgdGhpcy5zaG93Q2FsZW5kYXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgI2RhdGVQaWNrZXJDb250YWluZXIgY2xhc3M9XCJkYXRlLXBpY2tlclwiPlxuICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItY29udGFpbmVyXCI+XG4gICAgPGlucHV0XG4gICAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgICAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFt2YWx1ZV09XCJkaXNwbGF5RGF0ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgKGNsaWNrKT1cIiFkaXNhYmxlZCAmJiB0b2dnbGVDYWxlbmRhcigpXCJcbiAgICAgIGNsYXNzPVwidy1mdWxsIGJsb2NrXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImJnQ29sb3JcIlxuICAgICAgW3N0eWxlLmJvcmRlcl09XCJib3JkZXJcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnY3Vyc29yLW5vdC1hbGxvd2VkJzogZGlzYWJsZWQgPT09IHRydWUsXG4gICAgICAgICdjdXJzb3ItcG9pbnRlcic6IGRpc2FibGVkID09PSBmYWxzZVxuICAgICAgfVwiXG4gICAgICByZWFkb25seVxuICAgIC8+XG4gICAgPHZlcmJlbi1zdmdcbiAgICAgIChjbGljayk9XCIhZGlzYWJsZWQgJiYgdG9nZ2xlQ2FsZW5kYXIoKVwiXG4gICAgICBjbGFzcz1cImljb25cIlxuICAgICAgW2ljb25dPVwiJ2NhbGVuZGFyJ1wiXG4gICAgPjwvdmVyYmVuLXN2Zz5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5V2lkdGhdPVwiZGF0ZVBpY2tlckNvbnRhaW5lci5vZmZzZXRXaWR0aFwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIlxuICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zXT1cIltcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nXG4gICAgICB9XG4gICAgXVwiXG4gICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInNob3dDYWxlbmRhclwiXG4gICAgKGRldGFjaCk9XCJzaG93Q2FsZW5kYXIgPSBmYWxzZVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXJcIiBbc3R5bGUud2lkdGhdPVwiZGF0ZVBpY2tlcldpZHRoXCIgI2RhdGVQaWNrZXJFeHBhbnNpb24+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItaGVhZGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdXNlRHJvcGRvd25zOyBlbHNlIGRyb3Bkb3duc1wiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInByZXZpb3VzTW9udGgoKVwiPlxuICAgICAgICAgICAgPHZlcmJlbi1zdmcgW3dpZHRoXT1cIjIwXCIgW2ljb25dPVwiJ2NoZXZyb24tbGVmdCdcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4+e3sgbW9udGhzW3NlbGVjdGVkTW9udGhdIH19IHt7IHNlbGVjdGVkWWVhciB9fTwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJuZXh0TW9udGgoKVwiPlxuICAgICAgICAgICAgPHZlcmJlbi1zdmcgW3dpZHRoXT1cIjIwXCIgW2ljb25dPVwiJ2NoZXZyb24tcmlnaHQnXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3ducz5cbiAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInllYXJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwib25Ecm9wZG93blllYXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJ5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFllYXJcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIic5MHB4J1wiXG4gICAgICAgICAgPjwvdmVyYmVuLWRyb3AtZG93bj5cblxuICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibW9udGhQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwib25Ecm9wZG93bk1vbnRoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwibW9udGhzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcC1kb3duXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNb250aFN0cmluZ1wiXG4gICAgICAgICAgICBbd2lkdGhdPVwiJzkwcHgnXCJcbiAgICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXBpY2tlciBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiICpuZ0lmPVwic2hvd1RpbWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBib3ggcm91bmRlZCBweC0yIHB5LTEgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlSG91ckRyb3Bkb3duKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZEhvdXIgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0hvdXJPcHRpb25zXCIgY2xhc3M9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaCBvZiBob3Vyc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJoID09PSBzZWxlY3RlZEhvdXJcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RIb3VyKGgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGggfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxzcGFuPjo8L3NwYW4+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBib3ggcm91bmRlZCBweC0yIHB5LTEgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWludXRlRHJvcGRvd24oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHNlbGVjdGVkTWludXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dNaW51dGVPcHRpb25zXCIgY2xhc3M9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbSBvZiBtaW51dGVzXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIm0gPT09IHNlbGVjdGVkTWludXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TWludXRlKG0pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IG0gfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8dmVyYmVuLXRvb2x0aXBcbiAgICAgICAgICAgICAgW3RvcF09XCInLTQwcHgnXCJcbiAgICAgICAgICAgICAgW3RleHRDb2xvcl09XCInIzAwMCdcIlxuICAgICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cIicjRDNEM0QzJ1wiXG4gICAgICAgICAgICAgIFtsZWZ0XT1cIicwJ1wiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCInMTAwcHgnXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBDb250ZW50XT1cInRvb2x0aXBUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICN0b29sdGlwXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldFRvU3RhcnRPZkRheSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTRcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTRcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cIidzdW4nXCJcbiAgICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgIDwvdmVyYmVuLXRvb2x0aXA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Rvb2x0aXBUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHNcIj5TZXQgc3RhcnQgb2YgZGF5PC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDx2ZXJiZW4tdG9vbHRpcFxuICAgICAgICAgICAgICBbdG9wXT1cIictNDBweCdcIlxuICAgICAgICAgICAgICBbdGV4dENvbG9yXT1cIicjMDAwJ1wiXG4gICAgICAgICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJyNEM0QzRDMnXCJcbiAgICAgICAgICAgICAgW2xlZnRdPVwiJzAnXCJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIicxMDBweCdcIlxuICAgICAgICAgICAgICBbdG9vbHRpcENvbnRlbnRdPVwiZW5kT2ZEYXlUb29sdGlwXCJcbiAgICAgICAgICAgICAgI2VuZE9mRGF5VGlwXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldFRvRW5kT2ZEYXkoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE0XCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE0XCJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCInbW9vbidcIlxuICAgICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgPC92ZXJiZW4tdG9vbHRpcD5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbmRPZkRheVRvb2x0aXA+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzXCI+U2V0IGVuZCBvZiBkYXk8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dmVyYmVuLXRvb2x0aXBcbiAgICAgICAgICAgIFt0b3BdPVwiJy00MHB4J1wiXG4gICAgICAgICAgICBbdGV4dENvbG9yXT1cIicjMDAwJ1wiXG4gICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cIicjRDNEM0QzJ1wiXG4gICAgICAgICAgICBbbGVmdF09XCInMCdcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIicxMDBweCdcIlxuICAgICAgICAgICAgW3Rvb2x0aXBDb250ZW50XT1cImNsZWFyVG9vbHRpcFwiXG4gICAgICAgICAgICAjY2xlYXJEYXRlVGlwXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyRGF0ZSgpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCIxNFwiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTRcIlxuICAgICAgICAgICAgICBbaWNvbl09XCInY2xvc2UnXCJcbiAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgPC92ZXJiZW4tdG9vbHRpcD5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2xlYXJUb29sdGlwPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhzXCI+Y2xlYXIgZGF0ZTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1ib2R5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrZGF5c1wiPlxuICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla0RheXNcIj57eyBkYXkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlc1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRheSBvZiBnZXREYXlzSW5Nb250aCgpXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGF5OyBlbHNlIGVtcHR5XCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzU2VsZWN0ZWQoZGF5KVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKGRheSlcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdkaXNhYmxlZC1kYXknOiBpc0Rpc2FibGVkKGRheSkgfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUZW1wb3JhcnlEYXRlKGRheSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBkYXkuZ2V0RGF0ZSgpIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHk+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZW1wdHktZGF0ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1mb290ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2FuY2VsKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY29uZmlybSgpXCI+T0s8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
@@ -360,8 +360,8 @@ class DatePickerComponent {
360
360
  return;
361
361
  }
362
362
  const isInsidePane = targetElement.closest('.cdk-overlay-pane') !== null;
363
- if (!this.datePickerContainer.nativeElement.contains(targetElement) &&
364
- this.showCalendar &&
363
+ // !this.datePickerContainer.nativeElement.contains(targetElement)
364
+ if (this.showCalendar &&
365
365
  this.datePickerExpansion &&
366
366
  !this.datePickerExpansion.nativeElement.contains(targetElement) &&
367
367
  !isInsidePane) {
@@ -375,7 +375,7 @@ class DatePickerComponent {
375
375
  useExisting: forwardRef(() => DatePickerComponent),
376
376
  multi: true,
377
377
  },
378
- ], viewQueries: [{ propertyName: "datePickerContainer", first: true, predicate: ["datePickerContainer"], descendants: true, static: true }, { propertyName: "datePickerExpansion", first: true, predicate: ["datePickerExpansion"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"datePickerContainer.offsetWidth\"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n }\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.calendar-container{position:relative}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{position:absolute;top:100%;left:0;border:1px solid #ccc;background-color:#fff;z-index:10;border-radius:4px}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{position:absolute;top:110%;left:0;width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a;z-index:20}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i5.TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "directive", type: i6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] });
378
+ ], viewQueries: [{ propertyName: "datePickerContainer", first: true, predicate: ["datePickerContainer"], descendants: true, static: true }, { propertyName: "datePickerExpansion", first: true, predicate: ["datePickerExpansion"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"datePickerContainer.offsetWidth\"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n }\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{border:1px solid #ccc;background-color:#fff;border-radius:4px;height:45vh;max-height:370px;overflow-y:auto}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i5.TooltipComponent, selector: "verben-tooltip", inputs: ["tooltipContent", "customClass", "backgroundColor", "textColor", "padding", "borderRadius", "zIndex", "border", "width", "top", "bottom", "left", "right"] }, { kind: "directive", type: i6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] });
379
379
  }
380
380
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DatePickerComponent, decorators: [{
381
381
  type: Component,
@@ -385,7 +385,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
385
385
  useExisting: forwardRef(() => DatePickerComponent),
386
386
  multi: true,
387
387
  },
388
- ], template: "<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"datePickerContainer.offsetWidth\"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n }\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.calendar-container{position:relative}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{position:absolute;top:100%;left:0;border:1px solid #ccc;background-color:#fff;z-index:10;border-radius:4px}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{position:absolute;top:110%;left:0;width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a;z-index:20}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"] }]
388
+ ], template: "<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"datePickerContainer.offsetWidth\"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n }\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".date-picker{position:relative;width:100%}.icon{position:absolute;top:5px;right:10px;cursor:pointer}input{width:100%;padding:10px;font-size:13px;border:1px solid #ccc;border-radius:4px}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed;color:#8080808f}.calendar{border:1px solid #ccc;background-color:#fff;border-radius:4px;height:45vh;max-height:370px;overflow-y:auto}.calendar-header{display:flex;justify-content:center;gap:5px;align-items:center;font-size:13px;padding:15px 15px 0}.weekdays,.dates{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;gap:1px;padding:15px 15px 0;font-size:13px}button{border:none;background:none;cursor:pointer;padding:5px;width:40px;height:40px}button.selected{background-color:#ffe681;color:#000;border-radius:30px}.calendar-footer{display:flex;justify-content:end;gap:10px;padding:4px 15px;color:#000;font-weight:500;font-size:13px}.calendar-footer button{color:#000}.disabled-day{opacity:.4;cursor:not-allowed}.time-picker input{border:1px solid #ccc;border-radius:4px;padding:4px 6px;text-align:center;width:50px;outline:none;height:40px}.time-picker button{border:1px solid #ccc;border-radius:4px;background-color:#f3f3f3;font-size:10px;width:fit-content;height:30px;cursor:pointer}.box{border:1px solid #ccc}::ng-deep .drop-down .verben-drop-down,::ng-deep .drop-down *{font-size:13px!important}.dropdown{width:60px;max-height:120px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:0 2px 8px #0000001a}.dropdown-item{padding:6px;text-align:center;cursor:pointer}.dropdown-item:hover,.dropdown-item.active{background:#3182ce;color:#fff}\n"] }]
389
389
  }], propDecorators: { placeholder: [{
390
390
  type: Input
391
391
  }], format: [{
@@ -1 +1 @@
1
- {"version":3,"file":"verben-ng-ui-src-lib-components-date-picker.mjs","sources":["../../../projects/verben-ng-ui/src/lib/components/date-picker/date-picker.component.ts","../../../projects/verben-ng-ui/src/lib/components/date-picker/date-picker.component.html","../../../projects/verben-ng-ui/src/lib/components/date-picker/date-picker.module.ts","../../../projects/verben-ng-ui/src/lib/components/date-picker/verben-ng-ui-src-lib-components-date-picker.ts"],"sourcesContent":["import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n ViewChild,\n forwardRef,\n} from '@angular/core';\nimport { DropdownChangeEvent } from 'verben-ng-ui/src/lib/components/drop-down';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'app-date-picker',\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true,\n },\n ],\n})\nexport class DatePickerComponent implements ControlValueAccessor {\n @Input() placeholder = 'Select date';\n @Input() format = 'MM/DD/YYYY';\n @Input() minDate?: Date;\n @Input() maxDate?: Date;\n @Input() disabled?: boolean = false;\n @Input() bgColor?: string = '#fff';\n @Input() border?: string = '';\n @Input() useDropdowns: boolean = true;\n @Input() yearPlaceholder: string = 'Select a year';\n @Input() monthPlaceholder: string = 'Select a month';\n @Input() date: Date | null | string = null;\n @Input() showTime: boolean = false;\n\n @Input() datePickerWidth: string = '400px';\n @Input() useDefaultDate: boolean = false;\n\n @Output() dateChange = new EventEmitter<Date | null>();\n @ViewChild('datePickerContainer', { static: true })\n datePickerContainer!: ElementRef;\n @ViewChild('datePickerExpansion', { static: false })\n datePickerExpansion!: ElementRef;\n\n yearRange: number[] = [];\n filteredYearRange: number[] = [];\n\n selectedDate: Date | null = null;\n tempSelectedDate: Date | null = null;\n\n showCalendar = false;\n\n weekDays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\n months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n\n selectedMonth: number = 1;\n selectedMonthString: string = '';\n selectedYear: number = new Date().getFullYear();\n\n private onChange: any = () => {};\n private onTouched: any = () => {};\n\n writeValue(value: Date | string | null): void {\n if (value) {\n if (typeof value === 'string') {\n value = this.sanitizeDateString(value);\n }\n\n const parsedDate = typeof value === 'string' ? new Date(value) : value;\n this.date = parsedDate;\n\n this.selectedDate = new Date(parsedDate);\n this.tempSelectedDate = new Date(parsedDate);\n this.selectedMonth = this.selectedDate.getMonth();\n this.selectedYear = this.selectedDate.getFullYear();\n\n if (this.showTime) {\n this.initTimeFromDate(this.selectedDate);\n }\n }\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): void {\n this.disabled = isDisabled;\n }\n\n ngOnChanges() {\n if (this.date) {\n let d = this.date;\n if (typeof d === 'string') d = this.sanitizeDateString(d);\n\n const parsedDate = new Date(d);\n this.selectedDate = new Date(parsedDate);\n this.tempSelectedDate = new Date(parsedDate);\n this.selectedMonth = this.selectedDate.getMonth();\n this.selectedYear = this.selectedDate.getFullYear();\n }\n }\n\n isSameDate(d1: Date, d2: Date): boolean {\n return (\n d1.getFullYear() === d2.getFullYear() &&\n d1.getMonth() === d2.getMonth() &&\n d1.getDate() === d2.getDate()\n );\n }\n\n ngOnInit() {\n const currentYear = new Date().getFullYear();\n const endYear = currentYear + 10;\n this.yearRange = Array.from(\n { length: endYear - 1960 + 1 },\n (_, i) => 1960 + i\n );\n this.yearRange.sort((a, b) => b - a);\n\n if (!this.date && this.useDefaultDate) {\n const now = new Date();\n const pad = (n: number) => n.toString().padStart(2, '0');\n\n const localDateString = `${now.getFullYear()}-${pad(\n now.getMonth() + 1\n )}-${pad(now.getDate())}T${pad(now.getHours())}:${pad(\n now.getMinutes()\n )}:${pad(now.getSeconds())}`;\n\n this.selectedDate = new Date(localDateString);\n this.tempSelectedDate = new Date(localDateString);\n this.date = this.selectedDate;\n\n if (this.showTime) {\n const hours = now.getHours();\n const minutes = now.getMinutes();\n\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n }\n\n this.dateChange.emit(this.selectedDate);\n this.onChange(localDateString);\n }\n }\n\n get displayDate(): string {\n const parsedDate =\n typeof this.date === 'string' ? new Date(this.date) : this.date;\n return parsedDate ? this.formatDate(parsedDate, this.format) : '';\n }\n\n tempTime: string = '';\n selectedHour = '00';\n selectedMinute = '00';\n\n showHourOptions = false;\n showMinuteOptions = false;\n\n hours = Array.from({ length: 24 }, (_, i) => String(i).padStart(2, '0'));\n minutes = Array.from({ length: 60 }, (_, i) => String(i).padStart(2, '0'));\n\n toggleHourDropdown() {\n this.showHourOptions = !this.showHourOptions;\n this.showMinuteOptions = false;\n }\n\n toggleMinuteDropdown() {\n this.showMinuteOptions = !this.showMinuteOptions;\n this.showHourOptions = false;\n }\n\n selectHour(h: string) {\n this.selectedHour = h;\n this.showHourOptions = false;\n }\n\n selectMinute(m: string) {\n this.selectedMinute = m;\n this.showMinuteOptions = false;\n }\n\n toggleCalendar() {\n this.showCalendar = !this.showCalendar;\n\n if (this.date) {\n this.tempSelectedDate = new Date(this.date);\n } else {\n this.tempSelectedDate = this.useDefaultDate ? new Date() : null;\n }\n\n if (this.tempSelectedDate) {\n this.selectedMonth = this.tempSelectedDate.getMonth();\n this.selectedMonthString = this.months[this.selectedMonth];\n this.selectedYear = this.tempSelectedDate.getFullYear();\n }\n\n if (this.showTime && !this.tempTime) {\n const today = new Date();\n const isToday =\n this.tempSelectedDate && this.isSameDate(this.tempSelectedDate, today);\n\n const hours = isToday ? today.getHours() : 0;\n const minutes = isToday ? today.getMinutes() : 0;\n\n if (this.tempSelectedDate) {\n this.tempSelectedDate.setHours(hours, minutes, 0, 0);\n }\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n }\n }\n\n initTimeFromDate(date: Date) {\n const hours = date.getHours();\n const minutes = date.getMinutes();\n\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n this.tempSelectedDate?.setHours(hours, minutes, 0, 0);\n }\n clearDate() {\n this.date = null;\n this.selectedDate = null;\n this.tempSelectedDate = null;\n this.tempTime = '';\n this.selectedHour = '00';\n this.selectedMinute = '00';\n\n this.dateChange.emit(null);\n\n this.onChange(null);\n this.onTouched();\n\n this.showCalendar = false;\n }\n\n fixToUTC(dateValue: any) {\n if (!dateValue) return null;\n\n const date = dateValue instanceof Date ? dateValue : new Date(dateValue);\n if (isNaN(date.getTime())) return null;\n\n return new Date(\n Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n )\n );\n }\n\n confirm() {\n if (!this.tempSelectedDate) return;\n if (this.isDisabled(this.tempSelectedDate)) return;\n\n const hours = Number(this.selectedHour);\n const minutes = Number(this.selectedMinute);\n\n this.tempSelectedDate.setHours(hours, minutes, 0, 0);\n\n this.selectedDate = new Date(this.tempSelectedDate);\n this.date = this.selectedDate;\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n const localDateString = `${this.selectedDate.getFullYear()}-${pad(\n this.selectedDate.getMonth() + 1\n )}-${pad(this.selectedDate.getDate())}T${pad(\n this.selectedDate.getHours()\n )}:${pad(this.selectedDate.getMinutes())}:${pad(\n this.selectedDate.getSeconds()\n )}`;\n\n this.dateChange.emit(this.selectedDate);\n this.onChange(localDateString);\n this.onTouched();\n\n this.showCalendar = false;\n }\n\n setToStartOfDay() {\n if (!this.tempSelectedDate) return;\n\n this.selectedHour = '00';\n this.selectedMinute = '00';\n\n this.tempSelectedDate.setHours(0, 0, 0, 0);\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n\n this.selectedDate = new Date(this.tempSelectedDate);\n }\n\n setToEndOfDay() {\n if (!this.tempSelectedDate) return;\n\n this.selectedHour = '23';\n this.selectedMinute = '59';\n\n this.tempSelectedDate.setHours(23, 59, 59, 999);\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n\n this.selectedDate = new Date(this.tempSelectedDate);\n }\n\n previousMonth() {\n this.selectedMonth--;\n if (this.selectedMonth < 0) {\n this.selectedMonth = 11;\n this.selectedYear--;\n }\n this.updateTempSelectedDate();\n }\n\n nextMonth() {\n this.selectedMonth++;\n if (this.selectedMonth > 11) {\n this.selectedMonth = 0;\n this.selectedYear++;\n }\n this.updateTempSelectedDate();\n }\n\n onDropdownYearChange(event: DropdownChangeEvent): void {\n this.selectedYear = event.value;\n this.updateTempSelectedDate();\n }\n\n onDropdownMonthChange(event: DropdownChangeEvent): void {\n this.selectedMonth = this.months.indexOf(event.value);\n this.updateTempSelectedDate();\n }\n\n updateTempSelectedDate() {\n if (!this.tempSelectedDate) return;\n this.tempSelectedDate.setMonth(this.selectedMonth);\n this.tempSelectedDate.setFullYear(this.selectedYear);\n }\n\n getDaysInMonth(): (Date | null)[] {\n const days: (Date | null)[] = [];\n const year = this.selectedYear;\n const month = this.selectedMonth;\n\n const firstDayOfMonth = new Date(year, month, 1).getDay();\n const offset = firstDayOfMonth === 0 ? 6 : firstDayOfMonth - 1;\n\n for (let i = 0; i < offset; i++) {\n days.push(null);\n }\n\n const totalDays = new Date(year, month + 1, 0).getDate();\n for (let i = 1; i <= totalDays; i++) {\n const day = new Date(year, month, i);\n days.push(day);\n }\n return days;\n }\n\n sanitizeDateString(value: string): string {\n return value?.endsWith('Z') ? value.slice(0, -1) : value;\n }\n\n isDisabled(day: Date | string): boolean {\n const dayDate = this.toDate(day);\n\n if (this.minDate && dayDate < this.stripTime(this.toDate(this.minDate)))\n return true;\n if (this.maxDate && dayDate > this.stripTime(this.toDate(this.maxDate)))\n return true;\n\n return false;\n }\n\n private stripTime(date: Date | string): Date {\n const d = this.toDate(date);\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n }\n\n toDate(value: Date | string): Date {\n if (value instanceof Date) return value;\n return new Date(this.sanitizeDateString(value));\n }\n\n is24Hour: boolean = true;\n\n selectTemporaryDate(day: Date) {\n if (!this.tempSelectedDate) this.tempSelectedDate = new Date(day);\n if (this.isDisabled(day)) return;\n\n const isNewDate = !this.isSameDate(this.tempSelectedDate, day);\n this.tempSelectedDate = new Date(day);\n\n if (this.showTime) {\n if (isNewDate) {\n const today = new Date();\n const isToday =\n day.getFullYear() === today.getFullYear() &&\n day.getMonth() === today.getMonth() &&\n day.getDate() === today.getDate();\n\n const hours = isToday ? today.getHours() : 0;\n const minutes = isToday ? today.getMinutes() : 0;\n\n this.tempSelectedDate.setHours(hours, minutes, 0, 0);\n\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n } else {\n const [h, m] = this.tempTime.split(':');\n this.selectedHour = h;\n this.selectedMinute = m;\n }\n }\n }\n\n isSelected(day: Date): boolean {\n if (!this.tempSelectedDate) return false;\n\n return (\n day.getDate() === this.tempSelectedDate.getDate() &&\n day.getMonth() === this.tempSelectedDate.getMonth() &&\n day.getFullYear() === this.tempSelectedDate.getFullYear()\n );\n }\n\n formatDate(date: Date, format: string): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear();\n\n switch (format) {\n case 'DD/MM/YYYY':\n return `${day}/${month}/${year}`;\n case 'MM/DD/YYYY':\n default:\n return `${month}/${day}/${year}`;\n }\n }\n\n cancel() {\n this.showCalendar = false;\n }\n\n @HostListener('document:click', ['$event.target'])\n onClickOutside(targetElement: any) {\n if (!this.showCalendar) {\n return;\n }\n const isInsidePane = targetElement.closest('.cdk-overlay-pane') !== null;\n if (\n !this.datePickerContainer.nativeElement.contains(targetElement) &&\n this.showCalendar &&\n this.datePickerExpansion &&\n !this.datePickerExpansion.nativeElement.contains(targetElement) &&\n !isInsidePane\n ) {\n this.showCalendar = false;\n }\n }\n}\n","<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"datePickerContainer.offsetWidth\"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n }\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { DatePickerComponent } from './date-picker.component';\nimport { SvgModule } from 'verben-ng-ui/src/lib/components/svg';\nimport { DropDownModule } from 'verben-ng-ui/src/lib/components/drop-down';\nimport { VerbenPopUpModule } from 'verben-ng-ui/src/lib/components/pop-up';\nimport { OutSideClickDirective } from 'verben-ng-ui/src/lib/components/data-view';\nimport { TooltipModule } from 'verben-ng-ui/src/lib/components/tooltip';\nimport { OverlayModule } from '@angular/cdk/overlay';\n@NgModule({\n declarations: [DatePickerComponent],\n imports: [\n FormsModule,\n CommonModule,\n SvgModule,\n DropDownModule,\n VerbenPopUpModule,\n OutSideClickDirective,\n TooltipModule,\n OverlayModule,\n ],\n exports: [DatePickerComponent],\n})\nexport class DatePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verben-ng-ui-src-lib-components-date-picker.mjs","sources":["../../../projects/verben-ng-ui/src/lib/components/date-picker/date-picker.component.ts","../../../projects/verben-ng-ui/src/lib/components/date-picker/date-picker.component.html","../../../projects/verben-ng-ui/src/lib/components/date-picker/date-picker.module.ts","../../../projects/verben-ng-ui/src/lib/components/date-picker/verben-ng-ui-src-lib-components-date-picker.ts"],"sourcesContent":["import {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n ViewChild,\n forwardRef,\n} from '@angular/core';\nimport { DropdownChangeEvent } from 'verben-ng-ui/src/lib/components/drop-down';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n selector: 'app-date-picker',\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.css'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true,\n },\n ],\n})\nexport class DatePickerComponent implements ControlValueAccessor {\n @Input() placeholder = 'Select date';\n @Input() format = 'MM/DD/YYYY';\n @Input() minDate?: Date;\n @Input() maxDate?: Date;\n @Input() disabled?: boolean = false;\n @Input() bgColor?: string = '#fff';\n @Input() border?: string = '';\n @Input() useDropdowns: boolean = true;\n @Input() yearPlaceholder: string = 'Select a year';\n @Input() monthPlaceholder: string = 'Select a month';\n @Input() date: Date | null | string = null;\n @Input() showTime: boolean = false;\n\n @Input() datePickerWidth: string = '400px';\n @Input() useDefaultDate: boolean = false;\n\n @Output() dateChange = new EventEmitter<Date | null>();\n @ViewChild('datePickerContainer', { static: true })\n datePickerContainer!: ElementRef;\n @ViewChild('datePickerExpansion', { static: false })\n datePickerExpansion!: ElementRef;\n\n yearRange: number[] = [];\n filteredYearRange: number[] = [];\n\n selectedDate: Date | null = null;\n tempSelectedDate: Date | null = null;\n\n showCalendar = false;\n\n weekDays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\n months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n\n selectedMonth: number = 1;\n selectedMonthString: string = '';\n selectedYear: number = new Date().getFullYear();\n\n private onChange: any = () => {};\n private onTouched: any = () => {};\n\n writeValue(value: Date | string | null): void {\n if (value) {\n if (typeof value === 'string') {\n value = this.sanitizeDateString(value);\n }\n\n const parsedDate = typeof value === 'string' ? new Date(value) : value;\n this.date = parsedDate;\n\n this.selectedDate = new Date(parsedDate);\n this.tempSelectedDate = new Date(parsedDate);\n this.selectedMonth = this.selectedDate.getMonth();\n this.selectedYear = this.selectedDate.getFullYear();\n\n if (this.showTime) {\n this.initTimeFromDate(this.selectedDate);\n }\n }\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): void {\n this.disabled = isDisabled;\n }\n\n ngOnChanges() {\n if (this.date) {\n let d = this.date;\n if (typeof d === 'string') d = this.sanitizeDateString(d);\n\n const parsedDate = new Date(d);\n this.selectedDate = new Date(parsedDate);\n this.tempSelectedDate = new Date(parsedDate);\n this.selectedMonth = this.selectedDate.getMonth();\n this.selectedYear = this.selectedDate.getFullYear();\n }\n }\n\n isSameDate(d1: Date, d2: Date): boolean {\n return (\n d1.getFullYear() === d2.getFullYear() &&\n d1.getMonth() === d2.getMonth() &&\n d1.getDate() === d2.getDate()\n );\n }\n\n ngOnInit() {\n const currentYear = new Date().getFullYear();\n const endYear = currentYear + 10;\n this.yearRange = Array.from(\n { length: endYear - 1960 + 1 },\n (_, i) => 1960 + i\n );\n this.yearRange.sort((a, b) => b - a);\n\n if (!this.date && this.useDefaultDate) {\n const now = new Date();\n const pad = (n: number) => n.toString().padStart(2, '0');\n\n const localDateString = `${now.getFullYear()}-${pad(\n now.getMonth() + 1\n )}-${pad(now.getDate())}T${pad(now.getHours())}:${pad(\n now.getMinutes()\n )}:${pad(now.getSeconds())}`;\n\n this.selectedDate = new Date(localDateString);\n this.tempSelectedDate = new Date(localDateString);\n this.date = this.selectedDate;\n\n if (this.showTime) {\n const hours = now.getHours();\n const minutes = now.getMinutes();\n\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n }\n\n this.dateChange.emit(this.selectedDate);\n this.onChange(localDateString);\n }\n }\n\n get displayDate(): string {\n const parsedDate =\n typeof this.date === 'string' ? new Date(this.date) : this.date;\n return parsedDate ? this.formatDate(parsedDate, this.format) : '';\n }\n\n tempTime: string = '';\n selectedHour = '00';\n selectedMinute = '00';\n\n showHourOptions = false;\n showMinuteOptions = false;\n\n hours = Array.from({ length: 24 }, (_, i) => String(i).padStart(2, '0'));\n minutes = Array.from({ length: 60 }, (_, i) => String(i).padStart(2, '0'));\n\n toggleHourDropdown() {\n this.showHourOptions = !this.showHourOptions;\n this.showMinuteOptions = false;\n }\n\n toggleMinuteDropdown() {\n this.showMinuteOptions = !this.showMinuteOptions;\n this.showHourOptions = false;\n }\n\n selectHour(h: string) {\n this.selectedHour = h;\n this.showHourOptions = false;\n }\n\n selectMinute(m: string) {\n this.selectedMinute = m;\n this.showMinuteOptions = false;\n }\n\n toggleCalendar() {\n this.showCalendar = !this.showCalendar;\n\n if (this.date) {\n this.tempSelectedDate = new Date(this.date);\n } else {\n this.tempSelectedDate = this.useDefaultDate ? new Date() : null;\n }\n\n if (this.tempSelectedDate) {\n this.selectedMonth = this.tempSelectedDate.getMonth();\n this.selectedMonthString = this.months[this.selectedMonth];\n this.selectedYear = this.tempSelectedDate.getFullYear();\n }\n\n if (this.showTime && !this.tempTime) {\n const today = new Date();\n const isToday =\n this.tempSelectedDate && this.isSameDate(this.tempSelectedDate, today);\n\n const hours = isToday ? today.getHours() : 0;\n const minutes = isToday ? today.getMinutes() : 0;\n\n if (this.tempSelectedDate) {\n this.tempSelectedDate.setHours(hours, minutes, 0, 0);\n }\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n }\n }\n\n initTimeFromDate(date: Date) {\n const hours = date.getHours();\n const minutes = date.getMinutes();\n\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n this.tempSelectedDate?.setHours(hours, minutes, 0, 0);\n }\n clearDate() {\n this.date = null;\n this.selectedDate = null;\n this.tempSelectedDate = null;\n this.tempTime = '';\n this.selectedHour = '00';\n this.selectedMinute = '00';\n\n this.dateChange.emit(null);\n\n this.onChange(null);\n this.onTouched();\n\n this.showCalendar = false;\n }\n\n fixToUTC(dateValue: any) {\n if (!dateValue) return null;\n\n const date = dateValue instanceof Date ? dateValue : new Date(dateValue);\n if (isNaN(date.getTime())) return null;\n\n return new Date(\n Date.UTC(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds()\n )\n );\n }\n\n confirm() {\n if (!this.tempSelectedDate) return;\n if (this.isDisabled(this.tempSelectedDate)) return;\n\n const hours = Number(this.selectedHour);\n const minutes = Number(this.selectedMinute);\n\n this.tempSelectedDate.setHours(hours, minutes, 0, 0);\n\n this.selectedDate = new Date(this.tempSelectedDate);\n this.date = this.selectedDate;\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n const localDateString = `${this.selectedDate.getFullYear()}-${pad(\n this.selectedDate.getMonth() + 1\n )}-${pad(this.selectedDate.getDate())}T${pad(\n this.selectedDate.getHours()\n )}:${pad(this.selectedDate.getMinutes())}:${pad(\n this.selectedDate.getSeconds()\n )}`;\n\n this.dateChange.emit(this.selectedDate);\n this.onChange(localDateString);\n this.onTouched();\n\n this.showCalendar = false;\n }\n\n setToStartOfDay() {\n if (!this.tempSelectedDate) return;\n\n this.selectedHour = '00';\n this.selectedMinute = '00';\n\n this.tempSelectedDate.setHours(0, 0, 0, 0);\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n\n this.selectedDate = new Date(this.tempSelectedDate);\n }\n\n setToEndOfDay() {\n if (!this.tempSelectedDate) return;\n\n this.selectedHour = '23';\n this.selectedMinute = '59';\n\n this.tempSelectedDate.setHours(23, 59, 59, 999);\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n\n this.selectedDate = new Date(this.tempSelectedDate);\n }\n\n previousMonth() {\n this.selectedMonth--;\n if (this.selectedMonth < 0) {\n this.selectedMonth = 11;\n this.selectedYear--;\n }\n this.updateTempSelectedDate();\n }\n\n nextMonth() {\n this.selectedMonth++;\n if (this.selectedMonth > 11) {\n this.selectedMonth = 0;\n this.selectedYear++;\n }\n this.updateTempSelectedDate();\n }\n\n onDropdownYearChange(event: DropdownChangeEvent): void {\n this.selectedYear = event.value;\n this.updateTempSelectedDate();\n }\n\n onDropdownMonthChange(event: DropdownChangeEvent): void {\n this.selectedMonth = this.months.indexOf(event.value);\n this.updateTempSelectedDate();\n }\n\n updateTempSelectedDate() {\n if (!this.tempSelectedDate) return;\n this.tempSelectedDate.setMonth(this.selectedMonth);\n this.tempSelectedDate.setFullYear(this.selectedYear);\n }\n\n getDaysInMonth(): (Date | null)[] {\n const days: (Date | null)[] = [];\n const year = this.selectedYear;\n const month = this.selectedMonth;\n\n const firstDayOfMonth = new Date(year, month, 1).getDay();\n const offset = firstDayOfMonth === 0 ? 6 : firstDayOfMonth - 1;\n\n for (let i = 0; i < offset; i++) {\n days.push(null);\n }\n\n const totalDays = new Date(year, month + 1, 0).getDate();\n for (let i = 1; i <= totalDays; i++) {\n const day = new Date(year, month, i);\n days.push(day);\n }\n return days;\n }\n\n sanitizeDateString(value: string): string {\n return value?.endsWith('Z') ? value.slice(0, -1) : value;\n }\n\n isDisabled(day: Date | string): boolean {\n const dayDate = this.toDate(day);\n\n if (this.minDate && dayDate < this.stripTime(this.toDate(this.minDate)))\n return true;\n if (this.maxDate && dayDate > this.stripTime(this.toDate(this.maxDate)))\n return true;\n\n return false;\n }\n\n private stripTime(date: Date | string): Date {\n const d = this.toDate(date);\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n }\n\n toDate(value: Date | string): Date {\n if (value instanceof Date) return value;\n return new Date(this.sanitizeDateString(value));\n }\n\n is24Hour: boolean = true;\n\n selectTemporaryDate(day: Date) {\n if (!this.tempSelectedDate) this.tempSelectedDate = new Date(day);\n if (this.isDisabled(day)) return;\n\n const isNewDate = !this.isSameDate(this.tempSelectedDate, day);\n this.tempSelectedDate = new Date(day);\n\n if (this.showTime) {\n if (isNewDate) {\n const today = new Date();\n const isToday =\n day.getFullYear() === today.getFullYear() &&\n day.getMonth() === today.getMonth() &&\n day.getDate() === today.getDate();\n\n const hours = isToday ? today.getHours() : 0;\n const minutes = isToday ? today.getMinutes() : 0;\n\n this.tempSelectedDate.setHours(hours, minutes, 0, 0);\n\n this.selectedHour = hours.toString().padStart(2, '0');\n this.selectedMinute = minutes.toString().padStart(2, '0');\n this.tempTime = `${this.selectedHour}:${this.selectedMinute}`;\n } else {\n const [h, m] = this.tempTime.split(':');\n this.selectedHour = h;\n this.selectedMinute = m;\n }\n }\n }\n\n isSelected(day: Date): boolean {\n if (!this.tempSelectedDate) return false;\n\n return (\n day.getDate() === this.tempSelectedDate.getDate() &&\n day.getMonth() === this.tempSelectedDate.getMonth() &&\n day.getFullYear() === this.tempSelectedDate.getFullYear()\n );\n }\n\n formatDate(date: Date, format: string): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear();\n\n switch (format) {\n case 'DD/MM/YYYY':\n return `${day}/${month}/${year}`;\n case 'MM/DD/YYYY':\n default:\n return `${month}/${day}/${year}`;\n }\n }\n\n cancel() {\n this.showCalendar = false;\n }\n\n @HostListener('document:click', ['$event.target'])\n onClickOutside(targetElement: any) {\n if (!this.showCalendar) {\n return;\n }\n const isInsidePane = targetElement.closest('.cdk-overlay-pane') !== null;\n\n // !this.datePickerContainer.nativeElement.contains(targetElement)\n if (\n this.showCalendar &&\n this.datePickerExpansion &&\n !this.datePickerExpansion.nativeElement.contains(targetElement) &&\n !isInsidePane\n ) {\n this.showCalendar = false;\n }\n }\n}\n","<div #datePickerContainer class=\"date-picker\">\n <div class=\"calendar-container\">\n <input\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"text\"\n [placeholder]=\"placeholder\"\n [value]=\"displayDate\"\n [disabled]=\"disabled\"\n (click)=\"!disabled && toggleCalendar()\"\n class=\"w-full block\"\n [style.background-color]=\"bgColor\"\n [style.border]=\"border\"\n [ngClass]=\"{\n 'cursor-not-allowed': disabled === true,\n 'cursor-pointer': disabled === false\n }\"\n readonly\n />\n <verben-svg\n (click)=\"!disabled && toggleCalendar()\"\n class=\"icon\"\n [icon]=\"'calendar'\"\n ></verben-svg>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayWidth]=\"datePickerContainer.offsetWidth\"\n [cdkConnectedOverlayLockPosition]=\"false\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayPositions]=\"[\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top'\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom'\n }\n ]\"\n [cdkConnectedOverlayOpen]=\"showCalendar\"\n (detach)=\"showCalendar = false\"\n >\n <div class=\"calendar\" [style.width]=\"datePickerWidth\" #datePickerExpansion>\n <div class=\"calendar-header\">\n <ng-container *ngIf=\"!useDropdowns; else dropdowns\">\n <button (click)=\"previousMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-left'\"></verben-svg>\n </button>\n <span>{{ months[selectedMonth] }} {{ selectedYear }}</span>\n <button (click)=\"nextMonth()\">\n <verben-svg [width]=\"20\" [icon]=\"'chevron-right'\"></verben-svg>\n </button>\n </ng-container>\n\n <ng-template #dropdowns>\n <verben-drop-down\n [placeholder]=\"yearPlaceholder\"\n (onChange)=\"onDropdownYearChange($event)\"\n [options]=\"yearRange\"\n [(ngModel)]=\"selectedYear\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n\n <verben-drop-down\n [placeholder]=\"monthPlaceholder\"\n (onChange)=\"onDropdownMonthChange($event)\"\n [options]=\"months\"\n class=\"drop-down\"\n [(ngModel)]=\"selectedMonthString\"\n [width]=\"'90px'\"\n ></verben-drop-down>\n </ng-template>\n\n <div class=\"time-picker flex items-center gap-2\" *ngIf=\"showTime\">\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleHourDropdown()\"\n >\n {{ selectedHour }}\n </div>\n\n <div *ngIf=\"showHourOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let h of hours\"\n [class.active]=\"h === selectedHour\"\n (click)=\"selectHour(h)\"\n >\n {{ h }}\n </div>\n </div>\n </div>\n\n <span>:</span>\n\n <div class=\"relative\">\n <div\n class=\"flex items-center box rounded px-2 py-1 cursor-pointer\"\n (click)=\"toggleMinuteDropdown()\"\n >\n {{ selectedMinute }}\n </div>\n\n <div *ngIf=\"showMinuteOptions\" class=\"dropdown\">\n <div\n class=\"dropdown-item\"\n *ngFor=\"let m of minutes\"\n [class.active]=\"m === selectedMinute\"\n (click)=\"selectMinute(m)\"\n >\n {{ m }}\n </div>\n </div>\n </div>\n\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"tooltipTemplate\"\n #tooltip\n >\n <verben-svg\n (click)=\"setToStartOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'sun'\"\n ></verben-svg>\n </verben-tooltip>\n <ng-template #tooltipTemplate>\n <div>\n <p class=\"text-xs\">Set start of day</p>\n </div>\n </ng-template>\n </div>\n <div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"endOfDayTooltip\"\n #endOfDayTip\n >\n <verben-svg\n (click)=\"setToEndOfDay()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'moon'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #endOfDayTooltip>\n <div>\n <p class=\"text-xs\">Set end of day</p>\n </div>\n </ng-template>\n </div>\n <verben-tooltip\n [top]=\"'-40px'\"\n [textColor]=\"'#000'\"\n [backgroundColor]=\"'#D3D3D3'\"\n [left]=\"'0'\"\n [width]=\"'100px'\"\n [tooltipContent]=\"clearTooltip\"\n #clearDateTip\n >\n <verben-svg\n (click)=\"clearDate()\"\n class=\"cursor-pointer\"\n [width]=\"14\"\n [height]=\"14\"\n [icon]=\"'close'\"\n ></verben-svg>\n </verben-tooltip>\n\n <ng-template #clearTooltip>\n <div>\n <p class=\"text-xs\">clear date</p>\n </div>\n </ng-template>\n </div>\n </div>\n\n <div class=\"calendar-body\">\n <div class=\"weekdays\">\n <span *ngFor=\"let day of weekDays\">{{ day }}</span>\n </div>\n\n <div class=\"dates\">\n <ng-container *ngFor=\"let day of getDaysInMonth()\">\n <button\n *ngIf=\"day; else empty\"\n [class.selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [ngClass]=\"{ 'disabled-day': isDisabled(day) }\"\n (click)=\"selectTemporaryDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n <ng-template #empty>\n <span class=\"empty-date\"></span>\n </ng-template>\n </ng-container>\n </div>\n </div>\n\n <div class=\"calendar-footer\">\n <button (click)=\"cancel()\">Cancel</button>\n <button (click)=\"confirm()\">OK</button>\n </div>\n </div>\n </ng-template>\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { DatePickerComponent } from './date-picker.component';\nimport { SvgModule } from 'verben-ng-ui/src/lib/components/svg';\nimport { DropDownModule } from 'verben-ng-ui/src/lib/components/drop-down';\nimport { VerbenPopUpModule } from 'verben-ng-ui/src/lib/components/pop-up';\nimport { OutSideClickDirective } from 'verben-ng-ui/src/lib/components/data-view';\nimport { TooltipModule } from 'verben-ng-ui/src/lib/components/tooltip';\nimport { OverlayModule } from '@angular/cdk/overlay';\n@NgModule({\n declarations: [DatePickerComponent],\n imports: [\n FormsModule,\n CommonModule,\n SvgModule,\n DropDownModule,\n VerbenPopUpModule,\n OutSideClickDirective,\n TooltipModule,\n OverlayModule,\n ],\n exports: [DatePickerComponent],\n})\nexport class DatePickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "verben-ng-ui",
3
- "version": "1.2.56",
3
+ "version": "1.2.58",
4
4
  "author": "Verbena Logic",
5
5
  "repository": {
6
6
  "type": "git",
@@ -99,18 +99,18 @@
99
99
  "esm": "./esm2022/src/lib/theme-switcher/verben-ng-ui-src-lib-theme-switcher.mjs",
100
100
  "default": "./fesm2022/verben-ng-ui-src-lib-theme-switcher.mjs"
101
101
  },
102
- "./src/lib/validate-input": {
103
- "types": "./src/lib/validate-input/index.d.ts",
104
- "esm2022": "./esm2022/src/lib/validate-input/verben-ng-ui-src-lib-validate-input.mjs",
105
- "esm": "./esm2022/src/lib/validate-input/verben-ng-ui-src-lib-validate-input.mjs",
106
- "default": "./fesm2022/verben-ng-ui-src-lib-validate-input.mjs"
107
- },
108
102
  "./src/lib/validate": {
109
103
  "types": "./src/lib/validate/index.d.ts",
110
104
  "esm2022": "./esm2022/src/lib/validate/verben-ng-ui-src-lib-validate.mjs",
111
105
  "esm": "./esm2022/src/lib/validate/verben-ng-ui-src-lib-validate.mjs",
112
106
  "default": "./fesm2022/verben-ng-ui-src-lib-validate.mjs"
113
107
  },
108
+ "./src/lib/validate-input": {
109
+ "types": "./src/lib/validate-input/index.d.ts",
110
+ "esm2022": "./esm2022/src/lib/validate-input/verben-ng-ui-src-lib-validate-input.mjs",
111
+ "esm": "./esm2022/src/lib/validate-input/verben-ng-ui-src-lib-validate-input.mjs",
112
+ "default": "./fesm2022/verben-ng-ui-src-lib-validate-input.mjs"
113
+ },
114
114
  "./src/lib/verbena-badge": {
115
115
  "types": "./src/lib/verbena-badge/index.d.ts",
116
116
  "esm2022": "./esm2022/src/lib/verbena-badge/verben-ng-ui-src-lib-verbena-badge.mjs",