@ngrdt/button 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ # @ngrdt/button
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Run `nx test @ngrdt/button` to execute the unit tests.
@@ -0,0 +1,5 @@
1
+ export * from './lib/button/rdt-button-base';
2
+ export * from './lib/button/rdt-button-constants';
3
+ export * from './lib/button/rdt-button-int';
4
+ export * from './lib/button/rdt-button-notification.service';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9AbmdyZHQvYnV0dG9uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDhDQUE4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYnV0dG9uL3JkdC1idXR0b24tYmFzZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2J1dHRvbi9yZHQtYnV0dG9uLWNvbnN0YW50cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2J1dHRvbi9yZHQtYnV0dG9uLWludCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2J1dHRvbi9yZHQtYnV0dG9uLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuIl19
@@ -0,0 +1,264 @@
1
+ import { booleanAttribute, ChangeDetectorRef, Directive, ElementRef, EventEmitter, inject, Input, numberAttribute, Output, } from '@angular/core';
2
+ import { Router } from '@angular/router';
3
+ import { RdtStringUtils } from '@ngrdt/utils';
4
+ import { take } from 'rxjs';
5
+ import { RDT_BUTTON_DEFAULT_TAB_INDEX, RDT_BUTTON_DEFAULT_TARGET, RDT_BUTTON_SETTER_KEY, } from './rdt-button-constants';
6
+ import { PlatformLocation } from '@angular/common';
7
+ import * as i0 from "@angular/core";
8
+ export class RdtButtonBase {
9
+ elRef = inject(ElementRef);
10
+ cd = inject(ChangeDetectorRef);
11
+ router = inject(Router);
12
+ baseHref = inject(PlatformLocation).getBaseHrefFromDOM();
13
+ notificationService;
14
+ internalDisabledMap = {};
15
+ internalLoadingMap = {};
16
+ hrefWithParams;
17
+ get buttonEl() {
18
+ return this.elRef?.nativeElement ?? null;
19
+ }
20
+ set disabled(value) {
21
+ this.setDisabled(RDT_BUTTON_SETTER_KEY, value);
22
+ }
23
+ get disabled() {
24
+ return this._disabled;
25
+ }
26
+ _disabled = false;
27
+ set loading(value) {
28
+ this.setLoading(RDT_BUTTON_SETTER_KEY, value);
29
+ }
30
+ get loading() {
31
+ return this._loading;
32
+ }
33
+ _loading = false;
34
+ propagate = false;
35
+ set tabIndex(value) {
36
+ this._tabIndex = value;
37
+ this.updateTabIndexValue();
38
+ }
39
+ get tabIndex() {
40
+ return this._tabIndex;
41
+ }
42
+ _tabIndex = RDT_BUTTON_DEFAULT_TAB_INDEX;
43
+ set href(value) {
44
+ this._href = value;
45
+ this.updateHrefWithQueryParams();
46
+ }
47
+ get href() {
48
+ return this._href;
49
+ }
50
+ _href;
51
+ set ngHref(value) {
52
+ this._ngHref = value;
53
+ this.cd.markForCheck();
54
+ }
55
+ get ngHref() {
56
+ return this._ngHref;
57
+ }
58
+ _ngHref;
59
+ set target(value) {
60
+ this._target = value;
61
+ this.cd.markForCheck();
62
+ }
63
+ get target() {
64
+ return this._target;
65
+ }
66
+ _target = RDT_BUTTON_DEFAULT_TARGET;
67
+ set stateParams(value) {
68
+ this._stateParams = value;
69
+ this.cd.markForCheck();
70
+ }
71
+ get stateParams() {
72
+ return this._stateParams;
73
+ }
74
+ _stateParams;
75
+ set queryParams(value) {
76
+ this._queryParams = value;
77
+ this.updateHrefWithQueryParams();
78
+ }
79
+ get queryParams() {
80
+ return this._queryParams;
81
+ }
82
+ _queryParams;
83
+ set download(value) {
84
+ this._download = value;
85
+ this.cd.markForCheck();
86
+ }
87
+ get download() {
88
+ return this._download ?? undefined;
89
+ }
90
+ _download;
91
+ set icon(value) {
92
+ this._icon = value;
93
+ this.cd.markForCheck();
94
+ }
95
+ get icon() {
96
+ return this._icon;
97
+ }
98
+ _icon;
99
+ set dataTestId(value) {
100
+ this._dataTestId = value;
101
+ this.cd.markForCheck();
102
+ }
103
+ get dataTestId() {
104
+ return this._dataTestId;
105
+ }
106
+ _dataTestId = '';
107
+ set onlineEnabled$(value) {
108
+ this._onlineEnabled$ = value;
109
+ this.cd.markForCheck();
110
+ }
111
+ get onlineEnabled$() {
112
+ return this._onlineEnabled$;
113
+ }
114
+ _onlineEnabled$;
115
+ click$ = new EventEmitter();
116
+ setDisabled(key, disabled) {
117
+ this.internalDisabledMap[key] = disabled;
118
+ this.updateDisabledValue();
119
+ }
120
+ setLoading(key, disabled) {
121
+ this.internalLoadingMap[key] = disabled;
122
+ this.updateLoadingValue();
123
+ }
124
+ focus() {
125
+ this.buttonEl?.focus();
126
+ }
127
+ onClicked($event) {
128
+ if (this._onlineEnabled$) {
129
+ if (this._disabled) {
130
+ return;
131
+ }
132
+ $event.stopPropagation();
133
+ this.setDisabled(RdtButtonBase.ONLINE_ENABLED_KEY, true);
134
+ this.setLoading(RdtButtonBase.ONLINE_ENABLED_KEY, true);
135
+ const observer = {
136
+ next: () => {
137
+ this.onClickPermissionAllowed($event);
138
+ this.finishOnlineCheck();
139
+ },
140
+ error: (error) => {
141
+ this.notifyAccessDenied(error);
142
+ this.finishOnlineCheck();
143
+ },
144
+ complete: () => this.finishOnlineCheck(),
145
+ };
146
+ this._onlineEnabled$.pipe(take(1)).subscribe(observer);
147
+ }
148
+ else {
149
+ this.emitAndStopProp($event);
150
+ }
151
+ }
152
+ emitAndStopProp($event) {
153
+ // stopPropagation prevents routerLinks from working
154
+ if (!this.propagate && !this._ngHref && !this._href) {
155
+ $event.stopPropagation();
156
+ }
157
+ if (!this._disabled && !this._ngHref && !this._href) {
158
+ this.click$.emit($event);
159
+ }
160
+ }
161
+ onClickPermissionAllowed($event) {
162
+ if (!this.propagate) {
163
+ $event.stopPropagation();
164
+ }
165
+ if (!this._disabled) {
166
+ this.navigateOrEmit($event);
167
+ }
168
+ }
169
+ navigateOrEmit(event) {
170
+ if (this._ngHref) {
171
+ if (this._target !== '_self') {
172
+ const absolutePath = RdtStringUtils.createAbsoluteUrl(this._ngHref, this.baseHref);
173
+ const pathWithParams = RdtStringUtils.appendQueryParams(absolutePath, this.queryParams);
174
+ window.open(pathWithParams, this._target);
175
+ }
176
+ else {
177
+ this.router.navigate([this._ngHref], {
178
+ queryParams: this._queryParams,
179
+ state: this._stateParams ?? undefined,
180
+ });
181
+ }
182
+ }
183
+ else if (this._href) {
184
+ const pathWithParams = RdtStringUtils.appendQueryParams(this._href, this.queryParams);
185
+ window.open(pathWithParams, this._target);
186
+ }
187
+ else {
188
+ this.click$.emit(event);
189
+ }
190
+ }
191
+ notifyAccessDenied(error) {
192
+ if (this.notificationService) {
193
+ if (typeof error === 'string') {
194
+ this.notificationService.error(error);
195
+ }
196
+ else {
197
+ this.notificationService.accessDenied();
198
+ }
199
+ }
200
+ }
201
+ finishOnlineCheck() {
202
+ this.setDisabled(RdtButtonBase.ONLINE_ENABLED_KEY, false);
203
+ this.setLoading(RdtButtonBase.ONLINE_ENABLED_KEY, false);
204
+ }
205
+ updateDisabledValue() {
206
+ this._disabled = Object.values(this.internalDisabledMap).some((value) => value);
207
+ this.cd.markForCheck();
208
+ }
209
+ updateLoadingValue() {
210
+ this._loading = Object.values(this.internalLoadingMap).some((value) => value);
211
+ this.cd.markForCheck();
212
+ }
213
+ updateHrefWithQueryParams() {
214
+ if (this._href && this._queryParams) {
215
+ this.hrefWithParams = RdtStringUtils.appendQueryParams(this._href, this._queryParams);
216
+ }
217
+ else {
218
+ this.hrefWithParams = this._href;
219
+ }
220
+ this.cd.markForCheck();
221
+ }
222
+ updateTabIndexValue() {
223
+ this.cd.markForCheck();
224
+ }
225
+ static ONLINE_ENABLED_KEY = Symbol();
226
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtButtonBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
227
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.7", type: RdtButtonBase, inputs: { disabled: ["disabled", "disabled", booleanAttribute], loading: ["loading", "loading", booleanAttribute], propagate: ["propagate", "propagate", booleanAttribute], tabIndex: ["tabIndex", "tabIndex", numberAttribute], href: "href", ngHref: "ngHref", target: "target", stateParams: "stateParams", queryParams: "queryParams", download: "download", icon: "icon", dataTestId: "dataTestId", onlineEnabled$: "onlineEnabled$" }, outputs: { click$: "click$" }, ngImport: i0 });
228
+ }
229
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtButtonBase, decorators: [{
230
+ type: Directive
231
+ }], propDecorators: { disabled: [{
232
+ type: Input,
233
+ args: [{ transform: booleanAttribute }]
234
+ }], loading: [{
235
+ type: Input,
236
+ args: [{ transform: booleanAttribute }]
237
+ }], propagate: [{
238
+ type: Input,
239
+ args: [{ transform: booleanAttribute }]
240
+ }], tabIndex: [{
241
+ type: Input,
242
+ args: [{ transform: numberAttribute }]
243
+ }], href: [{
244
+ type: Input
245
+ }], ngHref: [{
246
+ type: Input
247
+ }], target: [{
248
+ type: Input
249
+ }], stateParams: [{
250
+ type: Input
251
+ }], queryParams: [{
252
+ type: Input
253
+ }], download: [{
254
+ type: Input
255
+ }], icon: [{
256
+ type: Input
257
+ }], dataTestId: [{
258
+ type: Input
259
+ }], onlineEnabled$: [{
260
+ type: Input
261
+ }], click$: [{
262
+ type: Output
263
+ }] } });
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWJ1dHRvbi1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L2J1dHRvbi9zcmMvbGliL2J1dHRvbi9yZHQtYnV0dG9uLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQWtDLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5RSxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLHFCQUFxQixHQUN0QixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUduRCxNQUFNLE9BQWdCLGFBQWE7SUFHZCxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNCLEVBQUUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBRXpELG1CQUFtQixDQUFtQztJQUUvRCxtQkFBbUIsR0FBNEIsRUFBRSxDQUFDO0lBQ2xELGtCQUFrQixHQUE0QixFQUFFLENBQUM7SUFDakQsY0FBYyxDQUFtQjtJQUUzQyxJQUFjLFFBQVE7UUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsSUFBSSxJQUFJLENBQUM7SUFD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QkFXRixXQUFXO3NCQURkLEtBQUs7Z0JBV0YsV0FBVztzQkFEZCxLQUFLO2dCQVdGLFFBQVE7c0JBRFgsS0FBSztnQkFXRixJQUFJO3NCQURQLEtBQUs7Z0JBV0YsVUFBVTtzQkFEYixLQUFLO2dCQVdGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBV0csTUFBTTtzQkFEZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBib29sZWFuQXR0cmlidXRlLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIERpcmVjdGl2ZSxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgbnVtYmVyQXR0cmlidXRlLFxyXG4gIE91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmR0QnV0dG9uQmFzZUludCB9IGZyb20gJy4vcmR0LWJ1dHRvbi1pbnQnO1xyXG5pbXBvcnQgeyBQYXJhbXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE51bGxhYmxlLCBXaW5kb3dPcGVuVGFyZ2V0VHlwZSwgUmR0U3RyaW5nVXRpbHMgfSBmcm9tICdAbmdyZHQvdXRpbHMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0YWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgUkRUX0JVVFRPTl9ERUZBVUxUX1RBQl9JTkRFWCxcclxuICBSRFRfQlVUVE9OX0RFRkFVTFRfVEFSR0VULFxyXG4gIFJEVF9CVVRUT05fU0VUVEVSX0tFWSxcclxufSBmcm9tICcuL3JkdC1idXR0b24tY29uc3RhbnRzJztcclxuaW1wb3J0IHsgUmR0QnV0dG9uTm90aWZpY2F0aW9uU2VydmljZUludCB9IGZyb20gJy4vcmR0LWJ1dHRvbi1ub3RpZmljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFBsYXRmb3JtTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZHRCdXR0b25CYXNlPFRJY29uID0gc3RyaW5nPlxyXG4gIGltcGxlbWVudHMgUmR0QnV0dG9uQmFzZUludDxUSWNvbj5cclxue1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBlbFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2QgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYmFzZUhyZWYgPSBpbmplY3QoUGxhdGZvcm1Mb2NhdGlvbikuZ2V0QmFzZUhyZWZGcm9tRE9NKCk7XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBub3RpZmljYXRpb25TZXJ2aWNlPzogUmR0QnV0dG9uTm90aWZpY2F0aW9uU2VydmljZUludDtcclxuXHJcbiAgcHJvdGVjdGVkIGludGVybmFsRGlzYWJsZWRNYXA6IFJlY29yZDxzeW1ib2wsIGJvb2xlYW4+ID0ge307XHJcbiAgcHJvdGVjdGVkIGludGVybmFsTG9hZGluZ01hcDogUmVjb3JkPHN5bWJvbCwgYm9vbGVhbj4gPSB7fTtcclxuICBwcm90ZWN0ZWQgaHJlZldpdGhQYXJhbXM6IE51bGxhYmxlPHN0cmluZz47XHJcblxyXG4gIHByb3RlY3RlZCBnZXQgYnV0dG9uRWwoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmVsUmVmPy5uYXRpdmVFbGVtZW50ID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2V0RGlzYWJsZWQoUkRUX0JVVFRPTl9TRVRURVJfS0VZLCB2YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXHJcbiAgc2V0IGxvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2V0TG9hZGluZyhSRFRfQlVUVE9OX1NFVFRFUl9LRVksIHZhbHVlKTtcclxuICB9XHJcbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcclxuICB9XHJcbiAgcHJpdmF0ZSBfbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcclxuICBwcm9wYWdhdGUgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcclxuICBzZXQgdGFiSW5kZXgodmFsdWU6IE51bGxhYmxlPG51bWJlcj4pIHtcclxuICAgIHRoaXMuX3RhYkluZGV4ID0gdmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4VmFsdWUoKTtcclxuICB9XHJcbiAgZ2V0IHRhYkluZGV4KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhYkluZGV4O1xyXG4gIH1cclxuICBwcml2YXRlIF90YWJJbmRleDogTnVsbGFibGU8bnVtYmVyPiA9IFJEVF9CVVRUT05fREVGQVVMVF9UQUJfSU5ERVg7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGhyZWYodmFsdWU6IE51bGxhYmxlPHN0cmluZz4pIHtcclxuICAgIHRoaXMuX2hyZWYgPSB2YWx1ZTtcclxuICAgIHRoaXMudXBkYXRlSHJlZldpdGhRdWVyeVBhcmFtcygpO1xyXG4gIH1cclxuICBnZXQgaHJlZigpIHtcclxuICAgIHJldHVybiB0aGlzLl9ocmVmO1xyXG4gIH1cclxuICBwcml2YXRlIF9ocmVmOiBOdWxsYWJsZTxzdHJpbmc+O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBuZ0hyZWYodmFsdWU6IE51bGxhYmxlPHN0cmluZz4pIHtcclxuICAgIHRoaXMuX25nSHJlZiA9IHZhbHVlO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcbiAgZ2V0IG5nSHJlZigpIHtcclxuICAgIHJldHVybiB0aGlzLl9uZ0hyZWY7XHJcbiAgfVxyXG4gIHByaXZhdGUgX25nSHJlZjogTnVsbGFibGU8c3RyaW5nPjtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgdGFyZ2V0KHZhbHVlOiBXaW5kb3dPcGVuVGFyZ2V0VHlwZSkge1xyXG4gICAgdGhpcy5fdGFyZ2V0ID0gdmFsdWU7XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuICBnZXQgdGFyZ2V0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdGFyZ2V0OiBXaW5kb3dPcGVuVGFyZ2V0VHlwZSA9IFJEVF9CVVRUT05fREVGQVVMVF9UQVJHRVQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHN0YXRlUGFyYW1zKHZhbHVlOiBOdWxsYWJsZTxQYXJhbXM+KSB7XHJcbiAgICB0aGlzLl9zdGF0ZVBhcmFtcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcbiAgZ2V0IHN0YXRlUGFyYW1zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlUGFyYW1zO1xyXG4gIH1cclxuICBwcml2YXRlIF9zdGF0ZVBhcmFtczogTnVsbGFibGU8UGFyYW1zPjtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgcXVlcnlQYXJhbXModmFsdWU6IE51bGxhYmxlPFBhcmFtcz4pIHtcclxuICAgIHRoaXMuX3F1ZXJ5UGFyYW1zID0gdmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZUhyZWZXaXRoUXVlcnlQYXJhbXMoKTtcclxuICB9XHJcbiAgZ2V0IHF1ZXJ5UGFyYW1zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1zO1xyXG4gIH1cclxuICBwcml2YXRlIF9xdWVyeVBhcmFtczogTnVsbGFibGU8UGFyYW1zPjtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZG93bmxvYWQodmFsdWU6IE51bGxhYmxlPHN0cmluZz4pIHtcclxuICAgIHRoaXMuX2Rvd25sb2FkID0gdmFsdWU7XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuICBnZXQgZG93bmxvYWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZG93bmxvYWQgPz8gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBwcml2YXRlIF9kb3dubG9hZDogTnVsbGFibGU8c3RyaW5nPjtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaWNvbih2YWx1ZTogTnVsbGFibGU8VEljb24+KSB7XHJcbiAgICB0aGlzLl9pY29uID0gdmFsdWU7XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuICBnZXQgaWNvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9pY29uO1xyXG4gIH1cclxuICBwcml2YXRlIF9pY29uOiBOdWxsYWJsZTxUSWNvbj47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRhdGFUZXN0SWQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZGF0YVRlc3RJZCA9IHZhbHVlO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcbiAgZ2V0IGRhdGFUZXN0SWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YVRlc3RJZDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZGF0YVRlc3RJZCA9ICcnO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBvbmxpbmVFbmFibGVkJCh2YWx1ZTogTnVsbGFibGU8T2JzZXJ2YWJsZTxib29sZWFuPj4pIHtcclxuICAgIHRoaXMuX29ubGluZUVuYWJsZWQkID0gdmFsdWU7XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuICBnZXQgb25saW5lRW5hYmxlZCQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fb25saW5lRW5hYmxlZCQ7XHJcbiAgfVxyXG4gIHByaXZhdGUgX29ubGluZUVuYWJsZWQkOiBOdWxsYWJsZTxPYnNlcnZhYmxlPGJvb2xlYW4+PjtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcmVhZG9ubHkgY2xpY2skID0gbmV3IEV2ZW50RW1pdHRlcjxQb2ludGVyRXZlbnQ+KCk7XHJcblxyXG4gIHNldERpc2FibGVkKGtleTogc3ltYm9sLCBkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pbnRlcm5hbERpc2FibGVkTWFwW2tleV0gPSBkaXNhYmxlZDtcclxuICAgIHRoaXMudXBkYXRlRGlzYWJsZWRWYWx1ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0TG9hZGluZyhrZXk6IHN5bWJvbCwgZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaW50ZXJuYWxMb2FkaW5nTWFwW2tleV0gPSBkaXNhYmxlZDtcclxuICAgIHRoaXMudXBkYXRlTG9hZGluZ1ZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpOiB2b2lkIHtcclxuICAgIHRoaXMuYnV0dG9uRWw/LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25DbGlja2VkKCRldmVudDogUG9pbnRlckV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5fb25saW5lRW5hYmxlZCQpIHtcclxuICAgICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuc2V0RGlzYWJsZWQoUmR0QnV0dG9uQmFzZS5PTkxJTkVfRU5BQkxFRF9LRVksIHRydWUpO1xyXG4gICAgICB0aGlzLnNldExvYWRpbmcoUmR0QnV0dG9uQmFzZS5PTkxJTkVfRU5BQkxFRF9LRVksIHRydWUpO1xyXG4gICAgICBjb25zdCBvYnNlcnZlciA9IHtcclxuICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9uQ2xpY2tQZXJtaXNzaW9uQWxsb3dlZCgkZXZlbnQpO1xyXG4gICAgICAgICAgdGhpcy5maW5pc2hPbmxpbmVDaGVjaygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeUFjY2Vzc0RlbmllZChlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLmZpbmlzaE9ubGluZUNoZWNrKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5maW5pc2hPbmxpbmVDaGVjaygpLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLl9vbmxpbmVFbmFibGVkJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShvYnNlcnZlcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVtaXRBbmRTdG9wUHJvcCgkZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0QW5kU3RvcFByb3AoJGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIC8vIHN0b3BQcm9wYWdhdGlvbiBwcmV2ZW50cyByb3V0ZXJMaW5rcyBmcm9tIHdvcmtpbmdcclxuICAgIGlmICghdGhpcy5wcm9wYWdhdGUgJiYgIXRoaXMuX25nSHJlZiAmJiAhdGhpcy5faHJlZikge1xyXG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkICYmICF0aGlzLl9uZ0hyZWYgJiYgIXRoaXMuX2hyZWYpIHtcclxuICAgICAgdGhpcy5jbGljayQuZW1pdCgkZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNsaWNrUGVybWlzc2lvbkFsbG93ZWQoJGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5wcm9wYWdhdGUpIHtcclxuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRlT3JFbWl0KCRldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlT3JFbWl0KGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLl9uZ0hyZWYpIHtcclxuICAgICAgaWYgKHRoaXMuX3RhcmdldCAhPT0gJ19zZWxmJykge1xyXG4gICAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IFJkdFN0cmluZ1V0aWxzLmNyZWF0ZUFic29sdXRlVXJsKFxyXG4gICAgICAgICAgdGhpcy5fbmdIcmVmLFxyXG4gICAgICAgICAgdGhpcy5iYXNlSHJlZlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcGF0aFdpdGhQYXJhbXMgPSBSZHRTdHJpbmdVdGlscy5hcHBlbmRRdWVyeVBhcmFtcyhcclxuICAgICAgICAgIGFic29sdXRlUGF0aCxcclxuICAgICAgICAgIHRoaXMucXVlcnlQYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHBhdGhXaXRoUGFyYW1zLCB0aGlzLl90YXJnZXQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLl9uZ0hyZWZdLCB7XHJcbiAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5fcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICBzdGF0ZTogdGhpcy5fc3RhdGVQYXJhbXMgPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2hyZWYpIHtcclxuICAgICAgY29uc3QgcGF0aFdpdGhQYXJhbXMgPSBSZHRTdHJpbmdVdGlscy5hcHBlbmRRdWVyeVBhcmFtcyhcclxuICAgICAgICB0aGlzLl9ocmVmLFxyXG4gICAgICAgIHRoaXMucXVlcnlQYXJhbXNcclxuICAgICAgKTtcclxuICAgICAgd2luZG93Lm9wZW4ocGF0aFdpdGhQYXJhbXMsIHRoaXMuX3RhcmdldCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsaWNrJC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbm90aWZ5QWNjZXNzRGVuaWVkKGVycm9yPzogdW5rbm93bikge1xyXG4gICAgaWYgKHRoaXMubm90aWZpY2F0aW9uU2VydmljZSkge1xyXG4gICAgICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFjY2Vzc0RlbmllZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmlzaE9ubGluZUNoZWNrKCkge1xyXG4gICAgdGhpcy5zZXREaXNhYmxlZChSZHRCdXR0b25CYXNlLk9OTElORV9FTkFCTEVEX0tFWSwgZmFsc2UpO1xyXG4gICAgdGhpcy5zZXRMb2FkaW5nKFJkdEJ1dHRvbkJhc2UuT05MSU5FX0VOQUJMRURfS0VZLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZURpc2FibGVkVmFsdWUoKSB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IE9iamVjdC52YWx1ZXModGhpcy5pbnRlcm5hbERpc2FibGVkTWFwKS5zb21lKFxyXG4gICAgICAodmFsdWUpID0+IHZhbHVlXHJcbiAgICApO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlTG9hZGluZ1ZhbHVlKCkge1xyXG4gICAgdGhpcy5fbG9hZGluZyA9IE9iamVjdC52YWx1ZXModGhpcy5pbnRlcm5hbExvYWRpbmdNYXApLnNvbWUoXHJcbiAgICAgICh2YWx1ZSkgPT4gdmFsdWVcclxuICAgICk7XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVIcmVmV2l0aFF1ZXJ5UGFyYW1zKCkge1xyXG4gICAgaWYgKHRoaXMuX2hyZWYgJiYgdGhpcy5fcXVlcnlQYXJhbXMpIHtcclxuICAgICAgdGhpcy5ocmVmV2l0aFBhcmFtcyA9IFJkdFN0cmluZ1V0aWxzLmFwcGVuZFF1ZXJ5UGFyYW1zKFxyXG4gICAgICAgIHRoaXMuX2hyZWYsXHJcbiAgICAgICAgdGhpcy5fcXVlcnlQYXJhbXNcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaHJlZldpdGhQYXJhbXMgPSB0aGlzLl9ocmVmO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVUYWJJbmRleFZhbHVlKCkge1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgT05MSU5FX0VOQUJMRURfS0VZID0gU3ltYm9sKCk7XHJcbn1cclxuIl19
@@ -0,0 +1,7 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const RDT_BUTTON_SETTER_KEY = Symbol();
3
+ export const RDT_BUTTON_DEFAULT_PROPAGATE = false;
4
+ export const RDT_BUTTON_DEFAULT_TARGET = '_self';
5
+ export const RDT_BUTTON_DEFAULT_TAB_INDEX = null;
6
+ export const RDT_BUTTON_BASE_PROVIDER = new InjectionToken('RdtButton');
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWJ1dHRvbi1jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvYnV0dG9uL3NyYy9saWIvYnV0dG9uL3JkdC1idXR0b24tY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFHckQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFFOUMsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsS0FBSyxDQUFDO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLE9BQU8sQ0FBQztBQUNqRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUM7QUFFakQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBRXhELFdBQVcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmR0QnV0dG9uQmFzZUludCB9IGZyb20gJy4vcmR0LWJ1dHRvbi1pbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFJEVF9CVVRUT05fU0VUVEVSX0tFWSA9IFN5bWJvbCgpO1xyXG5cclxuZXhwb3J0IGNvbnN0IFJEVF9CVVRUT05fREVGQVVMVF9QUk9QQUdBVEUgPSBmYWxzZTtcclxuZXhwb3J0IGNvbnN0IFJEVF9CVVRUT05fREVGQVVMVF9UQVJHRVQgPSAnX3NlbGYnO1xyXG5leHBvcnQgY29uc3QgUkRUX0JVVFRPTl9ERUZBVUxUX1RBQl9JTkRFWCA9IG51bGw7XHJcblxyXG5leHBvcnQgY29uc3QgUkRUX0JVVFRPTl9CQVNFX1BST1ZJREVSID0gbmV3IEluamVjdGlvblRva2VuPFxyXG4gIFR5cGU8UmR0QnV0dG9uQmFzZUludD5cclxuPignUmR0QnV0dG9uJyk7XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWJ1dHRvbi1pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvYnV0dG9uL3NyYy9saWIvYnV0dG9uL3JkdC1idXR0b24taW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE51bGxhYmxlLCBXaW5kb3dPcGVuVGFyZ2V0VHlwZSB9IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdEJ1dHRvbkJhc2VJbnB1dHNJbnQ8VEljb24gPSBzdHJpbmc+IHtcclxuICBkaXNhYmxlZDogYm9vbGVhbjtcclxuICBsb2FkaW5nOiBib29sZWFuO1xyXG4gIHByb3BhZ2F0ZTogYm9vbGVhbjtcclxuICB0YWJJbmRleDogTnVsbGFibGU8bnVtYmVyPjtcclxuICBocmVmOiBOdWxsYWJsZTxzdHJpbmc+O1xyXG4gIG5nSHJlZjogTnVsbGFibGU8c3RyaW5nPjtcclxuICB0YXJnZXQ6IFdpbmRvd09wZW5UYXJnZXRUeXBlO1xyXG4gIHN0YXRlUGFyYW1zOiBOdWxsYWJsZTxQYXJhbXM+O1xyXG4gIHF1ZXJ5UGFyYW1zOiBOdWxsYWJsZTxQYXJhbXM+O1xyXG4gIGRvd25sb2FkOiBOdWxsYWJsZTxzdHJpbmc+O1xyXG4gIGljb246IE51bGxhYmxlPFRJY29uPjtcclxuICBkYXRhVGVzdElkOiBzdHJpbmc7XHJcbiAgb25saW5lRW5hYmxlZCQ6IE51bGxhYmxlPE9ic2VydmFibGU8Ym9vbGVhbj4+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdEJ1dHRvbkJhc2VJbnQ8VEljb24gPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBSZHRCdXR0b25CYXNlSW5wdXRzSW50PFRJY29uPiB7XHJcbiAgcmVhZG9ubHkgY2xpY2skOiBPYnNlcnZhYmxlPFBvaW50ZXJFdmVudD47XHJcblxyXG4gIHNldERpc2FibGVkKGtleTogc3ltYm9sLCBkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQ7XHJcbiAgc2V0TG9hZGluZyhrZXk6IHN5bWJvbCwgZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkO1xyXG4gIGZvY3VzKCk6IHZvaWQ7XHJcbn1cclxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWJ1dHRvbi1ub3RpZmljYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9idXR0b24vc3JjL2xpYi9idXR0b24vcmR0LWJ1dHRvbi1ub3RpZmljYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBSZHRCdXR0b25Ob3RpZmljYXRpb25TZXJ2aWNlSW50IHtcclxuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xyXG4gIGFjY2Vzc0RlbmllZCgpOiB2b2lkO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdyZHQtYnV0dG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vQG5ncmR0L2J1dHRvbi9zcmMvbmdyZHQtYnV0dG9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -0,0 +1,276 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, inject, ElementRef, ChangeDetectorRef, EventEmitter, booleanAttribute, numberAttribute, Directive, Input, Output } from '@angular/core';
3
+ import { Router } from '@angular/router';
4
+ import { RdtStringUtils } from '@ngrdt/utils';
5
+ import { take } from 'rxjs';
6
+ import { PlatformLocation } from '@angular/common';
7
+
8
+ const RDT_BUTTON_SETTER_KEY = Symbol();
9
+ const RDT_BUTTON_DEFAULT_PROPAGATE = false;
10
+ const RDT_BUTTON_DEFAULT_TARGET = '_self';
11
+ const RDT_BUTTON_DEFAULT_TAB_INDEX = null;
12
+ const RDT_BUTTON_BASE_PROVIDER = new InjectionToken('RdtButton');
13
+
14
+ class RdtButtonBase {
15
+ elRef = inject(ElementRef);
16
+ cd = inject(ChangeDetectorRef);
17
+ router = inject(Router);
18
+ baseHref = inject(PlatformLocation).getBaseHrefFromDOM();
19
+ notificationService;
20
+ internalDisabledMap = {};
21
+ internalLoadingMap = {};
22
+ hrefWithParams;
23
+ get buttonEl() {
24
+ return this.elRef?.nativeElement ?? null;
25
+ }
26
+ set disabled(value) {
27
+ this.setDisabled(RDT_BUTTON_SETTER_KEY, value);
28
+ }
29
+ get disabled() {
30
+ return this._disabled;
31
+ }
32
+ _disabled = false;
33
+ set loading(value) {
34
+ this.setLoading(RDT_BUTTON_SETTER_KEY, value);
35
+ }
36
+ get loading() {
37
+ return this._loading;
38
+ }
39
+ _loading = false;
40
+ propagate = false;
41
+ set tabIndex(value) {
42
+ this._tabIndex = value;
43
+ this.updateTabIndexValue();
44
+ }
45
+ get tabIndex() {
46
+ return this._tabIndex;
47
+ }
48
+ _tabIndex = RDT_BUTTON_DEFAULT_TAB_INDEX;
49
+ set href(value) {
50
+ this._href = value;
51
+ this.updateHrefWithQueryParams();
52
+ }
53
+ get href() {
54
+ return this._href;
55
+ }
56
+ _href;
57
+ set ngHref(value) {
58
+ this._ngHref = value;
59
+ this.cd.markForCheck();
60
+ }
61
+ get ngHref() {
62
+ return this._ngHref;
63
+ }
64
+ _ngHref;
65
+ set target(value) {
66
+ this._target = value;
67
+ this.cd.markForCheck();
68
+ }
69
+ get target() {
70
+ return this._target;
71
+ }
72
+ _target = RDT_BUTTON_DEFAULT_TARGET;
73
+ set stateParams(value) {
74
+ this._stateParams = value;
75
+ this.cd.markForCheck();
76
+ }
77
+ get stateParams() {
78
+ return this._stateParams;
79
+ }
80
+ _stateParams;
81
+ set queryParams(value) {
82
+ this._queryParams = value;
83
+ this.updateHrefWithQueryParams();
84
+ }
85
+ get queryParams() {
86
+ return this._queryParams;
87
+ }
88
+ _queryParams;
89
+ set download(value) {
90
+ this._download = value;
91
+ this.cd.markForCheck();
92
+ }
93
+ get download() {
94
+ return this._download ?? undefined;
95
+ }
96
+ _download;
97
+ set icon(value) {
98
+ this._icon = value;
99
+ this.cd.markForCheck();
100
+ }
101
+ get icon() {
102
+ return this._icon;
103
+ }
104
+ _icon;
105
+ set dataTestId(value) {
106
+ this._dataTestId = value;
107
+ this.cd.markForCheck();
108
+ }
109
+ get dataTestId() {
110
+ return this._dataTestId;
111
+ }
112
+ _dataTestId = '';
113
+ set onlineEnabled$(value) {
114
+ this._onlineEnabled$ = value;
115
+ this.cd.markForCheck();
116
+ }
117
+ get onlineEnabled$() {
118
+ return this._onlineEnabled$;
119
+ }
120
+ _onlineEnabled$;
121
+ click$ = new EventEmitter();
122
+ setDisabled(key, disabled) {
123
+ this.internalDisabledMap[key] = disabled;
124
+ this.updateDisabledValue();
125
+ }
126
+ setLoading(key, disabled) {
127
+ this.internalLoadingMap[key] = disabled;
128
+ this.updateLoadingValue();
129
+ }
130
+ focus() {
131
+ this.buttonEl?.focus();
132
+ }
133
+ onClicked($event) {
134
+ if (this._onlineEnabled$) {
135
+ if (this._disabled) {
136
+ return;
137
+ }
138
+ $event.stopPropagation();
139
+ this.setDisabled(RdtButtonBase.ONLINE_ENABLED_KEY, true);
140
+ this.setLoading(RdtButtonBase.ONLINE_ENABLED_KEY, true);
141
+ const observer = {
142
+ next: () => {
143
+ this.onClickPermissionAllowed($event);
144
+ this.finishOnlineCheck();
145
+ },
146
+ error: (error) => {
147
+ this.notifyAccessDenied(error);
148
+ this.finishOnlineCheck();
149
+ },
150
+ complete: () => this.finishOnlineCheck(),
151
+ };
152
+ this._onlineEnabled$.pipe(take(1)).subscribe(observer);
153
+ }
154
+ else {
155
+ this.emitAndStopProp($event);
156
+ }
157
+ }
158
+ emitAndStopProp($event) {
159
+ // stopPropagation prevents routerLinks from working
160
+ if (!this.propagate && !this._ngHref && !this._href) {
161
+ $event.stopPropagation();
162
+ }
163
+ if (!this._disabled && !this._ngHref && !this._href) {
164
+ this.click$.emit($event);
165
+ }
166
+ }
167
+ onClickPermissionAllowed($event) {
168
+ if (!this.propagate) {
169
+ $event.stopPropagation();
170
+ }
171
+ if (!this._disabled) {
172
+ this.navigateOrEmit($event);
173
+ }
174
+ }
175
+ navigateOrEmit(event) {
176
+ if (this._ngHref) {
177
+ if (this._target !== '_self') {
178
+ const absolutePath = RdtStringUtils.createAbsoluteUrl(this._ngHref, this.baseHref);
179
+ const pathWithParams = RdtStringUtils.appendQueryParams(absolutePath, this.queryParams);
180
+ window.open(pathWithParams, this._target);
181
+ }
182
+ else {
183
+ this.router.navigate([this._ngHref], {
184
+ queryParams: this._queryParams,
185
+ state: this._stateParams ?? undefined,
186
+ });
187
+ }
188
+ }
189
+ else if (this._href) {
190
+ const pathWithParams = RdtStringUtils.appendQueryParams(this._href, this.queryParams);
191
+ window.open(pathWithParams, this._target);
192
+ }
193
+ else {
194
+ this.click$.emit(event);
195
+ }
196
+ }
197
+ notifyAccessDenied(error) {
198
+ if (this.notificationService) {
199
+ if (typeof error === 'string') {
200
+ this.notificationService.error(error);
201
+ }
202
+ else {
203
+ this.notificationService.accessDenied();
204
+ }
205
+ }
206
+ }
207
+ finishOnlineCheck() {
208
+ this.setDisabled(RdtButtonBase.ONLINE_ENABLED_KEY, false);
209
+ this.setLoading(RdtButtonBase.ONLINE_ENABLED_KEY, false);
210
+ }
211
+ updateDisabledValue() {
212
+ this._disabled = Object.values(this.internalDisabledMap).some((value) => value);
213
+ this.cd.markForCheck();
214
+ }
215
+ updateLoadingValue() {
216
+ this._loading = Object.values(this.internalLoadingMap).some((value) => value);
217
+ this.cd.markForCheck();
218
+ }
219
+ updateHrefWithQueryParams() {
220
+ if (this._href && this._queryParams) {
221
+ this.hrefWithParams = RdtStringUtils.appendQueryParams(this._href, this._queryParams);
222
+ }
223
+ else {
224
+ this.hrefWithParams = this._href;
225
+ }
226
+ this.cd.markForCheck();
227
+ }
228
+ updateTabIndexValue() {
229
+ this.cd.markForCheck();
230
+ }
231
+ static ONLINE_ENABLED_KEY = Symbol();
232
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtButtonBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
233
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.7", type: RdtButtonBase, inputs: { disabled: ["disabled", "disabled", booleanAttribute], loading: ["loading", "loading", booleanAttribute], propagate: ["propagate", "propagate", booleanAttribute], tabIndex: ["tabIndex", "tabIndex", numberAttribute], href: "href", ngHref: "ngHref", target: "target", stateParams: "stateParams", queryParams: "queryParams", download: "download", icon: "icon", dataTestId: "dataTestId", onlineEnabled$: "onlineEnabled$" }, outputs: { click$: "click$" }, ngImport: i0 });
234
+ }
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtButtonBase, decorators: [{
236
+ type: Directive
237
+ }], propDecorators: { disabled: [{
238
+ type: Input,
239
+ args: [{ transform: booleanAttribute }]
240
+ }], loading: [{
241
+ type: Input,
242
+ args: [{ transform: booleanAttribute }]
243
+ }], propagate: [{
244
+ type: Input,
245
+ args: [{ transform: booleanAttribute }]
246
+ }], tabIndex: [{
247
+ type: Input,
248
+ args: [{ transform: numberAttribute }]
249
+ }], href: [{
250
+ type: Input
251
+ }], ngHref: [{
252
+ type: Input
253
+ }], target: [{
254
+ type: Input
255
+ }], stateParams: [{
256
+ type: Input
257
+ }], queryParams: [{
258
+ type: Input
259
+ }], download: [{
260
+ type: Input
261
+ }], icon: [{
262
+ type: Input
263
+ }], dataTestId: [{
264
+ type: Input
265
+ }], onlineEnabled$: [{
266
+ type: Input
267
+ }], click$: [{
268
+ type: Output
269
+ }] } });
270
+
271
+ /**
272
+ * Generated bundle index. Do not edit.
273
+ */
274
+
275
+ export { RDT_BUTTON_BASE_PROVIDER, RDT_BUTTON_DEFAULT_PROPAGATE, RDT_BUTTON_DEFAULT_TAB_INDEX, RDT_BUTTON_DEFAULT_TARGET, RDT_BUTTON_SETTER_KEY, RdtButtonBase };
276
+ //# sourceMappingURL=ngrdt-button.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngrdt-button.mjs","sources":["../../../../@ngrdt/button/src/lib/button/rdt-button-constants.ts","../../../../@ngrdt/button/src/lib/button/rdt-button-base.ts","../../../../@ngrdt/button/src/ngrdt-button.ts"],"sourcesContent":["import { InjectionToken, Type } from '@angular/core';\r\nimport { RdtButtonBaseInt } from './rdt-button-int';\r\n\r\nexport const RDT_BUTTON_SETTER_KEY = Symbol();\r\n\r\nexport const RDT_BUTTON_DEFAULT_PROPAGATE = false;\r\nexport const RDT_BUTTON_DEFAULT_TARGET = '_self';\r\nexport const RDT_BUTTON_DEFAULT_TAB_INDEX = null;\r\n\r\nexport const RDT_BUTTON_BASE_PROVIDER = new InjectionToken<\r\n Type<RdtButtonBaseInt>\r\n>('RdtButton');\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectorRef,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n numberAttribute,\r\n Output,\r\n} from '@angular/core';\r\nimport { RdtButtonBaseInt } from './rdt-button-int';\r\nimport { Params, Router } from '@angular/router';\r\nimport { Nullable, WindowOpenTargetType, RdtStringUtils } from '@ngrdt/utils';\r\nimport { Observable, take } from 'rxjs';\r\nimport {\r\n RDT_BUTTON_DEFAULT_TAB_INDEX,\r\n RDT_BUTTON_DEFAULT_TARGET,\r\n RDT_BUTTON_SETTER_KEY,\r\n} from './rdt-button-constants';\r\nimport { RdtButtonNotificationServiceInt } from './rdt-button-notification.service';\r\nimport { PlatformLocation } from '@angular/common';\r\n\r\n@Directive()\r\nexport abstract class RdtButtonBase<TIcon = string>\r\n implements RdtButtonBaseInt<TIcon>\r\n{\r\n protected readonly elRef = inject(ElementRef);\r\n protected readonly cd = inject(ChangeDetectorRef);\r\n protected readonly router = inject(Router);\r\n protected readonly baseHref = inject(PlatformLocation).getBaseHrefFromDOM();\r\n\r\n protected readonly notificationService?: RdtButtonNotificationServiceInt;\r\n\r\n protected internalDisabledMap: Record<symbol, boolean> = {};\r\n protected internalLoadingMap: Record<symbol, boolean> = {};\r\n protected hrefWithParams: Nullable<string>;\r\n\r\n protected get buttonEl(): HTMLElement | null {\r\n return this.elRef?.nativeElement ?? null;\r\n }\r\n\r\n @Input({ transform: booleanAttribute })\r\n set disabled(value: boolean) {\r\n this.setDisabled(RDT_BUTTON_SETTER_KEY, value);\r\n }\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n private _disabled = false;\r\n\r\n @Input({ transform: booleanAttribute })\r\n set loading(value: boolean) {\r\n this.setLoading(RDT_BUTTON_SETTER_KEY, value);\r\n }\r\n get loading(): boolean {\r\n return this._loading;\r\n }\r\n private _loading = false;\r\n\r\n @Input({ transform: booleanAttribute })\r\n propagate = false;\r\n\r\n @Input({ transform: numberAttribute })\r\n set tabIndex(value: Nullable<number>) {\r\n this._tabIndex = value;\r\n this.updateTabIndexValue();\r\n }\r\n get tabIndex() {\r\n return this._tabIndex;\r\n }\r\n private _tabIndex: Nullable<number> = RDT_BUTTON_DEFAULT_TAB_INDEX;\r\n\r\n @Input()\r\n set href(value: Nullable<string>) {\r\n this._href = value;\r\n this.updateHrefWithQueryParams();\r\n }\r\n get href() {\r\n return this._href;\r\n }\r\n private _href: Nullable<string>;\r\n\r\n @Input()\r\n set ngHref(value: Nullable<string>) {\r\n this._ngHref = value;\r\n this.cd.markForCheck();\r\n }\r\n get ngHref() {\r\n return this._ngHref;\r\n }\r\n private _ngHref: Nullable<string>;\r\n\r\n @Input()\r\n set target(value: WindowOpenTargetType) {\r\n this._target = value;\r\n this.cd.markForCheck();\r\n }\r\n get target() {\r\n return this._target;\r\n }\r\n private _target: WindowOpenTargetType = RDT_BUTTON_DEFAULT_TARGET;\r\n\r\n @Input()\r\n set stateParams(value: Nullable<Params>) {\r\n this._stateParams = value;\r\n this.cd.markForCheck();\r\n }\r\n get stateParams() {\r\n return this._stateParams;\r\n }\r\n private _stateParams: Nullable<Params>;\r\n\r\n @Input()\r\n set queryParams(value: Nullable<Params>) {\r\n this._queryParams = value;\r\n this.updateHrefWithQueryParams();\r\n }\r\n get queryParams() {\r\n return this._queryParams;\r\n }\r\n private _queryParams: Nullable<Params>;\r\n\r\n @Input()\r\n set download(value: Nullable<string>) {\r\n this._download = value;\r\n this.cd.markForCheck();\r\n }\r\n get download() {\r\n return this._download ?? undefined;\r\n }\r\n private _download: Nullable<string>;\r\n\r\n @Input()\r\n set icon(value: Nullable<TIcon>) {\r\n this._icon = value;\r\n this.cd.markForCheck();\r\n }\r\n get icon() {\r\n return this._icon;\r\n }\r\n private _icon: Nullable<TIcon>;\r\n\r\n @Input()\r\n set dataTestId(value: string) {\r\n this._dataTestId = value;\r\n this.cd.markForCheck();\r\n }\r\n get dataTestId() {\r\n return this._dataTestId;\r\n }\r\n private _dataTestId = '';\r\n\r\n @Input()\r\n set onlineEnabled$(value: Nullable<Observable<boolean>>) {\r\n this._onlineEnabled$ = value;\r\n this.cd.markForCheck();\r\n }\r\n get onlineEnabled$() {\r\n return this._onlineEnabled$;\r\n }\r\n private _onlineEnabled$: Nullable<Observable<boolean>>;\r\n\r\n @Output()\r\n readonly click$ = new EventEmitter<PointerEvent>();\r\n\r\n setDisabled(key: symbol, disabled: boolean): void {\r\n this.internalDisabledMap[key] = disabled;\r\n this.updateDisabledValue();\r\n }\r\n\r\n setLoading(key: symbol, disabled: boolean): void {\r\n this.internalLoadingMap[key] = disabled;\r\n this.updateLoadingValue();\r\n }\r\n\r\n focus(): void {\r\n this.buttonEl?.focus();\r\n }\r\n\r\n protected onClicked($event: PointerEvent) {\r\n if (this._onlineEnabled$) {\r\n if (this._disabled) {\r\n return;\r\n }\r\n\r\n $event.stopPropagation();\r\n this.setDisabled(RdtButtonBase.ONLINE_ENABLED_KEY, true);\r\n this.setLoading(RdtButtonBase.ONLINE_ENABLED_KEY, true);\r\n const observer = {\r\n next: () => {\r\n this.onClickPermissionAllowed($event);\r\n this.finishOnlineCheck();\r\n },\r\n error: (error: any) => {\r\n this.notifyAccessDenied(error);\r\n this.finishOnlineCheck();\r\n },\r\n complete: () => this.finishOnlineCheck(),\r\n };\r\n this._onlineEnabled$.pipe(take(1)).subscribe(observer);\r\n } else {\r\n this.emitAndStopProp($event);\r\n }\r\n }\r\n\r\n private emitAndStopProp($event: PointerEvent) {\r\n // stopPropagation prevents routerLinks from working\r\n if (!this.propagate && !this._ngHref && !this._href) {\r\n $event.stopPropagation();\r\n }\r\n if (!this._disabled && !this._ngHref && !this._href) {\r\n this.click$.emit($event);\r\n }\r\n }\r\n\r\n private onClickPermissionAllowed($event: PointerEvent) {\r\n if (!this.propagate) {\r\n $event.stopPropagation();\r\n }\r\n if (!this._disabled) {\r\n this.navigateOrEmit($event);\r\n }\r\n }\r\n\r\n private navigateOrEmit(event: PointerEvent) {\r\n if (this._ngHref) {\r\n if (this._target !== '_self') {\r\n const absolutePath = RdtStringUtils.createAbsoluteUrl(\r\n this._ngHref,\r\n this.baseHref\r\n );\r\n const pathWithParams = RdtStringUtils.appendQueryParams(\r\n absolutePath,\r\n this.queryParams\r\n );\r\n window.open(pathWithParams, this._target);\r\n } else {\r\n this.router.navigate([this._ngHref], {\r\n queryParams: this._queryParams,\r\n state: this._stateParams ?? undefined,\r\n });\r\n }\r\n } else if (this._href) {\r\n const pathWithParams = RdtStringUtils.appendQueryParams(\r\n this._href,\r\n this.queryParams\r\n );\r\n window.open(pathWithParams, this._target);\r\n } else {\r\n this.click$.emit(event);\r\n }\r\n }\r\n\r\n private notifyAccessDenied(error?: unknown) {\r\n if (this.notificationService) {\r\n if (typeof error === 'string') {\r\n this.notificationService.error(error);\r\n } else {\r\n this.notificationService.accessDenied();\r\n }\r\n }\r\n }\r\n\r\n private finishOnlineCheck() {\r\n this.setDisabled(RdtButtonBase.ONLINE_ENABLED_KEY, false);\r\n this.setLoading(RdtButtonBase.ONLINE_ENABLED_KEY, false);\r\n }\r\n\r\n private updateDisabledValue() {\r\n this._disabled = Object.values(this.internalDisabledMap).some(\r\n (value) => value\r\n );\r\n this.cd.markForCheck();\r\n }\r\n\r\n private updateLoadingValue() {\r\n this._loading = Object.values(this.internalLoadingMap).some(\r\n (value) => value\r\n );\r\n this.cd.markForCheck();\r\n }\r\n\r\n private updateHrefWithQueryParams() {\r\n if (this._href && this._queryParams) {\r\n this.hrefWithParams = RdtStringUtils.appendQueryParams(\r\n this._href,\r\n this._queryParams\r\n );\r\n } else {\r\n this.hrefWithParams = this._href;\r\n }\r\n this.cd.markForCheck();\r\n }\r\n\r\n protected updateTabIndexValue() {\r\n this.cd.markForCheck();\r\n }\r\n\r\n protected static readonly ONLINE_ENABLED_KEY = Symbol();\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './lib/button/rdt-button-base';
2
+ export * from './lib/button/rdt-button-constants';
3
+ export * from './lib/button/rdt-button-int';
4
+ export * from './lib/button/rdt-button-notification.service';
@@ -0,0 +1,76 @@
1
+ import { ChangeDetectorRef, ElementRef, EventEmitter } from '@angular/core';
2
+ import { RdtButtonBaseInt } from './rdt-button-int';
3
+ import { Params, Router } from '@angular/router';
4
+ import { Nullable, WindowOpenTargetType } from '@ngrdt/utils';
5
+ import { Observable } from 'rxjs';
6
+ import { RdtButtonNotificationServiceInt } from './rdt-button-notification.service';
7
+ import * as i0 from "@angular/core";
8
+ export declare abstract class RdtButtonBase<TIcon = string> implements RdtButtonBaseInt<TIcon> {
9
+ protected readonly elRef: ElementRef<any>;
10
+ protected readonly cd: ChangeDetectorRef;
11
+ protected readonly router: Router;
12
+ protected readonly baseHref: string;
13
+ protected readonly notificationService?: RdtButtonNotificationServiceInt;
14
+ protected internalDisabledMap: Record<symbol, boolean>;
15
+ protected internalLoadingMap: Record<symbol, boolean>;
16
+ protected hrefWithParams: Nullable<string>;
17
+ protected get buttonEl(): HTMLElement | null;
18
+ set disabled(value: boolean);
19
+ get disabled(): boolean;
20
+ private _disabled;
21
+ set loading(value: boolean);
22
+ get loading(): boolean;
23
+ private _loading;
24
+ propagate: boolean;
25
+ set tabIndex(value: Nullable<number>);
26
+ get tabIndex(): Nullable<number>;
27
+ private _tabIndex;
28
+ set href(value: Nullable<string>);
29
+ get href(): Nullable<string>;
30
+ private _href;
31
+ set ngHref(value: Nullable<string>);
32
+ get ngHref(): Nullable<string>;
33
+ private _ngHref;
34
+ set target(value: WindowOpenTargetType);
35
+ get target(): WindowOpenTargetType;
36
+ private _target;
37
+ set stateParams(value: Nullable<Params>);
38
+ get stateParams(): Nullable<Params>;
39
+ private _stateParams;
40
+ set queryParams(value: Nullable<Params>);
41
+ get queryParams(): Nullable<Params>;
42
+ private _queryParams;
43
+ set download(value: Nullable<string>);
44
+ get download(): Nullable<string>;
45
+ private _download;
46
+ set icon(value: Nullable<TIcon>);
47
+ get icon(): Nullable<TIcon>;
48
+ private _icon;
49
+ set dataTestId(value: string);
50
+ get dataTestId(): string;
51
+ private _dataTestId;
52
+ set onlineEnabled$(value: Nullable<Observable<boolean>>);
53
+ get onlineEnabled$(): Nullable<Observable<boolean>>;
54
+ private _onlineEnabled$;
55
+ readonly click$: EventEmitter<PointerEvent>;
56
+ setDisabled(key: symbol, disabled: boolean): void;
57
+ setLoading(key: symbol, disabled: boolean): void;
58
+ focus(): void;
59
+ protected onClicked($event: PointerEvent): void;
60
+ private emitAndStopProp;
61
+ private onClickPermissionAllowed;
62
+ private navigateOrEmit;
63
+ private notifyAccessDenied;
64
+ private finishOnlineCheck;
65
+ private updateDisabledValue;
66
+ private updateLoadingValue;
67
+ private updateHrefWithQueryParams;
68
+ protected updateTabIndexValue(): void;
69
+ protected static readonly ONLINE_ENABLED_KEY: unique symbol;
70
+ static ɵfac: i0.ɵɵFactoryDeclaration<RdtButtonBase<any>, never>;
71
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RdtButtonBase<any>, never, never, { "disabled": { "alias": "disabled"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "propagate": { "alias": "propagate"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "href": { "alias": "href"; "required": false; }; "ngHref": { "alias": "ngHref"; "required": false; }; "target": { "alias": "target"; "required": false; }; "stateParams": { "alias": "stateParams"; "required": false; }; "queryParams": { "alias": "queryParams"; "required": false; }; "download": { "alias": "download"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "dataTestId": { "alias": "dataTestId"; "required": false; }; "onlineEnabled$": { "alias": "onlineEnabled$"; "required": false; }; }, { "click$": "click$"; }, never, never, false, never>;
72
+ static ngAcceptInputType_disabled: unknown;
73
+ static ngAcceptInputType_loading: unknown;
74
+ static ngAcceptInputType_propagate: unknown;
75
+ static ngAcceptInputType_tabIndex: unknown;
76
+ }
@@ -0,0 +1,7 @@
1
+ import { InjectionToken, Type } from '@angular/core';
2
+ import { RdtButtonBaseInt } from './rdt-button-int';
3
+ export declare const RDT_BUTTON_SETTER_KEY: unique symbol;
4
+ export declare const RDT_BUTTON_DEFAULT_PROPAGATE = false;
5
+ export declare const RDT_BUTTON_DEFAULT_TARGET = "_self";
6
+ export declare const RDT_BUTTON_DEFAULT_TAB_INDEX: null;
7
+ export declare const RDT_BUTTON_BASE_PROVIDER: InjectionToken<Type<RdtButtonBaseInt<string>>>;
@@ -0,0 +1,24 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Nullable, WindowOpenTargetType } from '@ngrdt/utils';
3
+ import { Params } from '@angular/router';
4
+ export interface RdtButtonBaseInputsInt<TIcon = string> {
5
+ disabled: boolean;
6
+ loading: boolean;
7
+ propagate: boolean;
8
+ tabIndex: Nullable<number>;
9
+ href: Nullable<string>;
10
+ ngHref: Nullable<string>;
11
+ target: WindowOpenTargetType;
12
+ stateParams: Nullable<Params>;
13
+ queryParams: Nullable<Params>;
14
+ download: Nullable<string>;
15
+ icon: Nullable<TIcon>;
16
+ dataTestId: string;
17
+ onlineEnabled$: Nullable<Observable<boolean>>;
18
+ }
19
+ export interface RdtButtonBaseInt<TIcon = string> extends RdtButtonBaseInputsInt<TIcon> {
20
+ readonly click$: Observable<PointerEvent>;
21
+ setDisabled(key: symbol, disabled: boolean): void;
22
+ setLoading(key: symbol, disabled: boolean): void;
23
+ focus(): void;
24
+ }
@@ -0,0 +1,4 @@
1
+ export interface RdtButtonNotificationServiceInt {
2
+ error(message: string): void;
3
+ accessDenied(): void;
4
+ }
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@ngrdt/button",
3
+ "version": "0.0.1",
4
+ "peerDependencies": {
5
+ "@angular/common": "^18.2.0",
6
+ "@angular/core": "^18.2.0",
7
+ "@angular/router": "^18.2.0",
8
+ "rxjs": ">=7.0.0",
9
+ "@ngrdt/utils": "^0.0.5"
10
+ },
11
+ "sideEffects": false,
12
+ "module": "fesm2022/ngrdt-button.mjs",
13
+ "typings": "index.d.ts",
14
+ "exports": {
15
+ "./package.json": {
16
+ "default": "./package.json"
17
+ },
18
+ ".": {
19
+ "types": "./index.d.ts",
20
+ "esm2022": "./esm2022/ngrdt-button.mjs",
21
+ "esm": "./esm2022/ngrdt-button.mjs",
22
+ "default": "./fesm2022/ngrdt-button.mjs"
23
+ }
24
+ },
25
+ "dependencies": {
26
+ "tslib": "^2.3.0"
27
+ }
28
+ }