@ssv/ngx.command 3.0.0 → 3.1.0-dev.45

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.
package/README.md CHANGED
@@ -33,13 +33,19 @@ In order to start working with Command, you need to create a new instance of it.
33
33
  ```ts
34
34
  import { command, commandAsync } from "@ssv/ngx.command";
35
35
 
36
- isValid$ = new BehaviorSubject(false);
36
+ const isValid = signal(false);
37
+ const isValid$ = new BehaviorSubject(false);
37
38
 
38
39
  // non async
39
- saveCmd = command(() => this.save()), this.isValid$);
40
+ saveCmd = command(() => this.save(), isValid);
40
41
 
41
42
  // async - returns an observable/promise.
42
- saveCmd = commandAsync(() => Observable.timer(2000), this.isValid$);
43
+ saveCmd = commandAsync(() => Observable.timer(2000), isValid);
44
+
45
+ // can execute diff ways
46
+ saveCmd = command(() => this.save(), () => isValid()); // reactive fn (signal)
47
+ saveCmd = command(() => this.save(), isValid); // signal
48
+ saveCmd = command(() => this.save(), isValid$); // rx
43
49
  ```
44
50
 
45
51
  ## Command Attribute (Directive)
@@ -127,12 +133,12 @@ Command creator ref, directive which allows creating Command in the template and
127
133
 
128
134
  ## Utils
129
135
 
130
- ### canExecuteFromNgForm
136
+ ### canExecuteFromNgForm/canExecuteFromSignals
131
137
  In order to use with `NgForm` easily, you can use the following utility method.
132
138
  This will make canExecute respond to `form.valid` and for `form.dirty` - also can optionally disable validity or dirty.
133
139
 
134
140
  ```ts
135
- import { commandAsync, canExecuteFromNgForm } from "@ssv/ngx.command";
141
+ import { commandAsync, canExecuteFromNgForm, canExecuteFromSignals } from "@ssv/ngx.command";
136
142
 
137
143
  loginCmd = commandAsync(x => this.login(), canExecuteFromNgForm(this.form));
138
144
 
@@ -141,6 +147,8 @@ loginCmd = commandAsync(x => this.login(), canExecuteFromNgForm(this.form, {
141
147
  dirty: false
142
148
  }));
143
149
 
150
+ // similar functionality using custom signals (or form which provide signals)
151
+ loginCmd = commandAsync(x => this.login(), canExecuteFromSignals({dirty: $dirty, valid: $valid}));
144
152
  ```
145
153
 
146
154
 
package/command.d.ts CHANGED
@@ -18,7 +18,7 @@ export declare function commandAsync(execute: ExecuteAsyncFn, canExecute$?: CanE
18
18
  export declare function command(execute: ExecuteFn, canExecute$?: CanExecute, opts?: CommandCreateOptions): Command;
19
19
  /**
20
20
  * Command object used to encapsulate information which is needed to perform an action.
21
- * @deprecated Use {@link command} or {@link commandAsync} instead.
21
+ * @deprecated Use {@link command} or {@link commandAsync} instead for creating instances.
22
22
  */
23
23
  export declare class Command implements ICommand {
24
24
  /** Determines whether the command is currently executing, as a snapshot value. */
package/command.util.d.ts CHANGED
@@ -1,6 +1,7 @@
1
- import { AbstractControl, AbstractControlDirective } from "@angular/forms";
1
+ import { AbstractControl } from "@angular/forms";
2
2
  import { Observable } from "rxjs";
3
3
  import { CommandCreator, ICommand } from "./command.model";
4
+ import { type Signal } from "@angular/core";
4
5
  /** Determines whether the arg object is of type `Command`. */
5
6
  export declare function isCommand(arg: unknown): arg is ICommand;
6
7
  /** Determines whether the arg object is of type `CommandCreator`. */
@@ -11,5 +12,10 @@ export interface CanExecuteFormOptions {
11
12
  /** Determines whether to check whether UI has been touched. (defaults: true) */
12
13
  dirty?: boolean;
13
14
  }
14
- /** Get form is valid as an observable. */
15
- export declare function canExecuteFromNgForm(form: AbstractControl | AbstractControlDirective, options?: CanExecuteFormOptions): Observable<boolean>;
15
+ /** Get can execute from form validity/pristine as an observable. */
16
+ export declare function canExecuteFromNgForm(form: AbstractControl, options?: CanExecuteFormOptions): Observable<boolean>;
17
+ /** Can executed based on valid/dirty signal inputs. */
18
+ export declare function canExecuteFromSignals(signals: {
19
+ valid: Signal<boolean>;
20
+ dirty: Signal<boolean>;
21
+ }, options?: CanExecuteFormOptions): Signal<boolean>;
@@ -29,7 +29,7 @@ export function command(execute, canExecute$, opts) {
29
29
  }
30
30
  /**
31
31
  * Command object used to encapsulate information which is needed to perform an action.
32
- * @deprecated Use {@link command} or {@link commandAsync} instead.
32
+ * @deprecated Use {@link command} or {@link commandAsync} instead for creating instances.
33
33
  */
34
34
  export class Command {
35
35
  /** Determines whether the command is currently executing, as a snapshot value. */
@@ -157,4 +157,4 @@ export class CommandAsync extends Command {
157
157
  super(execute, canExecute$, true);
158
158
  }
159
159
  }
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbmd4LmNvbW1hbmQvc3JjL2NvbW1hbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFDTSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFDNUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUN2RCxNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVcxRCxNQUFNLDZCQUE2QixHQUF5QixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUU5RTs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzNCLE9BQXVCLEVBQ3ZCLFdBQXdCLEVBQ3hCLElBQTRDO0lBRTVDLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUM1SCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUN0QixPQUFrQixFQUNsQixXQUF3QixFQUN4QixJQUEyQjtJQUUzQixJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3JCLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUUsUUFBUSxJQUFJLE1BQU0s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Q0YsR0FBRyxDQUNGLEdBQUcsRUFBRTtZQUNKLDZEQUE2RDtZQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQ0QsQ0FDRCxDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0NBRUQ7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxPQUFPO0lBRXhDLFlBQ0MsT0FBdUIsRUFDdkIsV0FBd0I7UUFFeEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUVEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtcblx0T2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgU3Vic2NyaXB0aW9uLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIG9mLCBFTVBUWSxcblx0dGFwLCBtYXAsIGZpbHRlciwgc3dpdGNoTWFwLCBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgdGFrZSxcbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB0eXBlIHsgSUNvbW1hbmQgfSBmcm9tIFwiLi9jb21tYW5kLm1vZGVsXCI7XG5pbXBvcnQgeyBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGNvbXB1dGVkLCBEZXN0cm95UmVmLCBpbmplY3QsIEluamVjdG9yLCBpc1NpZ25hbCwgdHlwZSBTaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wXCI7XG5cbmV4cG9ydCB0eXBlIEV4ZWN1dGVGbiA9ICguLi5hcmdzOiBhbnlbXSkgPT4gdW5rbm93bjtcbmV4cG9ydCB0eXBlIEV4ZWN1dGVBc3luY0ZuID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBPYnNlcnZhYmxlPHVua25vd24+IHwgUHJvbWlzZTx1bmtub3duPjtcbmV4cG9ydCB0eXBlIENhbkV4ZWN1dGUgPSAoKCkgPT4gYm9vbGVhbikgfCBTaWduYWw8Ym9vbGVhbj4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRDcmVhdGVPcHRpb25zIHtcblx0aXNBc3luYzogYm9vbGVhbixcblx0aW5qZWN0b3I/OiBJbmplY3Rvcjtcbn1cblxuY29uc3QgQ09NTUFORF9BU1lOQ19ERUZBVUxUX09QVElPTlM6IENvbW1hbmRDcmVhdGVPcHRpb25zID0geyBpc0FzeW5jOiB0cnVlIH07XG5cbi8qKiBDcmVhdGVzIGFuIGFzeW5jIHtAbGluayBDb21tYW5kfS4gTXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBpbmplY3Rpb24gY29udGV4dC5cbiAqIE5PVEU6IHRoaXMgYXV0byBpbmplY3RzIGBEZXN0cm95UmVmYCBhbmQgaGFuZGxlcyBhdXRvIGRlc3Ryb3kuIHtAbGluayBJQ29tbWFuZC5hdXRvRGVzdHJveX0gc2hvdWxkIG5vdCBiZSB1c2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEFzeW5jKFxuXHRleGVjdXRlOiBFeGVjdXRlQXN5bmNGbixcblx0Y2FuRXhlY3V0ZSQ/OiBDYW5FeGVjdXRlLFxuXHRvcHRzPzogT21pdDxDb21tYW5kQ3JlYXRlT3B0aW9ucywgXCJpc0FzeW5jXCI+LFxuKTogQ29tbWFuZCB7XG5cdHJldHVybiBjb21tYW5kKGV4ZWN1dGUsIGNhbkV4ZWN1dGUkLCBvcHRzID8geyAuLi5vcHRzLCAuLi5DT01NQU5EX0FTWU5DX0RFRkFVTFRfT1BUSU9OUyB9IDogQ09NTUFORF9BU1lOQ19ERUZBVUxUX09QVElPTlMpO1xufVxuXG4vKiogQ3JlYXRlcyBhIHtAbGluayBDb21tYW5kfS4gTXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBpbmplY3Rpb24gY29udGV4dC5cbiAqIE5PVEU6IHRoaXMgYXV0byBpbmplY3RzIGBEZXN0cm95UmVmYCBhbmQgaGFuZGxlcyBhdXRvIGRlc3Ryb3kuIHtAbGluayBJQ29tbWFuZC5hdXRvRGVzdHJveX0gc2hvdWxkIG5vdCBiZSB1c2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZChcblx0ZXhlY3V0ZTogRXhlY3V0ZUZuLFxuXHRjYW5FeGVjdXRlJD86IENhbkV4ZWN1dGUsXG5cdG9wdHM/OiBDb21tYW5kQ3JlYXRlT3B0aW9ucyxcbik6IENvbW1hbmQge1xuXHRpZiAoIW9wdHM/LmluamVjdG9yKSB7XG5cdFx0YXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGNvbW1hbmQpO1xuXHR9XG5cdGNvbnN0IGluamVjdG9yID0gb3B0cz8uaW5qZWN0b3IgPz8gaW5qZWN0KEluamVjdG9yKTtcblx0Y29uc3QgaXNBc3luYyA9IG9wdHM/LmlzQXN5bmMgPz8gZmFsc2U7XG5cdGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3Rvci5nZXQoRGVzdHJveVJlZik7XG5cdGNvbnN0IGNtZCA9IG5ldyBDb21tYW5kKGV4ZWN1dGUsIGNhbkV4ZWN1dGUkLCBpc0FzeW5jKTtcblx0Y21kLmF1dG9EZXN0cm95ID0gZmFsc2U7XG5cblx0ZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuXHRcdC8vIGNvbnNvbGUud2FybihcIltjb21tYW5kOjpkZXN0cm95XVwiKTtcblx0XHRjbWQuZGVzdHJveSgpO1xuXHR9KTtcblx0cmV0dXJuIGNtZDtcbn1cblxuLyoqXG4gKiBDb21tYW5kIG9iamVjdCB1c2VkIHRvIGVuY2Fwc3VsYXRlIGluZm9ybWF0aW9uIHdoaWNoIGlzIG5lZWRlZCB0byBwZXJmb3JtIGFuIGFjdGlvbi5cbiAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgY29tbWFuZH0gb3Ige0BsaW5rIGNvbW1hbmRBc3luY30gaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbW1hbmQgaW1wbGVtZW50cyBJQ29tbWFuZCB7XG5cblx0LyoqIERldGVybWluZXMgd2hldGhlciB0aGUgY29tbWFuZCBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLCBhcyBhIHNuYXBzaG90IHZhbHVlLiAqL1xuXHRnZXQgaXNFeGVjdXRpbmcoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzRXhlY3V0aW5nO1xuXHR9XG5cblx0LyoqIERldGVybWluZXMgd2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZSBvciBub3QsIGFzIGEgc25hcHNob3QgdmFsdWUuICovXG5cdGdldCBjYW5FeGVjdXRlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9jYW5FeGVjdXRlO1xuXHR9XG5cblx0LyoqIERldGVybWluZXMgd2hldGhlciB0aGUgY29tbWFuZCBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLCBhcyBhbiBvYnNlcnZhYmxlLiAqL1xuXHRnZXQgaXNFeGVjdXRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiB0aGlzLl9pc0V4ZWN1dGluZyQuYXNPYnNlcnZhYmxlKCk7XG5cdH1cblxuXHQvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGF1dG8gZGVzdHJveSB3aGVuIGhhdmluZyAwIHN1YnNjcmliZXJzLiAqL1xuXHRhdXRvRGVzdHJveSA9IHRydWU7XG5cblx0LyoqIERldGVybWluZXMgd2hldGhlciB0aGUgY29tbWFuZCBjYW4gZXhlY3V0ZSBvciBub3QsIGFzIGFuIG9ic2VydmFibGUuICovXG5cdHJlYWRvbmx5IGNhbkV4ZWN1dGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG5cdHByaXZhdGUgX2lzRXhlY3V0aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXHRwcml2YXRlIF9pc0V4ZWN1dGluZyA9IGZhbHNlO1xuXHRwcml2YXRlIF9jYW5FeGVjdXRlID0gdHJ1ZTtcblx0cHJpdmF0ZSBleGVjdXRpb25QaXBlJCA9IG5ldyBTdWJqZWN0PHVua25vd25bXSB8IHVuZGVmaW5lZD4oKTtcblx0cHJpdmF0ZSBpc0V4ZWN1dGluZyQkID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXHRwcml2YXRlIGNhbkV4ZWN1dGUkJCA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblx0cHJpdmF0ZSBleGVjdXRpb25QaXBlJCQgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cdHByaXZhdGUgc3Vic2NyaWJlcnNDb3VudCA9IDA7XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgQ29tbWFuZC5cblx0ICpcblx0ICogQHBhcmFtIGV4ZWN1dGUgRXhlY3V0ZSBmdW5jdGlvbiB0byBpbnZva2UgLSB1c2UgYGlzQXN5bmM6IHRydWVgIHdoZW4gYE9ic2VydmFibGU8YW55PmAuXG5cdCAqIEBwYXJhbSBjYW5FeGVjdXRlIE9ic2VydmFibGUgd2hpY2ggZGV0ZXJtaW5lcyB3aGV0aGVyIGl0IGNhbiBleGVjdXRlIG9yIG5vdC5cblx0ICogQHBhcmFtIGlzQXN5bmMgSW5kaWNhdGVzIHRoYXQgdGhlIGV4ZWN1dGUgZnVuY3Rpb24gaXMgYXN5bmMgZS5nLiBPYnNlcnZhYmxlLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0ZXhlY3V0ZTogRXhlY3V0ZUZuLFxuXHRcdGNhbkV4ZWN1dGUkPzogQ2FuRXhlY3V0ZSxcblx0XHRpc0FzeW5jPzogYm9vbGVhbixcblx0XHRpbmplY3Rvcj86IEluamVjdG9yLFxuXHQpIHtcblx0XHRpZiAoY2FuRXhlY3V0ZSQpIHtcblx0XHRcdGNvbnN0IGNhbkV4ZWN1dGUgPSB0eXBlb2YgY2FuRXhlY3V0ZSQgPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0XHQ/IGNvbXB1dGVkKGNhbkV4ZWN1dGUkKVxuXHRcdFx0XHQ6IGNhbkV4ZWN1dGUkO1xuXHRcdFx0dGhpcy5jYW5FeGVjdXRlJCA9IGNvbWJpbmVMYXRlc3QoW1xuXHRcdFx0XHR0aGlzLl9pc0V4ZWN1dGluZyQsXG5cdFx0XHRcdGlzU2lnbmFsKGNhbkV4ZWN1dGUpID8gdG9PYnNlcnZhYmxlKGNhbkV4ZWN1dGUsIHsgaW5qZWN0b3IgfSkgOiBjYW5FeGVjdXRlXG5cdFx0XHRdKS5waXBlKFxuXHRcdFx0XHRtYXAoKFtpc0V4ZWN1dGluZywgY2FuRXhlY3V0ZVJlc3VsdF0pID0+IHtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcIltjb21tYW5kOjpjb21iaW5lTGF0ZXN0JF0gdXBkYXRlIVwiLCB7IGlzRXhlY3V0aW5nLCBjYW5FeGVjdXRlUmVzdWx0IH0pO1xuXHRcdFx0XHRcdHRoaXMuX2lzRXhlY3V0aW5nID0gaXNFeGVjdXRpbmc7XG5cdFx0XHRcdFx0dGhpcy5fY2FuRXhlY3V0ZSA9ICFpc0V4ZWN1dGluZyAmJiAhIWNhbkV4ZWN1dGVSZXN1bHQ7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuX2NhbkV4ZWN1dGU7XG5cdFx0XHRcdH0pLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMuY2FuRXhlY3V0ZSQkID0gdGhpcy5jYW5FeGVjdXRlJC5zdWJzY3JpYmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jYW5FeGVjdXRlJCA9IHRoaXMuX2lzRXhlY3V0aW5nJC5waXBlKFxuXHRcdFx0XHRtYXAoeCA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY2FuRXhlY3V0ZSA9ICF4O1xuXHRcdFx0XHRcdHRoaXMuX2NhbkV4ZWN1dGUgPSBjYW5FeGVjdXRlO1xuXHRcdFx0XHRcdHJldHVybiBjYW5FeGVjdXRlO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRcdHRoaXMuaXNFeGVjdXRpbmckJCA9IHRoaXMuX2lzRXhlY3V0aW5nJFxuXHRcdFx0XHQucGlwZSh0YXAoeCA9PiB0aGlzLl9pc0V4ZWN1dGluZyA9IHgpKVxuXHRcdFx0XHQuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXHRcdHRoaXMuZXhlY3V0aW9uUGlwZSQkID0gdGhpcy5idWlsZEV4ZWN1dGlvblBpcGUoZXhlY3V0ZSwgaXNBc3luYykuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHQvKiogRXhlY3V0ZSBmdW5jdGlvbiB0byBpbnZva2UuICovXG5cdGV4ZWN1dGUoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG5cdFx0Ly8gY29uc29sZS53YXJuKFwiW2NvbW1hbmQ6OmV4ZWN1dGVdXCIsIGFyZ3MpO1xuXHRcdHRoaXMuZXhlY3V0aW9uUGlwZSQubmV4dChhcmdzKTtcblx0fVxuXG5cdC8qKiBEaXNwb3NlcyBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgc3Vic2NyaXB0aW9ucy4gKi9cblx0ZGVzdHJveSgpOiB2b2lkIHtcblx0XHQvLyBjb25zb2xlLndhcm4oXCJbY29tbWFuZDo6ZGVzdHJveV1cIik7XG5cdFx0dGhpcy5leGVjdXRpb25QaXBlJCQudW5zdWJzY3JpYmUoKTtcblx0XHR0aGlzLmNhbkV4ZWN1dGUkJC51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMuaXNFeGVjdXRpbmckJC51bnN1YnNjcmliZSgpO1xuXHR9XG5cblx0c3Vic2NyaWJlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3Vic2NyaWJlcnNDb3VudCsrO1xuXHR9XG5cblx0dW5zdWJzY3JpYmUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdWJzY3JpYmVyc0NvdW50LS07XG5cdFx0Ly8gY29uc29sZS5sb2coXCJbY29tbWFuZDo6dW5zdWJzY3JpYmVdXCIsIHsgYXV0b0Rlc3Ryb3k6IHRoaXMuYXV0b0Rlc3Ryb3ksIHN1YnNjcmliZXJzQ291bnQ6IHRoaXMuc3Vic2NyaWJlcnNDb3VudCB9KTtcblx0XHRpZiAodGhpcy5hdXRvRGVzdHJveSAmJiB0aGlzLnN1YnNjcmliZXJzQ291bnQgPD0gMCkge1xuXHRcdFx0dGhpcy5kZXN0cm95KCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBidWlsZEV4ZWN1dGlvblBpcGUoZXhlY3V0ZTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gYW55LCBpc0FzeW5jPzogYm9vbGVhbik6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuXHRcdGxldCBwaXBlJCA9IHRoaXMuZXhlY3V0aW9uUGlwZSQucGlwZShcblx0XHRcdC8vIHRhcCh4ID0+IGNvbnNvbGUud2FybihcIj4+Pj4gZXhlY3V0aW9uUGlwZVwiLCB0aGlzLl9jYW5FeGVjdXRlKSksXG5cdFx0XHRmaWx0ZXIoKCkgPT4gdGhpcy5fY2FuRXhlY3V0ZSksXG5cdFx0XHR0YXAoKCkgPT4ge1xuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcIltjb21tYW5kOjpleGVjdXRpb25QaXBlJF0gZG8jMSAtIHNldCBleGVjdXRlXCIsIHsgYXJnczogeCB9KTtcblx0XHRcdFx0dGhpcy5faXNFeGVjdXRpbmckLm5leHQodHJ1ZSk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHRjb25zdCBleGVjRm4gPSBpc0FzeW5jXG5cdFx0XHQ/IHN3aXRjaE1hcDx1bmtub3duW10gfCB1bmRlZmluZWQsIGFueVtdPihhcmdzID0+IHtcblx0XHRcdFx0aWYgKGFyZ3MpIHtcblx0XHRcdFx0XHRyZXR1cm4gZXhlY3V0ZSguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZXhlY3V0ZSgpO1xuXHRcdFx0fSlcblx0XHRcdDogdGFwKChhcmdzOiB1bmtub3duW10gfCB1bmRlZmluZWQpID0+IHtcblx0XHRcdFx0aWYgKGFyZ3MpIHtcblx0XHRcdFx0XHRleGVjdXRlKC4uLmFyZ3MpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRleGVjdXRlKCk7XG5cdFx0XHR9KTtcblxuXHRcdHBpcGUkID0gcGlwZSQucGlwZShcblx0XHRcdHN3aXRjaE1hcChhcmdzID0+IG9mKGFyZ3MpLnBpcGUoXG5cdFx0XHRcdGV4ZWNGbixcblx0XHRcdFx0ZmluYWxpemUoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiW2NvbW1hbmQ6OmV4ZWN1dGlvblBpcGUkXSAgZmluYWxpemUgaW5uZXIjMSAtIHNldCBpZGxlXCIpO1xuXHRcdFx0XHRcdHRoaXMuX2lzRXhlY3V0aW5nJC5uZXh0KGZhbHNlKTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdHRha2UoMSksXG5cdFx0XHRcdGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJVbmhhbmRsZWQgZXhlY3V0ZSBlcnJvclwiLCBlcnJvcik7XG5cdFx0XHRcdFx0cmV0dXJuIEVNUFRZO1xuXHRcdFx0XHR9KSxcblx0XHRcdCkpLFxuXHRcdFx0dGFwKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJbY29tbWFuZDo6ZXhlY3V0aW9uUGlwZSRdIHRhcCMyIC0gc2V0IGlkbGVcIik7XG5cdFx0XHRcdFx0dGhpcy5faXNFeGVjdXRpbmckLm5leHQoZmFsc2UpO1xuXHRcdFx0XHR9LFxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0cmV0dXJuIHBpcGUkO1xuXHR9XG5cbn1cblxuLyoqXG4gKiBBc3luYyBDb21tYW5kIG9iamVjdCB1c2VkIHRvIGVuY2Fwc3VsYXRlIGluZm9ybWF0aW9uIHdoaWNoIGlzIG5lZWRlZCB0byBwZXJmb3JtIGFuIGFjdGlvbixcbiAqIHdoaWNoIHRha2VzIGFuIGV4ZWN1dGUgZnVuY3Rpb24gYXMgT2JzZXJ2YWJsZS9Qcm9taXNlLlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBjb21tYW5kQXN5bmN9IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21tYW5kQXN5bmMgZXh0ZW5kcyBDb21tYW5kIHtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRleGVjdXRlOiBFeGVjdXRlQXN5bmNGbixcblx0XHRjYW5FeGVjdXRlJD86IENhbkV4ZWN1dGUsXG5cdCkge1xuXHRcdHN1cGVyKGV4ZWN1dGUsIGNhbkV4ZWN1dGUkLCB0cnVlKTtcblx0fVxuXG59XG4iXX0=
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbmd4LmNvbW1hbmQvc3JjL2NvbW1hbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFDTSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFDNUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxHQUN2RCxNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQVcxRCxNQUFNLDZCQUE2QixHQUF5QixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUU5RTs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzNCLE9BQXVCLEVBQ3ZCLFdBQXdCLEVBQ3hCLElBQTRDO0lBRTVDLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUM1SCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUN0QixPQUFrQixFQUNsQixXQUF3QixFQUN4QixJQUEyQjtJQUUzQixJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3JCLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUUsUUFBUSxJQUFJLE1BQU0s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Q0YsR0FBRyxDQUNGLEdBQUcsRUFBRTtZQUNKLDZEQUE2RDtZQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQ0QsQ0FDRCxDQUFDO1FBQ0YsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0NBRUQ7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxPQUFPO0lBRXhDLFlBQ0MsT0FBdUIsRUFDdkIsV0FBd0I7UUFFeEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUVEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHtcblx0T2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgU3Vic2NyaXB0aW9uLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIG9mLCBFTVBUWSxcblx0dGFwLCBtYXAsIGZpbHRlciwgc3dpdGNoTWFwLCBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgdGFrZSxcbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB0eXBlIHsgSUNvbW1hbmQgfSBmcm9tIFwiLi9jb21tYW5kLm1vZGVsXCI7XG5pbXBvcnQgeyBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGNvbXB1dGVkLCBEZXN0cm95UmVmLCBpbmplY3QsIEluamVjdG9yLCBpc1NpZ25hbCwgdHlwZSBTaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wXCI7XG5cbmV4cG9ydCB0eXBlIEV4ZWN1dGVGbiA9ICguLi5hcmdzOiBhbnlbXSkgPT4gdW5rbm93bjtcbmV4cG9ydCB0eXBlIEV4ZWN1dGVBc3luY0ZuID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBPYnNlcnZhYmxlPHVua25vd24+IHwgUHJvbWlzZTx1bmtub3duPjtcbmV4cG9ydCB0eXBlIENhbkV4ZWN1dGUgPSAoKCkgPT4gYm9vbGVhbikgfCBTaWduYWw8Ym9vbGVhbj4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRDcmVhdGVPcHRpb25zIHtcblx0aXNBc3luYzogYm9vbGVhbixcblx0aW5qZWN0b3I/OiBJbmplY3Rvcjtcbn1cblxuY29uc3QgQ09NTUFORF9BU1lOQ19ERUZBVUxUX09QVElPTlM6IENvbW1hbmRDcmVhdGVPcHRpb25zID0geyBpc0FzeW5jOiB0cnVlIH07XG5cbi8qKiBDcmVhdGVzIGFuIGFzeW5jIHtAbGluayBDb21tYW5kfS4gTXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBpbmplY3Rpb24gY29udGV4dC5cbiAqIE5PVEU6IHRoaXMgYXV0byBpbmplY3RzIGBEZXN0cm95UmVmYCBhbmQgaGFuZGxlcyBhdXRvIGRlc3Ryb3kuIHtAbGluayBJQ29tbWFuZC5hdXRvRGVzdHJveX0gc2hvdWxkIG5vdCBiZSB1c2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEFzeW5jKFxuXHRleGVjdXRlOiBFeGVjdXRlQXN5bmNGbixcblx0Y2FuRXhlY3V0ZSQ/OiBDYW5FeGVjdXRlLFxuXHRvcHRzPzogT21pdDxDb21tYW5kQ3JlYXRlT3B0aW9ucywgXCJpc0FzeW5jXCI+LFxuKTogQ29tbWFuZCB7XG5cdHJldHVybiBjb21tYW5kKGV4ZWN1dGUsIGNhbkV4ZWN1dGUkLCBvcHRzID8geyAuLi5vcHRzLCAuLi5DT01NQU5EX0FTWU5DX0RFRkFVTFRfT1BUSU9OUyB9IDogQ09NTUFORF9BU1lOQ19ERUZBVUxUX09QVElPTlMpO1xufVxuXG4vKiogQ3JlYXRlcyBhIHtAbGluayBDb21tYW5kfS4gTXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBpbmplY3Rpb24gY29udGV4dC5cbiAqIE5PVEU6IHRoaXMgYXV0byBpbmplY3RzIGBEZXN0cm95UmVmYCBhbmQgaGFuZGxlcyBhdXRvIGRlc3Ryb3kuIHtAbGluayBJQ29tbWFuZC5hdXRvRGVzdHJveX0gc2hvdWxkIG5vdCBiZSB1c2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZChcblx0ZXhlY3V0ZTogRXhlY3V0ZUZuLFxuXHRjYW5FeGVjdXRlJD86IENhbkV4ZWN1dGUsXG5cdG9wdHM/OiBDb21tYW5kQ3JlYXRlT3B0aW9ucyxcbik6IENvbW1hbmQge1xuXHRpZiAoIW9wdHM/LmluamVjdG9yKSB7XG5cdFx0YXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGNvbW1hbmQpO1xuXHR9XG5cdGNvbnN0IGluamVjdG9yID0gb3B0cz8uaW5qZWN0b3IgPz8gaW5qZWN0KEluamVjdG9yKTtcblx0Y29uc3QgaXNBc3luYyA9IG9wdHM/LmlzQXN5bmMgPz8gZmFsc2U7XG5cdGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3Rvci5nZXQoRGVzdHJveVJlZik7XG5cdGNvbnN0IGNtZCA9IG5ldyBDb21tYW5kKGV4ZWN1dGUsIGNhbkV4ZWN1dGUkLCBpc0FzeW5jKTtcblx0Y21kLmF1dG9EZXN0cm95ID0gZmFsc2U7XG5cblx0ZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuXHRcdC8vIGNvbnNvbGUud2FybihcIltjb21tYW5kOjpkZXN0cm95XVwiKTtcblx0XHRjbWQuZGVzdHJveSgpO1xuXHR9KTtcblx0cmV0dXJuIGNtZDtcbn1cblxuLyoqXG4gKiBDb21tYW5kIG9iamVjdCB1c2VkIHRvIGVuY2Fwc3VsYXRlIGluZm9ybWF0aW9uIHdoaWNoIGlzIG5lZWRlZCB0byBwZXJmb3JtIGFuIGFjdGlvbi5cbiAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgY29tbWFuZH0gb3Ige0BsaW5rIGNvbW1hbmRBc3luY30gaW5zdGVhZCBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzLlxuICovXG5leHBvcnQgY2xhc3MgQ29tbWFuZCBpbXBsZW1lbnRzIElDb21tYW5kIHtcblxuXHQvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21tYW5kIGlzIGN1cnJlbnRseSBleGVjdXRpbmcsIGFzIGEgc25hcHNob3QgdmFsdWUuICovXG5cdGdldCBpc0V4ZWN1dGluZygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5faXNFeGVjdXRpbmc7XG5cdH1cblxuXHQvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIG9yIG5vdCwgYXMgYSBzbmFwc2hvdCB2YWx1ZS4gKi9cblx0Z2V0IGNhbkV4ZWN1dGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2NhbkV4ZWN1dGU7XG5cdH1cblxuXHQvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21tYW5kIGlzIGN1cnJlbnRseSBleGVjdXRpbmcsIGFzIGFuIG9ic2VydmFibGUuICovXG5cdGdldCBpc0V4ZWN1dGluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIHRoaXMuX2lzRXhlY3V0aW5nJC5hc09ic2VydmFibGUoKTtcblx0fVxuXG5cdC8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYXV0byBkZXN0cm95IHdoZW4gaGF2aW5nIDAgc3Vic2NyaWJlcnMuICovXG5cdGF1dG9EZXN0cm95ID0gdHJ1ZTtcblxuXHQvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIG9yIG5vdCwgYXMgYW4gb2JzZXJ2YWJsZS4gKi9cblx0cmVhZG9ubHkgY2FuRXhlY3V0ZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cblx0cHJpdmF0ZSBfaXNFeGVjdXRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cdHByaXZhdGUgX2lzRXhlY3V0aW5nID0gZmFsc2U7XG5cdHByaXZhdGUgX2NhbkV4ZWN1dGUgPSB0cnVlO1xuXHRwcml2YXRlIGV4ZWN1dGlvblBpcGUkID0gbmV3IFN1YmplY3Q8dW5rbm93bltdIHwgdW5kZWZpbmVkPigpO1xuXHRwcml2YXRlIGlzRXhlY3V0aW5nJCQgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cdHByaXZhdGUgY2FuRXhlY3V0ZSQkID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXHRwcml2YXRlIGV4ZWN1dGlvblBpcGUkJCA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblx0cHJpdmF0ZSBzdWJzY3JpYmVyc0NvdW50ID0gMDtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBDb21tYW5kLlxuXHQgKlxuXHQgKiBAcGFyYW0gZXhlY3V0ZSBFeGVjdXRlIGZ1bmN0aW9uIHRvIGludm9rZSAtIHVzZSBgaXNBc3luYzogdHJ1ZWAgd2hlbiBgT2JzZXJ2YWJsZTxhbnk+YC5cblx0ICogQHBhcmFtIGNhbkV4ZWN1dGUgT2JzZXJ2YWJsZSB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgaXQgY2FuIGV4ZWN1dGUgb3Igbm90LlxuXHQgKiBAcGFyYW0gaXNBc3luYyBJbmRpY2F0ZXMgdGhhdCB0aGUgZXhlY3V0ZSBmdW5jdGlvbiBpcyBhc3luYyBlLmcuIE9ic2VydmFibGUuXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRleGVjdXRlOiBFeGVjdXRlRm4sXG5cdFx0Y2FuRXhlY3V0ZSQ/OiBDYW5FeGVjdXRlLFxuXHRcdGlzQXN5bmM/OiBib29sZWFuLFxuXHRcdGluamVjdG9yPzogSW5qZWN0b3IsXG5cdCkge1xuXHRcdGlmIChjYW5FeGVjdXRlJCkge1xuXHRcdFx0Y29uc3QgY2FuRXhlY3V0ZSA9IHR5cGVvZiBjYW5FeGVjdXRlJCA9PT0gXCJmdW5jdGlvblwiXG5cdFx0XHRcdD8gY29tcHV0ZWQoY2FuRXhlY3V0ZSQpXG5cdFx0XHRcdDogY2FuRXhlY3V0ZSQ7XG5cdFx0XHR0aGlzLmNhbkV4ZWN1dGUkID0gY29tYmluZUxhdGVzdChbXG5cdFx0XHRcdHRoaXMuX2lzRXhlY3V0aW5nJCxcblx0XHRcdFx0aXNTaWduYWwoY2FuRXhlY3V0ZSkgPyB0b09ic2VydmFibGUoY2FuRXhlY3V0ZSwgeyBpbmplY3RvciB9KSA6IGNhbkV4ZWN1dGVcblx0XHRcdF0pLnBpcGUoXG5cdFx0XHRcdG1hcCgoW2lzRXhlY3V0aW5nLCBjYW5FeGVjdXRlUmVzdWx0XSkgPT4ge1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiW2NvbW1hbmQ6OmNvbWJpbmVMYXRlc3QkXSB1cGRhdGUhXCIsIHsgaXNFeGVjdXRpbmcsIGNhbkV4ZWN1dGVSZXN1bHQgfSk7XG5cdFx0XHRcdFx0dGhpcy5faXNFeGVjdXRpbmcgPSBpc0V4ZWN1dGluZztcblx0XHRcdFx0XHR0aGlzLl9jYW5FeGVjdXRlID0gIWlzRXhlY3V0aW5nICYmICEhY2FuRXhlY3V0ZVJlc3VsdDtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5fY2FuRXhlY3V0ZTtcblx0XHRcdFx0fSksXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5jYW5FeGVjdXRlJCQgPSB0aGlzLmNhbkV4ZWN1dGUkLnN1YnNjcmliZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNhbkV4ZWN1dGUkID0gdGhpcy5faXNFeGVjdXRpbmckLnBpcGUoXG5cdFx0XHRcdG1hcCh4ID0+IHtcblx0XHRcdFx0XHRjb25zdCBjYW5FeGVjdXRlID0gIXg7XG5cdFx0XHRcdFx0dGhpcy5fY2FuRXhlY3V0ZSA9IGNhbkV4ZWN1dGU7XG5cdFx0XHRcdFx0cmV0dXJuIGNhbkV4ZWN1dGU7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5pc0V4ZWN1dGluZyQkID0gdGhpcy5faXNFeGVjdXRpbmckXG5cdFx0XHRcdC5waXBlKHRhcCh4ID0+IHRoaXMuX2lzRXhlY3V0aW5nID0geCkpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKTtcblx0XHR9XG5cdFx0dGhpcy5leGVjdXRpb25QaXBlJCQgPSB0aGlzLmJ1aWxkRXhlY3V0aW9uUGlwZShleGVjdXRlLCBpc0FzeW5jKS5zdWJzY3JpYmUoKTtcblx0fVxuXG5cdC8qKiBFeGVjdXRlIGZ1bmN0aW9uIHRvIGludm9rZS4gKi9cblx0ZXhlY3V0ZSguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcblx0XHQvLyBjb25zb2xlLndhcm4oXCJbY29tbWFuZDo6ZXhlY3V0ZV1cIiwgYXJncyk7XG5cdFx0dGhpcy5leGVjdXRpb25QaXBlJC5uZXh0KGFyZ3MpO1xuXHR9XG5cblx0LyoqIERpc3Bvc2VzIGFsbCByZXNvdXJjZXMgaGVsZCBieSBzdWJzY3JpcHRpb25zLiAqL1xuXHRkZXN0cm95KCk6IHZvaWQge1xuXHRcdC8vIGNvbnNvbGUud2FybihcIltjb21tYW5kOjpkZXN0cm95XVwiKTtcblx0XHR0aGlzLmV4ZWN1dGlvblBpcGUkJC51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMuY2FuRXhlY3V0ZSQkLnVuc3Vic2NyaWJlKCk7XG5cdFx0dGhpcy5pc0V4ZWN1dGluZyQkLnVuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHRzdWJzY3JpYmUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdWJzY3JpYmVyc0NvdW50Kys7XG5cdH1cblxuXHR1bnN1YnNjcmliZSgpOiB2b2lkIHtcblx0XHR0aGlzLnN1YnNjcmliZXJzQ291bnQtLTtcblx0XHQvLyBjb25zb2xlLmxvZyhcIltjb21tYW5kOjp1bnN1YnNjcmliZV1cIiwgeyBhdXRvRGVzdHJveTogdGhpcy5hdXRvRGVzdHJveSwgc3Vic2NyaWJlcnNDb3VudDogdGhpcy5zdWJzY3JpYmVyc0NvdW50IH0pO1xuXHRcdGlmICh0aGlzLmF1dG9EZXN0cm95ICYmIHRoaXMuc3Vic2NyaWJlcnNDb3VudCA8PSAwKSB7XG5cdFx0XHR0aGlzLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGJ1aWxkRXhlY3V0aW9uUGlwZShleGVjdXRlOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBhbnksIGlzQXN5bmM/OiBib29sZWFuKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG5cdFx0bGV0IHBpcGUkID0gdGhpcy5leGVjdXRpb25QaXBlJC5waXBlKFxuXHRcdFx0Ly8gdGFwKHggPT4gY29uc29sZS53YXJuKFwiPj4+PiBleGVjdXRpb25QaXBlXCIsIHRoaXMuX2NhbkV4ZWN1dGUpKSxcblx0XHRcdGZpbHRlcigoKSA9PiB0aGlzLl9jYW5FeGVjdXRlKSxcblx0XHRcdHRhcCgoKSA9PiB7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiW2NvbW1hbmQ6OmV4ZWN1dGlvblBpcGUkXSBkbyMxIC0gc2V0IGV4ZWN1dGVcIiwgeyBhcmdzOiB4IH0pO1xuXHRcdFx0XHR0aGlzLl9pc0V4ZWN1dGluZyQubmV4dCh0cnVlKTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGNvbnN0IGV4ZWNGbiA9IGlzQXN5bmNcblx0XHRcdD8gc3dpdGNoTWFwPHVua25vd25bXSB8IHVuZGVmaW5lZCwgYW55W10+KGFyZ3MgPT4ge1xuXHRcdFx0XHRpZiAoYXJncykge1xuXHRcdFx0XHRcdHJldHVybiBleGVjdXRlKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBleGVjdXRlKCk7XG5cdFx0XHR9KVxuXHRcdFx0OiB0YXAoKGFyZ3M6IHVua25vd25bXSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdFx0XHRpZiAoYXJncykge1xuXHRcdFx0XHRcdGV4ZWN1dGUoLi4uYXJncyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGV4ZWN1dGUoKTtcblx0XHRcdH0pO1xuXG5cdFx0cGlwZSQgPSBwaXBlJC5waXBlKFxuXHRcdFx0c3dpdGNoTWFwKGFyZ3MgPT4gb2YoYXJncykucGlwZShcblx0XHRcdFx0ZXhlY0ZuLFxuXHRcdFx0XHRmaW5hbGl6ZSgoKSA9PiB7XG5cdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJbY29tbWFuZDo6ZXhlY3V0aW9uUGlwZSRdICBmaW5hbGl6ZSBpbm5lciMxIC0gc2V0IGlkbGVcIik7XG5cdFx0XHRcdFx0dGhpcy5faXNFeGVjdXRpbmckLm5leHQoZmFsc2UpO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0dGFrZSgxKSxcblx0XHRcdFx0Y2F0Y2hFcnJvcihlcnJvciA9PiB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcIlVuaGFuZGxlZCBleGVjdXRlIGVycm9yXCIsIGVycm9yKTtcblx0XHRcdFx0XHRyZXR1cm4gRU1QVFk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0KSksXG5cdFx0XHR0YXAoXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcIltjb21tYW5kOjpleGVjdXRpb25QaXBlJF0gdGFwIzIgLSBzZXQgaWRsZVwiKTtcblx0XHRcdFx0XHR0aGlzLl9pc0V4ZWN1dGluZyQubmV4dChmYWxzZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHQpXG5cdFx0KTtcblx0XHRyZXR1cm4gcGlwZSQ7XG5cdH1cblxufVxuXG4vKipcbiAqIEFzeW5jIENvbW1hbmQgb2JqZWN0IHVzZWQgdG8gZW5jYXBzdWxhdGUgaW5mb3JtYXRpb24gd2hpY2ggaXMgbmVlZGVkIHRvIHBlcmZvcm0gYW4gYWN0aW9uLFxuICogd2hpY2ggdGFrZXMgYW4gZXhlY3V0ZSBmdW5jdGlvbiBhcyBPYnNlcnZhYmxlL1Byb21pc2UuXG4gKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIGNvbW1hbmRBc3luY30gaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbW1hbmRBc3luYyBleHRlbmRzIENvbW1hbmQge1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdGV4ZWN1dGU6IEV4ZWN1dGVBc3luY0ZuLFxuXHRcdGNhbkV4ZWN1dGUkPzogQ2FuRXhlY3V0ZSxcblx0KSB7XG5cdFx0c3VwZXIoZXhlY3V0ZSwgY2FuRXhlY3V0ZSQsIHRydWUpO1xuXHR9XG5cbn1cbiJdfQ==
@@ -1,5 +1,7 @@
1
- import { of, map, distinctUntilChanged, startWith, delay } from "rxjs";
1
+ import { PristineChangeEvent, StatusChangeEvent } from "@angular/forms";
2
+ import { map, distinctUntilChanged, startWith, filter, combineLatest, of } from "rxjs";
2
3
  import { Command } from "./command";
4
+ import { computed } from "@angular/core";
3
5
  /** Determines whether the arg object is of type `Command`. */
4
6
  export function isCommand(arg) {
5
7
  return arg instanceof Command;
@@ -14,15 +16,29 @@ export function isCommandCreator(arg) {
14
16
  }
15
17
  return false;
16
18
  }
17
- /** Get form is valid as an observable. */
19
+ const CAN_EXECUTE_FORM_OPTIONS_DEFAULTS = Object.freeze({
20
+ validity: true,
21
+ dirty: true,
22
+ });
23
+ /** Get can execute from form validity/pristine as an observable. */
18
24
  export function canExecuteFromNgForm(form, options) {
19
- const opts = { validity: true, dirty: true, ...options };
20
- return form.statusChanges
21
- ? form.statusChanges.pipe(// todo: remove cast when working correctly
22
- delay(0), startWith(form.valid), map(() => !!(!opts.validity || form.valid) && !!(!opts.dirty || form.dirty)), distinctUntilChanged())
23
- : of(true);
25
+ const opts = options ?
26
+ { ...CAN_EXECUTE_FORM_OPTIONS_DEFAULTS, ...options }
27
+ : CAN_EXECUTE_FORM_OPTIONS_DEFAULTS;
28
+ const pristine$ = opts.dirty
29
+ ? form.events.pipe(filter(x => x instanceof PristineChangeEvent), map(x => x.pristine), distinctUntilChanged(), startWith(form.pristine)) : of(true);
30
+ const valid$ = opts.validity
31
+ ? form.events.pipe(filter(x => x instanceof StatusChangeEvent), map(x => x.status === "VALID"), distinctUntilChanged(), startWith(form.pristine)) : of(true);
32
+ return combineLatest([pristine$, valid$]).pipe(map(([pristine, valid]) => !!(!opts.validity || valid) && !!(!opts.dirty || !pristine)), distinctUntilChanged());
33
+ }
34
+ /** Can executed based on valid/dirty signal inputs. */
35
+ export function canExecuteFromSignals(signals, options) {
36
+ const opts = options ?
37
+ { ...CAN_EXECUTE_FORM_OPTIONS_DEFAULTS, ...options }
38
+ : CAN_EXECUTE_FORM_OPTIONS_DEFAULTS;
39
+ return computed(() => !!(!opts.validity || signals.valid()) && !!(!opts.dirty || signals.dirty()));
24
40
  }
25
41
  function isAssumedType(x) {
26
42
  return x !== null && typeof x === "object";
27
43
  }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9uZ3guY29tbWFuZC9zcmMvY29tbWFuZC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQyw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFZO0lBQ3JDLE9BQU8sR0FBRyxZQUFZLE9BQU8sQ0FBQztBQUMvQixDQUFDO0FBRUQscUVBQXFFO0FBQ3JFLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFZO0lBQzVDLElBQUksR0FBRyxZQUFZLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztTQUFNLElBQUksYUFBYSxDQUFpQixHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxRSxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNkLENBQUM7QUFVRCwwQ0FBMEM7QUFDMUMsTUFBTSxVQUFVLG9CQUFvQixDQUNuQyxJQUFnRCxFQUNoRCxPQUErQjtJQUUvQixNQUFNLElBQUksR0FBMEIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUVoRixPQUFPLElBQUksQ0FBQyxhQUFhO1FBQ3hCLENBQUMsQ0FBRSxJQUFJLENBQUMsYUFBK0MsQ0FBQyxJQUFJLENBQUUsMkNBQTJDO1FBQ3hHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUNyQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQzVFLG9CQUFvQixFQUFFLENBQ3RCO1FBQ0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBOEIsQ0FBVTtJQUM3RCxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFic3RyYWN0Q29udHJvbERpcmVjdGl2ZSwgRm9ybUNvbnRyb2xTdGF0dXMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBtYXAsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzdGFydFdpdGgsIGRlbGF5IH0gZnJvbSBcInJ4anNcIjtcblxuaW1wb3J0IHsgQ29tbWFuZENyZWF0b3IsIElDb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC5tb2RlbFwiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCIuL2NvbW1hbmRcIjtcblxuLyoqIERldGVybWluZXMgd2hldGhlciB0aGUgYXJnIG9iamVjdCBpcyBvZiB0eXBlIGBDb21tYW5kYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbW1hbmQoYXJnOiB1bmtub3duKTogYXJnIGlzIElDb21tYW5kIHtcblx0cmV0dXJuIGFyZyBpbnN0YW5jZW9mIENvbW1hbmQ7XG59XG5cbi8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFyZyBvYmplY3QgaXMgb2YgdHlwZSBgQ29tbWFuZENyZWF0b3JgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tbWFuZENyZWF0b3IoYXJnOiB1bmtub3duKTogYXJnIGlzIENvbW1hbmRDcmVhdG9yIHtcblx0aWYgKGFyZyBpbnN0YW5jZW9mIENvbW1hbmQpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAoaXNBc3N1bWVkVHlwZTxDb21tYW5kQ3JlYXRvcj4oYXJnKSAmJiBhcmcuZXhlY3V0ZSAmJiBhcmcuaG9zdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5FeGVjdXRlRm9ybU9wdGlvbnMge1xuXHQvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNoZWNrIGZvciB2YWxpZGl0eS4gKGRlZmF1bHRzOiB0cnVlKSAqL1xuXHR2YWxpZGl0eT86IGJvb2xlYW47XG5cblx0LyoqIERldGVybWluZXMgd2hldGhlciB0byBjaGVjayB3aGV0aGVyIFVJIGhhcyBiZWVuIHRvdWNoZWQuIChkZWZhdWx0czogdHJ1ZSkgKi9cblx0ZGlydHk/OiBib29sZWFuO1xufVxuXG4vKiogR2V0IGZvcm0gaXMgdmFsaWQgYXMgYW4gb2JzZXJ2YWJsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5FeGVjdXRlRnJvbU5nRm9ybShcblx0Zm9ybTogQWJzdHJhY3RDb250cm9sIHwgQWJzdHJhY3RDb250cm9sRGlyZWN0aXZlLFxuXHRvcHRpb25zPzogQ2FuRXhlY3V0ZUZvcm1PcHRpb25zXG4pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcblx0Y29uc3Qgb3B0czogQ2FuRXhlY3V0ZUZvcm1PcHRpb25zID0geyB2YWxpZGl0eTogdHJ1ZSwgZGlydHk6IHRydWUsIC4uLm9wdGlvbnMgfTtcblxuXHRyZXR1cm4gZm9ybS5zdGF0dXNDaGFuZ2VzXG5cdFx0PyAoZm9ybS5zdGF0dXNDaGFuZ2VzIGFzIE9ic2VydmFibGU8Rm9ybUNvbnRyb2xTdGF0dXM+KS5waXBlKCAvLyB0b2RvOiByZW1vdmUgY2FzdCB3aGVuIHdvcmtpbmcgY29ycmVjdGx5XG5cdFx0XHRkZWxheSgwKSxcblx0XHRcdHN0YXJ0V2l0aChmb3JtLnZhbGlkKSxcblx0XHRcdG1hcCgoKSA9PiAhISghb3B0cy52YWxpZGl0eSB8fCBmb3JtLnZhbGlkKSAmJiAhISghb3B0cy5kaXJ0eSB8fCBmb3JtLmRpcnR5KSksXG5cdFx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuXHRcdClcblx0XHQ6IG9mKHRydWUpO1xufVxuXG5mdW5jdGlvbiBpc0Fzc3VtZWRUeXBlPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oeDogdW5rbm93bik6IHggaXMgUGFydGlhbDxUPiB7XG5cdHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiO1xufVxuIl19
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9uZ3guY29tbWFuZC9zcmMvY29tbWFuZC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQWMsR0FBRyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUduRyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBZSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdEQsOERBQThEO0FBQzlELE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBWTtJQUNyQyxPQUFPLEdBQUcsWUFBWSxPQUFPLENBQUM7QUFDL0IsQ0FBQztBQUVELHFFQUFxRTtBQUNyRSxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBWTtJQUM1QyxJQUFJLEdBQUcsWUFBWSxPQUFPLEVBQUUsQ0FBQztRQUM1QixPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7U0FBTSxJQUFJLGFBQWEsQ0FBaUIsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUUsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZCxDQUFDO0FBVUQsTUFBTSxpQ0FBaUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUF3QjtJQUM5RSxRQUFRLEVBQUUsSUFBSTtJQUNkLEtBQUssRUFBRSxJQUFJO0NBQ1gsQ0FBQyxDQUFBO0FBRUYsb0VBQW9FO0FBQ3BFLE1BQU0sVUFBVSxvQkFBb0IsQ0FDbkMsSUFBcUIsRUFDckIsT0FBK0I7SUFFL0IsTUFBTSxJQUFJLEdBQTBCLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLEVBQUUsR0FBRyxpQ0FBaUMsRUFBRSxHQUFHLE9BQU8sRUFBRTtRQUNwRCxDQUFDLENBQUMsaUNBQWlDLENBQUM7SUFFckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUs7UUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNqQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksbUJBQW1CLENBQUMsRUFDN0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUNwQixvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN4QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUTtRQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxpQkFBaUIsQ0FBQyxFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxFQUM5QixvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN4QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFZCxPQUFPLGFBQWEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDN0MsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUN2RixvQkFBb0IsRUFBRSxDQUN0QixDQUFDO0FBQ0gsQ0FBQztBQUVELHVEQUF1RDtBQUN2RCxNQUFNLFVBQVUscUJBQXFCLENBQ3BDLE9BQTJELEVBQzNELE9BQStCO0lBRS9CLE1BQU0sSUFBSSxHQUEwQixPQUFPLENBQUMsQ0FBQztRQUM1QyxFQUFFLEdBQUcsaUNBQWlDLEVBQUUsR0FBRyxPQUFPLEVBQUU7UUFDcEQsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDO0lBQ3JDLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRyxDQUFDO0FBR0QsU0FBUyxhQUFhLENBQThCLENBQVU7SUFDN0QsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBQcmlzdGluZUNoYW5nZUV2ZW50LCBTdGF0dXNDaGFuZ2VFdmVudCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCBmaWx0ZXIsIGNvbWJpbmVMYXRlc3QsIG9mIH0gZnJvbSBcInJ4anNcIjtcblxuaW1wb3J0IHsgQ29tbWFuZENyZWF0b3IsIElDb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC5tb2RlbFwiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCIuL2NvbW1hbmRcIjtcbmltcG9ydCB7IHR5cGUgU2lnbmFsLCBjb21wdXRlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbi8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFyZyBvYmplY3QgaXMgb2YgdHlwZSBgQ29tbWFuZGAuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb21tYW5kKGFyZzogdW5rbm93bik6IGFyZyBpcyBJQ29tbWFuZCB7XG5cdHJldHVybiBhcmcgaW5zdGFuY2VvZiBDb21tYW5kO1xufVxuXG4vKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhcmcgb2JqZWN0IGlzIG9mIHR5cGUgYENvbW1hbmRDcmVhdG9yYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbW1hbmRDcmVhdG9yKGFyZzogdW5rbm93bik6IGFyZyBpcyBDb21tYW5kQ3JlYXRvciB7XG5cdGlmIChhcmcgaW5zdGFuY2VvZiBDb21tYW5kKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKGlzQXNzdW1lZFR5cGU8Q29tbWFuZENyZWF0b3I+KGFyZykgJiYgYXJnLmV4ZWN1dGUgJiYgYXJnLmhvc3QpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuRXhlY3V0ZUZvcm1PcHRpb25zIHtcblx0LyoqIERldGVybWluZXMgd2hldGhlciB0byBjaGVjayBmb3IgdmFsaWRpdHkuIChkZWZhdWx0czogdHJ1ZSkgKi9cblx0dmFsaWRpdHk/OiBib29sZWFuO1xuXG5cdC8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY2hlY2sgd2hldGhlciBVSSBoYXMgYmVlbiB0b3VjaGVkLiAoZGVmYXVsdHM6IHRydWUpICovXG5cdGRpcnR5PzogYm9vbGVhbjtcbn1cblxuY29uc3QgQ0FOX0VYRUNVVEVfRk9STV9PUFRJT05TX0RFRkFVTFRTID0gT2JqZWN0LmZyZWV6ZTxDYW5FeGVjdXRlRm9ybU9wdGlvbnM+KHtcblx0dmFsaWRpdHk6IHRydWUsXG5cdGRpcnR5OiB0cnVlLFxufSlcblxuLyoqIEdldCBjYW4gZXhlY3V0ZSBmcm9tIGZvcm0gdmFsaWRpdHkvcHJpc3RpbmUgYXMgYW4gb2JzZXJ2YWJsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5FeGVjdXRlRnJvbU5nRm9ybShcblx0Zm9ybTogQWJzdHJhY3RDb250cm9sLFxuXHRvcHRpb25zPzogQ2FuRXhlY3V0ZUZvcm1PcHRpb25zXG4pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcblx0Y29uc3Qgb3B0czogQ2FuRXhlY3V0ZUZvcm1PcHRpb25zID0gb3B0aW9ucyA/XG5cdFx0eyAuLi5DQU5fRVhFQ1VURV9GT1JNX09QVElPTlNfREVGQVVMVFMsIC4uLm9wdGlvbnMgfVxuXHRcdDogQ0FOX0VYRUNVVEVfRk9STV9PUFRJT05TX0RFRkFVTFRTO1xuXG5cdGNvbnN0IHByaXN0aW5lJCA9IG9wdHMuZGlydHlcblx0XHQ/IGZvcm0uZXZlbnRzLnBpcGUoXG5cdFx0XHRmaWx0ZXIoeCA9PiB4IGluc3RhbmNlb2YgUHJpc3RpbmVDaGFuZ2VFdmVudCksXG5cdFx0XHRtYXAoeCA9PiB4LnByaXN0aW5lKSxcblx0XHRcdGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG5cdFx0XHRzdGFydFdpdGgoZm9ybS5wcmlzdGluZSksXG5cdFx0KSA6IG9mKHRydWUpO1xuXG5cdGNvbnN0IHZhbGlkJCA9IG9wdHMudmFsaWRpdHlcblx0XHQ/IGZvcm0uZXZlbnRzLnBpcGUoXG5cdFx0XHRmaWx0ZXIoeCA9PiB4IGluc3RhbmNlb2YgU3RhdHVzQ2hhbmdlRXZlbnQpLFxuXHRcdFx0bWFwKHggPT4geC5zdGF0dXMgPT09IFwiVkFMSURcIiksXG5cdFx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuXHRcdFx0c3RhcnRXaXRoKGZvcm0ucHJpc3RpbmUpLFxuXHRcdCkgOiBvZih0cnVlKTtcblxuXHRyZXR1cm4gY29tYmluZUxhdGVzdChbcHJpc3RpbmUkLCB2YWxpZCRdKS5waXBlKFxuXHRcdG1hcCgoW3ByaXN0aW5lLCB2YWxpZF0pID0+ICEhKCFvcHRzLnZhbGlkaXR5IHx8IHZhbGlkKSAmJiAhISghb3B0cy5kaXJ0eSB8fCAhcHJpc3RpbmUpKSxcblx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuXHQpO1xufVxuXG4vKiogQ2FuIGV4ZWN1dGVkIGJhc2VkIG9uIHZhbGlkL2RpcnR5IHNpZ25hbCBpbnB1dHMuICovXG5leHBvcnQgZnVuY3Rpb24gY2FuRXhlY3V0ZUZyb21TaWduYWxzKFxuXHRzaWduYWxzOiB7IHZhbGlkOiBTaWduYWw8Ym9vbGVhbj4sIGRpcnR5OiBTaWduYWw8Ym9vbGVhbj4gfSxcblx0b3B0aW9ucz86IENhbkV4ZWN1dGVGb3JtT3B0aW9uc1xuKTogU2lnbmFsPGJvb2xlYW4+IHtcblx0Y29uc3Qgb3B0czogQ2FuRXhlY3V0ZUZvcm1PcHRpb25zID0gb3B0aW9ucyA/XG5cdFx0eyAuLi5DQU5fRVhFQ1VURV9GT1JNX09QVElPTlNfREVGQVVMVFMsIC4uLm9wdGlvbnMgfVxuXHRcdDogQ0FOX0VYRUNVVEVfRk9STV9PUFRJT05TX0RFRkFVTFRTO1xuXHRyZXR1cm4gY29tcHV0ZWQoKCkgPT4gISEoIW9wdHMudmFsaWRpdHkgfHwgc2lnbmFscy52YWxpZCgpKSAmJiAhISghb3B0cy5kaXJ0eSB8fCBzaWduYWxzLmRpcnR5KCkpKTtcbn1cblxuXG5mdW5jdGlvbiBpc0Fzc3VtZWRUeXBlPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oeDogdW5rbm93bik6IHggaXMgUGFydGlhbDxUPiB7XG5cdHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiO1xufVxuIl19
package/esm2022/index.mjs CHANGED
@@ -3,6 +3,6 @@ export { provideSsvCommandOptions, COMMAND_OPTIONS } from "./command.options";
3
3
  export { command, commandAsync, Command, CommandAsync } from "./command";
4
4
  export { CommandDirective } from "./command.directive";
5
5
  export { CommandRefDirective } from "./command-ref.directive";
6
- export { isCommand, isCommandCreator, canExecuteFromNgForm } from "./command.util";
6
+ export { isCommand, isCommandCreator, canExecuteFromNgForm, canExecuteFromSignals } from "./command.util";
7
7
  export { VERSION } from "./version";
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25neC5jb21tYW5kL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUF1QixNQUFNLG1CQUFtQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQThDLE1BQU0sV0FBVyxDQUFDO0FBQ3JILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBOEIsU0FBUyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0csT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFNzdkNvbW1hbmRNb2R1bGUgfSBmcm9tIFwiLi9jb21tYW5kLm1vZHVsZVwiO1xuZXhwb3J0IHsgcHJvdmlkZVNzdkNvbW1hbmRPcHRpb25zLCBDT01NQU5EX09QVElPTlMsIHR5cGUgQ29tbWFuZE9wdGlvbnMgfSBmcm9tIFwiLi9jb21tYW5kLm9wdGlvbnNcIjtcbmV4cG9ydCB7IGNvbW1hbmQsIGNvbW1hbmRBc3luYywgQ29tbWFuZCwgQ29tbWFuZEFzeW5jLCB0eXBlIENhbkV4ZWN1dGUsIHR5cGUgQ29tbWFuZENyZWF0ZU9wdGlvbnMgfSBmcm9tIFwiLi9jb21tYW5kXCI7XG5leHBvcnQgeyBDb21tYW5kRGlyZWN0aXZlIH0gZnJvbSBcIi4vY29tbWFuZC5kaXJlY3RpdmVcIjtcbmV4cG9ydCB7IENvbW1hbmRSZWZEaXJlY3RpdmUgfSBmcm9tIFwiLi9jb21tYW5kLXJlZi5kaXJlY3RpdmVcIjtcbmV4cG9ydCB7IHR5cGUgQ2FuRXhlY3V0ZUZvcm1PcHRpb25zLCBpc0NvbW1hbmQsIGlzQ29tbWFuZENyZWF0b3IsIGNhbkV4ZWN1dGVGcm9tTmdGb3JtIH0gZnJvbSBcIi4vY29tbWFuZC51dGlsXCI7XG5leHBvcnQgdHlwZSB7IENvbW1hbmRDcmVhdG9yLCBJQ29tbWFuZCB9IGZyb20gXCIuL2NvbW1hbmQubW9kZWxcIjtcbmV4cG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uXCI7XG4iXX0=
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25neC5jb21tYW5kL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUF1QixNQUFNLG1CQUFtQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQThDLE1BQU0sV0FBVyxDQUFDO0FBQ3JILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBOEIsU0FBUyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEksT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFNzdkNvbW1hbmRNb2R1bGUgfSBmcm9tIFwiLi9jb21tYW5kLm1vZHVsZVwiO1xuZXhwb3J0IHsgcHJvdmlkZVNzdkNvbW1hbmRPcHRpb25zLCBDT01NQU5EX09QVElPTlMsIHR5cGUgQ29tbWFuZE9wdGlvbnMgfSBmcm9tIFwiLi9jb21tYW5kLm9wdGlvbnNcIjtcbmV4cG9ydCB7IGNvbW1hbmQsIGNvbW1hbmRBc3luYywgQ29tbWFuZCwgQ29tbWFuZEFzeW5jLCB0eXBlIENhbkV4ZWN1dGUsIHR5cGUgQ29tbWFuZENyZWF0ZU9wdGlvbnMgfSBmcm9tIFwiLi9jb21tYW5kXCI7XG5leHBvcnQgeyBDb21tYW5kRGlyZWN0aXZlIH0gZnJvbSBcIi4vY29tbWFuZC5kaXJlY3RpdmVcIjtcbmV4cG9ydCB7IENvbW1hbmRSZWZEaXJlY3RpdmUgfSBmcm9tIFwiLi9jb21tYW5kLXJlZi5kaXJlY3RpdmVcIjtcbmV4cG9ydCB7IHR5cGUgQ2FuRXhlY3V0ZUZvcm1PcHRpb25zLCBpc0NvbW1hbmQsIGlzQ29tbWFuZENyZWF0b3IsIGNhbkV4ZWN1dGVGcm9tTmdGb3JtLCBjYW5FeGVjdXRlRnJvbVNpZ25hbHMgfSBmcm9tIFwiLi9jb21tYW5kLnV0aWxcIjtcbmV4cG9ydCB0eXBlIHsgQ29tbWFuZENyZWF0b3IsIElDb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC5tb2RlbFwiO1xuZXhwb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb25cIjtcbiJdfQ==
@@ -1,2 +1,2 @@
1
- export const VERSION = "3.0.0";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbmd4LmNvbW1hbmQvc3JjL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIzLjAuMFwiO1xuIl19
1
+ export const VERSION = "3.1.0-dev.45";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbmd4LmNvbW1hbmQvc3JjL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIzLjEuMC1kZXYuNDVcIjtcbiJdfQ==
@@ -1,7 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, makeEnvironmentProviders, assertInInjectionContext, inject, Injector, DestroyRef, computed, isSignal, Renderer2, ElementRef, ChangeDetectorRef, Directive, Input, HostListener, NgModule } from '@angular/core';
3
- import { BehaviorSubject, Subject, Subscription, combineLatest, map, tap, filter, switchMap, of, finalize, take, catchError, EMPTY, delay, startWith, distinctUntilChanged, takeUntil } from 'rxjs';
3
+ import { BehaviorSubject, Subject, Subscription, combineLatest, map, tap, filter, switchMap, of, finalize, take, catchError, EMPTY, distinctUntilChanged, startWith, delay, takeUntil } from 'rxjs';
4
4
  import { toObservable } from '@angular/core/rxjs-interop';
5
+ import { PristineChangeEvent, StatusChangeEvent } from '@angular/forms';
5
6
 
6
7
  const DEFAULT_OPTIONS = Object.freeze({
7
8
  executingCssClass: "executing",
@@ -57,7 +58,7 @@ function command(execute, canExecute$, opts) {
57
58
  }
58
59
  /**
59
60
  * Command object used to encapsulate information which is needed to perform an action.
60
- * @deprecated Use {@link command} or {@link commandAsync} instead.
61
+ * @deprecated Use {@link command} or {@link commandAsync} instead for creating instances.
61
62
  */
62
63
  class Command {
63
64
  /** Determines whether the command is currently executing, as a snapshot value. */
@@ -200,13 +201,27 @@ function isCommandCreator(arg) {
200
201
  }
201
202
  return false;
202
203
  }
203
- /** Get form is valid as an observable. */
204
+ const CAN_EXECUTE_FORM_OPTIONS_DEFAULTS = Object.freeze({
205
+ validity: true,
206
+ dirty: true,
207
+ });
208
+ /** Get can execute from form validity/pristine as an observable. */
204
209
  function canExecuteFromNgForm(form, options) {
205
- const opts = { validity: true, dirty: true, ...options };
206
- return form.statusChanges
207
- ? form.statusChanges.pipe(// todo: remove cast when working correctly
208
- delay(0), startWith(form.valid), map(() => !!(!opts.validity || form.valid) && !!(!opts.dirty || form.dirty)), distinctUntilChanged())
209
- : of(true);
210
+ const opts = options ?
211
+ { ...CAN_EXECUTE_FORM_OPTIONS_DEFAULTS, ...options }
212
+ : CAN_EXECUTE_FORM_OPTIONS_DEFAULTS;
213
+ const pristine$ = opts.dirty
214
+ ? form.events.pipe(filter(x => x instanceof PristineChangeEvent), map(x => x.pristine), distinctUntilChanged(), startWith(form.pristine)) : of(true);
215
+ const valid$ = opts.validity
216
+ ? form.events.pipe(filter(x => x instanceof StatusChangeEvent), map(x => x.status === "VALID"), distinctUntilChanged(), startWith(form.pristine)) : of(true);
217
+ return combineLatest([pristine$, valid$]).pipe(map(([pristine, valid]) => !!(!opts.validity || valid) && !!(!opts.dirty || !pristine)), distinctUntilChanged());
218
+ }
219
+ /** Can executed based on valid/dirty signal inputs. */
220
+ function canExecuteFromSignals(signals, options) {
221
+ const opts = options ?
222
+ { ...CAN_EXECUTE_FORM_OPTIONS_DEFAULTS, ...options }
223
+ : CAN_EXECUTE_FORM_OPTIONS_DEFAULTS;
224
+ return computed(() => !!(!opts.validity || signals.valid()) && !!(!opts.dirty || signals.dirty()));
210
225
  }
211
226
  function isAssumedType(x) {
212
227
  return x !== null && typeof x === "object";
@@ -443,11 +458,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
443
458
  }]
444
459
  }] });
445
460
 
446
- const VERSION = "3.0.0";
461
+ const VERSION = "3.1.0-dev.45";
447
462
 
448
463
  /**
449
464
  * Generated bundle index. Do not edit.
450
465
  */
451
466
 
452
- export { COMMAND_OPTIONS, Command, CommandAsync, CommandDirective, CommandRefDirective, SsvCommandModule, VERSION, canExecuteFromNgForm, command, commandAsync, isCommand, isCommandCreator, provideSsvCommandOptions };
467
+ export { COMMAND_OPTIONS, Command, CommandAsync, CommandDirective, CommandRefDirective, SsvCommandModule, VERSION, canExecuteFromNgForm, canExecuteFromSignals, command, commandAsync, isCommand, isCommandCreator, provideSsvCommandOptions };
453
468
  //# sourceMappingURL=ssv-ngx.command.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssv-ngx.command.mjs","sources":["../../../../libs/ngx.command/src/command.options.ts","../../../../libs/ngx.command/src/command.ts","../../../../libs/ngx.command/src/command.util.ts","../../../../libs/ngx.command/src/command.directive.ts","../../../../libs/ngx.command/src/command-ref.directive.ts","../../../../libs/ngx.command/src/command.module.ts","../../../../libs/ngx.command/src/version.ts","../../../../libs/ngx.command/src/ssv-ngx.command.ts"],"sourcesContent":["import { type EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from \"@angular/core\";\n\nexport interface CommandOptions {\n\t/**\n\t * Css Class which gets added/removed on the Command element's host while Command `isExecuting$`.\n\t */\n\texecutingCssClass: string;\n\n\t/** Determines whether the disabled will be handled by the directive or not.\n\t * Disable handled by directive's doesn't always play nice when used with other component/pipe/directive and they also handle disabled.\n\t * This disables the handling manually and need to pass explicitly `[disabled]=\"!saveCmd.canExecute\"`.\n\t */\n\thandleDisabled: boolean;\n\n\t/** Determine whether to set a `delay(1)` when setting the disabled. Which might be needed when working with external\n\t * components/directives (such as material button)\n\t */\n\thasDisabledDelay: boolean;\n}\n\nconst DEFAULT_OPTIONS = Object.freeze<CommandOptions>({\n\texecutingCssClass: \"executing\",\n\thandleDisabled: true,\n\thasDisabledDelay: false,\n});\n\nexport const COMMAND_OPTIONS = new InjectionToken<CommandOptions>(\"SSV_COMMAND_OPTIONS\", {\n\tfactory: () => DEFAULT_OPTIONS,\n});\n\nexport function provideSsvCommandOptions(\n\toptions: Partial<CommandOptions> | ((defaults: Readonly<CommandOptions>) => Partial<CommandOptions>)\n): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: COMMAND_OPTIONS,\n\t\t\tuseFactory: () => {\n\t\t\t\tlet opts = typeof options === \"function\" ? options(DEFAULT_OPTIONS) : options;\n\t\t\t\topts = opts\n\t\t\t\t\t? {\n\t\t\t\t\t\t...DEFAULT_OPTIONS,\n\t\t\t\t\t\t...opts,\n\t\t\t\t\t}\n\t\t\t\t\t: DEFAULT_OPTIONS;\n\t\t\t\treturn opts;\n\t\t\t},\n\t\t},\n\t]);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n\tObservable, combineLatest, Subscription, Subject, BehaviorSubject, of, EMPTY,\n\ttap, map, filter, switchMap, catchError, finalize, take,\n} from \"rxjs\";\nimport type { ICommand } from \"./command.model\";\nimport { assertInInjectionContext, computed, DestroyRef, inject, Injector, isSignal, type Signal } from \"@angular/core\";\nimport { toObservable } from \"@angular/core/rxjs-interop\";\n\nexport type ExecuteFn = (...args: any[]) => unknown;\nexport type ExecuteAsyncFn = (...args: any[]) => Observable<unknown> | Promise<unknown>;\nexport type CanExecute = (() => boolean) | Signal<boolean> | Observable<boolean>;\n\nexport interface CommandCreateOptions {\n\tisAsync: boolean,\n\tinjector?: Injector;\n}\n\nconst COMMAND_ASYNC_DEFAULT_OPTIONS: CommandCreateOptions = { isAsync: true };\n\n/** Creates an async {@link Command}. Must be used within an injection context.\n * NOTE: this auto injects `DestroyRef` and handles auto destroy. {@link ICommand.autoDestroy} should not be used.\n */\nexport function commandAsync(\n\texecute: ExecuteAsyncFn,\n\tcanExecute$?: CanExecute,\n\topts?: Omit<CommandCreateOptions, \"isAsync\">,\n): Command {\n\treturn command(execute, canExecute$, opts ? { ...opts, ...COMMAND_ASYNC_DEFAULT_OPTIONS } : COMMAND_ASYNC_DEFAULT_OPTIONS);\n}\n\n/** Creates a {@link Command}. Must be used within an injection context.\n * NOTE: this auto injects `DestroyRef` and handles auto destroy. {@link ICommand.autoDestroy} should not be used.\n */\nexport function command(\n\texecute: ExecuteFn,\n\tcanExecute$?: CanExecute,\n\topts?: CommandCreateOptions,\n): Command {\n\tif (!opts?.injector) {\n\t\tassertInInjectionContext(command);\n\t}\n\tconst injector = opts?.injector ?? inject(Injector);\n\tconst isAsync = opts?.isAsync ?? false;\n\tconst destroyRef = injector.get(DestroyRef);\n\tconst cmd = new Command(execute, canExecute$, isAsync);\n\tcmd.autoDestroy = false;\n\n\tdestroyRef.onDestroy(() => {\n\t\t// console.warn(\"[command::destroy]\");\n\t\tcmd.destroy();\n\t});\n\treturn cmd;\n}\n\n/**\n * Command object used to encapsulate information which is needed to perform an action.\n * @deprecated Use {@link command} or {@link commandAsync} instead.\n */\nexport class Command implements ICommand {\n\n\t/** Determines whether the command is currently executing, as a snapshot value. */\n\tget isExecuting(): boolean {\n\t\treturn this._isExecuting;\n\t}\n\n\t/** Determines whether the command can execute or not, as a snapshot value. */\n\tget canExecute(): boolean {\n\t\treturn this._canExecute;\n\t}\n\n\t/** Determines whether the command is currently executing, as an observable. */\n\tget isExecuting$(): Observable<boolean> {\n\t\treturn this._isExecuting$.asObservable();\n\t}\n\n\t/** Determines whether to auto destroy when having 0 subscribers. */\n\tautoDestroy = true;\n\n\t/** Determines whether the command can execute or not, as an observable. */\n\treadonly canExecute$: Observable<boolean>;\n\n\tprivate _isExecuting$ = new BehaviorSubject<boolean>(false);\n\tprivate _isExecuting = false;\n\tprivate _canExecute = true;\n\tprivate executionPipe$ = new Subject<unknown[] | undefined>();\n\tprivate isExecuting$$ = Subscription.EMPTY;\n\tprivate canExecute$$ = Subscription.EMPTY;\n\tprivate executionPipe$$ = Subscription.EMPTY;\n\tprivate subscribersCount = 0;\n\n\t/**\n\t * Creates an instance of Command.\n\t *\n\t * @param execute Execute function to invoke - use `isAsync: true` when `Observable<any>`.\n\t * @param canExecute Observable which determines whether it can execute or not.\n\t * @param isAsync Indicates that the execute function is async e.g. Observable.\n\t */\n\tconstructor(\n\t\texecute: ExecuteFn,\n\t\tcanExecute$?: CanExecute,\n\t\tisAsync?: boolean,\n\t\tinjector?: Injector,\n\t) {\n\t\tif (canExecute$) {\n\t\t\tconst canExecute = typeof canExecute$ === \"function\"\n\t\t\t\t? computed(canExecute$)\n\t\t\t\t: canExecute$;\n\t\t\tthis.canExecute$ = combineLatest([\n\t\t\t\tthis._isExecuting$,\n\t\t\t\tisSignal(canExecute) ? toObservable(canExecute, { injector }) : canExecute\n\t\t\t]).pipe(\n\t\t\t\tmap(([isExecuting, canExecuteResult]) => {\n\t\t\t\t\t// console.log(\"[command::combineLatest$] update!\", { isExecuting, canExecuteResult });\n\t\t\t\t\tthis._isExecuting = isExecuting;\n\t\t\t\t\tthis._canExecute = !isExecuting && !!canExecuteResult;\n\t\t\t\t\treturn this._canExecute;\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.canExecute$$ = this.canExecute$.subscribe();\n\t\t} else {\n\t\t\tthis.canExecute$ = this._isExecuting$.pipe(\n\t\t\t\tmap(x => {\n\t\t\t\t\tconst canExecute = !x;\n\t\t\t\t\tthis._canExecute = canExecute;\n\t\t\t\t\treturn canExecute;\n\t\t\t\t})\n\t\t\t);\n\t\t\tthis.isExecuting$$ = this._isExecuting$\n\t\t\t\t.pipe(tap(x => this._isExecuting = x))\n\t\t\t\t.subscribe();\n\t\t}\n\t\tthis.executionPipe$$ = this.buildExecutionPipe(execute, isAsync).subscribe();\n\t}\n\n\t/** Execute function to invoke. */\n\texecute(...args: unknown[]): void {\n\t\t// console.warn(\"[command::execute]\", args);\n\t\tthis.executionPipe$.next(args);\n\t}\n\n\t/** Disposes all resources held by subscriptions. */\n\tdestroy(): void {\n\t\t// console.warn(\"[command::destroy]\");\n\t\tthis.executionPipe$$.unsubscribe();\n\t\tthis.canExecute$$.unsubscribe();\n\t\tthis.isExecuting$$.unsubscribe();\n\t}\n\n\tsubscribe(): void {\n\t\tthis.subscribersCount++;\n\t}\n\n\tunsubscribe(): void {\n\t\tthis.subscribersCount--;\n\t\t// console.log(\"[command::unsubscribe]\", { autoDestroy: this.autoDestroy, subscribersCount: this.subscribersCount });\n\t\tif (this.autoDestroy && this.subscribersCount <= 0) {\n\t\t\tthis.destroy();\n\t\t}\n\t}\n\n\tprivate buildExecutionPipe(execute: (...args: unknown[]) => any, isAsync?: boolean): Observable<unknown> {\n\t\tlet pipe$ = this.executionPipe$.pipe(\n\t\t\t// tap(x => console.warn(\">>>> executionPipe\", this._canExecute)),\n\t\t\tfilter(() => this._canExecute),\n\t\t\ttap(() => {\n\t\t\t\t// console.log(\"[command::executionPipe$] do#1 - set execute\", { args: x });\n\t\t\t\tthis._isExecuting$.next(true);\n\t\t\t})\n\t\t);\n\n\t\tconst execFn = isAsync\n\t\t\t? switchMap<unknown[] | undefined, any[]>(args => {\n\t\t\t\tif (args) {\n\t\t\t\t\treturn execute(...args);\n\t\t\t\t}\n\t\t\t\treturn execute();\n\t\t\t})\n\t\t\t: tap((args: unknown[] | undefined) => {\n\t\t\t\tif (args) {\n\t\t\t\t\texecute(...args);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\texecute();\n\t\t\t});\n\n\t\tpipe$ = pipe$.pipe(\n\t\t\tswitchMap(args => of(args).pipe(\n\t\t\t\texecFn,\n\t\t\t\tfinalize(() => {\n\t\t\t\t\t// console.log(\"[command::executionPipe$] finalize inner#1 - set idle\");\n\t\t\t\t\tthis._isExecuting$.next(false);\n\t\t\t\t}),\n\t\t\t\ttake(1),\n\t\t\t\tcatchError(error => {\n\t\t\t\t\tconsole.error(\"Unhandled execute error\", error);\n\t\t\t\t\treturn EMPTY;\n\t\t\t\t}),\n\t\t\t)),\n\t\t\ttap(\n\t\t\t\t() => {\n\t\t\t\t\t// console.log(\"[command::executionPipe$] tap#2 - set idle\");\n\t\t\t\t\tthis._isExecuting$.next(false);\n\t\t\t\t},\n\t\t\t)\n\t\t);\n\t\treturn pipe$;\n\t}\n\n}\n\n/**\n * Async Command object used to encapsulate information which is needed to perform an action,\n * which takes an execute function as Observable/Promise.\n * @deprecated Use {@link commandAsync} instead.\n */\nexport class CommandAsync extends Command {\n\n\tconstructor(\n\t\texecute: ExecuteAsyncFn,\n\t\tcanExecute$?: CanExecute,\n\t) {\n\t\tsuper(execute, canExecute$, true);\n\t}\n\n}\n","import { AbstractControl, AbstractControlDirective, FormControlStatus } from \"@angular/forms\";\nimport { Observable, of, map, distinctUntilChanged, startWith, delay } from \"rxjs\";\n\nimport { CommandCreator, ICommand } from \"./command.model\";\nimport { Command } from \"./command\";\n\n/** Determines whether the arg object is of type `Command`. */\nexport function isCommand(arg: unknown): arg is ICommand {\n\treturn arg instanceof Command;\n}\n\n/** Determines whether the arg object is of type `CommandCreator`. */\nexport function isCommandCreator(arg: unknown): arg is CommandCreator {\n\tif (arg instanceof Command) {\n\t\treturn false;\n\t} else if (isAssumedType<CommandCreator>(arg) && arg.execute && arg.host) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport interface CanExecuteFormOptions {\n\t/** Determines whether to check for validity. (defaults: true) */\n\tvalidity?: boolean;\n\n\t/** Determines whether to check whether UI has been touched. (defaults: true) */\n\tdirty?: boolean;\n}\n\n/** Get form is valid as an observable. */\nexport function canExecuteFromNgForm(\n\tform: AbstractControl | AbstractControlDirective,\n\toptions?: CanExecuteFormOptions\n): Observable<boolean> {\n\tconst opts: CanExecuteFormOptions = { validity: true, dirty: true, ...options };\n\n\treturn form.statusChanges\n\t\t? (form.statusChanges as Observable<FormControlStatus>).pipe( // todo: remove cast when working correctly\n\t\t\tdelay(0),\n\t\t\tstartWith(form.valid),\n\t\t\tmap(() => !!(!opts.validity || form.valid) && !!(!opts.dirty || form.dirty)),\n\t\t\tdistinctUntilChanged(),\n\t\t)\n\t\t: of(true);\n}\n\nfunction isAssumedType<T = Record<string, unknown>>(x: unknown): x is Partial<T> {\n\treturn x !== null && typeof x === \"object\";\n}\n","import {\n\tDirective,\n\tOnInit,\n\tOnDestroy,\n\tInput,\n\tHostListener,\n\tElementRef,\n\tRenderer2,\n\tChangeDetectorRef,\n\tinject,\n} from \"@angular/core\";\nimport { Subject, tap, delay, takeUntil } from \"rxjs\";\n\nimport { type CommandOptions, COMMAND_OPTIONS } from \"./command.options\";\nimport { Command } from \"./command\";\nimport { isCommand, isCommandCreator } from \"./command.util\";\nimport { CommandCreator, type ICommand } from \"./command.model\";\n\n/**\n * Controls the state of a component in sync with `Command`.\n *\n * @example\n * ### Most common usage\n * ```html\n * <button [ssvCommand]=\"saveCmd\">Save</button>\n * ```\n *\n *\n * ### Usage with options\n * ```html\n * <button [ssvCommand]=\"saveCmd\" [ssvCommandOptions]=\"{executingCssClass: 'in-progress'}\">Save</button>\n * ```\n *\n *\n * ### Usage with params\n * This is useful for collections (loops) or using multiple actions with different args.\n * *NOTE: This will share the `isExecuting` when used with multiple controls.*\n *\n * #### With single param\n *\n * ```html\n * <button [ssvCommand]=\"saveCmd\" [ssvCommandParams]=\"{id: 1}\">Save</button>\n * ```\n * *NOTE: if you have only 1 argument as an array, it should be enclosed within an array e.g. `[['apple', 'banana']]`,\n * else it will spread and you will `arg1: \"apple\", arg2: \"banana\"`*\n *\n * #### With multi params\n * ```html\n * <button [ssvCommand]=\"saveCmd\" [ssvCommandParams]=\"[{id: 1}, 'hello', hero]\">Save</button>\n * ```\n *\n * ### Usage with Command Creator\n * This is useful for collections (loops) or using multiple actions with different args, whilst not sharing `isExecuting`.\n *\n *\n * ```html\n * <button [ssvCommand]=\"{host: this, execute: removeHero$, canExecute: isValid$, params: [hero, 1337, 'xx']}\">Save</button>\n * ```\n *\n */\n\nconst NAME_CAMEL = \"ssvCommand\";\n\n// let nextUniqueId = 0;\n\n@Directive({\n\tselector: `[${NAME_CAMEL}]`,\n\texportAs: NAME_CAMEL,\n\tstandalone: true,\n})\nexport class CommandDirective implements OnInit, OnDestroy {\n\n\t// readonly id = `${NAME_CAMEL}-${nextUniqueId++}`;\n\tprivate readonly globalOptions = inject(COMMAND_OPTIONS);\n\tprivate readonly renderer = inject(Renderer2);\n\tprivate readonly element = inject(ElementRef);\n\tprivate readonly cdr = inject(ChangeDetectorRef);\n\n\t@Input(NAME_CAMEL) commandOrCreator: ICommand | CommandCreator | undefined;\n\n\t@Input(`${NAME_CAMEL}Options`)\n\tget commandOptions(): CommandOptions { return this._commandOptions; }\n\tset commandOptions(value: Partial<CommandOptions>) {\n\t\tif (value === this._commandOptions) {\n\t\t\treturn;\n\t\t}\n\t\tthis._commandOptions = {\n\t\t\t...this.globalOptions,\n\t\t\t...value,\n\t\t};\n\t}\n\n\t@Input(`${NAME_CAMEL}Params`) commandParams: unknown | unknown[];\n\n\tget command(): ICommand { return this._command; }\n\n\tprivate _command!: ICommand;\n\tprivate _commandOptions: CommandOptions = this.globalOptions;\n\tprivate _destroy$ = new Subject<void>();\n\n\tngOnInit(): void {\n\t\t// console.log(\"[ssvCommand::init]\", this.globalOptions);\n\t\tif (!this.commandOrCreator) {\n\t\t\tthrow new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] should be defined!`);\n\t\t} else if (isCommand(this.commandOrCreator)) {\n\t\t\tthis._command = this.commandOrCreator;\n\t\t} else if (isCommandCreator(this.commandOrCreator)) {\n\t\t\tconst isAsync = this.commandOrCreator.isAsync || this.commandOrCreator.isAsync === undefined;\n\n\t\t\t// todo: find something like this for ivy (or angular10+)\n\t\t\t// const hostComponent = (this.viewContainer as any)._view.component;\n\n\t\t\tconst execFn = this.commandOrCreator.execute.bind(this.commandOrCreator.host);\n\t\t\tthis.commandParams = this.commandParams || this.commandOrCreator.params;\n\n\t\t\tconst canExec = this.commandOrCreator.canExecute instanceof Function\n\t\t\t\t? this.commandOrCreator.canExecute.bind(this.commandOrCreator.host, this.commandParams)()\n\t\t\t\t: this.commandOrCreator.canExecute;\n\n\t\t\t// console.log(\"[ssvCommand::init] command creator\", {\n\t\t\t// \tfirstParam: this.commandParams ? this.commandParams[0] : null,\n\t\t\t// \tparams: this.commandParams\n\t\t\t// });\n\t\t\tthis._command = new Command(execFn, canExec, isAsync);\n\t\t} else {\n\t\t\tthrow new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] is not defined properly!`);\n\t\t}\n\n\t\tthis._command.subscribe();\n\t\tthis._command.canExecute$.pipe(\n\t\t\tthis.commandOptions.hasDisabledDelay\n\t\t\t\t? delay(1)\n\t\t\t\t: tap(() => { /* stub */ }),\n\t\t\ttap(x => {\n\t\t\t\tthis.trySetDisabled(!x);\n\t\t\t\t// console.log(\"[ssvCommand::canExecute$]\", { canExecute: x });\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}),\n\t\t\ttakeUntil(this._destroy$),\n\t\t).subscribe();\n\n\t\tif (this._command.isExecuting$) {\n\t\t\tthis._command.isExecuting$.pipe(\n\t\t\t\ttap(x => {\n\t\t\t\t\t// console.log(\"[ssvCommand::isExecuting$]\", x, this.commandOptions);\n\t\t\t\t\tif (x) {\n\t\t\t\t\t\tthis.renderer.addClass(\n\t\t\t\t\t\t\tthis.element.nativeElement,\n\t\t\t\t\t\t\tthis.commandOptions.executingCssClass\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.renderer.removeClass(\n\t\t\t\t\t\t\tthis.element.nativeElement,\n\t\t\t\t\t\t\tthis.commandOptions.executingCssClass\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this._destroy$),\n\t\t\t).subscribe();\n\t\t}\n\t}\n\n\t@HostListener(\"click\")\n\tonClick(): void {\n\t\t// console.log(\"[ssvCommand::onClick]\", this.commandParams);\n\t\tif (Array.isArray(this.commandParams)) {\n\t\t\tthis._command.execute(...this.commandParams);\n\t\t} else {\n\t\t\tthis._command.execute(this.commandParams);\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\t// console.log(\"[ssvCommand::destroy]\");\n\t\tthis._destroy$.next();\n\t\tthis._destroy$.complete();\n\t\tif (this._command) {\n\t\t\tthis._command.unsubscribe();\n\t\t}\n\t}\n\n\tprivate trySetDisabled(disabled: boolean) {\n\t\tif (this.commandOptions.handleDisabled) {\n\t\t\t// console.warn(\">>>> disabled\", { id: this.id, disabled });\n\t\t\tthis.renderer.setProperty(this.element.nativeElement, \"disabled\", disabled);\n\t\t}\n\t}\n\n}\n\n","import { Observable } from \"rxjs\";\nimport { Directive, OnInit, OnDestroy, Input } from \"@angular/core\";\n\nimport { ICommand, CommandCreator } from \"./command.model\";\nimport { isCommandCreator } from \"./command.util\";\nimport { Command } from \"./command\";\n\nconst NAME_CAMEL = \"ssvCommandRef\";\n\n/**\n * Command creator ref, directive which allows creating Command in the template\n * and associate it to a command (in order to share executions).\n * @example\n * ### Most common usage\n * ```html\n * <div #actionCmd=\"ssvCommandRef\" [ssvCommandRef]=\"{host: this, execute: removeHero$, canExecute: isValid$}\">\n * <button [ssvCommand]=\"actionCmd.command\" [ssvCommandParams]=\"hero\">\n * Remove\n * </button>\n * <button [ssvCommand]=\"actionCmd.command\" [ssvCommandParams]=\"hero\">\n * Remove\n * </button>\n * </div>\n * ```\n *\n */\n@Directive({\n\tselector: `[${NAME_CAMEL}]`,\n\texportAs: NAME_CAMEL,\n\tstandalone: true,\n})\nexport class CommandRefDirective implements OnInit, OnDestroy {\n\n\t@Input(NAME_CAMEL) commandCreator: CommandCreator | undefined;\n\n\tget command(): ICommand { return this._command; }\n\tprivate _command!: ICommand;\n\n\tngOnInit(): void {\n\t\tif (isCommandCreator(this.commandCreator)) {\n\t\t\tconst isAsync = this.commandCreator.isAsync || this.commandCreator.isAsync === undefined;\n\n\t\t\tconst execFn = this.commandCreator.execute.bind(this.commandCreator.host);\n\t\t\tthis._command = new Command(execFn, this.commandCreator.canExecute as Observable<boolean> | undefined, isAsync);\n\t\t} else {\n\t\t\tthrow new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] is not defined properly!`);\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\t// console.log(\"[commandRef::destroy]\");\n\t\tif (this._command) {\n\t\t\tthis._command.destroy();\n\t\t}\n\t}\n\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { CommandDirective } from \"./command.directive\";\nimport { CommandRefDirective } from \"./command-ref.directive\";\n\nconst EXPORTED_IMPORTS = [\n\tCommandDirective,\n\tCommandRefDirective\n];\n\n@NgModule({\n\timports: [EXPORTED_IMPORTS],\n\texports: [EXPORTED_IMPORTS]\n})\nexport class SsvCommandModule {\n\n}\n","export const VERSION = \"3.0.0\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NAME_CAMEL"],"mappings":"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"}
1
+ {"version":3,"file":"ssv-ngx.command.mjs","sources":["../../../../libs/ngx.command/src/command.options.ts","../../../../libs/ngx.command/src/command.ts","../../../../libs/ngx.command/src/command.util.ts","../../../../libs/ngx.command/src/command.directive.ts","../../../../libs/ngx.command/src/command-ref.directive.ts","../../../../libs/ngx.command/src/command.module.ts","../../../../libs/ngx.command/src/version.ts","../../../../libs/ngx.command/src/ssv-ngx.command.ts"],"sourcesContent":["import { type EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from \"@angular/core\";\n\nexport interface CommandOptions {\n\t/**\n\t * Css Class which gets added/removed on the Command element's host while Command `isExecuting$`.\n\t */\n\texecutingCssClass: string;\n\n\t/** Determines whether the disabled will be handled by the directive or not.\n\t * Disable handled by directive's doesn't always play nice when used with other component/pipe/directive and they also handle disabled.\n\t * This disables the handling manually and need to pass explicitly `[disabled]=\"!saveCmd.canExecute\"`.\n\t */\n\thandleDisabled: boolean;\n\n\t/** Determine whether to set a `delay(1)` when setting the disabled. Which might be needed when working with external\n\t * components/directives (such as material button)\n\t */\n\thasDisabledDelay: boolean;\n}\n\nconst DEFAULT_OPTIONS = Object.freeze<CommandOptions>({\n\texecutingCssClass: \"executing\",\n\thandleDisabled: true,\n\thasDisabledDelay: false,\n});\n\nexport const COMMAND_OPTIONS = new InjectionToken<CommandOptions>(\"SSV_COMMAND_OPTIONS\", {\n\tfactory: () => DEFAULT_OPTIONS,\n});\n\nexport function provideSsvCommandOptions(\n\toptions: Partial<CommandOptions> | ((defaults: Readonly<CommandOptions>) => Partial<CommandOptions>)\n): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: COMMAND_OPTIONS,\n\t\t\tuseFactory: () => {\n\t\t\t\tlet opts = typeof options === \"function\" ? options(DEFAULT_OPTIONS) : options;\n\t\t\t\topts = opts\n\t\t\t\t\t? {\n\t\t\t\t\t\t...DEFAULT_OPTIONS,\n\t\t\t\t\t\t...opts,\n\t\t\t\t\t}\n\t\t\t\t\t: DEFAULT_OPTIONS;\n\t\t\t\treturn opts;\n\t\t\t},\n\t\t},\n\t]);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n\tObservable, combineLatest, Subscription, Subject, BehaviorSubject, of, EMPTY,\n\ttap, map, filter, switchMap, catchError, finalize, take,\n} from \"rxjs\";\nimport type { ICommand } from \"./command.model\";\nimport { assertInInjectionContext, computed, DestroyRef, inject, Injector, isSignal, type Signal } from \"@angular/core\";\nimport { toObservable } from \"@angular/core/rxjs-interop\";\n\nexport type ExecuteFn = (...args: any[]) => unknown;\nexport type ExecuteAsyncFn = (...args: any[]) => Observable<unknown> | Promise<unknown>;\nexport type CanExecute = (() => boolean) | Signal<boolean> | Observable<boolean>;\n\nexport interface CommandCreateOptions {\n\tisAsync: boolean,\n\tinjector?: Injector;\n}\n\nconst COMMAND_ASYNC_DEFAULT_OPTIONS: CommandCreateOptions = { isAsync: true };\n\n/** Creates an async {@link Command}. Must be used within an injection context.\n * NOTE: this auto injects `DestroyRef` and handles auto destroy. {@link ICommand.autoDestroy} should not be used.\n */\nexport function commandAsync(\n\texecute: ExecuteAsyncFn,\n\tcanExecute$?: CanExecute,\n\topts?: Omit<CommandCreateOptions, \"isAsync\">,\n): Command {\n\treturn command(execute, canExecute$, opts ? { ...opts, ...COMMAND_ASYNC_DEFAULT_OPTIONS } : COMMAND_ASYNC_DEFAULT_OPTIONS);\n}\n\n/** Creates a {@link Command}. Must be used within an injection context.\n * NOTE: this auto injects `DestroyRef` and handles auto destroy. {@link ICommand.autoDestroy} should not be used.\n */\nexport function command(\n\texecute: ExecuteFn,\n\tcanExecute$?: CanExecute,\n\topts?: CommandCreateOptions,\n): Command {\n\tif (!opts?.injector) {\n\t\tassertInInjectionContext(command);\n\t}\n\tconst injector = opts?.injector ?? inject(Injector);\n\tconst isAsync = opts?.isAsync ?? false;\n\tconst destroyRef = injector.get(DestroyRef);\n\tconst cmd = new Command(execute, canExecute$, isAsync);\n\tcmd.autoDestroy = false;\n\n\tdestroyRef.onDestroy(() => {\n\t\t// console.warn(\"[command::destroy]\");\n\t\tcmd.destroy();\n\t});\n\treturn cmd;\n}\n\n/**\n * Command object used to encapsulate information which is needed to perform an action.\n * @deprecated Use {@link command} or {@link commandAsync} instead for creating instances.\n */\nexport class Command implements ICommand {\n\n\t/** Determines whether the command is currently executing, as a snapshot value. */\n\tget isExecuting(): boolean {\n\t\treturn this._isExecuting;\n\t}\n\n\t/** Determines whether the command can execute or not, as a snapshot value. */\n\tget canExecute(): boolean {\n\t\treturn this._canExecute;\n\t}\n\n\t/** Determines whether the command is currently executing, as an observable. */\n\tget isExecuting$(): Observable<boolean> {\n\t\treturn this._isExecuting$.asObservable();\n\t}\n\n\t/** Determines whether to auto destroy when having 0 subscribers. */\n\tautoDestroy = true;\n\n\t/** Determines whether the command can execute or not, as an observable. */\n\treadonly canExecute$: Observable<boolean>;\n\n\tprivate _isExecuting$ = new BehaviorSubject<boolean>(false);\n\tprivate _isExecuting = false;\n\tprivate _canExecute = true;\n\tprivate executionPipe$ = new Subject<unknown[] | undefined>();\n\tprivate isExecuting$$ = Subscription.EMPTY;\n\tprivate canExecute$$ = Subscription.EMPTY;\n\tprivate executionPipe$$ = Subscription.EMPTY;\n\tprivate subscribersCount = 0;\n\n\t/**\n\t * Creates an instance of Command.\n\t *\n\t * @param execute Execute function to invoke - use `isAsync: true` when `Observable<any>`.\n\t * @param canExecute Observable which determines whether it can execute or not.\n\t * @param isAsync Indicates that the execute function is async e.g. Observable.\n\t */\n\tconstructor(\n\t\texecute: ExecuteFn,\n\t\tcanExecute$?: CanExecute,\n\t\tisAsync?: boolean,\n\t\tinjector?: Injector,\n\t) {\n\t\tif (canExecute$) {\n\t\t\tconst canExecute = typeof canExecute$ === \"function\"\n\t\t\t\t? computed(canExecute$)\n\t\t\t\t: canExecute$;\n\t\t\tthis.canExecute$ = combineLatest([\n\t\t\t\tthis._isExecuting$,\n\t\t\t\tisSignal(canExecute) ? toObservable(canExecute, { injector }) : canExecute\n\t\t\t]).pipe(\n\t\t\t\tmap(([isExecuting, canExecuteResult]) => {\n\t\t\t\t\t// console.log(\"[command::combineLatest$] update!\", { isExecuting, canExecuteResult });\n\t\t\t\t\tthis._isExecuting = isExecuting;\n\t\t\t\t\tthis._canExecute = !isExecuting && !!canExecuteResult;\n\t\t\t\t\treturn this._canExecute;\n\t\t\t\t}),\n\t\t\t);\n\t\t\tthis.canExecute$$ = this.canExecute$.subscribe();\n\t\t} else {\n\t\t\tthis.canExecute$ = this._isExecuting$.pipe(\n\t\t\t\tmap(x => {\n\t\t\t\t\tconst canExecute = !x;\n\t\t\t\t\tthis._canExecute = canExecute;\n\t\t\t\t\treturn canExecute;\n\t\t\t\t})\n\t\t\t);\n\t\t\tthis.isExecuting$$ = this._isExecuting$\n\t\t\t\t.pipe(tap(x => this._isExecuting = x))\n\t\t\t\t.subscribe();\n\t\t}\n\t\tthis.executionPipe$$ = this.buildExecutionPipe(execute, isAsync).subscribe();\n\t}\n\n\t/** Execute function to invoke. */\n\texecute(...args: unknown[]): void {\n\t\t// console.warn(\"[command::execute]\", args);\n\t\tthis.executionPipe$.next(args);\n\t}\n\n\t/** Disposes all resources held by subscriptions. */\n\tdestroy(): void {\n\t\t// console.warn(\"[command::destroy]\");\n\t\tthis.executionPipe$$.unsubscribe();\n\t\tthis.canExecute$$.unsubscribe();\n\t\tthis.isExecuting$$.unsubscribe();\n\t}\n\n\tsubscribe(): void {\n\t\tthis.subscribersCount++;\n\t}\n\n\tunsubscribe(): void {\n\t\tthis.subscribersCount--;\n\t\t// console.log(\"[command::unsubscribe]\", { autoDestroy: this.autoDestroy, subscribersCount: this.subscribersCount });\n\t\tif (this.autoDestroy && this.subscribersCount <= 0) {\n\t\t\tthis.destroy();\n\t\t}\n\t}\n\n\tprivate buildExecutionPipe(execute: (...args: unknown[]) => any, isAsync?: boolean): Observable<unknown> {\n\t\tlet pipe$ = this.executionPipe$.pipe(\n\t\t\t// tap(x => console.warn(\">>>> executionPipe\", this._canExecute)),\n\t\t\tfilter(() => this._canExecute),\n\t\t\ttap(() => {\n\t\t\t\t// console.log(\"[command::executionPipe$] do#1 - set execute\", { args: x });\n\t\t\t\tthis._isExecuting$.next(true);\n\t\t\t})\n\t\t);\n\n\t\tconst execFn = isAsync\n\t\t\t? switchMap<unknown[] | undefined, any[]>(args => {\n\t\t\t\tif (args) {\n\t\t\t\t\treturn execute(...args);\n\t\t\t\t}\n\t\t\t\treturn execute();\n\t\t\t})\n\t\t\t: tap((args: unknown[] | undefined) => {\n\t\t\t\tif (args) {\n\t\t\t\t\texecute(...args);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\texecute();\n\t\t\t});\n\n\t\tpipe$ = pipe$.pipe(\n\t\t\tswitchMap(args => of(args).pipe(\n\t\t\t\texecFn,\n\t\t\t\tfinalize(() => {\n\t\t\t\t\t// console.log(\"[command::executionPipe$] finalize inner#1 - set idle\");\n\t\t\t\t\tthis._isExecuting$.next(false);\n\t\t\t\t}),\n\t\t\t\ttake(1),\n\t\t\t\tcatchError(error => {\n\t\t\t\t\tconsole.error(\"Unhandled execute error\", error);\n\t\t\t\t\treturn EMPTY;\n\t\t\t\t}),\n\t\t\t)),\n\t\t\ttap(\n\t\t\t\t() => {\n\t\t\t\t\t// console.log(\"[command::executionPipe$] tap#2 - set idle\");\n\t\t\t\t\tthis._isExecuting$.next(false);\n\t\t\t\t},\n\t\t\t)\n\t\t);\n\t\treturn pipe$;\n\t}\n\n}\n\n/**\n * Async Command object used to encapsulate information which is needed to perform an action,\n * which takes an execute function as Observable/Promise.\n * @deprecated Use {@link commandAsync} instead.\n */\nexport class CommandAsync extends Command {\n\n\tconstructor(\n\t\texecute: ExecuteAsyncFn,\n\t\tcanExecute$?: CanExecute,\n\t) {\n\t\tsuper(execute, canExecute$, true);\n\t}\n\n}\n","import { AbstractControl, PristineChangeEvent, StatusChangeEvent } from \"@angular/forms\";\nimport { Observable, map, distinctUntilChanged, startWith, filter, combineLatest, of } from \"rxjs\";\n\nimport { CommandCreator, ICommand } from \"./command.model\";\nimport { Command } from \"./command\";\nimport { type Signal, computed } from \"@angular/core\";\n\n/** Determines whether the arg object is of type `Command`. */\nexport function isCommand(arg: unknown): arg is ICommand {\n\treturn arg instanceof Command;\n}\n\n/** Determines whether the arg object is of type `CommandCreator`. */\nexport function isCommandCreator(arg: unknown): arg is CommandCreator {\n\tif (arg instanceof Command) {\n\t\treturn false;\n\t} else if (isAssumedType<CommandCreator>(arg) && arg.execute && arg.host) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport interface CanExecuteFormOptions {\n\t/** Determines whether to check for validity. (defaults: true) */\n\tvalidity?: boolean;\n\n\t/** Determines whether to check whether UI has been touched. (defaults: true) */\n\tdirty?: boolean;\n}\n\nconst CAN_EXECUTE_FORM_OPTIONS_DEFAULTS = Object.freeze<CanExecuteFormOptions>({\n\tvalidity: true,\n\tdirty: true,\n})\n\n/** Get can execute from form validity/pristine as an observable. */\nexport function canExecuteFromNgForm(\n\tform: AbstractControl,\n\toptions?: CanExecuteFormOptions\n): Observable<boolean> {\n\tconst opts: CanExecuteFormOptions = options ?\n\t\t{ ...CAN_EXECUTE_FORM_OPTIONS_DEFAULTS, ...options }\n\t\t: CAN_EXECUTE_FORM_OPTIONS_DEFAULTS;\n\n\tconst pristine$ = opts.dirty\n\t\t? form.events.pipe(\n\t\t\tfilter(x => x instanceof PristineChangeEvent),\n\t\t\tmap(x => x.pristine),\n\t\t\tdistinctUntilChanged(),\n\t\t\tstartWith(form.pristine),\n\t\t) : of(true);\n\n\tconst valid$ = opts.validity\n\t\t? form.events.pipe(\n\t\t\tfilter(x => x instanceof StatusChangeEvent),\n\t\t\tmap(x => x.status === \"VALID\"),\n\t\t\tdistinctUntilChanged(),\n\t\t\tstartWith(form.pristine),\n\t\t) : of(true);\n\n\treturn combineLatest([pristine$, valid$]).pipe(\n\t\tmap(([pristine, valid]) => !!(!opts.validity || valid) && !!(!opts.dirty || !pristine)),\n\t\tdistinctUntilChanged(),\n\t);\n}\n\n/** Can executed based on valid/dirty signal inputs. */\nexport function canExecuteFromSignals(\n\tsignals: { valid: Signal<boolean>, dirty: Signal<boolean> },\n\toptions?: CanExecuteFormOptions\n): Signal<boolean> {\n\tconst opts: CanExecuteFormOptions = options ?\n\t\t{ ...CAN_EXECUTE_FORM_OPTIONS_DEFAULTS, ...options }\n\t\t: CAN_EXECUTE_FORM_OPTIONS_DEFAULTS;\n\treturn computed(() => !!(!opts.validity || signals.valid()) && !!(!opts.dirty || signals.dirty()));\n}\n\n\nfunction isAssumedType<T = Record<string, unknown>>(x: unknown): x is Partial<T> {\n\treturn x !== null && typeof x === \"object\";\n}\n","import {\n\tDirective,\n\tOnInit,\n\tOnDestroy,\n\tInput,\n\tHostListener,\n\tElementRef,\n\tRenderer2,\n\tChangeDetectorRef,\n\tinject,\n} from \"@angular/core\";\nimport { Subject, tap, delay, takeUntil } from \"rxjs\";\n\nimport { type CommandOptions, COMMAND_OPTIONS } from \"./command.options\";\nimport { Command } from \"./command\";\nimport { isCommand, isCommandCreator } from \"./command.util\";\nimport { CommandCreator, type ICommand } from \"./command.model\";\n\n/**\n * Controls the state of a component in sync with `Command`.\n *\n * @example\n * ### Most common usage\n * ```html\n * <button [ssvCommand]=\"saveCmd\">Save</button>\n * ```\n *\n *\n * ### Usage with options\n * ```html\n * <button [ssvCommand]=\"saveCmd\" [ssvCommandOptions]=\"{executingCssClass: 'in-progress'}\">Save</button>\n * ```\n *\n *\n * ### Usage with params\n * This is useful for collections (loops) or using multiple actions with different args.\n * *NOTE: This will share the `isExecuting` when used with multiple controls.*\n *\n * #### With single param\n *\n * ```html\n * <button [ssvCommand]=\"saveCmd\" [ssvCommandParams]=\"{id: 1}\">Save</button>\n * ```\n * *NOTE: if you have only 1 argument as an array, it should be enclosed within an array e.g. `[['apple', 'banana']]`,\n * else it will spread and you will `arg1: \"apple\", arg2: \"banana\"`*\n *\n * #### With multi params\n * ```html\n * <button [ssvCommand]=\"saveCmd\" [ssvCommandParams]=\"[{id: 1}, 'hello', hero]\">Save</button>\n * ```\n *\n * ### Usage with Command Creator\n * This is useful for collections (loops) or using multiple actions with different args, whilst not sharing `isExecuting`.\n *\n *\n * ```html\n * <button [ssvCommand]=\"{host: this, execute: removeHero$, canExecute: isValid$, params: [hero, 1337, 'xx']}\">Save</button>\n * ```\n *\n */\n\nconst NAME_CAMEL = \"ssvCommand\";\n\n// let nextUniqueId = 0;\n\n@Directive({\n\tselector: `[${NAME_CAMEL}]`,\n\texportAs: NAME_CAMEL,\n\tstandalone: true,\n})\nexport class CommandDirective implements OnInit, OnDestroy {\n\n\t// readonly id = `${NAME_CAMEL}-${nextUniqueId++}`;\n\tprivate readonly globalOptions = inject(COMMAND_OPTIONS);\n\tprivate readonly renderer = inject(Renderer2);\n\tprivate readonly element = inject(ElementRef);\n\tprivate readonly cdr = inject(ChangeDetectorRef);\n\n\t@Input(NAME_CAMEL) commandOrCreator: ICommand | CommandCreator | undefined;\n\n\t@Input(`${NAME_CAMEL}Options`)\n\tget commandOptions(): CommandOptions { return this._commandOptions; }\n\tset commandOptions(value: Partial<CommandOptions>) {\n\t\tif (value === this._commandOptions) {\n\t\t\treturn;\n\t\t}\n\t\tthis._commandOptions = {\n\t\t\t...this.globalOptions,\n\t\t\t...value,\n\t\t};\n\t}\n\n\t@Input(`${NAME_CAMEL}Params`) commandParams: unknown | unknown[];\n\n\tget command(): ICommand { return this._command; }\n\n\tprivate _command!: ICommand;\n\tprivate _commandOptions: CommandOptions = this.globalOptions;\n\tprivate _destroy$ = new Subject<void>();\n\n\tngOnInit(): void {\n\t\t// console.log(\"[ssvCommand::init]\", this.globalOptions);\n\t\tif (!this.commandOrCreator) {\n\t\t\tthrow new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] should be defined!`);\n\t\t} else if (isCommand(this.commandOrCreator)) {\n\t\t\tthis._command = this.commandOrCreator;\n\t\t} else if (isCommandCreator(this.commandOrCreator)) {\n\t\t\tconst isAsync = this.commandOrCreator.isAsync || this.commandOrCreator.isAsync === undefined;\n\n\t\t\t// todo: find something like this for ivy (or angular10+)\n\t\t\t// const hostComponent = (this.viewContainer as any)._view.component;\n\n\t\t\tconst execFn = this.commandOrCreator.execute.bind(this.commandOrCreator.host);\n\t\t\tthis.commandParams = this.commandParams || this.commandOrCreator.params;\n\n\t\t\tconst canExec = this.commandOrCreator.canExecute instanceof Function\n\t\t\t\t? this.commandOrCreator.canExecute.bind(this.commandOrCreator.host, this.commandParams)()\n\t\t\t\t: this.commandOrCreator.canExecute;\n\n\t\t\t// console.log(\"[ssvCommand::init] command creator\", {\n\t\t\t// \tfirstParam: this.commandParams ? this.commandParams[0] : null,\n\t\t\t// \tparams: this.commandParams\n\t\t\t// });\n\t\t\tthis._command = new Command(execFn, canExec, isAsync);\n\t\t} else {\n\t\t\tthrow new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] is not defined properly!`);\n\t\t}\n\n\t\tthis._command.subscribe();\n\t\tthis._command.canExecute$.pipe(\n\t\t\tthis.commandOptions.hasDisabledDelay\n\t\t\t\t? delay(1)\n\t\t\t\t: tap(() => { /* stub */ }),\n\t\t\ttap(x => {\n\t\t\t\tthis.trySetDisabled(!x);\n\t\t\t\t// console.log(\"[ssvCommand::canExecute$]\", { canExecute: x });\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}),\n\t\t\ttakeUntil(this._destroy$),\n\t\t).subscribe();\n\n\t\tif (this._command.isExecuting$) {\n\t\t\tthis._command.isExecuting$.pipe(\n\t\t\t\ttap(x => {\n\t\t\t\t\t// console.log(\"[ssvCommand::isExecuting$]\", x, this.commandOptions);\n\t\t\t\t\tif (x) {\n\t\t\t\t\t\tthis.renderer.addClass(\n\t\t\t\t\t\t\tthis.element.nativeElement,\n\t\t\t\t\t\t\tthis.commandOptions.executingCssClass\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.renderer.removeClass(\n\t\t\t\t\t\t\tthis.element.nativeElement,\n\t\t\t\t\t\t\tthis.commandOptions.executingCssClass\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this._destroy$),\n\t\t\t).subscribe();\n\t\t}\n\t}\n\n\t@HostListener(\"click\")\n\tonClick(): void {\n\t\t// console.log(\"[ssvCommand::onClick]\", this.commandParams);\n\t\tif (Array.isArray(this.commandParams)) {\n\t\t\tthis._command.execute(...this.commandParams);\n\t\t} else {\n\t\t\tthis._command.execute(this.commandParams);\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\t// console.log(\"[ssvCommand::destroy]\");\n\t\tthis._destroy$.next();\n\t\tthis._destroy$.complete();\n\t\tif (this._command) {\n\t\t\tthis._command.unsubscribe();\n\t\t}\n\t}\n\n\tprivate trySetDisabled(disabled: boolean) {\n\t\tif (this.commandOptions.handleDisabled) {\n\t\t\t// console.warn(\">>>> disabled\", { id: this.id, disabled });\n\t\t\tthis.renderer.setProperty(this.element.nativeElement, \"disabled\", disabled);\n\t\t}\n\t}\n\n}\n\n","import { Observable } from \"rxjs\";\nimport { Directive, OnInit, OnDestroy, Input } from \"@angular/core\";\n\nimport { ICommand, CommandCreator } from \"./command.model\";\nimport { isCommandCreator } from \"./command.util\";\nimport { Command } from \"./command\";\n\nconst NAME_CAMEL = \"ssvCommandRef\";\n\n/**\n * Command creator ref, directive which allows creating Command in the template\n * and associate it to a command (in order to share executions).\n * @example\n * ### Most common usage\n * ```html\n * <div #actionCmd=\"ssvCommandRef\" [ssvCommandRef]=\"{host: this, execute: removeHero$, canExecute: isValid$}\">\n * <button [ssvCommand]=\"actionCmd.command\" [ssvCommandParams]=\"hero\">\n * Remove\n * </button>\n * <button [ssvCommand]=\"actionCmd.command\" [ssvCommandParams]=\"hero\">\n * Remove\n * </button>\n * </div>\n * ```\n *\n */\n@Directive({\n\tselector: `[${NAME_CAMEL}]`,\n\texportAs: NAME_CAMEL,\n\tstandalone: true,\n})\nexport class CommandRefDirective implements OnInit, OnDestroy {\n\n\t@Input(NAME_CAMEL) commandCreator: CommandCreator | undefined;\n\n\tget command(): ICommand { return this._command; }\n\tprivate _command!: ICommand;\n\n\tngOnInit(): void {\n\t\tif (isCommandCreator(this.commandCreator)) {\n\t\t\tconst isAsync = this.commandCreator.isAsync || this.commandCreator.isAsync === undefined;\n\n\t\t\tconst execFn = this.commandCreator.execute.bind(this.commandCreator.host);\n\t\t\tthis._command = new Command(execFn, this.commandCreator.canExecute as Observable<boolean> | undefined, isAsync);\n\t\t} else {\n\t\t\tthrow new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] is not defined properly!`);\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\t// console.log(\"[commandRef::destroy]\");\n\t\tif (this._command) {\n\t\t\tthis._command.destroy();\n\t\t}\n\t}\n\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { CommandDirective } from \"./command.directive\";\nimport { CommandRefDirective } from \"./command-ref.directive\";\n\nconst EXPORTED_IMPORTS = [\n\tCommandDirective,\n\tCommandRefDirective\n];\n\n@NgModule({\n\timports: [EXPORTED_IMPORTS],\n\texports: [EXPORTED_IMPORTS]\n})\nexport class SsvCommandModule {\n\n}\n","export const VERSION = \"3.1.0-dev.45\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NAME_CAMEL"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -3,6 +3,6 @@ export { provideSsvCommandOptions, COMMAND_OPTIONS, type CommandOptions } from "
3
3
  export { command, commandAsync, Command, CommandAsync, type CanExecute, type CommandCreateOptions } from "./command";
4
4
  export { CommandDirective } from "./command.directive";
5
5
  export { CommandRefDirective } from "./command-ref.directive";
6
- export { type CanExecuteFormOptions, isCommand, isCommandCreator, canExecuteFromNgForm } from "./command.util";
6
+ export { type CanExecuteFormOptions, isCommand, isCommandCreator, canExecuteFromNgForm, canExecuteFromSignals } from "./command.util";
7
7
  export type { CommandCreator, ICommand } from "./command.model";
8
8
  export { VERSION } from "./version";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ssv/ngx.command",
3
- "version": "3.0.0",
3
+ "version": "3.1.0-dev.45",
4
4
  "versionSuffix": "",
5
5
  "description": "Command pattern implementation for angular. Command used to encapsulate information which is needed to perform an action.",
6
6
  "keywords": [
package/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "3.0.0";
1
+ export declare const VERSION = "3.1.0-dev.45";