@vgip/meta-ui 1.1.6 → 1.2.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 (110) hide show
  1. package/{esm2015/lib/common/fieldNormalizer/boolean.js → esm2020/lib/common/fieldNormalizer/boolean.mjs} +0 -0
  2. package/{esm2015/lib/common/fieldNormalizer/datetime.js → esm2020/lib/common/fieldNormalizer/datetime.mjs} +0 -0
  3. package/{esm2015/lib/common/fieldNormalizer/index.js → esm2020/lib/common/fieldNormalizer/index.mjs} +0 -0
  4. package/{esm2015/lib/common/fieldNormalizer/number.js → esm2020/lib/common/fieldNormalizer/number.mjs} +0 -0
  5. package/{esm2015/lib/common/fieldNormalizer/options.js → esm2020/lib/common/fieldNormalizer/options.mjs} +0 -0
  6. package/{esm2015/lib/common/fieldNormalizer/radio.js → esm2020/lib/common/fieldNormalizer/radio.mjs} +0 -0
  7. package/{esm2015/lib/common/fieldNormalizer/reference.js → esm2020/lib/common/fieldNormalizer/reference.mjs} +0 -0
  8. package/{esm2015/lib/common/fieldNormalizer/richtext.js → esm2020/lib/common/fieldNormalizer/richtext.mjs} +0 -0
  9. package/{esm2015/lib/common/fieldNormalizer/string.js → esm2020/lib/common/fieldNormalizer/string.mjs} +0 -0
  10. package/{esm2015/lib/common/fieldNormalizer/text.js → esm2020/lib/common/fieldNormalizer/text.mjs} +0 -0
  11. package/{esm2015/lib/common/fieldNormalizer/uniqueNameFilter.js → esm2020/lib/common/fieldNormalizer/uniqueNameFilter.mjs} +0 -0
  12. package/esm2020/lib/common/metaAutofocus.directive.mjs +35 -0
  13. package/esm2020/lib/common/metaIcons.pipe.mjs +29 -0
  14. package/esm2020/lib/common/metaModel.pipe.mjs +25 -0
  15. package/esm2020/lib/common/metaNormalizer.mjs +309 -0
  16. package/esm2020/lib/common/metaStripHtml.pipe.mjs +22 -0
  17. package/{esm2015/lib/common/utils/colorThemes.js → esm2020/lib/common/utils/colorThemes.mjs} +0 -0
  18. package/{esm2015/lib/common/utils/indexedDbStore/index.js → esm2020/lib/common/utils/indexedDbStore/index.mjs} +0 -0
  19. package/esm2020/lib/common/utils/relativeTimeBuilder.mjs +49 -0
  20. package/{esm2015/lib/common/utils/templateBuilder.js → esm2020/lib/common/utils/templateBuilder.mjs} +0 -0
  21. package/esm2020/lib/field.mjs +2176 -0
  22. package/esm2020/lib/fieldAbstract.mjs +198 -0
  23. package/esm2020/lib/fieldBoolean/index.mjs +51 -0
  24. package/esm2020/lib/fieldDatetime/index.mjs +337 -0
  25. package/esm2020/lib/fieldInput/index.mjs +444 -0
  26. package/esm2020/lib/fieldRadio/index.mjs +87 -0
  27. package/esm2020/lib/fieldRichtext/index.mjs +85 -0
  28. package/esm2020/lib/fieldText/index.mjs +65 -0
  29. package/esm2020/lib/fieldUnknown/index.mjs +19 -0
  30. package/esm2020/lib/index.mjs +165 -0
  31. package/esm2020/lib/services/metaContext/index.mjs +35 -0
  32. package/esm2020/lib/services/metaMsg/index.mjs +84 -0
  33. package/esm2020/lib/services/metaReference/index.mjs +94 -0
  34. package/esm2020/lib/services/metaResource/index.mjs +139 -0
  35. package/esm2020/lib/services/metaResource/metaHttpClient.mjs +64 -0
  36. package/esm2020/lib/services/metaTracker/index.mjs +31 -0
  37. package/esm2020/lib/services/resourceDrafts/index.mjs +68 -0
  38. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  39. package/{esm2015/vgip-meta-ui.js → esm2020/vgip-meta-ui.mjs} +0 -0
  40. package/fesm2015/vgip-meta-ui.mjs +5208 -0
  41. package/fesm2015/vgip-meta-ui.mjs.map +1 -0
  42. package/fesm2020/vgip-meta-ui.mjs +5208 -0
  43. package/fesm2020/vgip-meta-ui.mjs.map +1 -0
  44. package/lib/common/metaAutofocus.directive.d.ts +3 -0
  45. package/lib/common/metaIcons.pipe.d.ts +3 -0
  46. package/lib/common/metaModel.pipe.d.ts +3 -0
  47. package/lib/common/metaStripHtml.pipe.d.ts +3 -0
  48. package/lib/field.d.ts +260 -1
  49. package/lib/fieldAbstract.d.ts +3 -0
  50. package/lib/fieldBoolean/index.d.ts +3 -0
  51. package/lib/fieldDatetime/index.d.ts +3 -0
  52. package/lib/fieldInput/index.d.ts +4 -0
  53. package/lib/fieldRadio/index.d.ts +3 -0
  54. package/lib/fieldRichtext/index.d.ts +3 -0
  55. package/lib/fieldText/index.d.ts +3 -0
  56. package/lib/fieldUnknown/index.d.ts +3 -0
  57. package/lib/index.d.ts +28 -8
  58. package/lib/services/metaContext/index.d.ts +3 -0
  59. package/lib/services/metaMsg/index.d.ts +3 -0
  60. package/lib/services/metaReference/index.d.ts +3 -0
  61. package/lib/services/metaResource/index.d.ts +3 -0
  62. package/lib/services/metaResource/metaHttpClient.d.ts +3 -0
  63. package/lib/services/metaTracker/index.d.ts +3 -0
  64. package/lib/services/resourceDrafts/index.d.ts +3 -0
  65. package/package.json +19 -7
  66. package/vgip-meta-ui.d.ts +1 -0
  67. package/bundles/vgip-meta-ui.umd.js +0 -6327
  68. package/bundles/vgip-meta-ui.umd.js.map +0 -1
  69. package/esm2015/lib/common/metaAutofocus.directive.js +0 -35
  70. package/esm2015/lib/common/metaIcons.pipe.js +0 -28
  71. package/esm2015/lib/common/metaModel.pipe.js +0 -22
  72. package/esm2015/lib/common/metaNormalizer.js +0 -311
  73. package/esm2015/lib/common/metaStripHtml.pipe.js +0 -18
  74. package/esm2015/lib/common/utils/relativeTimeBuilder.js +0 -51
  75. package/esm2015/lib/field.js +0 -157
  76. package/esm2015/lib/fieldAbstract.js +0 -195
  77. package/esm2015/lib/fieldBoolean/index.js +0 -50
  78. package/esm2015/lib/fieldComposite/index.js +0 -41
  79. package/esm2015/lib/fieldDatetime/index.js +0 -334
  80. package/esm2015/lib/fieldInput/index.js +0 -421
  81. package/esm2015/lib/fieldList/index.js +0 -68
  82. package/esm2015/lib/fieldRadio/index.js +0 -85
  83. package/esm2015/lib/fieldReference/index.js +0 -798
  84. package/esm2015/lib/fieldRichtext/index.js +0 -82
  85. package/esm2015/lib/fieldSelect/index.js +0 -448
  86. package/esm2015/lib/fieldText/index.js +0 -66
  87. package/esm2015/lib/fieldUnknown/index.js +0 -16
  88. package/esm2015/lib/index.js +0 -105
  89. package/esm2015/lib/layout/index.js +0 -155
  90. package/esm2015/lib/refDialog/index.js +0 -133
  91. package/esm2015/lib/resource/index.js +0 -428
  92. package/esm2015/lib/resourceCard/index.js +0 -56
  93. package/esm2015/lib/services/metaContext/index.js +0 -34
  94. package/esm2015/lib/services/metaMsg/index.js +0 -86
  95. package/esm2015/lib/services/metaReference/index.js +0 -98
  96. package/esm2015/lib/services/metaResource/index.js +0 -141
  97. package/esm2015/lib/services/metaResource/metaHttpClient.js +0 -65
  98. package/esm2015/lib/services/metaTracker/index.js +0 -30
  99. package/esm2015/lib/services/resourceDrafts/index.js +0 -70
  100. package/fesm2015/vgip-meta-ui.js +0 -5230
  101. package/fesm2015/vgip-meta-ui.js.map +0 -1
  102. package/lib/fieldComposite/index.d.ts +0 -8
  103. package/lib/fieldList/index.d.ts +0 -10
  104. package/lib/fieldReference/index.d.ts +0 -68
  105. package/lib/fieldSelect/index.d.ts +0 -38
  106. package/lib/layout/index.d.ts +0 -35
  107. package/lib/refDialog/index.d.ts +0 -30
  108. package/lib/resource/index.d.ts +0 -55
  109. package/lib/resourceCard/index.d.ts +0 -15
  110. package/vgip-meta-ui.metadata.json +0 -1
@@ -0,0 +1,198 @@
1
+ /*
2
+ * @Author: Alexander.Vangelov@vonage.com
3
+ * @Date: 2019-09-19 17:34:44
4
+ * @Last Modified by: Alexander.Vangelov@vonage.com
5
+ * @Last Modified time: 2020-04-18 21:18:08
6
+ */
7
+ import { Directive } from '@angular/core';
8
+ // import { ControlValueAccessor } from '@angular/forms';
9
+ import { BehaviorSubject } from 'rxjs';
10
+ import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
11
+ import { metaDark, metaLight } from './common/utils/colorThemes';
12
+ import * as i0 from "@angular/core";
13
+ // eslint-disable-next-line @angular-eslint/directive-class-suffix
14
+ export class FieldAbstract {
15
+ constructor() {
16
+ this.validationAttributes = [];
17
+ this.changeEvent = document.createEvent('MouseEvents');
18
+ this.logicalDisabled = false;
19
+ this.flags = {};
20
+ }
21
+ static setup(instance, parent, meta) { }
22
+ ngAfterViewInit() {
23
+ if (this.elementRef) {
24
+ if (this.integrationCode === 'mocks') {
25
+ this.integrationIcon = 'Brand-icon-vonage';
26
+ }
27
+ else {
28
+ switch (this.integrationCode) {
29
+ case 'office365':
30
+ this.integrationIcon = 'Brand-icon-office-color';
31
+ break;
32
+ case 'sugar':
33
+ this.integrationIcon = 'Brand-icon-sugarcrm-color';
34
+ break;
35
+ case 'msdynamics':
36
+ this.integrationIcon = 'Brand-icon-dynamics-color';
37
+ break;
38
+ default:
39
+ this.integrationIcon = `Brand-icon-${(this.integrationCode || '').toLowerCase()}-color`;
40
+ }
41
+ }
42
+ Object.defineProperty(this.meta, '$optional', {
43
+ value: (typeof (this.default) === 'undefined') && this.isOptional,
44
+ writable: true,
45
+ configurable: true,
46
+ enumerable: false
47
+ });
48
+ this.flags = this.meta.flags || {};
49
+ Object.defineProperty(this.meta, '$hidden', {
50
+ value: !this.isPersistedParent && this.flags.creatable === false,
51
+ writable: true,
52
+ configurable: true,
53
+ enumerable: false
54
+ });
55
+ if (this.theme !== 'inherit') {
56
+ const metaTheme = this.theme === 'dark' ? metaDark : metaLight;
57
+ for (const key of Object.keys(metaTheme.properties)) {
58
+ this.elementRef.nativeElement.style.setProperty(key, metaTheme.properties[key]);
59
+ }
60
+ }
61
+ }
62
+ }
63
+ get isOptional() {
64
+ const baseOptional = !this.meta.unset && !this.validations.required && !this.meta.visible;
65
+ switch (this.meta.type) {
66
+ case 'composite': {
67
+ if (baseOptional) {
68
+ return !this.meta.fields.find((f) => !f.$optional);
69
+ }
70
+ return false;
71
+ }
72
+ case 'list': {
73
+ if (baseOptional) {
74
+ return !(this.parent[this.meta.name] instanceof Array && this.parent[this.meta.name].length) && !this.meta.min;
75
+ }
76
+ return false;
77
+ }
78
+ default: {
79
+ return baseOptional && typeof (this.parent[this.meta.name]) === 'undefined';
80
+ }
81
+ }
82
+ }
83
+ focus() {
84
+ const input = this.uiInput;
85
+ if (input) {
86
+ input.focus();
87
+ }
88
+ }
89
+ modelToValue(m, valueType) {
90
+ if (typeof (m) !== 'undefined') {
91
+ switch (valueType) {
92
+ case 'object': {
93
+ return m ? { id: m.id, label: m.label, type: m.type } : m;
94
+ }
95
+ default: {
96
+ if (m != null) {
97
+ return m.id || m;
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ onSubjectChange(model) {
104
+ if (Object.getOwnPropertyDescriptor(this.parent, '$changeSubject')) {
105
+ const parentChange = {};
106
+ parentChange[this.meta.name] = model;
107
+ this.parentChangeSubject.next(parentChange);
108
+ }
109
+ }
110
+ onModelChange(model) {
111
+ // TODO add resource type logic
112
+ if (this.model instanceof Array) {
113
+ this.parent[this.meta.name] = this.model.map((m) => this.modelToValue(m, this.meta.valueType));
114
+ }
115
+ else {
116
+ this.parent[this.meta.name] = this.modelToValue(model, this.meta.valueType);
117
+ }
118
+ this.onChange.emit(model);
119
+ this.onSubjectChange(model);
120
+ // console.log('onChange', model);
121
+ this.changeEvent.initMouseEvent('change', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
122
+ this.elementRef.nativeElement.dispatchEvent(this.changeEvent);
123
+ if (this.model) {
124
+ this.prevModel = this.model;
125
+ }
126
+ else {
127
+ this.meta.unset = true;
128
+ }
129
+ this.meta.$optional = this.isOptional;
130
+ }
131
+ get parentChangeSubject() {
132
+ if (!Object.getOwnPropertyDescriptor(this.parent, '$changeSubject')) {
133
+ Object.defineProperty(this.parent, '$changeSubject', {
134
+ value: new BehaviorSubject({}).pipe(debounceTime(300), distinctUntilChanged()),
135
+ writable: false,
136
+ enumerable: false
137
+ });
138
+ }
139
+ return this.parent.$changeSubject;
140
+ }
141
+ get isPersistedParent() {
142
+ // eslint-disable-next-line no-underscore-dangle
143
+ return this.parent && this.parent._vgis && (this.parent._vgis.externalId || this.parent._vgis.id);
144
+ }
145
+ clear() {
146
+ delete this.model;
147
+ this.onModelChange(this.model);
148
+ }
149
+ get validations() {
150
+ return this.meta.validations || {};
151
+ }
152
+ get name() {
153
+ return (typeof (this.index) === 'undefined') ? this.meta.name : `${this.meta.name}[${this.index}]`;
154
+ }
155
+ get default() {
156
+ return this.meta.default || this.meta.defaultValue;
157
+ }
158
+ get disabled() {
159
+ // TODO conditions
160
+ return this.logicalDisabled || this.validations.disabled || this.meta.disabled === true || this.flags.disabled
161
+ || (this.flags.updatable === false && this.isPersistedParent);
162
+ }
163
+ get readonly() {
164
+ // TODO conditions
165
+ return !!(this.validations.readonly || this.meta.readonly || (this.flags.updatable === false));
166
+ }
167
+ get sendToServer() {
168
+ return this.isPersistedParent ? (this.flags.updatable !== false) : (this.flags.creatable !== false);
169
+ }
170
+ get uiInput() {
171
+ if (!this.mainInput) {
172
+ this.mainInput = this.elementRef.nativeElement.querySelector('.main:not([type="hidden"]):not(.standalone)');
173
+ }
174
+ return this.mainInput;
175
+ }
176
+ applyValidations() {
177
+ this.validationAttributes.forEach((attribute) => {
178
+ const validation = this.validations[attribute];
179
+ if (validation) {
180
+ this.modelInput.setAttribute(attribute, validation.value || validation);
181
+ }
182
+ });
183
+ }
184
+ }
185
+ FieldAbstract.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldAbstract, deps: [], target: i0.ɵɵFactoryTarget.Directive });
186
+ FieldAbstract.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.2", type: FieldAbstract, ngImport: i0 });
187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldAbstract, decorators: [{
188
+ type: Directive
189
+ }] });
190
+ export class MetaElem {
191
+ }
192
+ export class MetaElemDisableadble {
193
+ disable() {
194
+ console.log(this.cssmodifier);
195
+ this.elementRef.nativeElement.classList.remove(this.cssmodifier);
196
+ }
197
+ }
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRBYnN0cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGEtdWkvc3JjL2xpYi9maWVsZEFic3RyYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUEyQyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYseURBQXlEO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBUWpFLGtFQUFrRTtBQUNsRSxNQUFNLE9BQWdCLGFBQWE7SUFGbkM7UUFpQkUseUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBRzFCLGdCQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVsRCxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUV4QixVQUFLLEdBQVEsRUFBRSxDQUFDO0tBb0xqQjtJQWxMQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUM7SUFFeEMsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssT0FBTyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsZUFBZSxHQUFHLG1CQUFtQixDQUFDO2FBQzVDO2lCQUFNO2dCQUNMLFFBQVEsSUFBSSxDQUFDLGVBQWUsRUFBRTtvQkFDNUIsS0FBSyxXQUFXO3dCQUNkLElBQUksQ0FBQyxlQUFlLEdBQUcseUJBQXlCLENBQUM7d0JBQ2pELE1BQU07b0JBQ1IsS0FBSyxPQUFPO3dCQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsMkJBQTJCLENBQUM7d0JBQ25ELE1B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QUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0MsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLENBQUM7YUFDekU7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzBHQXpNbUIsYUFBYTs4RkFBYixhQUFhOzJGQUFiLGFBQWE7a0JBRmxDLFNBQVM7O0FBK01WLE1BQU0sT0FBTyxRQUFRO0NBR3BCO0FBRUQsTUFBTSxPQUFnQixvQkFBb0I7SUFLeEMsT0FBTztRQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBAQXV0aG9yOiBBbGV4YW5kZXIuVmFuZ2Vsb3ZAdm9uYWdlLmNvbSBcbiAqIEBEYXRlOiAyMDE5LTA5LTE5IDE3OjM0OjQ0IFxuICogQExhc3QgTW9kaWZpZWQgYnk6IEFsZXhhbmRlci5WYW5nZWxvdkB2b25hZ2UuY29tXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDIwLTA0LTE4IDIxOjE4OjA4XG4gKi9cblxuaW1wb3J0IHsgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCwgRXZlbnRFbWl0dGVyLCBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbi8vIGltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgbWV0YURhcmssIG1ldGFMaWdodCB9IGZyb20gJy4vY29tbW9uL3V0aWxzL2NvbG9yVGhlbWVzJztcblxuZXhwb3J0IGludGVyZmFjZSBJTWV0YUZpZWxkPFQgZXh0ZW5kcyBGaWVsZEFic3RyYWN0PiB7XG4gIG1ldGE6IGFueTtcbiAgbW9kZWw6IGFueTtcbn1cblxuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaWVsZEFic3RyYWN0IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7IC8vIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBtb2RlbDogYW55O1xuICBtZXRhOiBhbnk7XG4gIGluZGV4OiBudW1iZXI7XG4gIHBhcmVudDogYW55O1xuICBpbnRlZ3JhdGlvbkNvZGU6IHN0cmluZztcbiAgaW50ZWdyYXRpb25JY29uOiBzdHJpbmc7XG4gIHJlc291cmNlVHlwZTogc3RyaW5nO1xuICBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBtb2RlbElucHV0OiBIVE1MSW5wdXRFbGVtZW50O1xuICBtb2RlbENvbnRyb2w6IEhUTUxJbnB1dEVsZW1lbnQ7XG4gIG1haW5JbnB1dDogSFRNTElucHV0RWxlbWVudDtcbiAga2V5TGlzdGVuZXJBY3RpdmU6IGJvb2xlYW47XG4gIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgb25MZWF2ZTogRXZlbnRFbWl0dGVyPGFueT47XG4gIHZhbGlkYXRpb25BdHRyaWJ1dGVzID0gW107XG4gIHByZXZpZXc6IGJvb2xlYW47XG4gIHByZXZNb2RlbDogYW55O1xuICBjaGFuZ2VFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpO1xuICBtZXRhUmVzb3VyY2VTZXJ2aWNlOiBhbnk7XG4gIGxvZ2ljYWxEaXNhYmxlZCA9IGZhbHNlO1xuICB0aGVtZTogc3RyaW5nO1xuICBmbGFnczogYW55ID0ge307XG5cbiAgc3RhdGljIHNldHVwKGluc3RhbmNlLCBwYXJlbnQsIG1ldGEpIHsgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5lbGVtZW50UmVmKSB7XG4gICAgICBpZiAodGhpcy5pbnRlZ3JhdGlvbkNvZGUgPT09ICdtb2NrcycpIHtcbiAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSAnQnJhbmQtaWNvbi12b25hZ2UnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmludGVncmF0aW9uQ29kZSkge1xuICAgICAgICAgIGNhc2UgJ29mZmljZTM2NSc6XG4gICAgICAgICAgICB0aGlzLmludGVncmF0aW9uSWNvbiA9ICdCcmFuZC1pY29uLW9mZmljZS1jb2xvcic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdzdWdhcic6XG4gICAgICAgICAgICB0aGlzLmludGVncmF0aW9uSWNvbiA9ICdCcmFuZC1pY29uLXN1Z2FyY3JtLWNvbG9yJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21zZHluYW1pY3MnOlxuICAgICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSAnQnJhbmQtaWNvbi1keW5hbWljcy1jb2xvcic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSBgQnJhbmQtaWNvbi0keyh0aGlzLmludGVncmF0aW9uQ29kZSB8fCAnJykudG9Mb3dlckNhc2UoKX0tY29sb3JgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5tZXRhLCAnJG9wdGlvbmFsJywge1xuICAgICAgICB2YWx1ZTogKHR5cGVvZih0aGlzLmRlZmF1bHQpID09PSAndW5kZWZpbmVkJykgJiYgdGhpcy5pc09wdGlvbmFsLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICB0aGlzLmZsYWdzID0gdGhpcy5tZXRhLmZsYWdzIHx8IHt9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubWV0YSwgJyRoaWRkZW4nLCB7XG4gICAgICAgIHZhbHVlOiAhdGhpcy5pc1BlcnNpc3RlZFBhcmVudCAmJiB0aGlzLmZsYWdzLmNyZWF0YWJsZSA9PT0gZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMudGhlbWUgIT09ICdpbmhlcml0Jykge1xuICAgICAgICBjb25zdCBtZXRhVGhlbWUgPSB0aGlzLnRoZW1lID09PSAnZGFyaycgPyBtZXRhRGFyayA6IG1ldGFMaWdodDtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWV0YVRoZW1lLnByb3BlcnRpZXMpKSB7XG4gICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCBtZXRhVGhlbWUucHJvcGVydGllc1trZXldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpc09wdGlvbmFsKCkge1xuICAgIGNvbnN0IGJhc2VPcHRpb25hbCA9ICF0aGlzLm1ldGEudW5zZXQgJiYgIXRoaXMudmFsaWRhdGlvbnMucmVxdWlyZWQgJiYgIXRoaXMubWV0YS52aXNpYmxlO1xuICAgIHN3aXRjaCAodGhpcy5tZXRhLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2NvbXBvc2l0ZSc6IHtcbiAgICAgICAgaWYgKGJhc2VPcHRpb25hbCkge1xuICAgICAgICAgIHJldHVybiAhdGhpcy5tZXRhLmZpZWxkcy5maW5kKChmKSA9PiAhZi4kb3B0aW9uYWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2xpc3QnOiB7XG4gICAgICAgIGlmIChiYXNlT3B0aW9uYWwpIHtcbiAgICAgICAgICByZXR1cm4gISh0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gaW5zdGFuY2VvZiBBcnJheSAmJiB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0ubGVuZ3RoKSAmJiAhdGhpcy5tZXRhLm1pbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiBiYXNlT3B0aW9uYWwgJiYgdHlwZW9mKHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSkgPT09ICd1bmRlZmluZWQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy51aUlucHV0O1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBtb2RlbFRvVmFsdWUobSwgdmFsdWVUeXBlKSB7XG4gICAgaWYgKHR5cGVvZihtKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHN3aXRjaCAodmFsdWVUeXBlKSB7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6IHtcbiAgICAgICAgICByZXR1cm4gbSA/IHsgaWQ6IG0uaWQsIGxhYmVsOiBtLmxhYmVsLCB0eXBlOiBtLnR5cGUgfSA6IG07XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGlmIChtICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBtLmlkIHx8IG07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25TdWJqZWN0Q2hhbmdlKG1vZGVsKSB7XG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcy5wYXJlbnQsICckY2hhbmdlU3ViamVjdCcpKSB7XG4gICAgICBjb25zdCBwYXJlbnRDaGFuZ2U6IGFueSA9IHt9O1xuICAgICAgcGFyZW50Q2hhbmdlW3RoaXMubWV0YS5uYW1lXSA9IG1vZGVsO1xuICAgICAgdGhpcy5wYXJlbnRDaGFuZ2VTdWJqZWN0Lm5leHQocGFyZW50Q2hhbmdlKTtcbiAgICB9XG4gIH1cblxuICBvbk1vZGVsQ2hhbmdlKG1vZGVsKSB7XG4gICAgLy8gVE9ETyBhZGQgcmVzb3VyY2UgdHlwZSBsb2dpY1xuICAgIGlmICh0aGlzLm1vZGVsIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IHRoaXMubW9kZWwubWFwKChtKSA9PiB0aGlzLm1vZGVsVG9WYWx1ZShtLCB0aGlzLm1ldGEudmFsdWVUeXBlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IHRoaXMubW9kZWxUb1ZhbHVlKG1vZGVsLCB0aGlzLm1ldGEudmFsdWVUeXBlKTtcbiAgICB9XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KG1vZGVsKTtcbiAgICB0aGlzLm9uU3ViamVjdENoYW5nZShtb2RlbCk7XG4gICAgLy8gY29uc29sZS5sb2coJ29uQ2hhbmdlJywgbW9kZWwpO1xuICAgIHRoaXMuY2hhbmdlRXZlbnQuaW5pdE1vdXNlRXZlbnQoJ2NoYW5nZScsIHRydWUsIHRydWUsIHdpbmRvdywgMCwgMCwgMCwgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpO1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQodGhpcy5jaGFuZ2VFdmVudCk7XG4gICAgaWYgKHRoaXMubW9kZWwpIHtcbiAgICAgIHRoaXMucHJldk1vZGVsID0gdGhpcy5tb2RlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXRhLnVuc2V0ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5tZXRhLiRvcHRpb25hbCA9IHRoaXMuaXNPcHRpb25hbDtcbiAgfVxuXG4gIGdldCBwYXJlbnRDaGFuZ2VTdWJqZWN0KCkge1xuICAgIGlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLnBhcmVudCwgJyRjaGFuZ2VTdWJqZWN0JykpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnBhcmVudCwgJyRjaGFuZ2VTdWJqZWN0Jywge1xuICAgICAgICB2YWx1ZTogbmV3IEJlaGF2aW9yU3ViamVjdCh7fSkucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSksXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuJGNoYW5nZVN1YmplY3Q7XG4gIH1cblxuICBnZXQgaXNQZXJzaXN0ZWRQYXJlbnQoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgcmV0dXJuIHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50Ll92Z2lzICYmICh0aGlzLnBhcmVudC5fdmdpcy5leHRlcm5hbElkIHx8IHRoaXMucGFyZW50Ll92Z2lzLmlkICk7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gIH1cblxuICBnZXQgdmFsaWRhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YS52YWxpZGF0aW9ucyB8fCB7fTtcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiAodHlwZW9mICh0aGlzLmluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpID8gdGhpcy5tZXRhLm5hbWUgOiBgJHt0aGlzLm1ldGEubmFtZX1bJHt0aGlzLmluZGV4fV1gO1xuICB9XG5cbiAgZ2V0IGRlZmF1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YS5kZWZhdWx0IHx8IHRoaXMubWV0YS5kZWZhdWx0VmFsdWU7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgLy8gVE9ETyBjb25kaXRpb25zXG4gICAgcmV0dXJuIHRoaXMubG9naWNhbERpc2FibGVkIHx8IHRoaXMudmFsaWRhdGlvbnMuZGlzYWJsZWQgfHwgdGhpcy5tZXRhLmRpc2FibGVkID09PSB0cnVlIHx8IHRoaXMuZmxhZ3MuZGlzYWJsZWRcbiAgICAgIHx8ICh0aGlzLmZsYWdzLnVwZGF0YWJsZSA9PT0gZmFsc2UgJiYgdGhpcy5pc1BlcnNpc3RlZFBhcmVudCk7XG4gIH1cblxuICBnZXQgcmVhZG9ubHkoKSB7XG4gICAgLy8gVE9ETyBjb25kaXRpb25zXG4gICAgcmV0dXJuICEhKHRoaXMudmFsaWRhdGlvbnMucmVhZG9ubHkgfHwgdGhpcy5tZXRhLnJlYWRvbmx5IHx8ICh0aGlzLmZsYWdzLnVwZGF0YWJsZSA9PT0gZmFsc2UpKTtcbiAgfVxuXG4gIGdldCBzZW5kVG9TZXJ2ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNQZXJzaXN0ZWRQYXJlbnQgPyAodGhpcy5mbGFncy51cGRhdGFibGUgIT09IGZhbHNlKSA6ICh0aGlzLmZsYWdzLmNyZWF0YWJsZSAhPT0gZmFsc2UpO1xuICB9XG5cbiAgZ2V0IHVpSW5wdXQoKSB7XG4gICAgaWYgKCF0aGlzLm1haW5JbnB1dCkge1xuICAgICAgdGhpcy5tYWluSW5wdXQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubWFpbjpub3QoW3R5cGU9XCJoaWRkZW5cIl0pOm5vdCguc3RhbmRhbG9uZSknKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWFpbklucHV0O1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVZhbGlkYXRpb25zKCkge1xuICAgIHRoaXMudmFsaWRhdGlvbkF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy52YWxpZGF0aW9uc1thdHRyaWJ1dGVdO1xuICAgICAgaWYgKHZhbGlkYXRpb24pIHtcbiAgICAgICAgdGhpcy5tb2RlbElucHV0LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbGlkYXRpb24udmFsdWUgfHwgdmFsaWRhdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgTWV0YUVsZW0ge1xuICBjc3NlbGVtOiBzdHJpbmc7XG4gIG1ldGE6IGFueTtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE1ldGFFbGVtRGlzYWJsZWFkYmxlIGltcGxlbWVudHMgTWV0YUVsZW0ge1xuICBjc3Ntb2RpZmllcjogc3RyaW5nO1xuICBhYnN0cmFjdCBtZXRhOiBhbnk7XG4gIGFic3RyYWN0IGNzc2VsZW06IHN0cmluZztcbiAgYWJzdHJhY3QgZWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgZGlzYWJsZSgpIHtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmNzc21vZGlmaWVyKTtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuY3NzbW9kaWZpZXIpO1xuICB9XG59XG5cbiJdfQ==
@@ -0,0 +1,51 @@
1
+ /*
2
+ * @Author: Alexander.Vangelov@vonage.com
3
+ * @Date: 2019-09-19 17:34:49
4
+ * @Last Modified by: Alexander.Vangelov@vonage.com
5
+ * @Last Modified time: 2020-03-26 12:57:51
6
+ */
7
+ import { Component, Input } from '@angular/core';
8
+ import { ControlContainer, NgForm } from '@angular/forms';
9
+ import { FieldAbstract } from '../fieldAbstract';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "@angular/common";
12
+ import * as i2 from "@angular/forms";
13
+ // import { tMetaField } from '../../../metaTypes/tMetaField'
14
+ export class FieldBoolean extends FieldAbstract {
15
+ ngOnInit() {
16
+ const origValue = this.parent[this.meta.name];
17
+ Object.defineProperty(this.parent, this.meta.name, {
18
+ set: (value) => {
19
+ if (typeof (value) === 'object' && value !== null) {
20
+ value = value.value || value.id || false;
21
+ }
22
+ if (!value && (typeof (this.prevModel) === 'boolean') && this.isPersistedParent) {
23
+ value = false;
24
+ }
25
+ this.model = (value === true) || (value != null && (['true', '1'].indexOf(value.toString().toLowerCase()) !== -1));
26
+ this.value = this.model;
27
+ this.meta.$optional = this.isOptional;
28
+ },
29
+ get: () => this.value,
30
+ enumerable: this.sendToServer,
31
+ configurable: true
32
+ });
33
+ if (typeof (origValue) !== 'undefined') {
34
+ this.parent[this.meta.name] = origValue;
35
+ }
36
+ if (typeof (this.meta.default) !== 'undefined' && typeof (this.model) === 'undefined' && !(this.meta.default instanceof Array)) {
37
+ setTimeout(() => {
38
+ this.parent[this.meta.name] = this.meta.default;
39
+ }, 0);
40
+ }
41
+ }
42
+ }
43
+ FieldBoolean.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldBoolean, deps: null, target: i0.ɵɵFactoryTarget.Component });
44
+ FieldBoolean.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: FieldBoolean, selector: "ng-component", inputs: { meta: "meta" }, usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n {{ model ? '\u2714' : '\u2718'}}\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element\">\n\t<div class=\"Vlt-switch\" *ngIf=\"meta.subtype === 'switch'\">\n\t\t<label style='vertical-align: middle;'>\n\t\t\t<input class='model' type=\"checkbox\" [(ngModel)]='parent[meta.name]' [name]='name'/>\n\t\t\t<span class=\"Vlt-switch__slider\"></span>\n\t\t\t<span style='margin-left: 60px; line-height: 30px; white-space: nowrap;'>{{meta.label || meta.name}}</span>\n\t\t</label>\n\t</div>\n\t<div class=\"Vlt-checkbox\" *ngIf=\"meta.subtype !== 'switch'\">\n\t\t<label style='cursor: pointer;'>\n\t\t\t<span class=\"Vlt-checkbox__button\">\n\t\t\t\t<input class='model' type=\"checkbox\" [(ngModel)]='parent[meta.name]' [name]='name'/>\n\t\t\t\t<span class=\"Vlt-checkbox__icon\"></span>\n\t\t\t</span>\n\t\t\t{{meta.label || meta.name}}\n\t\t</label>\n\t</div>\n\t<small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>\n", styles: [".Vlt-checkbox+.Vlt-form__element__hint{margin-top:4px}.Vlt-checkbox__button input:not(:checked)~.Vlt-checkbox__icon{background-color:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color)}.Vlt-checkbox__button input:checked~.Vlt-checkbox__icon{border-color:var(--vgip-meta-input-border-color)}.Vlt-checkbox__button input:hover:not(:checked)~.Vlt-checkbox__icon,.Vlt-checkbox__button input:focus:not(:checked)~.Vlt-checkbox__icon,.Vlt-checkbox__button input:active:not(:checked)~.Vlt-checkbox__icon{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-checkbox__button input:hover:checked~.Vlt-checkbox__icon,.Vlt-checkbox__button input:focus:checked~.Vlt-checkbox__icon,.Vlt-checkbox__button input:active:checked~.Vlt-checkbox__icon{border-color:var(--vgip-meta-input-accent-color)}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImport: i0, type: FieldBoolean, decorators: [{
46
+ type: Component,
47
+ args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n {{ model ? '\u2714' : '\u2718'}}\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element\">\n\t<div class=\"Vlt-switch\" *ngIf=\"meta.subtype === 'switch'\">\n\t\t<label style='vertical-align: middle;'>\n\t\t\t<input class='model' type=\"checkbox\" [(ngModel)]='parent[meta.name]' [name]='name'/>\n\t\t\t<span class=\"Vlt-switch__slider\"></span>\n\t\t\t<span style='margin-left: 60px; line-height: 30px; white-space: nowrap;'>{{meta.label || meta.name}}</span>\n\t\t</label>\n\t</div>\n\t<div class=\"Vlt-checkbox\" *ngIf=\"meta.subtype !== 'switch'\">\n\t\t<label style='cursor: pointer;'>\n\t\t\t<span class=\"Vlt-checkbox__button\">\n\t\t\t\t<input class='model' type=\"checkbox\" [(ngModel)]='parent[meta.name]' [name]='name'/>\n\t\t\t\t<span class=\"Vlt-checkbox__icon\"></span>\n\t\t\t</span>\n\t\t\t{{meta.label || meta.name}}\n\t\t</label>\n\t</div>\n\t<small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>\n", styles: [".Vlt-checkbox+.Vlt-form__element__hint{margin-top:4px}.Vlt-checkbox__button input:not(:checked)~.Vlt-checkbox__icon{background-color:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color)}.Vlt-checkbox__button input:checked~.Vlt-checkbox__icon{border-color:var(--vgip-meta-input-border-color)}.Vlt-checkbox__button input:hover:not(:checked)~.Vlt-checkbox__icon,.Vlt-checkbox__button input:focus:not(:checked)~.Vlt-checkbox__icon,.Vlt-checkbox__button input:active:not(:checked)~.Vlt-checkbox__icon{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-checkbox__button input:hover:checked~.Vlt-checkbox__icon,.Vlt-checkbox__button input:focus:checked~.Vlt-checkbox__icon,.Vlt-checkbox__button input:active:checked~.Vlt-checkbox__icon{border-color:var(--vgip-meta-input-accent-color)}\n"] }]
48
+ }], propDecorators: { meta: [{
49
+ type: Input
50
+ }] } });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRCb29sZWFuL2luZGV4LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL2ZpZWxkQm9vbGVhbi92aWV3Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBQ2pELDZEQUE2RDtBQU83RCxNQUFNLE9BQU8sWUFBYSxTQUFRLGFBQWE7SUFJN0MsUUFBUTtRQUNOLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDakQsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7b0JBQ2pELEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDO2lCQUMxQztnQkFDRCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7b0JBQzlFLEtBQUssR0FBRyxLQUFLLENBQUM7aUJBQ2Y7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDeEMsQ0FBQztZQUNELEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSztZQUNyQixVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDN0IsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxPQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssV0FBVyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7U0FDekM7UUFDRCxJQUFJLE9BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFdBQVcsSUFBSSxPQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLFlBQVksS0FBSyxDQUFDLEVBQUU7WUFDNUgsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDbEQsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1A7SUFDSCxDQUFDOzt5R0E5QlUsWUFBWTs2RkFBWixZQUFZLHFHQ2xCekIsNm5DQXlCQSx3MkNEVGlCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzJGQUV4RCxZQUFZO2tCQUx4QixTQUFTO29DQUdPLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzhCQUcxRCxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQEF1dGhvcjogQWxleGFuZGVyLlZhbmdlbG92QHZvbmFnZS5jb20gXG4gKiBARGF0ZTogMjAxOS0wOS0xOSAxNzozNDo0OSBcbiAqIEBMYXN0IE1vZGlmaWVkIGJ5OiBBbGV4YW5kZXIuVmFuZ2Vsb3ZAdm9uYWdlLmNvbVxuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAyMC0wMy0yNiAxMjo1Nzo1MVxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBGaWVsZEFic3RyYWN0IH0gZnJvbSAnLi4vZmllbGRBYnN0cmFjdCc7XG4vLyBpbXBvcnQgeyB0TWV0YUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vbWV0YVR5cGVzL3RNZXRhRmllbGQnXG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vdmlldy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGUuc2NzcyddLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkQm9vbGVhbiBleHRlbmRzIEZpZWxkQWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBtZXRhOiBhbnk7XG4gIHZhbHVlOiBib29sZWFuO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IG9yaWdWYWx1ZSA9IHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wYXJlbnQsIHRoaXMubWV0YS5uYW1lLCB7XG4gICAgICBzZXQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZSB8fCB2YWx1ZS5pZCB8fCBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbHVlICYmICh0eXBlb2YodGhpcy5wcmV2TW9kZWwpID09PSAnYm9vbGVhbicpICYmIHRoaXMuaXNQZXJzaXN0ZWRQYXJlbnQpIHtcbiAgICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kZWwgPSAodmFsdWUgPT09IHRydWUpIHx8ICh2YWx1ZSAhPSBudWxsICYmIChbJ3RydWUnLCAnMSddLmluZGV4T2YodmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubW9kZWw7XG4gICAgICAgIHRoaXMubWV0YS4kb3B0aW9uYWwgPSB0aGlzLmlzT3B0aW9uYWw7XG4gICAgICB9LFxuICAgICAgZ2V0OiAoKSA9PiB0aGlzLnZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdGhpcy5zZW5kVG9TZXJ2ZXIsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mKG9yaWdWYWx1ZSkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBvcmlnVmFsdWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YodGhpcy5tZXRhLmRlZmF1bHQpICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YodGhpcy5tb2RlbCkgPT09ICd1bmRlZmluZWQnICYmICEodGhpcy5tZXRhLmRlZmF1bHQgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSB0aGlzLm1ldGEuZGVmYXVsdDtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLXByZXZpZXcnICpuZ0lmPSdwcmV2aWV3ICYmIG1vZGVsJz5cbiAgPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLWxhYmVsJz57e21ldGEubGFiZWwgfHwgbWV0YS5uYW1lfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLXZhbHVlIF9fZ3UnPlxuICAgIHt7IG1vZGVsID8gJ+KclCcgOiAn4pyYJ319XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPSchcHJldmlldycgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudFwiPlxuXHQ8ZGl2IGNsYXNzPVwiVmx0LXN3aXRjaFwiICpuZ0lmPVwibWV0YS5zdWJ0eXBlID09PSAnc3dpdGNoJ1wiPlxuXHRcdDxsYWJlbCBzdHlsZT0ndmVydGljYWwtYWxpZ246IG1pZGRsZTsnPlxuXHRcdFx0PGlucHV0IGNsYXNzPSdtb2RlbCcgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09J3BhcmVudFttZXRhLm5hbWVdJyBbbmFtZV09J25hbWUnLz5cblx0XHRcdDxzcGFuIGNsYXNzPVwiVmx0LXN3aXRjaF9fc2xpZGVyXCI+PC9zcGFuPlxuXHRcdFx0PHNwYW4gc3R5bGU9J21hcmdpbi1sZWZ0OiA2MHB4OyBsaW5lLWhlaWdodDogMzBweDsgd2hpdGUtc3BhY2U6IG5vd3JhcDsnPnt7bWV0YS5sYWJlbCB8fCBtZXRhLm5hbWV9fTwvc3Bhbj5cblx0XHQ8L2xhYmVsPlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cIlZsdC1jaGVja2JveFwiICpuZ0lmPVwibWV0YS5zdWJ0eXBlICE9PSAnc3dpdGNoJ1wiPlxuXHRcdDxsYWJlbCBzdHlsZT0nY3Vyc29yOiBwb2ludGVyOyc+XG5cdFx0XHQ8c3BhbiBjbGFzcz1cIlZsdC1jaGVja2JveF9fYnV0dG9uXCI+XG5cdFx0XHRcdDxpbnB1dCBjbGFzcz0nbW9kZWwnIHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPSdwYXJlbnRbbWV0YS5uYW1lXScgW25hbWVdPSduYW1lJy8+XG5cdFx0XHRcdDxzcGFuIGNsYXNzPVwiVmx0LWNoZWNrYm94X19pY29uXCI+PC9zcGFuPlxuXHRcdFx0PC9zcGFuPlxuXHRcdFx0e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19XG5cdFx0PC9sYWJlbD5cblx0PC9kaXY+XG5cdDxzbWFsbCAqbmdJZj0nbWV0YS5oaW50JyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19oaW50XCI+e3ttZXRhLmhpbnR9fTwvc21hbGw+XG48L2Rpdj5cbiJdfQ==