@bootkit/ng0 0.0.0-alpha.2 → 0.0.0-alpha.3

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.
@@ -0,0 +1,72 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnInit, AfterContentInit, OnDestroy, Renderer2, DestroyRef } from '@angular/core';
3
+ import { NgForm } from '@angular/forms';
4
+ import { LocalizationService } from '@bootkit/ng0/localization';
5
+ import * as i1 from '@angular/common';
6
+
7
+ declare class FormFieldComponent implements OnInit, AfterContentInit, OnDestroy {
8
+ private _renderer;
9
+ private _destroyRef;
10
+ private _form;
11
+ private _ls;
12
+ /**
13
+ * The label text for the form field.
14
+ */
15
+ label: _angular_core.InputSignal<string>;
16
+ /**
17
+ * The hint text to display below the form field.
18
+ * This is typically used to provide additional information or instructions to the user.
19
+ */
20
+ hint: _angular_core.InputSignal<string>;
21
+ /**
22
+ * If true, the form-field will show validation errors.
23
+ * This is useful for displaying validation messages when the form control is invalid.
24
+ */
25
+ showErrors: _angular_core.InputSignal<boolean>;
26
+ /**
27
+ * If true, the form-field will show a red asterisk for required fields.
28
+ * This is only a visual indicator and does not enforce validation.
29
+ */
30
+ showRequiredIndicator: _angular_core.InputSignal<boolean>;
31
+ /**
32
+ * If true, the form-field will show subscripts (e.g. hints, errors) for the field label.
33
+ * This is useful for displaying additional information or validation messages.
34
+ */
35
+ showSubscripts: _angular_core.InputSignal<boolean>;
36
+ /**
37
+ * If true, the form-field will be rendered inside a ".input-group" element.
38
+ */
39
+ inputGroup: _angular_core.InputSignal<boolean>;
40
+ /**
41
+ * Returns the first localized error of the control
42
+ */
43
+ get errorText(): string;
44
+ /** Reports whether the control is touched. */
45
+ get touched(): boolean | null | undefined;
46
+ /** Reports whether the control is dirty. */
47
+ get dirty(): boolean | null | undefined;
48
+ /** Returns true if this form-field is required, otherwise returns false. */
49
+ get isRequired(): boolean;
50
+ private _onFocusOut;
51
+ private _ngControl?;
52
+ private _ngControlElement?;
53
+ private _isRequired;
54
+ private _locale?;
55
+ private _errorText?;
56
+ constructor(_renderer: Renderer2, _destroyRef: DestroyRef, _form: NgForm, _ls: LocalizationService);
57
+ ngOnInit(): void;
58
+ ngAfterContentInit(): void;
59
+ private _validate;
60
+ private _isRequiredField;
61
+ ngOnDestroy(): void;
62
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormFieldComponent, [null, null, { optional: true; }, null]>;
63
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormFieldComponent, "ng0-form-field, ng0-field", ["ng0FormField"], { "label": { "alias": "label"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "showErrors": { "alias": "showErrors"; "required": false; "isSignal": true; }; "showRequiredIndicator": { "alias": "showRequiredIndicator"; "required": false; "isSignal": true; }; "showSubscripts": { "alias": "showSubscripts"; "required": false; "isSignal": true; }; "inputGroup": { "alias": "inputGroup"; "required": false; "isSignal": true; }; }, {}, ["_ngControl", "_ngControlElement"], ["*"], true, never>;
64
+ }
65
+
66
+ declare class FormFieldModule {
67
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormFieldModule, never>;
68
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<FormFieldModule, never, [typeof i1.CommonModule, typeof FormFieldComponent], [typeof FormFieldComponent]>;
69
+ static ɵinj: _angular_core.ɵɵInjectorDeclaration<FormFieldModule>;
70
+ }
71
+
72
+ export { FormFieldComponent, FormFieldModule };
@@ -0,0 +1,147 @@
1
+ import * as i3 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { input, ElementRef, ContentChild, HostListener, HostBinding, Optional, Component, NgModule } from '@angular/core';
5
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
+ import * as i1 from '@angular/forms';
7
+ import { FormControl, NgControl } from '@angular/forms';
8
+ import * as i2 from '@bootkit/ng0/localization';
9
+
10
+ class FormFieldComponent {
11
+ _renderer;
12
+ _destroyRef;
13
+ _form;
14
+ _ls;
15
+ /**
16
+ * The label text for the form field.
17
+ */
18
+ label = input();
19
+ /**
20
+ * The hint text to display below the form field.
21
+ * This is typically used to provide additional information or instructions to the user.
22
+ */
23
+ hint = input();
24
+ /**
25
+ * If true, the form-field will show validation errors.
26
+ * This is useful for displaying validation messages when the form control is invalid.
27
+ */
28
+ showErrors = input(true);
29
+ /**
30
+ * If true, the form-field will show a red asterisk for required fields.
31
+ * This is only a visual indicator and does not enforce validation.
32
+ */
33
+ showRequiredIndicator = input(true);
34
+ /**
35
+ * If true, the form-field will show subscripts (e.g. hints, errors) for the field label.
36
+ * This is useful for displaying additional information or validation messages.
37
+ */
38
+ showSubscripts = input(true);
39
+ /**
40
+ * If true, the form-field will be rendered inside a ".input-group" element.
41
+ */
42
+ inputGroup = input(true);
43
+ /**
44
+ * Returns the first localized error of the control
45
+ */
46
+ get errorText() { return this._errorText; }
47
+ /** Reports whether the control is touched. */
48
+ get touched() { return this._ngControl?.touched; }
49
+ /** Reports whether the control is dirty. */
50
+ get dirty() { return this._ngControl?.dirty; }
51
+ /** Returns true if this form-field is required, otherwise returns false. */
52
+ get isRequired() { return this._isRequired; }
53
+ _onFocusOut() { this._validate(); }
54
+ _ngControl;
55
+ _ngControlElement;
56
+ _isRequired = false;
57
+ _locale;
58
+ _errorText;
59
+ constructor(_renderer, _destroyRef, _form, _ls) {
60
+ this._renderer = _renderer;
61
+ this._destroyRef = _destroyRef;
62
+ this._form = _form;
63
+ this._ls = _ls;
64
+ this._locale = this._ls.get();
65
+ this._ls.change.pipe(takeUntilDestroyed()).subscribe(e => this._locale = e.new);
66
+ }
67
+ ngOnInit() {
68
+ }
69
+ ngAfterContentInit() {
70
+ this._isRequired = this._isRequiredField();
71
+ if (this._ngControl) {
72
+ this._ngControl?.statusChanges?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(change => {
73
+ this._validate();
74
+ });
75
+ }
76
+ }
77
+ _validate() {
78
+ if (!this._ngControl || !this.dirty || !this.touched) {
79
+ return;
80
+ }
81
+ const invalid = this._ngControl.status === 'INVALID';
82
+ if (invalid) {
83
+ this._errorText = this._locale?.translateFirstError(this._ngControl.errors, 'Invalid').text;
84
+ }
85
+ else {
86
+ this._errorText = undefined;
87
+ }
88
+ this._renderer.addClass(this._ngControlElement.nativeElement, invalid ? 'is-invalid' : 'is-valid');
89
+ this._renderer.removeClass(this._ngControlElement.nativeElement, invalid ? 'is-valid' : 'is-invalid');
90
+ }
91
+ _isRequiredField() {
92
+ const validator = this._ngControl?.validator;
93
+ const errors = validator && validator(new FormControl(null));
94
+ return errors != null && errors['required'] === true;
95
+ }
96
+ ngOnDestroy() {
97
+ }
98
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FormFieldComponent, deps: [{ token: i0.Renderer2 }, { token: i0.DestroyRef }, { token: i1.NgForm, optional: true }, { token: i2.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
99
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: FormFieldComponent, isStandalone: true, selector: "ng0-form-field, ng0-field", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, showErrors: { classPropertyName: "showErrors", publicName: "showErrors", isSignal: true, isRequired: false, transformFunction: null }, showRequiredIndicator: { classPropertyName: "showRequiredIndicator", publicName: "showRequiredIndicator", isSignal: true, isRequired: false, transformFunction: null }, showSubscripts: { classPropertyName: "showSubscripts", publicName: "showSubscripts", isSignal: true, isRequired: false, transformFunction: null }, inputGroup: { classPropertyName: "inputGroup", publicName: "inputGroup", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "focusout": "_onFocusOut()" }, properties: { "class.required-form-field": "this.isRequired" } }, queries: [{ propertyName: "_ngControl", first: true, predicate: NgControl, descendants: true, static: true }, { propertyName: "_ngControlElement", first: true, predicate: NgControl, descendants: true, read: ElementRef, static: true }], exportAs: ["ng0FormField"], ngImport: i0, template: "@if(label()) {\r\n<label class=\"form-field-label\">\r\n {{label()}}\r\n <span *ngIf=\"isRequired && showRequiredIndicator()\" class=\"isc-form-field-required-marker\">*</span>\r\n</label>\r\n}\r\n\r\n@if(inputGroup()) {\r\n<div class=\"input-group\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n</div>\r\n}@else {\r\n<ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n}\r\n\r\n<ng-template #contentTemplate>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n@if(showSubscripts()) {\r\n<div class=\"form-field-subscript-wrapper\">\r\n @if(showErrors() && errorText && (touched || dirty)) {\r\n <span class=\"form-field-error text-danger\">\r\n {{errorText}}\r\n </span>\r\n }@if(hint()) {\r\n <span class=\"form-field-hint\">\r\n {{hint()}}\r\n </span>\r\n }\r\n</div>\r\n}", styles: [":host{display:block}.form-field-subscript-wrapper{margin-top:.2rem;min-height:1.5em;line-height:1.5em;text-align:justify}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
100
+ }
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FormFieldComponent, decorators: [{
102
+ type: Component,
103
+ args: [{ selector: 'ng0-form-field, ng0-field', exportAs: 'ng0FormField', standalone: true, imports: [
104
+ CommonModule
105
+ ], template: "@if(label()) {\r\n<label class=\"form-field-label\">\r\n {{label()}}\r\n <span *ngIf=\"isRequired && showRequiredIndicator()\" class=\"isc-form-field-required-marker\">*</span>\r\n</label>\r\n}\r\n\r\n@if(inputGroup()) {\r\n<div class=\"input-group\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n</div>\r\n}@else {\r\n<ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n}\r\n\r\n<ng-template #contentTemplate>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n@if(showSubscripts()) {\r\n<div class=\"form-field-subscript-wrapper\">\r\n @if(showErrors() && errorText && (touched || dirty)) {\r\n <span class=\"form-field-error text-danger\">\r\n {{errorText}}\r\n </span>\r\n }@if(hint()) {\r\n <span class=\"form-field-hint\">\r\n {{hint()}}\r\n </span>\r\n }\r\n</div>\r\n}", styles: [":host{display:block}.form-field-subscript-wrapper{margin-top:.2rem;min-height:1.5em;line-height:1.5em;text-align:justify}\n"] }]
106
+ }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.DestroyRef }, { type: i1.NgForm, decorators: [{
107
+ type: Optional
108
+ }] }, { type: i2.LocalizationService }], propDecorators: { isRequired: [{
109
+ type: HostBinding,
110
+ args: ['class.required-form-field']
111
+ }], _onFocusOut: [{
112
+ type: HostListener,
113
+ args: ['focusout']
114
+ }], _ngControl: [{
115
+ type: ContentChild,
116
+ args: [NgControl, { static: true }]
117
+ }], _ngControlElement: [{
118
+ type: ContentChild,
119
+ args: [NgControl, { static: true, read: ElementRef }]
120
+ }] } });
121
+
122
+ class FormFieldModule {
123
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FormFieldModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
124
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: FormFieldModule, imports: [CommonModule,
125
+ FormFieldComponent], exports: [FormFieldComponent] });
126
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FormFieldModule, imports: [CommonModule,
127
+ FormFieldComponent] });
128
+ }
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: FormFieldModule, decorators: [{
130
+ type: NgModule,
131
+ args: [{
132
+ imports: [
133
+ CommonModule,
134
+ FormFieldComponent,
135
+ ],
136
+ exports: [
137
+ FormFieldComponent,
138
+ ]
139
+ }]
140
+ }] });
141
+
142
+ /**
143
+ * Generated bundle index. Do not edit.
144
+ */
145
+
146
+ export { FormFieldComponent, FormFieldModule };
147
+ //# sourceMappingURL=bootkit-ng0-components-form-field.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootkit-ng0-components-form-field.mjs","sources":["../../../projects/ng0/components/form-field/form-field.component.ts","../../../projects/ng0/components/form-field/form-field.component.html","../../../projects/ng0/components/form-field/form-field.module.ts","../../../projects/ng0/components/form-field/bootkit-ng0-components-form-field.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { DestroyRef, HostListener, input, signal } from '@angular/core';\r\nimport { Component, Input, ContentChild, AfterContentInit, Optional, HostBinding, OnInit, OnDestroy, ElementRef, Renderer2 } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormControl, NgControl, NgForm } from '@angular/forms';\r\nimport { Locale, LocalizationService } from '@bootkit/ng0/localization';\r\n\r\n@Component({\r\n selector: 'ng0-form-field, ng0-field',\r\n exportAs: 'ng0FormField',\r\n templateUrl: './form-field.component.html',\r\n styleUrls: ['./form-field.component.scss'],\r\n standalone: true,\r\n imports: [\r\n CommonModule\r\n ],\r\n})\r\nexport class FormFieldComponent implements OnInit, AfterContentInit, OnDestroy {\r\n\r\n /**\r\n * The label text for the form field.\r\n */\r\n public label = input<string>();\r\n\r\n /**\r\n * The hint text to display below the form field.\r\n * This is typically used to provide additional information or instructions to the user.\r\n */\r\n public hint = input<string>();\r\n\r\n /**\r\n * If true, the form-field will show validation errors.\r\n * This is useful for displaying validation messages when the form control is invalid.\r\n */\r\n public showErrors = input(true);\r\n\r\n /**\r\n * If true, the form-field will show a red asterisk for required fields.\r\n * This is only a visual indicator and does not enforce validation.\r\n */\r\n public showRequiredIndicator = input(true);\r\n\r\n /**\r\n * If true, the form-field will show subscripts (e.g. hints, errors) for the field label.\r\n * This is useful for displaying additional information or validation messages.\r\n */\r\n public showSubscripts = input(true);\r\n\r\n /**\r\n * If true, the form-field will be rendered inside a \".input-group\" element.\r\n */\r\n public inputGroup = input(true);\r\n\r\n /**\r\n * Returns the first localized error of the control \r\n */\r\n public get errorText() { return this._errorText; }\r\n\r\n /** Reports whether the control is touched. */\r\n public get touched(): boolean | null | undefined { return this._ngControl?.touched; }\r\n\r\n /** Reports whether the control is dirty. */\r\n public get dirty(): boolean | null | undefined { return this._ngControl?.dirty; }\r\n\r\n /** Returns true if this form-field is required, otherwise returns false. */\r\n @HostBinding('class.required-form-field')\r\n public get isRequired(): boolean { return this._isRequired; }\r\n\r\n @HostListener('focusout')\r\n private _onFocusOut() { this._validate(); }\r\n\r\n @ContentChild(NgControl, { static: true })\r\n private _ngControl?: NgControl;\r\n\r\n @ContentChild(NgControl, { static: true, read: ElementRef })\r\n private _ngControlElement?: ElementRef;\r\n\r\n private _isRequired = false;\r\n private _locale?: Locale;\r\n private _errorText?: string;\r\n\r\n constructor(\r\n private _renderer: Renderer2,\r\n private _destroyRef: DestroyRef,\r\n @Optional() private _form: NgForm,\r\n private _ls: LocalizationService,\r\n ) {\r\n this._locale = this._ls.get();\r\n this._ls.change.pipe(takeUntilDestroyed()).subscribe(e => this._locale = e.new);\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this._isRequired = this._isRequiredField();\r\n\r\n if (this._ngControl) {\r\n this._ngControl?.statusChanges?.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(change => {\r\n this._validate();\r\n });\r\n }\r\n }\r\n\r\n private _validate() {\r\n if (!this._ngControl || !this.dirty || !this.touched) {\r\n return;\r\n }\r\n\r\n const invalid = this._ngControl.status === 'INVALID';\r\n if (invalid) {\r\n this._errorText = this._locale?.translateFirstError(this._ngControl.errors, 'Invalid').text;\r\n } else {\r\n this._errorText = undefined;\r\n }\r\n this._renderer.addClass(this._ngControlElement!.nativeElement, invalid ? 'is-invalid' : 'is-valid');\r\n this._renderer.removeClass(this._ngControlElement!.nativeElement, invalid ? 'is-valid' : 'is-invalid');\r\n }\r\n\r\n private _isRequiredField(): boolean {\r\n const validator = this._ngControl?.validator;\r\n const errors = validator && validator(new FormControl(null));\r\n return errors != null && errors['required'] === true;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n}\r\n","@if(label()) {\r\n<label class=\"form-field-label\">\r\n {{label()}}\r\n <span *ngIf=\"isRequired && showRequiredIndicator()\" class=\"isc-form-field-required-marker\">*</span>\r\n</label>\r\n}\r\n\r\n@if(inputGroup()) {\r\n<div class=\"input-group\">\r\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n</div>\r\n}@else {\r\n<ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\r\n}\r\n\r\n<ng-template #contentTemplate>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n\r\n@if(showSubscripts()) {\r\n<div class=\"form-field-subscript-wrapper\">\r\n @if(showErrors() && errorText && (touched || dirty)) {\r\n <span class=\"form-field-error text-danger\">\r\n {{errorText}}\r\n </span>\r\n }@if(hint()) {\r\n <span class=\"form-field-hint\">\r\n {{hint()}}\r\n </span>\r\n }\r\n</div>\r\n}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormFieldComponent } from './form-field.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormFieldComponent,\r\n ],\r\n exports: [\r\n FormFieldComponent,\r\n ]\r\n})\r\nexport class FormFieldModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as i1 from '@angular/common/http';
2
2
  import { HttpParams } from '@angular/common/http';
3
- import { Subject, of, tap, map } from 'rxjs';
3
+ import { Subject, map, tap, of } from 'rxjs';
4
4
  import * as i0 from '@angular/core';
5
5
  import { InjectionToken, makeStateKey, PLATFORM_ID, Inject, Optional, Injectable } from '@angular/core';
6
6
  import { isPlatformServer } from '@angular/common';
@@ -53,30 +53,6 @@ class HttpService {
53
53
  obs = this._handleTransferState(obs, options);
54
54
  return obs;
55
55
  }
56
- _handleTransferState(obs, options) {
57
- if (!options?.transferState) {
58
- return obs;
59
- }
60
- if (!options.id) {
61
- throw Error('To use transferState, set request id');
62
- }
63
- let key = makeStateKey(options.id);
64
- // Check if data exists in TransferState (to avoid refetching)
65
- if (this.transferState.hasKey(key)) {
66
- const data = this.transferState.get(key, null);
67
- if (options.transferState.clearAfterUse || true) {
68
- this.transferState.remove(key); // Free memory
69
- }
70
- return of(data);
71
- }
72
- else {
73
- return obs.pipe(tap((d) => {
74
- if (isPlatformServer(this.platformId)) {
75
- this.transferState.set(key, d);
76
- }
77
- }));
78
- }
79
- }
80
56
  getResult(url, request, options) {
81
57
  this._eventsSubject.next(new HttpRequestSendEvent(url, options));
82
58
  const URL = this.makeUrl(url, options);
@@ -144,8 +120,6 @@ class HttpService {
144
120
  // if (options.responseType) {
145
121
  ngOptions.responseType = options.responseType;
146
122
  // }
147
- if (!options.sendAuthToken) {
148
- }
149
123
  ngOptions.headers = this.defaultHeaders;
150
124
  ngOptions.reportProgress = options.reportProgress;
151
125
  ngOptions.observe = options.observe;
@@ -205,6 +179,30 @@ class HttpService {
205
179
  }
206
180
  return result;
207
181
  }
182
+ _handleTransferState(obs, options) {
183
+ if (!options?.transferState) {
184
+ return obs;
185
+ }
186
+ if (!options.id) {
187
+ throw Error('To use transferState, set request id');
188
+ }
189
+ let key = makeStateKey(options.id);
190
+ // Check if data exists in TransferState (to avoid refetching)
191
+ if (this.transferState.hasKey(key)) {
192
+ const data = this.transferState.get(key, null);
193
+ if (options.transferState.clearAfterUse || true) {
194
+ this.transferState.remove(key); // Free memory
195
+ }
196
+ return of(data);
197
+ }
198
+ else {
199
+ return obs.pipe(tap((d) => {
200
+ if (isPlatformServer(this.platformId)) {
201
+ this.transferState.set(key, d);
202
+ }
203
+ }));
204
+ }
205
+ }
208
206
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: HttpService, deps: [{ token: i1.HttpClient }, { token: i0.TransferState }, { token: PLATFORM_ID }, { token: HttpServiceBaseUrl, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
209
207
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: HttpService, providedIn: 'root' });
210
208
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bootkit-ng0-http.mjs","sources":["../../../projects/ng0/http/types.ts","../../../projects/ng0/http/http.service.ts","../../../projects/ng0/http/bootkit-ng0-http.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const HttpServiceBaseUrl = new InjectionToken('HttpServiceBaseUrl');\r\n\r\nexport interface HttpOptions {\r\n /** Http request ID */\r\n id?: string;\r\n query?: any;\r\n pathType?: 'relative' | 'absolute';\r\n responseType?: 'json' | 'blob' | 'text';\r\n contentType?: 'json' | 'multipart/form-data';\r\n reportProgress?: boolean;\r\n observe?: 'response' | 'body' | 'events';\r\n displayServerErrors?: boolean;\r\n sendAuthToken?: boolean;\r\n\r\n /** Save response in transfer state */\r\n transferState?: {\r\n enable: boolean,\r\n clearAfterUse?: boolean; \r\n };\r\n}\r\n\r\nexport abstract class HttpEvent {\r\n constructor(public readonly url: string, public readonly options?: HttpOptions) {\r\n }\r\n}\r\n\r\nexport class HttpRequestSendEvent extends HttpEvent {\r\n constructor(url: string, options?: HttpOptions) {\r\n super(url, options);\r\n }\r\n}\r\n\r\nexport class HttpResponseEvent extends HttpEvent {\r\n constructor(url: string, options?: HttpOptions) {\r\n super(url, options);\r\n }\r\n}\r\n\r\nexport class HttpErrorEvent extends HttpEvent {\r\n constructor(url: string, options?: HttpOptions) {\r\n super(url, options);\r\n }\r\n}\r\n","import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\r\nimport { map, Observable, of, Subject, tap } from 'rxjs';\r\nimport { HttpErrorEvent, HttpEvent, HttpOptions, HttpRequestSendEvent, HttpResponseEvent, HttpServiceBaseUrl } from './types';\r\nimport { Inject, Injectable, makeStateKey, Optional, PLATFORM_ID, TransferState } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\nimport { DataRequest, DataResult } from '@bootkit/ng0/data';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpService {\r\n private _eventsSubject = new Subject<HttpEvent>();\r\n private _baseUrl?: string;\r\n\r\n public events = this._eventsSubject.asObservable();\r\n public defaultHeaders?: HttpHeaders;\r\n\r\n constructor(\r\n private _http: HttpClient,\r\n private transferState: TransferState,\r\n @Inject(PLATFORM_ID) private platformId: object,\r\n @Optional() @Inject(HttpServiceBaseUrl) baseUrl?: string\r\n ) {\r\n this._baseUrl = typeof baseUrl == 'string' ? baseUrl : '';\r\n }\r\n\r\n public get<T>(url: string, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n let obs = this.tap<T>(this._http.get<T>(URL, OPTIONS), url, options);\r\n obs = this._handleTransferState(obs, options);\r\n return obs;\r\n }\r\n\r\n private _handleTransferState<T>(obs: Observable<T>, options: HttpOptions | undefined): Observable<T> {\r\n if (!options?.transferState) {\r\n return obs;\r\n }\r\n\r\n if (!options.id) {\r\n throw Error('To use transferState, set request id')\r\n }\r\n\r\n let key = makeStateKey<T>(options.id!);\r\n\r\n // Check if data exists in TransferState (to avoid refetching)\r\n if (this.transferState.hasKey(key)) {\r\n const data = this.transferState.get<T>(key, null!);\r\n\r\n if(options.transferState.clearAfterUse || true) { \r\n this.transferState.remove(key); // Free memory\r\n }\r\n \r\n return of<T>(data);\r\n } else {\r\n return obs.pipe(\r\n tap((d) => {\r\n if (isPlatformServer(this.platformId)) {\r\n this.transferState.set(key, d);\r\n }\r\n })\r\n )\r\n }\r\n }\r\n\r\n public getResult<T>(url: string, request: DataRequest, options?: HttpOptions): Observable<DataResult<T>> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n options = options || {};\r\n options.query = { ...options.query, ...this.mapDataRequesToQueryObject(request) };\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n var o = this._http.get<{ data: any[], total: number }>(URL, OPTIONS)\r\n .pipe(\r\n map((x: any) => new DataResult(request, x.data, x.total))\r\n );\r\n\r\n return this.tap(o, url, options);\r\n }\r\n\r\n public post<T>(url: string, body: any, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const BODY = this.makeBody(body, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n return this.tap<T>(this._http.post(URL, BODY, OPTIONS), url, options);\r\n }\r\n\r\n public put<T>(url: string, body: any, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const BODY = this.makeBody(body, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n return this.tap<T>(this._http.put(URL, BODY, OPTIONS), url, options);\r\n }\r\n\r\n public delete<T>(url: string, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n return this.tap<T>(this._http.delete(URL, OPTIONS), url, options);\r\n }\r\n\r\n private tap<T>(o: Observable<any>, url: string, options?: HttpOptions): Observable<T> {\r\n return o.pipe(\r\n tap({\r\n next: r => {\r\n this._eventsSubject.next(new HttpResponseEvent(url, options));\r\n },\r\n error: e => {\r\n this._eventsSubject.next(new HttpErrorEvent(url, options))\r\n }\r\n })\r\n )\r\n }\r\n\r\n private makeUrl(url: string, options?: HttpOptions) {\r\n return (options?.pathType === 'absolute') ? url : (this._baseUrl + url);\r\n }\r\n\r\n private makeHttpClientOptions(options?: HttpOptions) {\r\n if (!options) {\r\n return undefined;\r\n }\r\n\r\n const ngOptions: any = {};\r\n\r\n // Query String\r\n const query = options.query;\r\n if (typeof query === 'object') {\r\n let params = new HttpParams();\r\n for (const key in query) {\r\n if (query.hasOwnProperty(key)) {\r\n const value = query[key];\r\n const type = typeof value;\r\n if (type === 'string' || type === 'number' || type === 'boolean') {\r\n params = params.set(key, value);\r\n }\r\n }\r\n }\r\n ngOptions.params = params;\r\n }\r\n\r\n // Response Type\r\n // if (options.responseType) {\r\n ngOptions.responseType = options.responseType;\r\n // }\r\n\r\n if (!options.sendAuthToken) {\r\n }\r\n\r\n ngOptions.headers = this.defaultHeaders;\r\n ngOptions.reportProgress = options.reportProgress;\r\n ngOptions.observe = options.observe;\r\n\r\n return ngOptions;\r\n }\r\n\r\n private makeBody(body: any, options?: HttpOptions) {\r\n body = this.processBodyFields(body);\r\n if (!options || !options.contentType || options.contentType !== 'multipart/form-data') {\r\n return body;\r\n }\r\n\r\n // contentType is multipart/form-data\r\n const formData = new FormData();\r\n for (const key in body) {\r\n if (body.hasOwnProperty(key)) {\r\n const field = body[key];\r\n let value;\r\n\r\n if (typeof field === 'string' || field instanceof File) {\r\n value = field;\r\n } else if (typeof field === 'number') {\r\n value = field.toString();\r\n } else if (typeof field === 'object') {\r\n value = JSON.stringify(field);\r\n }\r\n\r\n if (value) {\r\n formData.append(key, value);\r\n }\r\n }\r\n }\r\n return formData;\r\n }\r\n\r\n private processBodyFields(body: any) {\r\n return body;\r\n }\r\n\r\n private mapDataRequesToQueryObject(request: DataRequest) {\r\n var result: { [key: string]: any } = {};\r\n\r\n if (!request) {\r\n return result;\r\n }\r\n\r\n if (Number.isInteger(request.pageIndex) && Number.isInteger(request.pageSize)) {\r\n result['page.size'] = request.pageSize;\r\n result['page.index'] = request.pageIndex;\r\n }\r\n\r\n if (request.sort) {\r\n result['sort[field]'] = request.sort.field;\r\n result['sort[asc]'] = request.sort.asc;\r\n }\r\n\r\n for (let i = 0; i < request.filters.length; i++) {\r\n const filter = request.filters[i];\r\n result[`filters[${i}].field`] = filter.field;\r\n result[`filters[${i}].operator`] = filter.operator;\r\n result[`filters[${i}].value`] = filter.value;\r\n }\r\n\r\n if (typeof request.computeTotal == 'boolean') {\r\n result['ct'] = request.computeTotal;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootkit-ng0-http.mjs","sources":["../../../projects/ng0/http/types.ts","../../../projects/ng0/http/http.service.ts","../../../projects/ng0/http/bootkit-ng0-http.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const HttpServiceBaseUrl = new InjectionToken('HttpServiceBaseUrl');\r\n\r\nexport interface HttpOptions {\r\n /** Http request ID */\r\n id?: string;\r\n query?: any;\r\n pathType?: 'relative' | 'absolute';\r\n responseType?: 'json' | 'blob' | 'text';\r\n contentType?: 'json' | 'multipart/form-data';\r\n reportProgress?: boolean;\r\n observe?: 'response' | 'body' | 'events';\r\n\r\n /** \r\n * Save response in transfer state \r\n */\r\n transferState?: {\r\n enable: boolean,\r\n clearAfterUse?: boolean; \r\n };\r\n}\r\n\r\nexport abstract class HttpEvent {\r\n constructor(public readonly url: string, public readonly options?: HttpOptions) {\r\n }\r\n}\r\n\r\nexport class HttpRequestSendEvent extends HttpEvent {\r\n constructor(url: string, options?: HttpOptions) {\r\n super(url, options);\r\n }\r\n}\r\n\r\nexport class HttpResponseEvent extends HttpEvent {\r\n constructor(url: string, options?: HttpOptions) {\r\n super(url, options);\r\n }\r\n}\r\n\r\nexport class HttpErrorEvent extends HttpEvent {\r\n constructor(url: string, options?: HttpOptions) {\r\n super(url, options);\r\n }\r\n}\r\n","import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\r\nimport { map, Observable, of, Subject, tap } from 'rxjs';\r\nimport { HttpErrorEvent, HttpEvent, HttpOptions, HttpRequestSendEvent, HttpResponseEvent, HttpServiceBaseUrl } from './types';\r\nimport { Inject, Injectable, makeStateKey, Optional, PLATFORM_ID, TransferState } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\nimport { DataRequest, DataResult } from '@bootkit/ng0/data';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HttpService {\r\n private _eventsSubject = new Subject<HttpEvent>();\r\n private _baseUrl?: string;\r\n\r\n public events = this._eventsSubject.asObservable();\r\n public defaultHeaders?: HttpHeaders;\r\n\r\n constructor(\r\n private _http: HttpClient,\r\n private transferState: TransferState,\r\n @Inject(PLATFORM_ID) private platformId: object,\r\n @Optional() @Inject(HttpServiceBaseUrl) baseUrl?: string\r\n ) {\r\n this._baseUrl = typeof baseUrl == 'string' ? baseUrl : '';\r\n }\r\n\r\n public get<T>(url: string, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n let obs = this.tap<T>(this._http.get<T>(URL, OPTIONS), url, options);\r\n obs = this._handleTransferState(obs, options);\r\n return obs;\r\n }\r\n\r\n public getResult<T>(url: string, request: DataRequest, options?: HttpOptions): Observable<DataResult<T>> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n options = options || {};\r\n options.query = { ...options.query, ...this.mapDataRequesToQueryObject(request) };\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n var o = this._http.get<{ data: any[], total: number }>(URL, OPTIONS)\r\n .pipe(\r\n map((x: any) => new DataResult(request, x.data, x.total))\r\n );\r\n\r\n return this.tap(o, url, options);\r\n }\r\n\r\n public post<T>(url: string, body: any, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const BODY = this.makeBody(body, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n return this.tap<T>(this._http.post(URL, BODY, OPTIONS), url, options);\r\n }\r\n\r\n public put<T>(url: string, body: any, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const BODY = this.makeBody(body, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n return this.tap<T>(this._http.put(URL, BODY, OPTIONS), url, options);\r\n }\r\n\r\n public delete<T>(url: string, options?: HttpOptions): Observable<T> {\r\n this._eventsSubject.next(new HttpRequestSendEvent(url, options));\r\n const URL = this.makeUrl(url, options);\r\n const OPTIONS = this.makeHttpClientOptions(options);\r\n return this.tap<T>(this._http.delete(URL, OPTIONS), url, options);\r\n }\r\n\r\n private tap<T>(o: Observable<any>, url: string, options?: HttpOptions): Observable<T> {\r\n return o.pipe(\r\n tap({\r\n next: r => {\r\n this._eventsSubject.next(new HttpResponseEvent(url, options));\r\n },\r\n error: e => {\r\n this._eventsSubject.next(new HttpErrorEvent(url, options))\r\n }\r\n })\r\n )\r\n }\r\n\r\n private makeUrl(url: string, options?: HttpOptions) {\r\n return (options?.pathType === 'absolute') ? url : (this._baseUrl + url);\r\n }\r\n\r\n private makeHttpClientOptions(options?: HttpOptions) {\r\n if (!options) {\r\n return undefined;\r\n }\r\n\r\n const ngOptions: any = {};\r\n\r\n // Query String\r\n const query = options.query;\r\n if (typeof query === 'object') {\r\n let params = new HttpParams();\r\n for (const key in query) {\r\n if (query.hasOwnProperty(key)) {\r\n const value = query[key];\r\n const type = typeof value;\r\n if (type === 'string' || type === 'number' || type === 'boolean') {\r\n params = params.set(key, value);\r\n }\r\n }\r\n }\r\n ngOptions.params = params;\r\n }\r\n\r\n // Response Type\r\n // if (options.responseType) {\r\n ngOptions.responseType = options.responseType;\r\n // }\r\n\r\n ngOptions.headers = this.defaultHeaders;\r\n ngOptions.reportProgress = options.reportProgress;\r\n ngOptions.observe = options.observe;\r\n\r\n return ngOptions;\r\n }\r\n\r\n private makeBody(body: any, options?: HttpOptions) {\r\n body = this.processBodyFields(body);\r\n if (!options || !options.contentType || options.contentType !== 'multipart/form-data') {\r\n return body;\r\n }\r\n\r\n // contentType is multipart/form-data\r\n const formData = new FormData();\r\n for (const key in body) {\r\n if (body.hasOwnProperty(key)) {\r\n const field = body[key];\r\n let value;\r\n\r\n if (typeof field === 'string' || field instanceof File) {\r\n value = field;\r\n } else if (typeof field === 'number') {\r\n value = field.toString();\r\n } else if (typeof field === 'object') {\r\n value = JSON.stringify(field);\r\n }\r\n\r\n if (value) {\r\n formData.append(key, value);\r\n }\r\n }\r\n }\r\n return formData;\r\n }\r\n\r\n private processBodyFields(body: any) {\r\n return body;\r\n }\r\n\r\n private mapDataRequesToQueryObject(request: DataRequest) {\r\n var result: { [key: string]: any } = {};\r\n\r\n if (!request) {\r\n return result;\r\n }\r\n\r\n if (Number.isInteger(request.pageIndex) && Number.isInteger(request.pageSize)) {\r\n result['page.size'] = request.pageSize;\r\n result['page.index'] = request.pageIndex;\r\n }\r\n\r\n if (request.sort) {\r\n result['sort[field]'] = request.sort.field;\r\n result['sort[asc]'] = request.sort.asc;\r\n }\r\n\r\n for (let i = 0; i < request.filters.length; i++) {\r\n const filter = request.filters[i];\r\n result[`filters[${i}].field`] = filter.field;\r\n result[`filters[${i}].operator`] = filter.operator;\r\n result[`filters[${i}].value`] = filter.value;\r\n }\r\n\r\n if (typeof request.computeTotal == 'boolean') {\r\n result['ct'] = request.computeTotal;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private _handleTransferState<T>(obs: Observable<T>, options: HttpOptions | undefined): Observable<T> {\r\n if (!options?.transferState) {\r\n return obs;\r\n }\r\n\r\n if (!options.id) {\r\n throw Error('To use transferState, set request id')\r\n }\r\n\r\n let key = makeStateKey<T>(options.id!);\r\n\r\n // Check if data exists in TransferState (to avoid refetching)\r\n if (this.transferState.hasKey(key)) {\r\n const data = this.transferState.get<T>(key, null!);\r\n\r\n if(options.transferState.clearAfterUse || true) { \r\n this.transferState.remove(key); // Free memory\r\n }\r\n \r\n return of<T>(data);\r\n } else {\r\n return obs.pipe(\r\n tap((d) => {\r\n if (isPlatformServer(this.platformId)) {\r\n this.transferState.set(key, d);\r\n }\r\n })\r\n )\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,301 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, Pipe, NgModule, InjectionToken } from '@angular/core';
3
+ import { Subject } from 'rxjs';
4
+ import { CommonModule } from '@angular/common';
5
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
+
7
+ /** Locale */
8
+ class Locale {
9
+ definition;
10
+ constructor(definition) {
11
+ this.definition = definition;
12
+ }
13
+ /**
14
+ * Returns the name of the locale
15
+ * @returns The name of the locale
16
+ */
17
+ get name() {
18
+ return this.definition.name;
19
+ }
20
+ /**
21
+ * Translates a key in the dictionary
22
+ * @param key The key to look up
23
+ * @returns The translated string or the key itself if not found
24
+ */
25
+ translate(key) {
26
+ return this.definition.dictionary[key] ?? key;
27
+ }
28
+ /**
29
+ * Translates an enum value
30
+ * @param enumName The name of the enum
31
+ * @param enumValue The value of the enum to translate
32
+ * @returns The translated string or the enum value itself if not found
33
+ */
34
+ translateEnum(enumName, enumValue) {
35
+ if (this.definition?.enums && this.definition.enums[enumName])
36
+ return this.definition.enums[enumName][enumValue];
37
+ else
38
+ return enumValue;
39
+ }
40
+ /**
41
+ * Translates a form validation error
42
+ * @param errorKey The key of the error to translate
43
+ * @param error The error object
44
+ */
45
+ translateError(errorKey, error, fallbackMessage = undefined) {
46
+ const errors = this.definition?.form?.validation?.errors;
47
+ if (!errors) {
48
+ return fallbackMessage;
49
+ }
50
+ const translatorFunc = errors[errorKey] ?? errors['*'];
51
+ return typeof translatorFunc === 'function' ? translatorFunc(error) : fallbackMessage;
52
+ }
53
+ /**
54
+ * Translates validation errors
55
+ * @param errors Validation errors object
56
+ * @returns Array of translated validation errors
57
+ */
58
+ translateErrors(errors) {
59
+ const result = [];
60
+ for (const key in errors) {
61
+ if (Object.prototype.hasOwnProperty.call(errors, key)) {
62
+ result.push({
63
+ key: key,
64
+ value: errors[key],
65
+ text: this.translateError(key, errors[key])
66
+ });
67
+ }
68
+ }
69
+ return result;
70
+ }
71
+ /**
72
+ * Translates the first error in the validation errors object
73
+ * @param errors Validation errors object
74
+ * @returns TranslatedValidationError or undefined if no errors
75
+ */
76
+ translateFirstError(errors, fallbackMessage = undefined) {
77
+ const keys = Object.keys(errors);
78
+ if (keys.length === 0) {
79
+ return undefined;
80
+ }
81
+ const key = keys[0];
82
+ const value = errors[key];
83
+ return {
84
+ key,
85
+ value,
86
+ text: this.translateError(key, value, fallbackMessage)
87
+ };
88
+ }
89
+ /**
90
+ * Clones and extends this object and returns a new Locale (without modifying this object).
91
+ */
92
+ extend(values) {
93
+ return new Locale({
94
+ name: this.definition.name,
95
+ rtl: this.definition.rtl,
96
+ dictionary: { ...this.definition.dictionary, ...values?.dictionary },
97
+ enums: { ...this.definition.enums, ...values?.enums },
98
+ form: {
99
+ validation: {
100
+ errors: { ...this.definition?.form?.validation?.errors, ...values?.form?.validation?.errors }
101
+ }
102
+ }
103
+ });
104
+ }
105
+ /**
106
+ *
107
+ * @param date Date string or timestamp
108
+ * @returns Formatted date string based on the locale
109
+ */
110
+ formatDate(date, format) {
111
+ return date ? new Date(date).toLocaleDateString(this.definition.name, { hour: '2-digit', minute: '2-digit' }) : '';
112
+ }
113
+ }
114
+
115
+ class LocalizationService {
116
+ _locales = [];
117
+ _activeLocale;
118
+ _changeSubject = new Subject();
119
+ change = this._changeSubject.asObservable();
120
+ constructor() {
121
+ }
122
+ add(l) {
123
+ if (l instanceof Locale) {
124
+ this._locales.push(l);
125
+ }
126
+ else if (Array.isArray(l)) {
127
+ l.forEach(x => this.add(x));
128
+ }
129
+ else {
130
+ throw Error('Invalid locale');
131
+ }
132
+ if (this._locales.length == 1) {
133
+ this._activeLocale = this._locales[0];
134
+ }
135
+ }
136
+ /** Changes the active locale */
137
+ set(localeName) {
138
+ const locale = this._locales.find(x => x.name === localeName);
139
+ if (locale) {
140
+ this._changeSubject.next({ old: this._activeLocale, new: locale });
141
+ this._activeLocale = locale;
142
+ return;
143
+ }
144
+ throw Error('Locale not found.');
145
+ }
146
+ /** Gets the active locale */
147
+ get() {
148
+ return this._activeLocale;
149
+ }
150
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LocalizationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
151
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LocalizationService, providedIn: 'root' });
152
+ }
153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LocalizationService, decorators: [{
154
+ type: Injectable,
155
+ args: [{
156
+ providedIn: 'root'
157
+ }]
158
+ }], ctorParameters: () => [] });
159
+
160
+ class TranslatePipe {
161
+ _locale;
162
+ _recompute = true;
163
+ _value;
164
+ constructor(localizationService) {
165
+ this._locale = localizationService.get();
166
+ localizationService.change.pipe(takeUntilDestroyed()).subscribe(x => {
167
+ this._locale = x.new;
168
+ this._recompute = true;
169
+ });
170
+ }
171
+ transform(dictionaryKey, ...args) {
172
+ if (this._recompute) {
173
+ this._value = this._locale.translate(dictionaryKey);
174
+ this._recompute = false;
175
+ }
176
+ return this._value;
177
+ }
178
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TranslatePipe, deps: [{ token: LocalizationService }], target: i0.ɵɵFactoryTarget.Pipe });
179
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: TranslatePipe, isStandalone: true, name: "ng0Translate", pure: false });
180
+ }
181
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TranslatePipe, decorators: [{
182
+ type: Pipe,
183
+ args: [{
184
+ name: 'ng0Translate',
185
+ standalone: true,
186
+ pure: false
187
+ }]
188
+ }], ctorParameters: () => [{ type: LocalizationService }] });
189
+
190
+ class EnumPipe {
191
+ _locale;
192
+ _recompute = true;
193
+ _value;
194
+ constructor(localeProvider) {
195
+ this._locale = localeProvider.get();
196
+ localeProvider.change.pipe(takeUntilDestroyed()).subscribe(x => {
197
+ this._locale = x.new;
198
+ this._recompute = true;
199
+ });
200
+ }
201
+ transform(enumValue, ...args) {
202
+ if (this._recompute) {
203
+ var enumName = args[0];
204
+ var nullDictionaryKey = args[1];
205
+ this._value = enumValue ?
206
+ (this._locale.translateEnum(enumName, enumValue) ?? enumValue) :
207
+ (nullDictionaryKey ? this._locale.translate(nullDictionaryKey) : '');
208
+ this._recompute = false;
209
+ }
210
+ return this._value;
211
+ }
212
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: EnumPipe, deps: [{ token: LocalizationService }], target: i0.ɵɵFactoryTarget.Pipe });
213
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: EnumPipe, isStandalone: true, name: "ng0Enum", pure: false });
214
+ }
215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: EnumPipe, decorators: [{
216
+ type: Pipe,
217
+ args: [{
218
+ name: 'ng0Enum',
219
+ standalone: true,
220
+ pure: false
221
+ }]
222
+ }], ctorParameters: () => [{ type: LocalizationService }] });
223
+
224
+ class BooleanPipe {
225
+ localeProvider;
226
+ constructor(localeProvider) {
227
+ this.localeProvider = localeProvider;
228
+ }
229
+ transform(value, falseKey = 'true', trueKey) {
230
+ return this.localeProvider.get().translate(value ? trueKey : falseKey);
231
+ }
232
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BooleanPipe, deps: [{ token: LocalizationService }], target: i0.ɵɵFactoryTarget.Pipe });
233
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: BooleanPipe, isStandalone: true, name: "ng0Bool" });
234
+ }
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: BooleanPipe, decorators: [{
236
+ type: Pipe,
237
+ args: [{
238
+ name: 'ng0Bool',
239
+ standalone: true,
240
+ }]
241
+ }], ctorParameters: () => [{ type: LocalizationService }] });
242
+
243
+ class DatePipe {
244
+ _locale;
245
+ _value;
246
+ constructor(localeProvider) {
247
+ this._locale = localeProvider.get();
248
+ localeProvider.change.pipe(takeUntilDestroyed()).subscribe(x => {
249
+ this._locale = x.new;
250
+ });
251
+ }
252
+ transform(value) {
253
+ return this._locale.formatDate(value, '');
254
+ }
255
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DatePipe, deps: [{ token: LocalizationService }], target: i0.ɵɵFactoryTarget.Pipe });
256
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: DatePipe, isStandalone: true, name: "ng0Date" });
257
+ }
258
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DatePipe, decorators: [{
259
+ type: Pipe,
260
+ args: [{
261
+ name: 'ng0Date',
262
+ standalone: true
263
+ }]
264
+ }], ctorParameters: () => [{ type: LocalizationService }] });
265
+
266
+ const Declarables = [
267
+ TranslatePipe,
268
+ EnumPipe,
269
+ BooleanPipe,
270
+ DatePipe
271
+ ];
272
+ class LocalizationModule {
273
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LocalizationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
274
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: LocalizationModule, imports: [CommonModule, TranslatePipe,
275
+ EnumPipe,
276
+ BooleanPipe,
277
+ DatePipe], exports: [TranslatePipe,
278
+ EnumPipe,
279
+ BooleanPipe,
280
+ DatePipe] });
281
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LocalizationModule, imports: [CommonModule] });
282
+ }
283
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: LocalizationModule, decorators: [{
284
+ type: NgModule,
285
+ args: [{
286
+ imports: [
287
+ CommonModule,
288
+ Declarables
289
+ ],
290
+ exports: Declarables
291
+ }]
292
+ }] });
293
+
294
+ const LOCALE = new InjectionToken('LOCALE');
295
+
296
+ /**
297
+ * Generated bundle index. Do not edit.
298
+ */
299
+
300
+ export { BooleanPipe, DatePipe, EnumPipe, LOCALE, Locale, LocalizationModule, LocalizationService, TranslatePipe };
301
+ //# sourceMappingURL=bootkit-ng0-localization.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootkit-ng0-localization.mjs","sources":["../../../projects/ng0/localization/locale.ts","../../../projects/ng0/localization/localization.service.ts","../../../projects/ng0/localization/translate.pipe.ts","../../../projects/ng0/localization/enum.pipe.ts","../../../projects/ng0/localization/boolean-pipe.ts","../../../projects/ng0/localization/date.pipe.ts","../../../projects/ng0/localization/localization.module.ts","../../../projects/ng0/localization/types.ts","../../../projects/ng0/localization/bootkit-ng0-localization.ts"],"sourcesContent":["import { LocaleDefinitionExtend, LocaleDefinition } from \"./locale-definition\";\r\nimport { TranslatedValidationError } from \"./types\";\r\n\r\n/** Locale */\r\nexport class Locale {\r\n\r\n constructor(public readonly definition: LocaleDefinition) {\r\n }\r\n\r\n /** \r\n * Returns the name of the locale\r\n * @returns The name of the locale\r\n */\r\n get name(): string {\r\n return this.definition.name;\r\n }\r\n\r\n /** \r\n * Translates a key in the dictionary\r\n * @param key The key to look up\r\n * @returns The translated string or the key itself if not found\r\n */\r\n translate(key: string): string {\r\n return this.definition.dictionary[key] ?? key;\r\n }\r\n\r\n /**\r\n * Translates an enum value \r\n * @param enumName The name of the enum \r\n * @param enumValue The value of the enum to translate \r\n * @returns The translated string or the enum value itself if not found \r\n */\r\n translateEnum(enumName: string, enumValue: any): string | undefined {\r\n if (this.definition?.enums && this.definition.enums[enumName])\r\n return this.definition.enums[enumName][enumValue];\r\n else\r\n return enumValue;\r\n }\r\n\r\n /** \r\n * Translates a form validation error\r\n * @param errorKey The key of the error to translate\r\n * @param error The error object\r\n */\r\n translateError(errorKey: string, error: any, fallbackMessage: string | undefined = undefined): string | undefined {\r\n const errors = this.definition?.form?.validation?.errors;\r\n\r\n if (!errors) {\r\n return fallbackMessage;\r\n }\r\n\r\n const translatorFunc = errors[errorKey] ?? errors['*'];\r\n return typeof translatorFunc === 'function' ? translatorFunc(error) : fallbackMessage;\r\n }\r\n\r\n /** \r\n * Translates validation errors \r\n * @param errors Validation errors object\r\n * @returns Array of translated validation errors\r\n */\r\n translateErrors(errors: any): TranslatedValidationError[] {\r\n const result: TranslatedValidationError[] = [];\r\n for (const key in errors) {\r\n if (Object.prototype.hasOwnProperty.call(errors, key)) {\r\n result.push({\r\n key: key,\r\n value: errors[key],\r\n text: this.translateError(key, errors[key])\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /** \r\n * Translates the first error in the validation errors object \r\n * @param errors Validation errors object\r\n * @returns TranslatedValidationError or undefined if no errors\r\n */\r\n translateFirstError(errors: any, fallbackMessage: string | undefined = undefined): TranslatedValidationError | undefined {\r\n const keys = Object.keys(errors);\r\n if (keys.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const key = keys[0];\r\n const value = errors[key];\r\n return {\r\n key,\r\n value,\r\n text: this.translateError(key, value, fallbackMessage)\r\n };\r\n }\r\n\r\n /**\r\n * Clones and extends this object and returns a new Locale (without modifying this object).\r\n */\r\n extend(values?: LocaleDefinitionExtend): Locale {\r\n return new Locale({\r\n name: this.definition.name,\r\n rtl: this.definition.rtl,\r\n dictionary: { ...this.definition.dictionary, ...values?.dictionary },\r\n enums: { ...this.definition.enums, ...values?.enums },\r\n form: {\r\n validation: {\r\n errors: { ...this.definition?.form?.validation?.errors, ...values?.form?.validation?.errors }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * \r\n * @param date Date string or timestamp\r\n * @returns Formatted date string based on the locale \r\n */\r\n formatDate(date: string | number, format: string): string {\r\n return date ? new Date(date).toLocaleDateString(this.definition.name, { hour: '2-digit', minute: '2-digit' }) : '';\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { Locale } from './locale';\r\nimport { LocaleChangeEvent } from './types';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizationService {\r\n private _locales: Locale[] = [];\r\n private _activeLocale?: Locale;\r\n private _changeSubject = new Subject<LocaleChangeEvent>();\r\n readonly change = this._changeSubject.asObservable();\r\n\r\n constructor() {\r\n }\r\n\r\n /** Adds a Locale */\r\n add(locale: Locale): void;\r\n /** Adds an array of Locales to this LocaleProvider */\r\n add(locales: Locale[]): void;\r\n add(l: any): void {\r\n if (l instanceof Locale) {\r\n this._locales.push(l);\r\n } else if (Array.isArray(l)) {\r\n l.forEach(x => this.add(x));\r\n } else {\r\n throw Error('Invalid locale');\r\n }\r\n\r\n if (this._locales.length == 1) {\r\n this._activeLocale = this._locales[0];\r\n }\r\n }\r\n\r\n /** Changes the active locale */\r\n set(localeName: string): void {\r\n const locale = this._locales.find(x => x.name === localeName);\r\n if (locale) {\r\n this._changeSubject.next({ old: this._activeLocale, new: locale });\r\n this._activeLocale = locale;\r\n return;\r\n }\r\n\r\n throw Error('Locale not found.');\r\n }\r\n\r\n /** Gets the active locale */\r\n get(): Locale | undefined {\r\n return this._activeLocale;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\nimport { Locale } from './locale';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Pipe({\r\n name: 'ng0Translate',\r\n standalone: true,\r\n pure: false\r\n})\r\nexport class TranslatePipe implements PipeTransform {\r\n private _locale: Locale;\r\n private _recompute = true;\r\n private _value!: string;\r\n\r\n constructor(localizationService: LocalizationService) {\r\n this._locale = localizationService.get();\r\n\r\n localizationService.change.pipe(takeUntilDestroyed()).subscribe(x => {\r\n this._locale = x.new;\r\n this._recompute = true;\r\n });\r\n }\r\n\r\n transform(dictionaryKey: string, ...args: unknown[]): string {\r\n if (this._recompute) {\r\n this._value = this._locale.translate(dictionaryKey);\r\n this._recompute = false;\r\n }\r\n\r\n return this._value;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\nimport { Locale } from './locale';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Pipe({\r\n name: 'ng0Enum',\r\n standalone: true,\r\n pure: false\r\n})\r\nexport class EnumPipe implements PipeTransform {\r\n private _locale: Locale;\r\n private _recompute = true;\r\n private _value!: string;\r\n\r\n constructor(localeProvider: LocalizationService) {\r\n this._locale = localeProvider.get();\r\n\r\n localeProvider.change.pipe(takeUntilDestroyed()).subscribe(x => {\r\n this._locale = x.new;\r\n this._recompute = true;\r\n });\r\n }\r\n\r\n transform(enumValue?: string | null, ...args: string[]): string {\r\n if (this._recompute) {\r\n var enumName = args[0];\r\n var nullDictionaryKey = args[1];\r\n this._value = enumValue ?\r\n (this._locale.translateEnum(enumName, enumValue) ?? enumValue) :\r\n (nullDictionaryKey ? this._locale.translate(nullDictionaryKey) : '');\r\n\r\n this._recompute = false;\r\n }\r\n\r\n return this._value;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\n\r\n@Pipe({\r\n name: 'ng0Bool',\r\n standalone: true,\r\n})\r\nexport class BooleanPipe implements PipeTransform {\r\n\r\n constructor(private localeProvider: LocalizationService) {\r\n }\r\n\r\n transform(value: any, falseKey = 'true', trueKey: 'false') {\r\n return this.localeProvider.get().translate(value ? trueKey : falseKey);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Locale } from './locale';\r\nimport { LocalizationService } from './localization.service';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\n@Pipe({\r\n name: 'ng0Date',\r\n standalone: true\r\n})\r\nexport class DatePipe implements PipeTransform {\r\n private _locale: Locale;\r\n private _value!: string;\r\n\r\n constructor(localeProvider: LocalizationService) {\r\n this._locale = localeProvider.get();\r\n\r\n localeProvider.change.pipe(takeUntilDestroyed()).subscribe(x => {\r\n this._locale = x.new;\r\n });\r\n }\r\n\r\n transform(value: number | string): string {\r\n return this._locale.formatDate(value, '');\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { TranslatePipe } from './translate.pipe';\r\nimport { EnumPipe } from './enum.pipe';\r\nimport { BooleanPipe } from './boolean-pipe';\r\nimport { DatePipe } from './date.pipe';\r\n\r\nconst Declarables = [\r\n TranslatePipe,\r\n EnumPipe,\r\n BooleanPipe,\r\n DatePipe\r\n];\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n Declarables\r\n ],\r\n exports: Declarables\r\n})\r\nexport class LocalizationModule {\r\n}\r\n\r\n","import { InjectionToken } from '@angular/core';\r\nimport { LocalizationService } from './localization.service';\r\nimport { Locale } from './locale';\r\n\r\nexport const LOCALE = new InjectionToken<Locale | LocalizationService>('LOCALE');\r\n\r\nexport interface TranslatedValidationError {\r\n /** Error key */\r\n key: string;\r\n \r\n /** Error object */\r\n value: any;\r\n \r\n /** localized error text */\r\n text?: string;\r\n }\r\n \r\n export interface LocaleChangeEvent {\r\n old?: Locale;\r\n new: Locale;\r\n }\r\n ","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LocalizationService"],"mappings":"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"}
package/http/index.d.ts CHANGED
@@ -14,9 +14,9 @@ interface HttpOptions {
14
14
  contentType?: 'json' | 'multipart/form-data';
15
15
  reportProgress?: boolean;
16
16
  observe?: 'response' | 'body' | 'events';
17
- displayServerErrors?: boolean;
18
- sendAuthToken?: boolean;
19
- /** Save response in transfer state */
17
+ /**
18
+ * Save response in transfer state
19
+ */
20
20
  transferState?: {
21
21
  enable: boolean;
22
22
  clearAfterUse?: boolean;
@@ -47,7 +47,6 @@ declare class HttpService {
47
47
  defaultHeaders?: HttpHeaders;
48
48
  constructor(_http: HttpClient, transferState: TransferState, platformId: object, baseUrl?: string);
49
49
  get<T>(url: string, options?: HttpOptions): Observable<T>;
50
- private _handleTransferState;
51
50
  getResult<T>(url: string, request: DataRequest, options?: HttpOptions): Observable<DataResult<T>>;
52
51
  post<T>(url: string, body: any, options?: HttpOptions): Observable<T>;
53
52
  put<T>(url: string, body: any, options?: HttpOptions): Observable<T>;
@@ -58,6 +57,7 @@ declare class HttpService {
58
57
  private makeBody;
59
58
  private processBodyFields;
60
59
  private mapDataRequesToQueryObject;
60
+ private _handleTransferState;
61
61
  static ɵfac: i0.ɵɵFactoryDeclaration<HttpService, [null, null, null, { optional: true; }]>;
62
62
  static ɵprov: i0.ɵɵInjectableDeclaration<HttpService>;
63
63
  }
@@ -0,0 +1,178 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, PipeTransform } from '@angular/core';
3
+ import * as rxjs from 'rxjs';
4
+ import * as i1 from '@angular/common';
5
+
6
+ /** Locale dictionary */
7
+ type LocaleDictionary = {
8
+ [key: string]: string;
9
+ };
10
+ type LocaleEnums = {
11
+ [enumName: string]: {
12
+ [enumValue: string]: string;
13
+ };
14
+ };
15
+ /** Locale Error Translator */
16
+ type LocaleValidationErrorTranslator = (error: any) => string;
17
+ /** Locale validation error translator functions */
18
+ type LocaleValidationErrorTranslators = {
19
+ [key: string]: LocaleValidationErrorTranslator;
20
+ };
21
+ /**
22
+ * Locale definition
23
+ */
24
+ interface LocaleDefinition {
25
+ /** Locale name */
26
+ readonly name: string;
27
+ /** Does this locale belongs to a RTL language */
28
+ readonly rtl?: boolean;
29
+ /** Locale dictionary */
30
+ dictionary?: LocaleDictionary;
31
+ enums?: LocaleEnums;
32
+ form?: {
33
+ validation?: {
34
+ /** Form validation error translators. */
35
+ errors?: LocaleValidationErrorTranslators;
36
+ };
37
+ };
38
+ }
39
+ type LocaleDefinitionExtend = {
40
+ dictionary?: LocaleDictionary;
41
+ enums?: LocaleEnums;
42
+ form?: {
43
+ validation?: {
44
+ /** Form validation error translators. */
45
+ errors?: LocaleValidationErrorTranslators;
46
+ };
47
+ };
48
+ };
49
+
50
+ declare class LocalizationService {
51
+ private _locales;
52
+ private _activeLocale?;
53
+ private _changeSubject;
54
+ readonly change: rxjs.Observable<LocaleChangeEvent>;
55
+ constructor();
56
+ /** Adds a Locale */
57
+ add(locale: Locale): void;
58
+ /** Adds an array of Locales to this LocaleProvider */
59
+ add(locales: Locale[]): void;
60
+ /** Changes the active locale */
61
+ set(localeName: string): void;
62
+ /** Gets the active locale */
63
+ get(): Locale | undefined;
64
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationService, never>;
65
+ static ɵprov: i0.ɵɵInjectableDeclaration<LocalizationService>;
66
+ }
67
+
68
+ declare const LOCALE: InjectionToken<LocalizationService | Locale>;
69
+ interface TranslatedValidationError {
70
+ /** Error key */
71
+ key: string;
72
+ /** Error object */
73
+ value: any;
74
+ /** localized error text */
75
+ text?: string;
76
+ }
77
+ interface LocaleChangeEvent {
78
+ old?: Locale;
79
+ new: Locale;
80
+ }
81
+
82
+ /** Locale */
83
+ declare class Locale {
84
+ readonly definition: LocaleDefinition;
85
+ constructor(definition: LocaleDefinition);
86
+ /**
87
+ * Returns the name of the locale
88
+ * @returns The name of the locale
89
+ */
90
+ get name(): string;
91
+ /**
92
+ * Translates a key in the dictionary
93
+ * @param key The key to look up
94
+ * @returns The translated string or the key itself if not found
95
+ */
96
+ translate(key: string): string;
97
+ /**
98
+ * Translates an enum value
99
+ * @param enumName The name of the enum
100
+ * @param enumValue The value of the enum to translate
101
+ * @returns The translated string or the enum value itself if not found
102
+ */
103
+ translateEnum(enumName: string, enumValue: any): string | undefined;
104
+ /**
105
+ * Translates a form validation error
106
+ * @param errorKey The key of the error to translate
107
+ * @param error The error object
108
+ */
109
+ translateError(errorKey: string, error: any, fallbackMessage?: string | undefined): string | undefined;
110
+ /**
111
+ * Translates validation errors
112
+ * @param errors Validation errors object
113
+ * @returns Array of translated validation errors
114
+ */
115
+ translateErrors(errors: any): TranslatedValidationError[];
116
+ /**
117
+ * Translates the first error in the validation errors object
118
+ * @param errors Validation errors object
119
+ * @returns TranslatedValidationError or undefined if no errors
120
+ */
121
+ translateFirstError(errors: any, fallbackMessage?: string | undefined): TranslatedValidationError | undefined;
122
+ /**
123
+ * Clones and extends this object and returns a new Locale (without modifying this object).
124
+ */
125
+ extend(values?: LocaleDefinitionExtend): Locale;
126
+ /**
127
+ *
128
+ * @param date Date string or timestamp
129
+ * @returns Formatted date string based on the locale
130
+ */
131
+ formatDate(date: string | number, format: string): string;
132
+ }
133
+
134
+ declare class TranslatePipe implements PipeTransform {
135
+ private _locale;
136
+ private _recompute;
137
+ private _value;
138
+ constructor(localizationService: LocalizationService);
139
+ transform(dictionaryKey: string, ...args: unknown[]): string;
140
+ static ɵfac: i0.ɵɵFactoryDeclaration<TranslatePipe, never>;
141
+ static ɵpipe: i0.ɵɵPipeDeclaration<TranslatePipe, "ng0Translate", true>;
142
+ }
143
+
144
+ declare class EnumPipe implements PipeTransform {
145
+ private _locale;
146
+ private _recompute;
147
+ private _value;
148
+ constructor(localeProvider: LocalizationService);
149
+ transform(enumValue?: string | null, ...args: string[]): string;
150
+ static ɵfac: i0.ɵɵFactoryDeclaration<EnumPipe, never>;
151
+ static ɵpipe: i0.ɵɵPipeDeclaration<EnumPipe, "ng0Enum", true>;
152
+ }
153
+
154
+ declare class BooleanPipe implements PipeTransform {
155
+ private localeProvider;
156
+ constructor(localeProvider: LocalizationService);
157
+ transform(value: any, falseKey: string, trueKey: 'false'): string;
158
+ static ɵfac: i0.ɵɵFactoryDeclaration<BooleanPipe, never>;
159
+ static ɵpipe: i0.ɵɵPipeDeclaration<BooleanPipe, "ng0Bool", true>;
160
+ }
161
+
162
+ declare class DatePipe implements PipeTransform {
163
+ private _locale;
164
+ private _value;
165
+ constructor(localeProvider: LocalizationService);
166
+ transform(value: number | string): string;
167
+ static ɵfac: i0.ɵɵFactoryDeclaration<DatePipe, never>;
168
+ static ɵpipe: i0.ɵɵPipeDeclaration<DatePipe, "ng0Date", true>;
169
+ }
170
+
171
+ declare class LocalizationModule {
172
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocalizationModule, never>;
173
+ static ɵmod: i0.ɵɵNgModuleDeclaration<LocalizationModule, never, [typeof i1.CommonModule, typeof TranslatePipe, typeof EnumPipe, typeof BooleanPipe, typeof DatePipe], [typeof TranslatePipe, typeof EnumPipe, typeof BooleanPipe, typeof DatePipe]>;
174
+ static ɵinj: i0.ɵɵInjectorDeclaration<LocalizationModule>;
175
+ }
176
+
177
+ export { BooleanPipe, DatePipe, EnumPipe, LOCALE, Locale, LocalizationModule, LocalizationService, TranslatePipe };
178
+ export type { LocaleChangeEvent, TranslatedValidationError };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bootkit/ng0",
3
- "version": "0.0.0-alpha.2",
3
+ "version": "0.0.0-alpha.3",
4
4
  "description": "Angular+Bootstrap Component Library",
5
5
  "homepage": "https://bootkitlib.github.io/",
6
6
  "author": "BootKit",
@@ -47,10 +47,18 @@
47
47
  "types": "./data/index.d.ts",
48
48
  "default": "./fesm2022/bootkit-ng0-data.mjs"
49
49
  },
50
+ "./localization": {
51
+ "types": "./localization/index.d.ts",
52
+ "default": "./fesm2022/bootkit-ng0-localization.mjs"
53
+ },
50
54
  "./security": {
51
55
  "types": "./security/index.d.ts",
52
56
  "default": "./fesm2022/bootkit-ng0-security.mjs"
53
57
  },
58
+ "./components/collapse": {
59
+ "types": "./components/collapse/index.d.ts",
60
+ "default": "./fesm2022/bootkit-ng0-components-collapse.mjs"
61
+ },
54
62
  "./components/accordion": {
55
63
  "types": "./components/accordion/index.d.ts",
56
64
  "default": "./fesm2022/bootkit-ng0-components-accordion.mjs"
@@ -59,9 +67,9 @@
59
67
  "types": "./components/modal/index.d.ts",
60
68
  "default": "./fesm2022/bootkit-ng0-components-modal.mjs"
61
69
  },
62
- "./components/collapse": {
63
- "types": "./components/collapse/index.d.ts",
64
- "default": "./fesm2022/bootkit-ng0-components-collapse.mjs"
70
+ "./components/form-field": {
71
+ "types": "./components/form-field/index.d.ts",
72
+ "default": "./fesm2022/bootkit-ng0-components-form-field.mjs"
65
73
  },
66
74
  "./components/nav": {
67
75
  "types": "./components/nav/index.d.ts",