@ssv/ngx.command 3.2.0 → 3.3.0-dev.76

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/command.util.d.ts DELETED
@@ -1,21 +0,0 @@
1
- import { AbstractControl } from "@angular/forms";
2
- import { Observable } from "rxjs";
3
- import { CommandCreator, ICommand } from "./command.model";
4
- import { type Signal } from "@angular/core";
5
- /** Determines whether the arg object is of type `Command`. */
6
- export declare function isCommand(arg: unknown): arg is ICommand;
7
- /** Determines whether the arg object is of type `CommandCreator`. */
8
- export declare function isCommandCreator(arg: unknown): arg is CommandCreator;
9
- export interface CanExecuteFormOptions {
10
- /** Determines whether to check for validity. (defaults: true) */
11
- validity?: boolean;
12
- /** Determines whether to check whether UI has been touched. (defaults: true) */
13
- dirty?: boolean;
14
- }
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>;
@@ -1,57 +0,0 @@
1
- import { Directive, Input } from "@angular/core";
2
- import { isCommandCreator } from "./command.util";
3
- import { Command } from "./command";
4
- import * as i0 from "@angular/core";
5
- const NAME_CAMEL = "ssvCommandRef";
6
- /**
7
- * Command creator ref, directive which allows creating Command in the template
8
- * and associate it to a command (in order to share executions).
9
- * @example
10
- * ### Most common usage
11
- * ```html
12
- * <div #actionCmd="ssvCommandRef" [ssvCommandRef]="{host: this, execute: removeHero$, canExecute: isValid$}">
13
- * <button [ssvCommand]="actionCmd.command" [ssvCommandParams]="hero">
14
- * Remove
15
- * </button>
16
- * <button [ssvCommand]="actionCmd.command" [ssvCommandParams]="hero">
17
- * Remove
18
- * </button>
19
- * </div>
20
- * ```
21
- *
22
- */
23
- export class CommandRefDirective {
24
- commandCreator;
25
- get command() { return this._command; }
26
- _command;
27
- ngOnInit() {
28
- if (isCommandCreator(this.commandCreator)) {
29
- const isAsync = this.commandCreator.isAsync || this.commandCreator.isAsync === undefined;
30
- const execFn = this.commandCreator.execute.bind(this.commandCreator.host);
31
- this._command = new Command(execFn, this.commandCreator.canExecute, isAsync);
32
- }
33
- else {
34
- throw new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] is not defined properly!`);
35
- }
36
- }
37
- ngOnDestroy() {
38
- // console.log("[commandRef::destroy]");
39
- if (this._command) {
40
- this._command.destroy();
41
- }
42
- }
43
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CommandRefDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
44
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.9", type: CommandRefDirective, isStandalone: true, selector: "[ssvCommandRef]", inputs: { commandCreator: ["ssvCommandRef", "commandCreator"] }, exportAs: ["ssvCommandRef"], ngImport: i0 });
45
- }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CommandRefDirective, decorators: [{
47
- type: Directive,
48
- args: [{
49
- selector: `[${NAME_CAMEL}]`,
50
- exportAs: NAME_CAMEL,
51
- standalone: true,
52
- }]
53
- }], propDecorators: { commandCreator: [{
54
- type: Input,
55
- args: [NAME_CAMEL]
56
- }] } });
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1yZWYuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9uZ3guY29tbWFuZC9zcmMvY29tbWFuZC1yZWYuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUVwQyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUM7QUFFbkM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFNSCxNQUFNLE9BQU8sbUJBQW1CO0lBRVosY0FBYyxDQUE2QjtJQUU5RCxJQUFJLE9BQU8sS0FBZSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsQ0FBWTtJQUU1QixRQUFRO1FBQ1AsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUM7WUFFekYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUE2QyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pILENBQUM7YUFBTSxDQUFDO1lBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFVBQVUsTUFBTSxVQUFVLDRCQUE0QixDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNGLENBQUM7SUFFRCxXQUFXO1FBQ1Ysd0NBQXdDO1FBQ3hDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNGLENBQUM7dUdBdkJXLG1CQUFtQjsyRkFBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQUwvQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxJQUFJLFVBQVUsR0FBRztvQkFDM0IsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFVBQVUsRUFBRSxJQUFJO2lCQUNoQjs4QkFHbUIsY0FBYztzQkFBaEMsS0FBSzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IElDb21tYW5kLCBDb21tYW5kQ3JlYXRvciB9IGZyb20gXCIuL2NvbW1hbmQubW9kZWxcIjtcbmltcG9ydCB7IGlzQ29tbWFuZENyZWF0b3IgfSBmcm9tIFwiLi9jb21tYW5kLnV0aWxcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiLi9jb21tYW5kXCI7XG5cbmNvbnN0IE5BTUVfQ0FNRUwgPSBcInNzdkNvbW1hbmRSZWZcIjtcblxuLyoqXG4gKiBDb21tYW5kIGNyZWF0b3IgcmVmLCBkaXJlY3RpdmUgd2hpY2ggYWxsb3dzIGNyZWF0aW5nIENvbW1hbmQgaW4gdGhlIHRlbXBsYXRlXG4gKiBhbmQgYXNzb2NpYXRlIGl0IHRvIGEgY29tbWFuZCAoaW4gb3JkZXIgdG8gc2hhcmUgZXhlY3V0aW9ucykuXG4gKiBAZXhhbXBsZVxuICogIyMjIE1vc3QgY29tbW9uIHVzYWdlXG4gKiBgYGBodG1sXG4gKiA8ZGl2ICNhY3Rpb25DbWQ9XCJzc3ZDb21tYW5kUmVmXCIgW3NzdkNvbW1hbmRSZWZdPVwie2hvc3Q6IHRoaXMsIGV4ZWN1dGU6IHJlbW92ZUhlcm8kLCBjYW5FeGVjdXRlOiBpc1ZhbGlkJH1cIj5cbiAqICAgIDxidXR0b24gW3NzdkNvbW1hbmRdPVwiYWN0aW9uQ21kLmNvbW1hbmRcIiBbc3N2Q29tbWFuZFBhcmFtc109XCJoZXJvXCI+XG4gKiAgICAgIFJlbW92ZVxuICogICAgPC9idXR0b24+XG4gKiAgICA8YnV0dG9uIFtzc3ZDb21tYW5kXT1cImFjdGlvbkNtZC5jb21tYW5kXCIgW3NzdkNvbW1hbmRQYXJhbXNdPVwiaGVyb1wiPlxuICogICAgICAgUmVtb3ZlXG4gKiAgICA8L2J1dHRvbj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKlxuICovXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6IGBbJHtOQU1FX0NBTUVMfV1gLFxuXHRleHBvcnRBczogTkFNRV9DQU1FTCxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ29tbWFuZFJlZkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuXHRASW5wdXQoTkFNRV9DQU1FTCkgY29tbWFuZENyZWF0b3I6IENvbW1hbmRDcmVhdG9yIHwgdW5kZWZpbmVkO1xuXG5cdGdldCBjb21tYW5kKCk6IElDb21tYW5kIHsgcmV0dXJuIHRoaXMuX2NvbW1hbmQ7IH1cblx0cHJpdmF0ZSBfY29tbWFuZCE6IElDb21tYW5kO1xuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdGlmIChpc0NvbW1hbmRDcmVhdG9yKHRoaXMuY29tbWFuZENyZWF0b3IpKSB7XG5cdFx0XHRjb25zdCBpc0FzeW5jID0gdGhpcy5jb21tYW5kQ3JlYXRvci5pc0FzeW5jIHx8IHRoaXMuY29tbWFuZENyZWF0b3IuaXNBc3luYyA9PT0gdW5kZWZpbmVkO1xuXG5cdFx0XHRjb25zdCBleGVjRm4gPSB0aGlzLmNvbW1hbmRDcmVhdG9yLmV4ZWN1dGUuYmluZCh0aGlzLmNvbW1hbmRDcmVhdG9yLmhvc3QpO1xuXHRcdFx0dGhpcy5fY29tbWFuZCA9IG5ldyBDb21tYW5kKGV4ZWNGbiwgdGhpcy5jb21tYW5kQ3JlYXRvci5jYW5FeGVjdXRlIGFzIE9ic2VydmFibGU8Ym9vbGVhbj4gfCB1bmRlZmluZWQsIGlzQXN5bmMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYCR7TkFNRV9DQU1FTH06IFske05BTUVfQ0FNRUx9XSBpcyBub3QgZGVmaW5lZCBwcm9wZXJseSFgKTtcblx0XHR9XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHQvLyBjb25zb2xlLmxvZyhcIltjb21tYW5kUmVmOjpkZXN0cm95XVwiKTtcblx0XHRpZiAodGhpcy5fY29tbWFuZCkge1xuXHRcdFx0dGhpcy5fY29tbWFuZC5kZXN0cm95KCk7XG5cdFx0fVxuXHR9XG5cbn1cbiJdfQ==
@@ -1,165 +0,0 @@
1
- import { Directive, Input, HostListener, ElementRef, Renderer2, ChangeDetectorRef, inject, } from "@angular/core";
2
- import { Subject, tap, delay, takeUntil } from "rxjs";
3
- import { COMMAND_OPTIONS } from "./command.options";
4
- import { Command } from "./command";
5
- import { isCommand, isCommandCreator } from "./command.util";
6
- import * as i0 from "@angular/core";
7
- /**
8
- * Controls the state of a component in sync with `Command`.
9
- *
10
- * @example
11
- * ### Most common usage
12
- * ```html
13
- * <button [ssvCommand]="saveCmd">Save</button>
14
- * ```
15
- *
16
- *
17
- * ### Usage with options
18
- * ```html
19
- * <button [ssvCommand]="saveCmd" [ssvCommandOptions]="{executingCssClass: 'in-progress'}">Save</button>
20
- * ```
21
- *
22
- *
23
- * ### Usage with params
24
- * This is useful for collections (loops) or using multiple actions with different args.
25
- * *NOTE: This will share the `isExecuting` when used with multiple controls.*
26
- *
27
- * #### With single param
28
- *
29
- * ```html
30
- * <button [ssvCommand]="saveCmd" [ssvCommandParams]="{id: 1}">Save</button>
31
- * ```
32
- * *NOTE: if you have only 1 argument as an array, it should be enclosed within an array e.g. `[['apple', 'banana']]`,
33
- * else it will spread and you will `arg1: "apple", arg2: "banana"`*
34
- *
35
- * #### With multi params
36
- * ```html
37
- * <button [ssvCommand]="saveCmd" [ssvCommandParams]="[{id: 1}, 'hello', hero]">Save</button>
38
- * ```
39
- *
40
- * ### Usage with Command Creator
41
- * This is useful for collections (loops) or using multiple actions with different args, whilst not sharing `isExecuting`.
42
- *
43
- *
44
- * ```html
45
- * <button [ssvCommand]="{host: this, execute: removeHero$, canExecute: isValid$, params: [hero, 1337, 'xx']}">Save</button>
46
- * ```
47
- *
48
- */
49
- const NAME_CAMEL = "ssvCommand";
50
- // let nextUniqueId = 0;
51
- export class CommandDirective {
52
- // readonly id = `${NAME_CAMEL}-${nextUniqueId++}`;
53
- globalOptions = inject(COMMAND_OPTIONS);
54
- renderer = inject(Renderer2);
55
- element = inject(ElementRef);
56
- cdr = inject(ChangeDetectorRef);
57
- commandOrCreator;
58
- get commandOptions() { return this._commandOptions; }
59
- set commandOptions(value) {
60
- if (value === this._commandOptions) {
61
- return;
62
- }
63
- this._commandOptions = {
64
- ...this.globalOptions,
65
- ...value,
66
- };
67
- }
68
- commandParams;
69
- get command() { return this._command; }
70
- _command;
71
- _commandOptions = this.globalOptions;
72
- _destroy$ = new Subject();
73
- ngOnInit() {
74
- // console.log("[ssvCommand::init]", this.globalOptions);
75
- if (!this.commandOrCreator) {
76
- throw new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] should be defined!`);
77
- }
78
- else if (isCommand(this.commandOrCreator)) {
79
- this._command = this.commandOrCreator;
80
- }
81
- else if (isCommandCreator(this.commandOrCreator)) {
82
- const isAsync = this.commandOrCreator.isAsync || this.commandOrCreator.isAsync === undefined;
83
- // todo: find something like this for ivy (or angular10+)
84
- // const hostComponent = (this.viewContainer as any)._view.component;
85
- const execFn = this.commandOrCreator.execute.bind(this.commandOrCreator.host);
86
- this.commandParams = this.commandParams || this.commandOrCreator.params;
87
- const canExec = this.commandOrCreator.canExecute instanceof Function
88
- ? this.commandOrCreator.canExecute.bind(this.commandOrCreator.host, this.commandParams)()
89
- : this.commandOrCreator.canExecute;
90
- // console.log("[ssvCommand::init] command creator", {
91
- // firstParam: this.commandParams ? this.commandParams[0] : null,
92
- // params: this.commandParams
93
- // });
94
- this._command = new Command(execFn, canExec, isAsync);
95
- }
96
- else {
97
- throw new Error(`${NAME_CAMEL}: [${NAME_CAMEL}] is not defined properly!`);
98
- }
99
- this._command.subscribe();
100
- this._command.canExecute$.pipe(this.commandOptions.hasDisabledDelay
101
- ? delay(1)
102
- : tap(() => { }), tap(x => {
103
- this.trySetDisabled(!x);
104
- // console.log("[ssvCommand::canExecute$]", { canExecute: x });
105
- this.cdr.markForCheck();
106
- }), takeUntil(this._destroy$)).subscribe();
107
- if (this._command.isExecuting$) {
108
- this._command.isExecuting$.pipe(tap(x => {
109
- // console.log("[ssvCommand::isExecuting$]", x, this.commandOptions);
110
- if (x) {
111
- this.renderer.addClass(this.element.nativeElement, this.commandOptions.executingCssClass);
112
- }
113
- else {
114
- this.renderer.removeClass(this.element.nativeElement, this.commandOptions.executingCssClass);
115
- }
116
- }), takeUntil(this._destroy$)).subscribe();
117
- }
118
- }
119
- onClick() {
120
- // console.log("[ssvCommand::onClick]", this.commandParams);
121
- if (Array.isArray(this.commandParams)) {
122
- this._command.execute(...this.commandParams);
123
- }
124
- else {
125
- this._command.execute(this.commandParams);
126
- }
127
- }
128
- ngOnDestroy() {
129
- // console.log("[ssvCommand::destroy]");
130
- this._destroy$.next();
131
- this._destroy$.complete();
132
- if (this._command) {
133
- this._command.unsubscribe();
134
- }
135
- }
136
- trySetDisabled(disabled) {
137
- if (this.commandOptions.handleDisabled) {
138
- // console.warn(">>>> disabled", { id: this.id, disabled });
139
- this.renderer.setProperty(this.element.nativeElement, "disabled", disabled);
140
- }
141
- }
142
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CommandDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
143
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.9", type: CommandDirective, isStandalone: true, selector: "[ssvCommand]", inputs: { commandOrCreator: ["ssvCommand", "commandOrCreator"], commandOptions: ["ssvCommandOptions", "commandOptions"], commandParams: ["ssvCommandParams", "commandParams"] }, host: { listeners: { "click": "onClick()" } }, exportAs: ["ssvCommand"], ngImport: i0 });
144
- }
145
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CommandDirective, decorators: [{
146
- type: Directive,
147
- args: [{
148
- selector: `[${NAME_CAMEL}]`,
149
- exportAs: NAME_CAMEL,
150
- standalone: true,
151
- }]
152
- }], propDecorators: { commandOrCreator: [{
153
- type: Input,
154
- args: [NAME_CAMEL]
155
- }], commandOptions: [{
156
- type: Input,
157
- args: [`${NAME_CAMEL}Options`]
158
- }], commandParams: [{
159
- type: Input,
160
- args: [`${NAME_CAMEL}Params`]
161
- }], onClick: [{
162
- type: HostListener,
163
- args: ["click"]
164
- }] } });
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25neC5jb21tYW5kL3NyYy9jb21tYW5kLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUdULEtBQUssRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEQsT0FBTyxFQUF1QixlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUNHO0FBRUgsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDO0FBRWhDLHdCQUF3QjtBQU94QixNQUFNLE9BQU8sZ0JBQWdCO0lBRTVCLG1EQUFtRDtJQUNsQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3hDLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0IsT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QixHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFOUIsZ0JBQWdCLENBQXdDO0lBRTNFLElBQ0ksY0FBYyxLQUFxQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLElBQUksY0FBYyxDQUFDLEtBQThCO1FBQ2hELElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxlQUFl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UUFBaUI7UUFDdkMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hDLDREQUE0RDtZQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0UsQ0FBQztJQUNGLENBQUM7dUdBcEhXLGdCQUFnQjsyRkFBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUw1QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxJQUFJLFVBQVUsR0FBRztvQkFDM0IsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFVBQVUsRUFBRSxJQUFJO2lCQUNoQjs4QkFTbUIsZ0JBQWdCO3NCQUFsQyxLQUFLO3VCQUFDLFVBQVU7Z0JBR2IsY0FBYztzQkFEakIsS0FBSzt1QkFBQyxHQUFHLFVBQVUsU0FBUztnQkFZQyxhQUFhO3NCQUExQyxLQUFLO3VCQUFDLEdBQUcsVUFBVSxRQUFRO2dCQXVFNUIsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHREaXJlY3RpdmUsXG5cdE9uSW5pdCxcblx0T25EZXN0cm95LFxuXHRJbnB1dCxcblx0SG9zdExpc3RlbmVyLFxuXHRFbGVtZW50UmVmLFxuXHRSZW5kZXJlcjIsXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRpbmplY3QsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YXAsIGRlbGF5LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuXG5pbXBvcnQgeyB0eXBlIENvbW1hbmRPcHRpb25zLCBDT01NQU5EX09QVElPTlMgfSBmcm9tIFwiLi9jb21tYW5kLm9wdGlvbnNcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiLi9jb21tYW5kXCI7XG5pbXBvcnQgeyBpc0NvbW1hbmQsIGlzQ29tbWFuZENyZWF0b3IgfSBmcm9tIFwiLi9jb21tYW5kLnV0aWxcIjtcbmltcG9ydCB7IENvbW1hbmRDcmVhdG9yLCB0eXBlIElDb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC5tb2RlbFwiO1xuXG4vKipcbiAqIENvbnRyb2xzIHRoZSBzdGF0ZSBvZiBhIGNvbXBvbmVudCBpbiBzeW5jIHdpdGggYENvbW1hbmRgLlxuICpcbiAqIEBleGFtcGxlXG4gKiAjIyMgTW9zdCBjb21tb24gdXNhZ2VcbiAqIGBgYGh0bWxcbiAqIDxidXR0b24gW3NzdkNvbW1hbmRdPVwic2F2ZUNtZFwiPlNhdmU8L2J1dHRvbj5cbiAqIGBgYFxuICpcbiAqXG4gKiAjIyMgVXNhZ2Ugd2l0aCBvcHRpb25zXG4gKiBgYGBodG1sXG4gKiA8YnV0dG9uIFtzc3ZDb21tYW5kXT1cInNhdmVDbWRcIiBbc3N2Q29tbWFuZE9wdGlvbnNdPVwie2V4ZWN1dGluZ0Nzc0NsYXNzOiAnaW4tcHJvZ3Jlc3MnfVwiPlNhdmU8L2J1dHRvbj5cbiAqIGBgYFxuICpcbiAqXG4gKiAjIyMgVXNhZ2Ugd2l0aCBwYXJhbXNcbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBjb2xsZWN0aW9ucyAobG9vcHMpIG9yIHVzaW5nIG11bHRpcGxlIGFjdGlvbnMgd2l0aCBkaWZmZXJlbnQgYXJncy5cbiAqICpOT1RFOiBUaGlzIHdpbGwgc2hhcmUgdGhlIGBpc0V4ZWN1dGluZ2Agd2hlbiB1c2VkIHdpdGggbXVsdGlwbGUgY29udHJvbHMuKlxuICpcbiAqICMjIyMgV2l0aCBzaW5nbGUgcGFyYW1cbiAqXG4gKiBgYGBodG1sXG4gKiA8YnV0dG9uIFtzc3ZDb21tYW5kXT1cInNhdmVDbWRcIiBbc3N2Q29tbWFuZFBhcmFtc109XCJ7aWQ6IDF9XCI+U2F2ZTwvYnV0dG9uPlxuICogYGBgXG4gKiAqTk9URTogaWYgeW91IGhhdmUgb25seSAxIGFyZ3VtZW50IGFzIGFuIGFycmF5LCBpdCBzaG91bGQgYmUgZW5jbG9zZWQgd2l0aGluIGFuIGFycmF5IGUuZy4gYFtbJ2FwcGxlJywgJ2JhbmFuYSddXWAsXG4gKiBlbHNlIGl0IHdpbGwgc3ByZWFkIGFuZCB5b3Ugd2lsbCBgYXJnMTogXCJhcHBsZVwiLCBhcmcyOiBcImJhbmFuYVwiYCpcbiAqXG4gKiAjIyMjIFdpdGggbXVsdGkgcGFyYW1zXG4gKiBgYGBodG1sXG4gKiA8YnV0dG9uIFtzc3ZDb21tYW5kXT1cInNhdmVDbWRcIiBbc3N2Q29tbWFuZFBhcmFtc109XCJbe2lkOiAxfSwgJ2hlbGxvJywgaGVyb11cIj5TYXZlPC9idXR0b24+XG4gKiBgYGBcbiAqXG4gKiAjIyMgVXNhZ2Ugd2l0aCBDb21tYW5kIENyZWF0b3JcbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBjb2xsZWN0aW9ucyAobG9vcHMpIG9yIHVzaW5nIG11bHRpcGxlIGFjdGlvbnMgd2l0aCBkaWZmZXJlbnQgYXJncywgd2hpbHN0IG5vdCBzaGFyaW5nIGBpc0V4ZWN1dGluZ2AuXG4gKlxuICpcbiAqIGBgYGh0bWxcbiAqIDxidXR0b24gW3NzdkNvbW1hbmRdPVwie2hvc3Q6IHRoaXMsIGV4ZWN1dGU6IHJlbW92ZUhlcm8kLCBjYW5FeGVjdXRlOiBpc1ZhbGlkJCwgcGFyYW1zOiBbaGVybywgMTMzNywgJ3h4J119XCI+U2F2ZTwvYnV0dG9uPlxuICogYGBgXG4gKlxuICovXG5cbmNvbnN0IE5BTUVfQ0FNRUwgPSBcInNzdkNvbW1hbmRcIjtcblxuLy8gbGV0IG5leHRVbmlxdWVJZCA9IDA7XG5cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogYFske05BTUVfQ0FNRUx9XWAsXG5cdGV4cG9ydEFzOiBOQU1FX0NBTUVMLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDb21tYW5kRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG5cdC8vIHJlYWRvbmx5IGlkID0gYCR7TkFNRV9DQU1FTH0tJHtuZXh0VW5pcXVlSWQrK31gO1xuXHRwcml2YXRlIHJlYWRvbmx5IGdsb2JhbE9wdGlvbnMgPSBpbmplY3QoQ09NTUFORF9PUFRJT05TKTtcblx0cHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cdHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuXHRASW5wdXQoTkFNRV9DQU1FTCkgY29tbWFuZE9yQ3JlYXRvcjogSUNvbW1hbmQgfCBDb21tYW5kQ3JlYXRvciB8IHVuZGVmaW5lZDtcblxuXHRASW5wdXQoYCR7TkFNRV9DQU1FTH1PcHRpb25zYClcblx0Z2V0IGNvbW1hbmRPcHRpb25zKCk6IENvbW1hbmRPcHRpb25zIHsgcmV0dXJuIHRoaXMuX2NvbW1hbmRPcHRpb25zOyB9XG5cdHNldCBjb21tYW5kT3B0aW9ucyh2YWx1ZTogUGFydGlhbDxDb21tYW5kT3B0aW9ucz4pIHtcblx0XHRpZiAodmFsdWUgPT09IHRoaXMuX2NvbW1hbmRPcHRpb25zKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuX2NvbW1hbmRPcHRpb25zID0ge1xuXHRcdFx0Li4udGhpcy5nbG9iYWxPcHRpb25zLFxuXHRcdFx0Li4udmFsdWUsXG5cdFx0fTtcblx0fVxuXG5cdEBJbnB1dChgJHtOQU1FX0NBTUVMfVBhcmFtc2ApIGNvbW1hbmRQYXJhbXM6IHVua25vd24gfCB1bmtub3duW107XG5cblx0Z2V0IGNvbW1hbmQoKTogSUNvbW1hbmQgeyByZXR1cm4gdGhpcy5fY29tbWFuZDsgfVxuXG5cdHByaXZhdGUgX2NvbW1hbmQhOiBJQ29tbWFuZDtcblx0cHJpdmF0ZSBfY29tbWFuZE9wdGlvbnM6IENvbW1hbmRPcHRpb25zID0gdGhpcy5nbG9iYWxPcHRpb25zO1xuXHRwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0Ly8gY29uc29sZS5sb2coXCJbc3N2Q29tbWFuZDo6aW5pdF1cIiwgdGhpcy5nbG9iYWxPcHRpb25zKTtcblx0XHRpZiAoIXRoaXMuY29tbWFuZE9yQ3JlYXRvcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGAke05BTUVfQ0FNRUx9OiBbJHtOQU1FX0NBTUVMfV0gc2hvdWxkIGJlIGRlZmluZWQhYCk7XG5cdFx0fSBlbHNlIGlmIChpc0NvbW1hbmQodGhpcy5jb21tYW5kT3JDcmVhdG9yKSkge1xuXHRcdFx0dGhpcy5fY29tbWFuZCA9IHRoaXMuY29tbWFuZE9yQ3JlYXRvcjtcblx0XHR9IGVsc2UgaWYgKGlzQ29tbWFuZENyZWF0b3IodGhpcy5jb21tYW5kT3JDcmVhdG9yKSkge1xuXHRcdFx0Y29uc3QgaXNBc3luYyA9IHRoaXMuY29tbWFuZE9yQ3JlYXRvci5pc0FzeW5jIHx8IHRoaXMuY29tbWFuZE9yQ3JlYXRvci5pc0FzeW5jID09PSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIHRvZG86IGZpbmQgc29tZXRoaW5nIGxpa2UgdGhpcyBmb3IgaXZ5IChvciBhbmd1bGFyMTArKVxuXHRcdFx0Ly8gY29uc3QgaG9zdENvbXBvbmVudCA9ICh0aGlzLnZpZXdDb250YWluZXIgYXMgYW55KS5fdmlldy5jb21wb25lbnQ7XG5cblx0XHRcdGNvbnN0IGV4ZWNGbiA9IHRoaXMuY29tbWFuZE9yQ3JlYXRvci5leGVjdXRlLmJpbmQodGhpcy5jb21tYW5kT3JDcmVhdG9yLmhvc3QpO1xuXHRcdFx0dGhpcy5jb21tYW5kUGFyYW1zID0gdGhpcy5jb21tYW5kUGFyYW1zIHx8IHRoaXMuY29tbWFuZE9yQ3JlYXRvci5wYXJhbXM7XG5cblx0XHRcdGNvbnN0IGNhbkV4ZWMgPSB0aGlzLmNvbW1hbmRPckNyZWF0b3IuY2FuRXhlY3V0ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uXG5cdFx0XHRcdD8gdGhpcy5jb21tYW5kT3JDcmVhdG9yLmNhbkV4ZWN1dGUuYmluZCh0aGlzLmNvbW1hbmRPckNyZWF0b3IuaG9zdCwgdGhpcy5jb21tYW5kUGFyYW1zKSgpXG5cdFx0XHRcdDogdGhpcy5jb21tYW5kT3JDcmVhdG9yLmNhbkV4ZWN1dGU7XG5cblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiW3NzdkNvbW1hbmQ6OmluaXRdIGNvbW1hbmQgY3JlYXRvclwiLCB7XG5cdFx0XHQvLyBcdGZpcnN0UGFyYW06IHRoaXMuY29tbWFuZFBhcmFtcyA/IHRoaXMuY29tbWFuZFBhcmFtc1swXSA6IG51bGwsXG5cdFx0XHQvLyBcdHBhcmFtczogdGhpcy5jb21tYW5kUGFyYW1zXG5cdFx0XHQvLyB9KTtcblx0XHRcdHRoaXMuX2NvbW1hbmQgPSBuZXcgQ29tbWFuZChleGVjRm4sIGNhbkV4ZWMsIGlzQXN5bmMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYCR7TkFNRV9DQU1FTH06IFske05BTUVfQ0FNRUx9XSBpcyBub3QgZGVmaW5lZCBwcm9wZXJseSFgKTtcblx0XHR9XG5cblx0XHR0aGlzLl9jb21tYW5kLnN1YnNjcmliZSgpO1xuXHRcdHRoaXMuX2NvbW1hbmQuY2FuRXhlY3V0ZSQucGlwZShcblx0XHRcdHRoaXMuY29tbWFuZE9wdGlvbnMuaGFzRGlzYWJsZWREZWxheVxuXHRcdFx0XHQ/IGRlbGF5KDEpXG5cdFx0XHRcdDogdGFwKCgpID0+IHsgLyogc3R1YiAqLyB9KSxcblx0XHRcdHRhcCh4ID0+IHtcblx0XHRcdFx0dGhpcy50cnlTZXREaXNhYmxlZCgheCk7XG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiW3NzdkNvbW1hbmQ6OmNhbkV4ZWN1dGUkXVwiLCB7IGNhbkV4ZWN1dGU6IHggfSk7XG5cdFx0XHRcdHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXHRcdFx0fSksXG5cdFx0XHR0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuXHRcdCkuc3Vic2NyaWJlKCk7XG5cblx0XHRpZiAodGhpcy5fY29tbWFuZC5pc0V4ZWN1dGluZyQpIHtcblx0XHRcdHRoaXMuX2NvbW1hbmQuaXNFeGVjdXRpbmckLnBpcGUoXG5cdFx0XHRcdHRhcCh4ID0+IHtcblx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcIltzc3ZDb21tYW5kOjppc0V4ZWN1dGluZyRdXCIsIHgsIHRoaXMuY29tbWFuZE9wdGlvbnMpO1xuXHRcdFx0XHRcdGlmICh4KSB7XG5cdFx0XHRcdFx0XHR0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuXHRcdFx0XHRcdFx0XHR0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0XHRcdFx0dGhpcy5jb21tYW5kT3B0aW9ucy5leGVjdXRpbmdDc3NDbGFzc1xuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcblx0XHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRcdFx0XHRcdHRoaXMuY29tbWFuZE9wdGlvbnMuZXhlY3V0aW5nQ3NzQ2xhc3Ncblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSxcblx0XHRcdFx0dGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcblx0XHRcdCkuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcihcImNsaWNrXCIpXG5cdG9uQ2xpY2soKTogdm9pZCB7XG5cdFx0Ly8gY29uc29sZS5sb2coXCJbc3N2Q29tbWFuZDo6b25DbGlja11cIiwgdGhpcy5jb21tYW5kUGFyYW1zKTtcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvbW1hbmRQYXJhbXMpKSB7XG5cdFx0XHR0aGlzLl9jb21tYW5kLmV4ZWN1dGUoLi4udGhpcy5jb21tYW5kUGFyYW1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fY29tbWFuZC5leGVjdXRlKHRoaXMuY29tbWFuZFBhcmFtcyk7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0Ly8gY29uc29sZS5sb2coXCJbc3N2Q29tbWFuZDo6ZGVzdHJveV1cIik7XG5cdFx0dGhpcy5fZGVzdHJveSQubmV4dCgpO1xuXHRcdHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cdFx0aWYgKHRoaXMuX2NvbW1hbmQpIHtcblx0XHRcdHRoaXMuX2NvbW1hbmQudW5zdWJzY3JpYmUoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHRyeVNldERpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XG5cdFx0aWYgKHRoaXMuY29tbWFuZE9wdGlvbnMuaGFuZGxlRGlzYWJsZWQpIHtcblx0XHRcdC8vIGNvbnNvbGUud2FybihcIj4+Pj4gZGlzYWJsZWRcIiwgeyBpZDogdGhpcy5pZCwgZGlzYWJsZWQgfSk7XG5cdFx0XHR0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBcImRpc2FibGVkXCIsIGRpc2FibGVkKTtcblx0XHR9XG5cdH1cblxufVxuXG4iXX0=
@@ -1,160 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { combineLatest, Subscription, Subject, BehaviorSubject, of, EMPTY, tap, map, filter, switchMap, catchError, finalize, take, } from "rxjs";
3
- import { assertInInjectionContext, computed, DestroyRef, inject, Injector, isSignal } from "@angular/core";
4
- import { toObservable } from "@angular/core/rxjs-interop";
5
- const COMMAND_ASYNC_DEFAULT_OPTIONS = { isAsync: true };
6
- /** Creates an async {@link Command}. Must be used within an injection context.
7
- * NOTE: this auto injects `DestroyRef` and handles auto destroy. {@link ICommand.autoDestroy} should not be used.
8
- */
9
- export function commandAsync(execute, canExecute$, opts) {
10
- return command(execute, canExecute$, opts ? { ...opts, ...COMMAND_ASYNC_DEFAULT_OPTIONS } : COMMAND_ASYNC_DEFAULT_OPTIONS);
11
- }
12
- /** Creates a {@link Command}. Must be used within an injection context.
13
- * NOTE: this auto injects `DestroyRef` and handles auto destroy. {@link ICommand.autoDestroy} should not be used.
14
- */
15
- export function command(execute, canExecute$, opts) {
16
- if (!opts?.injector) {
17
- assertInInjectionContext(command);
18
- }
19
- const injector = opts?.injector ?? inject(Injector);
20
- const isAsync = opts?.isAsync ?? false;
21
- const destroyRef = injector.get(DestroyRef);
22
- const cmd = new Command(execute, canExecute$, isAsync);
23
- cmd.autoDestroy = false;
24
- destroyRef.onDestroy(() => {
25
- // console.warn("[command::destroy]");
26
- cmd.destroy();
27
- });
28
- return cmd;
29
- }
30
- /**
31
- * Command object used to encapsulate information which is needed to perform an action.
32
- * @deprecated Use {@link command} or {@link commandAsync} instead for creating instances.
33
- */
34
- export class Command {
35
- /** Determines whether the command is currently executing, as a snapshot value. */
36
- get isExecuting() {
37
- return this._isExecuting;
38
- }
39
- /** Determines whether the command can execute or not, as a snapshot value. */
40
- get canExecute() {
41
- return this._canExecute;
42
- }
43
- /** Determines whether the command is currently executing, as an observable. */
44
- get isExecuting$() {
45
- return this._isExecuting$.asObservable();
46
- }
47
- /** Determines whether to auto destroy when having 0 subscribers. */
48
- autoDestroy = true;
49
- /** Determines whether the command can execute or not, as an observable. */
50
- canExecute$;
51
- _isExecuting$ = new BehaviorSubject(false);
52
- _isExecuting = false;
53
- _canExecute = true;
54
- executionPipe$ = new Subject();
55
- isExecuting$$ = Subscription.EMPTY;
56
- canExecute$$ = Subscription.EMPTY;
57
- executionPipe$$ = Subscription.EMPTY;
58
- subscribersCount = 0;
59
- /**
60
- * Creates an instance of Command.
61
- *
62
- * @param execute Execute function to invoke - use `isAsync: true` when `Observable<any>`.
63
- * @param canExecute Observable which determines whether it can execute or not.
64
- * @param isAsync Indicates that the execute function is async e.g. Observable.
65
- */
66
- constructor(execute, canExecute$, isAsync, injector) {
67
- if (canExecute$) {
68
- const canExecute = typeof canExecute$ === "function"
69
- ? computed(canExecute$)
70
- : canExecute$;
71
- this.canExecute$ = combineLatest([
72
- this._isExecuting$,
73
- isSignal(canExecute) ? toObservable(canExecute, { injector }) : canExecute
74
- ]).pipe(map(([isExecuting, canExecuteResult]) => {
75
- // console.log("[command::combineLatest$] update!", { isExecuting, canExecuteResult });
76
- this._isExecuting = isExecuting;
77
- this._canExecute = !isExecuting && !!canExecuteResult;
78
- return this._canExecute;
79
- }));
80
- this.canExecute$$ = this.canExecute$.subscribe();
81
- }
82
- else {
83
- this.canExecute$ = this._isExecuting$.pipe(map(x => {
84
- const canExecute = !x;
85
- this._canExecute = canExecute;
86
- return canExecute;
87
- }));
88
- this.isExecuting$$ = this._isExecuting$
89
- .pipe(tap(x => this._isExecuting = x))
90
- .subscribe();
91
- }
92
- this.executionPipe$$ = this.buildExecutionPipe(execute, isAsync).subscribe();
93
- }
94
- /** Execute function to invoke. */
95
- execute(...args) {
96
- // console.warn("[command::execute]", args);
97
- this.executionPipe$.next(args);
98
- }
99
- /** Disposes all resources held by subscriptions. */
100
- destroy() {
101
- // console.warn("[command::destroy]");
102
- this.executionPipe$$.unsubscribe();
103
- this.canExecute$$.unsubscribe();
104
- this.isExecuting$$.unsubscribe();
105
- }
106
- subscribe() {
107
- this.subscribersCount++;
108
- }
109
- unsubscribe() {
110
- this.subscribersCount--;
111
- // console.log("[command::unsubscribe]", { autoDestroy: this.autoDestroy, subscribersCount: this.subscribersCount });
112
- if (this.autoDestroy && this.subscribersCount <= 0) {
113
- this.destroy();
114
- }
115
- }
116
- buildExecutionPipe(execute, isAsync) {
117
- let pipe$ = this.executionPipe$.pipe(
118
- // tap(x => console.warn(">>>> executionPipe", this._canExecute)),
119
- filter(() => this._canExecute), tap(() => {
120
- // console.log("[command::executionPipe$] do#1 - set execute", { args: x });
121
- this._isExecuting$.next(true);
122
- }));
123
- const execFn = isAsync
124
- ? switchMap(args => {
125
- if (args) {
126
- return execute(...args);
127
- }
128
- return execute();
129
- })
130
- : tap((args) => {
131
- if (args) {
132
- execute(...args);
133
- return;
134
- }
135
- execute();
136
- });
137
- pipe$ = pipe$.pipe(switchMap(args => of(args).pipe(execFn, finalize(() => {
138
- // console.log("[command::executionPipe$] finalize inner#1 - set idle");
139
- this._isExecuting$.next(false);
140
- }), take(1), catchError(error => {
141
- console.error("Unhandled execute error", error);
142
- return EMPTY;
143
- }))), tap(() => {
144
- // console.log("[command::executionPipe$] tap#2 - set idle");
145
- this._isExecuting$.next(false);
146
- }));
147
- return pipe$;
148
- }
149
- }
150
- /**
151
- * Async Command object used to encapsulate information which is needed to perform an action,
152
- * which takes an execute function as Observable/Promise.
153
- * @deprecated Use {@link commandAsync} instead.
154
- */
155
- export class CommandAsync extends Command {
156
- constructor(execute, canExecute$) {
157
- super(execute, canExecute$, true);
158
- }
159
- }
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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbmd4LmNvbW1hbmQvc3JjL2NvbW1hbmQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb21tYW5kIHtcblx0LyoqIERldGVybWluZXMgd2hldGhlciB0aGUgY29tbWFuZCBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLCBhcyBhIHNuYXBzaG90IHZhbHVlLiAqL1xuXHRyZWFkb25seSBpc0V4ZWN1dGluZzogYm9vbGVhbjtcblx0LyoqIERldGVybWluZXMgd2hldGhlciB0aGUgY29tbWFuZCBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLCBhcyBhbiBvYnNlcnZhYmxlLiAqL1xuXHRyZWFkb25seSBpc0V4ZWN1dGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cdC8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvbW1hbmQgY2FuIGV4ZWN1dGUgb3Igbm90LCBhcyBhIHNuYXBzaG90IHZhbHVlLiAqL1xuXHRyZWFkb25seSBjYW5FeGVjdXRlOiBib29sZWFuO1xuXHQvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21tYW5kIGNhbiBleGVjdXRlIG9yIG5vdCwgYXMgYW4gb2JzZXJ2YWJsZS4gKi9cblx0cmVhZG9ubHkgY2FuRXhlY3V0ZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cblx0LyoqIERldGVybWluZXMgd2hldGhlciB0byBhdXRvIGRlc3Ryb3kgd2hlbiBoYXZpbmcgMCBzdWJzY3JpYmVycyAoZGVmYXVsdHMgdG8gYHRydWVgKS4gKi9cblx0YXV0b0Rlc3Ryb3k6IGJvb2xlYW47XG5cblx0LyoqIEV4ZWN1dGUgZnVuY3Rpb24gdG8gaW52b2tlLiAqL1xuXHRleGVjdXRlKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQ7XG5cblx0LyoqIERpc3Bvc2VzIGFsbCByZXNvdXJjZXMgaGVsZCBieSBzdWJzY3JpcHRpb25zLiAqL1xuXHRkZXN0cm95KCk6IHZvaWQ7XG5cblx0LyoqIFN1YnNjcmliZSBsaXN0ZW5lciwgaW4gb3JkZXIgdG8gaGFuZGxlIGF1dG8gZGlzcG9zaW5nLiAqL1xuXHRzdWJzY3JpYmUoKTogdm9pZDtcblxuXHQvKiogVW5zdWJzY3JpYmUgbGlzdGVuZXIsIGluIG9yZGVyIHRvIGhhbmRsZSBhdXRvIGRpc3Bvc2luZy4gKi9cblx0dW5zdWJzY3JpYmUoKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kQ3JlYXRvciB7XG5cdC8vIHRvZG86IHN0cmljdGVyIHR5cGluZ1xuXHQvLyBleGVjdXRlOiAoLi4uYXJnczogVFBhcmFtcyBleHRlbmRzIHVua25vd25bXSA/IFRQYXJhbXMgOiBbVFBhcmFtc10pID0+IE9ic2VydmFibGU8dW5rbm93bj4gfCBQcm9taXNlPHVua25vd24+IHwgdm9pZDtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0ZXhlY3V0ZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBPYnNlcnZhYmxlPHVua25vd24+IHwgUHJvbWlzZTx1bmtub3duPiB8IHZvaWQ7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGVcblx0Y2FuRXhlY3V0ZT86IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBGdW5jdGlvbjtcblx0cGFyYW1zPzogdW5rbm93biB8IHVua25vd25bXTtcblx0aXNBc3luYz86IGJvb2xlYW47XG5cdGhvc3Q6IHVua25vd247XG59XG4iXX0=
@@ -1,23 +0,0 @@
1
- import { NgModule } from "@angular/core";
2
- import { CommandDirective } from "./command.directive";
3
- import { CommandRefDirective } from "./command-ref.directive";
4
- import * as i0 from "@angular/core";
5
- const EXPORTED_IMPORTS = [
6
- CommandDirective,
7
- CommandRefDirective
8
- ];
9
- export class SsvCommandModule {
10
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SsvCommandModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: SsvCommandModule, imports: [CommandDirective,
12
- CommandRefDirective], exports: [CommandDirective,
13
- CommandRefDirective] });
14
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SsvCommandModule });
15
- }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SsvCommandModule, decorators: [{
17
- type: NgModule,
18
- args: [{
19
- imports: [EXPORTED_IMPORTS],
20
- exports: [EXPORTED_IMPORTS]
21
- }]
22
- }] });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25neC5jb21tYW5kL3NyYy9jb21tYW5kLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUU5RCxNQUFNLGdCQUFnQixHQUFHO0lBQ3hCLGdCQUFnQjtJQUNoQixtQkFBbUI7Q0FDbkIsQ0FBQztBQU1GLE1BQU0sT0FBTyxnQkFBZ0I7dUdBQWhCLGdCQUFnQjt3R0FBaEIsZ0JBQWdCLFlBUjVCLGdCQUFnQjtZQUNoQixtQkFBbUIsYUFEbkIsZ0JBQWdCO1lBQ2hCLG1CQUFtQjt3R0FPUCxnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBSjVCLFFBQVE7bUJBQUM7b0JBQ1QsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgQ29tbWFuZERpcmVjdGl2ZSB9IGZyb20gXCIuL2NvbW1hbmQuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBDb21tYW5kUmVmRGlyZWN0aXZlIH0gZnJvbSBcIi4vY29tbWFuZC1yZWYuZGlyZWN0aXZlXCI7XG5cbmNvbnN0IEVYUE9SVEVEX0lNUE9SVFMgPSBbXG5cdENvbW1hbmREaXJlY3RpdmUsXG5cdENvbW1hbmRSZWZEaXJlY3RpdmVcbl07XG5cbkBOZ01vZHVsZSh7XG5cdGltcG9ydHM6IFtFWFBPUlRFRF9JTVBPUlRTXSxcblx0ZXhwb3J0czogW0VYUE9SVEVEX0lNUE9SVFNdXG59KVxuZXhwb3J0IGNsYXNzIFNzdkNvbW1hbmRNb2R1bGUge1xuXG59XG4iXX0=
@@ -1,27 +0,0 @@
1
- import { InjectionToken, makeEnvironmentProviders } from "@angular/core";
2
- const DEFAULT_OPTIONS = Object.freeze({
3
- executingCssClass: "executing",
4
- handleDisabled: true,
5
- hasDisabledDelay: false,
6
- });
7
- export const COMMAND_OPTIONS = new InjectionToken("SSV_COMMAND_OPTIONS", {
8
- factory: () => DEFAULT_OPTIONS,
9
- });
10
- export function provideSsvCommandOptions(options) {
11
- return makeEnvironmentProviders([
12
- {
13
- provide: COMMAND_OPTIONS,
14
- useFactory: () => {
15
- let opts = typeof options === "function" ? options(DEFAULT_OPTIONS) : options;
16
- opts = opts
17
- ? {
18
- ...DEFAULT_OPTIONS,
19
- ...opts,
20
- }
21
- : DEFAULT_OPTIONS;
22
- return opts;
23
- },
24
- },
25
- ]);
26
- }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9uZ3guY29tbWFuZC9zcmMvY29tbWFuZC5vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNkIsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBb0JwRyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFpQjtJQUNyRCxpQkFBaUIsRUFBRSxXQUFXO0lBQzlCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLGdCQUFnQixFQUFFLEtBQUs7Q0FDdkIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksY0FBYyxDQUFpQixxQkFBcUIsRUFBRTtJQUN4RixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsZUFBZTtDQUM5QixDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3ZDLE9BQW9HO0lBRXBHLE9BQU8sd0JBQXdCLENBQUM7UUFDL0I7WUFDQyxPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsR0FBRyxFQUFFO2dCQUNoQixJQUFJLElBQUksR0FBRyxPQUFPLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUM5RSxJQUFJLEdBQUcsSUFBSTtvQkFDVixDQUFDLENBQUM7d0JBQ0QsR0FBRyxlQUFlO3dCQUNsQixHQUFHLElBQUk7cUJBQ1A7b0JBQ0QsQ0FBQyxDQUFDLGVBQWUsQ0FBQztnQkFDbkIsT0FBTyxJQUFJLENBQUM7WUFDYixDQUFDO1NBQ0Q7S0FDRCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBFbnZpcm9ubWVudFByb3ZpZGVycywgSW5qZWN0aW9uVG9rZW4sIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZE9wdGlvbnMge1xuXHQvKipcblx0ICogQ3NzIENsYXNzIHdoaWNoIGdldHMgYWRkZWQvcmVtb3ZlZCBvbiB0aGUgQ29tbWFuZCBlbGVtZW50J3MgaG9zdCB3aGlsZSBDb21tYW5kIGBpc0V4ZWN1dGluZyRgLlxuXHQgKi9cblx0ZXhlY3V0aW5nQ3NzQ2xhc3M6IHN0cmluZztcblxuXHQvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBkaXNhYmxlZCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGRpcmVjdGl2ZSBvciBub3QuXG5cdCAqIERpc2FibGUgaGFuZGxlZCBieSBkaXJlY3RpdmUncyBkb2Vzbid0IGFsd2F5cyBwbGF5IG5pY2Ugd2hlbiB1c2VkIHdpdGggb3RoZXIgY29tcG9uZW50L3BpcGUvZGlyZWN0aXZlIGFuZCB0aGV5IGFsc28gaGFuZGxlIGRpc2FibGVkLlxuXHQgKiBUaGlzIGRpc2FibGVzIHRoZSBoYW5kbGluZyBtYW51YWxseSBhbmQgbmVlZCB0byBwYXNzIGV4cGxpY2l0bHkgYFtkaXNhYmxlZF09XCIhc2F2ZUNtZC5jYW5FeGVjdXRlXCJgLlxuXHQgKi9cblx0aGFuZGxlRGlzYWJsZWQ6IGJvb2xlYW47XG5cblx0LyoqIERldGVybWluZSB3aGV0aGVyIHRvIHNldCBhIGBkZWxheSgxKWAgd2hlbiBzZXR0aW5nIHRoZSBkaXNhYmxlZC4gV2hpY2ggbWlnaHQgYmUgbmVlZGVkIHdoZW4gd29ya2luZyB3aXRoIGV4dGVybmFsXG5cdCAqIGNvbXBvbmVudHMvZGlyZWN0aXZlcyAoc3VjaCBhcyBtYXRlcmlhbCBidXR0b24pXG5cdCAqL1xuXHRoYXNEaXNhYmxlZERlbGF5OiBib29sZWFuO1xufVxuXG5jb25zdCBERUZBVUxUX09QVElPTlMgPSBPYmplY3QuZnJlZXplPENvbW1hbmRPcHRpb25zPih7XG5cdGV4ZWN1dGluZ0Nzc0NsYXNzOiBcImV4ZWN1dGluZ1wiLFxuXHRoYW5kbGVEaXNhYmxlZDogdHJ1ZSxcblx0aGFzRGlzYWJsZWREZWxheTogZmFsc2UsXG59KTtcblxuZXhwb3J0IGNvbnN0IENPTU1BTkRfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDb21tYW5kT3B0aW9ucz4oXCJTU1ZfQ09NTUFORF9PUFRJT05TXCIsIHtcblx0ZmFjdG9yeTogKCkgPT4gREVGQVVMVF9PUFRJT05TLFxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlU3N2Q29tbWFuZE9wdGlvbnMoXG5cdG9wdGlvbnM6IFBhcnRpYWw8Q29tbWFuZE9wdGlvbnM+IHwgKChkZWZhdWx0czogUmVhZG9ubHk8Q29tbWFuZE9wdGlvbnM+KSA9PiBQYXJ0aWFsPENvbW1hbmRPcHRpb25zPilcbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcblx0cmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogQ09NTUFORF9PUFRJT05TLFxuXHRcdFx0dXNlRmFjdG9yeTogKCkgPT4ge1xuXHRcdFx0XHRsZXQgb3B0cyA9IHR5cGVvZiBvcHRpb25zID09PSBcImZ1bmN0aW9uXCIgPyBvcHRpb25zKERFRkFVTFRfT1BUSU9OUykgOiBvcHRpb25zO1xuXHRcdFx0XHRvcHRzID0gb3B0c1xuXHRcdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0Li4uREVGQVVMVF9PUFRJT05TLFxuXHRcdFx0XHRcdFx0Li4ub3B0cyxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0OiBERUZBVUxUX09QVElPTlM7XG5cdFx0XHRcdHJldHVybiBvcHRzO1xuXHRcdFx0fSxcblx0XHR9LFxuXHRdKTtcbn1cbiJdfQ==
@@ -1,46 +0,0 @@
1
- import { PristineChangeEvent, StatusChangeEvent } from "@angular/forms";
2
- import { map, distinctUntilChanged, filter, combineLatest, of, defer, concat } from "rxjs";
3
- import { Command } from "./command";
4
- import { computed } from "@angular/core";
5
- /** Determines whether the arg object is of type `Command`. */
6
- export function isCommand(arg) {
7
- return arg instanceof Command;
8
- }
9
- /** Determines whether the arg object is of type `CommandCreator`. */
10
- export function isCommandCreator(arg) {
11
- if (arg instanceof Command) {
12
- return false;
13
- }
14
- else if (isAssumedType(arg) && arg.execute && arg.host) {
15
- return true;
16
- }
17
- return false;
18
- }
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. */
24
- export function canExecuteFromNgForm(form, options) {
25
- const opts = options ?
26
- { ...CAN_EXECUTE_FORM_OPTIONS_DEFAULTS, ...options }
27
- : CAN_EXECUTE_FORM_OPTIONS_DEFAULTS;
28
- const pristine$ = opts.dirty
29
- ? concat(defer(() => of(form.pristine)), form.events.pipe(filter(x => x instanceof PristineChangeEvent), map(x => x.pristine))).pipe(distinctUntilChanged())
30
- : of(true);
31
- const valid$ = opts.validity
32
- ? concat(defer(() => of(form.valid)), form.events.pipe(filter(x => x instanceof StatusChangeEvent), map(x => x.status === "VALID"))).pipe(distinctUntilChanged())
33
- : of(true);
34
- return combineLatest([pristine$, valid$]).pipe(map(([pristine, valid]) => !!(!opts.validity || valid) && !!(!opts.dirty || !pristine)), distinctUntilChanged());
35
- }
36
- /** Can executed based on valid/dirty signal inputs. */
37
- export function canExecuteFromSignals(signals, options) {
38
- const opts = options ?
39
- { ...CAN_EXECUTE_FORM_OPTIONS_DEFAULTS, ...options }
40
- : CAN_EXECUTE_FORM_OPTIONS_DEFAULTS;
41
- return computed(() => !!(!opts.validity || signals.valid()) && !!(!opts.dirty || signals.dirty()));
42
- }
43
- function isAssumedType(x) {
44
- return x !== null && typeof x === "object";
45
- }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9uZ3guY29tbWFuZC9zcmMvY29tbWFuZC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQWMsR0FBRyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQWUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRELDhEQUE4RDtBQUM5RCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVk7SUFDckMsT0FBTyxHQUFHLFlBQVksT0FBTyxDQUFDO0FBQy9CLENBQUM7QUFFRCxxRUFBcUU7QUFDckUsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEdBQVk7SUFDNUMsSUFBSSxHQUFHLFlBQVksT0FBTyxFQUFFLENBQUM7UUFDNUIsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO1NBQU0sSUFBSSxhQUFhLENBQWlCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFFLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2QsQ0FBQztBQVVELE1BQU0saUNBQWlDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBd0I7SUFDOUUsUUFBUSxFQUFFLElBQUk7SUFDZCxLQUFLLEVBQUUsSUFBSTtDQUNYLENBQUMsQ0FBQTtBQUVGLG9FQUFvRTtBQUNwRSxNQUFNLFVBQVUsb0JBQW9CLENBQ25DLElBQXFCLEVBQ3JCLE9BQStCO0lBRS9CLE1BQU0sSUFBSSxHQUEwQixPQUFPLENBQUMsQ0FBQztRQUM1QyxFQUFFLEdBQUcsaUNBQWlDLEVBQUUsR0FBRyxPQUFPLEVBQUU7UUFDcEQsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDO0lBRXJDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLO1FBQzNCLENBQUMsQ0FBQyxNQUFNLENBQ1AsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLG1CQUFtQixDQUFDLEVBQzdDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FDcEIsQ0FDRCxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFFO1FBQy9CLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFWixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUTtRQUMzQixDQUFDLENBQUMsTUFBTSxDQUNQLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNmLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxpQkFBaUIsQ0FBQyxFQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxDQUM5QixDQUNELENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUU7UUFDL0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVaLE9BQU8sYUFBYSxDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM3QyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ3ZGLG9CQUFvQixFQUFFLENBQ3RCLENBQUM7QUFDSCxDQUFDO0FBRUQsdURBQXVEO0FBQ3ZELE1BQU0sVUFBVSxxQkFBcUIsQ0FDcEMsT0FBMkQsRUFDM0QsT0FBK0I7SUFFL0IsTUFBTSxJQUFJLEdBQTBCLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLEVBQUUsR0FBRyxpQ0FBaUMsRUFBRSxHQUFHLE9BQU8sRUFBRTtRQUNwRCxDQUFDLENBQUMsaUNBQWlDLENBQUM7SUFDckMsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BHLENBQUM7QUFHRCxTQUFTLGFBQWEsQ0FBOEIsQ0FBVTtJQUM3RCxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFByaXN0aW5lQ2hhbmdlRXZlbnQsIFN0YXR1c0NoYW5nZUV2ZW50IH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGNvbWJpbmVMYXRlc3QsIG9mLCBkZWZlciwgY29uY2F0IH0gZnJvbSBcInJ4anNcIjtcblxuaW1wb3J0IHsgQ29tbWFuZENyZWF0b3IsIElDb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC5tb2RlbFwiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCIuL2NvbW1hbmRcIjtcbmltcG9ydCB7IHR5cGUgU2lnbmFsLCBjb21wdXRlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbi8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFyZyBvYmplY3QgaXMgb2YgdHlwZSBgQ29tbWFuZGAuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb21tYW5kKGFyZzogdW5rbm93bik6IGFyZyBpcyBJQ29tbWFuZCB7XG5cdHJldHVybiBhcmcgaW5zdGFuY2VvZiBDb21tYW5kO1xufVxuXG4vKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhcmcgb2JqZWN0IGlzIG9mIHR5cGUgYENvbW1hbmRDcmVhdG9yYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbW1hbmRDcmVhdG9yKGFyZzogdW5rbm93bik6IGFyZyBpcyBDb21tYW5kQ3JlYXRvciB7XG5cdGlmIChhcmcgaW5zdGFuY2VvZiBDb21tYW5kKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKGlzQXNzdW1lZFR5cGU8Q29tbWFuZENyZWF0b3I+KGFyZykgJiYgYXJnLmV4ZWN1dGUgJiYgYXJnLmhvc3QpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuRXhlY3V0ZUZvcm1PcHRpb25zIHtcblx0LyoqIERldGVybWluZXMgd2hldGhlciB0byBjaGVjayBmb3IgdmFsaWRpdHkuIChkZWZhdWx0czogdHJ1ZSkgKi9cblx0dmFsaWRpdHk/OiBib29sZWFuO1xuXG5cdC8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY2hlY2sgd2hldGhlciBVSSBoYXMgYmVlbiB0b3VjaGVkLiAoZGVmYXVsdHM6IHRydWUpICovXG5cdGRpcnR5PzogYm9vbGVhbjtcbn1cblxuY29uc3QgQ0FOX0VYRUNVVEVfRk9STV9PUFRJT05TX0RFRkFVTFRTID0gT2JqZWN0LmZyZWV6ZTxDYW5FeGVjdXRlRm9ybU9wdGlvbnM+KHtcblx0dmFsaWRpdHk6IHRydWUsXG5cdGRpcnR5OiB0cnVlLFxufSlcblxuLyoqIEdldCBjYW4gZXhlY3V0ZSBmcm9tIGZvcm0gdmFsaWRpdHkvcHJpc3RpbmUgYXMgYW4gb2JzZXJ2YWJsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5FeGVjdXRlRnJvbU5nRm9ybShcblx0Zm9ybTogQWJzdHJhY3RDb250cm9sLFxuXHRvcHRpb25zPzogQ2FuRXhlY3V0ZUZvcm1PcHRpb25zXG4pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcblx0Y29uc3Qgb3B0czogQ2FuRXhlY3V0ZUZvcm1PcHRpb25zID0gb3B0aW9ucyA/XG5cdFx0eyAuLi5DQU5fRVhFQ1VURV9GT1JNX09QVElPTlNfREVGQVVMVFMsIC4uLm9wdGlvbnMgfVxuXHRcdDogQ0FOX0VYRUNVVEVfRk9STV9PUFRJT05TX0RFRkFVTFRTO1xuXG5cdGNvbnN0IHByaXN0aW5lJCA9IG9wdHMuZGlydHlcblx0XHQ/IGNvbmNhdChcblx0XHRcdGRlZmVyKCgpID0+IG9mKGZvcm0ucHJpc3RpbmUpKSxcblx0XHRcdGZvcm0uZXZlbnRzLnBpcGUoXG5cdFx0XHRcdGZpbHRlcih4ID0+IHggaW5zdGFuY2VvZiBQcmlzdGluZUNoYW5nZUV2ZW50KSxcblx0XHRcdFx0bWFwKHggPT4geC5wcmlzdGluZSksXG5cdFx0XHQpXG5cdFx0KS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksKVxuXHRcdDogb2YodHJ1ZSk7XG5cblx0Y29uc3QgdmFsaWQkID0gb3B0cy52YWxpZGl0eVxuXHRcdD8gY29uY2F0KFxuXHRcdFx0ZGVmZXIoKCkgPT4gb2YoZm9ybS52YWxpZCkpLFxuXHRcdFx0Zm9ybS5ldmVudHMucGlwZShcblx0XHRcdFx0ZmlsdGVyKHggPT4geCBpbnN0YW5jZW9mIFN0YXR1c0NoYW5nZUV2ZW50KSxcblx0XHRcdFx0bWFwKHggPT4geC5zdGF0dXMgPT09IFwiVkFMSURcIiksXG5cdFx0XHQpXG5cdFx0KS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksKVxuXHRcdDogb2YodHJ1ZSk7XG5cblx0cmV0dXJuIGNvbWJpbmVMYXRlc3QoW3ByaXN0aW5lJCwgdmFsaWQkXSkucGlwZShcblx0XHRtYXAoKFtwcmlzdGluZSwgdmFsaWRdKSA9PiAhISghb3B0cy52YWxpZGl0eSB8fCB2YWxpZCkgJiYgISEoIW9wdHMuZGlydHkgfHwgIXByaXN0aW5lKSksXG5cdFx0ZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcblx0KTtcbn1cblxuLyoqIENhbiBleGVjdXRlZCBiYXNlZCBvbiB2YWxpZC9kaXJ0eSBzaWduYWwgaW5wdXRzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbkV4ZWN1dGVGcm9tU2lnbmFscyhcblx0c2lnbmFsczogeyB2YWxpZDogU2lnbmFsPGJvb2xlYW4+LCBkaXJ0eTogU2lnbmFsPGJvb2xlYW4+IH0sXG5cdG9wdGlvbnM/OiBDYW5FeGVjdXRlRm9ybU9wdGlvbnNcbik6IFNpZ25hbDxib29sZWFuPiB7XG5cdGNvbnN0IG9wdHM6IENhbkV4ZWN1dGVGb3JtT3B0aW9ucyA9IG9wdGlvbnMgP1xuXHRcdHsgLi4uQ0FOX0VYRUNVVEVfRk9STV9PUFRJT05TX0RFRkFVTFRTLCAuLi5vcHRpb25zIH1cblx0XHQ6IENBTl9FWEVDVVRFX0ZPUk1fT1BUSU9OU19ERUZBVUxUUztcblx0cmV0dXJuIGNvbXB1dGVkKCgpID0+ICEhKCFvcHRzLnZhbGlkaXR5IHx8IHNpZ25hbHMudmFsaWQoKSkgJiYgISEoIW9wdHMuZGlydHkgfHwgc2lnbmFscy5kaXJ0eSgpKSk7XG59XG5cblxuZnVuY3Rpb24gaXNBc3N1bWVkVHlwZTxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHg6IHVua25vd24pOiB4IGlzIFBhcnRpYWw8VD4ge1xuXHRyZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIjtcbn1cbiJdfQ==
package/esm2022/index.mjs DELETED
@@ -1,8 +0,0 @@
1
- export { SsvCommandModule } from "./command.module";
2
- export { provideSsvCommandOptions, COMMAND_OPTIONS } from "./command.options";
3
- export { command, commandAsync, Command, CommandAsync } from "./command";
4
- export { CommandDirective } from "./command.directive";
5
- export { CommandRefDirective } from "./command-ref.directive";
6
- export { isCommand, isCommandCreator, canExecuteFromNgForm, canExecuteFromSignals } from "./command.util";
7
- export { VERSION } from "./version";
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25neC5jb21tYW5kL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUF1QixNQUFNLG1CQUFtQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQThDLE1BQU0sV0FBVyxDQUFDO0FBQ3JILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBOEIsU0FBUyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEksT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFNzdkNvbW1hbmRNb2R1bGUgfSBmcm9tIFwiLi9jb21tYW5kLm1vZHVsZVwiO1xuZXhwb3J0IHsgcHJvdmlkZVNzdkNvbW1hbmRPcHRpb25zLCBDT01NQU5EX09QVElPTlMsIHR5cGUgQ29tbWFuZE9wdGlvbnMgfSBmcm9tIFwiLi9jb21tYW5kLm9wdGlvbnNcIjtcbmV4cG9ydCB7IGNvbW1hbmQsIGNvbW1hbmRBc3luYywgQ29tbWFuZCwgQ29tbWFuZEFzeW5jLCB0eXBlIENhbkV4ZWN1dGUsIHR5cGUgQ29tbWFuZENyZWF0ZU9wdGlvbnMgfSBmcm9tIFwiLi9jb21tYW5kXCI7XG5leHBvcnQgeyBDb21tYW5kRGlyZWN0aXZlIH0gZnJvbSBcIi4vY29tbWFuZC5kaXJlY3RpdmVcIjtcbmV4cG9ydCB7IENvbW1hbmRSZWZEaXJlY3RpdmUgfSBmcm9tIFwiLi9jb21tYW5kLXJlZi5kaXJlY3RpdmVcIjtcbmV4cG9ydCB7IHR5cGUgQ2FuRXhlY3V0ZUZvcm1PcHRpb25zLCBpc0NvbW1hbmQsIGlzQ29tbWFuZENyZWF0b3IsIGNhbkV4ZWN1dGVGcm9tTmdGb3JtLCBjYW5FeGVjdXRlRnJvbVNpZ25hbHMgfSBmcm9tIFwiLi9jb21tYW5kLnV0aWxcIjtcbmV4cG9ydCB0eXBlIHsgQ29tbWFuZENyZWF0b3IsIElDb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZC5tb2RlbFwiO1xuZXhwb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb25cIjtcbiJdfQ==
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3N2LW5neC5jb21tYW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9uZ3guY29tbWFuZC9zcmMvc3N2LW5neC5jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -1,2 +0,0 @@
1
- export const VERSION = "3.2.0";
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbmd4LmNvbW1hbmQvc3JjL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIzLjIuMFwiO1xuIl19
package/version.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare const VERSION = "3.2.0";