@solidev/data 0.0.8 → 0.1.0

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 (158) hide show
  1. package/esm2022/lib/auth/auth-interceptor.service.mjs +92 -0
  2. package/{esm2020 → esm2022}/lib/auth/auth.service.mjs +1 -1
  3. package/esm2022/lib/data/data-backend.mjs +135 -0
  4. package/esm2022/lib/data/data-model.mjs +292 -0
  5. package/esm2022/lib/dispedit/choice.pipe.mjs +81 -0
  6. package/{esm2020 → esm2022}/lib/dispedit/dispedit/dispedit.component.mjs +10 -5
  7. package/esm2022/lib/dispedit/factor.pipe.mjs +83 -0
  8. package/esm2022/lib/dispedit/factorc.pipe.mjs +101 -0
  9. package/esm2022/lib/dispedit/fkselect/fkselect.component.mjs +143 -0
  10. package/esm2022/lib/dispedit/flags/flags.component.mjs +141 -0
  11. package/esm2022/lib/dispedit/m2mselect/m2mselect.component.mjs +319 -0
  12. package/esm2022/lib/dispedit/richedit/richedit.component.mjs +127 -0
  13. package/esm2022/lib/dispedit/sdelete/sdelete.component.mjs +94 -0
  14. package/esm2022/lib/messages/message-zone/message-zone.component.mjs +58 -0
  15. package/esm2022/lib/messages/message.service.mjs +152 -0
  16. package/esm2022/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +66 -0
  17. package/esm2022/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +65 -0
  18. package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +113 -0
  19. package/esm2022/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +30 -0
  20. package/esm2022/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +41 -0
  21. package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +41 -0
  22. package/esm2022/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +22 -0
  23. package/esm2022/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +50 -0
  24. package/esm2022/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +64 -0
  25. package/esm2022/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +47 -0
  26. package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +57 -0
  27. package/esm2022/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +52 -0
  28. package/esm2022/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +41 -0
  29. package/esm2022/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +175 -0
  30. package/esm2022/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +51 -0
  31. package/esm2022/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +31 -0
  32. package/esm2022/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +71 -0
  33. package/esm2022/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +50 -0
  34. package/esm2022/lib/modellist/model-list.service.mjs +158 -0
  35. package/esm2022/lib/routing/breadcrumb/breadcrumb.component.mjs +143 -0
  36. package/esm2022/lib/updates/update/update.component.mjs +18 -0
  37. package/esm2022/lib/updates/update.service.mjs +59 -0
  38. package/esm2022/lib/uploader/ng-file-drop.directive.mjs +82 -0
  39. package/esm2022/lib/uploader/ng-file-select.directive.mjs +52 -0
  40. package/esm2022/lib/uploader/ngx-uploader.module.mjs +18 -0
  41. package/esm2022/lib/utils/tab-memory.service.mjs +81 -0
  42. package/{fesm2020 → fesm2022}/solidev-data.mjs +153 -149
  43. package/fesm2022/solidev-data.mjs.map +1 -0
  44. package/lib/dispedit/dispedit/dispedit.component.d.ts +1 -1
  45. package/lib/dispedit/fkselect/fkselect.component.d.ts +1 -1
  46. package/lib/dispedit/flags/flags.component.d.ts +1 -1
  47. package/lib/dispedit/m2mselect/m2mselect.component.d.ts +1 -1
  48. package/lib/dispedit/richedit/richedit.component.d.ts +1 -1
  49. package/lib/dispedit/sdelete/sdelete.component.d.ts +1 -1
  50. package/lib/messages/message-zone/message-zone.component.d.ts +1 -1
  51. package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +1 -1
  52. package/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.d.ts +1 -1
  53. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.d.ts +1 -1
  54. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.d.ts +1 -1
  55. package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.d.ts +1 -1
  56. package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.d.ts +1 -1
  57. package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.d.ts +1 -1
  58. package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.d.ts +1 -1
  59. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.d.ts +1 -1
  60. package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.d.ts +1 -1
  61. package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.d.ts +1 -1
  62. package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.d.ts +1 -1
  63. package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.d.ts +1 -1
  64. package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.d.ts +1 -1
  65. package/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.d.ts +1 -1
  66. package/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.d.ts +1 -1
  67. package/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.d.ts +1 -1
  68. package/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.d.ts +1 -1
  69. package/lib/routing/breadcrumb/breadcrumb.component.d.ts +1 -1
  70. package/lib/uploader/ng-file-drop.directive.d.ts +1 -1
  71. package/lib/uploader/ng-file-select.directive.d.ts +1 -1
  72. package/package.json +7 -13
  73. package/esm2020/lib/auth/auth-interceptor.service.mjs +0 -91
  74. package/esm2020/lib/data/data-backend.mjs +0 -134
  75. package/esm2020/lib/data/data-model.mjs +0 -291
  76. package/esm2020/lib/dispedit/choice.pipe.mjs +0 -79
  77. package/esm2020/lib/dispedit/factor.pipe.mjs +0 -81
  78. package/esm2020/lib/dispedit/factorc.pipe.mjs +0 -99
  79. package/esm2020/lib/dispedit/fkselect/fkselect.component.mjs +0 -142
  80. package/esm2020/lib/dispedit/flags/flags.component.mjs +0 -140
  81. package/esm2020/lib/dispedit/m2mselect/m2mselect.component.mjs +0 -318
  82. package/esm2020/lib/dispedit/richedit/richedit.component.mjs +0 -126
  83. package/esm2020/lib/dispedit/sdelete/sdelete.component.mjs +0 -93
  84. package/esm2020/lib/messages/message-zone/message-zone.component.mjs +0 -57
  85. package/esm2020/lib/messages/message.service.mjs +0 -151
  86. package/esm2020/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +0 -65
  87. package/esm2020/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +0 -64
  88. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +0 -112
  89. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +0 -29
  90. package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +0 -40
  91. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +0 -40
  92. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +0 -21
  93. package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +0 -49
  94. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +0 -63
  95. package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +0 -46
  96. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +0 -56
  97. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +0 -51
  98. package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +0 -40
  99. package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +0 -174
  100. package/esm2020/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +0 -50
  101. package/esm2020/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +0 -30
  102. package/esm2020/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +0 -70
  103. package/esm2020/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +0 -49
  104. package/esm2020/lib/modellist/model-list.service.mjs +0 -157
  105. package/esm2020/lib/routing/breadcrumb/breadcrumb.component.mjs +0 -142
  106. package/esm2020/lib/updates/update/update.component.mjs +0 -17
  107. package/esm2020/lib/updates/update.service.mjs +0 -58
  108. package/esm2020/lib/uploader/ng-file-drop.directive.mjs +0 -81
  109. package/esm2020/lib/uploader/ng-file-select.directive.mjs +0 -51
  110. package/esm2020/lib/uploader/ngx-uploader.module.mjs +0 -17
  111. package/esm2020/lib/utils/tab-memory.service.mjs +0 -80
  112. package/fesm2015/solidev-data.mjs +0 -6224
  113. package/fesm2015/solidev-data.mjs.map +0 -1
  114. package/fesm2020/solidev-data.mjs.map +0 -1
  115. /package/{esm2020 → esm2022}/lib/auth/jwt.mjs +0 -0
  116. /package/{esm2020 → esm2022}/lib/data/data-collection.mjs +0 -0
  117. /package/{esm2020 → esm2022}/lib/data/data-collection.mock.mjs +0 -0
  118. /package/{esm2020 → esm2022}/lib/data/data-parameters.mjs +0 -0
  119. /package/{esm2020 → esm2022}/lib/data/data-query.mjs +0 -0
  120. /package/{esm2020 → esm2022}/lib/data/data-query.mock.mjs +0 -0
  121. /package/{esm2020 → esm2022}/lib/data/fields/base.mjs +0 -0
  122. /package/{esm2020 → esm2022}/lib/data/fields/boolean.mjs +0 -0
  123. /package/{esm2020 → esm2022}/lib/data/fields/computed.mjs +0 -0
  124. /package/{esm2020 → esm2022}/lib/data/fields/datetime.mjs +0 -0
  125. /package/{esm2020 → esm2022}/lib/data/fields/index.mjs +0 -0
  126. /package/{esm2020 → esm2022}/lib/data/fields/numbers.mjs +0 -0
  127. /package/{esm2020 → esm2022}/lib/data/fields/primaryfield.mjs +0 -0
  128. /package/{esm2020 → esm2022}/lib/data/fields/relations.mjs +0 -0
  129. /package/{esm2020 → esm2022}/lib/data/fields/stringfields.mjs +0 -0
  130. /package/{esm2020 → esm2022}/lib/dispedit/dispedit/dispedit.constants.mjs +0 -0
  131. /package/{esm2020 → esm2022}/lib/modellist/model-list-fields/model-list-field-header/messages.mjs +0 -0
  132. /package/{esm2020 → esm2022}/lib/modellist/model-list-fields/model-list-fields.mjs +0 -0
  133. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/filtertypes.mjs +0 -0
  134. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.mjs +0 -0
  135. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.mjs +0 -0
  136. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.mjs +0 -0
  137. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.mjs +0 -0
  138. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.mjs +0 -0
  139. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.mjs +0 -0
  140. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.mjs +0 -0
  141. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.mjs +0 -0
  142. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.mjs +0 -0
  143. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +0 -0
  144. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +0 -0
  145. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.mjs +0 -0
  146. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.mjs +0 -0
  147. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/model-list-filter.mjs +0 -0
  148. /package/{esm2020 → esm2022}/lib/modellist/model-list-filters/model-list-filters.mjs +0 -0
  149. /package/{esm2020 → esm2022}/lib/modellist/model-list-paginator/model-list-paginator.mjs +0 -0
  150. /package/{esm2020 → esm2022}/lib/modellist/model-list-sorter/model-list-sorter.mjs +0 -0
  151. /package/{esm2020 → esm2022}/lib/routing/routing.mjs +0 -0
  152. /package/{esm2020 → esm2022}/lib/uploader/index.mjs +0 -0
  153. /package/{esm2020 → esm2022}/lib/uploader/interfaces.mjs +0 -0
  154. /package/{esm2020 → esm2022}/lib/uploader/ngx-uploader.class.mjs +0 -0
  155. /package/{esm2020 → esm2022}/lib/utils/slugify.mjs +0 -0
  156. /package/{esm2020 → esm2022}/lib/utils/template.mjs +0 -0
  157. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  158. /package/{esm2020 → esm2022}/solidev-data.mjs +0 -0
@@ -0,0 +1,101 @@
1
+ import { DEFAULT_CURRENCY_CODE, Inject, LOCALE_ID, Pipe, } from '@angular/core';
2
+ import { isValue, strToNumber } from './factor.pipe';
3
+ import { formatCurrency, getCurrencySymbol } from '@angular/common';
4
+ import * as i0 from "@angular/core";
5
+ class FactorcPipe {
6
+ constructor(_locale, _defaultCurrencyCode = 'EUR') {
7
+ this._locale = _locale;
8
+ this._defaultCurrencyCode = _defaultCurrencyCode;
9
+ }
10
+ transform(value, field, currencyCode, display, digitsInfo, locale) {
11
+ if (!value)
12
+ return null;
13
+ const fvalue = value[field];
14
+ if (!isValue(fvalue))
15
+ return null;
16
+ locale = locale || this._locale;
17
+ let currency = currencyCode || this._defaultCurrencyCode;
18
+ if (!display) {
19
+ display = 'symbol';
20
+ }
21
+ if (display !== 'code') {
22
+ if (display === 'symbol' || display === 'symbol-narrow') {
23
+ currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);
24
+ }
25
+ else {
26
+ currency = display;
27
+ }
28
+ }
29
+ const manager = value.FM(field);
30
+ const factor = manager.factor || 1;
31
+ const num = strToNumber(fvalue);
32
+ return formatCurrency(num / factor, locale, currency, currencyCode, digitsInfo);
33
+ }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: FactorcPipe, deps: [{ token: LOCALE_ID }, { token: DEFAULT_CURRENCY_CODE }], target: i0.ɵɵFactoryTarget.Pipe }); }
35
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: FactorcPipe, isStandalone: true, name: "factorc" }); }
36
+ }
37
+ export { FactorcPipe };
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: FactorcPipe, decorators: [{
39
+ type: Pipe,
40
+ args: [{
41
+ name: 'factorc',
42
+ standalone: true,
43
+ }]
44
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
45
+ type: Inject,
46
+ args: [LOCALE_ID]
47
+ }] }, { type: undefined, decorators: [{
48
+ type: Inject,
49
+ args: [DEFAULT_CURRENCY_CODE]
50
+ }] }]; } });
51
+ class PFactorcPipe {
52
+ constructor(_locale, _defaultCurrencyCode = 'EUR') {
53
+ this._locale = _locale;
54
+ this._defaultCurrencyCode = _defaultCurrencyCode;
55
+ }
56
+ transform(value, model, field, currencyCode, display, digitsInfo, locale) {
57
+ if (!model)
58
+ return null;
59
+ if (!value)
60
+ return null;
61
+ // Use value from input, not from model
62
+ const fvalue = value; // (model as any)[field];
63
+ if (!isValue(fvalue)) {
64
+ return null;
65
+ }
66
+ locale = locale || this._locale;
67
+ let currency = currencyCode || this._defaultCurrencyCode;
68
+ if (!display) {
69
+ display = 'symbol';
70
+ }
71
+ if (display !== 'code') {
72
+ if (display === 'symbol' || display === 'symbol-narrow') {
73
+ currency = getCurrencySymbol(currency, display === 'symbol' ? 'wide' : 'narrow', locale);
74
+ }
75
+ else {
76
+ currency = display;
77
+ }
78
+ }
79
+ const manager = model.FM(field);
80
+ const factor = manager.factor || 1;
81
+ const num = strToNumber(fvalue);
82
+ return formatCurrency(num / factor, locale, currency, currencyCode, digitsInfo);
83
+ }
84
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: PFactorcPipe, deps: [{ token: LOCALE_ID }, { token: DEFAULT_CURRENCY_CODE }], target: i0.ɵɵFactoryTarget.Pipe }); }
85
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: PFactorcPipe, isStandalone: true, name: "pfactorc" }); }
86
+ }
87
+ export { PFactorcPipe };
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: PFactorcPipe, decorators: [{
89
+ type: Pipe,
90
+ args: [{
91
+ name: 'pfactorc',
92
+ standalone: true,
93
+ }]
94
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
95
+ type: Inject,
96
+ args: [LOCALE_ID]
97
+ }] }, { type: undefined, decorators: [{
98
+ type: Inject,
99
+ args: [DEFAULT_CURRENCY_CODE]
100
+ }] }]; } });
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yYy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL2Rpc3BlZGl0L2ZhY3RvcmMucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxHQUVMLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFcEUsTUFJYSxXQUFXO0lBQ3RCLFlBQzZCLE9BQWUsRUFDSCx1QkFBK0IsS0FBSztRQURoRCxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ0gseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFnQjtJQUMxRSxDQUFDO0lBRUosU0FBUyxDQUNQLEtBQWUsRUFDZixLQUFhLEVBQ2IsWUFBcUIsRUFDckIsT0FBc0QsRUFDdEQsVUFBbUIsRUFDbkIsTUFBZTtRQUVmLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUksS0FBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbEMsTUFBTSxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2hDLElBQUksUUFBUSxHQUFXLFlBQVksSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDakUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU8sR0FBRyxRQUFRLENBQUM7U0FDcEI7UUFDRCxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7WUFDdEIsSUFBSSxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxlQUFlLEVBQUU7Z0JBQ3ZELFFBQVEsR0FBRyxpQkFBaUIsQ0FDMUIsUUFBUSxFQUNSLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUN4QyxNQUFNLENBQ1AsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLFFBQVEsR0FBRyxPQUFRLENBQUM7YUFDckI7U0FDRjtRQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsTUFBTSxNQUFNLEdBQUksT0FBZSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDNUMsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sY0FBYyxDQUNuQixHQUFHLEdBQUcsTUFBTSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsWUFBWSxFQUNaLFVBQVUsQ0FDWCxDQUFDO0lBQ0osQ0FBQzs4R0E1Q1UsV0FBVyxrQkFFWixTQUFTLGFBQ1QscUJBQXFCOzRHQUhwQixXQUFXOztTQUFYLFdBQVc7MkZBQVgsV0FBVztrQkFKdkIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsU0FBUztvQkFDZixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQUdJLE1BQU07MkJBQUMsU0FBUzs7MEJBQ2hCLE1BQU07MkJBQUMscUJBQXFCOztBQTRDakMsTUFJYSxZQUFZO0lBQ3ZCLFlBQzZCLE9BQWUsRUFDSCx1QkFBK0IsS0FBSztRQURoRCxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ0gseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFnQjtJQUMxRSxDQUFDO0lBRUosU0FBUyxDQUNQLEtBQXlDLEVBQ3pDLEtBQWUsRUFDZixLQUFhLEVBQ2IsWUFBcUIsRUFDckIsT0FBc0QsRUFDdEQsVUFBbUIsRUFDbkIsTUFBZTtRQUVmLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4Qix1Q0FBdUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMseUJBQXlCO1FBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNoQyxJQUFJLFFBQVEsR0FBVyxZQUFZLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPLEdBQUcsUUFBUSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxPQUFPLEtBQUssTUFBTSxFQUFFO1lBQ3RCLElBQUksT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssZUFBZSxFQUFFO2dCQUN2RCxRQUFRLEdBQUcsaUJBQWlCLENBQzFCLFFBQVEsRUFDUixPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFDeEMsTUFBTSxDQUNQLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxRQUFRLEdBQUcsT0FBUSxDQUFDO2FBQ3JCO1NBQ0Y7UUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sTUFBTSxHQUFJLE9BQWUsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQzVDLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxPQUFPLGNBQWMsQ0FDbkIsR0FBRyxHQUFHLE1BQU0sRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLFlBQVksRUFDWixVQUFVLENBQ1gsQ0FBQztJQUNKLENBQUM7OEdBakRVLFlBQVksa0JBRWIsU0FBUyxhQUNULHFCQUFxQjs0R0FIcEIsWUFBWTs7U0FBWixZQUFZOzJGQUFaLFlBQVk7a0JBSnhCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBR0ksTUFBTTsyQkFBQyxTQUFTOzswQkFDaEIsTUFBTTsyQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBERUZBVUxUX0NVUlJFTkNZX0NPREUsXG4gIEluamVjdCxcbiAgTE9DQUxFX0lELFxuICBQaXBlLFxuICBQaXBlVHJhbnNmb3JtLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGFNb2RlbCB9IGZyb20gJy4uL2RhdGEvZGF0YS1tb2RlbCc7XG5pbXBvcnQgeyBpc1ZhbHVlLCBzdHJUb051bWJlciB9IGZyb20gJy4vZmFjdG9yLnBpcGUnO1xuaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3ksIGdldEN1cnJlbmN5U3ltYm9sIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQFBpcGUoe1xuICBuYW1lOiAnZmFjdG9yYycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZhY3RvcmNQaXBlPFQgZXh0ZW5kcyBEYXRhTW9kZWw+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwcml2YXRlIF9sb2NhbGU6IHN0cmluZyxcbiAgICBASW5qZWN0KERFRkFVTFRfQ1VSUkVOQ1lfQ09ERSkgcHJpdmF0ZSBfZGVmYXVsdEN1cnJlbmN5Q29kZTogc3RyaW5nID0gJ0VVUidcbiAgKSB7fVxuXG4gIHRyYW5zZm9ybShcbiAgICB2YWx1ZTogVCB8IG51bGwsXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBjdXJyZW5jeUNvZGU/OiBzdHJpbmcsXG4gICAgZGlzcGxheT86ICdjb2RlJyB8ICdzeW1ib2wnIHwgJ3N5bWJvbC1uYXJyb3cnIHwgc3RyaW5nLFxuICAgIGRpZ2l0c0luZm8/OiBzdHJpbmcsXG4gICAgbG9jYWxlPzogc3RyaW5nXG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGZ2YWx1ZSA9ICh2YWx1ZSBhcyBhbnkpW2ZpZWxkXTtcbiAgICBpZiAoIWlzVmFsdWUoZnZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgbG9jYWxlID0gbG9jYWxlIHx8IHRoaXMuX2xvY2FsZTtcbiAgICBsZXQgY3VycmVuY3k6IHN0cmluZyA9IGN1cnJlbmN5Q29kZSB8fCB0aGlzLl9kZWZhdWx0Q3VycmVuY3lDb2RlO1xuICAgIGlmICghZGlzcGxheSkge1xuICAgICAgZGlzcGxheSA9ICdzeW1ib2wnO1xuICAgIH1cbiAgICBpZiAoZGlzcGxheSAhPT0gJ2NvZGUnKSB7XG4gICAgICBpZiAoZGlzcGxheSA9PT0gJ3N5bWJvbCcgfHwgZGlzcGxheSA9PT0gJ3N5bWJvbC1uYXJyb3cnKSB7XG4gICAgICAgIGN1cnJlbmN5ID0gZ2V0Q3VycmVuY3lTeW1ib2woXG4gICAgICAgICAgY3VycmVuY3ksXG4gICAgICAgICAgZGlzcGxheSA9PT0gJ3N5bWJvbCcgPyAnd2lkZScgOiAnbmFycm93JyxcbiAgICAgICAgICBsb2NhbGVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbmN5ID0gZGlzcGxheSE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWFuYWdlciA9IHZhbHVlLkZNKGZpZWxkKTtcbiAgICBjb25zdCBmYWN0b3IgPSAobWFuYWdlciBhcyBhbnkpLmZhY3RvciB8fCAxO1xuICAgIGNvbnN0IG51bSA9IHN0clRvTnVtYmVyKGZ2YWx1ZSk7XG4gICAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KFxuICAgICAgbnVtIC8gZmFjdG9yLFxuICAgICAgbG9jYWxlLFxuICAgICAgY3VycmVuY3ksXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICBkaWdpdHNJbmZvXG4gICAgKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdwZmFjdG9yYycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFBGYWN0b3JjUGlwZTxUIGV4dGVuZHMgRGF0YU1vZGVsPiBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KExPQ0FMRV9JRCkgcHJpdmF0ZSBfbG9jYWxlOiBzdHJpbmcsXG4gICAgQEluamVjdChERUZBVUxUX0NVUlJFTkNZX0NPREUpIHByaXZhdGUgX2RlZmF1bHRDdXJyZW5jeUNvZGU6IHN0cmluZyA9ICdFVVInXG4gICkge31cblxuICB0cmFuc2Zvcm0oXG4gICAgdmFsdWU6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwsXG4gICAgbW9kZWw6IFQgfCBudWxsLFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgY3VycmVuY3lDb2RlPzogc3RyaW5nLFxuICAgIGRpc3BsYXk/OiAnY29kZScgfCAnc3ltYm9sJyB8ICdzeW1ib2wtbmFycm93JyB8IHN0cmluZyxcbiAgICBkaWdpdHNJbmZvPzogc3RyaW5nLFxuICAgIGxvY2FsZT86IHN0cmluZ1xuICApOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIW1vZGVsKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICAvLyBVc2UgdmFsdWUgZnJvbSBpbnB1dCwgbm90IGZyb20gbW9kZWxcbiAgICBjb25zdCBmdmFsdWUgPSB2YWx1ZTsgLy8gKG1vZGVsIGFzIGFueSlbZmllbGRdO1xuICAgIGlmICghaXNWYWx1ZShmdmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbG9jYWxlID0gbG9jYWxlIHx8IHRoaXMuX2xvY2FsZTtcbiAgICBsZXQgY3VycmVuY3k6IHN0cmluZyA9IGN1cnJlbmN5Q29kZSB8fCB0aGlzLl9kZWZhdWx0Q3VycmVuY3lDb2RlO1xuICAgIGlmICghZGlzcGxheSkge1xuICAgICAgZGlzcGxheSA9ICdzeW1ib2wnO1xuICAgIH1cbiAgICBpZiAoZGlzcGxheSAhPT0gJ2NvZGUnKSB7XG4gICAgICBpZiAoZGlzcGxheSA9PT0gJ3N5bWJvbCcgfHwgZGlzcGxheSA9PT0gJ3N5bWJvbC1uYXJyb3cnKSB7XG4gICAgICAgIGN1cnJlbmN5ID0gZ2V0Q3VycmVuY3lTeW1ib2woXG4gICAgICAgICAgY3VycmVuY3ksXG4gICAgICAgICAgZGlzcGxheSA9PT0gJ3N5bWJvbCcgPyAnd2lkZScgOiAnbmFycm93JyxcbiAgICAgICAgICBsb2NhbGVcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbmN5ID0gZGlzcGxheSE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWFuYWdlciA9IG1vZGVsLkZNKGZpZWxkKTtcbiAgICBjb25zdCBmYWN0b3IgPSAobWFuYWdlciBhcyBhbnkpLmZhY3RvciB8fCAxO1xuICAgIGNvbnN0IG51bSA9IHN0clRvTnVtYmVyKGZ2YWx1ZSk7XG4gICAgcmV0dXJuIGZvcm1hdEN1cnJlbmN5KFxuICAgICAgbnVtIC8gZmFjdG9yLFxuICAgICAgbG9jYWxlLFxuICAgICAgY3VycmVuY3ksXG4gICAgICBjdXJyZW5jeUNvZGUsXG4gICAgICBkaWdpdHNJbmZvXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,143 @@
1
+ import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import { debounceTime, distinctUntilChanged, Subject, takeUntil, } from 'rxjs';
3
+ import { switchMap } from 'rxjs/operators';
4
+ import { ReactiveFormsModule, UntypedFormControl } from '@angular/forms';
5
+ import { CommonModule } from '@angular/common';
6
+ import { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "@angular/forms";
10
+ import * as i3 from "@ng-bootstrap/ng-bootstrap";
11
+ class FkselectComponent {
12
+ constructor() {
13
+ this.edit = false;
14
+ this.update = false;
15
+ this.filter = {};
16
+ this.mode = 'auto';
17
+ this.search = 'search';
18
+ // Display
19
+ this.label = '';
20
+ this.placeholder = '';
21
+ this.inputClasses = [];
22
+ this.selected = new EventEmitter();
23
+ this.cancelled = new EventEmitter();
24
+ this.cleared = new EventEmitter();
25
+ this.searchFn = this._search.bind(this);
26
+ this.displayFn = this._display.bind(this);
27
+ this._subscription = new Subject();
28
+ }
29
+ ngOnDestroy() {
30
+ this._subscription.next();
31
+ this._subscription.complete();
32
+ }
33
+ ngOnInit() {
34
+ // Create queryset if not given
35
+ // queryset is create through model
36
+ if (!this.queryset && this.collection) {
37
+ this.queryset = this.collection.queryset();
38
+ }
39
+ else if (!this.queryset && this.model && this.model._collection) {
40
+ this.collection = this.model._collection;
41
+ this.queryset = this.collection.queryset();
42
+ }
43
+ this.fc = new UntypedFormControl('');
44
+ this.fc.valueChanges
45
+ .pipe(takeUntil(this._subscription), distinctUntilChanged())
46
+ .subscribe((value) => {
47
+ if (value) {
48
+ this.selected.emit(value);
49
+ }
50
+ });
51
+ if (this.display) {
52
+ if (this.display && typeof this.display === 'string') {
53
+ this._tpl = (model) => `${model[this.display]}`;
54
+ }
55
+ else if (this.display && typeof this.display === 'function') {
56
+ this._tpl = this.display.bind(this);
57
+ }
58
+ }
59
+ else {
60
+ this._tpl = (model) => `${model['name'] ||
61
+ model['title'] ||
62
+ model['id']}`;
63
+ }
64
+ }
65
+ clearAction() {
66
+ this.cleared.emit();
67
+ }
68
+ /**
69
+ * Display function. Uses descfield or desc tpl (lodash template using model fields).
70
+ */
71
+ _display(x) {
72
+ if (x) {
73
+ if (x._display) {
74
+ if (x._display instanceof Function) {
75
+ return x._display();
76
+ }
77
+ else {
78
+ return x._display;
79
+ }
80
+ }
81
+ if (this._tpl) {
82
+ return this._tpl(x);
83
+ }
84
+ }
85
+ return '';
86
+ }
87
+ _search(text$) {
88
+ return text$.pipe(takeUntil(this._subscription), debounceTime(750), distinctUntilChanged(), switchMap((term) => {
89
+ const f = {};
90
+ for (const k of Object.keys(this.filter)) {
91
+ if (this.filter[k] !== null || this.filter[k] !== undefined) {
92
+ f[k] = this.filter[k];
93
+ }
94
+ }
95
+ f[this.search] = term;
96
+ const qs = this.queryset;
97
+ qs.filter(f, true);
98
+ return qs.get();
99
+ }));
100
+ }
101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: FkselectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
102
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: FkselectComponent, isStandalone: true, selector: "data-fkselect", inputs: { model: "model", field: "field", edit: "edit", value: "value", queryset: "queryset", collection: "collection", update: "update", filter: "filter", mode: "mode", display: "display", search: "search", label: "label", placeholder: "placeholder", inputClasses: "inputClasses" }, outputs: { selected: "selected", cancelled: "cancelled", cleared: "cleared" }, ngImport: i0, template: "\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"clearAction()\"></i></div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: NgbTypeaheadModule }, { kind: "directive", type: i3.NgbTypeahead, selector: "input[ngbTypeahead]", inputs: ["autocomplete", "container", "editable", "focusFirst", "inputFormatter", "ngbTypeahead", "resultFormatter", "resultTemplate", "showHint", "placement", "popperOptions", "popupClass"], outputs: ["selectItem"], exportAs: ["ngbTypeahead"] }] }); }
103
+ }
104
+ export { FkselectComponent };
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: FkselectComponent, decorators: [{
106
+ type: Component,
107
+ args: [{ selector: 'data-fkselect', standalone: true, imports: [CommonModule, ReactiveFormsModule, NgbTypeaheadModule], template: "\n<div class=\"form-group\">\n <label *ngIf=\"label\">{{label}}</label>\n <div class=\"input-group\">\n <input class=\"form-control\" [formControl]=\"fc\" [placeholder]=\"placeholder\" [ngbTypeahead]=\"searchFn\" [editable]=\"false\" [focusFirst]=\"true\" [inputFormatter]=\"displayFn\" [resultFormatter]=\"displayFn\" (keyup.escape)=\"cancelled.emit()\">\n <div class=\"input-group-text\"><i class=\"bi bi-trash float-end pointer\" (click)=\"clearAction()\"></i></div>\n </div>\n</div>" }]
108
+ }], ctorParameters: function () { return []; }, propDecorators: { model: [{
109
+ type: Input
110
+ }], field: [{
111
+ type: Input
112
+ }], edit: [{
113
+ type: Input
114
+ }], value: [{
115
+ type: Input
116
+ }], queryset: [{
117
+ type: Input
118
+ }], collection: [{
119
+ type: Input
120
+ }], update: [{
121
+ type: Input
122
+ }], filter: [{
123
+ type: Input
124
+ }], mode: [{
125
+ type: Input
126
+ }], display: [{
127
+ type: Input
128
+ }], search: [{
129
+ type: Input
130
+ }], label: [{
131
+ type: Input
132
+ }], placeholder: [{
133
+ type: Input
134
+ }], inputClasses: [{
135
+ type: Input
136
+ }], selected: [{
137
+ type: Output
138
+ }], cancelled: [{
139
+ type: Output
140
+ }], cleared: [{
141
+ type: Output
142
+ }] } });
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmtzZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL2Rpc3BlZGl0L2Zrc2VsZWN0L2Zrc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9kaXNwZWRpdC9ma3NlbGVjdC9ma3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBRXBCLE9BQU8sRUFDUCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7OztBQUloRSxNQU9hLGlCQUFpQjtJQWdDNUI7UUExQmdCLFNBQUksR0FBRyxLQUFLLENBQUM7UUFNYixXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLFdBQU0sR0FBZSxFQUFFLENBQUM7UUFDeEIsU0FBSSxHQUF1QyxNQUFNLENBQUM7UUFFbEQsV0FBTSxHQUFHLFFBQVEsQ0FBQztRQUVsQyxVQUFVO1FBQ00sVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGlCQUFZLEdBQXNCLEVBQUUsQ0FBQztRQUVwQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUssQ0FBQztRQUNqQyxjQUFTLEdBQUcsSUFBSSxZ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LEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLENBQUM7MEVBTWhELEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUVVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBRVUsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFHVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFFVyxRQUFRO3NCQUF4QixNQUFNO2dCQUNVLFNBQVM7c0JBQXpCLE1BQU07Z0JBQ1UsT0FBTztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGEtbW9kZWwnO1xuaW1wb3J0IHsgRmlsdGVyRGF0YSwgUXVlcnlzZXQgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGEtcXVlcnknO1xuaW1wb3J0IHsgQ29sbGVjdGlvbiB9IGZyb20gJy4uLy4uL2RhdGEvZGF0YS1jb2xsZWN0aW9uJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdiVHlwZWFoZWFkTW9kdWxlIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG5leHBvcnQgdHlwZSBUcGxGdW48VCBleHRlbmRzIERhdGFNb2RlbD4gPSAoZGF0YTogVCkgPT4gc3RyaW5nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRhLWZrc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zrc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmtzZWxlY3QuY29tcG9uZW50LnNhc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgTmdiVHlwZWFoZWFkTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgRmtzZWxlY3RDb21wb25lbnQ8VCBleHRlbmRzIERhdGFNb2RlbCwgUiBleHRlbmRzIERhdGFNb2RlbD5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAvLyBNb2RlbCBmaWVsZCB2YWx1ZSAmIHVwZGF0ZSBkYXRhXG4gIEBJbnB1dCgpIHB1YmxpYyBtb2RlbD86IFQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBmaWVsZD86IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGVkaXQgPSBmYWxzZTtcbiAgLy8gUmF3IHZhbHVlXG4gIEBJbnB1dCgpIHB1YmxpYyB2YWx1ZT86IFI7XG5cbiAgQElucHV0KCkgcHVibGljIHF1ZXJ5c2V0PzogUXVlcnlzZXQ8Uj47XG4gIEBJbnB1dCgpIHB1YmxpYyBjb2xsZWN0aW9uPzogQ29sbGVjdGlvbjxSPjtcbiAgQElucHV0KCkgcHVibGljIHVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgZmlsdGVyOiBGaWx0ZXJEYXRhID0ge307XG4gIEBJbnB1dCgpIHB1YmxpYyBtb2RlOiAnYXV0b2NvbXBsZXRlJyB8ICdzZWxlY3QnIHwgJ2F1dG8nID0gJ2F1dG8nO1xuICBASW5wdXQoKSBwdWJsaWMgZGlzcGxheT86IHN0cmluZyB8IFRwbEZ1bjxSPjtcbiAgQElucHV0KCkgcHVibGljIHNlYXJjaCA9ICdzZWFyY2gnO1xuXG4gIC8vIERpc3BsYXlcbiAgQElucHV0KCkgcHVibGljIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlciA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgaW5wdXRDbGFzc2VzOiBzdHJpbmdbXSB8IHN0cmluZyA9IFtdO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcHVibGljIGNsZWFyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIHB1YmxpYyBmYyE6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgcHVibGljIHNlYXJjaEZuID0gdGhpcy5fc2VhcmNoLmJpbmQodGhpcyk7XG4gIHB1YmxpYyBkaXNwbGF5Rm4gPSB0aGlzLl9kaXNwbGF5LmJpbmQodGhpcyk7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX3RwbCE6IFRwbEZ1bjxSPjtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5uZXh0KCk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gQ3JlYXRlIHF1ZXJ5c2V0IGlmIG5vdCBnaXZlblxuICAgIC8vIHF1ZXJ5c2V0IGlzIGNyZWF0ZSB0aHJvdWdoIG1vZGVsXG4gICAgaWYgKCF0aGlzLnF1ZXJ5c2V0ICYmIHRoaXMuY29sbGVjdGlvbikge1xuICAgICAgdGhpcy5xdWVyeXNldCA9IHRoaXMuY29sbGVjdGlvbi5xdWVyeXNldCgpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucXVlcnlzZXQgJiYgdGhpcy5tb2RlbCAmJiB0aGlzLm1vZGVsLl9jb2xsZWN0aW9uKSB7XG4gICAgICB0aGlzLmNvbGxlY3Rpb24gPSB0aGlzLm1vZGVsLl9jb2xsZWN0aW9uO1xuICAgICAgdGhpcy5xdWVyeXNldCA9IHRoaXMuY29sbGVjdGlvbi5xdWVyeXNldCgpO1xuICAgIH1cbiAgICB0aGlzLmZjID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJyk7XG4gICAgdGhpcy5mYy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9zdWJzY3JpcHRpb24pLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgaWYgKHRoaXMuZGlzcGxheSkge1xuICAgICAgaWYgKHRoaXMuZGlzcGxheSAmJiB0eXBlb2YgdGhpcy5kaXNwbGF5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLl90cGwgPSAobW9kZWw6IFIpID0+IGAkeyhtb2RlbCBhcyBhbnkpW3RoaXMuZGlzcGxheSBhcyBzdHJpbmddfWA7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGlzcGxheSAmJiB0eXBlb2YgdGhpcy5kaXNwbGF5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuX3RwbCA9IHRoaXMuZGlzcGxheS5iaW5kKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90cGwgPSAobW9kZWw6IFIpID0+XG4gICAgICAgIGAke1xuICAgICAgICAgIChtb2RlbCBhcyBhbnkpWyduYW1lJ10gfHxcbiAgICAgICAgICAobW9kZWwgYXMgYW55KVsndGl0bGUnXSB8fFxuICAgICAgICAgIChtb2RlbCBhcyBhbnkpWydpZCddXG4gICAgICAgIH1gO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbGVhckFjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyZWQuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgZnVuY3Rpb24uIFVzZXMgZGVzY2ZpZWxkIG9yIGRlc2MgdHBsIChsb2Rhc2ggdGVtcGxhdGUgdXNpbmcgbW9kZWwgZmllbGRzKS5cbiAgICovXG4gIHByaXZhdGUgX2Rpc3BsYXkoeDogYW55KTogYW55IHtcbiAgICBpZiAoeCkge1xuICAgICAgaWYgKHguX2Rpc3BsYXkpIHtcbiAgICAgICAgaWYgKHguX2Rpc3BsYXkgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgIHJldHVybiB4Ll9kaXNwbGF5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHguX2Rpc3BsYXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl90cGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RwbCh4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VhcmNoKHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0ZXh0JC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuX3N1YnNjcmlwdGlvbiksXG4gICAgICBkZWJvdW5jZVRpbWUoNzUwKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBzd2l0Y2hNYXAoKHRlcm0pID0+IHtcbiAgICAgICAgY29uc3QgZjogYW55ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh0aGlzLmZpbHRlcikpIHtcbiAgICAgICAgICBpZiAodGhpcy5maWx0ZXJba10gIT09IG51bGwgfHwgdGhpcy5maWx0ZXJba10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZltrXSA9IHRoaXMuZmlsdGVyW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmW3RoaXMuc2VhcmNoXSA9IHRlcm07XG4gICAgICAgIGNvbnN0IHFzID0gdGhpcy5xdWVyeXNldCBhcyBRdWVyeXNldDxhbnk+O1xuICAgICAgICBxcy5maWx0ZXIoZiwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBxcy5nZXQoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIiwiXG48ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWx9fTwvbGFiZWw+XG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFtmb3JtQ29udHJvbF09XCJmY1wiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFtuZ2JUeXBlYWhlYWRdPVwic2VhcmNoRm5cIiBbZWRpdGFibGVdPVwiZmFsc2VcIiBbZm9jdXNGaXJzdF09XCJ0cnVlXCIgW2lucHV0Rm9ybWF0dGVyXT1cImRpc3BsYXlGblwiIFtyZXN1bHRGb3JtYXR0ZXJdPVwiZGlzcGxheUZuXCIgKGtleXVwLmVzY2FwZSk9XCJjYW5jZWxsZWQuZW1pdCgpXCI+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj48aSBjbGFzcz1cImJpIGJpLXRyYXNoIGZsb2F0LWVuZCBwb2ludGVyXCIgKGNsaWNrKT1cImNsZWFyQWN0aW9uKClcIj48L2k+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
@@ -0,0 +1,141 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { debounceTime, firstValueFrom, Subject, takeUntil, } from 'rxjs';
4
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../messages/message.service";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "@angular/forms";
9
+ class FlagsComponent {
10
+ constructor(_msg) {
11
+ this._msg = _msg;
12
+ this.field = 'flags';
13
+ // FIXME: make all flags endpoint as optional parameters
14
+ this.get_flags_endpoint = 'get_flags';
15
+ this.edit = false;
16
+ this.editable = true;
17
+ this.free = false;
18
+ this.create = true;
19
+ this.action = false; // if set to true, use add_flag and remove_flag model actions
20
+ this.curflags = [];
21
+ this.txtflag = '';
22
+ this.selflag = '';
23
+ this.flaglist = [];
24
+ this._subscriptions$ = new Subject();
25
+ }
26
+ ngOnDestroy() {
27
+ this._subscriptions$.next();
28
+ this._subscriptions$.complete();
29
+ }
30
+ async ngOnInit() {
31
+ if (!this.flags && this.model._collection) {
32
+ this.flags = this.model._collection.action(null, 'GET', this.get_flags_endpoint);
33
+ }
34
+ if (this.model && this.field && this.model[this.field]) {
35
+ this.curflags = this.model[this.field];
36
+ }
37
+ else {
38
+ console.warn('Model or field problem in flagsfield component');
39
+ this.curflags = [];
40
+ }
41
+ this.ft = new FormControl('');
42
+ this.fs = new FormControl('');
43
+ this.fs.valueChanges
44
+ .pipe(takeUntil(this._subscriptions$), debounceTime(250))
45
+ .subscribe((value) => {
46
+ if (value) {
47
+ this.addFlag(value);
48
+ }
49
+ });
50
+ }
51
+ async addFreeFlag() {
52
+ await this.addFlag(this.ft.value);
53
+ }
54
+ async addFlag(flag) {
55
+ if (!this.flagPresent(flag)) {
56
+ this.curflags.push(flag);
57
+ if (this.action) {
58
+ try {
59
+ await firstValueFrom(this.model.action('POST', 'add_flag', { body: { flag } }));
60
+ this._msg.success('Flag enregistré avec succès');
61
+ }
62
+ catch (e) {
63
+ this._msg.error('Erreur lors de la sauvegarde', e);
64
+ }
65
+ }
66
+ else {
67
+ await this.update();
68
+ }
69
+ }
70
+ }
71
+ async update() {
72
+ this.model[this.field] = this.curflags;
73
+ try {
74
+ await firstValueFrom(this.model.update([this.field]));
75
+ this.fs.setValue('', { emitEvent: false });
76
+ this.ft.setValue('', { emitEvent: false });
77
+ this._msg.success('Flag enregistré avec succès');
78
+ }
79
+ catch (error) {
80
+ this._msg.error('Erreur lors de la sauvegarde', `API Return : ${error}`, error._body);
81
+ }
82
+ }
83
+ flagPresent(flag) {
84
+ return this.curflags.findIndex((f) => flag === f) !== -1;
85
+ }
86
+ async removeFlag(flag) {
87
+ this.curflags.splice(this.curflags.findIndex((f) => flag === f), 1);
88
+ if (this.action) {
89
+ try {
90
+ await firstValueFrom(this.model.action('POST', 'remove_flag', { body: { flag } }));
91
+ this._msg.success('Removed');
92
+ }
93
+ catch (e) {
94
+ this._msg.error('Removing flag failed', e);
95
+ }
96
+ }
97
+ else {
98
+ await this.update();
99
+ }
100
+ }
101
+ async toggleEdit() {
102
+ if (this.editable) {
103
+ if (!this.edit) {
104
+ this.flaglist = await firstValueFrom(this.flags);
105
+ this.edit = true;
106
+ }
107
+ else {
108
+ this.edit = false;
109
+ }
110
+ }
111
+ else {
112
+ this.edit = false;
113
+ }
114
+ }
115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: FlagsComponent, deps: [{ token: i1.DataMessageService }], target: i0.ɵɵFactoryTarget.Component }); }
116
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: FlagsComponent, isStandalone: true, selector: "data-flags", inputs: { model: "model", field: "field", get_flags_endpoint: "get_flags_endpoint", edit: "edit", editable: "editable", flags: "flags", free: "free", create: "create", action: "action" }, ngImport: i0, template: "\n<dt (click)=\"toggleEdit()\" role=\"button\">\n <ng-content></ng-content>\n</dt>\n<dd *ngIf=\"!edit\" (click)=\"toggleEdit()\" role=\"button\"><span class=\"badge bg-info me-1\" *ngFor=\"let flag of curflags\">{{flag}}</span></dd>\n<dd *ngIf=\"edit\">\n <div class=\"row\">\n <ng-container *ngIf=\"!free\">\n <div class=\"col\">\n <select class=\"form-select form-select-sm\" [formControl]=\"fs\">\n <option *ngFor=\"let flag of flaglist\" [value]=\"flag.flag\">{{flag.flag}}<span class=\"ms-1\" *ngIf=\"flag.count\">({{flag.count}})</span></option>\n </select>\n </div>\n <div class=\"col\" *ngIf=\"create\">\n <input class=\"form-control form-control-sm\" placeholder=\"Nouveau flag\" [formControl]=\"ft\" (keyup.enter)=\"addFreeFlag()\">\n </div>\n </ng-container>\n <ng-container *ngIf=\"free\">\n <div class=\"col-12\">\n <input class=\"form-control form-select-sm\" placeholder=\"Nouveau flag\" [formControl]=\"ft\" (keyup.enter)=\"addFreeFlag()\" (keyup.escape)=\"toggleEdit()\">\n </div>\n </ng-container>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12\"><span class=\"badge bg-info me-1\" *ngFor=\"let flag of curflags\" (click)=\"removeFlag(flag)\" role=\"button\"><i class=\"bi bi-trash me-1\"></i>{{flag}}</span><i class=\"bi bi-x-lg text-muted ms-2\" role=\"button\" (click)=\"toggleEdit()\"></i></div>\n </div>\n</dd>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] }); }
117
+ }
118
+ export { FlagsComponent };
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: FlagsComponent, decorators: [{
120
+ type: Component,
121
+ args: [{ selector: 'data-flags', standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "\n<dt (click)=\"toggleEdit()\" role=\"button\">\n <ng-content></ng-content>\n</dt>\n<dd *ngIf=\"!edit\" (click)=\"toggleEdit()\" role=\"button\"><span class=\"badge bg-info me-1\" *ngFor=\"let flag of curflags\">{{flag}}</span></dd>\n<dd *ngIf=\"edit\">\n <div class=\"row\">\n <ng-container *ngIf=\"!free\">\n <div class=\"col\">\n <select class=\"form-select form-select-sm\" [formControl]=\"fs\">\n <option *ngFor=\"let flag of flaglist\" [value]=\"flag.flag\">{{flag.flag}}<span class=\"ms-1\" *ngIf=\"flag.count\">({{flag.count}})</span></option>\n </select>\n </div>\n <div class=\"col\" *ngIf=\"create\">\n <input class=\"form-control form-control-sm\" placeholder=\"Nouveau flag\" [formControl]=\"ft\" (keyup.enter)=\"addFreeFlag()\">\n </div>\n </ng-container>\n <ng-container *ngIf=\"free\">\n <div class=\"col-12\">\n <input class=\"form-control form-select-sm\" placeholder=\"Nouveau flag\" [formControl]=\"ft\" (keyup.enter)=\"addFreeFlag()\" (keyup.escape)=\"toggleEdit()\">\n </div>\n </ng-container>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12\"><span class=\"badge bg-info me-1\" *ngFor=\"let flag of curflags\" (click)=\"removeFlag(flag)\" role=\"button\"><i class=\"bi bi-trash me-1\"></i>{{flag}}</span><i class=\"bi bi-x-lg text-muted ms-2\" role=\"button\" (click)=\"toggleEdit()\"></i></div>\n </div>\n</dd>" }]
122
+ }], ctorParameters: function () { return [{ type: i1.DataMessageService }]; }, propDecorators: { model: [{
123
+ type: Input
124
+ }], field: [{
125
+ type: Input
126
+ }], get_flags_endpoint: [{
127
+ type: Input
128
+ }], edit: [{
129
+ type: Input
130
+ }], editable: [{
131
+ type: Input
132
+ }], flags: [{
133
+ type: Input
134
+ }], free: [{
135
+ type: Input
136
+ }], create: [{
137
+ type: Input
138
+ }], action: [{
139
+ type: Input
140
+ }] } });
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL2Rpc3BlZGl0L2ZsYWdzL2ZsYWdzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEvc3JjL2xpYi9kaXNwZWRpdC9mbGFncy9mbGFncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFDTCxZQUFZLEVBQ1osY0FBYyxFQUVkLE9BQU8sRUFDUCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBUWxFLE1BT2EsY0FBYztJQW1CekIsWUFBb0IsSUFBd0I7UUFBeEIsU0FBSSxHQUFKLElBQUksQ0FBb0I7UUFqQjVCLFVBQUssR0FBRyxPQUFPLENBQUM7UUFDaEMsd0RBQXdEO1FBQ3hDLHVCQUFrQixHQUFHLFdBQVcsQ0FBQztRQUNqQyxTQUFJLEdBQVksS0FBSyxDQUFDO1FBQ3RCLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFFekIsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUNiLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxXQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsNkRBQTZEO1FBR3RGLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFDeEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixhQUFRLEdBQWdCLEVBQUUsQ0FBQztRQUMxQixvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFQyxDQUFDO0lBRXpDLFdBQVc7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QUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVU7UUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzthQUNsQjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQzthQUNuQjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUNuQjtJQUNILENBQUM7OEdBM0hVLGNBQWM7a0dBQWQsY0FBYyxrUUN6QjNCLHU1Q0EwQksseURETE8sWUFBWSwrUEFBRSxtQkFBbUI7O1NBSWhDLGNBQWM7MkZBQWQsY0FBYztrQkFQMUIsU0FBUzsrQkFDRSxZQUFZLGNBQ1YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDO3lHQUs1QixLQUFLO3NCQUFwQixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBRVUsa0JBQWtCO3NCQUFqQyxLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGEtbW9kZWwnO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBmaXJzdFZhbHVlRnJvbSxcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgdGFrZVVudGlsLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0YU1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbWVzc2FnZXMvbWVzc2FnZS5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBJRmxhZ0l0ZW0ge1xuICBmbGFnOiBzdHJpbmc7XG4gIGNvdW50OiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdGEtZmxhZ3MnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZsYWdzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmxhZ3MuY29tcG9uZW50LnNhc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmxhZ3NDb21wb25lbnQ8VCBleHRlbmRzIERhdGFNb2RlbD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHB1YmxpYyBtb2RlbCE6IFQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBmaWVsZCA9ICdmbGFncyc7XG4gIC8vIEZJWE1FOiBtYWtlIGFsbCBmbGFncyBlbmRwb2ludCBhcyBvcHRpb25hbCBwYXJhbWV0ZXJzXG4gIEBJbnB1dCgpIHB1YmxpYyBnZXRfZmxhZ3NfZW5kcG9pbnQgPSAnZ2V0X2ZsYWdzJztcbiAgQElucHV0KCkgcHVibGljIGVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGVkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGZsYWdzITogT2JzZXJ2YWJsZTxJRmxhZ0l0ZW1bXT47XG4gIEBJbnB1dCgpIHB1YmxpYyBmcmVlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBjcmVhdGUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgYWN0aW9uID0gZmFsc2U7IC8vIGlmIHNldCB0byB0cnVlLCB1c2UgYWRkX2ZsYWcgYW5kIHJlbW92ZV9mbGFnIG1vZGVsIGFjdGlvbnNcbiAgcHVibGljIGZ0ITogRm9ybUNvbnRyb2w7XG4gIHB1YmxpYyBmcyE6IEZvcm1Db250cm9sO1xuICBwdWJsaWMgY3VyZmxhZ3M6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyB0eHRmbGFnID0gJyc7XG4gIHB1YmxpYyBzZWxmbGFnID0gJyc7XG4gIHB1YmxpYyBmbGFnbGlzdDogSUZsYWdJdGVtW10gPSBbXTtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21zZzogRGF0YU1lc3NhZ2VTZXJ2aWNlKSB7fVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zJC5uZXh0KCk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucyQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghdGhpcy5mbGFncyAmJiB0aGlzLm1vZGVsLl9jb2xsZWN0aW9uKSB7XG4gICAgICB0aGlzLmZsYWdzID0gdGhpcy5tb2RlbC5fY29sbGVjdGlvbi5hY3Rpb24oXG4gICAgICAgIG51bGwsXG4gICAgICAgICdHRVQnLFxuICAgICAgICB0aGlzLmdldF9mbGFnc19lbmRwb2ludFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZWwgJiYgdGhpcy5maWVsZCAmJiAodGhpcy5tb2RlbCBhcyBhbnkpW3RoaXMuZmllbGRdKSB7XG4gICAgICB0aGlzLmN1cmZsYWdzID0gKHRoaXMubW9kZWwgYXMgYW55KVt0aGlzLmZpZWxkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdNb2RlbCBvciBmaWVsZCBwcm9ibGVtIGluIGZsYWdzZmllbGQgY29tcG9uZW50Jyk7XG4gICAgICB0aGlzLmN1cmZsYWdzID0gW107XG4gICAgfVxuICAgIHRoaXMuZnQgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICAgIHRoaXMuZnMgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICAgIHRoaXMuZnMudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fc3Vic2NyaXB0aW9ucyQpLCBkZWJvdW5jZVRpbWUoMjUwKSlcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5hZGRGbGFnKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkRnJlZUZsYWcoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBhd2FpdCB0aGlzLmFkZEZsYWcodGhpcy5mdC52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkRmxhZyhmbGFnOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghdGhpcy5mbGFnUHJlc2VudChmbGFnKSkge1xuICAgICAgdGhpcy5jdXJmbGFncy5wdXNoKGZsYWcpO1xuICAgICAgaWYgKHRoaXMuYWN0aW9uKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmFjdGlvbignUE9TVCcsICdhZGRfZmxhZycsIHsgYm9keTogeyBmbGFnIH0gfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuX21zZy5zdWNjZXNzKCdGbGFnIGVucmVnaXN0csOpIGF2ZWMgc3VjY8OocycpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5fbXNnLmVycm9yKCdFcnJldXIgbG9ycyBkZSBsYSBzYXV2ZWdhcmRlJywgZSBhcyBhbnkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAodGhpcy5tb2RlbCBhcyBhbnkpW3RoaXMuZmllbGRdID0gdGhpcy5jdXJmbGFncztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5tb2RlbC51cGRhdGUoW3RoaXMuZmllbGRdKSk7XG4gICAgICB0aGlzLmZzLnNldFZhbHVlKCcnLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLmZ0LnNldFZhbHVlKCcnLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLl9tc2cuc3VjY2VzcygnRmxhZyBlbnJlZ2lzdHLDqSBhdmVjIHN1Y2PDqHMnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5fbXNnLmVycm9yKFxuICAgICAgICAnRXJyZXVyIGxvcnMgZGUgbGEgc2F1dmVnYXJkZScsXG4gICAgICAgIGBBUEkgUmV0dXJuIDogJHtlcnJvcn1gLFxuICAgICAgICAoZXJyb3IgYXMgYW55KS5fYm9keVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmxhZ1ByZXNlbnQoZmxhZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VyZmxhZ3MuZmluZEluZGV4KChmKSA9PiBmbGFnID09PSBmKSAhPT0gLTE7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVtb3ZlRmxhZyhmbGFnOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHRoaXMuY3VyZmxhZ3Muc3BsaWNlKFxuICAgICAgdGhpcy5jdXJmbGFncy5maW5kSW5kZXgoKGYpID0+IGZsYWcgPT09IGYpLFxuICAgICAgMVxuICAgICk7XG4gICAgaWYgKHRoaXMuYWN0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLm1vZGVsLmFjdGlvbignUE9TVCcsICdyZW1vdmVfZmxhZycsIHsgYm9keTogeyBmbGFnIH0gfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbXNnLnN1Y2Nlc3MoJ1JlbW92ZWQnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5fbXNnLmVycm9yKCdSZW1vdmluZyBmbGFnIGZhaWxlZCcsIGUgYXMgYW55KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdG9nZ2xlRWRpdCgpIHtcbiAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgaWYgKCF0aGlzLmVkaXQpIHtcbiAgICAgICAgdGhpcy5mbGFnbGlzdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZmxhZ3MpO1xuICAgICAgICB0aGlzLmVkaXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRpdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiXG48ZHQgKGNsaWNrKT1cInRvZ2dsZUVkaXQoKVwiIHJvbGU9XCJidXR0b25cIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kdD5cbjxkZCAqbmdJZj1cIiFlZGl0XCIgKGNsaWNrKT1cInRvZ2dsZUVkaXQoKVwiIHJvbGU9XCJidXR0b25cIj48c3BhbiBjbGFzcz1cImJhZGdlIGJnLWluZm8gbWUtMVwiICpuZ0Zvcj1cImxldCBmbGFnIG9mIGN1cmZsYWdzXCI+e3tmbGFnfX08L3NwYW4+PC9kZD5cbjxkZCAqbmdJZj1cImVkaXRcIj5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZnJlZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc21cIiBbZm9ybUNvbnRyb2xdPVwiZnNcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBmbGFnIG9mIGZsYWdsaXN0XCIgW3ZhbHVlXT1cImZsYWcuZmxhZ1wiPnt7ZmxhZy5mbGFnfX08c3BhbiBjbGFzcz1cIm1zLTFcIiAqbmdJZj1cImZsYWcuY291bnRcIj4oe3tmbGFnLmNvdW50fX0pPC9zcGFuPjwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiICpuZ0lmPVwiY3JlYXRlXCI+XG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBwbGFjZWhvbGRlcj1cIk5vdXZlYXUgZmxhZ1wiIFtmb3JtQ29udHJvbF09XCJmdFwiIChrZXl1cC5lbnRlcik9XCJhZGRGcmVlRmxhZygpXCI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZnJlZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1zZWxlY3Qtc21cIiBwbGFjZWhvbGRlcj1cIk5vdXZlYXUgZmxhZ1wiIFtmb3JtQ29udHJvbF09XCJmdFwiIChrZXl1cC5lbnRlcik9XCJhZGRGcmVlRmxhZygpXCIgKGtleXVwLmVzY2FwZSk9XCJ0b2dnbGVFZGl0KClcIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTJcIj48c3BhbiBjbGFzcz1cImJhZGdlIGJnLWluZm8gbWUtMVwiICpuZ0Zvcj1cImxldCBmbGFnIG9mIGN1cmZsYWdzXCIgKGNsaWNrKT1cInJlbW92ZUZsYWcoZmxhZylcIiByb2xlPVwiYnV0dG9uXCI+PGkgY2xhc3M9XCJiaSBiaS10cmFzaCBtZS0xXCI+PC9pPnt7ZmxhZ319PC9zcGFuPjxpIGNsYXNzPVwiYmkgYmkteC1sZyB0ZXh0LW11dGVkIG1zLTJcIiByb2xlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZUVkaXQoKVwiPjwvaT48L2Rpdj5cbiAgPC9kaXY+XG48L2RkPiJdfQ==