@mediusinc/mng-commons 0.0.1-rc.2

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.
Files changed (187) hide show
  1. package/README.md +19 -0
  2. package/esm2020/lib/api/models/builders/query-param.builder.mjs +49 -0
  3. package/esm2020/lib/api/models/filter-match-type.model.mjs +24 -0
  4. package/esm2020/lib/api/models/filter-param.model.mjs +46 -0
  5. package/esm2020/lib/api/models/index.mjs +9 -0
  6. package/esm2020/lib/api/models/mappers.mjs +17 -0
  7. package/esm2020/lib/api/models/query-mode.model.mjs +19 -0
  8. package/esm2020/lib/api/models/query-param.model.mjs +69 -0
  9. package/esm2020/lib/api/models/query-result.model.mjs +45 -0
  10. package/esm2020/lib/api/models/serialization.model.mjs +2 -0
  11. package/esm2020/lib/api/services/abstract-crud-api.service.mjs +72 -0
  12. package/esm2020/lib/api/services/index.mjs +2 -0
  13. package/esm2020/lib/api/utils/index.mjs +3 -0
  14. package/esm2020/lib/api/utils/medius-rest.util.mjs +70 -0
  15. package/esm2020/lib/api/utils/object-serializer.util.mjs +226 -0
  16. package/esm2020/lib/components/action/action.component.mjs +63 -0
  17. package/esm2020/lib/components/action/dialog/action-dialog.component.mjs +148 -0
  18. package/esm2020/lib/components/action/index.mjs +4 -0
  19. package/esm2020/lib/components/action/route/action-route.component.mjs +144 -0
  20. package/esm2020/lib/components/form/editor/form-editor.component.mjs +140 -0
  21. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +58 -0
  22. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +51 -0
  23. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +16 -0
  24. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +26 -0
  25. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +94 -0
  26. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +124 -0
  27. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +17 -0
  28. package/esm2020/lib/components/form/formly/fields/index.mjs +8 -0
  29. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +17 -0
  30. package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +16 -0
  31. package/esm2020/lib/components/form/formly/wrappers/index.mjs +3 -0
  32. package/esm2020/lib/components/form/index.mjs +2 -0
  33. package/esm2020/lib/components/layout/app.breadcrumb.component.mjs +27 -0
  34. package/esm2020/lib/components/layout/app.footer.component.mjs +35 -0
  35. package/esm2020/lib/components/layout/app.main.component.mjs +25 -0
  36. package/esm2020/lib/components/layout/app.main.component.service.mjs +133 -0
  37. package/esm2020/lib/components/layout/app.menu.component.mjs +38 -0
  38. package/esm2020/lib/components/layout/app.menuitem.component.mjs +243 -0
  39. package/esm2020/lib/components/layout/app.topbar.component.mjs +135 -0
  40. package/esm2020/lib/components/layout/index.mjs +7 -0
  41. package/esm2020/lib/components/tableview/index.mjs +4 -0
  42. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +31 -0
  43. package/esm2020/lib/components/tableview/table/table.component.mjs +173 -0
  44. package/esm2020/lib/components/tableview/tableview.component.mjs +82 -0
  45. package/esm2020/lib/components/tableview/tableview.component.service.mjs +18 -0
  46. package/esm2020/lib/config/formly.config.mjs +165 -0
  47. package/esm2020/lib/config/index.mjs +2 -0
  48. package/esm2020/lib/directives/index.mjs +2 -0
  49. package/esm2020/lib/directives/template.directive.mjs +25 -0
  50. package/esm2020/lib/mng-commons.module.mjs +338 -0
  51. package/esm2020/lib/models/action/action.model.mjs +58 -0
  52. package/esm2020/lib/models/action/index.mjs +2 -0
  53. package/esm2020/lib/models/config/index.mjs +2 -0
  54. package/esm2020/lib/models/config/mng-config.model.mjs +3 -0
  55. package/esm2020/lib/models/descriptors/action-descriptor.model.mjs +283 -0
  56. package/esm2020/lib/models/descriptors/editor-descriptor.model.mjs +647 -0
  57. package/esm2020/lib/models/descriptors/index.mjs +6 -0
  58. package/esm2020/lib/models/descriptors/model-descriptor.model.mjs +34 -0
  59. package/esm2020/lib/models/descriptors/table-descriptor.model.mjs +123 -0
  60. package/esm2020/lib/models/descriptors/tableview-descriptor.model.mjs +124 -0
  61. package/esm2020/lib/models/events/editor-event.model.mjs +14 -0
  62. package/esm2020/lib/models/events/index.mjs +3 -0
  63. package/esm2020/lib/models/events/table-event.model.mjs +16 -0
  64. package/esm2020/lib/models/interfaces/confirmation-service.model.mjs +2 -0
  65. package/esm2020/lib/models/interfaces/index.mjs +2 -0
  66. package/esm2020/lib/models/providers/data-provider.model.mjs +86 -0
  67. package/esm2020/lib/models/providers/index.mjs +2 -0
  68. package/esm2020/lib/models/types/index.mjs +3 -0
  69. package/esm2020/lib/models/types/type.decorator.mjs +8 -0
  70. package/esm2020/lib/models/types/type.model.mjs +2 -0
  71. package/esm2020/lib/models/validators/field.validator.mjs +21 -0
  72. package/esm2020/lib/models/validators/index.mjs +2 -0
  73. package/esm2020/lib/pipes/index.mjs +2 -0
  74. package/esm2020/lib/pipes/property-path.pipe.mjs +36 -0
  75. package/esm2020/lib/services/action.service.mjs +239 -0
  76. package/esm2020/lib/services/breadcrumb.service.mjs +21 -0
  77. package/esm2020/lib/services/configuration.service.mjs +77 -0
  78. package/esm2020/lib/services/index.mjs +7 -0
  79. package/esm2020/lib/services/menu.service.mjs +26 -0
  80. package/esm2020/lib/services/navigation.service.mjs +49 -0
  81. package/esm2020/lib/services/providers/config-service.provider.mjs +12 -0
  82. package/esm2020/lib/services/providers/formly-config.provider.mjs +31 -0
  83. package/esm2020/lib/services/providers/index.mjs +3 -0
  84. package/esm2020/lib/services/settings.service.mjs +40 -0
  85. package/esm2020/lib/utils/editor-formly.util.mjs +165 -0
  86. package/esm2020/lib/utils/i18n.util.mjs +75 -0
  87. package/esm2020/lib/utils/index.mjs +5 -0
  88. package/esm2020/lib/utils/model.util.mjs +38 -0
  89. package/esm2020/lib/utils/type.util.mjs +43 -0
  90. package/esm2020/mediusinc-mng-commons.mjs +5 -0
  91. package/esm2020/public-api.mjs +33 -0
  92. package/fesm2015/mediusinc-mng-commons.mjs +5056 -0
  93. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -0
  94. package/fesm2020/mediusinc-mng-commons.mjs +5012 -0
  95. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -0
  96. package/lib/api/models/builders/query-param.builder.d.ts +11 -0
  97. package/lib/api/models/filter-match-type.model.d.ts +21 -0
  98. package/lib/api/models/filter-param.model.d.ts +23 -0
  99. package/lib/api/models/index.d.ts +8 -0
  100. package/lib/api/models/mappers.d.ts +6 -0
  101. package/lib/api/models/query-mode.model.d.ts +16 -0
  102. package/lib/api/models/query-param.model.d.ts +31 -0
  103. package/lib/api/models/query-result.model.d.ts +36 -0
  104. package/lib/api/models/serialization.model.d.ts +8 -0
  105. package/lib/api/services/abstract-crud-api.service.d.ts +23 -0
  106. package/lib/api/services/index.d.ts +1 -0
  107. package/lib/api/utils/index.d.ts +2 -0
  108. package/lib/api/utils/medius-rest.util.d.ts +6 -0
  109. package/lib/api/utils/object-serializer.util.d.ts +30 -0
  110. package/lib/components/action/action.component.d.ts +36 -0
  111. package/lib/components/action/dialog/action-dialog.component.d.ts +48 -0
  112. package/lib/components/action/index.d.ts +3 -0
  113. package/lib/components/action/route/action-route.component.d.ts +32 -0
  114. package/lib/components/form/editor/form-editor.component.d.ts +37 -0
  115. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +21 -0
  116. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +19 -0
  117. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +6 -0
  118. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +12 -0
  119. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +17 -0
  120. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +36 -0
  121. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +6 -0
  122. package/lib/components/form/formly/fields/index.d.ts +7 -0
  123. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +8 -0
  124. package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +8 -0
  125. package/lib/components/form/formly/wrappers/index.d.ts +2 -0
  126. package/lib/components/form/index.d.ts +1 -0
  127. package/lib/components/layout/app.breadcrumb.component.d.ts +16 -0
  128. package/lib/components/layout/app.footer.component.d.ts +8 -0
  129. package/lib/components/layout/app.main.component.d.ts +12 -0
  130. package/lib/components/layout/app.main.component.service.d.ts +40 -0
  131. package/lib/components/layout/app.menu.component.d.ts +14 -0
  132. package/lib/components/layout/app.menuitem.component.d.ts +31 -0
  133. package/lib/components/layout/app.topbar.component.d.ts +16 -0
  134. package/lib/components/layout/index.d.ts +6 -0
  135. package/lib/components/tableview/index.d.ts +3 -0
  136. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +15 -0
  137. package/lib/components/tableview/table/table.component.d.ts +47 -0
  138. package/lib/components/tableview/tableview.component.d.ts +36 -0
  139. package/lib/components/tableview/tableview.component.service.d.ts +11 -0
  140. package/lib/config/formly.config.d.ts +8 -0
  141. package/lib/config/index.d.ts +1 -0
  142. package/lib/directives/index.d.ts +1 -0
  143. package/lib/directives/template.directive.d.ts +11 -0
  144. package/lib/mng-commons.module.d.ts +74 -0
  145. package/lib/models/action/action.model.d.ts +53 -0
  146. package/lib/models/action/index.d.ts +1 -0
  147. package/lib/models/config/index.d.ts +1 -0
  148. package/lib/models/config/mng-config.model.d.ts +19 -0
  149. package/lib/models/descriptors/action-descriptor.model.d.ts +124 -0
  150. package/lib/models/descriptors/editor-descriptor.model.d.ts +248 -0
  151. package/lib/models/descriptors/index.d.ts +5 -0
  152. package/lib/models/descriptors/model-descriptor.model.d.ts +15 -0
  153. package/lib/models/descriptors/table-descriptor.model.d.ts +45 -0
  154. package/lib/models/descriptors/tableview-descriptor.model.d.ts +38 -0
  155. package/lib/models/events/editor-event.model.d.ts +11 -0
  156. package/lib/models/events/index.d.ts +2 -0
  157. package/lib/models/events/table-event.model.d.ts +17 -0
  158. package/lib/models/interfaces/confirmation-service.model.d.ts +6 -0
  159. package/lib/models/interfaces/index.d.ts +1 -0
  160. package/lib/models/providers/data-provider.model.d.ts +62 -0
  161. package/lib/models/providers/index.d.ts +1 -0
  162. package/lib/models/types/index.d.ts +2 -0
  163. package/lib/models/types/type.decorator.d.ts +2 -0
  164. package/lib/models/types/type.model.d.ts +10 -0
  165. package/lib/models/validators/field.validator.d.ts +18 -0
  166. package/lib/models/validators/index.d.ts +1 -0
  167. package/lib/pipes/index.d.ts +1 -0
  168. package/lib/pipes/property-path.pipe.d.ts +7 -0
  169. package/lib/services/action.service.d.ts +92 -0
  170. package/lib/services/breadcrumb.service.d.ts +9 -0
  171. package/lib/services/configuration.service.d.ts +35 -0
  172. package/lib/services/index.d.ts +6 -0
  173. package/lib/services/menu.service.d.ts +11 -0
  174. package/lib/services/navigation.service.d.ts +14 -0
  175. package/lib/services/providers/config-service.provider.d.ts +5 -0
  176. package/lib/services/providers/formly-config.provider.d.ts +4 -0
  177. package/lib/services/providers/index.d.ts +2 -0
  178. package/lib/services/settings.service.d.ts +18 -0
  179. package/lib/utils/editor-formly.util.d.ts +9 -0
  180. package/lib/utils/i18n.util.d.ts +14 -0
  181. package/lib/utils/index.d.ts +4 -0
  182. package/lib/utils/model.util.d.ts +5 -0
  183. package/lib/utils/type.util.d.ts +15 -0
  184. package/mediusinc-mng-commons-0.0.1-rc.2.tgz +0 -0
  185. package/mediusinc-mng-commons.d.ts +5 -0
  186. package/package.json +38 -0
  187. package/public-api.d.ts +22 -0
@@ -0,0 +1,165 @@
1
+ import { FormlyFieldWrapperComponent, FormlyTableWrapperComponent } from '../components/form/formly/wrappers';
2
+ import { FormlyFieldAutocompleteComponent, FormlyFieldDropdownComponent, FormlyFieldFieldsetComponent, FormlyFieldInputComponent, FormlyFieldTableDialogFormComponent, FormlyFieldTableDialogMultiselectComponent, FormlyFieldTabsComponent } from '../components/form/formly/fields';
3
+ export const formlyWrappersConfig = [
4
+ { name: 'field', component: FormlyFieldWrapperComponent },
5
+ { name: 'field-table', component: FormlyTableWrapperComponent }
6
+ ];
7
+ export const formlyTypesConfig = [
8
+ {
9
+ name: 'input',
10
+ component: FormlyFieldInputComponent,
11
+ wrappers: ['field'],
12
+ },
13
+ { name: 'string', extends: 'input' },
14
+ {
15
+ name: 'number',
16
+ extends: 'input',
17
+ defaultOptions: {
18
+ templateOptions: {
19
+ type: 'number',
20
+ },
21
+ },
22
+ },
23
+ {
24
+ name: 'integer',
25
+ extends: 'input',
26
+ defaultOptions: {
27
+ templateOptions: {
28
+ type: 'number',
29
+ },
30
+ },
31
+ },
32
+ {
33
+ name: 'textarea',
34
+ extends: 'input',
35
+ defaultOptions: {
36
+ templateOptions: {
37
+ type: 'textarea',
38
+ },
39
+ },
40
+ },
41
+ {
42
+ name: 'switch',
43
+ component: FormlyFieldInputComponent,
44
+ defaultOptions: {
45
+ templateOptions: {
46
+ type: 'switch',
47
+ },
48
+ },
49
+ },
50
+ {
51
+ name: 'radio',
52
+ extends: 'input',
53
+ defaultOptions: {
54
+ templateOptions: {
55
+ type: 'radio',
56
+ },
57
+ },
58
+ },
59
+ {
60
+ name: 'datepicker',
61
+ extends: 'input',
62
+ defaultOptions: {
63
+ templateOptions: {
64
+ type: 'datepicker',
65
+ },
66
+ },
67
+ },
68
+ {
69
+ name: 'dropdown',
70
+ component: FormlyFieldDropdownComponent,
71
+ wrappers: ['field'],
72
+ },
73
+ { name: 'enum', extends: 'dropdown' },
74
+ {
75
+ name: 'autocomplete',
76
+ component: FormlyFieldAutocompleteComponent,
77
+ wrappers: ['field']
78
+ },
79
+ {
80
+ name: 'table-dialog-multiselect',
81
+ component: FormlyFieldTableDialogMultiselectComponent,
82
+ wrappers: ['field-table']
83
+ },
84
+ {
85
+ name: 'table-dialog-form',
86
+ component: FormlyFieldTableDialogFormComponent,
87
+ wrappers: ['field-table']
88
+ },
89
+ {
90
+ name: 'tabs',
91
+ component: FormlyFieldTabsComponent,
92
+ wrappers: []
93
+ },
94
+ {
95
+ name: 'fieldset',
96
+ component: FormlyFieldFieldsetComponent,
97
+ wrappers: []
98
+ }
99
+ ];
100
+ // function getRequiredValidationMessage(translate: TranslateService): (error: any, field: FormlyFieldConfig) => Observable<string> {
101
+ // return (error: any, field: FormlyFieldConfig) =>
102
+ // translate.get(field.templateOptions.label).pipe(mergeMap(value =>
103
+ // translate.get('formValidation.required', {field: value})
104
+ // ));
105
+ // }
106
+ function getRequiredValidationMessage(translate) {
107
+ return (error, field) => {
108
+ const fieldName = translate.instant(field.templateOptions?.label ?? '');
109
+ return translate.instant('mngEditor.validation.required', { fieldName: fieldName });
110
+ };
111
+ }
112
+ // function getMinValueValidatonMessage(translate: TranslateService): (error: any, field: FormlyFieldConfig) => Observable<string> | undefined {
113
+ // return (error: any, field: FormlyFieldConfig) => {
114
+ // if (field.templateOptions.min !== undefined) {
115
+ // if (field.formControl.value < field.templateOptions.min) {
116
+ // return translate.get(field.templateOptions.label).pipe(mergeMap(value =>
117
+ // translate.get('formValidation.minValue', {field: value, min: field.templateOptions.min})
118
+ // ));
119
+ // }
120
+ // }
121
+ //
122
+ // return undefined;
123
+ // };
124
+ // }
125
+ function getMinValidatonMessage(translate) {
126
+ return (error, field) => {
127
+ const fieldName = translate.instant(field.templateOptions?.label ?? '');
128
+ return translate.instant('mngEditor.validation.min', { fieldName: fieldName, min: fieldName.templateOptions?.min });
129
+ };
130
+ }
131
+ // function getMaxValueValidatonMessage(translate: TranslateService): (error: any, field: FormlyFieldConfig) => Observable<string> | undefined {
132
+ // return (error: any, field: FormlyFieldConfig) => {
133
+ // if (field.templateOptions?.max) {
134
+ // if (field.formControl.value > field.templateOptions?.max) {
135
+ // return translate.get(field.templateOptions?.label).pipe(mergeMap(value =>
136
+ // translate.get('formValidation.maxValue', {field: value, max: field.templateOptions?.max})
137
+ // ));
138
+ // }
139
+ // }
140
+ //
141
+ // return undefined;
142
+ // };
143
+ // }
144
+ function getMaxValidatonMessage(translate) {
145
+ return (error, field) => {
146
+ const fieldName = translate.instant(field.templateOptions?.label ?? '');
147
+ return translate.instant('mngEditor.validation.max', { fieldName: fieldName, min: fieldName.templateOptions?.max });
148
+ };
149
+ }
150
+ // TODO: remove
151
+ // function serviceCostAllOrNoneFieldsRequiredValidatorMessage(translate: TranslateService): (error: any, field: FormlyFieldConfig) => Observable<string> {
152
+ // return(error: any, field: FormlyFieldConfig) =>
153
+ // translate.get('ServiceChannelDto.name').pipe(mergeMap(value =>
154
+ // translate.get('formValidation.serviceForm.allOrNothing', {serviceCost: value})
155
+ // ));
156
+ // }
157
+ export const getFormlyValidationMessages = (translate) => {
158
+ return [
159
+ { name: 'required', message: getRequiredValidationMessage(translate) },
160
+ { name: 'min', message: getMinValidatonMessage(translate) },
161
+ { name: 'max', message: getMaxValidatonMessage(translate) },
162
+ // { name: 'serviceCostAllOrNoneFieldsRequired', message: serviceCostAllOrNoneFieldsRequiredValidatorMessage(translate)}
163
+ ];
164
+ };
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21uZy1jb21tb25zL3NyYy9saWIvY29uZmlnL2Zvcm1seS5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLDJCQUEyQixFQUFFLDJCQUEyQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDNUcsT0FBTyxFQUNILGdDQUFnQyxFQUNoQyw0QkFBNEIsRUFDNUIsNEJBQTRCLEVBQzVCLHlCQUF5QixFQUN6QixtQ0FBbUMsRUFDbkMsMENBQTBDLEVBQzFDLHdCQUF3QixFQUMzQixNQUFNLGtDQUFrQyxDQUFDO0FBSTFDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2hDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsMkJBQTJCLEVBQUU7SUFDekQsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRTtDQUNsRSxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQVU7SUFDcEM7UUFDSSxJQUFJLEVBQUUsT0FBTztRQUNiLFNBQVMsRUFBRSx5QkFBeUI7UUFDcEMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDO0tBQ3RCO0lBQ0QsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7SUFDcEM7UUFDSSxJQUFJLEVBQUUsUUFBUTtRQUNkLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLGNBQWMsRUFBRTtZQUNaLGVBQWUsRUFBRTtnQkFDYixJQUFJLEVBQUUsUUFBUTthQUNqQjtTQUNKO0tBQ0o7SUFDRDtRQUNJLElBQUksRUFBRSxTQUFTO1FBQ2YsT0FBTyxFQUFFLE9BQU87UUFDaEIsY0FBYyxFQUFFO1lBQ1osZUFBZSxFQUFFO2dCQUNiLElBQUksRUFBRSxRQUFRO2FBQ2pCO1NBQ0o7S0FDSjtJQUNEO1FBQ0ksSUFBSSxF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REFBeUQ7QUFDekQsNENBQTRDO0FBQzVDLDBFQUEwRTtBQUMxRSw0RkFBNEY7QUFDNUYsZ0hBQWdIO0FBQ2hILHNCQUFzQjtBQUN0QixnQkFBZ0I7QUFDaEIsWUFBWTtBQUNaLEVBQUU7QUFDRiw0QkFBNEI7QUFDNUIsU0FBUztBQUNULElBQUk7QUFDSixTQUFTLHNCQUFzQixDQUFDLFNBQTJCO0lBQ3ZELE9BQU8sQ0FBQyxLQUFVLEVBQUUsS0FBd0IsRUFBRSxFQUFFO1FBQzVDLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEUsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLDBCQUEwQixFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3hILENBQUMsQ0FBQTtBQUNMLENBQUM7QUFFRCxlQUFlO0FBQ2YsMkpBQTJKO0FBQzNKLHNEQUFzRDtBQUN0RCx5RUFBeUU7QUFDekUsNkZBQTZGO0FBQzdGLGNBQWM7QUFDZCxJQUFJO0FBRUosTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxTQUEyQixFQUFTLEVBQUU7SUFDOUUsT0FBTztRQUNILEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLENBQUMsU0FBUyxDQUFDLEVBQUM7UUFDckUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsRUFBQztRQUMxRCxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxFQUFDO1FBQzFELHdIQUF3SDtLQUMzSCxDQUFDO0FBQ04sQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGb3JtbHlGaWVsZFdyYXBwZXJDb21wb25lbnQsIEZvcm1seVRhYmxlV3JhcHBlckNvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy9mb3JtL2Zvcm1seS93cmFwcGVycyc7XG5pbXBvcnQge1xuICAgIEZvcm1seUZpZWxkQXV0b2NvbXBsZXRlQ29tcG9uZW50LFxuICAgIEZvcm1seUZpZWxkRHJvcGRvd25Db21wb25lbnQsXG4gICAgRm9ybWx5RmllbGRGaWVsZHNldENvbXBvbmVudCxcbiAgICBGb3JtbHlGaWVsZElucHV0Q29tcG9uZW50LFxuICAgIEZvcm1seUZpZWxkVGFibGVEaWFsb2dGb3JtQ29tcG9uZW50LFxuICAgIEZvcm1seUZpZWxkVGFibGVEaWFsb2dNdWx0aXNlbGVjdENvbXBvbmVudCxcbiAgICBGb3JtbHlGaWVsZFRhYnNDb21wb25lbnRcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9mb3JtL2Zvcm1seS9maWVsZHMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Rm9ybWx5RmllbGRDb25maWd9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuXG5leHBvcnQgY29uc3QgZm9ybWx5V3JhcHBlcnNDb25maWcgPSBbXG4gICAgeyBuYW1lOiAnZmllbGQnLCBjb21wb25lbnQ6IEZvcm1seUZpZWxkV3JhcHBlckNvbXBvbmVudCB9LFxuICAgIHsgbmFtZTogJ2ZpZWxkLXRhYmxlJywgY29tcG9uZW50OiBGb3JtbHlUYWJsZVdyYXBwZXJDb21wb25lbnQgfVxuXTtcblxuZXhwb3J0IGNvbnN0IGZvcm1seVR5cGVzQ29uZmlnOiBhbnlbXSA9IFtcbiAgICB7XG4gICAgICAgIG5hbWU6ICdpbnB1dCcsXG4gICAgICAgIGNvbXBvbmVudDogRm9ybWx5RmllbGRJbnB1dENvbXBvbmVudCxcbiAgICAgICAgd3JhcHBlcnM6IFsnZmllbGQnXSxcbiAgICB9LFxuICAgIHsgbmFtZTogJ3N0cmluZycsIGV4dGVuZHM6ICdpbnB1dCcgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6ICdudW1iZXInLFxuICAgICAgICBleHRlbmRzOiAnaW5wdXQnLFxuICAgICAgICBkZWZhdWx0T3B0aW9uczoge1xuICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiAnaW50ZWdlcicsXG4gICAgICAgIGV4dGVuZHM6ICdpbnB1dCcsXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiB7XG4gICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6ICd0ZXh0YXJlYScsXG4gICAgICAgIGV4dGVuZHM6ICdpbnB1dCcsXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiB7XG4gICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dGFyZWEnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogJ3N3aXRjaCcsXG4gICAgICAgIGNvbXBvbmVudDogRm9ybWx5RmllbGRJbnB1dENvbXBvbmVudCxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IHtcbiAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzd2l0Y2gnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogJ3JhZGlvJyxcbiAgICAgICAgZXh0ZW5kczogJ2lucHV0JyxcbiAgICAgICAgZGVmYXVsdE9wdGlvbnM6IHtcbiAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdyYWRpbycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiAnZGF0ZXBpY2tlcicsXG4gICAgICAgIGV4dGVuZHM6ICdpbnB1dCcsXG4gICAgICAgIGRlZmF1bHRPcHRpb25zOiB7XG4gICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGF0ZXBpY2tlcicsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgICBuYW1lOiAnZHJvcGRvd24nLFxuICAgICAgICBjb21wb25lbnQ6IEZvcm1seUZpZWxkRHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIHdyYXBwZXJzOiBbJ2ZpZWxkJ10sXG4gICAgfSxcbiAgICB7IG5hbWU6ICdlbnVtJywgZXh0ZW5kczogJ2Ryb3Bkb3duJyB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogJ2F1dG9jb21wbGV0ZScsXG4gICAgICAgIGNvbXBvbmVudDogRm9ybWx5RmllbGRBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgICAgIHdyYXBwZXJzOiBbJ2ZpZWxkJ11cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogJ3RhYmxlLWRpYWxvZy1tdWx0aXNlbGVjdCcsXG4gICAgICAgIGNvbXBvbmVudDogRm9ybWx5RmllbGRUYWJsZURpYWxvZ011bHRpc2VsZWN0Q29tcG9uZW50LFxuICAgICAgICB3cmFwcGVyczogWydmaWVsZC10YWJsZSddXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6ICd0YWJsZS1kaWFsb2ctZm9ybScsXG4gICAgICAgIGNvbXBvbmVudDogRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnQsXG4gICAgICAgIHdyYXBwZXJzOiBbJ2ZpZWxkLXRhYmxlJ11cbiAgICB9LFxuICAgIHtcbiAgICAgICAgbmFtZTogJ3RhYnMnLFxuICAgICAgICBjb21wb25lbnQ6IEZvcm1seUZpZWxkVGFic0NvbXBvbmVudCxcbiAgICAgICAgd3JhcHBlcnM6IFtdXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG5hbWU6ICdmaWVsZHNldCcsXG4gICAgICAgIGNvbXBvbmVudDogRm9ybWx5RmllbGRGaWVsZHNldENvbXBvbmVudCxcbiAgICAgICAgd3JhcHBlcnM6IFtdXG4gICAgfVxuXTtcblxuLy8gZnVuY3Rpb24gZ2V0UmVxdWlyZWRWYWxpZGF0aW9uTWVzc2FnZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpOiAoZXJyb3I6IGFueSwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuLy8gICAgIHJldHVybiAoZXJyb3I6IGFueSwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PlxuLy8gICAgICAgICB0cmFuc2xhdGUuZ2V0KGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5sYWJlbCkucGlwZShtZXJnZU1hcCh2YWx1ZSA9PlxuLy8gICAgICAgICAgICAgdHJhbnNsYXRlLmdldCgnZm9ybVZhbGlkYXRpb24ucmVxdWlyZWQnLCB7ZmllbGQ6IHZhbHVlfSlcbi8vICAgICAgICAgKSk7XG4vLyB9XG5mdW5jdGlvbiBnZXRSZXF1aXJlZFZhbGlkYXRpb25NZXNzYWdlKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSk6IChlcnJvcjogYW55LCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHN0cmluZyB7XG4gICAgcmV0dXJuIChlcnJvcjogYW55LCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoZmllbGQudGVtcGxhdGVPcHRpb25zPy5sYWJlbCA/PyAnJyk7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGUuaW5zdGFudCgnbW5nRWRpdG9yLnZhbGlkYXRpb24ucmVxdWlyZWQnLCB7IGZpZWxkTmFtZTogZmllbGROYW1lIH0pO1xuICAgIH1cbn1cblxuLy8gZnVuY3Rpb24gZ2V0TWluVmFsdWVWYWxpZGF0b25NZXNzYWdlKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSk6IChlcnJvcjogYW55LCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IE9ic2VydmFibGU8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4vLyAgICAgcmV0dXJuIChlcnJvcjogYW55LCBmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHtcbi8vICAgICAgICAgaWYgKGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5taW4gIT09IHVuZGVmaW5lZCkge1xuLy8gICAgICAgICAgICAgaWYgKGZpZWxkLmZvcm1Db250cm9sLnZhbHVlIDwgZmllbGQudGVtcGxhdGVPcHRpb25zLm1pbikge1xuLy8gICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGUuZ2V0KGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5sYWJlbCkucGlwZShtZXJnZU1hcCh2YWx1ZSA9PlxuLy8gICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUuZ2V0KCdmb3JtVmFsaWRhdGlvbi5taW5WYWx1ZScsIHtmaWVsZDogdmFsdWUsIG1pbjogZmllbGQudGVtcGxhdGVPcHRpb25zLm1pbn0pXG4vLyAgICAgICAgICAgICAgICAgKSk7XG4vLyAgICAgICAgICAgICB9XG4vLyAgICAgICAgIH1cbi8vXG4vLyAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4vLyAgICAgfTtcbi8vIH1cbmZ1bmN0aW9uIGdldE1pblZhbGlkYXRvbk1lc3NhZ2UodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKTogKGVycm9yOiBhbnksIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gc3RyaW5nIHtcbiAgICByZXR1cm4gKGVycm9yOiBhbnksIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSB0cmFuc2xhdGUuaW5zdGFudChmaWVsZC50ZW1wbGF0ZU9wdGlvbnM/LmxhYmVsID8/ICcnKTtcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudmFsaWRhdGlvbi5taW4nLCB7IGZpZWxkTmFtZTogZmllbGROYW1lLCBtaW46IGZpZWxkTmFtZS50ZW1wbGF0ZU9wdGlvbnM/Lm1pbiB9KTtcbiAgICB9XG59XG5cbi8vIGZ1bmN0aW9uIGdldE1heFZhbHVlVmFsaWRhdG9uTWVzc2FnZSh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpOiAoZXJyb3I6IGFueSwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBPYnNlcnZhYmxlPHN0cmluZz4gfCB1bmRlZmluZWQge1xuLy8gICAgIHJldHVybiAoZXJyb3I6IGFueSwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB7XG4vLyAgICAgICAgIGlmIChmaWVsZC50ZW1wbGF0ZU9wdGlvbnM/Lm1heCkge1xuLy8gICAgICAgICAgICAgaWYgKGZpZWxkLmZvcm1Db250cm9sLnZhbHVlID4gZmllbGQudGVtcGxhdGVPcHRpb25zPy5tYXgpIHtcbi8vICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlLmdldChmaWVsZC50ZW1wbGF0ZU9wdGlvbnM/LmxhYmVsKS5waXBlKG1lcmdlTWFwKHZhbHVlID0+XG4vLyAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZS5nZXQoJ2Zvcm1WYWxpZGF0aW9uLm1heFZhbHVlJywge2ZpZWxkOiB2YWx1ZSwgbWF4OiBmaWVsZC50ZW1wbGF0ZU9wdGlvbnM/Lm1heH0pXG4vLyAgICAgICAgICAgICAgICAgKSk7XG4vLyAgICAgICAgICAgICB9XG4vLyAgICAgICAgIH1cbi8vXG4vLyAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4vLyAgICAgfTtcbi8vIH1cbmZ1bmN0aW9uIGdldE1heFZhbGlkYXRvbk1lc3NhZ2UodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKTogKGVycm9yOiBhbnksIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gc3RyaW5nIHtcbiAgICByZXR1cm4gKGVycm9yOiBhbnksIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSB0cmFuc2xhdGUuaW5zdGFudChmaWVsZC50ZW1wbGF0ZU9wdGlvbnM/LmxhYmVsID8/ICcnKTtcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZS5pbnN0YW50KCdtbmdFZGl0b3IudmFsaWRhdGlvbi5tYXgnLCB7IGZpZWxkTmFtZTogZmllbGROYW1lLCBtaW46IGZpZWxkTmFtZS50ZW1wbGF0ZU9wdGlvbnM/Lm1heCB9KTtcbiAgICB9XG59XG5cbi8vIFRPRE86IHJlbW92ZVxuLy8gZnVuY3Rpb24gc2VydmljZUNvc3RBbGxPck5vbmVGaWVsZHNSZXF1aXJlZFZhbGlkYXRvck1lc3NhZ2UodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKTogKGVycm9yOiBhbnksIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbi8vICAgICByZXR1cm4oZXJyb3I6IGFueSwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PlxuLy8gICAgICAgICB0cmFuc2xhdGUuZ2V0KCdTZXJ2aWNlQ2hhbm5lbER0by5uYW1lJykucGlwZShtZXJnZU1hcCh2YWx1ZSA9PlxuLy8gICAgICAgICAgICAgdHJhbnNsYXRlLmdldCgnZm9ybVZhbGlkYXRpb24uc2VydmljZUZvcm0uYWxsT3JOb3RoaW5nJywge3NlcnZpY2VDb3N0OiB2YWx1ZX0pXG4vLyAgICAgICAgICkpO1xuLy8gfVxuXG5leHBvcnQgY29uc3QgZ2V0Rm9ybWx5VmFsaWRhdGlvbk1lc3NhZ2VzID0gKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSk6IGFueVtdID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAgICB7IG5hbWU6ICdyZXF1aXJlZCcsIG1lc3NhZ2U6IGdldFJlcXVpcmVkVmFsaWRhdGlvbk1lc3NhZ2UodHJhbnNsYXRlKX0sXG4gICAgICAgIHsgbmFtZTogJ21pbicsIG1lc3NhZ2U6IGdldE1pblZhbGlkYXRvbk1lc3NhZ2UodHJhbnNsYXRlKX0sXG4gICAgICAgIHsgbmFtZTogJ21heCcsIG1lc3NhZ2U6IGdldE1heFZhbGlkYXRvbk1lc3NhZ2UodHJhbnNsYXRlKX0sXG4gICAgICAgIC8vIHsgbmFtZTogJ3NlcnZpY2VDb3N0QWxsT3JOb25lRmllbGRzUmVxdWlyZWQnLCBtZXNzYWdlOiBzZXJ2aWNlQ29zdEFsbE9yTm9uZUZpZWxkc1JlcXVpcmVkVmFsaWRhdG9yTWVzc2FnZSh0cmFuc2xhdGUpfVxuICAgIF07XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './formly.config';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbmctY29tbW9ucy9zcmMvbGliL2NvbmZpZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9mb3JtbHkuY29uZmlnJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './template.directive';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbmctY29tbW9ucy9zcmMvbGliL2RpcmVjdGl2ZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdGVtcGxhdGUuZGlyZWN0aXZlJztcbiJdfQ==
@@ -0,0 +1,25 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class TemplateDirective {
4
+ constructor(template) {
5
+ this.template = template;
6
+ }
7
+ getType() {
8
+ return this.name;
9
+ }
10
+ }
11
+ TemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
12
+ TemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: TemplateDirective, selector: "[mngTemplate]", inputs: { type: "type", name: ["mngTemplate", "name"] }, ngImport: i0 });
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TemplateDirective, decorators: [{
14
+ type: Directive,
15
+ args: [{
16
+ selector: '[mngTemplate]',
17
+ host: {}
18
+ }]
19
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; }, propDecorators: { type: [{
20
+ type: Input
21
+ }], name: [{
22
+ type: Input,
23
+ args: ['mngTemplate']
24
+ }] } });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW5nLWNvbW1vbnMvc3JjL2xpYi9kaXJlY3RpdmVzL3RlbXBsYXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBYyxNQUFNLGVBQWUsQ0FBQzs7QUFNNUQsTUFBTSxPQUFPLGlCQUFpQjtJQUsxQixZQUFtQixRQUEwQjtRQUExQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtJQUFHLENBQUM7SUFFakQsT0FBTztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDOzs4R0FUUSxpQkFBaUI7a0dBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUo3QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxlQUFlO29CQUN6QixJQUFJLEVBQUUsRUFBRTtpQkFDWDtrR0FHWSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ2dCLElBQUk7c0JBQXpCLEtBQUs7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBJbnB1dCwgVGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1ttbmdUZW1wbGF0ZV0nLFxuICAgIGhvc3Q6IHt9XG59KVxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRGlyZWN0aXZlIHtcblxuICAgIEBJbnB1dCgpIHR5cGUhOiBzdHJpbmc7XG4gICAgQElucHV0KCdtbmdUZW1wbGF0ZScpIG5hbWUhOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG5cbiAgICBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,338 @@
1
+ import { APP_INITIALIZER, NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ReactiveFormsModule } from '@angular/forms';
4
+ import { RouterModule } from '@angular/router';
5
+ import { HttpClient, HttpClientModule } from '@angular/common/http';
6
+ import { FORMLY_CONFIG, FormlyModule } from '@ngx-formly/core';
7
+ import { TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
8
+ // primeng modules
9
+ import { ConfirmationService, MessageService } from 'primeng/api';
10
+ import { AutoCompleteModule } from 'primeng/autocomplete';
11
+ import { BreadcrumbModule } from 'primeng/breadcrumb';
12
+ import { ButtonModule } from 'primeng/button';
13
+ import { CardModule } from 'primeng/card';
14
+ import { CheckboxModule } from 'primeng/checkbox';
15
+ import { ChipModule } from 'primeng/chip';
16
+ import { ConfirmDialogModule } from 'primeng/confirmdialog';
17
+ import { ConfirmPopupModule } from 'primeng/confirmpopup';
18
+ import { DialogModule } from 'primeng/dialog';
19
+ import { DialogService, DynamicDialogModule } from 'primeng/dynamicdialog';
20
+ import { DropdownModule } from 'primeng/dropdown';
21
+ import { InputNumberModule } from 'primeng/inputnumber';
22
+ import { InputMaskModule } from 'primeng/inputmask';
23
+ import { InputSwitchModule } from 'primeng/inputswitch';
24
+ import { InputTextModule } from 'primeng/inputtext';
25
+ import { InputTextareaModule } from 'primeng/inputtextarea';
26
+ import { PaginatorModule } from 'primeng/paginator';
27
+ import { RadioButtonModule } from 'primeng/radiobutton';
28
+ import { RippleModule } from 'primeng/ripple';
29
+ import { SelectButtonModule } from 'primeng/selectbutton';
30
+ import { TableModule } from 'primeng/table';
31
+ import { TagModule } from 'primeng/tag';
32
+ import { ToastModule } from 'primeng/toast';
33
+ import { ToggleButtonModule } from 'primeng/togglebutton';
34
+ import { ToolbarModule } from 'primeng/toolbar';
35
+ import { TooltipModule } from 'primeng/tooltip';
36
+ import { MessagesModule } from 'primeng/messages';
37
+ import { ProgressSpinnerModule } from 'primeng/progressspinner';
38
+ import { TabViewModule } from 'primeng/tabview';
39
+ import { FieldsetModule } from 'primeng/fieldset';
40
+ import { CalendarModule } from 'primeng/calendar';
41
+ // directives
42
+ import { TemplateDirective } from './directives/template.directive';
43
+ // pipes
44
+ import { PropertyPathPipe } from './pipes/property-path.pipe';
45
+ // layout components
46
+ import { AppBreadcrumbComponent, AppFooterComponent, AppMainComponent, AppMenuComponent, AppMenuitemComponent, AppTopbarComponent } from './components/layout';
47
+ // formly components
48
+ import { FormlyFieldWrapperComponent, FormlyTableWrapperComponent } from './components/form/formly/wrappers';
49
+ import { FormlyFieldAutocompleteComponent, FormlyFieldDropdownComponent, FormlyFieldFieldsetComponent, FormlyFieldInputComponent, FormlyFieldTableDialogFormComponent, FormlyFieldTableDialogMultiselectComponent, FormlyFieldTabsComponent } from './components/form/formly/fields';
50
+ // table components
51
+ import { TableComponent, TableviewComponent } from './components/tableview';
52
+ // editor components
53
+ import { FormEditorComponent } from './components/form';
54
+ import { ActionComponent, ActionDialogComponent, ActionRouteComponent } from './components/action';
55
+ // services
56
+ import { ObjectSerializer } from './api/utils';
57
+ import { ActionService, AppBreadcrumbService, AppSettingsService, ConfigurationService, MenuService, NavigationService } from './services';
58
+ import { configJsonAppInitializerProvider, configurationServiceProvider, formlyConfigProvider } from './services/providers';
59
+ // component services
60
+ import { TableviewComponentService } from './components/tableview/tableview.component.service';
61
+ import { AppMainComponentService } from './components/layout/app.main.component.service';
62
+ // module config
63
+ import { MNG_MODULE_CONFIG_IT } from './models/config';
64
+ import { TranslateHttpLoader } from '@ngx-translate/http-loader';
65
+ import * as i0 from "@angular/core";
66
+ import * as i1 from "@ngx-translate/core";
67
+ import * as i2 from "@ngx-formly/core";
68
+ // primeng modules
69
+ export const primeNgModules = [
70
+ AutoCompleteModule,
71
+ BreadcrumbModule,
72
+ ButtonModule,
73
+ CalendarModule,
74
+ CardModule,
75
+ CheckboxModule,
76
+ ChipModule,
77
+ ConfirmDialogModule,
78
+ ConfirmPopupModule,
79
+ DialogModule,
80
+ DynamicDialogModule,
81
+ DropdownModule,
82
+ InputNumberModule,
83
+ InputMaskModule,
84
+ InputSwitchModule,
85
+ InputTextModule,
86
+ InputTextareaModule,
87
+ PaginatorModule,
88
+ RadioButtonModule,
89
+ RippleModule,
90
+ SelectButtonModule,
91
+ TableModule,
92
+ TagModule,
93
+ ToastModule,
94
+ ToggleButtonModule,
95
+ ToolbarModule,
96
+ TooltipModule,
97
+ MessagesModule,
98
+ ProgressSpinnerModule,
99
+ TabViewModule,
100
+ FieldsetModule
101
+ ];
102
+ const declarations = [
103
+ // directives
104
+ TemplateDirective,
105
+ // pipes
106
+ PropertyPathPipe,
107
+ // layout components
108
+ AppBreadcrumbComponent,
109
+ AppFooterComponent,
110
+ AppMainComponent,
111
+ AppMenuComponent,
112
+ AppMenuitemComponent,
113
+ AppTopbarComponent,
114
+ // formly wrappers
115
+ FormlyFieldWrapperComponent,
116
+ FormlyTableWrapperComponent,
117
+ // formly fields
118
+ FormlyFieldInputComponent,
119
+ FormlyFieldDropdownComponent,
120
+ FormlyFieldAutocompleteComponent,
121
+ FormlyFieldTableDialogMultiselectComponent,
122
+ FormlyFieldTableDialogFormComponent,
123
+ FormlyFieldTabsComponent,
124
+ FormlyFieldFieldsetComponent,
125
+ // table components
126
+ TableComponent,
127
+ TableviewComponent,
128
+ // editor components
129
+ FormEditorComponent,
130
+ ActionComponent,
131
+ ActionDialogComponent,
132
+ ActionRouteComponent
133
+ ];
134
+ export function HttpLoaderFactory(http) {
135
+ return new TranslateHttpLoader(http);
136
+ }
137
+ export class MngCommonsModule {
138
+ static forRoot(config) {
139
+ return {
140
+ ngModule: MngCommonsModule,
141
+ providers: [
142
+ // primeng services
143
+ DialogService,
144
+ MessageService,
145
+ ConfirmationService,
146
+ ActionService,
147
+ NavigationService,
148
+ AppSettingsService,
149
+ AppBreadcrumbService,
150
+ MenuService,
151
+ // component service
152
+ AppMainComponentService,
153
+ TableviewComponentService,
154
+ {
155
+ provide: MNG_MODULE_CONFIG_IT,
156
+ useValue: config
157
+ },
158
+ {
159
+ provide: ObjectSerializer,
160
+ useFactory: () => ObjectSerializer.get()
161
+ },
162
+ {
163
+ provide: ConfigurationService,
164
+ useFactory: configurationServiceProvider,
165
+ deps: [HttpClient, MNG_MODULE_CONFIG_IT]
166
+ },
167
+ {
168
+ provide: APP_INITIALIZER,
169
+ useFactory: configJsonAppInitializerProvider,
170
+ deps: [ConfigurationService, MNG_MODULE_CONFIG_IT],
171
+ multi: true
172
+ },
173
+ {
174
+ provide: FORMLY_CONFIG,
175
+ multi: true,
176
+ useFactory: formlyConfigProvider,
177
+ deps: [TranslateService, MNG_MODULE_CONFIG_IT]
178
+ }
179
+ ]
180
+ };
181
+ }
182
+ }
183
+ MngCommonsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: MngCommonsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
184
+ MngCommonsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: MngCommonsModule, declarations: [
185
+ // directives
186
+ TemplateDirective,
187
+ // pipes
188
+ PropertyPathPipe,
189
+ // layout components
190
+ AppBreadcrumbComponent,
191
+ AppFooterComponent,
192
+ AppMainComponent,
193
+ AppMenuComponent,
194
+ AppMenuitemComponent,
195
+ AppTopbarComponent,
196
+ // formly wrappers
197
+ FormlyFieldWrapperComponent,
198
+ FormlyTableWrapperComponent,
199
+ // formly fields
200
+ FormlyFieldInputComponent,
201
+ FormlyFieldDropdownComponent,
202
+ FormlyFieldAutocompleteComponent,
203
+ FormlyFieldTableDialogMultiselectComponent,
204
+ FormlyFieldTableDialogFormComponent,
205
+ FormlyFieldTabsComponent,
206
+ FormlyFieldFieldsetComponent,
207
+ // table components
208
+ TableComponent,
209
+ TableviewComponent,
210
+ // editor components
211
+ FormEditorComponent,
212
+ ActionComponent,
213
+ ActionDialogComponent,
214
+ ActionRouteComponent], imports: [
215
+ // angular modules
216
+ CommonModule,
217
+ RouterModule,
218
+ HttpClientModule,
219
+ ReactiveFormsModule, i1.TranslateModule, i2.FormlyModule, AutoCompleteModule,
220
+ BreadcrumbModule,
221
+ ButtonModule,
222
+ CalendarModule,
223
+ CardModule,
224
+ CheckboxModule,
225
+ ChipModule,
226
+ ConfirmDialogModule,
227
+ ConfirmPopupModule,
228
+ DialogModule,
229
+ DynamicDialogModule,
230
+ DropdownModule,
231
+ InputNumberModule,
232
+ InputMaskModule,
233
+ InputSwitchModule,
234
+ InputTextModule,
235
+ InputTextareaModule,
236
+ PaginatorModule,
237
+ RadioButtonModule,
238
+ RippleModule,
239
+ SelectButtonModule,
240
+ TableModule,
241
+ TagModule,
242
+ ToastModule,
243
+ ToggleButtonModule,
244
+ ToolbarModule,
245
+ TooltipModule,
246
+ MessagesModule,
247
+ ProgressSpinnerModule,
248
+ TabViewModule,
249
+ FieldsetModule], exports: [
250
+ // directives
251
+ TemplateDirective,
252
+ // pipes
253
+ PropertyPathPipe,
254
+ // layout components
255
+ AppBreadcrumbComponent,
256
+ AppFooterComponent,
257
+ AppMainComponent,
258
+ AppMenuComponent,
259
+ AppMenuitemComponent,
260
+ AppTopbarComponent,
261
+ // formly wrappers
262
+ FormlyFieldWrapperComponent,
263
+ FormlyTableWrapperComponent,
264
+ // formly fields
265
+ FormlyFieldInputComponent,
266
+ FormlyFieldDropdownComponent,
267
+ FormlyFieldAutocompleteComponent,
268
+ FormlyFieldTableDialogMultiselectComponent,
269
+ FormlyFieldTableDialogFormComponent,
270
+ FormlyFieldTabsComponent,
271
+ FormlyFieldFieldsetComponent,
272
+ // table components
273
+ TableComponent,
274
+ TableviewComponent,
275
+ // editor components
276
+ FormEditorComponent,
277
+ ActionComponent,
278
+ ActionDialogComponent,
279
+ ActionRouteComponent] });
280
+ MngCommonsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: MngCommonsModule, imports: [[
281
+ // angular modules
282
+ CommonModule,
283
+ RouterModule,
284
+ HttpClientModule,
285
+ ReactiveFormsModule,
286
+ // other modules
287
+ TranslateModule.forRoot({
288
+ defaultLanguage: 'en',
289
+ loader: {
290
+ provide: TranslateLoader,
291
+ useFactory: HttpLoaderFactory,
292
+ deps: [HttpClient]
293
+ }
294
+ }),
295
+ FormlyModule.forChild(),
296
+ ...primeNgModules
297
+ ]] });
298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: MngCommonsModule, decorators: [{
299
+ type: NgModule,
300
+ args: [{
301
+ imports: [
302
+ // angular modules
303
+ CommonModule,
304
+ RouterModule,
305
+ HttpClientModule,
306
+ ReactiveFormsModule,
307
+ // other modules
308
+ TranslateModule.forRoot({
309
+ defaultLanguage: 'en',
310
+ loader: {
311
+ provide: TranslateLoader,
312
+ useFactory: HttpLoaderFactory,
313
+ deps: [HttpClient]
314
+ }
315
+ }),
316
+ FormlyModule.forChild(),
317
+ ...primeNgModules
318
+ ],
319
+ declarations: [
320
+ ...declarations
321
+ ],
322
+ // providers: [
323
+ // DialogService,
324
+ // MessageService,
325
+ // ConfirmationService,
326
+ //
327
+ // ActionService,
328
+ // NavigationService,
329
+ // AppSettingsService,
330
+ // AppBreadcrumbService,
331
+ // MenuService
332
+ // ],
333
+ exports: [
334
+ ...declarations
335
+ ]
336
+ }]
337
+ }] });
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW5nLWNvbW1vbnMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbW5nLWNvbW1vbnMvc3JjL2xpYi9tbmctY29tbW9ucy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGVBQWUsRUFBdUIsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRWxFLE9BQU8sRUFBQyxhQUFhLEVBQUUsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RixrQkFBa0I7QUFDbEIsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNoRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUMs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LENBQUM7NEJBQ3BCLGVBQWUsRUFBRSxJQUFJOzRCQUNyQixNQUFNLEVBQUU7Z0NBQ0osT0FBTyxFQUFFLGVBQWU7Z0NBQ3hCLFVBQVUsRUFBRSxpQkFBaUI7Z0NBQzdCLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQzs2QkFDckI7eUJBQ0osQ0FBQzt3QkFDRixZQUFZLENBQUMsUUFBUSxFQUFFO3dCQUN2QixHQUFHLGNBQWM7cUJBQ3BCO29CQUNELFlBQVksRUFBRTt3QkFDVixHQUFHLFlBQVk7cUJBQ2xCO29CQUNELGVBQWU7b0JBQ2YscUJBQXFCO29CQUNyQixzQkFBc0I7b0JBQ3RCLDJCQUEyQjtvQkFDM0IsRUFBRTtvQkFDRixxQkFBcUI7b0JBQ3JCLHlCQUF5QjtvQkFDekIsMEJBQTBCO29CQUMxQiw0QkFBNEI7b0JBQzVCLGtCQUFrQjtvQkFDbEIsS0FBSztvQkFDTCxPQUFPLEVBQUU7d0JBQ0wsR0FBRyxZQUFZO3FCQUNsQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QVBQX0lOSVRJQUxJWkVSLCBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7UmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBDbGllbnRNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHtGT1JNTFlfQ09ORklHLCBGb3JtbHlNb2R1bGV9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtUcmFuc2xhdGVMb2FkZXIsIFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbi8vIHByaW1lbmcgbW9kdWxlc1xuaW1wb3J0IHtDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtBdXRvQ29tcGxldGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7QnJlYWRjcnVtYk1vZHVsZX0gZnJvbSAncHJpbWVuZy9icmVhZGNydW1iJztcbmltcG9ydCB7QnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge0NhcmRNb2R1bGV9IGZyb20gJ3ByaW1lbmcvY2FyZCc7XG5pbXBvcnQge0NoZWNrYm94TW9kdWxlfSBmcm9tICdwcmltZW5nL2NoZWNrYm94JztcbmltcG9ydCB7Q2hpcE1vZHVsZX0gZnJvbSAncHJpbWVuZy9jaGlwJztcbmltcG9ydCB7Q29uZmlybURpYWxvZ01vZHVsZX0gZnJvbSAncHJpbWVuZy9jb25maXJtZGlhbG9nJztcbmltcG9ydCB7Q29uZmlybVBvcHVwTW9kdWxlfSBmcm9tICdwcmltZW5nL2NvbmZpcm1wb3B1cCc7XG5pbXBvcnQge0RpYWxvZ01vZHVsZX0gZnJvbSAncHJpbWVuZy9kaWFsb2cnO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtEcm9wZG93bk1vZHVsZX0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XG5pbXBvcnQge0lucHV0TnVtYmVyTW9kdWxlfSBmcm9tICdwcmltZW5nL2lucHV0bnVtYmVyJztcbmltcG9ydCB7SW5wdXRNYXNrTW9kdWxlfSBmcm9tICdwcmltZW5nL2lucHV0bWFzayc7XG5pbXBvcnQge0lucHV0U3dpdGNoTW9kdWxlfSBmcm9tICdwcmltZW5nL2lucHV0c3dpdGNoJztcbmltcG9ydCB7SW5wdXRUZXh0TW9kdWxlfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dCc7XG5pbXBvcnQge0lucHV0VGV4dGFyZWFNb2R1bGV9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0YXJlYSc7XG5pbXBvcnQge1BhZ2luYXRvck1vZHVsZX0gZnJvbSAncHJpbWVuZy9wYWdpbmF0b3InO1xuaW1wb3J0IHtSYWRpb0J1dHRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9yYWRpb2J1dHRvbic7XG5pbXBvcnQge1JpcHBsZU1vZHVsZX0gZnJvbSAncHJpbWVuZy9yaXBwbGUnO1xuaW1wb3J0IHtTZWxlY3RCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvc2VsZWN0YnV0dG9uJztcbmltcG9ydCB7VGFibGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHtUYWdNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdGFnJztcbmltcG9ydCB7VG9hc3RNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xuaW1wb3J0IHtUb2dnbGVCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9nZ2xlYnV0dG9uJztcbmltcG9ydCB7VG9vbGJhck1vZHVsZX0gZnJvbSAncHJpbWVuZy90b29sYmFyJztcbmltcG9ydCB7VG9vbHRpcE1vZHVsZX0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcbmltcG9ydCB7TWVzc2FnZXNNb2R1bGV9IGZyb20gJ3ByaW1lbmcvbWVzc2FnZXMnO1xuaW1wb3J0IHtQcm9ncmVzc1NwaW5uZXJNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcHJvZ3Jlc3NzcGlubmVyJztcbmltcG9ydCB7VGFiVmlld01vZHVsZX0gZnJvbSAncHJpbWVuZy90YWJ2aWV3JztcbmltcG9ydCB7RmllbGRzZXRNb2R1bGV9IGZyb20gJ3ByaW1lbmcvZmllbGRzZXQnO1xuaW1wb3J0IHtDYWxlbmRhck1vZHVsZX0gZnJvbSAncHJpbWVuZy9jYWxlbmRhcic7XG5cbi8vIGRpcmVjdGl2ZXNcbmltcG9ydCB7VGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy90ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuXG4vLyBwaXBlc1xuaW1wb3J0IHtQcm9wZXJ0eVBhdGhQaXBlfSBmcm9tICcuL3BpcGVzL3Byb3BlcnR5LXBhdGgucGlwZSc7XG5cbi8vIGxheW91dCBjb21wb25lbnRzXG5pbXBvcnQge0FwcEJyZWFkY3J1bWJDb21wb25lbnQsIEFwcEZvb3RlckNvbXBvbmVudCwgQXBwTWFpbkNvbXBvbmVudCwgQXBwTWVudUNvbXBvbmVudCwgQXBwTWVudWl0ZW1Db21wb25lbnQsIEFwcFRvcGJhckNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2xheW91dCc7XG5cbi8vIGZvcm1seSBjb21wb25lbnRzXG5pbXBvcnQge0Zvcm1seUZpZWxkV3JhcHBlckNvbXBvbmVudCwgRm9ybWx5VGFibGVXcmFwcGVyQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvd3JhcHBlcnMnO1xuaW1wb3J0IHtGb3JtbHlGaWVsZEF1dG9jb21wbGV0ZUNvbXBvbmVudCwgRm9ybWx5RmllbGREcm9wZG93bkNvbXBvbmVudCwgRm9ybWx5RmllbGRGaWVsZHNldENvbXBvbmVudCwgRm9ybWx5RmllbGRJbnB1dENvbXBvbmVudCwgRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnQsIEZvcm1seUZpZWxkVGFibGVEaWFsb2dNdWx0aXNlbGVjdENvbXBvbmVudCwgRm9ybWx5RmllbGRUYWJzQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvZmllbGRzJztcblxuLy8gdGFibGUgY29tcG9uZW50c1xuaW1wb3J0IHtUYWJsZUNvbXBvbmVudCwgVGFibGV2aWV3Q29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGV2aWV3JztcblxuLy8gZWRpdG9yIGNvbXBvbmVudHNcbmltcG9ydCB7Rm9ybUVkaXRvckNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IHtBY3Rpb25Db21wb25lbnQsIEFjdGlvbkRpYWxvZ0NvbXBvbmVudCwgQWN0aW9uUm91dGVDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hY3Rpb24nO1xuXG4vLyBzZXJ2aWNlc1xuaW1wb3J0IHtPYmplY3RTZXJpYWxpemVyfSBmcm9tICcuL2FwaS91dGlscyc7XG5pbXBvcnQge0FjdGlvblNlcnZpY2UsIEFwcEJyZWFkY3J1bWJTZXJ2aWNlLCBBcHBTZXR0aW5nc1NlcnZpY2UsIENvbmZpZ3VyYXRpb25TZXJ2aWNlLCBNZW51U2VydmljZSwgTmF2aWdhdGlvblNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMnO1xuaW1wb3J0IHtjb25maWdKc29uQXBwSW5pdGlhbGl6ZXJQcm92aWRlciwgY29uZmlndXJhdGlvblNlcnZpY2VQcm92aWRlciwgZm9ybWx5Q29uZmlnUHJvdmlkZXJ9IGZyb20gJy4vc2VydmljZXMvcHJvdmlkZXJzJztcblxuLy8gY29tcG9uZW50IHNlcnZpY2VzXG5pbXBvcnQge1RhYmxldmlld0NvbXBvbmVudFNlcnZpY2V9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZXZpZXcvdGFibGV2aWV3LmNvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7QXBwTWFpbkNvbXBvbmVudFNlcnZpY2V9IGZyb20gJy4vY29tcG9uZW50cy9sYXlvdXQvYXBwLm1haW4uY29tcG9uZW50LnNlcnZpY2UnO1xuXG4vLyBtb2R1bGUgY29uZmlnXG5pbXBvcnQge01OR19NT0RVTEVfQ09ORklHX0lULCBNbmdNb2R1bGVDb25maWd9IGZyb20gJy4vbW9kZWxzL2NvbmZpZyc7XG5pbXBvcnQge1RyYW5zbGF0ZUh0dHBMb2FkZXJ9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2h0dHAtbG9hZGVyJztcblxuLy8gcHJpbWVuZyBtb2R1bGVzXG5leHBvcnQgY29uc3QgcHJpbWVOZ01vZHVsZXMgPSBbXG4gICAgQXV0b0NvbXBsZXRlTW9kdWxlLFxuICAgIEJyZWFkY3J1bWJNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIENhbGVuZGFyTW9kdWxlLFxuICAgIENhcmRNb2R1bGUsXG4gICAgQ2hlY2tib3hNb2R1bGUsXG4gICAgQ2hpcE1vZHVsZSxcbiAgICBDb25maXJtRGlhbG9nTW9kdWxlLFxuICAgIENvbmZpcm1Qb3B1cE1vZHVsZSxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgRHluYW1pY0RpYWxvZ01vZHVsZSxcbiAgICBEcm9wZG93bk1vZHVsZSxcbiAgICBJbnB1dE51bWJlck1vZHVsZSxcbiAgICBJbnB1dE1hc2tNb2R1bGUsXG4gICAgSW5wdXRTd2l0Y2hNb2R1bGUsXG4gICAgSW5wdXRUZXh0TW9kdWxlLFxuICAgIElucHV0VGV4dGFyZWFNb2R1bGUsXG4gICAgUGFnaW5hdG9yTW9kdWxlLFxuICAgIFJhZGlvQnV0dG9uTW9kdWxlLFxuICAgIFJpcHBsZU1vZHVsZSxcbiAgICBTZWxlY3RCdXR0b25Nb2R1bGUsXG4gICAgVGFibGVNb2R1bGUsXG4gICAgVGFnTW9kdWxlLFxuICAgIFRvYXN0TW9kdWxlLFxuICAgIFRvZ2dsZUJ1dHRvbk1vZHVsZSxcbiAgICBUb29sYmFyTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgTWVzc2FnZXNNb2R1bGUsXG4gICAgUHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgIFRhYlZpZXdNb2R1bGUsXG4gICAgRmllbGRzZXRNb2R1bGVcbl07XG5cbmNvbnN0IGRlY2xhcmF0aW9ucyA9IFtcbiAgICAvLyBkaXJlY3RpdmVzXG4gICAgVGVtcGxhdGVEaXJlY3RpdmUsXG5cbiAgICAvLyBwaXBlc1xuICAgIFByb3BlcnR5UGF0aFBpcGUsXG5cbiAgICAvLyBsYXlvdXQgY29tcG9uZW50c1xuICAgIEFwcEJyZWFkY3J1bWJDb21wb25lbnQsXG4gICAgQXBwRm9vdGVyQ29tcG9uZW50LFxuICAgIEFwcE1haW5Db21wb25lbnQsXG4gICAgQXBwTWVudUNvbXBvbmVudCxcbiAgICBBcHBNZW51aXRlbUNvbXBvbmVudCxcbiAgICBBcHBUb3BiYXJDb21wb25lbnQsXG5cbiAgICAvLyBmb3JtbHkgd3JhcHBlcnNcbiAgICBGb3JtbHlGaWVsZFdyYXBwZXJDb21wb25lbnQsXG4gICAgRm9ybWx5VGFibGVXcmFwcGVyQ29tcG9uZW50LFxuXG4gICAgLy8gZm9ybWx5IGZpZWxkc1xuICAgIEZvcm1seUZpZWxkSW5wdXRDb21wb25lbnQsXG4gICAgRm9ybWx5RmllbGREcm9wZG93bkNvbXBvbmVudCxcbiAgICBGb3JtbHlGaWVsZEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBGb3JtbHlGaWVsZFRhYmxlRGlhbG9nTXVsdGlzZWxlY3RDb21wb25lbnQsXG4gICAgRm9ybWx5RmllbGRUYWJsZURpYWxvZ0Zvcm1Db21wb25lbnQsXG4gICAgRm9ybWx5RmllbGRUYWJzQ29tcG9uZW50LFxuICAgIEZvcm1seUZpZWxkRmllbGRzZXRDb21wb25lbnQsXG5cbiAgICAvLyB0YWJsZSBjb21wb25lbnRzXG4gICAgVGFibGVDb21wb25lbnQsXG4gICAgVGFibGV2aWV3Q29tcG9uZW50LFxuXG4gICAgLy8gZWRpdG9yIGNvbXBvbmVudHNcbiAgICBGb3JtRWRpdG9yQ29tcG9uZW50LFxuICAgIEFjdGlvbkNvbXBvbmVudCxcbiAgICBBY3Rpb25EaWFsb2dDb21wb25lbnQsXG4gICAgQWN0aW9uUm91dGVDb21wb25lbnRcbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBIdHRwTG9hZGVyRmFjdG9yeShodHRwOiBIdHRwQ2xpZW50KSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2xhdGVIdHRwTG9hZGVyKGh0dHApO1xufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgLy8gYW5ndWxhciBtb2R1bGVzXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUm91dGVyTW9kdWxlLFxuICAgICAgICBIdHRwQ2xpZW50TW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuXG4gICAgICAgIC8vIG90aGVyIG1vZHVsZXNcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLmZvclJvb3Qoe1xuICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlOiAnZW4nLFxuICAgICAgICAgICAgbG9hZGVyOiB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogVHJhbnNsYXRlTG9hZGVyLFxuICAgICAgICAgICAgICAgIHVzZUZhY3Rvcnk6IEh0dHBMb2FkZXJGYWN0b3J5LFxuICAgICAgICAgICAgICAgIGRlcHM6IFtIdHRwQ2xpZW50XVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgRm9ybWx5TW9kdWxlLmZvckNoaWxkKCksXG4gICAgICAgIC4uLnByaW1lTmdNb2R1bGVzXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgLi4uZGVjbGFyYXRpb25zXG4gICAgXSxcbiAgICAvLyBwcm92aWRlcnM6IFtcbiAgICAvLyAgICAgRGlhbG9nU2VydmljZSxcbiAgICAvLyAgICAgTWVzc2FnZVNlcnZpY2UsXG4gICAgLy8gICAgIENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgLy9cbiAgICAvLyAgICAgQWN0aW9uU2VydmljZSxcbiAgICAvLyAgICAgTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgLy8gICAgIEFwcFNldHRpbmdzU2VydmljZSxcbiAgICAvLyAgICAgQXBwQnJlYWRjcnVtYlNlcnZpY2UsXG4gICAgLy8gICAgIE1lbnVTZXJ2aWNlXG4gICAgLy8gXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIC4uLmRlY2xhcmF0aW9uc1xuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTW5nQ29tbW9uc01vZHVsZSB7XG4gICAgc3RhdGljIGZvclJvb3QoY29uZmlnOiBNbmdNb2R1bGVDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE1uZ0NvbW1vbnNNb2R1bGU+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5nTW9kdWxlOiBNbmdDb21tb25zTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgLy8gcHJpbWVuZyBzZXJ2aWNlc1xuICAgICAgICAgICAgICAgIERpYWxvZ1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQ29uZmlybWF0aW9uU2VydmljZSxcblxuICAgICAgICAgICAgICAgIEFjdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQXBwU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIEFwcEJyZWFkY3J1bWJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIE1lbnVTZXJ2aWNlLFxuXG4gICAgICAgICAgICAgICAgLy8gY29tcG9uZW50IHNlcnZpY2VcbiAgICAgICAgICAgICAgICBBcHBNYWluQ29tcG9uZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICBUYWJsZXZpZXdDb21wb25lbnRTZXJ2aWNlLFxuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBNTkdfTU9EVUxFX0NPTkZJR19JVCxcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBPYmplY3RTZXJpYWxpemVyLFxuICAgICAgICAgICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiBPYmplY3RTZXJpYWxpemVyLmdldCgpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB1c2VGYWN0b3J5OiBjb25maWd1cmF0aW9uU2VydmljZVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICBkZXBzOiBbSHR0cENsaWVudCwgTU5HX01PRFVMRV9DT05GSUdfSVRdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgICAgICAgICAgICAgICAgdXNlRmFjdG9yeTogY29uZmlnSnNvbkFwcEluaXRpYWxpemVyUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgICAgIGRlcHM6IFtDb25maWd1cmF0aW9uU2VydmljZSwgTU5HX01PRFVMRV9DT05GSUdfSVRdLFxuICAgICAgICAgICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGT1JNTFlfQ09ORklHLFxuICAgICAgICAgICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdXNlRmFjdG9yeTogZm9ybWx5Q29uZmlnUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgICAgIGRlcHM6IFtUcmFuc2xhdGVTZXJ2aWNlLCBNTkdfTU9EVUxFX0NPTkZJR19JVF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19