@koalarx/ui 21.2.2 → 21.2.4
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/fesm2022/koalarx-ui-core-base.mjs +16 -16
- package/fesm2022/koalarx-ui-core-base.mjs.map +1 -1
- package/fesm2022/koalarx-ui-core-components-dialog.mjs +3 -3
- package/fesm2022/koalarx-ui-core-components-kl-root.mjs +4 -4
- package/fesm2022/koalarx-ui-core-components-kl-root.mjs.map +1 -1
- package/fesm2022/koalarx-ui-core-components-loader-page.mjs +7 -7
- package/fesm2022/koalarx-ui-core-components-loader-page.mjs.map +1 -1
- package/fesm2022/koalarx-ui-core-components-loader.mjs +4 -4
- package/fesm2022/koalarx-ui-core-components-loader.mjs.map +1 -1
- package/fesm2022/koalarx-ui-core-components-side-window.mjs +3 -3
- package/fesm2022/koalarx-ui-core-components-snackbar.mjs +3 -3
- package/fesm2022/koalarx-ui-core-config.mjs +1 -1
- package/fesm2022/koalarx-ui-core-config.mjs.map +1 -1
- package/fesm2022/koalarx-ui-core-guards.mjs +3 -3
- package/fesm2022/koalarx-ui-core-guards.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-accordion.mjs +4 -4
- package/fesm2022/koalarx-ui-shared-components-accordion.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-alert.mjs +6 -6
- package/fesm2022/koalarx-ui-shared-components-alert.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-code-viewer.mjs +11 -11
- package/fesm2022/koalarx-ui-shared-components-code-viewer.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-collapse.mjs +3 -3
- package/fesm2022/koalarx-ui-shared-components-confirm.mjs +6 -6
- package/fesm2022/koalarx-ui-shared-components-confirm.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-datatable.mjs +47 -47
- package/fesm2022/koalarx-ui-shared-components-datatable.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-dialog.mjs +9 -9
- package/fesm2022/koalarx-ui-shared-components-dialog.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-dropdown.mjs +6 -6
- package/fesm2022/koalarx-ui-shared-components-dropdown.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-field-errors.mjs +4 -4
- package/fesm2022/koalarx-ui-shared-components-field-errors.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-horizontal-menu.mjs +7 -7
- package/fesm2022/koalarx-ui-shared-components-horizontal-menu.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-field-group.mjs +3 -3
- package/fesm2022/koalarx-ui-shared-components-input-field-fieldset.mjs +3 -3
- package/fesm2022/koalarx-ui-shared-components-input-field-input-checkbox.mjs +6 -6
- package/fesm2022/koalarx-ui-shared-components-input-field-input-checkbox.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-input-cnpj.mjs +3 -3
- package/fesm2022/koalarx-ui-shared-components-input-field-input-cnpj.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-input-cpf.mjs +3 -3
- package/fesm2022/koalarx-ui-shared-components-input-field-input-cpf.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-input-currency.mjs +5 -5
- package/fesm2022/koalarx-ui-shared-components-input-field-input-currency.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-input-date.mjs +5 -5
- package/fesm2022/koalarx-ui-shared-components-input-field-input-date.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-input-datetime.mjs +5 -5
- package/fesm2022/koalarx-ui-shared-components-input-field-input-datetime.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-input-email.mjs +3 -3
- package/fesm2022/koalarx-ui-shared-components-input-field-input-email.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-input-month.mjs +5 -5
- package/fesm2022/koalarx-ui-shared-components-input-field-input-month.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-input-number.mjs +3 -3
- package/fesm2022/koalarx-ui-shared-components-input-field-input-password.mjs +5 -5
- package/fesm2022/koalarx-ui-shared-components-input-field-input-password.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-input-radio.mjs +9 -9
- package/fesm2022/koalarx-ui-shared-components-input-field-input-radio.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-input-text.mjs +4 -4
- package/fesm2022/koalarx-ui-shared-components-input-field-input-text.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-input-time.mjs +5 -5
- package/fesm2022/koalarx-ui-shared-components-input-field-input-time.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-input-url.mjs +3 -3
- package/fesm2022/koalarx-ui-shared-components-input-field-input-url.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-range.mjs +14 -14
- package/fesm2022/koalarx-ui-shared-components-input-field-range.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-select.mjs +22 -22
- package/fesm2022/koalarx-ui-shared-components-input-field-select.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-switcher.mjs +6 -6
- package/fesm2022/koalarx-ui-shared-components-input-field-switcher.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-textarea.mjs +6 -6
- package/fesm2022/koalarx-ui-shared-components-input-field-textarea.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field.mjs +18 -18
- package/fesm2022/koalarx-ui-shared-components-input-field.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-on-this-page.mjs +6 -6
- package/fesm2022/koalarx-ui-shared-components-on-this-page.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-side-window.mjs +9 -9
- package/fesm2022/koalarx-ui-shared-components-side-window.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-snackbar.mjs +15 -15
- package/fesm2022/koalarx-ui-shared-components-snackbar.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-stepper.mjs +13 -13
- package/fesm2022/koalarx-ui-shared-components-stepper.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-vertical-menu.mjs +7 -7
- package/fesm2022/koalarx-ui-shared-components-vertical-menu.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-directives.mjs +28 -28
- package/fesm2022/koalarx-ui-shared-directives.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-services.mjs +12 -8
- package/fesm2022/koalarx-ui-shared-services.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-utils.mjs +3 -3
- package/fesm2022/koalarx-ui-shared-utils.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-validators.mjs.map +1 -1
- package/fesm2022/koalarx-ui.mjs +7 -7
- package/fesm2022/koalarx-ui.mjs.map +1 -1
- package/package.json +23 -23
- package/types/koalarx-ui-core-models.d.ts +1 -0
|
@@ -7,7 +7,7 @@ import { Loader } from '@koalarx/ui/core/components/loader';
|
|
|
7
7
|
|
|
8
8
|
class HookChange {
|
|
9
9
|
viewContainerRef = inject(ViewContainerRef);
|
|
10
|
-
hookChange = input.required(...(ngDevMode ? [{ debugName: "hookChange" }] : []));
|
|
10
|
+
hookChange = input.required(...(ngDevMode ? [{ debugName: "hookChange" }] : /* istanbul ignore next */ []));
|
|
11
11
|
constructor() {
|
|
12
12
|
effect(() => {
|
|
13
13
|
this.hookChange();
|
|
@@ -17,10 +17,10 @@ class HookChange {
|
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
21
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.
|
|
20
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HookChange, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
21
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.8", type: HookChange, isStandalone: true, selector: "[hookChange]", inputs: { hookChange: { classPropertyName: "hookChange", publicName: "hookChange", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
|
|
22
22
|
}
|
|
23
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HookChange, decorators: [{
|
|
24
24
|
type: Directive,
|
|
25
25
|
args: [{ selector: '[hookChange]' }]
|
|
26
26
|
}], ctorParameters: () => [], propDecorators: { hookChange: [{ type: i0.Input, args: [{ isSignal: true, alias: "hookChange", required: true }] }] } });
|
|
@@ -34,7 +34,7 @@ class InputMask {
|
|
|
34
34
|
get input() {
|
|
35
35
|
return this.elementRef.nativeElement;
|
|
36
36
|
}
|
|
37
|
-
mask = input.required(...(ngDevMode ? [{ debugName: "mask" }] : []));
|
|
37
|
+
mask = input.required(...(ngDevMode ? [{ debugName: "mask" }] : /* istanbul ignore next */ []));
|
|
38
38
|
constructor() {
|
|
39
39
|
effect(() => {
|
|
40
40
|
const mask = this.mask();
|
|
@@ -52,10 +52,10 @@ class InputMask {
|
|
|
52
52
|
setValue(value) {
|
|
53
53
|
this.input.value = value;
|
|
54
54
|
}
|
|
55
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
56
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.
|
|
55
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: InputMask, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
56
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.8", type: InputMask, isStandalone: true, selector: "input[mask]", inputs: { mask: { classPropertyName: "mask", publicName: "mask", isSignal: true, isRequired: true, transformFunction: null } }, providers: [NgxMaskPipe], ngImport: i0 });
|
|
57
57
|
}
|
|
58
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: InputMask, decorators: [{
|
|
59
59
|
type: Directive,
|
|
60
60
|
args: [{ selector: 'input[mask]', providers: [NgxMaskPipe] }]
|
|
61
61
|
}], ctorParameters: () => [], propDecorators: { mask: [{ type: i0.Input, args: [{ isSignal: true, alias: "mask", required: true }] }] } });
|
|
@@ -64,7 +64,7 @@ class InputCurrencyMask {
|
|
|
64
64
|
elementRef = inject((ElementRef));
|
|
65
65
|
appConfig = inject(AppConfig);
|
|
66
66
|
writedValue = 0.0;
|
|
67
|
-
decimalCount = input(2, ...(ngDevMode ? [{ debugName: "decimalCount" }] : []));
|
|
67
|
+
decimalCount = input(2, ...(ngDevMode ? [{ debugName: "decimalCount" }] : /* istanbul ignore next */ []));
|
|
68
68
|
currencyValue = output();
|
|
69
69
|
get decimalFormatConfig() {
|
|
70
70
|
let prefix = '$';
|
|
@@ -202,10 +202,10 @@ class InputCurrencyMask {
|
|
|
202
202
|
inputElement.onchange = this.onChange;
|
|
203
203
|
setTimeout(() => this.applyMask());
|
|
204
204
|
}
|
|
205
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
206
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.
|
|
205
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: InputCurrencyMask, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
206
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.8", type: InputCurrencyMask, isStandalone: true, selector: "input[currencyMask]", inputs: { decimalCount: { classPropertyName: "decimalCount", publicName: "decimalCount", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { currencyValue: "currencyValue" }, providers: [NgxMaskPipe], ngImport: i0 });
|
|
207
207
|
}
|
|
208
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
208
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: InputCurrencyMask, decorators: [{
|
|
209
209
|
type: Directive,
|
|
210
210
|
args: [{
|
|
211
211
|
selector: 'input[currencyMask]',
|
|
@@ -215,8 +215,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
215
215
|
|
|
216
216
|
class Tooltip {
|
|
217
217
|
elementRef = inject((ElementRef));
|
|
218
|
-
tooltip = input.required(...(ngDevMode ? [{ debugName: "tooltip" }] : []));
|
|
219
|
-
tooltipPosition = input('top', ...(ngDevMode ? [{ debugName: "tooltipPosition" }] : []));
|
|
218
|
+
tooltip = input.required(...(ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []));
|
|
219
|
+
tooltipPosition = input('top', ...(ngDevMode ? [{ debugName: "tooltipPosition" }] : /* istanbul ignore next */ []));
|
|
220
220
|
constructor() {
|
|
221
221
|
effect(() => {
|
|
222
222
|
const element = this.elementRef.nativeElement;
|
|
@@ -239,10 +239,10 @@ class Tooltip {
|
|
|
239
239
|
}
|
|
240
240
|
});
|
|
241
241
|
}
|
|
242
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
243
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.
|
|
242
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: Tooltip, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
243
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.8", type: Tooltip, isStandalone: true, selector: "[tooltip]", inputs: { tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: true, transformFunction: null }, tooltipPosition: { classPropertyName: "tooltipPosition", publicName: "tooltipPosition", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
244
244
|
}
|
|
245
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
245
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: Tooltip, decorators: [{
|
|
246
246
|
type: Directive,
|
|
247
247
|
args: [{ selector: '[tooltip]' }]
|
|
248
248
|
}], ctorParameters: () => [], propDecorators: { tooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltip", required: true }] }], tooltipPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipPosition", required: false }] }] } });
|
|
@@ -252,14 +252,14 @@ class Button {
|
|
|
252
252
|
appRef = inject(ApplicationRef);
|
|
253
253
|
injector = inject(EnvironmentInjector);
|
|
254
254
|
loaderComponent = null;
|
|
255
|
-
color = input('neutral', ...(ngDevMode ? [{ debugName: "color" }] : []));
|
|
256
|
-
type = input('button', ...(ngDevMode ? [{ debugName: "type" }] : []));
|
|
257
|
-
circle = input(false, { ...(ngDevMode ? { debugName: "circle" } : {}), transform: booleanAttribute });
|
|
258
|
-
outline = input(false, { ...(ngDevMode ? { debugName: "outline" } : {}), transform: booleanAttribute });
|
|
259
|
-
soft = input(false, { ...(ngDevMode ? { debugName: "soft" } : {}), transform: booleanAttribute });
|
|
260
|
-
showLoader = input(false, { ...(ngDevMode ? { debugName: "showLoader" } : {}), transform: booleanAttribute });
|
|
261
|
-
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
|
|
262
|
-
size = input('medium', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
255
|
+
color = input('neutral', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
256
|
+
type = input('button', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
257
|
+
circle = input(false, { ...(ngDevMode ? { debugName: "circle" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
258
|
+
outline = input(false, { ...(ngDevMode ? { debugName: "outline" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
259
|
+
soft = input(false, { ...(ngDevMode ? { debugName: "soft" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
260
|
+
showLoader = input(false, { ...(ngDevMode ? { debugName: "showLoader" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
261
|
+
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
262
|
+
size = input('medium', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
263
263
|
constructor() {
|
|
264
264
|
effect(() => this.toggleLoader(this.showLoader()));
|
|
265
265
|
effect(() => {
|
|
@@ -349,10 +349,10 @@ class Button {
|
|
|
349
349
|
this.elementRef.nativeElement.classList.add('btn-soft');
|
|
350
350
|
}
|
|
351
351
|
}
|
|
352
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
353
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.
|
|
352
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: Button, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
353
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.8", type: Button, isStandalone: true, selector: "button[klButton], a[klButton]", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, circle: { classPropertyName: "circle", publicName: "circle", isSignal: true, isRequired: false, transformFunction: null }, outline: { classPropertyName: "outline", publicName: "outline", isSignal: true, isRequired: false, transformFunction: null }, soft: { classPropertyName: "soft", publicName: "soft", isSignal: true, isRequired: false, transformFunction: null }, showLoader: { classPropertyName: "showLoader", publicName: "showLoader", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
354
354
|
}
|
|
355
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
355
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: Button, decorators: [{
|
|
356
356
|
type: Directive,
|
|
357
357
|
args: [{ selector: 'button[klButton], a[klButton]' }]
|
|
358
358
|
}], ctorParameters: () => [], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], circle: [{ type: i0.Input, args: [{ isSignal: true, alias: "circle", required: false }] }], outline: [{ type: i0.Input, args: [{ isSignal: true, alias: "outline", required: false }] }], soft: [{ type: i0.Input, args: [{ isSignal: true, alias: "soft", required: false }] }], showLoader: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLoader", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koalarx-ui-shared-directives.mjs","sources":["../../projects/koala-ui/shared/directives/hook-change.ts","../../projects/koala-ui/shared/directives/input-mask.ts","../../projects/koala-ui/shared/directives/input-currency-mask.ts","../../projects/koala-ui/shared/directives/tooltip.ts","../../projects/koala-ui/shared/directives/button.ts","../../projects/koala-ui/shared/directives/koalarx-ui-shared-directives.ts"],"sourcesContent":["import {\n Directive,\n effect,\n inject,\n input,\n ViewContainerRef,\n} from '@angular/core';\n\n@Directive({ selector: '[hookChange]' })\nexport class HookChange {\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n hookChange = input.required<any>();\n\n constructor() {\n effect(() => {\n this.hookChange();\n const onChange = this.viewContainerRef.element.nativeElement.onchange;\n\n if (onChange) {\n onChange();\n }\n });\n }\n}\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { NgxMaskPipe } from 'ngx-mask';\n\n@Directive({ selector: 'input[mask]', providers: [NgxMaskPipe] })\nexport class InputMask {\n private readonly ngxMask = inject(NgxMaskPipe);\n private readonly elementRef = inject<ElementRef<HTMLInputElement>>(\n ElementRef<HTMLInputElement>\n );\n\n private get currentValue() {\n return this.input.value;\n }\n\n private get input() {\n return this.elementRef.nativeElement;\n }\n\n mask = input.required<string>();\n\n constructor() {\n effect(() => {\n const mask = this.mask();\n\n if (mask) {\n this.elementRef.nativeElement.addEventListener('keyup', () =>\n this.applyMask(mask)\n );\n this.elementRef.nativeElement.addEventListener('keypress', () =>\n this.applyMask(mask)\n );\n this.elementRef.nativeElement.addEventListener('keydown', () =>\n this.applyMask(mask)\n );\n\n setTimeout(() => this.applyMask(mask), 1);\n }\n });\n }\n\n private applyMask(mask: string) {\n this.setValue(this.ngxMask.transform(this.currentValue, mask));\n }\n\n private setValue(value: string) {\n this.input.value = value;\n }\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n output,\n} from '@angular/core';\nimport { AppConfig } from '@koalarx/ui/core/config';\nimport { KlNumber } from '@koalarx/utils/KlNumber';\nimport { NgxMaskPipe } from 'ngx-mask';\n\n@Directive({\n selector: 'input[currencyMask]',\n providers: [NgxMaskPipe],\n})\nexport class InputCurrencyMask implements OnInit, OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLInputElement>>(\n ElementRef<HTMLInputElement>,\n );\n private readonly appConfig = inject(AppConfig);\n private writedValue = 0.0;\n\n decimalCount = input<number>(2);\n currencyValue = output<number>();\n\n private get decimalFormatConfig() {\n let prefix = '$';\n let thousandSeparator = ',';\n let decimalSeparator = '.';\n\n switch (this.appConfig.language) {\n case 'en':\n prefix = '$';\n break;\n case 'ptBr':\n thousandSeparator = '.';\n decimalSeparator = ',';\n prefix = 'R$';\n break;\n }\n\n return {\n prefix,\n thousandSeparator,\n decimalSeparator,\n };\n }\n\n private maskCoin(value: number) {\n const { prefix, thousandSeparator, decimalSeparator } =\n this.decimalFormatConfig;\n\n return new KlNumber(value).maskCoin(\n prefix,\n thousandSeparator,\n decimalSeparator,\n this.decimalCount(),\n );\n }\n\n private unmaskCoin(value: string): number {\n const { prefix, thousandSeparator, decimalSeparator } =\n this.decimalFormatConfig;\n\n return parseFloat(\n value\n .replace(prefix, '')\n .replace(new RegExp(`\\\\${thousandSeparator}`, 'g'), '')\n .replace(decimalSeparator, '.')\n .trim(),\n );\n }\n\n private applyMask() {\n this.setValue(this.maskCoin(this.writedValue));\n }\n\n private get currentValue() {\n return this.input.value;\n }\n\n private setValue(value: string) {\n this.input.value = value;\n }\n\n private get input() {\n return this.elementRef.nativeElement;\n }\n\n private onFocus = () => {\n this.putInputCaretOnTheEnd();\n };\n\n private onKeyUp = (event: KeyboardEvent) => {\n if (/\\d/.test(event.key) || event.key === 'Backspace') {\n this.updateWritedValue(event.key, event.key === 'Backspace');\n\n if (isNaN(this.writedValue)) {\n this.writedValue = 0;\n }\n\n this.applyMask();\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n this.putInputCaretOnTheEnd();\n }\n };\n\n private onKeyPress = (event: KeyboardEvent) => {\n event.preventDefault();\n };\n\n private onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Backspace') {\n event.preventDefault();\n }\n };\n\n private onPaste = (event: ClipboardEvent) => {\n event.preventDefault();\n\n if (!event.clipboardData) {\n return;\n }\n\n const pastedValue = event.clipboardData.getData('Text');\n\n let unmaskedValue = parseFloat(pastedValue);\n\n if (pastedValue.includes(',')) {\n unmaskedValue = this.unmaskCoin(event.clipboardData.getData('Text'));\n }\n\n this.setValue(this.maskCoin(unmaskedValue));\n };\n\n private onReset = () => {\n this.writedValue = 0.0;\n this.applyMask();\n };\n\n private onChange = () => {\n if (this.writedValue !== 0) {\n return;\n }\n\n let unmaskedValue = +this.currentValue;\n\n if (isNaN(unmaskedValue)) {\n unmaskedValue = this.unmaskCoin(this.currentValue);\n }\n\n this.writedValue = unmaskedValue;\n this.applyMask();\n };\n\n private putInputCaretOnTheEnd() {\n setTimeout(() =>\n this.input.setSelectionRange(\n this.currentValue.length,\n this.currentValue.length,\n ),\n );\n }\n\n private updateWritedValue(key: string, backspace = false) {\n let decimal = '';\n\n for (let i = 0; i < this.decimalCount(); i++) {\n decimal += '0';\n }\n\n if (backspace) {\n const match = (this.writedValue / 10)\n .toString()\n .match(new RegExp(`^-?\\\\d+(?:\\\\.\\\\d{0,${this.decimalCount()}})?`));\n\n if (match) {\n this.writedValue = parseFloat(match[0]);\n }\n }\n\n const currentValue = Math.round(this.writedValue * +`1${decimal}`);\n\n this.writedValue = parseFloat(`${currentValue}${key}`) / +`1${decimal}`;\n this.currencyValue.emit(this.writedValue);\n }\n\n ngOnDestroy(): void {\n const inputElement = this.elementRef.nativeElement;\n\n inputElement.removeEventListener('focus', this.onFocus);\n inputElement.removeEventListener('keyup', this.onKeyUp);\n inputElement.removeEventListener('keypress', this.onKeyPress);\n inputElement.removeEventListener('keydown', this.onKeyDown);\n inputElement.removeEventListener('paste', this.onPaste);\n inputElement.removeEventListener('reset', this.onReset);\n }\n\n ngOnInit(): void {\n this.writedValue = this.unmaskCoin(this.currentValue);\n\n this.input.style.textAlign = 'right';\n\n const inputElement = this.elementRef.nativeElement;\n\n inputElement.addEventListener('focus', this.onFocus);\n inputElement.addEventListener('keyup', this.onKeyUp);\n inputElement.addEventListener('keypress', this.onKeyPress);\n inputElement.addEventListener('keydown', this.onKeyDown);\n inputElement.addEventListener('paste', this.onPaste);\n inputElement.addEventListener('reset', this.onReset);\n inputElement.onchange = this.onChange;\n\n setTimeout(() => this.applyMask());\n }\n}\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\n\ntype TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n@Directive({ selector: '[tooltip]' })\nexport class Tooltip {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(\n ElementRef<HTMLElement>\n );\n\n tooltip = input.required<string>();\n tooltipPosition = input<TooltipPosition>('top');\n\n constructor() {\n effect(() => {\n const element = this.elementRef.nativeElement;\n const tooltipText = this.tooltip();\n\n element.classList.add('tooltip');\n element.dataset['tip'] = tooltipText;\n\n switch (this.tooltipPosition()) {\n case 'top':\n element.classList.add('tooltip-top');\n break;\n case 'bottom':\n element.classList.add('tooltip-bottom');\n break;\n case 'left':\n element.classList.add('tooltip-left');\n break;\n case 'right':\n element.classList.add('tooltip-right');\n break;\n }\n });\n }\n}\n","import {\n ApplicationRef,\n booleanAttribute,\n ComponentRef,\n createComponent,\n Directive,\n effect,\n ElementRef,\n EnvironmentInjector,\n inject,\n input,\n inputBinding,\n OnInit,\n} from '@angular/core';\nimport { Loader } from '@koalarx/ui/core/components/loader';\n\nexport type ButtonColor =\n | 'neutral'\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'info'\n | 'success'\n | 'warning'\n | 'error'\n | 'ghost';\n\nexport type ButtonSize =\n | 'extraSmall'\n | 'small'\n | 'medium'\n | 'large'\n | 'extraLarge';\n\n@Directive({ selector: 'button[klButton], a[klButton]' })\nexport class Button implements OnInit {\n private readonly elementRef = inject<ElementRef<HTMLButtonElement>>(\n ElementRef<HTMLButtonElement>\n );\n private readonly appRef = inject(ApplicationRef);\n private readonly injector = inject(EnvironmentInjector);\n private loaderComponent: ComponentRef<Loader> | null = null;\n\n color = input<ButtonColor>('neutral');\n type = input<'button' | 'submit'>('button');\n circle = input(false, { transform: booleanAttribute });\n outline = input(false, { transform: booleanAttribute });\n soft = input(false, { transform: booleanAttribute });\n showLoader = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n size = input<ButtonSize>('medium');\n\n constructor() {\n effect(() => this.toggleLoader(this.showLoader()));\n effect(() => {\n const disabled = this.disabled();\n this.elementRef.nativeElement.disabled = disabled;\n });\n }\n\n private createLoaderComponent() {\n const spanContainer = this.elementRef.nativeElement.insertBefore(\n document.createElement('span'),\n this.elementRef.nativeElement.firstChild\n );\n spanContainer.classList.add(\n 'flex',\n 'items-center',\n 'justify-center',\n 'h-full'\n );\n this.loaderComponent = createComponent(Loader, {\n environmentInjector: this.injector,\n hostElement: spanContainer,\n bindings: [inputBinding('size', () => this.size())],\n });\n\n return this.loaderComponent;\n }\n\n private toggleLoader(show: boolean) {\n if (show) {\n const loaderComponent = this.createLoaderComponent();\n\n this.elementRef.nativeElement.disabled = true;\n this.appRef.attachView(loaderComponent.hostView);\n } else {\n if (!this.disabled()) {\n this.elementRef.nativeElement.disabled = false;\n }\n\n if (this.loaderComponent) {\n this.appRef.detachView(this.loaderComponent.hostView);\n this.loaderComponent.destroy();\n this.loaderComponent = null;\n }\n }\n }\n\n private getColorClass(color: ButtonColor): string {\n switch (color) {\n case 'neutral':\n return 'btn-neutral';\n case 'primary':\n return 'btn-primary';\n case 'secondary':\n return 'btn-secondary';\n case 'accent':\n return 'btn-accent';\n case 'info':\n return 'btn-info';\n case 'success':\n return 'btn-success';\n case 'warning':\n return 'btn-warning';\n case 'error':\n return 'btn-error';\n case 'ghost':\n return 'btn-ghost';\n default:\n throw new Error(`Unknown button color: ${color}`);\n }\n }\n\n private getSizeClass(size: ButtonSize): string {\n switch (size) {\n case 'extraSmall':\n return 'btn-xs';\n case 'small':\n return 'btn-sm';\n case 'medium':\n return 'btn-md';\n case 'large':\n return 'btn-lg';\n case 'extraLarge':\n return 'btn-xl';\n default:\n throw new Error(`Unknown button size: ${size}`);\n }\n }\n\n ngOnInit(): void {\n this.elementRef.nativeElement.type = this.type();\n this.elementRef.nativeElement.classList.add('btn');\n this.elementRef.nativeElement.classList.add(\n this.getColorClass(this.color())\n );\n this.elementRef.nativeElement.classList.add(this.getSizeClass(this.size()));\n\n if (this.outline()) {\n this.elementRef.nativeElement.classList.add('btn-outline');\n }\n\n if (this.circle()) {\n this.elementRef.nativeElement.classList.add('btn-circle');\n }\n\n if (this.soft()) {\n this.elementRef.nativeElement.classList.add('btn-soft');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"koalarx-ui-shared-directives.mjs","sources":["../../projects/koala-ui/shared/directives/hook-change.ts","../../projects/koala-ui/shared/directives/input-mask.ts","../../projects/koala-ui/shared/directives/input-currency-mask.ts","../../projects/koala-ui/shared/directives/tooltip.ts","../../projects/koala-ui/shared/directives/button.ts","../../projects/koala-ui/shared/directives/koalarx-ui-shared-directives.ts"],"sourcesContent":["import {\n Directive,\n effect,\n inject,\n input,\n ViewContainerRef,\n} from '@angular/core';\n\n@Directive({ selector: '[hookChange]' })\nexport class HookChange {\n private readonly viewContainerRef = inject(ViewContainerRef);\n\n hookChange = input.required<any>();\n\n constructor() {\n effect(() => {\n this.hookChange();\n const onChange = this.viewContainerRef.element.nativeElement.onchange;\n\n if (onChange) {\n onChange();\n }\n });\n }\n}\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { NgxMaskPipe } from 'ngx-mask';\n\n@Directive({ selector: 'input[mask]', providers: [NgxMaskPipe] })\nexport class InputMask {\n private readonly ngxMask = inject(NgxMaskPipe);\n private readonly elementRef = inject<ElementRef<HTMLInputElement>>(\n ElementRef<HTMLInputElement>\n );\n\n private get currentValue() {\n return this.input.value;\n }\n\n private get input() {\n return this.elementRef.nativeElement;\n }\n\n mask = input.required<string>();\n\n constructor() {\n effect(() => {\n const mask = this.mask();\n\n if (mask) {\n this.elementRef.nativeElement.addEventListener('keyup', () =>\n this.applyMask(mask)\n );\n this.elementRef.nativeElement.addEventListener('keypress', () =>\n this.applyMask(mask)\n );\n this.elementRef.nativeElement.addEventListener('keydown', () =>\n this.applyMask(mask)\n );\n\n setTimeout(() => this.applyMask(mask), 1);\n }\n });\n }\n\n private applyMask(mask: string) {\n this.setValue(this.ngxMask.transform(this.currentValue, mask));\n }\n\n private setValue(value: string) {\n this.input.value = value;\n }\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n output,\n} from '@angular/core';\nimport { AppConfig } from '@koalarx/ui/core/config';\nimport { KlNumber } from '@koalarx/utils/KlNumber';\nimport { NgxMaskPipe } from 'ngx-mask';\n\n@Directive({\n selector: 'input[currencyMask]',\n providers: [NgxMaskPipe],\n})\nexport class InputCurrencyMask implements OnInit, OnDestroy {\n private readonly elementRef = inject<ElementRef<HTMLInputElement>>(\n ElementRef<HTMLInputElement>,\n );\n private readonly appConfig = inject(AppConfig);\n private writedValue = 0.0;\n\n decimalCount = input<number>(2);\n currencyValue = output<number>();\n\n private get decimalFormatConfig() {\n let prefix = '$';\n let thousandSeparator = ',';\n let decimalSeparator = '.';\n\n switch (this.appConfig.language) {\n case 'en':\n prefix = '$';\n break;\n case 'ptBr':\n thousandSeparator = '.';\n decimalSeparator = ',';\n prefix = 'R$';\n break;\n }\n\n return {\n prefix,\n thousandSeparator,\n decimalSeparator,\n };\n }\n\n private maskCoin(value: number) {\n const { prefix, thousandSeparator, decimalSeparator } =\n this.decimalFormatConfig;\n\n return new KlNumber(value).maskCoin(\n prefix,\n thousandSeparator,\n decimalSeparator,\n this.decimalCount(),\n );\n }\n\n private unmaskCoin(value: string): number {\n const { prefix, thousandSeparator, decimalSeparator } =\n this.decimalFormatConfig;\n\n return parseFloat(\n value\n .replace(prefix, '')\n .replace(new RegExp(`\\\\${thousandSeparator}`, 'g'), '')\n .replace(decimalSeparator, '.')\n .trim(),\n );\n }\n\n private applyMask() {\n this.setValue(this.maskCoin(this.writedValue));\n }\n\n private get currentValue() {\n return this.input.value;\n }\n\n private setValue(value: string) {\n this.input.value = value;\n }\n\n private get input() {\n return this.elementRef.nativeElement;\n }\n\n private onFocus = () => {\n this.putInputCaretOnTheEnd();\n };\n\n private onKeyUp = (event: KeyboardEvent) => {\n if (/\\d/.test(event.key) || event.key === 'Backspace') {\n this.updateWritedValue(event.key, event.key === 'Backspace');\n\n if (isNaN(this.writedValue)) {\n this.writedValue = 0;\n }\n\n this.applyMask();\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n this.putInputCaretOnTheEnd();\n }\n };\n\n private onKeyPress = (event: KeyboardEvent) => {\n event.preventDefault();\n };\n\n private onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Backspace') {\n event.preventDefault();\n }\n };\n\n private onPaste = (event: ClipboardEvent) => {\n event.preventDefault();\n\n if (!event.clipboardData) {\n return;\n }\n\n const pastedValue = event.clipboardData.getData('Text');\n\n let unmaskedValue = parseFloat(pastedValue);\n\n if (pastedValue.includes(',')) {\n unmaskedValue = this.unmaskCoin(event.clipboardData.getData('Text'));\n }\n\n this.setValue(this.maskCoin(unmaskedValue));\n };\n\n private onReset = () => {\n this.writedValue = 0.0;\n this.applyMask();\n };\n\n private onChange = () => {\n if (this.writedValue !== 0) {\n return;\n }\n\n let unmaskedValue = +this.currentValue;\n\n if (isNaN(unmaskedValue)) {\n unmaskedValue = this.unmaskCoin(this.currentValue);\n }\n\n this.writedValue = unmaskedValue;\n this.applyMask();\n };\n\n private putInputCaretOnTheEnd() {\n setTimeout(() =>\n this.input.setSelectionRange(\n this.currentValue.length,\n this.currentValue.length,\n ),\n );\n }\n\n private updateWritedValue(key: string, backspace = false) {\n let decimal = '';\n\n for (let i = 0; i < this.decimalCount(); i++) {\n decimal += '0';\n }\n\n if (backspace) {\n const match = (this.writedValue / 10)\n .toString()\n .match(new RegExp(`^-?\\\\d+(?:\\\\.\\\\d{0,${this.decimalCount()}})?`));\n\n if (match) {\n this.writedValue = parseFloat(match[0]);\n }\n }\n\n const currentValue = Math.round(this.writedValue * +`1${decimal}`);\n\n this.writedValue = parseFloat(`${currentValue}${key}`) / +`1${decimal}`;\n this.currencyValue.emit(this.writedValue);\n }\n\n ngOnDestroy(): void {\n const inputElement = this.elementRef.nativeElement;\n\n inputElement.removeEventListener('focus', this.onFocus);\n inputElement.removeEventListener('keyup', this.onKeyUp);\n inputElement.removeEventListener('keypress', this.onKeyPress);\n inputElement.removeEventListener('keydown', this.onKeyDown);\n inputElement.removeEventListener('paste', this.onPaste);\n inputElement.removeEventListener('reset', this.onReset);\n }\n\n ngOnInit(): void {\n this.writedValue = this.unmaskCoin(this.currentValue);\n\n this.input.style.textAlign = 'right';\n\n const inputElement = this.elementRef.nativeElement;\n\n inputElement.addEventListener('focus', this.onFocus);\n inputElement.addEventListener('keyup', this.onKeyUp);\n inputElement.addEventListener('keypress', this.onKeyPress);\n inputElement.addEventListener('keydown', this.onKeyDown);\n inputElement.addEventListener('paste', this.onPaste);\n inputElement.addEventListener('reset', this.onReset);\n inputElement.onchange = this.onChange;\n\n setTimeout(() => this.applyMask());\n }\n}\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\n\ntype TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n@Directive({ selector: '[tooltip]' })\nexport class Tooltip {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(\n ElementRef<HTMLElement>\n );\n\n tooltip = input.required<string>();\n tooltipPosition = input<TooltipPosition>('top');\n\n constructor() {\n effect(() => {\n const element = this.elementRef.nativeElement;\n const tooltipText = this.tooltip();\n\n element.classList.add('tooltip');\n element.dataset['tip'] = tooltipText;\n\n switch (this.tooltipPosition()) {\n case 'top':\n element.classList.add('tooltip-top');\n break;\n case 'bottom':\n element.classList.add('tooltip-bottom');\n break;\n case 'left':\n element.classList.add('tooltip-left');\n break;\n case 'right':\n element.classList.add('tooltip-right');\n break;\n }\n });\n }\n}\n","import {\n ApplicationRef,\n booleanAttribute,\n ComponentRef,\n createComponent,\n Directive,\n effect,\n ElementRef,\n EnvironmentInjector,\n inject,\n input,\n inputBinding,\n OnInit,\n} from '@angular/core';\nimport { Loader } from '@koalarx/ui/core/components/loader';\n\nexport type ButtonColor =\n | 'neutral'\n | 'primary'\n | 'secondary'\n | 'accent'\n | 'info'\n | 'success'\n | 'warning'\n | 'error'\n | 'ghost';\n\nexport type ButtonSize =\n | 'extraSmall'\n | 'small'\n | 'medium'\n | 'large'\n | 'extraLarge';\n\n@Directive({ selector: 'button[klButton], a[klButton]' })\nexport class Button implements OnInit {\n private readonly elementRef = inject<ElementRef<HTMLButtonElement>>(\n ElementRef<HTMLButtonElement>\n );\n private readonly appRef = inject(ApplicationRef);\n private readonly injector = inject(EnvironmentInjector);\n private loaderComponent: ComponentRef<Loader> | null = null;\n\n color = input<ButtonColor>('neutral');\n type = input<'button' | 'submit'>('button');\n circle = input(false, { transform: booleanAttribute });\n outline = input(false, { transform: booleanAttribute });\n soft = input(false, { transform: booleanAttribute });\n showLoader = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n size = input<ButtonSize>('medium');\n\n constructor() {\n effect(() => this.toggleLoader(this.showLoader()));\n effect(() => {\n const disabled = this.disabled();\n this.elementRef.nativeElement.disabled = disabled;\n });\n }\n\n private createLoaderComponent() {\n const spanContainer = this.elementRef.nativeElement.insertBefore(\n document.createElement('span'),\n this.elementRef.nativeElement.firstChild\n );\n spanContainer.classList.add(\n 'flex',\n 'items-center',\n 'justify-center',\n 'h-full'\n );\n this.loaderComponent = createComponent(Loader, {\n environmentInjector: this.injector,\n hostElement: spanContainer,\n bindings: [inputBinding('size', () => this.size())],\n });\n\n return this.loaderComponent;\n }\n\n private toggleLoader(show: boolean) {\n if (show) {\n const loaderComponent = this.createLoaderComponent();\n\n this.elementRef.nativeElement.disabled = true;\n this.appRef.attachView(loaderComponent.hostView);\n } else {\n if (!this.disabled()) {\n this.elementRef.nativeElement.disabled = false;\n }\n\n if (this.loaderComponent) {\n this.appRef.detachView(this.loaderComponent.hostView);\n this.loaderComponent.destroy();\n this.loaderComponent = null;\n }\n }\n }\n\n private getColorClass(color: ButtonColor): string {\n switch (color) {\n case 'neutral':\n return 'btn-neutral';\n case 'primary':\n return 'btn-primary';\n case 'secondary':\n return 'btn-secondary';\n case 'accent':\n return 'btn-accent';\n case 'info':\n return 'btn-info';\n case 'success':\n return 'btn-success';\n case 'warning':\n return 'btn-warning';\n case 'error':\n return 'btn-error';\n case 'ghost':\n return 'btn-ghost';\n default:\n throw new Error(`Unknown button color: ${color}`);\n }\n }\n\n private getSizeClass(size: ButtonSize): string {\n switch (size) {\n case 'extraSmall':\n return 'btn-xs';\n case 'small':\n return 'btn-sm';\n case 'medium':\n return 'btn-md';\n case 'large':\n return 'btn-lg';\n case 'extraLarge':\n return 'btn-xl';\n default:\n throw new Error(`Unknown button size: ${size}`);\n }\n }\n\n ngOnInit(): void {\n this.elementRef.nativeElement.type = this.type();\n this.elementRef.nativeElement.classList.add('btn');\n this.elementRef.nativeElement.classList.add(\n this.getColorClass(this.color())\n );\n this.elementRef.nativeElement.classList.add(this.getSizeClass(this.size()));\n\n if (this.outline()) {\n this.elementRef.nativeElement.classList.add('btn-outline');\n }\n\n if (this.circle()) {\n this.elementRef.nativeElement.classList.add('btn-circle');\n }\n\n if (this.soft()) {\n this.elementRef.nativeElement.classList.add('btn-soft');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -12,10 +12,10 @@ class Authorization {
|
|
|
12
12
|
appConfig = inject(AppConfig);
|
|
13
13
|
translation = this.appConfig.translation.jwtAuthorizationService;
|
|
14
14
|
authConfig = this.appConfig.authConfig;
|
|
15
|
-
_accessToken = signal(null, ...(ngDevMode ? [{ debugName: "_accessToken" }] : []));
|
|
16
|
-
_refreshToken = signal(null, ...(ngDevMode ? [{ debugName: "_refreshToken" }] : []));
|
|
17
|
-
_isAuthenticated = signal(false, ...(ngDevMode ? [{ debugName: "_isAuthenticated" }] : []));
|
|
18
|
-
_userinfo = signal(null, ...(ngDevMode ? [{ debugName: "_userinfo" }] : []));
|
|
15
|
+
_accessToken = signal(null, ...(ngDevMode ? [{ debugName: "_accessToken" }] : /* istanbul ignore next */ []));
|
|
16
|
+
_refreshToken = signal(null, ...(ngDevMode ? [{ debugName: "_refreshToken" }] : /* istanbul ignore next */ []));
|
|
17
|
+
_isAuthenticated = signal(false, ...(ngDevMode ? [{ debugName: "_isAuthenticated" }] : /* istanbul ignore next */ []));
|
|
18
|
+
_userinfo = signal(null, ...(ngDevMode ? [{ debugName: "_userinfo" }] : /* istanbul ignore next */ []));
|
|
19
19
|
router = inject(Router);
|
|
20
20
|
http = inject(HttpClient);
|
|
21
21
|
confirm = inject(Confirm);
|
|
@@ -94,11 +94,15 @@ class Authorization {
|
|
|
94
94
|
});
|
|
95
95
|
effect(() => {
|
|
96
96
|
const hasToken = this.hasToken();
|
|
97
|
+
const publicRoutes = this.authConfig.publicRoutes ?? [];
|
|
98
|
+
if (this.authConfig.loginRoute) {
|
|
99
|
+
publicRoutes.push(this.authConfig.loginRoute);
|
|
100
|
+
}
|
|
97
101
|
if (hasToken) {
|
|
98
102
|
this.loadUserInfo();
|
|
99
103
|
}
|
|
100
104
|
else if (this.authConfig.loginRoute &&
|
|
101
|
-
!location.hash.includes(
|
|
105
|
+
!publicRoutes.some((route) => location.hash.includes(route))) {
|
|
102
106
|
this.router.navigate([this.authConfig.loginRoute]);
|
|
103
107
|
}
|
|
104
108
|
});
|
|
@@ -145,10 +149,10 @@ class Authorization {
|
|
|
145
149
|
},
|
|
146
150
|
}), first());
|
|
147
151
|
}
|
|
148
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
149
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.
|
|
152
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: Authorization, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
153
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: Authorization, providedIn: 'root' });
|
|
150
154
|
}
|
|
151
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: Authorization, decorators: [{
|
|
152
156
|
type: Injectable,
|
|
153
157
|
args: [{ providedIn: 'root' }]
|
|
154
158
|
}], ctorParameters: () => [] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koalarx-ui-shared-services.mjs","sources":["../../projects/koala-ui/shared/services/authorization.ts","../../projects/koala-ui/shared/services/koalarx-ui-shared-services.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { computed, effect, inject, Injectable, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AppConfig } from '@koalarx/ui/core/config';\nimport { AuthConfig } from '@koalarx/ui/core/models';\nimport { Confirm } from '@koalarx/ui/shared/components/confirm';\nimport { jwtDecode } from 'jwt-decode';\nimport { first } from 'rxjs/internal/operators/first';\nimport { tap } from 'rxjs/internal/operators/tap';\n\n@Injectable({ providedIn: 'root' })\nexport class Authorization<TUser = any> {\n private readonly appConfig = inject(AppConfig);\n private readonly translation =\n this.appConfig.translation.jwtAuthorizationService;\n private readonly authConfig = this.appConfig.authConfig as AuthConfig;\n private _accessToken = signal<string | null>(null);\n private _refreshToken = signal<string | null>(null);\n private _isAuthenticated = signal<boolean>(false);\n private _userinfo = signal<TUser | null>(null);\n private readonly router = inject(Router);\n private readonly http = inject(HttpClient);\n private readonly confirm = inject(Confirm);\n\n get accessToken() {\n const accessToken = this._accessToken();\n return accessToken;\n }\n\n set accessToken(accessToken: string | null) {\n if (accessToken) {\n localStorage.setItem(this.authConfig.storageTokenKey, accessToken);\n } else {\n localStorage.removeItem(this.authConfig.storageTokenKey);\n }\n\n this._accessToken.set(accessToken);\n }\n\n get refreshToken() {\n const refreshToken = this._refreshToken();\n return refreshToken;\n }\n\n set refreshToken(refreshToken: string | null) {\n if (refreshToken) {\n localStorage.setItem(\n this.authConfig.storageRefreshTokenKey,\n refreshToken\n );\n } else {\n localStorage.removeItem(this.authConfig.storageRefreshTokenKey);\n }\n\n this._refreshToken.set(refreshToken);\n }\n\n get isAuthenticated() {\n return this._isAuthenticated.asReadonly();\n }\n\n get userinfo() {\n return this._userinfo.asReadonly();\n }\n\n get isExpired() {\n return computed(() => {\n const accessToken = this._accessToken();\n\n if (accessToken) {\n const decodedToken = jwtDecode(accessToken);\n\n if (decodedToken) {\n const exp = new Date((decodedToken.exp ?? 0) * 1000);\n const now = new Date();\n\n return exp < now;\n }\n }\n\n return true;\n });\n }\n\n get hasToken() {\n return computed(() => !!this._accessToken());\n }\n\n constructor() {\n if (this.appConfig.authConfig) {\n this.init();\n }\n }\n\n private init() {\n this._accessToken.set(\n localStorage.getItem(this.authConfig.storageTokenKey)\n );\n this._refreshToken.set(\n localStorage.getItem(this.authConfig?.storageRefreshTokenKey)\n );\n\n effect(() => {\n const userInfo = this._userinfo();\n\n if (userInfo) {\n this.updateAuthState();\n }\n });\n\n effect(() => {\n const isAuthenticated = this.isAuthenticated();\n\n if (\n isAuthenticated &&\n (!this.authConfig.loginRoute ||\n (this.authConfig.loginRoute &&\n location.hash.includes(this.authConfig.loginRoute))) &&\n this.authConfig.homeRoute\n ) {\n this.router.navigate([this.authConfig.homeRoute]);\n }\n });\n\n effect(() => {\n const hasToken = this.hasToken();\n\n if (hasToken) {\n this.loadUserInfo();\n } else if (\n this.authConfig.loginRoute &&\n !location.hash.includes(this.authConfig.loginRoute)\n ) {\n this.router.navigate([this.authConfig.loginRoute]);\n }\n });\n }\n\n private updateAuthState() {\n this._isAuthenticated.set(\n this.hasToken() && !this.isExpired() && !!this._userinfo()\n );\n }\n\n private logoutUser() {\n localStorage.removeItem(this.authConfig.storageTokenKey);\n localStorage.removeItem(this.authConfig.storageRefreshTokenKey);\n this._userinfo.set(null);\n this._refreshToken.set(null);\n this._accessToken.set(null);\n this.updateAuthState();\n }\n\n private loadUserInfo() {\n this.http.get<TUser>(this.authConfig.userInfo.url).subscribe({\n next: (userInfo) => this._userinfo.set(userInfo),\n error: () => this.logoutUser(),\n });\n }\n\n logout(force = false) {\n if (force) {\n this.logoutUser();\n return;\n }\n\n this.confirm.open({\n message: this.translation.questionLogoutMessage,\n yesCallback: () => this.logoutUser(),\n });\n }\n\n updateToken() {\n return this.http.post<any>(this.authConfig.refreshToken.url, {}).pipe(\n tap({\n next: (response) => {\n this.accessToken =\n response[this.authConfig.refreshToken.response.accessTokenKeyName];\n this.refreshToken =\n response[this.authConfig.refreshToken.response.refreshTokenKeyName];\n this.updateAuthState();\n },\n error: () => {\n this.logout(true);\n this.router.navigate([this.authConfig.loginRoute]);\n },\n }),\n first()\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"koalarx-ui-shared-services.mjs","sources":["../../projects/koala-ui/shared/services/authorization.ts","../../projects/koala-ui/shared/services/koalarx-ui-shared-services.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { computed, effect, inject, Injectable, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AppConfig } from '@koalarx/ui/core/config';\nimport { AuthConfig } from '@koalarx/ui/core/models';\nimport { Confirm } from '@koalarx/ui/shared/components/confirm';\nimport { jwtDecode } from 'jwt-decode';\nimport { first } from 'rxjs/internal/operators/first';\nimport { tap } from 'rxjs/internal/operators/tap';\n\n@Injectable({ providedIn: 'root' })\nexport class Authorization<TUser = any> {\n private readonly appConfig = inject(AppConfig);\n private readonly translation =\n this.appConfig.translation.jwtAuthorizationService;\n private readonly authConfig = this.appConfig.authConfig as AuthConfig;\n private _accessToken = signal<string | null>(null);\n private _refreshToken = signal<string | null>(null);\n private _isAuthenticated = signal<boolean>(false);\n private _userinfo = signal<TUser | null>(null);\n private readonly router = inject(Router);\n private readonly http = inject(HttpClient);\n private readonly confirm = inject(Confirm);\n\n get accessToken() {\n const accessToken = this._accessToken();\n return accessToken;\n }\n\n set accessToken(accessToken: string | null) {\n if (accessToken) {\n localStorage.setItem(this.authConfig.storageTokenKey, accessToken);\n } else {\n localStorage.removeItem(this.authConfig.storageTokenKey);\n }\n\n this._accessToken.set(accessToken);\n }\n\n get refreshToken() {\n const refreshToken = this._refreshToken();\n return refreshToken;\n }\n\n set refreshToken(refreshToken: string | null) {\n if (refreshToken) {\n localStorage.setItem(\n this.authConfig.storageRefreshTokenKey,\n refreshToken,\n );\n } else {\n localStorage.removeItem(this.authConfig.storageRefreshTokenKey);\n }\n\n this._refreshToken.set(refreshToken);\n }\n\n get isAuthenticated() {\n return this._isAuthenticated.asReadonly();\n }\n\n get userinfo() {\n return this._userinfo.asReadonly();\n }\n\n get isExpired() {\n return computed(() => {\n const accessToken = this._accessToken();\n\n if (accessToken) {\n const decodedToken = jwtDecode(accessToken);\n\n if (decodedToken) {\n const exp = new Date((decodedToken.exp ?? 0) * 1000);\n const now = new Date();\n\n return exp < now;\n }\n }\n\n return true;\n });\n }\n\n get hasToken() {\n return computed(() => !!this._accessToken());\n }\n\n constructor() {\n if (this.appConfig.authConfig) {\n this.init();\n }\n }\n\n private init() {\n this._accessToken.set(\n localStorage.getItem(this.authConfig.storageTokenKey),\n );\n this._refreshToken.set(\n localStorage.getItem(this.authConfig?.storageRefreshTokenKey),\n );\n\n effect(() => {\n const userInfo = this._userinfo();\n\n if (userInfo) {\n this.updateAuthState();\n }\n });\n\n effect(() => {\n const isAuthenticated = this.isAuthenticated();\n\n if (\n isAuthenticated &&\n (!this.authConfig.loginRoute ||\n (this.authConfig.loginRoute &&\n location.hash.includes(this.authConfig.loginRoute))) &&\n this.authConfig.homeRoute\n ) {\n this.router.navigate([this.authConfig.homeRoute]);\n }\n });\n\n effect(() => {\n const hasToken = this.hasToken();\n const publicRoutes = this.authConfig.publicRoutes ?? [];\n\n if (this.authConfig.loginRoute) {\n publicRoutes.push(this.authConfig.loginRoute);\n }\n\n if (hasToken) {\n this.loadUserInfo();\n } else if (\n this.authConfig.loginRoute &&\n !publicRoutes.some((route) => location.hash.includes(route))\n ) {\n this.router.navigate([this.authConfig.loginRoute]);\n }\n });\n }\n\n private updateAuthState() {\n this._isAuthenticated.set(\n this.hasToken() && !this.isExpired() && !!this._userinfo(),\n );\n }\n\n private logoutUser() {\n localStorage.removeItem(this.authConfig.storageTokenKey);\n localStorage.removeItem(this.authConfig.storageRefreshTokenKey);\n this._userinfo.set(null);\n this._refreshToken.set(null);\n this._accessToken.set(null);\n this.updateAuthState();\n }\n\n private loadUserInfo() {\n this.http.get<TUser>(this.authConfig.userInfo.url).subscribe({\n next: (userInfo) => this._userinfo.set(userInfo),\n error: () => this.logoutUser(),\n });\n }\n\n logout(force = false) {\n if (force) {\n this.logoutUser();\n return;\n }\n\n this.confirm.open({\n message: this.translation.questionLogoutMessage,\n yesCallback: () => this.logoutUser(),\n });\n }\n\n updateToken() {\n return this.http.post<any>(this.authConfig.refreshToken.url, {}).pipe(\n tap({\n next: (response) => {\n this.accessToken =\n response[this.authConfig.refreshToken.response.accessTokenKeyName];\n this.refreshToken =\n response[this.authConfig.refreshToken.response.refreshTokenKeyName];\n this.updateAuthState();\n },\n error: () => {\n this.logout(true);\n this.router.navigate([this.authConfig.loginRoute]);\n },\n }),\n first(),\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -86,10 +86,10 @@ class HttpErrorFeedbackAlert {
|
|
|
86
86
|
return;
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
90
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.
|
|
89
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HttpErrorFeedbackAlert, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
90
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HttpErrorFeedbackAlert, providedIn: 'root' });
|
|
91
91
|
}
|
|
92
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
92
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: HttpErrorFeedbackAlert, decorators: [{
|
|
93
93
|
type: Injectable,
|
|
94
94
|
args: [{ providedIn: 'root' }]
|
|
95
95
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koalarx-ui-shared-utils.mjs","sources":["../../projects/koala-ui/shared/utils/is-empty.ts","../../projects/koala-ui/shared/utils/generate-query-selector.ts","../../projects/koala-ui/shared/utils/http-error-feedback-alert.ts","../../projects/koala-ui/shared/utils/koalarx-ui-shared-utils.ts"],"sourcesContent":["export function isEmpty(value: any) {\n return value === null || value === undefined || value === ''\n}\n","export function generateQuerySelector(elem: HTMLElement): string {\n const { tagName, id, className, parentElement } = elem;\n\n let str = '';\n\n if (id !== '' && id.match(/^[a-z].*/)) {\n str += `#${id}`;\n return str;\n }\n\n str = tagName.toLowerCase();\n\n if (className) {\n str +=\n '.' +\n className\n .replace(/(^\\s)/gm, '')\n .replace(/(\\s{2,})/gm, ' ')\n .split(/\\s/)\n .filter((c) => !/[[,\\],:]/.test(c))\n .join('.');\n }\n\n const needNthPart = (el: HTMLElement): boolean => {\n let sib = el.previousElementSibling;\n\n if (!el.className) {\n return true;\n }\n\n while (sib) {\n if (el.className !== sib.className) {\n return false;\n }\n\n sib = sib.previousElementSibling;\n }\n\n return false;\n };\n\n const getNthPart = (el: HTMLElement): string => {\n let childIndex = 1;\n\n let sib = el.previousElementSibling;\n while (sib) {\n childIndex++;\n sib = sib.previousElementSibling;\n }\n\n return `:nth-child(${childIndex})`;\n };\n\n if (needNthPart(elem)) {\n str += getNthPart(elem);\n }\n\n if (!parentElement) {\n return str;\n }\n\n return `${generateQuerySelector(parentElement)} > ${str}`;\n}\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { AppConfig } from '@koalarx/ui/core/config';\r\nimport { Snackbar } from '@koalarx/ui/shared/components/snackbar';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class HttpErrorFeedbackAlert {\r\n private readonly snackbar = inject(Snackbar);\r\n private readonly appConfig = inject(AppConfig);\r\n\r\n tapError(error: HttpErrorResponse) {\r\n const httpClientErrorsMiddleware =\r\n this.appConfig.httpClientErrorsMiddleware;\r\n\r\n if (\r\n httpClientErrorsMiddleware &&\r\n httpClientErrorsMiddleware.ignoreError(error)\r\n ) {\r\n return;\r\n }\r\n\r\n const translations = this.appConfig.translation.feedbackRequestInterceptor;\r\n const statusCode = error.status.toString();\r\n\r\n if (statusCode.charAt(0) === '4') {\r\n console.warn(error);\r\n\r\n this.snackbar.warning(\r\n httpClientErrorsMiddleware?.handleError(error) ??\r\n (translations as any)[statusCode],\r\n );\r\n return;\r\n } else if (statusCode.charAt(0) === '5') {\r\n console.error(error);\r\n\r\n this.snackbar.error(\r\n httpClientErrorsMiddleware?.handleError(error) ??\r\n (translations as any)[statusCode],\r\n );\r\n return;\r\n } else {\r\n console.info(error);\r\n\r\n this.snackbar.info(\r\n httpClientErrorsMiddleware?.handleError(error) ??\r\n translations.unknowError,\r\n );\r\n return;\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAAM,SAAU,OAAO,CAAC,KAAU,EAAA;IAChC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;AAC9D;;ACFM,SAAU,qBAAqB,CAAC,IAAiB,EAAA;IACrD,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI;IAEtD,IAAI,GAAG,GAAG,EAAE;IAEZ,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;AACrC,QAAA,GAAG,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE;AACf,QAAA,OAAO,GAAG
|
|
1
|
+
{"version":3,"file":"koalarx-ui-shared-utils.mjs","sources":["../../projects/koala-ui/shared/utils/is-empty.ts","../../projects/koala-ui/shared/utils/generate-query-selector.ts","../../projects/koala-ui/shared/utils/http-error-feedback-alert.ts","../../projects/koala-ui/shared/utils/koalarx-ui-shared-utils.ts"],"sourcesContent":["export function isEmpty(value: any) {\n return value === null || value === undefined || value === ''\n}\n","export function generateQuerySelector(elem: HTMLElement): string {\n const { tagName, id, className, parentElement } = elem;\n\n let str = '';\n\n if (id !== '' && id.match(/^[a-z].*/)) {\n str += `#${id}`;\n return str;\n }\n\n str = tagName.toLowerCase();\n\n if (className) {\n str +=\n '.' +\n className\n .replace(/(^\\s)/gm, '')\n .replace(/(\\s{2,})/gm, ' ')\n .split(/\\s/)\n .filter((c) => !/[[,\\],:]/.test(c))\n .join('.');\n }\n\n const needNthPart = (el: HTMLElement): boolean => {\n let sib = el.previousElementSibling;\n\n if (!el.className) {\n return true;\n }\n\n while (sib) {\n if (el.className !== sib.className) {\n return false;\n }\n\n sib = sib.previousElementSibling;\n }\n\n return false;\n };\n\n const getNthPart = (el: HTMLElement): string => {\n let childIndex = 1;\n\n let sib = el.previousElementSibling;\n while (sib) {\n childIndex++;\n sib = sib.previousElementSibling;\n }\n\n return `:nth-child(${childIndex})`;\n };\n\n if (needNthPart(elem)) {\n str += getNthPart(elem);\n }\n\n if (!parentElement) {\n return str;\n }\n\n return `${generateQuerySelector(parentElement)} > ${str}`;\n}\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { AppConfig } from '@koalarx/ui/core/config';\r\nimport { Snackbar } from '@koalarx/ui/shared/components/snackbar';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class HttpErrorFeedbackAlert {\r\n private readonly snackbar = inject(Snackbar);\r\n private readonly appConfig = inject(AppConfig);\r\n\r\n tapError(error: HttpErrorResponse) {\r\n const httpClientErrorsMiddleware =\r\n this.appConfig.httpClientErrorsMiddleware;\r\n\r\n if (\r\n httpClientErrorsMiddleware &&\r\n httpClientErrorsMiddleware.ignoreError(error)\r\n ) {\r\n return;\r\n }\r\n\r\n const translations = this.appConfig.translation.feedbackRequestInterceptor;\r\n const statusCode = error.status.toString();\r\n\r\n if (statusCode.charAt(0) === '4') {\r\n console.warn(error);\r\n\r\n this.snackbar.warning(\r\n httpClientErrorsMiddleware?.handleError(error) ??\r\n (translations as any)[statusCode],\r\n );\r\n return;\r\n } else if (statusCode.charAt(0) === '5') {\r\n console.error(error);\r\n\r\n this.snackbar.error(\r\n httpClientErrorsMiddleware?.handleError(error) ??\r\n (translations as any)[statusCode],\r\n );\r\n return;\r\n } else {\r\n console.info(error);\r\n\r\n this.snackbar.info(\r\n httpClientErrorsMiddleware?.handleError(error) ??\r\n translations.unknowError,\r\n );\r\n return;\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAAM,SAAU,OAAO,CAAC,KAAU,EAAA;IAChC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;AAC9D;;ACFM,SAAU,qBAAqB,CAAC,IAAiB,EAAA;IACrD,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI;IAEtD,IAAI,GAAG,GAAG,EAAE;IAEZ,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;AACrC,QAAA,GAAG,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE;AACf,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE;IAE3B,IAAI,SAAS,EAAE;QACb,GAAG;YACD,GAAG;gBACH;AACG,qBAAA,OAAO,CAAC,SAAS,EAAE,EAAE;AACrB,qBAAA,OAAO,CAAC,YAAY,EAAE,GAAG;qBACzB,KAAK,CAAC,IAAI;AACV,qBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;qBACjC,IAAI,CAAC,GAAG,CAAC;IAChB;AAEA,IAAA,MAAM,WAAW,GAAG,CAAC,EAAe,KAAa;AAC/C,QAAA,IAAI,GAAG,GAAG,EAAE,CAAC,sBAAsB;AAEnC,QAAA,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,GAAG,EAAE;YACV,IAAI,EAAE,CAAC,SAAS,KAAK,GAAG,CAAC,SAAS,EAAE;AAClC,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,GAAG,GAAG,GAAG,CAAC,sBAAsB;QAClC;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC;AAED,IAAA,MAAM,UAAU,GAAG,CAAC,EAAe,KAAY;QAC7C,IAAI,UAAU,GAAG,CAAC;AAElB,QAAA,IAAI,GAAG,GAAG,EAAE,CAAC,sBAAsB;QACnC,OAAO,GAAG,EAAE;AACV,YAAA,UAAU,EAAE;AACZ,YAAA,GAAG,GAAG,GAAG,CAAC,sBAAsB;QAClC;QAEA,OAAO,CAAA,WAAA,EAAc,UAAU,CAAA,CAAA,CAAG;AACpC,IAAA,CAAC;AAED,IAAA,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;AACrB,QAAA,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC;IACzB;IAEA,IAAI,CAAC,aAAa,EAAE;AAClB,QAAA,OAAO,GAAG;IACZ;IAEA,OAAO,CAAA,EAAG,qBAAqB,CAAC,aAAa,CAAC,CAAA,GAAA,EAAM,GAAG,EAAE;AAC3D;;MCxDa,sBAAsB,CAAA;AAChB,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAE9C,IAAA,QAAQ,CAAC,KAAwB,EAAA;AAC/B,QAAA,MAAM,0BAA0B,GAC9B,IAAI,CAAC,SAAS,CAAC,0BAA0B;AAE3C,QAAA,IACE,0BAA0B;AAC1B,YAAA,0BAA0B,CAAC,WAAW,CAAC,KAAK,CAAC,EAC7C;YACA;QACF;QAEA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,0BAA0B;QAC1E,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;QAE1C,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAChC,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAEnB,IAAI,CAAC,QAAQ,CAAC,OAAO,CACnB,0BAA0B,EAAE,WAAW,CAAC,KAAK,CAAC;AAC3C,gBAAA,YAAoB,CAAC,UAAU,CAAC,CACpC;YACD;QACF;aAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACvC,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;YAEpB,IAAI,CAAC,QAAQ,CAAC,KAAK,CACjB,0BAA0B,EAAE,WAAW,CAAC,KAAK,CAAC;AAC3C,gBAAA,YAAoB,CAAC,UAAU,CAAC,CACpC;YACD;QACF;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAEnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,0BAA0B,EAAE,WAAW,CAAC,KAAK,CAAC;gBAC5C,YAAY,CAAC,WAAW,CAC3B;YACD;QACF;IACF;uGA3CW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADT,MAAM,EAAA,CAAA;;2FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACLlC;;AAEG;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koalarx-ui-shared-validators.mjs","sources":["../../projects/koala-ui/shared/validators/confirm-password-validator.ts","../../projects/koala-ui/shared/validators/koalarx-ui-shared-validators.ts"],"sourcesContent":["import { AbstractControl } from '@angular/forms';\r\n\r\nexport function ConfirmPasswordValidator(passwordControlName: string) {\r\n return (control: AbstractControl) => {\r\n if (control.parent?.get(passwordControlName)?.value !== control.value) {\r\n return { confirmPassword: true };\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAEM,SAAU,wBAAwB,CAAC,mBAA2B,EAAA;IAClE,OAAO,CAAC,OAAwB,KAAI;AAClC,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,mBAAmB,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE;AACrE,YAAA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE
|
|
1
|
+
{"version":3,"file":"koalarx-ui-shared-validators.mjs","sources":["../../projects/koala-ui/shared/validators/confirm-password-validator.ts","../../projects/koala-ui/shared/validators/koalarx-ui-shared-validators.ts"],"sourcesContent":["import { AbstractControl } from '@angular/forms';\r\n\r\nexport function ConfirmPasswordValidator(passwordControlName: string) {\r\n return (control: AbstractControl) => {\r\n if (control.parent?.get(passwordControlName)?.value !== control.value) {\r\n return { confirmPassword: true };\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAEM,SAAU,wBAAwB,CAAC,mBAA2B,EAAA;IAClE,OAAO,CAAC,OAAwB,KAAI;AAClC,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,mBAAmB,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE;AACrE,YAAA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE;QAClC;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACH;;ACVA;;AAEG;;;;"}
|
package/fesm2022/koalarx-ui.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi, HttpClient } from '@angular/common/http';
|
|
2
2
|
import { AppConfig } from '@koalarx/ui/core/config';
|
|
3
3
|
import { getTranslationByLanguage } from '@koalarx/ui/core/translations';
|
|
4
4
|
import { provideMarkdown, MARKED_OPTIONS } from 'ngx-markdown';
|
|
@@ -33,10 +33,10 @@ class AuthorizationInterceptor {
|
|
|
33
33
|
}
|
|
34
34
|
return next.handle(this.setAuthorization(request));
|
|
35
35
|
}
|
|
36
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
37
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.
|
|
36
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AuthorizationInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
37
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AuthorizationInterceptor });
|
|
38
38
|
}
|
|
39
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: AuthorizationInterceptor, decorators: [{
|
|
40
40
|
type: Injectable
|
|
41
41
|
}] });
|
|
42
42
|
|
|
@@ -47,10 +47,10 @@ class FeedbackRequestInterceptor {
|
|
|
47
47
|
error: (error) => this.httpError.tapError(error),
|
|
48
48
|
}));
|
|
49
49
|
}
|
|
50
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
51
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.
|
|
50
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: FeedbackRequestInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
51
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: FeedbackRequestInterceptor });
|
|
52
52
|
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: FeedbackRequestInterceptor, decorators: [{
|
|
54
54
|
type: Injectable
|
|
55
55
|
}] });
|
|
56
56
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koalarx-ui.mjs","sources":["../../projects/koala-ui/core/interceptors/authorization-interceptor.ts","../../projects/koala-ui/core/interceptors/feedback-request-interceptor.ts","../../projects/koala-ui/core/koala-provider.ts","../../projects/koala-ui/koalarx-ui.ts"],"sourcesContent":["import {\n HttpInterceptor as AngularHttpInterceptor,\n HttpEvent,\n HttpHandler,\n HttpRequest,\n} from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { AppConfig } from '@koalarx/ui/core/config';\nimport { Authorization } from '@koalarx/ui/shared/services';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { switchMap } from 'rxjs/internal/operators/switchMap';\n\n@Injectable()\nexport class AuthorizationInterceptor implements AngularHttpInterceptor {\n private readonly authorization = inject(Authorization);\n private readonly authConfig = inject(AppConfig).authConfig;\n\n private setAuthorization(request: HttpRequest<any>) {\n if (this.authorization.hasToken()) {\n return request.clone({\n headers: request.headers.set(\n 'Authorization',\n `Bearer ${\n request.url === this.authConfig?.refreshToken?.url\n ? this.authorization.refreshToken\n : this.authorization.accessToken\n }`\n ),\n });\n }\n\n return request.clone();\n }\n\n intercept(\n request: HttpRequest<any>,\n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n if (\n this.authorization.hasToken() &&\n this.authorization.isExpired() &&\n !this.authConfig?.refreshToken?.url\n ) {\n return this.authorization\n .updateToken()\n .pipe(switchMap(() => next.handle(this.setAuthorization(request))));\n }\n\n return next.handle(this.setAuthorization(request));\n }\n}\n","import {\n HttpInterceptor as AngularHttpInterceptor,\n HttpEvent,\n HttpHandler,\n HttpRequest,\n} from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { HttpErrorFeedbackAlert } from '@koalarx/ui/shared/utils';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { tap } from 'rxjs/internal/operators/tap';\n\n@Injectable()\nexport class FeedbackRequestInterceptor implements AngularHttpInterceptor {\n private readonly httpError = inject(HttpErrorFeedbackAlert);\n\n intercept(\n request: HttpRequest<any>,\n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n return next.handle(request.clone()).pipe(\n tap({\n error: (error) => this.httpError.tapError(error),\n })\n );\n }\n}\n","import {\n HTTP_INTERCEPTORS,\n HttpClient,\n HttpInterceptor,\n provideHttpClient,\n withInterceptorsFromDi,\n} from '@angular/common/http';\nimport { Provider, Type } from '@angular/core';\nimport { AppConfig } from '@koalarx/ui/core/config';\nimport { HttpClientErrorsMiddleware } from '@koalarx/ui/core/middlewares';\nimport { AuthConfig } from '@koalarx/ui/core/models';\nimport {\n getTranslationByLanguage,\n KoalaLanguage,\n} from '@koalarx/ui/core/translations';\nimport { MARKED_OPTIONS, provideMarkdown } from 'ngx-markdown';\nimport { NgxMaskConfig, provideEnvironmentNgxMask } from 'ngx-mask';\nimport { AuthorizationInterceptor } from './interceptors/authorization-interceptor';\nimport { FeedbackRequestInterceptor } from './interceptors/feedback-request-interceptor';\n\nconst maskOptions: Partial<NgxMaskConfig> = {\n validation: false,\n thousandSeparator: '.',\n};\n\ninterface KoalaSettings {\n hostApi?: string;\n language?: KoalaLanguage;\n httpClientErrorsMiddleware?: HttpClientErrorsMiddleware;\n authConfig?: AuthConfig;\n authorizationInterceptor?: Type<HttpInterceptor>;\n}\n\nexport function provideKoala(config?: KoalaSettings): Provider {\n const appConfig = new AppConfig();\n\n appConfig.language = config?.language ?? 'en';\n appConfig.translation = getTranslationByLanguage(config?.language ?? 'en');\n appConfig.hostApi = config?.hostApi;\n appConfig.httpClientErrorsMiddleware = config?.httpClientErrorsMiddleware;\n appConfig.authConfig = config?.authConfig;\n\n const providers: Provider = [\n provideEnvironmentNgxMask(maskOptions),\n provideHttpClient(withInterceptorsFromDi()),\n provideMarkdown({\n loader: HttpClient,\n markedOptions: {\n provide: MARKED_OPTIONS,\n useValue: {\n gfm: true,\n breaks: true,\n pedantic: false,\n },\n },\n }),\n {\n provide: HTTP_INTERCEPTORS,\n useClass: FeedbackRequestInterceptor,\n multi: true,\n },\n {\n provide: AppConfig,\n useValue: appConfig,\n },\n ];\n\n if (config?.authConfig) {\n const interceptor =\n config.authorizationInterceptor || AuthorizationInterceptor;\n\n providers.push({\n provide: HTTP_INTERCEPTORS,\n useClass: interceptor,\n multi: true,\n });\n }\n\n return providers;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;MAaa,wBAAwB,CAAA;AAClB,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU;AAElD,IAAA,gBAAgB,CAAC,OAAyB,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE;YACjC,OAAO,OAAO,CAAC,KAAK,CAAC;gBACnB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAC1B,eAAe,EACf,CAAA,OAAA,EACE,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE;AAC7C,sBAAE,IAAI,CAAC,aAAa,CAAC;AACrB,sBAAE,IAAI,CAAC,aAAa,CAAC,WACzB,EAAE,CACH;AACF,aAAA,CAAC
|
|
1
|
+
{"version":3,"file":"koalarx-ui.mjs","sources":["../../projects/koala-ui/core/interceptors/authorization-interceptor.ts","../../projects/koala-ui/core/interceptors/feedback-request-interceptor.ts","../../projects/koala-ui/core/koala-provider.ts","../../projects/koala-ui/koalarx-ui.ts"],"sourcesContent":["import {\n HttpInterceptor as AngularHttpInterceptor,\n HttpEvent,\n HttpHandler,\n HttpRequest,\n} from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { AppConfig } from '@koalarx/ui/core/config';\nimport { Authorization } from '@koalarx/ui/shared/services';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { switchMap } from 'rxjs/internal/operators/switchMap';\n\n@Injectable()\nexport class AuthorizationInterceptor implements AngularHttpInterceptor {\n private readonly authorization = inject(Authorization);\n private readonly authConfig = inject(AppConfig).authConfig;\n\n private setAuthorization(request: HttpRequest<any>) {\n if (this.authorization.hasToken()) {\n return request.clone({\n headers: request.headers.set(\n 'Authorization',\n `Bearer ${\n request.url === this.authConfig?.refreshToken?.url\n ? this.authorization.refreshToken\n : this.authorization.accessToken\n }`\n ),\n });\n }\n\n return request.clone();\n }\n\n intercept(\n request: HttpRequest<any>,\n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n if (\n this.authorization.hasToken() &&\n this.authorization.isExpired() &&\n !this.authConfig?.refreshToken?.url\n ) {\n return this.authorization\n .updateToken()\n .pipe(switchMap(() => next.handle(this.setAuthorization(request))));\n }\n\n return next.handle(this.setAuthorization(request));\n }\n}\n","import {\n HttpInterceptor as AngularHttpInterceptor,\n HttpEvent,\n HttpHandler,\n HttpRequest,\n} from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { HttpErrorFeedbackAlert } from '@koalarx/ui/shared/utils';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { tap } from 'rxjs/internal/operators/tap';\n\n@Injectable()\nexport class FeedbackRequestInterceptor implements AngularHttpInterceptor {\n private readonly httpError = inject(HttpErrorFeedbackAlert);\n\n intercept(\n request: HttpRequest<any>,\n next: HttpHandler\n ): Observable<HttpEvent<any>> {\n return next.handle(request.clone()).pipe(\n tap({\n error: (error) => this.httpError.tapError(error),\n })\n );\n }\n}\n","import {\n HTTP_INTERCEPTORS,\n HttpClient,\n HttpInterceptor,\n provideHttpClient,\n withInterceptorsFromDi,\n} from '@angular/common/http';\nimport { Provider, Type } from '@angular/core';\nimport { AppConfig } from '@koalarx/ui/core/config';\nimport { HttpClientErrorsMiddleware } from '@koalarx/ui/core/middlewares';\nimport { AuthConfig } from '@koalarx/ui/core/models';\nimport {\n getTranslationByLanguage,\n KoalaLanguage,\n} from '@koalarx/ui/core/translations';\nimport { MARKED_OPTIONS, provideMarkdown } from 'ngx-markdown';\nimport { NgxMaskConfig, provideEnvironmentNgxMask } from 'ngx-mask';\nimport { AuthorizationInterceptor } from './interceptors/authorization-interceptor';\nimport { FeedbackRequestInterceptor } from './interceptors/feedback-request-interceptor';\n\nconst maskOptions: Partial<NgxMaskConfig> = {\n validation: false,\n thousandSeparator: '.',\n};\n\ninterface KoalaSettings {\n hostApi?: string;\n language?: KoalaLanguage;\n httpClientErrorsMiddleware?: HttpClientErrorsMiddleware;\n authConfig?: AuthConfig;\n authorizationInterceptor?: Type<HttpInterceptor>;\n}\n\nexport function provideKoala(config?: KoalaSettings): Provider {\n const appConfig = new AppConfig();\n\n appConfig.language = config?.language ?? 'en';\n appConfig.translation = getTranslationByLanguage(config?.language ?? 'en');\n appConfig.hostApi = config?.hostApi;\n appConfig.httpClientErrorsMiddleware = config?.httpClientErrorsMiddleware;\n appConfig.authConfig = config?.authConfig;\n\n const providers: Provider = [\n provideEnvironmentNgxMask(maskOptions),\n provideHttpClient(withInterceptorsFromDi()),\n provideMarkdown({\n loader: HttpClient,\n markedOptions: {\n provide: MARKED_OPTIONS,\n useValue: {\n gfm: true,\n breaks: true,\n pedantic: false,\n },\n },\n }),\n {\n provide: HTTP_INTERCEPTORS,\n useClass: FeedbackRequestInterceptor,\n multi: true,\n },\n {\n provide: AppConfig,\n useValue: appConfig,\n },\n ];\n\n if (config?.authConfig) {\n const interceptor =\n config.authorizationInterceptor || AuthorizationInterceptor;\n\n providers.push({\n provide: HTTP_INTERCEPTORS,\n useClass: interceptor,\n multi: true,\n });\n }\n\n return providers;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;MAaa,wBAAwB,CAAA;AAClB,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU;AAElD,IAAA,gBAAgB,CAAC,OAAyB,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE;YACjC,OAAO,OAAO,CAAC,KAAK,CAAC;gBACnB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAC1B,eAAe,EACf,CAAA,OAAA,EACE,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE;AAC7C,sBAAE,IAAI,CAAC,aAAa,CAAC;AACrB,sBAAE,IAAI,CAAC,aAAa,CAAC,WACzB,EAAE,CACH;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,OAAO,CAAC,KAAK,EAAE;IACxB;IAEA,SAAS,CACP,OAAyB,EACzB,IAAiB,EAAA;AAEjB,QAAA,IACE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;YAC9B,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,EACnC;YACA,OAAO,IAAI,CAAC;AACT,iBAAA,WAAW;AACX,iBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACvE;QAEA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpD;uGApCW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAxB,wBAAwB,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;MCAY,0BAA0B,CAAA;AACpB,IAAA,SAAS,GAAG,MAAM,CAAC,sBAAsB,CAAC;IAE3D,SAAS,CACP,OAAyB,EACzB,IAAiB,EAAA;AAEjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CACtC,GAAG,CAAC;AACF,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;AACjD,SAAA,CAAC,CACH;IACH;uGAZW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAA1B,0BAA0B,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;ACSD,MAAM,WAAW,GAA2B;AAC1C,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,iBAAiB,EAAE,GAAG;CACvB;AAUK,SAAU,YAAY,CAAC,MAAsB,EAAA;AACjD,IAAA,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE;IAEjC,SAAS,CAAC,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,IAAI;IAC7C,SAAS,CAAC,WAAW,GAAG,wBAAwB,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC;AAC1E,IAAA,SAAS,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO;AACnC,IAAA,SAAS,CAAC,0BAA0B,GAAG,MAAM,EAAE,0BAA0B;AACzE,IAAA,SAAS,CAAC,UAAU,GAAG,MAAM,EAAE,UAAU;AAEzC,IAAA,MAAM,SAAS,GAAa;QAC1B,yBAAyB,CAAC,WAAW,CAAC;QACtC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC;AAC3C,QAAA,eAAe,CAAC;AACd,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,aAAa,EAAE;AACb,gBAAA,OAAO,EAAE,cAAc;AACvB,gBAAA,QAAQ,EAAE;AACR,oBAAA,GAAG,EAAE,IAAI;AACT,oBAAA,MAAM,EAAE,IAAI;AACZ,oBAAA,QAAQ,EAAE,KAAK;AAChB,iBAAA;AACF,aAAA;SACF,CAAC;AACF,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,QAAQ,EAAE,0BAA0B;AACpC,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,QAAQ,EAAE,SAAS;AACpB,SAAA;KACF;AAED,IAAA,IAAI,MAAM,EAAE,UAAU,EAAE;AACtB,QAAA,MAAM,WAAW,GACf,MAAM,CAAC,wBAAwB,IAAI,wBAAwB;QAE7D,SAAS,CAAC,IAAI,CAAC;AACb,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,QAAQ,EAAE,WAAW;AACrB,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA,CAAC;IACJ;AAEA,IAAA,OAAO,SAAS;AAClB;;AC/EA;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@koalarx/ui",
|
|
3
|
-
"version": "21.2.
|
|
3
|
+
"version": "21.2.4",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": ">=21.0.0",
|
|
6
6
|
"@angular/core": ">=21.0.0"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"@angular/common": "
|
|
10
|
-
"@angular/compiler": "
|
|
11
|
-
"@angular/core": "
|
|
12
|
-
"@angular/forms": "
|
|
13
|
-
"@angular/platform-browser": "
|
|
14
|
-
"@angular/router": "
|
|
15
|
-
"@koalarx/utils": "
|
|
16
|
-
"@ngx-loading-bar/core": "
|
|
17
|
-
"@ngx-loading-bar/router": "
|
|
18
|
-
"@tailwindcss/postcss": "
|
|
19
|
-
"daisyui": "
|
|
20
|
-
"date-fns": "
|
|
21
|
-
"jwt-decode": "
|
|
22
|
-
"marked": "
|
|
23
|
-
"ngx-markdown": "
|
|
24
|
-
"ngx-mask": "
|
|
25
|
-
"postcss": "
|
|
26
|
-
"prism-themes": "
|
|
27
|
-
"prismjs": "
|
|
28
|
-
"rxjs": "
|
|
29
|
-
"tailwindcss": "
|
|
30
|
-
"tslib": "
|
|
9
|
+
"@angular/common": "21.2.8",
|
|
10
|
+
"@angular/compiler": "21.2.8",
|
|
11
|
+
"@angular/core": "21.2.8",
|
|
12
|
+
"@angular/forms": "21.2.8",
|
|
13
|
+
"@angular/platform-browser": "21.2.8",
|
|
14
|
+
"@angular/router": "21.2.8",
|
|
15
|
+
"@koalarx/utils": "4.2.1",
|
|
16
|
+
"@ngx-loading-bar/core": "7.0.0",
|
|
17
|
+
"@ngx-loading-bar/router": "7.0.0",
|
|
18
|
+
"@tailwindcss/postcss": "4.1.18",
|
|
19
|
+
"daisyui": "5.5.14",
|
|
20
|
+
"date-fns": "4.1.0",
|
|
21
|
+
"jwt-decode": "4.0.0",
|
|
22
|
+
"marked": "15.0.0",
|
|
23
|
+
"ngx-markdown": "21.0.0",
|
|
24
|
+
"ngx-mask": "19.0.7",
|
|
25
|
+
"postcss": "8.5.6",
|
|
26
|
+
"prism-themes": "1.9.0",
|
|
27
|
+
"prismjs": "1.30.0",
|
|
28
|
+
"rxjs": "7.8.0",
|
|
29
|
+
"tailwindcss": "4.1.18",
|
|
30
|
+
"tslib": "2.3.0"
|
|
31
31
|
},
|
|
32
32
|
"sideEffects": false,
|
|
33
33
|
"repository": {
|