@coolon/angular-ui-powerups 16.1.0-alpha.298 → 16.1.0-alpha.299

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any -- command directive accepts arbitrary command shapes */
2
- import { Directive, ElementRef, Host, HostListener, Inject, Input, Optional } from '@angular/core';
2
+ import { ChangeDetectorRef, Directive, ElementRef, Host, HostListener, Inject, Input, Optional } from '@angular/core';
3
3
  import { MatButton } from '@angular/material/button';
4
4
  import { MatMenu, MatMenuItem } from '@angular/material/menu';
5
5
  import { assert, DelegatingValueModel, Dsl, GarbageCollector, lang, UnaryCommand } from '@coolon/pectin';
@@ -8,6 +8,7 @@ import * as i1 from "@angular/material/button";
8
8
  import * as i2 from "@angular/material/menu";
9
9
  export class CommandDirective extends GarbageCollector {
10
10
  elementRef;
11
+ changeDetector;
11
12
  _command;
12
13
  _commandEnabled = this.registerDisposable(new DelegatingValueModel().withDefault(false));
13
14
  matControl;
@@ -29,9 +30,10 @@ export class CommandDirective extends GarbageCollector {
29
30
  return this._commandParameter;
30
31
  }
31
32
  preventDefault = true;
32
- constructor(elementRef, matButton, matMenuItem, matMenu) {
33
+ constructor(elementRef, changeDetector, matButton, matMenuItem, matMenu) {
33
34
  super();
34
35
  this.elementRef = elementRef;
36
+ this.changeDetector = changeDetector;
35
37
  // Material buttons and menu items don't respond to the disabled binding so we
36
38
  // need to inject them from our host element and handle them manually.
37
39
  this.matControl = matButton || matMenuItem;
@@ -60,9 +62,18 @@ export class CommandDirective extends GarbageCollector {
60
62
  // for some reason mat-buttons kills the disabled host binding. It works on a regular button but for now
61
63
  // we need to do this. The set timeout is required to prevent the button getting a expression changed
62
64
  // when it's clicked.
65
+ //
66
+ // The Material control reads `disabled` in its own host bindings, which an OnPush view only reads
67
+ // again when it's checked, so the view is marked for check here. Without that, a check of the view
68
+ // between an earlier timeout and this one (the enabled state changing while a new input is applied)
69
+ // applied the earlier, stale state, and nothing checked it again: the button stayed disabled.
63
70
  if (this.matControl) {
64
71
  setTimeout(() => {
72
+ if (this.isDisposed()) {
73
+ return;
74
+ }
65
75
  this.matControl.disabled = !enabled;
76
+ this.changeDetector.markForCheck();
66
77
  }, 0);
67
78
  }
68
79
  if (!enabled) {
@@ -103,7 +114,7 @@ export class CommandDirective extends GarbageCollector {
103
114
  console.warn('disabled command clicked, ignoring.');
104
115
  }
105
116
  }
106
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandDirective, deps: [{ token: ElementRef }, { token: i1.MatButton, host: true, optional: true }, { token: i2.MatMenuItem, host: true, optional: true }, { token: i2.MatMenu, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
117
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandDirective, deps: [{ token: ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.MatButton, host: true, optional: true }, { token: i2.MatMenuItem, host: true, optional: true }, { token: i2.MatMenu, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
107
118
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: CommandDirective, selector: "[pectinCommand]", inputs: { pectinCommand: "pectinCommand", commandParameter: "commandParameter", preventDefault: "preventDefault" }, host: { listeners: { "click": "notifyClick($event)" } }, usesInheritance: true, ngImport: i0 });
108
119
  }
109
120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandDirective, decorators: [{
@@ -115,7 +126,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
115
126
  }], ctorParameters: function () { return [{ type: i0.ElementRef, decorators: [{
116
127
  type: Inject,
117
128
  args: [ElementRef]
118
- }] }, { type: i1.MatButton, decorators: [{
129
+ }] }, { type: i0.ChangeDetectorRef }, { type: i1.MatButton, decorators: [{
119
130
  type: Host
120
131
  }, {
121
132
  type: Optional
@@ -135,4 +146,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
135
146
  type: HostListener,
136
147
  args: ['click', ['$event']]
137
148
  }] } });
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9kaXJlY3RpdmVzL2NvbW1hbmQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZHQUE2RztBQUM3RyxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixJQUFJLEVBQ0osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsT0FBTyxFQUFFLFdBQVcsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBQyxNQUFNLEVBQVcsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBUyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQU12SCxNQUFNLE9BQU8sZ0JBQTBCLFNBQVEsZ0JBQWdCO0lBaUMvQjtJQS9CdEIsUUFBUSxDQUFpQztJQUN6QyxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksb0JBQW9CLEVBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRyxVQUFVLENBQTBCO0lBQ3BDLGFBQWEsQ0FBVTtJQUUvQixJQUNJLGFBQWEsQ0FBQyxPQUF1QztRQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FB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QUU7WUFDdkIsNEVBQTRFO1lBQzVFLHVCQUF1QjtZQUN2QixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7WUFDckMsSUFBSSxJQUFJLENBQUMsYUFBYSxZQUFZLFlBQVksRUFBRTtnQkFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDaEY7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUMzRDtTQUNGO2FBQU07WUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7U0FDckQ7SUFDSCxDQUFDO3VHQWhIVSxnQkFBZ0Isa0JBaUNqQixVQUFVOzJGQWpDVCxnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBSjVCLFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsaUJBQWlCO2lCQUM1Qjs7MEJBa0NJLE1BQU07MkJBQUMsVUFBVTs7MEJBQ2pCLElBQUk7OzBCQUFJLFFBQVE7OzBCQUNoQixJQUFJOzswQkFBSSxRQUFROzswQkFDaEIsUUFBUTs0Q0E1QlAsYUFBYTtzQkFEaEIsS0FBSztnQkFjRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBVUcsY0FBYztzQkFBdEIsS0FBSztnQkFrRU4sV0FBVztzQkFEVixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gY29tbWFuZCBkaXJlY3RpdmUgYWNjZXB0cyBhcmJpdHJhcnkgY29tbWFuZCBzaGFwZXMgKi9cbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdCxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdEJ1dHRvbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7TWF0TWVudSwgTWF0TWVudUl0ZW19IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHthc3NlcnQsIENvbW1hbmQsIERlbGVnYXRpbmdWYWx1ZU1vZGVsLCBEc2wsIEdhcmJhZ2VDb2xsZWN0b3IsIGxhbmcsIFRyYWNlLCBVbmFyeUNvbW1hbmR9IGZyb20gJ0Bjb29sb24vcGVjdGluJztcblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW3BlY3RpbkNvbW1hbmRdJ1xufSlcbmV4cG9ydCBjbGFzcyBDb21tYW5kRGlyZWN0aXZlPFAgPSBhbnk+IGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcblxuICBwcml2YXRlIF9jb21tYW5kOiBDb21tYW5kPGFueT4gfCBVbmFyeUNvbW1hbmQ8UD47XG4gIHByaXZhdGUgX2NvbW1hbmRFbmFibGVkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdWYWx1ZU1vZGVsPGJvb2xlYW4+KCkud2l0aERlZmF1bHQoZmFsc2UpKTtcbiAgcHJpdmF0ZSBtYXRDb250cm9sOiBNYXRCdXR0b24gfCBNYXRNZW51SXRlbTtcbiAgcHJpdmF0ZSBpc0luUG9wdXBNZW51OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBwZWN0aW5Db21tYW5kKGNvbW1hbmQ6IENvbW1hbmQ8YW55PiB8IFVuYXJ5Q29tbWFuZDxQPikge1xuICAgIHRoaXMuX2NvbW1hbmQgPSBjb21tYW5kO1xuICAgIHRoaXMuX2NvbW1hbmRFbmFibGVkLnNldERlbGVnYXRlKGNvbW1hbmQgPyBjb21tYW5kLmVuYWJsZWQkIDogbnVsbCk7XG4gIH1cblxuICBnZXQgcGVjdGluQ29tbWFuZCgpOiBDb21tYW5kPGFueT4gfCBVbmFyeUNvbW1hbmQ8UD4ge1xuICAgIHJldHVybiB0aGlzLl9jb21tYW5kO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29tbWFuZFBhcmFtZXRlcjogUDtcbiAgcHJpdmF0ZSBfY29tbWFuZFBhcmFtZXRlclByb3ZpZGVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbW1hbmRQYXJhbWV0ZXIodmFsdWU6IFApIHtcbiAgICB0aGlzLl9jb21tYW5kUGFyYW1ldGVyUHJvdmlkZWQgPSB0cnVlO1xuICAgIHRoaXMuX2NvbW1hbmRQYXJhbWV0ZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBjb21tYW5kUGFyYW1ldGVyKCk6IFAge1xuICAgIHJldHVybiB0aGlzLl9jb21tYW5kUGFyYW1ldGVyO1xuICB9XG5cbiAgQElucHV0KCkgcHJldmVudERlZmF1bHQgPSB0cnVlXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChFbGVtZW50UmVmKSBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgQEhvc3QoKSBAT3B0aW9uYWwoKSBtYXRCdXR0b246IE1hdEJ1dHRvbixcbiAgICBASG9zdCgpIEBPcHRpb25hbCgpIG1hdE1lbnVJdGVtOiBNYXRNZW51SXRlbSxcbiAgICBAT3B0aW9uYWwoKSBtYXRNZW51PzogTWF0TWVudVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIE1hdGVyaWFsIGJ1dHRvbnMgYW5kIG1lbnUgaXRlbXMgZG9uJ3QgcmVzcG9uZCB0byB0aGUgZGlzYWJsZWQgYmluZGluZyBzbyB3ZVxuICAgIC8vIG5lZWQgdG8gaW5qZWN0IHRoZW0gZnJvbSBvdXIgaG9zdCBlbGVtZW50IGFuZCBoYW5kbGUgdGhlbSBtYW51YWxseS5cbiAgICB0aGlzLm1hdENvbnRyb2wgPSBtYXRCdXR0b24gfHwgbWF0TWVudUl0ZW07XG4gICAgdGhpcy5pc0luUG9wdXBNZW51ID0gISFtYXRNZW51O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgYXNzZXJ0Lm5vdE5pbCh0aGlzLnBlY3RpbkNvbW1hbmQpO1xuICAgIGlmICh0aGlzLnBlY3RpbkNvbW1hbmQgaW5zdGFuY2VvZiBVbmFyeUNvbW1hbmQpIHtcbiAgICAgIGlmICghdGhpcy5fY29tbWFuZFBhcmFtZXRlclByb3ZpZGVkKSB7XG4gICAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKCdVbmFyeUNvbW1hbmRzIHJlcXVpcmUgdGhlIGNvbW1hbmQgcGFyYW1ldGVyIHRvIGJlIHNwZWNpZmllZC4nKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX2NvbW1hbmRQYXJhbWV0ZXJQcm92aWRlZCkge1xuICAgICAgICBsYW5nLmlsbGVnYWxTdGF0ZSgnY29tbWFuZCBwYXJhbWV0ZXJzIGFyZSBvbmx5IHN1cHBvcnRlZCBieSBVbmFyeUNvbW1hbmRzJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHt3aGVufSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB3aGVuKHRoaXMuX2NvbW1hbmRFbmFibGVkKS5jaGFuZ2VzKGVuYWJsZWQgPT4gdGhpcy51cGRhdGVFbmFibGVkU3RhdGUoZW5hYmxlZCksIHtcbiAgICAgIGluaXRpYWxWYWx1ZTogJ3RyaWdnZXJDaGFuZ2UnXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVFbmFibGVkU3RhdGUoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIC8vIGZvciBzb21lIHJlYXNvbiBtYXQtYnV0dG9ucyBraWxscyB0aGUgZGlzYWJsZWQgaG9zdCBiaW5kaW5nLiAgSXQgd29ya3Mgb24gYSByZWd1bGFyIGJ1dHRvbiBidXQgZm9yIG5vd1xuICAgIC8vIHdlIG5lZWQgdG8gZG8gdGhpcy4gVGhlIHNldCB0aW1lb3V0IGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgdGhlIGJ1dHRvbiBnZXR0aW5nIGEgZXhwcmVzc2lvbiBjaGFuZ2VkXG4gICAgLy8gd2hlbiBpdCdzIGNsaWNrZWQuXG4gICAgaWYgKHRoaXMubWF0Q29udHJvbCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMubWF0Q29udHJvbC5kaXNhYmxlZCA9ICFlbmFibGVkO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgLy8gTm90ZTpcbiAgICAgIC8vIFdlIGNhbid0IHVzZSBhIGhvc3QgYmluZGluZyBoZXJlIGZvciBkaXNhYmxlZCBhcyB0aGUgZGlyZWN0aXZlIGNhbiBiZSB1c2VkIG9uIGFyYml0cmFyeVxuICAgICAgLy8gY29tcG9uZW50cyAoZS5nLiBkaXZzKSBhbmQgdGhlIGNvbXBpbGVyIHdpbGwgYmFyZiBpZiB3ZSB1c2UgdGhlIGhvc3QgYmluZGluZy5cbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50YWdOYW1lID09PSAnQScpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdocmVmJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50YWdOYW1lID09PSAnQScpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdocmVmJywgJ2phdmFzY3JpcHQ6dm9pZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIG5vdGlmeUNsaWNrKCRldmVudDogRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNJblBvcHVwTWVudSkge1xuICAgICAgLy8gbWF0ZXJpYWwgcG9wdXAgbWVudXMgdXNlIGJ1YmJsaW5nIHRvIGNsb3NlIHNvIHdlIG5lZWQgdG8gbGV0IGl0IGJ1YmJsZSBvclxuICAgICAgLy8gdGhlIG1lbnUgd29uJ3QgY2xvc2VcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wZWN0aW5Db21tYW5kLmVuYWJsZWQkLnZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5wZWN0aW5Db21tYW5kIGluc3RhbmNlb2YgVW5hcnlDb21tYW5kKSB7XG4gICAgICAgIHRoaXMucGVjdGluQ29tbWFuZC53aXRoQ29udGV4dCh7ZXZlbnQ6ICRldmVudH0pLmV4ZWN1dGUodGhpcy5jb21tYW5kUGFyYW1ldGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGVjdGluQ29tbWFuZC53aXRoQ29udGV4dCh7ZXZlbnQ6ICRldmVudH0pLmV4ZWN1dGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdkaXNhYmxlZCBjb21tYW5kIGNsaWNrZWQsIGlnbm9yaW5nLicpO1xuICAgIH1cbiAgfVxufVxuIl19
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9kaXJlY3RpdmVzL2NvbW1hbmQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZHQUE2RztBQUM3RyxPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsSUFBSSxFQUNKLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUMsTUFBTSxFQUFXLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQVMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFNdkgsTUFBTSxPQUFPLGdCQUEwQixTQUFRLGdCQUFnQjtJQWlDL0I7SUFDWDtJQWhDWCxRQUFRLENBQWlDO0lBQ3pDLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxvQkFBb0IsRUFBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xHLFVBQVUsQ0FBMEI7SUFDcEMsYUFBYSxDQUFVO0lBRS9CLElBQ0ksYUFBYSxDQUFDLE9BQXVDO1FBQ3ZELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFFB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O3NCQURoQixLQUFLO2dCQWNGLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFVRyxjQUFjO3NCQUF0QixLQUFLO2dCQTRFTixXQUFXO3NCQURWLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBjb21tYW5kIGRpcmVjdGl2ZSBhY2NlcHRzIGFyYml0cmFyeSBjb21tYW5kIHNoYXBlcyAqL1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSG9zdCxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdEJ1dHRvbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7TWF0TWVudSwgTWF0TWVudUl0ZW19IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHthc3NlcnQsIENvbW1hbmQsIERlbGVnYXRpbmdWYWx1ZU1vZGVsLCBEc2wsIEdhcmJhZ2VDb2xsZWN0b3IsIGxhbmcsIFRyYWNlLCBVbmFyeUNvbW1hbmR9IGZyb20gJ0Bjb29sb24vcGVjdGluJztcblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW3BlY3RpbkNvbW1hbmRdJ1xufSlcbmV4cG9ydCBjbGFzcyBDb21tYW5kRGlyZWN0aXZlPFAgPSBhbnk+IGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcblxuICBwcml2YXRlIF9jb21tYW5kOiBDb21tYW5kPGFueT4gfCBVbmFyeUNvbW1hbmQ8UD47XG4gIHByaXZhdGUgX2NvbW1hbmRFbmFibGVkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdWYWx1ZU1vZGVsPGJvb2xlYW4+KCkud2l0aERlZmF1bHQoZmFsc2UpKTtcbiAgcHJpdmF0ZSBtYXRDb250cm9sOiBNYXRCdXR0b24gfCBNYXRNZW51SXRlbTtcbiAgcHJpdmF0ZSBpc0luUG9wdXBNZW51OiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBwZWN0aW5Db21tYW5kKGNvbW1hbmQ6IENvbW1hbmQ8YW55PiB8IFVuYXJ5Q29tbWFuZDxQPikge1xuICAgIHRoaXMuX2NvbW1hbmQgPSBjb21tYW5kO1xuICAgIHRoaXMuX2NvbW1hbmRFbmFibGVkLnNldERlbGVnYXRlKGNvbW1hbmQgPyBjb21tYW5kLmVuYWJsZWQkIDogbnVsbCk7XG4gIH1cblxuICBnZXQgcGVjdGluQ29tbWFuZCgpOiBDb21tYW5kPGFueT4gfCBVbmFyeUNvbW1hbmQ8UD4ge1xuICAgIHJldHVybiB0aGlzLl9jb21tYW5kO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29tbWFuZFBhcmFtZXRlcjogUDtcbiAgcHJpdmF0ZSBfY29tbWFuZFBhcmFtZXRlclByb3ZpZGVkID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbW1hbmRQYXJhbWV0ZXIodmFsdWU6IFApIHtcbiAgICB0aGlzLl9jb21tYW5kUGFyYW1ldGVyUHJvdmlkZWQgPSB0cnVlO1xuICAgIHRoaXMuX2NvbW1hbmRQYXJhbWV0ZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBjb21tYW5kUGFyYW1ldGVyKCk6IFAge1xuICAgIHJldHVybiB0aGlzLl9jb21tYW5kUGFyYW1ldGVyO1xuICB9XG5cbiAgQElucHV0KCkgcHJldmVudERlZmF1bHQgPSB0cnVlXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChFbGVtZW50UmVmKSBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEhvc3QoKSBAT3B0aW9uYWwoKSBtYXRCdXR0b246IE1hdEJ1dHRvbixcbiAgICBASG9zdCgpIEBPcHRpb25hbCgpIG1hdE1lbnVJdGVtOiBNYXRNZW51SXRlbSxcbiAgICBAT3B0aW9uYWwoKSBtYXRNZW51PzogTWF0TWVudVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIE1hdGVyaWFsIGJ1dHRvbnMgYW5kIG1lbnUgaXRlbXMgZG9uJ3QgcmVzcG9uZCB0byB0aGUgZGlzYWJsZWQgYmluZGluZyBzbyB3ZVxuICAgIC8vIG5lZWQgdG8gaW5qZWN0IHRoZW0gZnJvbSBvdXIgaG9zdCBlbGVtZW50IGFuZCBoYW5kbGUgdGhlbSBtYW51YWxseS5cbiAgICB0aGlzLm1hdENvbnRyb2wgPSBtYXRCdXR0b24gfHwgbWF0TWVudUl0ZW07XG4gICAgdGhpcy5pc0luUG9wdXBNZW51ID0gISFtYXRNZW51O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgYXNzZXJ0Lm5vdE5pbCh0aGlzLnBlY3RpbkNvbW1hbmQpO1xuICAgIGlmICh0aGlzLnBlY3RpbkNvbW1hbmQgaW5zdGFuY2VvZiBVbmFyeUNvbW1hbmQpIHtcbiAgICAgIGlmICghdGhpcy5fY29tbWFuZFBhcmFtZXRlclByb3ZpZGVkKSB7XG4gICAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKCdVbmFyeUNvbW1hbmRzIHJlcXVpcmUgdGhlIGNvbW1hbmQgcGFyYW1ldGVyIHRvIGJlIHNwZWNpZmllZC4nKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX2NvbW1hbmRQYXJhbWV0ZXJQcm92aWRlZCkge1xuICAgICAgICBsYW5nLmlsbGVnYWxTdGF0ZSgnY29tbWFuZCBwYXJhbWV0ZXJzIGFyZSBvbmx5IHN1cHBvcnRlZCBieSBVbmFyeUNvbW1hbmRzJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHt3aGVufSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB3aGVuKHRoaXMuX2NvbW1hbmRFbmFibGVkKS5jaGFuZ2VzKGVuYWJsZWQgPT4gdGhpcy51cGRhdGVFbmFibGVkU3RhdGUoZW5hYmxlZCksIHtcbiAgICAgIGluaXRpYWxWYWx1ZTogJ3RyaWdnZXJDaGFuZ2UnXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVFbmFibGVkU3RhdGUoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIC8vIGZvciBzb21lIHJlYXNvbiBtYXQtYnV0dG9ucyBraWxscyB0aGUgZGlzYWJsZWQgaG9zdCBiaW5kaW5nLiAgSXQgd29ya3Mgb24gYSByZWd1bGFyIGJ1dHRvbiBidXQgZm9yIG5vd1xuICAgIC8vIHdlIG5lZWQgdG8gZG8gdGhpcy4gVGhlIHNldCB0aW1lb3V0IGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgdGhlIGJ1dHRvbiBnZXR0aW5nIGEgZXhwcmVzc2lvbiBjaGFuZ2VkXG4gICAgLy8gd2hlbiBpdCdzIGNsaWNrZWQuXG4gICAgLy9cbiAgICAvLyBUaGUgTWF0ZXJpYWwgY29udHJvbCByZWFkcyBgZGlzYWJsZWRgIGluIGl0cyBvd24gaG9zdCBiaW5kaW5ncywgd2hpY2ggYW4gT25QdXNoIHZpZXcgb25seSByZWFkc1xuICAgIC8vIGFnYWluIHdoZW4gaXQncyBjaGVja2VkLCBzbyB0aGUgdmlldyBpcyBtYXJrZWQgZm9yIGNoZWNrIGhlcmUuIFdpdGhvdXQgdGhhdCwgYSBjaGVjayBvZiB0aGUgdmlld1xuICAgIC8vIGJldHdlZW4gYW4gZWFybGllciB0aW1lb3V0IGFuZCB0aGlzIG9uZSAodGhlIGVuYWJsZWQgc3RhdGUgY2hhbmdpbmcgd2hpbGUgYSBuZXcgaW5wdXQgaXMgYXBwbGllZClcbiAgICAvLyBhcHBsaWVkIHRoZSBlYXJsaWVyLCBzdGFsZSBzdGF0ZSwgYW5kIG5vdGhpbmcgY2hlY2tlZCBpdCBhZ2FpbjogdGhlIGJ1dHRvbiBzdGF5ZWQgZGlzYWJsZWQuXG4gICAgaWYgKHRoaXMubWF0Q29udHJvbCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzRGlzcG9zZWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1hdENvbnRyb2wuZGlzYWJsZWQgPSAhZW5hYmxlZDtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIC8vIE5vdGU6XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgYSBob3N0IGJpbmRpbmcgaGVyZSBmb3IgZGlzYWJsZWQgYXMgdGhlIGRpcmVjdGl2ZSBjYW4gYmUgdXNlZCBvbiBhcmJpdHJhcnlcbiAgICAgIC8vIGNvbXBvbmVudHMgKGUuZy4gZGl2cykgYW5kIHRoZSBjb21waWxlciB3aWxsIGJhcmYgaWYgd2UgdXNlIHRoZSBob3N0IGJpbmRpbmcuXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG4gICAgICBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICBpZiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsICdqYXZhc2NyaXB0OnZvaWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgfVxuXG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBub3RpZnlDbGljaygkZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmlzSW5Qb3B1cE1lbnUpIHtcbiAgICAgIC8vIG1hdGVyaWFsIHBvcHVwIG1lbnVzIHVzZSBidWJibGluZyB0byBjbG9zZSBzbyB3ZSBuZWVkIHRvIGxldCBpdCBidWJibGUgb3JcbiAgICAgIC8vIHRoZSBtZW51IHdvbid0IGNsb3NlXG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGVjdGluQ29tbWFuZC5lbmFibGVkJC52YWx1ZSkge1xuICAgICAgaWYgKHRoaXMucGVjdGluQ29tbWFuZCBpbnN0YW5jZW9mIFVuYXJ5Q29tbWFuZCkge1xuICAgICAgICB0aGlzLnBlY3RpbkNvbW1hbmQud2l0aENvbnRleHQoe2V2ZW50OiAkZXZlbnR9KS5leGVjdXRlKHRoaXMuY29tbWFuZFBhcmFtZXRlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlY3RpbkNvbW1hbmQud2l0aENvbnRleHQoe2V2ZW50OiAkZXZlbnR9KS5leGVjdXRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignZGlzYWJsZWQgY29tbWFuZCBjbGlja2VkLCBpZ25vcmluZy4nKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -163,6 +163,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
163
163
  /* eslint-disable @typescript-eslint/no-explicit-any -- command directive accepts arbitrary command shapes */
164
164
  class CommandDirective extends GarbageCollector {
165
165
  elementRef;
166
+ changeDetector;
166
167
  _command;
167
168
  _commandEnabled = this.registerDisposable(new DelegatingValueModel().withDefault(false));
168
169
  matControl;
@@ -184,9 +185,10 @@ class CommandDirective extends GarbageCollector {
184
185
  return this._commandParameter;
185
186
  }
186
187
  preventDefault = true;
187
- constructor(elementRef, matButton, matMenuItem, matMenu) {
188
+ constructor(elementRef, changeDetector, matButton, matMenuItem, matMenu) {
188
189
  super();
189
190
  this.elementRef = elementRef;
191
+ this.changeDetector = changeDetector;
190
192
  // Material buttons and menu items don't respond to the disabled binding so we
191
193
  // need to inject them from our host element and handle them manually.
192
194
  this.matControl = matButton || matMenuItem;
@@ -215,9 +217,18 @@ class CommandDirective extends GarbageCollector {
215
217
  // for some reason mat-buttons kills the disabled host binding. It works on a regular button but for now
216
218
  // we need to do this. The set timeout is required to prevent the button getting a expression changed
217
219
  // when it's clicked.
220
+ //
221
+ // The Material control reads `disabled` in its own host bindings, which an OnPush view only reads
222
+ // again when it's checked, so the view is marked for check here. Without that, a check of the view
223
+ // between an earlier timeout and this one (the enabled state changing while a new input is applied)
224
+ // applied the earlier, stale state, and nothing checked it again: the button stayed disabled.
218
225
  if (this.matControl) {
219
226
  setTimeout(() => {
227
+ if (this.isDisposed()) {
228
+ return;
229
+ }
220
230
  this.matControl.disabled = !enabled;
231
+ this.changeDetector.markForCheck();
221
232
  }, 0);
222
233
  }
223
234
  if (!enabled) {
@@ -258,7 +269,7 @@ class CommandDirective extends GarbageCollector {
258
269
  console.warn('disabled command clicked, ignoring.');
259
270
  }
260
271
  }
261
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandDirective, deps: [{ token: ElementRef }, { token: i2.MatButton, host: true, optional: true }, { token: i2$1.MatMenuItem, host: true, optional: true }, { token: i2$1.MatMenu, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
272
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandDirective, deps: [{ token: ElementRef }, { token: i0.ChangeDetectorRef }, { token: i2.MatButton, host: true, optional: true }, { token: i2$1.MatMenuItem, host: true, optional: true }, { token: i2$1.MatMenu, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
262
273
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: CommandDirective, selector: "[pectinCommand]", inputs: { pectinCommand: "pectinCommand", commandParameter: "commandParameter", preventDefault: "preventDefault" }, host: { listeners: { "click": "notifyClick($event)" } }, usesInheritance: true, ngImport: i0 });
263
274
  }
264
275
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: CommandDirective, decorators: [{
@@ -270,7 +281,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
270
281
  }], ctorParameters: function () { return [{ type: i0.ElementRef, decorators: [{
271
282
  type: Inject,
272
283
  args: [ElementRef]
273
- }] }, { type: i2.MatButton, decorators: [{
284
+ }] }, { type: i0.ChangeDetectorRef }, { type: i2.MatButton, decorators: [{
274
285
  type: Host
275
286
  }, {
276
287
  type: Optional