@elderbyte/ngx-starter 18.12.6 → 18.12.7

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.
@@ -90,4 +90,4 @@ export default class IntervalPickerStateManager {
90
90
  this._intervalChange.next(newInterval);
91
91
  }
92
92
  }
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWwtcGlja2VyLXN0YXRlLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL3RpbWUvZWxkZXItaW50ZXJ2YWwtcGlja2VyL21hbmFnZXIvaW50ZXJ2YWwtcGlja2VyLXN0YXRlLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNELE9BQU8sV0FBVyxNQUFNLHVCQUF1QixDQUFBO0FBQy9DLE9BQU8sYUFBYSxNQUFNLHlCQUF5QixDQUFBO0FBRW5ELE9BQU8sa0JBQWtCLE1BQU0sOEJBQThCLENBQUE7QUFFN0QsTUFBTSxDQUFDLE9BQU8sT0FBTywwQkFBMEI7SUFlN0M7Ozs7Z0ZBSTRFO0lBRTVFO1FBcEJBOzs7O29GQUk0RTtRQUUzRCxRQUFHLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXBELFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBYyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUMvRCxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxDQUFBO1FBQ3BELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWtCLElBQUksQ0FBQyxDQUFBO1FBQ3hELG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQWlCLENBQUE7UUFDeEQsa0JBQWEsR0FBRyxLQUFLLENBQUE7SUFRYixDQUFDO0lBRWhCOzs7O2dGQUk0RTtJQUU1RSxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ3RDLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ3BDLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ3hDLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2xDLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2hDLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ3BDLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQzVDLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFckUsU0FBUyxDQUFDLE1BQW1CO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxnQkFBd0M7UUFDL0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtZQUNuQyxPQUFNO1FBQ1IsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0lBRU0sbUJBQW1CLENBQUMsUUFBdUI7UUFDaEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUMvQyxPQUFNO1FBQ1IsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDL0MsT0FBTTtRQUNSLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFFTSxhQUFhLENBQUMsVUFBMkI7UUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxRQUF1QjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLE9BQU07UUFDUixDQUFDO1FBRUQsSUFDRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtZQUN6QixrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUN4RSxDQUFDO1lBQ0QsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFFeEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDeEMsQ0FBQztDQU9GIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9nZ2VyRmFjdG9yeSB9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJ1xuaW1wb3J0IHsgVGVtcG9yYWwgfSBmcm9tICdAanMtdGVtcG9yYWwvcG9seWZpbGwnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IEFuY2hvclN0YXRlIGZyb20gJy4uL21vZGVsL2FuY2hvci1zdGF0ZSdcbmltcG9ydCBJbnRlcnZhbFN0YXRlIGZyb20gJy4uL21vZGVsL2ludGVydmFsLXN0YXRlJ1xuaW1wb3J0IFNtYXJ0U2hpZnRTdGF0ZSBmcm9tICcuLi9tb2RlbC9zbWFydC1zaGlmdC1zdGF0ZSdcbmltcG9ydCBJbnRlcnZhbFBpY2tlclV0aWwgZnJvbSAnLi4vdXRpbC9pbnRlcnZhbC1waWNrZXItdXRpbCdcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW50ZXJ2YWxQaWNrZXJTdGF0ZU1hbmFnZXIge1xuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMuY29uc3RydWN0b3IubmFtZSlcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hbmNob3IgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFuY2hvclN0YXRlPihBbmNob3JTdGF0ZS5lbXB0eSgpKVxuICBwcml2YXRlIHJlYWRvbmx5IF9pbnRlcnZhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SW50ZXJ2YWxTdGF0ZT4obnVsbClcbiAgcHJpdmF0ZSByZWFkb25seSBfc21hcnRTaGlmdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U21hcnRTaGlmdFN0YXRlPihudWxsKVxuICBwcml2YXRlIHJlYWRvbmx5IF9pbnRlcnZhbENoYW5nZSA9IG5ldyBTdWJqZWN0PEludGVydmFsU3RhdGU+KClcbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgZ2V0IGludGVydmFsJCgpOiBPYnNlcnZhYmxlPEludGVydmFsU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJ2YWwuYXNPYnNlcnZhYmxlKClcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYW5jaG9yJCgpOiBPYnNlcnZhYmxlPEFuY2hvclN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FuY2hvci5hc09ic2VydmFibGUoKVxuICB9XG5cbiAgcHVibGljIGdldCBzbWFydFNoaWZ0JCgpOiBPYnNlcnZhYmxlPFNtYXJ0U2hpZnRTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9zbWFydFNoaWZ0LmFzT2JzZXJ2YWJsZSgpXG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVydmFsVmFsdWUoKTogSW50ZXJ2YWxTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVydmFsLmdldFZhbHVlKClcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYW5jaG9yVmFsdWUoKTogQW5jaG9yU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9hbmNob3IuZ2V0VmFsdWUoKVxuICB9XG5cbiAgcHVibGljIGdldCBzbWFydFNoaWZ0VmFsdWUoKTogU21hcnRTaGlmdFN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fc21hcnRTaGlmdC5nZXRWYWx1ZSgpXG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVydmFsQ2hhbmdlKCk6IE9ic2VydmFibGU8SW50ZXJ2YWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcnZhbENoYW5nZS5hc09ic2VydmFibGUoKVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHNldEFuY2hvcihhbmNob3I6IEFuY2hvclN0YXRlKSB7XG4gICAgdGhpcy5fYW5jaG9yLm5leHQoYW5jaG9yKVxuICB9XG5cbiAgcHVibGljIHNldEV4dGVybmFsQW5jaG9yKFRlbXBvcmFsRGF0ZVRpbWU6IFRlbXBvcmFsLlBsYWluRGF0ZVRpbWUpIHtcbiAgICBpZiAoIVRlbXBvcmFsRGF0ZVRpbWUpIHtcbiAgICAgIHRoaXMuc2V0QW5jaG9yKEFuY2hvclN0YXRlLmVtcHR5KCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5zZXRBbmNob3IoQW5jaG9yU3RhdGUuY3JlYXRlRnJvbURhdGVUaW1lKFRlbXBvcmFsRGF0ZVRpbWUpKVxuICB9XG5cbiAgcHVibGljIHNldEV4dGVybmFsSW50ZXJ2YWwoaW50ZXJ2YWw6IEludGVydmFsU3RhdGUpIHtcbiAgICBpZiAoIWludGVydmFsKSB7XG4gICAgICB0aGlzLnNldEludGVydmFsKG5ldyBJbnRlcnZhbFN0YXRlKG51bGwsIG51bGwpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghaW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMuc2V0SW50ZXJ2YWwobmV3IEludGVydmFsU3RhdGUobnVsbCwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5zZXRJbnRlcnZhbChpbnRlcnZhbClcbiAgfVxuXG4gIHB1YmxpYyBzZXRTbWFydFNoaWZ0KHNtYXJ0U2hpZnQ6IFNtYXJ0U2hpZnRTdGF0ZSkge1xuICAgIHRoaXMuX3NtYXJ0U2hpZnQubmV4dChzbWFydFNoaWZ0KVxuICB9XG5cbiAgcHVibGljIHNldEludGVydmFsKGludGVydmFsOiBJbnRlcnZhbFN0YXRlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgIWludGVydmFsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLl9pbnRlcnZhbC5nZXRWYWx1ZSgpICYmXG4gICAgICBJbnRlcnZhbFBpY2tlclV0aWwuaXNJbnRlcnZhbEVxdWFscyh0aGlzLl9pbnRlcnZhbC5nZXRWYWx1ZSgpLCBpbnRlcnZhbClcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5ld0ludGVydmFsID0gaW50ZXJ2YWwgPyBJbnRlcnZhbFBpY2tlclV0aWwuc2V0TWlsbGlzZWNvbmRzVG9aZXJvKGludGVydmFsKSA6IG51bGxcblxuICAgIHRoaXMuX2ludGVydmFsLm5leHQobmV3SW50ZXJ2YWwpXG4gICAgdGhpcy5faW50ZXJ2YWxDaGFuZ2UubmV4dChuZXdJbnRlcnZhbClcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xufVxuIl19
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWwtcGlja2VyLXN0YXRlLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL3RpbWUvZWxkZXItaW50ZXJ2YWwtcGlja2VyL21hbmFnZXIvaW50ZXJ2YWwtcGlja2VyLXN0YXRlLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBRXBELE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNELE9BQU8sV0FBVyxNQUFNLHVCQUF1QixDQUFBO0FBQy9DLE9BQU8sYUFBYSxNQUFNLHlCQUF5QixDQUFBO0FBRW5ELE9BQU8sa0JBQWtCLE1BQU0sOEJBQThCLENBQUE7QUFFN0QsTUFBTSxDQUFDLE9BQU8sT0FBTywwQkFBMEI7SUFlN0M7Ozs7Z0ZBSTRFO0lBRTVFO1FBcEJBOzs7O29GQUk0RTtRQUUzRCxRQUFHLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXBELFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBYyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUMvRCxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxDQUFBO1FBQ3BELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWtCLElBQUksQ0FBQyxDQUFBO1FBQ3hELG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQWlCLENBQUE7UUFDeEQsa0JBQWEsR0FBRyxLQUFLLENBQUE7SUFRYixDQUFDO0lBRWhCOzs7O2dGQUk0RTtJQUU1RSxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ3RDLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ3BDLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ3hDLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2xDLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2hDLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ3BDLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQzVDLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFckUsU0FBUyxDQUFDLE1BQW1CO1FBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxnQkFBd0M7UUFDL0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtZQUNuQyxPQUFNO1FBQ1IsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0lBRU0sbUJBQW1CLENBQUMsUUFBdUI7UUFDaEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUMvQyxPQUFNO1FBQ1IsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDL0MsT0FBTTtRQUNSLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFFTSxhQUFhLENBQUMsVUFBMkI7UUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxRQUF1QjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLE9BQU07UUFDUixDQUFDO1FBRUQsSUFDRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtZQUN6QixrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUN4RSxDQUFDO1lBQ0QsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFFeEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDeEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9nZ2VyRmFjdG9yeSB9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJ1xuaW1wb3J0IHsgVGVtcG9yYWwgfSBmcm9tICdAanMtdGVtcG9yYWwvcG9seWZpbGwnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IEFuY2hvclN0YXRlIGZyb20gJy4uL21vZGVsL2FuY2hvci1zdGF0ZSdcbmltcG9ydCBJbnRlcnZhbFN0YXRlIGZyb20gJy4uL21vZGVsL2ludGVydmFsLXN0YXRlJ1xuaW1wb3J0IFNtYXJ0U2hpZnRTdGF0ZSBmcm9tICcuLi9tb2RlbC9zbWFydC1zaGlmdC1zdGF0ZSdcbmltcG9ydCBJbnRlcnZhbFBpY2tlclV0aWwgZnJvbSAnLi4vdXRpbC9pbnRlcnZhbC1waWNrZXItdXRpbCdcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW50ZXJ2YWxQaWNrZXJTdGF0ZU1hbmFnZXIge1xuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMuY29uc3RydWN0b3IubmFtZSlcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hbmNob3IgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFuY2hvclN0YXRlPihBbmNob3JTdGF0ZS5lbXB0eSgpKVxuICBwcml2YXRlIHJlYWRvbmx5IF9pbnRlcnZhbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SW50ZXJ2YWxTdGF0ZT4obnVsbClcbiAgcHJpdmF0ZSByZWFkb25seSBfc21hcnRTaGlmdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U21hcnRTaGlmdFN0YXRlPihudWxsKVxuICBwcml2YXRlIHJlYWRvbmx5IF9pbnRlcnZhbENoYW5nZSA9IG5ldyBTdWJqZWN0PEludGVydmFsU3RhdGU+KClcbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgZ2V0IGludGVydmFsJCgpOiBPYnNlcnZhYmxlPEludGVydmFsU3RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJ2YWwuYXNPYnNlcnZhYmxlKClcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYW5jaG9yJCgpOiBPYnNlcnZhYmxlPEFuY2hvclN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FuY2hvci5hc09ic2VydmFibGUoKVxuICB9XG5cbiAgcHVibGljIGdldCBzbWFydFNoaWZ0JCgpOiBPYnNlcnZhYmxlPFNtYXJ0U2hpZnRTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9zbWFydFNoaWZ0LmFzT2JzZXJ2YWJsZSgpXG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVydmFsVmFsdWUoKTogSW50ZXJ2YWxTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVydmFsLmdldFZhbHVlKClcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYW5jaG9yVmFsdWUoKTogQW5jaG9yU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9hbmNob3IuZ2V0VmFsdWUoKVxuICB9XG5cbiAgcHVibGljIGdldCBzbWFydFNoaWZ0VmFsdWUoKTogU21hcnRTaGlmdFN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5fc21hcnRTaGlmdC5nZXRWYWx1ZSgpXG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVydmFsQ2hhbmdlKCk6IE9ic2VydmFibGU8SW50ZXJ2YWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcnZhbENoYW5nZS5hc09ic2VydmFibGUoKVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHNldEFuY2hvcihhbmNob3I6IEFuY2hvclN0YXRlKTogdm9pZCB7XG4gICAgdGhpcy5fYW5jaG9yLm5leHQoYW5jaG9yKVxuICB9XG5cbiAgcHVibGljIHNldEV4dGVybmFsQW5jaG9yKFRlbXBvcmFsRGF0ZVRpbWU6IFRlbXBvcmFsLlBsYWluRGF0ZVRpbWUpOiB2b2lkIHtcbiAgICBpZiAoIVRlbXBvcmFsRGF0ZVRpbWUpIHtcbiAgICAgIHRoaXMuc2V0QW5jaG9yKEFuY2hvclN0YXRlLmVtcHR5KCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5zZXRBbmNob3IoQW5jaG9yU3RhdGUuY3JlYXRlRnJvbURhdGVUaW1lKFRlbXBvcmFsRGF0ZVRpbWUpKVxuICB9XG5cbiAgcHVibGljIHNldEV4dGVybmFsSW50ZXJ2YWwoaW50ZXJ2YWw6IEludGVydmFsU3RhdGUpOiB2b2lkIHtcbiAgICBpZiAoIWludGVydmFsKSB7XG4gICAgICB0aGlzLnNldEludGVydmFsKG5ldyBJbnRlcnZhbFN0YXRlKG51bGwsIG51bGwpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghaW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMuc2V0SW50ZXJ2YWwobmV3IEludGVydmFsU3RhdGUobnVsbCwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5zZXRJbnRlcnZhbChpbnRlcnZhbClcbiAgfVxuXG4gIHB1YmxpYyBzZXRTbWFydFNoaWZ0KHNtYXJ0U2hpZnQ6IFNtYXJ0U2hpZnRTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuX3NtYXJ0U2hpZnQubmV4dChzbWFydFNoaWZ0KVxuICB9XG5cbiAgcHVibGljIHNldEludGVydmFsKGludGVydmFsOiBJbnRlcnZhbFN0YXRlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgIWludGVydmFsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLl9pbnRlcnZhbC5nZXRWYWx1ZSgpICYmXG4gICAgICBJbnRlcnZhbFBpY2tlclV0aWwuaXNJbnRlcnZhbEVxdWFscyh0aGlzLl9pbnRlcnZhbC5nZXRWYWx1ZSgpLCBpbnRlcnZhbClcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5ld0ludGVydmFsID0gaW50ZXJ2YWwgPyBJbnRlcnZhbFBpY2tlclV0aWwuc2V0TWlsbGlzZWNvbmRzVG9aZXJvKGludGVydmFsKSA6IG51bGxcblxuICAgIHRoaXMuX2ludGVydmFsLm5leHQobmV3SW50ZXJ2YWwpXG4gICAgdGhpcy5faW50ZXJ2YWxDaGFuZ2UubmV4dChuZXdJbnRlcnZhbClcbiAgfVxufVxuIl19
@@ -191,4 +191,4 @@ export default class IntervalPickerUtil {
191
191
  calendarEnd.updateTodaysDate();
192
192
  }
193
193
  }
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWwtcGlja2VyLXV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL3RpbWUvZWxkZXItaW50ZXJ2YWwtcGlja2VyL3V0aWwvaW50ZXJ2YWwtcGlja2VyLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUE7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVELE9BQU8sYUFBYSxNQUFNLHlCQUF5QixDQUFBO0FBRW5ELE1BQU0sQ0FBQyxPQUFPLE9BQU8sa0JBQWtCO0lBQzlCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxhQUE0QjtRQUM1RCxJQUFJLFlBQXFCLENBQUE7UUFDekIsSUFBSSxVQUFtQixDQUFBO1FBRXZCLElBQUksQ0FBQztZQUNILE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDNUYsWUFBWSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDbEQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxZQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ3JCLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsMEJBQTBCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQ3hGLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzlDLENBQUM7UUFB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QUFDO1lBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixXQUFXLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUMzRSxDQUFDO1FBQ0gsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ1AsQ0FBQztJQUVNLE1BQU0sQ0FBQywwQkFBMEIsQ0FDdEMsYUFBNEMsRUFDNUMsV0FBMEM7UUFFMUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25DLE9BQU07UUFDUixDQUFDO1FBRUQsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUE7UUFDaEMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUE7SUFDaEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWF0Q2FsZW5kYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJ1xuaW1wb3J0IHsgSW5zdGFudCB9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnXG5pbXBvcnQgeyBUZW1wb3JhbCB9IGZyb20gJ0Bqcy10ZW1wb3JhbC9wb2x5ZmlsbCdcbmltcG9ydCB7IEludGVydmFsIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL3RpbWUvaW50ZXJ2YWwnXG5pbXBvcnQgeyBUZW1wb3JhbFV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vdGltZS90ZW1wb3JhbC11dGlsJ1xuaW1wb3J0IHsgVGltZVV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vdGltZS90aW1lLXV0aWwnXG5pbXBvcnQgSW50ZXJ2YWxTdGF0ZSBmcm9tICcuLi9tb2RlbC9pbnRlcnZhbC1zdGF0ZSdcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW50ZXJ2YWxQaWNrZXJVdGlsIHtcbiAgcHVibGljIHN0YXRpYyBjcmVhdGVFbGRlckludGVydmFsKGludGVydmFsU3RhdGU6IEludGVydmFsU3RhdGUpIHtcbiAgICBsZXQgc3RhcnRJbnN0YW50OiBJbnN0YW50XG4gICAgbGV0IGVuZEluc3RhbnQ6IEluc3RhbnRcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydERhdGVUaW1lSlMgPSBUZW1wb3JhbFV0aWwuZ2V0SlNEYXRlRnJvbVBsYWluRGF0ZVRpbWUoaW50ZXJ2YWxTdGF0ZS5zdGFydERhdGVUaW1lKVxuICAgICAgc3RhcnRJbnN0YW50ID0gVGltZVV0aWwuaW5zdGFudChzdGFydERhdGVUaW1lSlMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc3RhcnRJbnN0YW50ID0gbnVsbFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbmREYXRlVGltZUpTID0gVGVtcG9yYWxVdGlsLmdldEpTRGF0ZUZyb21QbGFpbkRhdGVUaW1lKGludGVydmFsU3RhdGUuZW5kRGF0ZVRpbWUpXG4gICAgICBlbmRJbnN0YW50ID0gVGltZVV0aWwuaW5zdGFudChlbmREYXRlVGltZUpTKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVuZEluc3RhbnQgPSBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbnRlcnZhbChzdGFydEluc3RhbnQsIGVuZEluc3RhbnQpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRyYW5zZm9ybVRvSW50ZXJ2YWxTdGF0ZShpbnRlcnZhbDogSW50ZXJ2YWwpOiBJbnRlcnZhbFN0YXRlIHtcbiAgICBpZiAoIWludGVydmFsKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RGF0ZVRpbWVKUyA9IGludGVydmFsLnN0YXJ0ID8gVGltZVV0aWwuZGF0ZShpbnRlcnZhbC5zdGFydCkgOiBudWxsXG4gICAgY29uc3QgZW5kRGF0ZVRpbWVKUyA9IGludGVydmFsLmVuZCA/IFRpbWVVdGlsLmRhdGUoaW50ZXJ2YWwuZW5kKSA6IG51bGxcblxuICAgIGxldCBzdGFydERhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZSA9IG51bGxcbiAgICBsZXQgZW5kRGF0ZTogVGVtcG9yYWwuUGxhaW5EYXRlID0gbnVsbFxuICAgIGxldCBzdGFydFRpbWU6IFRlbXBvcmFsLlBsYWluVGltZSA9IG51bGxcbiAgICBsZXQgZW5kVGltZTogVGVtcG9yYWwuUGxhaW5UaW1lID0gbnVsbFxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBUZW1wb3JhbFV0aWwuZ2V0UGxhaW5EYXRlVGltZUZyb21KU0RhdGUoc3RhcnREYXRlVGltZUpTKVxuICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlVGltZS50b1BsYWluRGF0ZSgpXG4gICAgICBzdGFydFRpbWUgPSBzdGFydERhdGVUaW1lLnRvUGxhaW5UaW1lKClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzdGFydERhdGUgPSBudWxsXG4gICAgICBzdGFydFRpbWUgPSBudWxsXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVuZERhdGVUaW1lID0gVGVtcG9yYWxVdGlsLmdldFBsYWluRGF0ZVRpbWVGcm9tSlNEYXRlKGVuZERhdGVUaW1lSlMpXG4gICAgICBlbmREYXRlID0gZW5kRGF0ZVRpbWUudG9QbGFpbkRhdGUoKVxuICAgICAgZW5kVGltZSA9IGVuZERhdGVUaW1lLnRvUGxhaW5UaW1lKClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlbmREYXRlID0gbnVsbFxuICAgICAgZW5kVGltZSA9IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEludGVydmFsU3RhdGUoc3RhcnREYXRlLCBlbmREYXRlLCBzdGFydFRpbWUsIGVuZFRpbWUpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVRlbXBvcmFsRGF0ZVRpbWUoXG4gICAgZGF0ZTogVGVtcG9yYWwuUGxhaW5EYXRlLFxuICAgIHRpbWU6IFRlbXBvcmFsLlBsYWluVGltZVxuICApOiBUZW1wb3JhbC5QbGFpbkRhdGVUaW1lIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIFRlbXBvcmFsLlBsYWluRGF0ZVRpbWUuZnJvbSh7XG4gICAgICB5ZWFyOiBkYXRlLnllYXIsXG4gICAgICBtb250aDogZGF0ZS5tb250aCxcbiAgICAgIGRheTogZGF0ZS5kYXksXG4gICAgICBob3VyOiB0aW1lLmhvdXIsXG4gICAgICBtaW51dGU6IHRpbWUubWludXRlLFxuICAgICAgc2Vjb25kOiB0aW1lLnNlY29uZCxcbiAgICAgIG1pbGxpc2Vjb25kOiB0aW1lLm1pbGxpc2Vjb25kLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzSW50ZXJ2YWxFcXVhbHMoaW50ZXJ2YWwxOiBJbnRlcnZhbFN0YXRlLCBpbnRlcnZhbDI6IEludGVydmFsU3RhdGUpOiBib29sZWFuIHtcbiAgICBpZiAoIWludGVydmFsMSAmJiAhaW50ZXJ2YWwyKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICghaW50ZXJ2YWwxIHx8ICFpbnRlcnZhbDIpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzRXF1YWxzKGludGVydmFsMS5zdGFydERhdGUsIGludGVydmFsMi5zdGFydERhdGUpICYmXG4gICAgICB0aGlzLmlzRXF1YWxzKGludGVydmFsMS5lbmREYXRlLCBpbnRlcnZhbDIuZW5kRGF0ZSkgJiZcbiAgICAgIHRoaXMuaXNFcXVhbHMoaW50ZXJ2YWwxLnN0YXJ0VGltZSwgaW50ZXJ2YWwyLnN0YXJ0VGltZSkgJiZcbiAgICAgIHRoaXMuaXNFcXVhbHMoaW50ZXJ2YWwxLmVuZFRpbWUsIGludGVydmFsMi5lbmRUaW1lKVxuICAgIClcbiAgfVxuXG4gIHN0YXRpYyBpc0VxdWFscyhcbiAgICB4OiBUZW1wb3JhbC5QbGFpbkRhdGUgfCBUZW1wb3JhbC5QbGFpblRpbWUgfCBUZW1wb3JhbC5QbGFpbkRhdGVUaW1lLFxuICAgIHk6IFRlbXBvcmFsLlBsYWluRGF0ZSB8IFRlbXBvcmFsLlBsYWluVGltZSB8IFRlbXBvcmFsLlBsYWluRGF0ZVRpbWVcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCF4ICYmICF5KSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmICgheCB8fCAheSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmV0dXJuIHguZXF1YWxzKHkpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzSW50ZXJ2YWxXaXRoU3RhcnRBbmRFbmQoaW50ZXJ2YWw6IEludGVydmFsU3RhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFpbnRlcnZhbD8uc3RhcnREYXRlICYmICEhaW50ZXJ2YWw/LmVuZERhdGVcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNPcGVuSW50ZXJ2YWwoaW50ZXJ2YWw6IEludGVydmFsU3RhdGUpOiBib29sZWFuIHtcbiAgICBpZiAoIWludGVydmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgICghIWludGVydmFsLnN0YXJ0RGF0ZSAmJiAhaW50ZXJ2YWwuZW5kRGF0ZSkgfHwgKCFpbnRlcnZhbC5zdGFydERhdGUgJiYgISFpbnRlcnZhbC5lbmREYXRlKVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RGVsdGFIdW1hblJlYWRhYmxlKGludGVydmFsOiBJbnRlcnZhbFN0YXRlKTogc3RyaW5nIHtcbiAgICBpZiAoSW50ZXJ2YWxQaWNrZXJVdGlsLmlzT3BlbkludGVydmFsKGludGVydmFsKSkge1xuICAgICAgcmV0dXJuICfiiJ4nXG4gICAgfVxuXG4gICAgaWYgKCFJbnRlcnZhbFBpY2tlclV0aWwuaXNJbnRlcnZhbFdpdGhTdGFydEFuZEVuZChpbnRlcnZhbCkpIHtcbiAgICAgIHJldHVybiAnLSdcbiAgICB9XG5cbiAgICBjb25zdCBkdXJhdGlvbiA9IGludGVydmFsLnN0YXJ0RGF0ZVRpbWUudW50aWwoaW50ZXJ2YWwuZW5kRGF0ZVRpbWUpXG5cbiAgICBjb25zdCB0bXAgPSBbXVxuICAgIGlmIChkdXJhdGlvbi5kYXlzKSB7XG4gICAgICB0bXAucHVzaChgJHtkdXJhdGlvbi5kYXlzfWRgKVxuICAgIH1cbiAgICBpZiAoZHVyYXRpb24uaG91cnMpIHtcbiAgICAgIHRtcC5wdXNoKGAke2R1cmF0aW9uLmhvdXJzfWhgKVxuICAgIH1cbiAgICBpZiAoZHVyYXRpb24ubWludXRlcykge1xuICAgICAgdG1wLnB1c2goYCR7ZHVyYXRpb24ubWludXRlc31taW5gKVxuICAgIH1cbiAgICBpZiAoZHVyYXRpb24uc2Vjb25kcykge1xuICAgICAgdG1wLnB1c2goYCR7ZHVyYXRpb24uc2Vjb25kc31zYClcbiAgICB9XG5cbiAgICBpZiAoIXRtcC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAnMHMnXG4gICAgfVxuXG4gICAgcmV0dXJuIHRtcC5qb2luKCcsICcpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldFNtYXJ0U2hpZnRNZXNzYWdlKG1vZGU6IHN0cmluZywgZGF0ZUludGVydmFsOiBJbnRlcnZhbFN0YXRlKTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdGVJbnRlcnZhbCkge1xuICAgICAgcmV0dXJuICctJ1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGRhdGVJbnRlcnZhbC5zdGFydERhdGVcbiAgICBjb25zdCBlbmREYXRlID0gZGF0ZUludGVydmFsLmVuZERhdGVcblxuICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgY2FzZSAneWVhcnMnOlxuICAgICAgICByZXR1cm4gYDF5ICgke3N0YXJ0RGF0ZS55ZWFyfSlgXG4gICAgICBjYXNlICdxdWFydGVycyc6XG4gICAgICAgIHJldHVybiBgUSR7VGVtcG9yYWxVdGlsLmdldFF1YXJ0ZXJGb3JEYXRlKHN0YXJ0RGF0ZSl9LCAke3N0YXJ0RGF0ZS55ZWFyfWBcbiAgICAgIGNhc2UgJ21vbnRocyc6XG4gICAgICAgIHJldHVybiBgMW0gKCR7c3RhcnREYXRlLm1vbnRoQ29kZX0sICR7c3RhcnREYXRlLnllYXJ9KWBcbiAgICAgIGNhc2UgJ3dlZWtzJzpcbiAgICAgICAgcmV0dXJuIGAxdyAoQ1cgJHtzdGFydERhdGUud2Vla09mWWVhcn0sICR7ZW5kRGF0ZS55ZWFyfSlgXG4gICAgICBjYXNlICdkYXlzJzpcbiAgICAgICAgcmV0dXJuIGAke3N0YXJ0RGF0ZS51bnRpbChlbmREYXRlKS5kYXlzfWRgXG4gICAgICBjYXNlICd0aW1lJzpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZ2V0RGVsdGFIdW1hblJlYWRhYmxlKGRhdGVJbnRlcnZhbCl9YFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGAke3N0YXJ0RGF0ZS51bnRpbChlbmREYXRlKS5kYXlzfWRgXG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc1RpbWVTZXRBbmROb3RNaWRuaWdodCh0aW1lOiBUZW1wb3JhbC5QbGFpblRpbWUpOiBib29sZWFuIHtcbiAgICBpZiAoIXRpbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBpZiAodGltZS5ob3VyID09PSAwICYmIHRpbWUubWludXRlID09PSAwICYmIHRpbWUuc2Vjb25kID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc2V0TWlsbGlzZWNvbmRzVG9aZXJvKGludGVydmFsOiBJbnRlcnZhbFN0YXRlKTogSW50ZXJ2YWxTdGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcnZhbFN0YXRlKFxuICAgICAgaW50ZXJ2YWwuc3RhcnREYXRlLFxuICAgICAgaW50ZXJ2YWwuZW5kRGF0ZSxcbiAgICAgIGludGVydmFsLnN0YXJ0VGltZS53aXRoKHsgbWlsbGlzZWNvbmQ6IDAsIG1pY3Jvc2Vjb25kOiAwLCBuYW5vc2Vjb25kOiAwIH0pLFxuICAgICAgaW50ZXJ2YWwuZW5kVGltZS53aXRoKHsgbWlsbGlzZWNvbmQ6IDAsIG1pY3Jvc2Vjb25kOiAwLCBuYW5vc2Vjb25kOiAwIH0pXG4gICAgKVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyByb3VuZFVwVG9TZWNvbmRzPFQgZXh0ZW5kcyBUZW1wb3JhbC5QbGFpblRpbWUgfCBUZW1wb3JhbC5QbGFpbkRhdGVUaW1lPihcbiAgICB0aW1lOiBUXG4gICk6IFQge1xuICAgIHJldHVybiB0aW1lLndpdGgoe1xuICAgICAgc2Vjb25kOiB0aW1lLnNlY29uZCArIDEsXG4gICAgICBtaWxsaXNlY29uZDogMCxcbiAgICAgIG1pY3Jvc2Vjb25kOiAwLFxuICAgICAgbmFub3NlY29uZDogMCxcbiAgICB9KSBhcyBUXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHVwZGF0ZU1hdENhbGVuZGFyQWN0aXZlRGF0ZShcbiAgICBjYWxlbmRhclN0YXJ0OiBNYXRDYWxlbmRhcjxEYXRlPiB8IHVuZGVmaW5lZCxcbiAgICBjYWxlbmRhckVuZDogTWF0Q2FsZW5kYXI8RGF0ZT4gfCB1bmRlZmluZWQsXG4gICAgc3RhcnREYXRlOiBUZW1wb3JhbC5QbGFpbkRhdGUsXG4gICAgZW5kRGF0ZTogVGVtcG9yYWwuUGxhaW5EYXRlXG4gICkge1xuICAgIGlmICghY2FsZW5kYXJTdGFydCB8fCAhY2FsZW5kYXJFbmQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghc3RhcnREYXRlICYmICFlbmREYXRlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIHRpbWVvdXQgaXMgbmVlZGVkIHRvIHJ1biBjYWxlbmRhciB1cGRhdGUgbGFzdCwgb3RoZXJ3aXNlIHRoZXJlIGFyZSBpc3N1ZXNcbiAgICAgIGlmIChzdGFydERhdGUpIHtcbiAgICAgICAgY2FsZW5kYXJTdGFydC5hY3RpdmVEYXRlID0gVGVtcG9yYWxVdGlsLmdldEpTRGF0ZUZyb21QbGFpbkRhdGVUaW1lKHN0YXJ0RGF0ZSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVuZERhdGUpIHtcbiAgICAgICAgY2FsZW5kYXJFbmQuYWN0aXZlRGF0ZSA9IFRlbXBvcmFsVXRpbC5nZXRKU0RhdGVGcm9tUGxhaW5EYXRlVGltZShlbmREYXRlKVxuICAgICAgfVxuICAgIH0sIDApXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHVwZGF0ZU1hdENhbGVuZGFyVG9kYXlEYXRlKFxuICAgIGNhbGVuZGFyU3RhcnQ6IE1hdENhbGVuZGFyPERhdGU+IHwgdW5kZWZpbmVkLFxuICAgIGNhbGVuZGFyRW5kOiBNYXRDYWxlbmRhcjxEYXRlPiB8IHVuZGVmaW5lZFxuICApOiB2b2lkIHtcbiAgICBpZiAoIWNhbGVuZGFyU3RhcnQgfHwgIWNhbGVuZGFyRW5kKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjYWxlbmRhclN0YXJ0LnVwZGF0ZVRvZGF5c0RhdGUoKVxuICAgIGNhbGVuZGFyRW5kLnVwZGF0ZVRvZGF5c0RhdGUoKVxuICB9XG59XG4iXX0=
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2YWwtcGlja2VyLXV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL3RpbWUvZWxkZXItaW50ZXJ2YWwtcGlja2VyL3V0aWwvaW50ZXJ2YWwtcGlja2VyLXV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUE7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVELE9BQU8sYUFBYSxNQUFNLHlCQUF5QixDQUFBO0FBRW5ELE1BQU0sQ0FBQyxPQUFPLE9BQU8sa0JBQWtCO0lBQzlCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxhQUE0QjtRQUM1RCxJQUFJLFlBQXFCLENBQUE7UUFDekIsSUFBSSxVQUFtQixDQUFBO1FBRXZCLElBQUksQ0FBQztZQUNILE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDNUYsWUFBWSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDbEQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxZQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ3JCLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsMEJBQTBCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQ3hGLFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzlDLENBQUM7UUFB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QUFDO1lBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixXQUFXLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUMzRSxDQUFDO1FBQ0gsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ1AsQ0FBQztJQUVNLE1BQU0sQ0FBQywwQkFBMEIsQ0FDdEMsYUFBNEMsRUFDNUMsV0FBMEM7UUFFMUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25DLE9BQU07UUFDUixDQUFDO1FBRUQsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUE7UUFDaEMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUE7SUFDaEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWF0Q2FsZW5kYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJ1xuaW1wb3J0IHsgSW5zdGFudCB9IGZyb20gJ0Bqcy1qb2RhL2NvcmUnXG5pbXBvcnQgeyBUZW1wb3JhbCB9IGZyb20gJ0Bqcy10ZW1wb3JhbC9wb2x5ZmlsbCdcbmltcG9ydCB7IEludGVydmFsIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL3RpbWUvaW50ZXJ2YWwnXG5pbXBvcnQgeyBUZW1wb3JhbFV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vdGltZS90ZW1wb3JhbC11dGlsJ1xuaW1wb3J0IHsgVGltZVV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vdGltZS90aW1lLXV0aWwnXG5pbXBvcnQgSW50ZXJ2YWxTdGF0ZSBmcm9tICcuLi9tb2RlbC9pbnRlcnZhbC1zdGF0ZSdcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW50ZXJ2YWxQaWNrZXJVdGlsIHtcbiAgcHVibGljIHN0YXRpYyBjcmVhdGVFbGRlckludGVydmFsKGludGVydmFsU3RhdGU6IEludGVydmFsU3RhdGUpOiBJbnRlcnZhbCB7XG4gICAgbGV0IHN0YXJ0SW5zdGFudDogSW5zdGFudFxuICAgIGxldCBlbmRJbnN0YW50OiBJbnN0YW50XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhcnREYXRlVGltZUpTID0gVGVtcG9yYWxVdGlsLmdldEpTRGF0ZUZyb21QbGFpbkRhdGVUaW1lKGludGVydmFsU3RhdGUuc3RhcnREYXRlVGltZSlcbiAgICAgIHN0YXJ0SW5zdGFudCA9IFRpbWVVdGlsLmluc3RhbnQoc3RhcnREYXRlVGltZUpTKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHN0YXJ0SW5zdGFudCA9IG51bGxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZW5kRGF0ZVRpbWVKUyA9IFRlbXBvcmFsVXRpbC5nZXRKU0RhdGVGcm9tUGxhaW5EYXRlVGltZShpbnRlcnZhbFN0YXRlLmVuZERhdGVUaW1lKVxuICAgICAgZW5kSW5zdGFudCA9IFRpbWVVdGlsLmluc3RhbnQoZW5kRGF0ZVRpbWVKUylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlbmRJbnN0YW50ID0gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW50ZXJ2YWwoc3RhcnRJbnN0YW50LCBlbmRJbnN0YW50KVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyB0cmFuc2Zvcm1Ub0ludGVydmFsU3RhdGUoaW50ZXJ2YWw6IEludGVydmFsKTogSW50ZXJ2YWxTdGF0ZSB7XG4gICAgaWYgKCFpbnRlcnZhbCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydERhdGVUaW1lSlMgPSBpbnRlcnZhbC5zdGFydCA/IFRpbWVVdGlsLmRhdGUoaW50ZXJ2YWwuc3RhcnQpIDogbnVsbFxuICAgIGNvbnN0IGVuZERhdGVUaW1lSlMgPSBpbnRlcnZhbC5lbmQgPyBUaW1lVXRpbC5kYXRlKGludGVydmFsLmVuZCkgOiBudWxsXG5cbiAgICBsZXQgc3RhcnREYXRlOiBUZW1wb3JhbC5QbGFpbkRhdGUgPSBudWxsXG4gICAgbGV0IGVuZERhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZSA9IG51bGxcbiAgICBsZXQgc3RhcnRUaW1lOiBUZW1wb3JhbC5QbGFpblRpbWUgPSBudWxsXG4gICAgbGV0IGVuZFRpbWU6IFRlbXBvcmFsLlBsYWluVGltZSA9IG51bGxcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydERhdGVUaW1lID0gVGVtcG9yYWxVdGlsLmdldFBsYWluRGF0ZVRpbWVGcm9tSlNEYXRlKHN0YXJ0RGF0ZVRpbWVKUylcbiAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZVRpbWUudG9QbGFpbkRhdGUoKVxuICAgICAgc3RhcnRUaW1lID0gc3RhcnREYXRlVGltZS50b1BsYWluVGltZSgpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc3RhcnREYXRlID0gbnVsbFxuICAgICAgc3RhcnRUaW1lID0gbnVsbFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbmREYXRlVGltZSA9IFRlbXBvcmFsVXRpbC5nZXRQbGFpbkRhdGVUaW1lRnJvbUpTRGF0ZShlbmREYXRlVGltZUpTKVxuICAgICAgZW5kRGF0ZSA9IGVuZERhdGVUaW1lLnRvUGxhaW5EYXRlKClcbiAgICAgIGVuZFRpbWUgPSBlbmREYXRlVGltZS50b1BsYWluVGltZSgpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZW5kRGF0ZSA9IG51bGxcbiAgICAgIGVuZFRpbWUgPSBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbnRlcnZhbFN0YXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgc3RhcnRUaW1lLCBlbmRUaW1lKVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVUZW1wb3JhbERhdGVUaW1lKFxuICAgIGRhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZSxcbiAgICB0aW1lOiBUZW1wb3JhbC5QbGFpblRpbWVcbiAgKTogVGVtcG9yYWwuUGxhaW5EYXRlVGltZSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiBUZW1wb3JhbC5QbGFpbkRhdGVUaW1lLmZyb20oe1xuICAgICAgeWVhcjogZGF0ZS55ZWFyLFxuICAgICAgbW9udGg6IGRhdGUubW9udGgsXG4gICAgICBkYXk6IGRhdGUuZGF5LFxuICAgICAgaG91cjogdGltZS5ob3VyLFxuICAgICAgbWludXRlOiB0aW1lLm1pbnV0ZSxcbiAgICAgIHNlY29uZDogdGltZS5zZWNvbmQsXG4gICAgICBtaWxsaXNlY29uZDogdGltZS5taWxsaXNlY29uZCxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0ludGVydmFsRXF1YWxzKGludGVydmFsMTogSW50ZXJ2YWxTdGF0ZSwgaW50ZXJ2YWwyOiBJbnRlcnZhbFN0YXRlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpbnRlcnZhbDEgJiYgIWludGVydmFsMikge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAoIWludGVydmFsMSB8fCAhaW50ZXJ2YWwyKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc0VxdWFscyhpbnRlcnZhbDEuc3RhcnREYXRlLCBpbnRlcnZhbDIuc3RhcnREYXRlKSAmJlxuICAgICAgdGhpcy5pc0VxdWFscyhpbnRlcnZhbDEuZW5kRGF0ZSwgaW50ZXJ2YWwyLmVuZERhdGUpICYmXG4gICAgICB0aGlzLmlzRXF1YWxzKGludGVydmFsMS5zdGFydFRpbWUsIGludGVydmFsMi5zdGFydFRpbWUpICYmXG4gICAgICB0aGlzLmlzRXF1YWxzKGludGVydmFsMS5lbmRUaW1lLCBpbnRlcnZhbDIuZW5kVGltZSlcbiAgICApXG4gIH1cblxuICBzdGF0aWMgaXNFcXVhbHMoXG4gICAgeDogVGVtcG9yYWwuUGxhaW5EYXRlIHwgVGVtcG9yYWwuUGxhaW5UaW1lIHwgVGVtcG9yYWwuUGxhaW5EYXRlVGltZSxcbiAgICB5OiBUZW1wb3JhbC5QbGFpbkRhdGUgfCBUZW1wb3JhbC5QbGFpblRpbWUgfCBUZW1wb3JhbC5QbGFpbkRhdGVUaW1lXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICgheCAmJiAheSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAoIXggfHwgIXkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB4LmVxdWFscyh5KVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0ludGVydmFsV2l0aFN0YXJ0QW5kRW5kKGludGVydmFsOiBJbnRlcnZhbFN0YXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhaW50ZXJ2YWw/LnN0YXJ0RGF0ZSAmJiAhIWludGVydmFsPy5lbmREYXRlXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzT3BlbkludGVydmFsKGludGVydmFsOiBJbnRlcnZhbFN0YXRlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpbnRlcnZhbCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICAoISFpbnRlcnZhbC5zdGFydERhdGUgJiYgIWludGVydmFsLmVuZERhdGUpIHx8ICghaW50ZXJ2YWwuc3RhcnREYXRlICYmICEhaW50ZXJ2YWwuZW5kRGF0ZSlcbiAgICApXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldERlbHRhSHVtYW5SZWFkYWJsZShpbnRlcnZhbDogSW50ZXJ2YWxTdGF0ZSk6IHN0cmluZyB7XG4gICAgaWYgKEludGVydmFsUGlja2VyVXRpbC5pc09wZW5JbnRlcnZhbChpbnRlcnZhbCkpIHtcbiAgICAgIHJldHVybiAn4oieJ1xuICAgIH1cblxuICAgIGlmICghSW50ZXJ2YWxQaWNrZXJVdGlsLmlzSW50ZXJ2YWxXaXRoU3RhcnRBbmRFbmQoaW50ZXJ2YWwpKSB7XG4gICAgICByZXR1cm4gJy0nXG4gICAgfVxuXG4gICAgY29uc3QgZHVyYXRpb24gPSBpbnRlcnZhbC5zdGFydERhdGVUaW1lLnVudGlsKGludGVydmFsLmVuZERhdGVUaW1lKVxuXG4gICAgY29uc3QgdG1wID0gW11cbiAgICBpZiAoZHVyYXRpb24uZGF5cykge1xuICAgICAgdG1wLnB1c2goYCR7ZHVyYXRpb24uZGF5c31kYClcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uLmhvdXJzKSB7XG4gICAgICB0bXAucHVzaChgJHtkdXJhdGlvbi5ob3Vyc31oYClcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uLm1pbnV0ZXMpIHtcbiAgICAgIHRtcC5wdXNoKGAke2R1cmF0aW9uLm1pbnV0ZXN9bWluYClcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uLnNlY29uZHMpIHtcbiAgICAgIHRtcC5wdXNoKGAke2R1cmF0aW9uLnNlY29uZHN9c2ApXG4gICAgfVxuXG4gICAgaWYgKCF0bXAubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJzBzJ1xuICAgIH1cblxuICAgIHJldHVybiB0bXAuam9pbignLCAnKVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRTbWFydFNoaWZ0TWVzc2FnZShtb2RlOiBzdHJpbmcsIGRhdGVJbnRlcnZhbDogSW50ZXJ2YWxTdGF0ZSk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlSW50ZXJ2YWwpIHtcbiAgICAgIHJldHVybiAnLSdcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydERhdGUgPSBkYXRlSW50ZXJ2YWwuc3RhcnREYXRlXG4gICAgY29uc3QgZW5kRGF0ZSA9IGRhdGVJbnRlcnZhbC5lbmREYXRlXG5cbiAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgIGNhc2UgJ3llYXJzJzpcbiAgICAgICAgcmV0dXJuIGAxeSAoJHtzdGFydERhdGUueWVhcn0pYFxuICAgICAgY2FzZSAncXVhcnRlcnMnOlxuICAgICAgICByZXR1cm4gYFEke1RlbXBvcmFsVXRpbC5nZXRRdWFydGVyRm9yRGF0ZShzdGFydERhdGUpfSwgJHtzdGFydERhdGUueWVhcn1gXG4gICAgICBjYXNlICdtb250aHMnOlxuICAgICAgICByZXR1cm4gYDFtICgke3N0YXJ0RGF0ZS5tb250aENvZGV9LCAke3N0YXJ0RGF0ZS55ZWFyfSlgXG4gICAgICBjYXNlICd3ZWVrcyc6XG4gICAgICAgIHJldHVybiBgMXcgKENXICR7c3RhcnREYXRlLndlZWtPZlllYXJ9LCAke2VuZERhdGUueWVhcn0pYFxuICAgICAgY2FzZSAnZGF5cyc6XG4gICAgICAgIHJldHVybiBgJHtzdGFydERhdGUudW50aWwoZW5kRGF0ZSkuZGF5c31kYFxuICAgICAgY2FzZSAndGltZSc6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmdldERlbHRhSHVtYW5SZWFkYWJsZShkYXRlSW50ZXJ2YWwpfWBcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBgJHtzdGFydERhdGUudW50aWwoZW5kRGF0ZSkuZGF5c31kYFxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNUaW1lU2V0QW5kTm90TWlkbmlnaHQodGltZTogVGVtcG9yYWwuUGxhaW5UaW1lKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYgKHRpbWUuaG91ciA9PT0gMCAmJiB0aW1lLm1pbnV0ZSA9PT0gMCAmJiB0aW1lLnNlY29uZCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHNldE1pbGxpc2Vjb25kc1RvWmVybyhpbnRlcnZhbDogSW50ZXJ2YWxTdGF0ZSk6IEludGVydmFsU3RhdGUge1xuICAgIHJldHVybiBuZXcgSW50ZXJ2YWxTdGF0ZShcbiAgICAgIGludGVydmFsLnN0YXJ0RGF0ZSxcbiAgICAgIGludGVydmFsLmVuZERhdGUsXG4gICAgICBpbnRlcnZhbC5zdGFydFRpbWUud2l0aCh7IG1pbGxpc2Vjb25kOiAwLCBtaWNyb3NlY29uZDogMCwgbmFub3NlY29uZDogMCB9KSxcbiAgICAgIGludGVydmFsLmVuZFRpbWUud2l0aCh7IG1pbGxpc2Vjb25kOiAwLCBtaWNyb3NlY29uZDogMCwgbmFub3NlY29uZDogMCB9KVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcm91bmRVcFRvU2Vjb25kczxUIGV4dGVuZHMgVGVtcG9yYWwuUGxhaW5UaW1lIHwgVGVtcG9yYWwuUGxhaW5EYXRlVGltZT4oXG4gICAgdGltZTogVFxuICApOiBUIHtcbiAgICByZXR1cm4gdGltZS53aXRoKHtcbiAgICAgIHNlY29uZDogdGltZS5zZWNvbmQgKyAxLFxuICAgICAgbWlsbGlzZWNvbmQ6IDAsXG4gICAgICBtaWNyb3NlY29uZDogMCxcbiAgICAgIG5hbm9zZWNvbmQ6IDAsXG4gICAgfSkgYXMgVFxuICB9XG5cbiAgcHVibGljIHN0YXRpYyB1cGRhdGVNYXRDYWxlbmRhckFjdGl2ZURhdGUoXG4gICAgY2FsZW5kYXJTdGFydDogTWF0Q2FsZW5kYXI8RGF0ZT4gfCB1bmRlZmluZWQsXG4gICAgY2FsZW5kYXJFbmQ6IE1hdENhbGVuZGFyPERhdGU+IHwgdW5kZWZpbmVkLFxuICAgIHN0YXJ0RGF0ZTogVGVtcG9yYWwuUGxhaW5EYXRlLFxuICAgIGVuZERhdGU6IFRlbXBvcmFsLlBsYWluRGF0ZVxuICApOiB2b2lkIHtcbiAgICBpZiAoIWNhbGVuZGFyU3RhcnQgfHwgIWNhbGVuZGFyRW5kKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXN0YXJ0RGF0ZSAmJiAhZW5kRGF0ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyB0aW1lb3V0IGlzIG5lZWRlZCB0byBydW4gY2FsZW5kYXIgdXBkYXRlIGxhc3QsIG90aGVyd2lzZSB0aGVyZSBhcmUgaXNzdWVzXG4gICAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICAgIGNhbGVuZGFyU3RhcnQuYWN0aXZlRGF0ZSA9IFRlbXBvcmFsVXRpbC5nZXRKU0RhdGVGcm9tUGxhaW5EYXRlVGltZShzdGFydERhdGUpXG4gICAgICB9XG5cbiAgICAgIGlmIChlbmREYXRlKSB7XG4gICAgICAgIGNhbGVuZGFyRW5kLmFjdGl2ZURhdGUgPSBUZW1wb3JhbFV0aWwuZ2V0SlNEYXRlRnJvbVBsYWluRGF0ZVRpbWUoZW5kRGF0ZSlcbiAgICAgIH1cbiAgICB9LCAwKVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyB1cGRhdGVNYXRDYWxlbmRhclRvZGF5RGF0ZShcbiAgICBjYWxlbmRhclN0YXJ0OiBNYXRDYWxlbmRhcjxEYXRlPiB8IHVuZGVmaW5lZCxcbiAgICBjYWxlbmRhckVuZDogTWF0Q2FsZW5kYXI8RGF0ZT4gfCB1bmRlZmluZWRcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFjYWxlbmRhclN0YXJ0IHx8ICFjYWxlbmRhckVuZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2FsZW5kYXJTdGFydC51cGRhdGVUb2RheXNEYXRlKClcbiAgICBjYWxlbmRhckVuZC51cGRhdGVUb2RheXNEYXRlKClcbiAgfVxufVxuIl19
@@ -8603,8 +8603,8 @@ class ElderMultiTranslateHttpLoader {
8603
8603
  this._resourcesPrefix = _resourcesPrefix;
8604
8604
  }
8605
8605
  getTranslation(lang) {
8606
- const requests = this._resourcesPrefix.map((resource) => {
8607
- resource = resource;
8606
+ const requests = this._resourcesPrefix.map((resourceArg) => {
8607
+ const resource = resourceArg;
8608
8608
  let path;
8609
8609
  if (resource.prefix) {
8610
8610
  path = `${resource.prefix}${lang}${resource.suffix || '.json'}`;
@@ -8633,7 +8633,7 @@ function simpleDeepMerge(target, source) {
8633
8633
  return target;
8634
8634
  }
8635
8635
  const output = { ...target };
8636
- Object.keys(source).forEach(key => {
8636
+ Object.keys(source).forEach((key) => {
8637
8637
  if (Array.isArray(source[key])) {
8638
8638
  output[key] = [...(target[key] || []), ...source[key]];
8639
8639
  }
@@ -28882,6 +28882,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
28882
28882
  }]
28883
28883
  }] });
28884
28884
 
28885
+ const booleanTransformFn = (input) => coerceBooleanProperty(input);
28886
+
28885
28887
  class IntervalState {
28886
28888
  constructor(startDate, endDate, startTime, endTime) {
28887
28889
  this.startDate = startDate;
@@ -29420,10 +29422,10 @@ class IntervalShiftController {
29420
29422
  }
29421
29423
  const duration = state.duration;
29422
29424
  const interval = this.manager.intervalValue;
29423
- let newStartDateTime = direction === 1
29425
+ const newStartDateTime = direction === 1
29424
29426
  ? interval.startDateTime.add(duration)
29425
29427
  : interval.startDateTime.subtract(duration);
29426
- let newEndDateTime = direction === 1 ? interval.endDateTime.add(duration) : interval.endDateTime.subtract(duration);
29428
+ const newEndDateTime = direction === 1 ? interval.endDateTime.add(duration) : interval.endDateTime.subtract(duration);
29427
29429
  const newInterval = IntervalState.createFromDateTimes(newStartDateTime, newEndDateTime);
29428
29430
  this.manager.setInterval(newInterval);
29429
29431
  }
@@ -29658,12 +29660,11 @@ class ElderIntervalPickerComponent {
29658
29660
  * *
29659
29661
  **************************************************************************/
29660
29662
  this.log = LoggerFactory.getLogger(this.constructor.name);
29661
- this.autoEmitMode = true;
29662
- this.emitOnChange = true;
29663
- this.emitType = 'interval';
29663
+ this.emitType = input('interval');
29664
+ this.autoEmitMode = input(true, { transform: booleanTransformFn });
29664
29665
  this.intervalInputMode = input('date-time-range');
29665
- this.showAnchor = input(false);
29666
- this.anchorReadOnly = input(false);
29666
+ this.showAnchor = input(false, { transform: booleanTransformFn });
29667
+ this.anchorReadOnly = input(false, { transform: booleanTransformFn });
29667
29668
  this.externalAnchorDateTime = input(Temporal.Now.plainDateTimeISO());
29668
29669
  this.externalInterval = input(null);
29669
29670
  this.manager = new IntervalPickerStateManager();
@@ -29677,7 +29678,7 @@ class ElderIntervalPickerComponent {
29677
29678
  return null;
29678
29679
  }
29679
29680
  const elderInterval = IntervalPickerUtil.createElderInterval(srcInterval);
29680
- if (this.emitType === 'iso') {
29681
+ if (this.emitType() === 'iso') {
29681
29682
  console.log('emitting type iso', coerceIntervalIsoStr(elderInterval));
29682
29683
  return coerceIntervalIsoStr(elderInterval);
29683
29684
  }
@@ -29706,10 +29707,6 @@ class ElderIntervalPickerComponent {
29706
29707
  * Life Cycle *
29707
29708
  * *
29708
29709
  **************************************************************************/
29709
- ngOnInit() { }
29710
- ngOnDestroy() {
29711
- this.removeEventListeners();
29712
- }
29713
29710
  ngAfterViewInit() {
29714
29711
  this.setupDateInputCalendarFocusPrevention();
29715
29712
  setTimeout(() => {
@@ -29718,6 +29715,9 @@ class ElderIntervalPickerComponent {
29718
29715
  console.log('externalInterval', this.externalInterval());
29719
29716
  }, 0);
29720
29717
  }
29718
+ ngOnDestroy() {
29719
+ this.removeEventListeners();
29720
+ }
29721
29721
  /***************************************************************************
29722
29722
  * *
29723
29723
  * Private methods *
@@ -29766,7 +29766,7 @@ class ElderIntervalPickerComponent {
29766
29766
  }
29767
29767
  }
29768
29768
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ElderIntervalPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29769
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.5", type: ElderIntervalPickerComponent, isStandalone: true, selector: "elder-interval-picker", inputs: { autoEmitMode: { classPropertyName: "autoEmitMode", publicName: "autoEmitMode", isSignal: false, isRequired: false, transformFunction: null }, emitOnChange: { classPropertyName: "emitOnChange", publicName: "emitOnChange", isSignal: false, isRequired: false, transformFunction: null }, emitType: { classPropertyName: "emitType", publicName: "emitType", isSignal: false, isRequired: false, transformFunction: null }, intervalInputMode: { classPropertyName: "intervalInputMode", publicName: "intervalInputMode", isSignal: true, isRequired: false, transformFunction: null }, showAnchor: { classPropertyName: "showAnchor", publicName: "showAnchor", isSignal: true, isRequired: false, transformFunction: null }, anchorReadOnly: { classPropertyName: "anchorReadOnly", publicName: "anchorReadOnly", isSignal: true, isRequired: false, transformFunction: null }, externalAnchorDateTime: { classPropertyName: "externalAnchorDateTime", publicName: "externalAnchorDateTime", isSignal: true, isRequired: false, transformFunction: null }, externalInterval: { classPropertyName: "externalInterval", publicName: "externalInterval", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { intervalChange: "intervalChange" }, providers: [{ provide: DateAdapter, useClass: CustomDateAdapter }], viewQueries: [{ propertyName: "calendarStart", first: true, predicate: ["rangeCalendarStart"], descendants: true }, { propertyName: "calendarEnd", first: true, predicate: ["rangeCalendarEnd"], descendants: true }, { propertyName: "calendarStartElRef", first: true, predicate: ["rangeCalendarStart"], descendants: true, read: ElementRef }, { propertyName: "calendarEndElRef", first: true, predicate: ["rangeCalendarEnd"], descendants: true, read: ElementRef }, { propertyName: "startDateInput", first: true, predicate: ["startDateInput"], descendants: true }, { propertyName: "endDateInput", first: true, predicate: ["endDateInput"], descendants: true }], ngImport: i0, template: "<div class=\"interval-picker-component p-md layout-col gap-xxl\">\n <div class=\"layout-row gap-xxl place-between-start\" style=\"gap: 5%\">\n <div class=\"layout-col gap-md pt-xs\">\n <div class=\"layout-col\">\n <div class=\"layout-row select-buttons-container gap-sm\">\n <div class=\"layout-col gap-xs place-start-stretch\">\n <button mat-button (click)=\"controller.select.selectCurrentDay()\">\n @if (presenter.isFixedAnchorDateSet()) {\n {{ 'intervalPicker.anchorDay' | translate }}\n } @else {\n {{ 'intervalPicker.today' | translate }}\n }\n </button>\n <button mat-button (click)=\"controller.select.selectYesterday()\">\n @if (presenter.isFixedAnchorDateSet()) {\n {{ 'intervalPicker.last' | translate }} 1 {{ 'intervalPicker.day' | translate }}\n } @else {\n {{ 'intervalPicker.yesterday' | translate }}\n }\n </button>\n <button mat-button (click)=\"controller.select.selectLastSevenDaysIncludingToday()\">\n {{ 'intervalPicker.last' | translate }} 7\n {{ 'intervalPicker.days' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLastThirtyDaysIncludingToday()\">\n {{ 'intervalPicker.last' | translate }} 30\n {{ 'intervalPicker.days' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLast365daysIncludingToday()\">\n {{ 'intervalPicker.last' | translate }} 365\n {{ 'intervalPicker.days' | translate }}\n </button>\n @if (intervalInputMode() === 'date-time-range') {\n <div class=\"pt-sm\"></div>\n <button mat-button (click)=\"controller.select.selectLastFiveMinutes()\">\n {{ 'intervalPicker.last' | translate }} 5\n {{ 'intervalPicker.minutes' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLastHour()\">\n {{ 'intervalPicker.last' | translate }} {{ 'intervalPicker.hour' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLast24Hours()\">\n {{ 'intervalPicker.last' | translate }} 24\n {{ 'intervalPicker.hours' | translate }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n <div class=\"layout-col\">\n <!-- smart shift -->\n <div class=\"layout-row place-around-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.smartShift(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ presenter.smartShiftMessage() }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.smartShift(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <!-- calendars and input controls -->\n <div\n class=\"layout-row place-around-center\"\n style=\"align-items: flex-start; min-height: 280px\"\n >\n <mat-calendar\n #rangeCalendarStart\n style=\"width: 210px; max-width: 100%\"\n [selected]=\"presenter.dateRangeForCalendar()\"\n (selectedChange)=\"controller.calendar.setStartDateFromJSDate($event)\"\n [maxDate]=\"presenter.endDateTimeAsJSDate()\"\n [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n >\n </mat-calendar>\n <mat-calendar\n #rangeCalendarEnd\n style=\"width: 210px; max-width: 100%\"\n [selected]=\"presenter.dateRangeForCalendar()\"\n (selectedChange)=\"controller.calendar.setEndDateFromJSDate($event)\"\n [minDate]=\"presenter.startDateTimeAsJSDate()\"\n [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n >\n </mat-calendar>\n </div>\n <div class=\"layout-row place-around-center gap-xl pt-sm\">\n <div class=\"layout-row place-around-center\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.startDate' | translate }}</mat-label>\n <input\n #startDateInput\n name=\"startDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.startDateHtmlString()\"\n (ngModelChange)=\"controller.form.setStartDateFromString($event)\"\n />\n </mat-form-field>\n </div>\n <div class=\"layout-row place-around-center\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.endDate' | translate }}</mat-label>\n <input\n #endDateInput\n name=\"endDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.endDateHtmlString()\"\n (ngModelChange)=\"controller.form.setEndDateFromString($event)\"\n />\n </mat-form-field>\n </div>\n </div>\n @if (intervalInputMode() === 'date-time-range') {\n <div class=\"layout-row place-around-center gap-xl pt-sm\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.startTime' | translate }}</mat-label>\n <input\n name=\"startTimeInput\"\n matInput\n type=\"time\"\n #startTimeControl=\"ngModel\"\n step=\"1\"\n [ngModel]=\"presenter.startTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setStartTimeFromString($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n (click)=\"controller.clearStartTime()\"\n [disabled]=\"!presenter.isStartTimeSetAndNotMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.endTime' | translate }}</mat-label>\n <input\n name=\"endTimeInput\"\n matInput\n type=\"time\"\n #endTimeControl=\"ngModel\"\n step=\"1\"\n [ngModel]=\"presenter.endTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setEndTimeFromString($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n (click)=\"controller.clearEndTime()\"\n [disabled]=\"!presenter.isEndTimeSetAndNotMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n }\n <br />\n </div>\n <div class=\"pt-xs\" style=\"width: 25%\">\n <div class=\"layout-col gap-lg\">\n <div class=\"layout-col gap-xs place-start-start\">\n <!-- select current -->\n <button mat-button (click)=\"controller.select.selectCurrentWeek()\">\n {{ 'intervalPicker.currentPeriod.week' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectCurrentMonth()\">\n {{ 'intervalPicker.currentPeriod.month' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectCurrentQuarter()\">\n {{ 'intervalPicker.currentPeriod.quarter' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectCurrentYear()\">\n {{ 'intervalPicker.currentPeriod.year' | translate }}\n </button>\n </div>\n <div class=\"fixed-shifts-container\">\n <div class=\"layout-col place-start-stretch\">\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftDay(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.day' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftDay(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMonth(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.month' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMonth(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftYear(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.year' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftYear(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n\n @if (true) {\n <!-- shift minute -->\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMinute(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.minute' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMinute(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <!-- shift hour -->\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftHour(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.hour' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftHour(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"layout-row place-between-center gap-xxl pt-sm\">\n <div>\n @if (showAnchor()) {\n <div class=\"layout-row flex-none gap-md\">\n <mat-menu #anchorMenu=\"matMenu\">\n @if (presenter.startDateHtmlString()) {\n <button\n mat-menu-item\n (click)=\"controller.anchor.setFixedAnchorPointToEndDateTime()\"\n [disabled]=\"!presenter.startDateHtmlString()\"\n >\n <mat-icon class=\"material-symbols-outlined\">login</mat-icon>\n <span>{{ 'intervalPicker.endDate' | translate }}</span>\n </button>\n }\n @if (presenter.endDateHtmlString()) {\n <button\n mat-menu-item\n (click)=\"controller.anchor.setFixedAnchorPointToStartDateTime()\"\n [disabled]=\"!presenter.endDateHtmlString()\"\n >\n <mat-icon class=\"material-symbols-outlined\">logout</mat-icon>\n <span>{{ 'intervalPicker.startDate' | translate }}</span>\n </button>\n }\n @if (presenter.isFixedAnchorDateSet()) {\n <button\n mat-menu-item\n (click)=\"controller.anchor.resetAnchor()\"\n [disabled]=\"!presenter.isFixedAnchorDateSet() || anchorReadOnly()\"\n >\n <mat-icon>close</mat-icon>\n <span>{{ 'intervalPicker.clear' | translate }}</span>\n </button>\n }\n </mat-menu>\n\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.anchorDate' | translate }}</mat-label>\n <input\n #startDateInput\n name=\"anchorDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.anchorDateHtmlString()\"\n (ngModelChange)=\"controller.form.setAnchorDateFromString($event)\"\n [readonly]=\"anchorReadOnly()\"\n />\n @if (!anchorReadOnly()) {\n <button mat-icon-button matSuffix [matMenuTriggerFor]=\"anchorMenu\" [disabled]=\"presenter.isAnchorMenuDisabled()\">\n <mat-icon class=\"material-symbols-outlined\">more_horiz</mat-icon>\n </button>\n }\n </mat-form-field>\n @if (intervalInputMode() === 'date-time-range') {\n <mat-form-field class=\"input-control-container-short\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.anchorTime' | translate }}</mat-label>\n <input\n matInput\n name=\"anchorTimeInput\"\n type=\"time\"\n #anchorTimeControl=\"ngModel\"\n step=\"1\"\n [readonly]=\"anchorReadOnly()\"\n [ngModel]=\"presenter.anchorTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setAnchorTimeFromString($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n (click)=\"controller.anchor.resetAnchorTime()\"\n [disabled]=\"anchorReadOnly() || presenter.isAnchorTimeMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n }\n </div>\n }\n </div>\n <!-- result interval -->\n <div class=\"layout-col place-center-center\">\n <div class=\"date-interval mat-caption pt-xs\">\n @if (presenter.startDateTimeAsJSDate()) {\n {{ presenter.startDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n } @else {\n {{ 'intervalPicker.startDateNotSet' | translate }}\n }\n <span> - </span>\n @if (presenter.endDateTimeAsJSDate()) {\n {{ presenter.endDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n } @else {\n {{ 'intervalPicker.endDateNotSet' | translate }}\n }\n </div>\n <div>\n <span class=\"mat-caption\">{{ presenter.deltaHumanReadable() || '&nbsp;' }}</span>\n </div>\n </div>\n <div class=\"layout-row gap-lg\">\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"controller.clearInterval()\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n {{ 'intervalPicker.clear' | translate }}\n </button>\n\n @if (!this.autoEmitMode) {\n <button color=\"primary\" mat-raised-button (click)=\"controller.manualEmit()\">\n {{ 'actions.ok' | translate }}\n </button>\n }\n </div>\n</div>\n", styles: [".interval-picker-component{min-width:840px;max-width:100%}.fixed-shifts-container{max-width:160px}.input-control-container{width:192px;max-width:100%}.input-control-container-short{width:140px;max-width:100%}.select-buttons-container button{white-space:nowrap;text-align:left;justify-content:flex-start}::ng-deep .interval-picker-component .mat-calendar-body-cell.elder-custom-anchor-date .mat-calendar-body-cell-content{border-radius:50%;background-color:#def;background-color:#b4d2ebbf}\n"], dependencies: [{ kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i1$c.MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$a.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$a.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$a.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2$1.DatePipe, name: "date" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i9.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
29769
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.5", type: ElderIntervalPickerComponent, isStandalone: true, selector: "elder-interval-picker", inputs: { emitType: { classPropertyName: "emitType", publicName: "emitType", isSignal: true, isRequired: false, transformFunction: null }, autoEmitMode: { classPropertyName: "autoEmitMode", publicName: "autoEmitMode", isSignal: true, isRequired: false, transformFunction: null }, intervalInputMode: { classPropertyName: "intervalInputMode", publicName: "intervalInputMode", isSignal: true, isRequired: false, transformFunction: null }, showAnchor: { classPropertyName: "showAnchor", publicName: "showAnchor", isSignal: true, isRequired: false, transformFunction: null }, anchorReadOnly: { classPropertyName: "anchorReadOnly", publicName: "anchorReadOnly", isSignal: true, isRequired: false, transformFunction: null }, externalAnchorDateTime: { classPropertyName: "externalAnchorDateTime", publicName: "externalAnchorDateTime", isSignal: true, isRequired: false, transformFunction: null }, externalInterval: { classPropertyName: "externalInterval", publicName: "externalInterval", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { intervalChange: "intervalChange" }, providers: [{ provide: DateAdapter, useClass: CustomDateAdapter }], viewQueries: [{ propertyName: "calendarStart", first: true, predicate: ["rangeCalendarStart"], descendants: true }, { propertyName: "calendarEnd", first: true, predicate: ["rangeCalendarEnd"], descendants: true }, { propertyName: "calendarStartElRef", first: true, predicate: ["rangeCalendarStart"], descendants: true, read: ElementRef }, { propertyName: "calendarEndElRef", first: true, predicate: ["rangeCalendarEnd"], descendants: true, read: ElementRef }, { propertyName: "startDateInput", first: true, predicate: ["startDateInput"], descendants: true }, { propertyName: "endDateInput", first: true, predicate: ["endDateInput"], descendants: true }], ngImport: i0, template: "<div class=\"interval-picker-component p-md layout-col gap-xxl\">\n <div class=\"layout-row gap-xxl place-between-start\" style=\"gap: 5%\">\n <div class=\"layout-col gap-md pt-xs\">\n <div class=\"layout-col\">\n <div class=\"layout-row select-buttons-container gap-sm\">\n <div class=\"layout-col gap-xs place-start-stretch\">\n <button mat-button (click)=\"controller.select.selectCurrentDay()\">\n @if (presenter.isFixedAnchorDateSet()) {\n {{ 'intervalPicker.anchorDay' | translate }}\n } @else {\n {{ 'intervalPicker.today' | translate }}\n }\n </button>\n <button mat-button (click)=\"controller.select.selectYesterday()\">\n @if (presenter.isFixedAnchorDateSet()) {\n {{ 'intervalPicker.last' | translate }} 1 {{ 'intervalPicker.day' | translate }}\n } @else {\n {{ 'intervalPicker.yesterday' | translate }}\n }\n </button>\n <button mat-button (click)=\"controller.select.selectLastSevenDaysIncludingToday()\">\n {{ 'intervalPicker.last' | translate }} 7\n {{ 'intervalPicker.days' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLastThirtyDaysIncludingToday()\">\n {{ 'intervalPicker.last' | translate }} 30\n {{ 'intervalPicker.days' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLast365daysIncludingToday()\">\n {{ 'intervalPicker.last' | translate }} 365\n {{ 'intervalPicker.days' | translate }}\n </button>\n @if (intervalInputMode() === 'date-time-range') {\n <div class=\"pt-sm\"></div>\n <button mat-button (click)=\"controller.select.selectLastFiveMinutes()\">\n {{ 'intervalPicker.last' | translate }} 5\n {{ 'intervalPicker.minutes' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLastHour()\">\n {{ 'intervalPicker.last' | translate }} {{ 'intervalPicker.hour' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLast24Hours()\">\n {{ 'intervalPicker.last' | translate }} 24\n {{ 'intervalPicker.hours' | translate }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n <div class=\"layout-col\">\n <!-- smart shift -->\n <div class=\"layout-row place-around-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.smartShift(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ presenter.smartShiftMessage() }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.smartShift(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <!-- calendars and input controls -->\n <div\n class=\"layout-row place-around-center\"\n style=\"align-items: flex-start; min-height: 280px\"\n >\n <mat-calendar\n #rangeCalendarStart\n style=\"width: 210px; max-width: 100%\"\n [selected]=\"presenter.dateRangeForCalendar()\"\n (selectedChange)=\"controller.calendar.setStartDateFromJSDate($event)\"\n [maxDate]=\"presenter.endDateTimeAsJSDate()\"\n [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n >\n </mat-calendar>\n <mat-calendar\n #rangeCalendarEnd\n style=\"width: 210px; max-width: 100%\"\n [selected]=\"presenter.dateRangeForCalendar()\"\n (selectedChange)=\"controller.calendar.setEndDateFromJSDate($event)\"\n [minDate]=\"presenter.startDateTimeAsJSDate()\"\n [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n >\n </mat-calendar>\n </div>\n <div class=\"layout-row place-around-center gap-xl pt-sm\">\n <div class=\"layout-row place-around-center\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.startDate' | translate }}</mat-label>\n <input\n #startDateInput\n name=\"startDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.startDateHtmlString()\"\n (ngModelChange)=\"controller.form.setStartDateFromString($event)\"\n />\n </mat-form-field>\n </div>\n <div class=\"layout-row place-around-center\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.endDate' | translate }}</mat-label>\n <input\n #endDateInput\n name=\"endDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.endDateHtmlString()\"\n (ngModelChange)=\"controller.form.setEndDateFromString($event)\"\n />\n </mat-form-field>\n </div>\n </div>\n @if (intervalInputMode() === 'date-time-range') {\n <div class=\"layout-row place-around-center gap-xl pt-sm\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.startTime' | translate }}</mat-label>\n <input\n name=\"startTimeInput\"\n matInput\n type=\"time\"\n #startTimeControl=\"ngModel\"\n step=\"1\"\n [ngModel]=\"presenter.startTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setStartTimeFromString($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n (click)=\"controller.clearStartTime()\"\n [disabled]=\"!presenter.isStartTimeSetAndNotMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.endTime' | translate }}</mat-label>\n <input\n name=\"endTimeInput\"\n matInput\n type=\"time\"\n #endTimeControl=\"ngModel\"\n step=\"1\"\n [ngModel]=\"presenter.endTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setEndTimeFromString($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n (click)=\"controller.clearEndTime()\"\n [disabled]=\"!presenter.isEndTimeSetAndNotMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n }\n <br />\n </div>\n <div class=\"pt-xs\" style=\"width: 25%\">\n <div class=\"layout-col gap-lg\">\n <div class=\"layout-col gap-xs place-start-start\">\n <!-- select current -->\n <button mat-button (click)=\"controller.select.selectCurrentWeek()\">\n {{ 'intervalPicker.currentPeriod.week' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectCurrentMonth()\">\n {{ 'intervalPicker.currentPeriod.month' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectCurrentQuarter()\">\n {{ 'intervalPicker.currentPeriod.quarter' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectCurrentYear()\">\n {{ 'intervalPicker.currentPeriod.year' | translate }}\n </button>\n </div>\n <div class=\"fixed-shifts-container\">\n <div class=\"layout-col place-start-stretch\">\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftDay(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.day' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftDay(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMonth(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.month' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMonth(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftYear(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.year' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftYear(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n\n @if (true) {\n <!-- shift minute -->\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMinute(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.minute' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMinute(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <!-- shift hour -->\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftHour(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.hour' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftHour(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"layout-row place-between-center gap-xxl pt-sm\">\n <div>\n @if (showAnchor()) {\n <div class=\"layout-row flex-none gap-md\">\n <mat-menu #anchorMenu=\"matMenu\">\n @if (presenter.startDateHtmlString()) {\n <button\n mat-menu-item\n (click)=\"controller.anchor.setFixedAnchorPointToEndDateTime()\"\n [disabled]=\"!presenter.startDateHtmlString()\"\n >\n <mat-icon class=\"material-symbols-outlined\">login</mat-icon>\n <span>{{ 'intervalPicker.endDate' | translate }}</span>\n </button>\n }\n @if (presenter.endDateHtmlString()) {\n <button\n mat-menu-item\n (click)=\"controller.anchor.setFixedAnchorPointToStartDateTime()\"\n [disabled]=\"!presenter.endDateHtmlString()\"\n >\n <mat-icon class=\"material-symbols-outlined\">logout</mat-icon>\n <span>{{ 'intervalPicker.startDate' | translate }}</span>\n </button>\n }\n @if (presenter.isFixedAnchorDateSet()) {\n <button\n mat-menu-item\n (click)=\"controller.anchor.resetAnchor()\"\n [disabled]=\"!presenter.isFixedAnchorDateSet() || anchorReadOnly()\"\n >\n <mat-icon>close</mat-icon>\n <span>{{ 'intervalPicker.clear' | translate }}</span>\n </button>\n }\n </mat-menu>\n\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.anchorDate' | translate }}</mat-label>\n <input\n #startDateInput\n name=\"anchorDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.anchorDateHtmlString()\"\n (ngModelChange)=\"controller.form.setAnchorDateFromString($event)\"\n [readonly]=\"anchorReadOnly()\"\n />\n @if (!anchorReadOnly()) {\n <button\n mat-icon-button\n matSuffix\n [matMenuTriggerFor]=\"anchorMenu\"\n [disabled]=\"presenter.isAnchorMenuDisabled()\"\n >\n <mat-icon class=\"material-symbols-outlined\">more_horiz</mat-icon>\n </button>\n }\n </mat-form-field>\n @if (intervalInputMode() === 'date-time-range') {\n <mat-form-field class=\"input-control-container-short\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.anchorTime' | translate }}</mat-label>\n <input\n matInput\n name=\"anchorTimeInput\"\n type=\"time\"\n #anchorTimeControl=\"ngModel\"\n step=\"1\"\n [readonly]=\"anchorReadOnly()\"\n [ngModel]=\"presenter.anchorTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setAnchorTimeFromString($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n (click)=\"controller.anchor.resetAnchorTime()\"\n [disabled]=\"anchorReadOnly() || presenter.isAnchorTimeMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n }\n </div>\n }\n </div>\n <!-- result interval -->\n <div class=\"layout-col place-center-center\">\n <div class=\"date-interval mat-caption pt-xs\">\n @if (presenter.startDateTimeAsJSDate()) {\n {{ presenter.startDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n } @else {\n {{ 'intervalPicker.startDateNotSet' | translate }}\n }\n <span> - </span>\n @if (presenter.endDateTimeAsJSDate()) {\n {{ presenter.endDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n } @else {\n {{ 'intervalPicker.endDateNotSet' | translate }}\n }\n </div>\n <div>\n <span class=\"mat-caption\">{{ presenter.deltaHumanReadable() || '&nbsp;' }}</span>\n </div>\n </div>\n <div class=\"layout-row gap-lg\">\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"controller.clearInterval()\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n {{ 'intervalPicker.clear' | translate }}\n </button>\n\n @if (!this.autoEmitMode()) {\n <button color=\"primary\" mat-raised-button (click)=\"controller.manualEmit()\">\n {{ 'actions.ok' | translate }}\n </button>\n }\n </div>\n</div>\n", styles: [".interval-picker-component{min-width:840px;max-width:100%}.fixed-shifts-container{max-width:160px}.input-control-container{width:192px;max-width:100%}.input-control-container-short{width:140px;max-width:100%}.select-buttons-container button{white-space:nowrap;text-align:left;justify-content:flex-start}::ng-deep .interval-picker-component .mat-calendar-body-cell.elder-custom-anchor-date .mat-calendar-body-cell-content{border-radius:50%;background-color:#def;background-color:#b4d2ebbf}\n"], dependencies: [{ kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i1$c.MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$a.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$a.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$a.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2$1.DatePipe, name: "date" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i9.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
29770
29770
  }
29771
29771
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ElderIntervalPickerComponent, decorators: [{
29772
29772
  type: Component,
@@ -29788,16 +29788,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
29788
29788
  TranslateModule,
29789
29789
  MatMenuModule,
29790
29790
  ElderIntervalInputComponent,
29791
- MatMenuModule,
29792
- ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: DateAdapter, useClass: CustomDateAdapter }], template: "<div class=\"interval-picker-component p-md layout-col gap-xxl\">\n <div class=\"layout-row gap-xxl place-between-start\" style=\"gap: 5%\">\n <div class=\"layout-col gap-md pt-xs\">\n <div class=\"layout-col\">\n <div class=\"layout-row select-buttons-container gap-sm\">\n <div class=\"layout-col gap-xs place-start-stretch\">\n <button mat-button (click)=\"controller.select.selectCurrentDay()\">\n @if (presenter.isFixedAnchorDateSet()) {\n {{ 'intervalPicker.anchorDay' | translate }}\n } @else {\n {{ 'intervalPicker.today' | translate }}\n }\n </button>\n <button mat-button (click)=\"controller.select.selectYesterday()\">\n @if (presenter.isFixedAnchorDateSet()) {\n {{ 'intervalPicker.last' | translate }} 1 {{ 'intervalPicker.day' | translate }}\n } @else {\n {{ 'intervalPicker.yesterday' | translate }}\n }\n </button>\n <button mat-button (click)=\"controller.select.selectLastSevenDaysIncludingToday()\">\n {{ 'intervalPicker.last' | translate }} 7\n {{ 'intervalPicker.days' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLastThirtyDaysIncludingToday()\">\n {{ 'intervalPicker.last' | translate }} 30\n {{ 'intervalPicker.days' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLast365daysIncludingToday()\">\n {{ 'intervalPicker.last' | translate }} 365\n {{ 'intervalPicker.days' | translate }}\n </button>\n @if (intervalInputMode() === 'date-time-range') {\n <div class=\"pt-sm\"></div>\n <button mat-button (click)=\"controller.select.selectLastFiveMinutes()\">\n {{ 'intervalPicker.last' | translate }} 5\n {{ 'intervalPicker.minutes' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLastHour()\">\n {{ 'intervalPicker.last' | translate }} {{ 'intervalPicker.hour' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLast24Hours()\">\n {{ 'intervalPicker.last' | translate }} 24\n {{ 'intervalPicker.hours' | translate }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n <div class=\"layout-col\">\n <!-- smart shift -->\n <div class=\"layout-row place-around-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.smartShift(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ presenter.smartShiftMessage() }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.smartShift(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <!-- calendars and input controls -->\n <div\n class=\"layout-row place-around-center\"\n style=\"align-items: flex-start; min-height: 280px\"\n >\n <mat-calendar\n #rangeCalendarStart\n style=\"width: 210px; max-width: 100%\"\n [selected]=\"presenter.dateRangeForCalendar()\"\n (selectedChange)=\"controller.calendar.setStartDateFromJSDate($event)\"\n [maxDate]=\"presenter.endDateTimeAsJSDate()\"\n [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n >\n </mat-calendar>\n <mat-calendar\n #rangeCalendarEnd\n style=\"width: 210px; max-width: 100%\"\n [selected]=\"presenter.dateRangeForCalendar()\"\n (selectedChange)=\"controller.calendar.setEndDateFromJSDate($event)\"\n [minDate]=\"presenter.startDateTimeAsJSDate()\"\n [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n >\n </mat-calendar>\n </div>\n <div class=\"layout-row place-around-center gap-xl pt-sm\">\n <div class=\"layout-row place-around-center\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.startDate' | translate }}</mat-label>\n <input\n #startDateInput\n name=\"startDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.startDateHtmlString()\"\n (ngModelChange)=\"controller.form.setStartDateFromString($event)\"\n />\n </mat-form-field>\n </div>\n <div class=\"layout-row place-around-center\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.endDate' | translate }}</mat-label>\n <input\n #endDateInput\n name=\"endDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.endDateHtmlString()\"\n (ngModelChange)=\"controller.form.setEndDateFromString($event)\"\n />\n </mat-form-field>\n </div>\n </div>\n @if (intervalInputMode() === 'date-time-range') {\n <div class=\"layout-row place-around-center gap-xl pt-sm\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.startTime' | translate }}</mat-label>\n <input\n name=\"startTimeInput\"\n matInput\n type=\"time\"\n #startTimeControl=\"ngModel\"\n step=\"1\"\n [ngModel]=\"presenter.startTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setStartTimeFromString($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n (click)=\"controller.clearStartTime()\"\n [disabled]=\"!presenter.isStartTimeSetAndNotMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.endTime' | translate }}</mat-label>\n <input\n name=\"endTimeInput\"\n matInput\n type=\"time\"\n #endTimeControl=\"ngModel\"\n step=\"1\"\n [ngModel]=\"presenter.endTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setEndTimeFromString($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n (click)=\"controller.clearEndTime()\"\n [disabled]=\"!presenter.isEndTimeSetAndNotMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n }\n <br />\n </div>\n <div class=\"pt-xs\" style=\"width: 25%\">\n <div class=\"layout-col gap-lg\">\n <div class=\"layout-col gap-xs place-start-start\">\n <!-- select current -->\n <button mat-button (click)=\"controller.select.selectCurrentWeek()\">\n {{ 'intervalPicker.currentPeriod.week' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectCurrentMonth()\">\n {{ 'intervalPicker.currentPeriod.month' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectCurrentQuarter()\">\n {{ 'intervalPicker.currentPeriod.quarter' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectCurrentYear()\">\n {{ 'intervalPicker.currentPeriod.year' | translate }}\n </button>\n </div>\n <div class=\"fixed-shifts-container\">\n <div class=\"layout-col place-start-stretch\">\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftDay(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.day' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftDay(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMonth(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.month' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMonth(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftYear(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.year' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftYear(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n\n @if (true) {\n <!-- shift minute -->\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMinute(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.minute' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMinute(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <!-- shift hour -->\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftHour(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.hour' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftHour(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"layout-row place-between-center gap-xxl pt-sm\">\n <div>\n @if (showAnchor()) {\n <div class=\"layout-row flex-none gap-md\">\n <mat-menu #anchorMenu=\"matMenu\">\n @if (presenter.startDateHtmlString()) {\n <button\n mat-menu-item\n (click)=\"controller.anchor.setFixedAnchorPointToEndDateTime()\"\n [disabled]=\"!presenter.startDateHtmlString()\"\n >\n <mat-icon class=\"material-symbols-outlined\">login</mat-icon>\n <span>{{ 'intervalPicker.endDate' | translate }}</span>\n </button>\n }\n @if (presenter.endDateHtmlString()) {\n <button\n mat-menu-item\n (click)=\"controller.anchor.setFixedAnchorPointToStartDateTime()\"\n [disabled]=\"!presenter.endDateHtmlString()\"\n >\n <mat-icon class=\"material-symbols-outlined\">logout</mat-icon>\n <span>{{ 'intervalPicker.startDate' | translate }}</span>\n </button>\n }\n @if (presenter.isFixedAnchorDateSet()) {\n <button\n mat-menu-item\n (click)=\"controller.anchor.resetAnchor()\"\n [disabled]=\"!presenter.isFixedAnchorDateSet() || anchorReadOnly()\"\n >\n <mat-icon>close</mat-icon>\n <span>{{ 'intervalPicker.clear' | translate }}</span>\n </button>\n }\n </mat-menu>\n\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.anchorDate' | translate }}</mat-label>\n <input\n #startDateInput\n name=\"anchorDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.anchorDateHtmlString()\"\n (ngModelChange)=\"controller.form.setAnchorDateFromString($event)\"\n [readonly]=\"anchorReadOnly()\"\n />\n @if (!anchorReadOnly()) {\n <button mat-icon-button matSuffix [matMenuTriggerFor]=\"anchorMenu\" [disabled]=\"presenter.isAnchorMenuDisabled()\">\n <mat-icon class=\"material-symbols-outlined\">more_horiz</mat-icon>\n </button>\n }\n </mat-form-field>\n @if (intervalInputMode() === 'date-time-range') {\n <mat-form-field class=\"input-control-container-short\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.anchorTime' | translate }}</mat-label>\n <input\n matInput\n name=\"anchorTimeInput\"\n type=\"time\"\n #anchorTimeControl=\"ngModel\"\n step=\"1\"\n [readonly]=\"anchorReadOnly()\"\n [ngModel]=\"presenter.anchorTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setAnchorTimeFromString($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n (click)=\"controller.anchor.resetAnchorTime()\"\n [disabled]=\"anchorReadOnly() || presenter.isAnchorTimeMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n }\n </div>\n }\n </div>\n <!-- result interval -->\n <div class=\"layout-col place-center-center\">\n <div class=\"date-interval mat-caption pt-xs\">\n @if (presenter.startDateTimeAsJSDate()) {\n {{ presenter.startDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n } @else {\n {{ 'intervalPicker.startDateNotSet' | translate }}\n }\n <span> - </span>\n @if (presenter.endDateTimeAsJSDate()) {\n {{ presenter.endDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n } @else {\n {{ 'intervalPicker.endDateNotSet' | translate }}\n }\n </div>\n <div>\n <span class=\"mat-caption\">{{ presenter.deltaHumanReadable() || '&nbsp;' }}</span>\n </div>\n </div>\n <div class=\"layout-row gap-lg\">\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"controller.clearInterval()\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n {{ 'intervalPicker.clear' | translate }}\n </button>\n\n @if (!this.autoEmitMode) {\n <button color=\"primary\" mat-raised-button (click)=\"controller.manualEmit()\">\n {{ 'actions.ok' | translate }}\n </button>\n }\n </div>\n</div>\n", styles: [".interval-picker-component{min-width:840px;max-width:100%}.fixed-shifts-container{max-width:160px}.input-control-container{width:192px;max-width:100%}.input-control-container-short{width:140px;max-width:100%}.select-buttons-container button{white-space:nowrap;text-align:left;justify-content:flex-start}::ng-deep .interval-picker-component .mat-calendar-body-cell.elder-custom-anchor-date .mat-calendar-body-cell-content{border-radius:50%;background-color:#def;background-color:#b4d2ebbf}\n"] }]
29791
+ ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: DateAdapter, useClass: CustomDateAdapter }], template: "<div class=\"interval-picker-component p-md layout-col gap-xxl\">\n <div class=\"layout-row gap-xxl place-between-start\" style=\"gap: 5%\">\n <div class=\"layout-col gap-md pt-xs\">\n <div class=\"layout-col\">\n <div class=\"layout-row select-buttons-container gap-sm\">\n <div class=\"layout-col gap-xs place-start-stretch\">\n <button mat-button (click)=\"controller.select.selectCurrentDay()\">\n @if (presenter.isFixedAnchorDateSet()) {\n {{ 'intervalPicker.anchorDay' | translate }}\n } @else {\n {{ 'intervalPicker.today' | translate }}\n }\n </button>\n <button mat-button (click)=\"controller.select.selectYesterday()\">\n @if (presenter.isFixedAnchorDateSet()) {\n {{ 'intervalPicker.last' | translate }} 1 {{ 'intervalPicker.day' | translate }}\n } @else {\n {{ 'intervalPicker.yesterday' | translate }}\n }\n </button>\n <button mat-button (click)=\"controller.select.selectLastSevenDaysIncludingToday()\">\n {{ 'intervalPicker.last' | translate }} 7\n {{ 'intervalPicker.days' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLastThirtyDaysIncludingToday()\">\n {{ 'intervalPicker.last' | translate }} 30\n {{ 'intervalPicker.days' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLast365daysIncludingToday()\">\n {{ 'intervalPicker.last' | translate }} 365\n {{ 'intervalPicker.days' | translate }}\n </button>\n @if (intervalInputMode() === 'date-time-range') {\n <div class=\"pt-sm\"></div>\n <button mat-button (click)=\"controller.select.selectLastFiveMinutes()\">\n {{ 'intervalPicker.last' | translate }} 5\n {{ 'intervalPicker.minutes' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLastHour()\">\n {{ 'intervalPicker.last' | translate }} {{ 'intervalPicker.hour' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectLast24Hours()\">\n {{ 'intervalPicker.last' | translate }} 24\n {{ 'intervalPicker.hours' | translate }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n <div class=\"layout-col\">\n <!-- smart shift -->\n <div class=\"layout-row place-around-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.smartShift(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ presenter.smartShiftMessage() }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.smartShift(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <!-- calendars and input controls -->\n <div\n class=\"layout-row place-around-center\"\n style=\"align-items: flex-start; min-height: 280px\"\n >\n <mat-calendar\n #rangeCalendarStart\n style=\"width: 210px; max-width: 100%\"\n [selected]=\"presenter.dateRangeForCalendar()\"\n (selectedChange)=\"controller.calendar.setStartDateFromJSDate($event)\"\n [maxDate]=\"presenter.endDateTimeAsJSDate()\"\n [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n >\n </mat-calendar>\n <mat-calendar\n #rangeCalendarEnd\n style=\"width: 210px; max-width: 100%\"\n [selected]=\"presenter.dateRangeForCalendar()\"\n (selectedChange)=\"controller.calendar.setEndDateFromJSDate($event)\"\n [minDate]=\"presenter.startDateTimeAsJSDate()\"\n [dateClass]=\"presenter.calendarAnchorDateCssClassFn\"\n >\n </mat-calendar>\n </div>\n <div class=\"layout-row place-around-center gap-xl pt-sm\">\n <div class=\"layout-row place-around-center\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.startDate' | translate }}</mat-label>\n <input\n #startDateInput\n name=\"startDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.startDateHtmlString()\"\n (ngModelChange)=\"controller.form.setStartDateFromString($event)\"\n />\n </mat-form-field>\n </div>\n <div class=\"layout-row place-around-center\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.endDate' | translate }}</mat-label>\n <input\n #endDateInput\n name=\"endDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.endDateHtmlString()\"\n (ngModelChange)=\"controller.form.setEndDateFromString($event)\"\n />\n </mat-form-field>\n </div>\n </div>\n @if (intervalInputMode() === 'date-time-range') {\n <div class=\"layout-row place-around-center gap-xl pt-sm\">\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.startTime' | translate }}</mat-label>\n <input\n name=\"startTimeInput\"\n matInput\n type=\"time\"\n #startTimeControl=\"ngModel\"\n step=\"1\"\n [ngModel]=\"presenter.startTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setStartTimeFromString($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n (click)=\"controller.clearStartTime()\"\n [disabled]=\"!presenter.isStartTimeSetAndNotMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.endTime' | translate }}</mat-label>\n <input\n name=\"endTimeInput\"\n matInput\n type=\"time\"\n #endTimeControl=\"ngModel\"\n step=\"1\"\n [ngModel]=\"presenter.endTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setEndTimeFromString($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n (click)=\"controller.clearEndTime()\"\n [disabled]=\"!presenter.isEndTimeSetAndNotMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </div>\n }\n <br />\n </div>\n <div class=\"pt-xs\" style=\"width: 25%\">\n <div class=\"layout-col gap-lg\">\n <div class=\"layout-col gap-xs place-start-start\">\n <!-- select current -->\n <button mat-button (click)=\"controller.select.selectCurrentWeek()\">\n {{ 'intervalPicker.currentPeriod.week' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectCurrentMonth()\">\n {{ 'intervalPicker.currentPeriod.month' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectCurrentQuarter()\">\n {{ 'intervalPicker.currentPeriod.quarter' | translate }}\n </button>\n <button mat-button (click)=\"controller.select.selectCurrentYear()\">\n {{ 'intervalPicker.currentPeriod.year' | translate }}\n </button>\n </div>\n <div class=\"fixed-shifts-container\">\n <div class=\"layout-col place-start-stretch\">\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftDay(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.day' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftDay(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMonth(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.month' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMonth(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftYear(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.year' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftYear(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n\n @if (true) {\n <!-- shift minute -->\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMinute(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.minute' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftMinute(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n <!-- shift hour -->\n <div class=\"layout-row place-between-center\">\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftHour(-1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n <span>{{ 'intervalPicker.hour' | translate }}</span>\n <button\n mat-icon-button\n (click)=\"controller.shift.shiftHour(1)\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class=\"layout-row place-between-center gap-xxl pt-sm\">\n <div>\n @if (showAnchor()) {\n <div class=\"layout-row flex-none gap-md\">\n <mat-menu #anchorMenu=\"matMenu\">\n @if (presenter.startDateHtmlString()) {\n <button\n mat-menu-item\n (click)=\"controller.anchor.setFixedAnchorPointToEndDateTime()\"\n [disabled]=\"!presenter.startDateHtmlString()\"\n >\n <mat-icon class=\"material-symbols-outlined\">login</mat-icon>\n <span>{{ 'intervalPicker.endDate' | translate }}</span>\n </button>\n }\n @if (presenter.endDateHtmlString()) {\n <button\n mat-menu-item\n (click)=\"controller.anchor.setFixedAnchorPointToStartDateTime()\"\n [disabled]=\"!presenter.endDateHtmlString()\"\n >\n <mat-icon class=\"material-symbols-outlined\">logout</mat-icon>\n <span>{{ 'intervalPicker.startDate' | translate }}</span>\n </button>\n }\n @if (presenter.isFixedAnchorDateSet()) {\n <button\n mat-menu-item\n (click)=\"controller.anchor.resetAnchor()\"\n [disabled]=\"!presenter.isFixedAnchorDateSet() || anchorReadOnly()\"\n >\n <mat-icon>close</mat-icon>\n <span>{{ 'intervalPicker.clear' | translate }}</span>\n </button>\n }\n </mat-menu>\n\n <mat-form-field class=\"input-control-container\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.anchorDate' | translate }}</mat-label>\n <input\n #startDateInput\n name=\"anchorDateInput\"\n matInput\n type=\"date\"\n [ngModel]=\"presenter.anchorDateHtmlString()\"\n (ngModelChange)=\"controller.form.setAnchorDateFromString($event)\"\n [readonly]=\"anchorReadOnly()\"\n />\n @if (!anchorReadOnly()) {\n <button\n mat-icon-button\n matSuffix\n [matMenuTriggerFor]=\"anchorMenu\"\n [disabled]=\"presenter.isAnchorMenuDisabled()\"\n >\n <mat-icon class=\"material-symbols-outlined\">more_horiz</mat-icon>\n </button>\n }\n </mat-form-field>\n @if (intervalInputMode() === 'date-time-range') {\n <mat-form-field class=\"input-control-container-short\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>{{ 'intervalPicker.anchorTime' | translate }}</mat-label>\n <input\n matInput\n name=\"anchorTimeInput\"\n type=\"time\"\n #anchorTimeControl=\"ngModel\"\n step=\"1\"\n [readonly]=\"anchorReadOnly()\"\n [ngModel]=\"presenter.anchorTimeHtmlString()\"\n (ngModelChange)=\"controller.form.setAnchorTimeFromString($event)\"\n />\n <button\n mat-icon-button\n matSuffix\n (click)=\"controller.anchor.resetAnchorTime()\"\n [disabled]=\"anchorReadOnly() || presenter.isAnchorTimeMidnight()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n }\n </div>\n }\n </div>\n <!-- result interval -->\n <div class=\"layout-col place-center-center\">\n <div class=\"date-interval mat-caption pt-xs\">\n @if (presenter.startDateTimeAsJSDate()) {\n {{ presenter.startDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n } @else {\n {{ 'intervalPicker.startDateNotSet' | translate }}\n }\n <span> - </span>\n @if (presenter.endDateTimeAsJSDate()) {\n {{ presenter.endDateTimeAsJSDate() | date: 'dd.MM. y, HH:mm:ss' }}\n } @else {\n {{ 'intervalPicker.endDateNotSet' | translate }}\n }\n </div>\n <div>\n <span class=\"mat-caption\">{{ presenter.deltaHumanReadable() || '&nbsp;' }}</span>\n </div>\n </div>\n <div class=\"layout-row gap-lg\">\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"controller.clearInterval()\"\n [disabled]=\"!presenter.isValidIntervalSet()\"\n >\n {{ 'intervalPicker.clear' | translate }}\n </button>\n\n @if (!this.autoEmitMode()) {\n <button color=\"primary\" mat-raised-button (click)=\"controller.manualEmit()\">\n {{ 'actions.ok' | translate }}\n </button>\n }\n </div>\n</div>\n", styles: [".interval-picker-component{min-width:840px;max-width:100%}.fixed-shifts-container{max-width:160px}.input-control-container{width:192px;max-width:100%}.input-control-container-short{width:140px;max-width:100%}.select-buttons-container button{white-space:nowrap;text-align:left;justify-content:flex-start}::ng-deep .interval-picker-component .mat-calendar-body-cell.elder-custom-anchor-date .mat-calendar-body-cell-content{border-radius:50%;background-color:#def;background-color:#b4d2ebbf}\n"] }]
29793
29792
  }], ctorParameters: () => [], propDecorators: { intervalChange: [{
29794
29793
  type: Output
29795
- }], autoEmitMode: [{
29796
- type: Input
29797
- }], emitOnChange: [{
29798
- type: Input
29799
- }], emitType: [{
29800
- type: Input
29801
29794
  }], calendarStart: [{
29802
29795
  type: ViewChild,
29803
29796
  args: ['rangeCalendarStart']
@@ -30263,7 +30256,7 @@ class ElderIntervalPickerToggleComponent {
30263
30256
  </div>
30264
30257
  </elder-dialog-panel>
30265
30258
  </elder-overlay>
30266
- `, isInline: true, dependencies: [{ kind: "component", type: ElderIntervalPickerComponent, selector: "elder-interval-picker", inputs: ["autoEmitMode", "emitOnChange", "emitType", "intervalInputMode", "showAnchor", "anchorReadOnly", "externalAnchorDateTime", "externalInterval"], outputs: ["intervalChange"] }, { kind: "component", type: ElderOverlayComponent, selector: "elder-overlay", inputs: ["originX", "originY", "overlayX", "overlayY", "offsetY", "offsetX", "backdrop", "backdropVisible", "origin", "positionStrategy", "overlaySize"], outputs: ["keydownEvents", "attachedChange"], exportAs: ["elderOverlay"] }, { kind: "component", type: ElderDialogPanelComponent, selector: "elder-dialog-panel" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: ElderOverlayTriggerDirective, selector: "[elderOverlayTrigger]", inputs: ["elderOverlayTrigger", "elderOverlayTriggerType", "elderOverlayTriggerEnabled"] }, { kind: "directive", type: ElderOverlayOriginDirective, selector: "[elderOverlayOrigin]", inputs: ["elderOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30259
+ `, isInline: true, dependencies: [{ kind: "component", type: ElderIntervalPickerComponent, selector: "elder-interval-picker", inputs: ["emitType", "autoEmitMode", "intervalInputMode", "showAnchor", "anchorReadOnly", "externalAnchorDateTime", "externalInterval"], outputs: ["intervalChange"] }, { kind: "component", type: ElderOverlayComponent, selector: "elder-overlay", inputs: ["originX", "originY", "overlayX", "overlayY", "offsetY", "offsetX", "backdrop", "backdropVisible", "origin", "positionStrategy", "overlaySize"], outputs: ["keydownEvents", "attachedChange"], exportAs: ["elderOverlay"] }, { kind: "component", type: ElderDialogPanelComponent, selector: "elder-dialog-panel" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: ElderOverlayTriggerDirective, selector: "[elderOverlayTrigger]", inputs: ["elderOverlayTrigger", "elderOverlayTriggerType", "elderOverlayTriggerEnabled"] }, { kind: "directive", type: ElderOverlayOriginDirective, selector: "[elderOverlayOrigin]", inputs: ["elderOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30267
30260
  }
30268
30261
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: ElderIntervalPickerToggleComponent, decorators: [{
30269
30262
  type: Component,