@rosoftlab/core 0.0.100

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. package/README.md +6 -0
  2. package/esm2020/lib/base-components/base-form-edit.component.mjs +242 -0
  3. package/esm2020/lib/base-components/field-error-display/field-error-display.component.mjs +15 -0
  4. package/esm2020/lib/base-components/generic-table/generic-table.component.mjs +431 -0
  5. package/esm2020/lib/base-components/index.mjs +5 -0
  6. package/esm2020/lib/base-components/page-not-found/page-not-found.component.mjs +15 -0
  7. package/esm2020/lib/base-components/searchable-dropdown/searchable-dropdown.component.mjs +231 -0
  8. package/esm2020/lib/base-components/under-construction/under-construction.component.mjs +12 -0
  9. package/esm2020/lib/constants/symbols.mjs +3 -0
  10. package/esm2020/lib/converters/date/date.converter.mjs +12 -0
  11. package/esm2020/lib/decorators/attribute.decorator.mjs +85 -0
  12. package/esm2020/lib/decorators/base-datastore-config.decorator.mjs +7 -0
  13. package/esm2020/lib/decorators/base-model-config.decorator.mjs +10 -0
  14. package/esm2020/lib/decorators/custom.type.decorator.mjs +11 -0
  15. package/esm2020/lib/decorators/grid-layout.decorator.mjs +23 -0
  16. package/esm2020/lib/directives/translated-content.directive.mjs +96 -0
  17. package/esm2020/lib/directives/translated-element.directive.mjs +20 -0
  18. package/esm2020/lib/index.mjs +29 -0
  19. package/esm2020/lib/interfaces/attribute-decorator-options.interface.mjs +2 -0
  20. package/esm2020/lib/interfaces/datastore-config.interface.mjs +2 -0
  21. package/esm2020/lib/interfaces/model-config.interface.mjs +2 -0
  22. package/esm2020/lib/interfaces/overrides.interface.mjs +2 -0
  23. package/esm2020/lib/interfaces/property-converter.interface.mjs +2 -0
  24. package/esm2020/lib/material.mjs +94 -0
  25. package/esm2020/lib/models/base-meta.model.mjs +7 -0
  26. package/esm2020/lib/models/base-query-data.mjs +13 -0
  27. package/esm2020/lib/models/base.model.mjs +171 -0
  28. package/esm2020/lib/models/error-response.model.mjs +9 -0
  29. package/esm2020/lib/models/grid-layout-format.enum.mjs +15 -0
  30. package/esm2020/lib/models/grid-layout.mjs +18 -0
  31. package/esm2020/lib/models/rule.mjs +6 -0
  32. package/esm2020/lib/module.mjs +55 -0
  33. package/esm2020/lib/pipes/Nl2brPipe.pipe.mjs +21 -0
  34. package/esm2020/lib/pipes/input-error.pipe.mjs +37 -0
  35. package/esm2020/lib/providers.mjs +10 -0
  36. package/esm2020/lib/services/base-datastore.service.mjs +333 -0
  37. package/esm2020/lib/services/base.service.mjs +95 -0
  38. package/esm2020/lib/services/dialog.service.mjs +150 -0
  39. package/esm2020/lib/services/grid-layout.service.mjs +21 -0
  40. package/esm2020/lib/services/index.mjs +5 -0
  41. package/esm2020/lib/validators/pattern-validator.mjs +15 -0
  42. package/esm2020/public-api.mjs +12 -0
  43. package/esm2020/rosoftlab-core.mjs +5 -0
  44. package/fesm2015/rosoftlab-core.mjs +2217 -0
  45. package/fesm2015/rosoftlab-core.mjs.map +1 -0
  46. package/fesm2020/rosoftlab-core.mjs +2210 -0
  47. package/fesm2020/rosoftlab-core.mjs.map +1 -0
  48. package/lib/base-components/base-form-edit.component.d.ts +58 -0
  49. package/lib/base-components/field-error-display/field-error-display.component.d.ts +7 -0
  50. package/lib/base-components/generic-table/generic-table.component.d.ts +93 -0
  51. package/lib/base-components/index.d.ts +4 -0
  52. package/lib/base-components/page-not-found/page-not-found.component.d.ts +8 -0
  53. package/lib/base-components/searchable-dropdown/searchable-dropdown.component.d.ts +62 -0
  54. package/lib/base-components/under-construction/under-construction.component.d.ts +6 -0
  55. package/lib/constants/symbols.d.ts +1 -0
  56. package/lib/converters/date/date.converter.d.ts +5 -0
  57. package/lib/decorators/attribute.decorator.d.ts +2 -0
  58. package/lib/decorators/base-datastore-config.decorator.d.ts +1 -0
  59. package/lib/decorators/base-model-config.decorator.d.ts +1 -0
  60. package/lib/decorators/custom.type.decorator.d.ts +1 -0
  61. package/lib/decorators/grid-layout.decorator.d.ts +2 -0
  62. package/lib/directives/translated-content.directive.d.ts +21 -0
  63. package/lib/directives/translated-element.directive.d.ts +10 -0
  64. package/lib/index.d.ts +27 -0
  65. package/lib/interfaces/attribute-decorator-options.interface.d.ts +8 -0
  66. package/lib/interfaces/datastore-config.interface.d.ts +8 -0
  67. package/lib/interfaces/model-config.interface.d.ts +8 -0
  68. package/lib/interfaces/overrides.interface.d.ts +5 -0
  69. package/lib/interfaces/property-converter.interface.d.ts +4 -0
  70. package/lib/material.d.ts +42 -0
  71. package/lib/models/base-meta.model.d.ts +5 -0
  72. package/lib/models/base-query-data.d.ts +7 -0
  73. package/lib/models/base.model.d.ts +33 -0
  74. package/lib/models/error-response.model.d.ts +17 -0
  75. package/lib/models/grid-layout-format.enum.d.ts +12 -0
  76. package/lib/models/grid-layout.d.ts +13 -0
  77. package/lib/models/rule.d.ts +5 -0
  78. package/lib/module.d.ts +14 -0
  79. package/lib/pipes/Nl2brPipe.pipe.d.ts +7 -0
  80. package/lib/pipes/input-error.pipe.d.ts +10 -0
  81. package/lib/providers.d.ts +2 -0
  82. package/lib/services/base-datastore.service.d.ts +45 -0
  83. package/lib/services/base.service.d.ts +26 -0
  84. package/lib/services/dialog.service.d.ts +21 -0
  85. package/lib/services/grid-layout.service.d.ts +9 -0
  86. package/lib/services/index.d.ts +4 -0
  87. package/lib/validators/pattern-validator.d.ts +4 -0
  88. package/package.json +53 -0
  89. package/public-api.d.ts +7 -0
  90. package/rosoftlab-core.d.ts +5 -0
@@ -0,0 +1,150 @@
1
+ import { HttpErrorResponse } from '@angular/common/http';
2
+ import { Injectable } from '@angular/core';
3
+ import { from } from 'rxjs';
4
+ import Swal from 'sweetalert2';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Async modal dialog service
8
+ * DialogService makes this app easier to test by faking this service.
9
+ * TODO: better modal implementation that doesn't use window.confirm
10
+ */
11
+ export class DialogService {
12
+ /**
13
+ * Ask user to confirm an action. `message` explains the action and choices.
14
+ * Returns observable resolving to `true`=confirm or `false`=cancel
15
+ */
16
+ constructor() { }
17
+ confirm(message, text, confirmButtonText = 'Delete', cancelButtonText = 'Cancel') {
18
+ const confirmation = Swal.fire({
19
+ title: message || 'Are you sure?',
20
+ icon: 'warning',
21
+ text: text || '',
22
+ showCancelButton: true,
23
+ confirmButtonText: confirmButtonText,
24
+ cancelButtonText: cancelButtonText,
25
+ customClass: {
26
+ confirmButton: 'btn btn-red btn-fill btn-wd',
27
+ cancelButton: 'btn btn-grey btn-fill btn-wd',
28
+ },
29
+ buttonsStyling: false,
30
+ reverseButtons: true
31
+ })
32
+ .then((result) => {
33
+ if (result.value) {
34
+ return true;
35
+ }
36
+ else {
37
+ return false;
38
+ }
39
+ }).catch();
40
+ return from(confirmation);
41
+ }
42
+ showSaveMessage(message, title) {
43
+ const confirmation = Swal.fire({
44
+ icon: 'success',
45
+ title: message,
46
+ timer: 2000,
47
+ showConfirmButton: false,
48
+ // customClass: 'overflow-hidden',
49
+ buttonsStyling: false
50
+ }).then(() => {
51
+ return true;
52
+ }, () => {
53
+ return false;
54
+ }).catch();
55
+ return from(confirmation);
56
+ }
57
+ showRegisteredMessage(message, title) {
58
+ const confirmation = Swal.fire({
59
+ icon: 'success',
60
+ title: message,
61
+ showConfirmButton: true,
62
+ customClass: {
63
+ confirmButton: 'btn btn-success',
64
+ },
65
+ buttonsStyling: false
66
+ }).then(() => {
67
+ return true;
68
+ }, () => {
69
+ return false;
70
+ }).catch();
71
+ return from(confirmation);
72
+ }
73
+ // notification(message?: string, type?: NotificationType, fromPosition?: NotificationFrom, align?: NotificationAlign, timer?: number) {
74
+ // if (!type) {
75
+ // type = NotificationType.success;
76
+ // }
77
+ // if (!fromPosition) {
78
+ // fromPosition = NotificationFrom.bottom;
79
+ // }
80
+ // if (!align) {
81
+ // align = NotificationAlign.center;
82
+ // }
83
+ // if (!timer) {
84
+ // timer = 3000;
85
+ // }
86
+ // $.notify({
87
+ // icon: 'notifications',
88
+ // message: message
89
+ // }, {
90
+ // type: type,
91
+ // timer: 3000,
92
+ // placement: {
93
+ // from: from,
94
+ // align: align
95
+ // }
96
+ // });
97
+ // }
98
+ showErrorMessage(e, message) {
99
+ if (!message) {
100
+ message = 'Validation errors';
101
+ }
102
+ if (e instanceof HttpErrorResponse) {
103
+ // Validation errors
104
+ if (e.status === 400) {
105
+ const errors = e.error.errors;
106
+ if (errors) {
107
+ errors.forEach(error => {
108
+ message += error.field + ' ' + error.detail + '\n';
109
+ });
110
+ // message = errors.detail;
111
+ // if (detail.relationships) {
112
+ // detail.relationships.forEach(relation => {
113
+ // console.log(relation);
114
+ // });
115
+ // }
116
+ }
117
+ }
118
+ }
119
+ const confirmation = Swal.fire({
120
+ icon: 'error',
121
+ title: message,
122
+ // timer: 2000,
123
+ showConfirmButton: true,
124
+ customClass: {
125
+ confirmButton: 'btn btn-success',
126
+ },
127
+ buttonsStyling: false
128
+ }).then(() => {
129
+ return true;
130
+ }, () => {
131
+ return false;
132
+ }).catch();
133
+ return from(confirmation);
134
+ }
135
+ getTextTranslation(translationKey) {
136
+ // // const result = await promise;
137
+ // // return result;
138
+ // const result = this.translate.instant(translationKey);
139
+ // if (result === translationKey) {
140
+ return translationKey;
141
+ // }
142
+ // return result;
143
+ }
144
+ }
145
+ DialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
146
+ DialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DialogService });
147
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: DialogService, decorators: [{
148
+ type: Injectable
149
+ }], ctorParameters: function () { return []; } });
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvbGliL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7O0FBRy9COzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sYUFBYTtJQUN4Qjs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQztJQUNqQixPQUFPLENBQUMsT0FBZ0IsRUFBRSxJQUFhLEVBQ3JDLG9CQUE0QixRQUFRLEVBQ3BDLG1CQUEyQixRQUFRO1FBQ25DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDN0IsS0FBSyxFQUFFLE9BQU8sSUFBSSxlQUFlO1lBQ2pDLElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ2hCLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsaUJBQWlCLEVBQUUsaUJBQWlCO1lBQ3BDLGdCQUFnQixFQUFFLGdCQUFnQjtZQUNsQyxXQUFXLEVBQUU7Z0JBQ1gsYUFBYSxFQUFFLDZCQUE2QjtnQkFDNUMsWUFBWSxFQUFFLDhCQUE4QjthQUM3QztZQUNELGNBQWMsRUFBRSxLQUFLO1lBQ3JCLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBQUM7YUFFQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUNwQixJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFD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U0FDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsRUFBRSxHQUFHLEVBQUU7WUFDTixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUNELGtCQUFrQixDQUFDLGNBQXNCO1FBQ3ZDLG1DQUFtQztRQUNuQyxvQkFBb0I7UUFDcEIseURBQXlEO1FBQ3pELG1DQUFtQztRQUNuQyxPQUFPLGNBQWMsQ0FBQztRQUN0QixJQUFJO1FBQ0osaUJBQWlCO0lBQ25CLENBQUM7OzBHQXpJVSxhQUFhOzhHQUFiLGFBQWE7MkZBQWIsYUFBYTtrQkFEekIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xyXG5kZWNsYXJlIHZhciAkOiBhbnk7XHJcblxyXG4vKipcclxuICogQXN5bmMgbW9kYWwgZGlhbG9nIHNlcnZpY2VcclxuICogRGlhbG9nU2VydmljZSBtYWtlcyB0aGlzIGFwcCBlYXNpZXIgdG8gdGVzdCBieSBmYWtpbmcgdGhpcyBzZXJ2aWNlLlxyXG4gKiBUT0RPOiBiZXR0ZXIgbW9kYWwgaW1wbGVtZW50YXRpb24gdGhhdCBkb2Vzbid0IHVzZSB3aW5kb3cuY29uZmlybVxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nU2VydmljZSB7XHJcbiAgLyoqXHJcbiAgICogQXNrIHVzZXIgdG8gY29uZmlybSBhbiBhY3Rpb24uIGBtZXNzYWdlYCBleHBsYWlucyB0aGUgYWN0aW9uIGFuZCBjaG9pY2VzLlxyXG4gICAqIFJldHVybnMgb2JzZXJ2YWJsZSByZXNvbHZpbmcgdG8gYHRydWVgPWNvbmZpcm0gb3IgYGZhbHNlYD1jYW5jZWxcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG4gIGNvbmZpcm0obWVzc2FnZT86IHN0cmluZywgdGV4dD86IHN0cmluZyxcclxuICAgIGNvbmZpcm1CdXR0b25UZXh0OiBzdHJpbmcgPSAnRGVsZXRlJyxcclxuICAgIGNhbmNlbEJ1dHRvblRleHQ6IHN0cmluZyA9ICdDYW5jZWwnKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBjb25maXJtYXRpb24gPSBTd2FsLmZpcmUoe1xyXG4gICAgICB0aXRsZTogbWVzc2FnZSB8fCAnQXJlIHlvdSBzdXJlPycsXHJcbiAgICAgIGljb246ICd3YXJuaW5nJyxcclxuICAgICAgdGV4dDogdGV4dCB8fCAnJyxcclxuICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcclxuICAgICAgY29uZmlybUJ1dHRvblRleHQ6IGNvbmZpcm1CdXR0b25UZXh0LFxyXG4gICAgICBjYW5jZWxCdXR0b25UZXh0OiBjYW5jZWxCdXR0b25UZXh0LFxyXG4gICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgIGNvbmZpcm1CdXR0b246ICdidG4gYnRuLXJlZCBidG4tZmlsbCBidG4td2QnLFxyXG4gICAgICAgIGNhbmNlbEJ1dHRvbjogJ2J0biBidG4tZ3JleSBidG4tZmlsbCBidG4td2QnLFxyXG4gICAgICB9LFxyXG4gICAgICBidXR0b25zU3R5bGluZzogZmFsc2UsXHJcbiAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgICAgLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLmNhdGNoKCk7XHJcbiAgICByZXR1cm4gZnJvbShjb25maXJtYXRpb24pO1xyXG4gIH1cclxuICBzaG93U2F2ZU1lc3NhZ2UobWVzc2FnZT86IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IFN3YWwuZmlyZSh7XHJcbiAgICAgIGljb246ICdzdWNjZXNzJyxcclxuICAgICAgdGl0bGU6IG1lc3NhZ2UsXHJcbiAgICAgIHRpbWVyOiAyMDAwLFxyXG4gICAgICBzaG93Q29uZmlybUJ1dHRvbjogZmFsc2UsXHJcbiAgICAgIC8vIGN1c3RvbUNsYXNzOiAnb3ZlcmZsb3ctaGlkZGVuJyxcclxuICAgICAgYnV0dG9uc1N0eWxpbmc6IGZhbHNlXHJcbiAgICB9KS50aGVuKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9LCAoKSA9PiB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0pLmNhdGNoKCk7XHJcbiAgICByZXR1cm4gZnJvbShjb25maXJtYXRpb24pO1xyXG4gIH1cclxuICBzaG93UmVnaXN0ZXJlZE1lc3NhZ2UobWVzc2FnZT86IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IFN3YWwuZmlyZSh7XHJcbiAgICAgIGljb246ICdzdWNjZXNzJyxcclxuICAgICAgdGl0bGU6IG1lc3NhZ2UsXHJcbiAgICAgIHNob3dDb25maXJtQnV0dG9uOiB0cnVlLFxyXG4gICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgIGNvbmZpcm1CdXR0b246ICdidG4gYnRuLXN1Y2Nlc3MnLFxyXG4gICAgICB9LFxyXG4gICAgICBidXR0b25zU3R5bGluZzogZmFsc2VcclxuICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sICgpID0+IHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSkuY2F0Y2goKTtcclxuICAgIHJldHVybiBmcm9tKGNvbmZpcm1hdGlvbik7XHJcbiAgfVxyXG5cclxuICAvLyBub3RpZmljYXRpb24obWVzc2FnZT86IHN0cmluZywgdHlwZT86IE5vdGlmaWNhdGlvblR5cGUsIGZyb21Qb3NpdGlvbj86IE5vdGlmaWNhdGlvbkZyb20sIGFsaWduPzogTm90aWZpY2F0aW9uQWxpZ24sIHRpbWVyPzogbnVtYmVyKSB7XHJcblxyXG4gIC8vICAgaWYgKCF0eXBlKSB7XHJcbiAgLy8gICAgIHR5cGUgPSBOb3RpZmljYXRpb25UeXBlLnN1Y2Nlc3M7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBpZiAoIWZyb21Qb3NpdGlvbikge1xyXG4gIC8vICAgICBmcm9tUG9zaXRpb24gPSBOb3RpZmljYXRpb25Gcm9tLmJvdHRvbTtcclxuICAvLyAgIH1cclxuICAvLyAgIGlmICghYWxpZ24pIHtcclxuICAvLyAgICAgYWxpZ24gPSBOb3RpZmljYXRpb25BbGlnbi5jZW50ZXI7XHJcbiAgLy8gICB9XHJcbiAgLy8gICBpZiAoIXRpbWVyKSB7XHJcbiAgLy8gICAgIHRpbWVyID0gMzAwMDtcclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICAkLm5vdGlmeSh7XHJcbiAgLy8gICAgIGljb246ICdub3RpZmljYXRpb25zJyxcclxuICAvLyAgICAgbWVzc2FnZTogbWVzc2FnZVxyXG4gIC8vICAgfSwge1xyXG4gIC8vICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgLy8gICAgICAgdGltZXI6IDMwMDAsXHJcbiAgLy8gICAgICAgcGxhY2VtZW50OiB7XHJcbiAgLy8gICAgICAgICBmcm9tOiBmcm9tLFxyXG4gIC8vICAgICAgICAgYWxpZ246IGFsaWduXHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9KTtcclxuICAvLyB9XHJcbiAgc2hvd0Vycm9yTWVzc2FnZShlOiBhbnksIG1lc3NhZ2U/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGlmICghbWVzc2FnZSkge1xyXG4gICAgICBtZXNzYWdlID0gJ1ZhbGlkYXRpb24gZXJyb3JzJztcclxuICAgIH1cclxuICAgIGlmIChlIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgLy8gVmFsaWRhdGlvbiBlcnJvcnNcclxuICAgICAgaWYgKGUuc3RhdHVzID09PSA0MDApIHtcclxuICAgICAgICBjb25zdCBlcnJvcnMgPSBlLmVycm9yLmVycm9ycztcclxuICAgICAgICBpZiAoZXJyb3JzKSB7XHJcbiAgICAgICAgICBlcnJvcnMuZm9yRWFjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gZXJyb3IuZmllbGQgKyAnICcgKyBlcnJvci5kZXRhaWwgKyAnXFxuJztcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gbWVzc2FnZSA9IGVycm9ycy5kZXRhaWw7XHJcbiAgICAgICAgICAvLyBpZiAoZGV0YWlsLnJlbGF0aW9uc2hpcHMpIHtcclxuICAgICAgICAgIC8vICAgZGV0YWlsLnJlbGF0aW9uc2hpcHMuZm9yRWFjaChyZWxhdGlvbiA9PiB7XHJcbiAgICAgICAgICAvLyAgICAgY29uc29sZS5sb2cocmVsYXRpb24pO1xyXG4gICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IFN3YWwuZmlyZSh7XHJcbiAgICAgIGljb246ICdlcnJvcicsXHJcbiAgICAgIHRpdGxlOiBtZXNzYWdlLFxyXG4gICAgICAvLyB0aW1lcjogMjAwMCxcclxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IHRydWUsXHJcbiAgICAgIGN1c3RvbUNsYXNzOiB7XHJcbiAgICAgICAgY29uZmlybUJ1dHRvbjogJ2J0biBidG4tc3VjY2VzcycsXHJcbiAgICAgIH0sXHJcbiAgICAgIGJ1dHRvbnNTdHlsaW5nOiBmYWxzZVxyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9KS5jYXRjaCgpO1xyXG4gICAgcmV0dXJuIGZyb20oY29uZmlybWF0aW9uKTtcclxuICB9XHJcbiAgZ2V0VGV4dFRyYW5zbGF0aW9uKHRyYW5zbGF0aW9uS2V5OiBzdHJpbmcpIHtcclxuICAgIC8vIC8vIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XHJcbiAgICAvLyAvLyByZXR1cm4gcmVzdWx0O1xyXG4gICAgLy8gY29uc3QgcmVzdWx0ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0cmFuc2xhdGlvbktleSk7XHJcbiAgICAvLyBpZiAocmVzdWx0ID09PSB0cmFuc2xhdGlvbktleSkge1xyXG4gICAgcmV0dXJuIHRyYW5zbGF0aW9uS2V5O1xyXG4gICAgLy8gfVxyXG4gICAgLy8gcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbn1cclxuXHJcbiJdfQ==
@@ -0,0 +1,21 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "..";
4
+ export class GridLayoutService {
5
+ constructor(baseService) {
6
+ this.baseService = baseService;
7
+ }
8
+ getGridLayout() {
9
+ var model = this.baseService.newModel();
10
+ return model.getGridLayout();
11
+ }
12
+ }
13
+ GridLayoutService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: GridLayoutService, deps: [{ token: i1.BaseService }], target: i0.ɵɵFactoryTarget.Injectable });
14
+ GridLayoutService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: GridLayoutService, providedIn: 'root' });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: GridLayoutService, decorators: [{
16
+ type: Injectable,
17
+ args: [{
18
+ providedIn: 'root'
19
+ }]
20
+ }], ctorParameters: function () { return [{ type: i1.BaseService }]; } });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1sYXlvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jvc29mdGxhYi9jb3JlL3NyYy9saWIvc2VydmljZXMvZ3JpZC1sYXlvdXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFNM0MsTUFBTSxPQUFPLGlCQUFpQjtJQUU1QixZQUFzQixXQUEyQjtRQUEzQixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7SUFBSSxDQUFDO0lBQy9DLGFBQWE7UUFDbEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxPQUFPLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQixDQUFDOzs4R0FOVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJhc2VNb2RlbCwgQmFzZVNlcnZpY2UsIEdyaWRMYXlvdXRNb2RlbCB9IGZyb20gJy4uJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyaWRMYXlvdXRTZXJ2aWNlPFQgZXh0ZW5kcyBCYXNlTW9kZWw+IHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZTxUPikgeyB9XHJcbiAgcHVibGljIGdldEdyaWRMYXlvdXQoKTogR3JpZExheW91dE1vZGVsW10ge1xyXG4gICAgdmFyIG1vZGVsID0gdGhpcy5iYXNlU2VydmljZS5uZXdNb2RlbCgpO1xyXG4gICAgcmV0dXJuIG1vZGVsLmdldEdyaWRMYXlvdXQoKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,5 @@
1
+ export * from './base-datastore.service';
2
+ export * from './base.service';
3
+ export * from './dialog.service';
4
+ export * from './grid-layout.service';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvbGliL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Jhc2UtZGF0YXN0b3JlLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Jhc2Uuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGlhbG9nLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2dyaWQtbGF5b3V0LnNlcnZpY2UnO1xyXG5cclxuIl19
@@ -0,0 +1,15 @@
1
+ export class CustomValidators {
2
+ static patternValidator(regex, error) {
3
+ return (control) => {
4
+ if (!control.value) {
5
+ // if control is empty return no error
6
+ return null;
7
+ }
8
+ // test the value of the control against the regexp supplied
9
+ const valid = regex.test(control.value);
10
+ // if true, return no error (no error), else return error passed in the second parameter
11
+ return valid ? null : error;
12
+ };
13
+ }
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0dGVybi12YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvbGliL3ZhbGlkYXRvcnMvcGF0dGVybi12YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBYSxFQUFFLEtBQXVCO1FBQzVELE9BQU8sQ0FBQyxPQUF3QixFQUEwQixFQUFFO1lBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO2dCQUNsQixzQ0FBc0M7Z0JBQ3RDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCw0REFBNEQ7WUFDNUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFeEMsd0ZBQXdGO1lBQ3hGLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM5QixDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgY2xhc3MgQ3VzdG9tVmFsaWRhdG9ycyB7XG4gIHN0YXRpYyBwYXR0ZXJuVmFsaWRhdG9yKHJlZ2V4OiBSZWdFeHAsIGVycm9yOiBWYWxpZGF0aW9uRXJyb3JzKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgLy8gaWYgY29udHJvbCBpcyBlbXB0eSByZXR1cm4gbm8gZXJyb3JcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIHRlc3QgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGFnYWluc3QgdGhlIHJlZ2V4cCBzdXBwbGllZFxuICAgICAgY29uc3QgdmFsaWQgPSByZWdleC50ZXN0KGNvbnRyb2wudmFsdWUpO1xuXG4gICAgICAvLyBpZiB0cnVlLCByZXR1cm4gbm8gZXJyb3IgKG5vIGVycm9yKSwgZWxzZSByZXR1cm4gZXJyb3IgcGFzc2VkIGluIHRoZSBzZWNvbmQgcGFyYW1ldGVyXG4gICAgICByZXR1cm4gdmFsaWQgPyBudWxsIDogZXJyb3I7XG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,12 @@
1
+ /*
2
+ * Public API Surface of core
3
+ */
4
+ export * from './lib/base-components';
5
+ export * from './lib/base-components/base-form-edit.component';
6
+ export * from './lib/base-components/generic-table/generic-table.component';
7
+ export * from './lib/index';
8
+ export * from './lib/material';
9
+ export * from './lib/module';
10
+ export * from './lib/providers';
11
+ // export * from './lib/services/base-datastore.service';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Jvc29mdGxhYi9jb3JlL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsNkRBQTZELENBQUM7QUFDNUUsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLHlEQUF5RCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBjb3JlXHJcbiAqL1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYmFzZS1jb21wb25lbnRzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvYmFzZS1jb21wb25lbnRzL2Jhc2UtZm9ybS1lZGl0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Jhc2UtY29tcG9uZW50cy9nZW5lcmljLXRhYmxlL2dlbmVyaWMtdGFibGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYXRlcmlhbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Byb3ZpZGVycyc7XHJcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2Jhc2UtZGF0YXN0b3JlLnNlcnZpY2UnO1xyXG5cclxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9zb2Z0bGFiLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yb3NvZnRsYWIvY29yZS9zcmMvcm9zb2Z0bGFiLWNvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==