@solidev/data 0.0.1-alpha.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 (167) hide show
  1. package/README.md +7 -0
  2. package/esm2020/lib/auth/auth-interceptor.service.mjs +90 -0
  3. package/esm2020/lib/auth/auth.service.mjs +125 -0
  4. package/esm2020/lib/auth/jwt.mjs +21 -0
  5. package/esm2020/lib/data/data-backend.mjs +106 -0
  6. package/esm2020/lib/data/data-collection.mjs +109 -0
  7. package/esm2020/lib/data/data-collection.mock.mjs +39 -0
  8. package/esm2020/lib/data/data-model.mjs +287 -0
  9. package/esm2020/lib/data/data-parameters.mjs +34 -0
  10. package/esm2020/lib/data/data-query.mjs +147 -0
  11. package/esm2020/lib/data/data-query.mock.mjs +46 -0
  12. package/esm2020/lib/data/fields/base.mjs +142 -0
  13. package/esm2020/lib/data/fields/boolean.mjs +38 -0
  14. package/esm2020/lib/data/fields/datetime.mjs +124 -0
  15. package/esm2020/lib/data/fields/index.mjs +7 -0
  16. package/esm2020/lib/data/fields/numbers.mjs +38 -0
  17. package/esm2020/lib/data/fields/primaryfield.mjs +9 -0
  18. package/esm2020/lib/data/fields/relations.mjs +53 -0
  19. package/esm2020/lib/data/fields/stringfields.mjs +71 -0
  20. package/esm2020/lib/dispedit/choice.pipe.mjs +39 -0
  21. package/esm2020/lib/dispedit/dispedit/dispedit.component.mjs +475 -0
  22. package/esm2020/lib/dispedit/dispedit/dispedit.constants.mjs +2 -0
  23. package/esm2020/lib/dispedit/factor.pipe.mjs +48 -0
  24. package/esm2020/lib/dispedit/factorc.pipe.mjs +50 -0
  25. package/esm2020/lib/dispedit/fkselect/fkselect.component.mjs +142 -0
  26. package/esm2020/lib/dispedit/flags/flags.component.mjs +140 -0
  27. package/esm2020/lib/dispedit/m2mselect/m2mselect.component.mjs +318 -0
  28. package/esm2020/lib/dispedit/richedit/richedit.component.mjs +94 -0
  29. package/esm2020/lib/dispedit/sdelete/sdelete.component.mjs +46 -0
  30. package/esm2020/lib/messages/message-zone/message-zone.component.mjs +57 -0
  31. package/esm2020/lib/messages/message.service.mjs +151 -0
  32. package/esm2020/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.mjs +34 -0
  33. package/esm2020/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.mjs +63 -0
  34. package/esm2020/lib/modellist/model-list-fields/model-list-fields.mjs +225 -0
  35. package/esm2020/lib/modellist/model-list-filters/filters/filtertypes.mjs +3 -0
  36. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.mjs +108 -0
  37. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.mjs +28 -0
  38. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.mjs +24 -0
  39. package/esm2020/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.mjs +9 -0
  40. package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.mjs +40 -0
  41. package/esm2020/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.mjs +14 -0
  42. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.mjs +40 -0
  43. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.mjs +14 -0
  44. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.mjs +21 -0
  45. package/esm2020/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.mjs +14 -0
  46. package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.mjs +21 -0
  47. package/esm2020/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.mjs +14 -0
  48. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.mjs +24 -0
  49. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.mjs +63 -0
  50. package/esm2020/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.mjs +16 -0
  51. package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.mjs +46 -0
  52. package/esm2020/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.mjs +49 -0
  53. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.mjs +57 -0
  54. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.mjs +35 -0
  55. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.mjs +49 -0
  56. package/esm2020/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.mjs +15 -0
  57. package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.mjs +40 -0
  58. package/esm2020/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.mjs +14 -0
  59. package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.mjs +21 -0
  60. package/esm2020/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.mjs +14 -0
  61. package/esm2020/lib/modellist/model-list-filters/model-list-filter.mjs +145 -0
  62. package/esm2020/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.mjs +50 -0
  63. package/esm2020/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.mjs +30 -0
  64. package/esm2020/lib/modellist/model-list-filters/model-list-filters.mjs +80 -0
  65. package/esm2020/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.mjs +70 -0
  66. package/esm2020/lib/modellist/model-list-paginator/model-list-paginator.mjs +47 -0
  67. package/esm2020/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.mjs +49 -0
  68. package/esm2020/lib/modellist/model-list-sorter/model-list-sorter.mjs +116 -0
  69. package/esm2020/lib/modellist/model-list.service.mjs +135 -0
  70. package/esm2020/lib/routing/breadcrumb/breadcrumb.component.mjs +142 -0
  71. package/esm2020/lib/routing/routing.mjs +57 -0
  72. package/esm2020/lib/uploader/index.mjs +6 -0
  73. package/esm2020/lib/uploader/interfaces.mjs +8 -0
  74. package/esm2020/lib/uploader/ng-file-drop.directive.mjs +81 -0
  75. package/esm2020/lib/uploader/ng-file-select.directive.mjs +51 -0
  76. package/esm2020/lib/uploader/ngx-uploader.class.mjs +308 -0
  77. package/esm2020/lib/uploader/ngx-uploader.module.mjs +17 -0
  78. package/esm2020/lib/utils/slugify.mjs +16 -0
  79. package/esm2020/lib/utils/tab-memory.service.mjs +71 -0
  80. package/esm2020/public-api.mjs +51 -0
  81. package/esm2020/solidev-data.mjs +5 -0
  82. package/fesm2015/solidev-data.mjs +5411 -0
  83. package/fesm2015/solidev-data.mjs.map +1 -0
  84. package/fesm2020/solidev-data.mjs +5358 -0
  85. package/fesm2020/solidev-data.mjs.map +1 -0
  86. package/index.d.ts +5 -0
  87. package/lib/auth/auth-interceptor.service.d.ts +17 -0
  88. package/lib/auth/auth.service.d.ts +43 -0
  89. package/lib/auth/jwt.d.ts +22 -0
  90. package/lib/data/data-backend.d.ts +47 -0
  91. package/lib/data/data-collection.d.ts +87 -0
  92. package/lib/data/data-collection.mock.d.ts +19 -0
  93. package/lib/data/data-model.d.ts +93 -0
  94. package/lib/data/data-parameters.d.ts +26 -0
  95. package/lib/data/data-query.d.ts +101 -0
  96. package/lib/data/data-query.mock.d.ts +25 -0
  97. package/lib/data/fields/base.d.ts +116 -0
  98. package/lib/data/fields/boolean.d.ts +9 -0
  99. package/lib/data/fields/datetime.d.ts +39 -0
  100. package/lib/data/fields/index.d.ts +6 -0
  101. package/lib/data/fields/numbers.d.ts +35 -0
  102. package/lib/data/fields/primaryfield.d.ts +8 -0
  103. package/lib/data/fields/relations.d.ts +45 -0
  104. package/lib/data/fields/stringfields.d.ts +50 -0
  105. package/lib/dispedit/choice.pipe.d.ts +8 -0
  106. package/lib/dispedit/dispedit/dispedit.component.d.ts +182 -0
  107. package/lib/dispedit/dispedit/dispedit.constants.d.ts +6 -0
  108. package/lib/dispedit/factor.pipe.d.ts +12 -0
  109. package/lib/dispedit/factorc.pipe.d.ts +11 -0
  110. package/lib/dispedit/fkselect/fkselect.component.d.ts +43 -0
  111. package/lib/dispedit/flags/flags.component.d.ts +40 -0
  112. package/lib/dispedit/m2mselect/m2mselect.component.d.ts +120 -0
  113. package/lib/dispedit/richedit/richedit.component.d.ts +31 -0
  114. package/lib/dispedit/sdelete/sdelete.component.d.ts +27 -0
  115. package/lib/messages/message-zone/message-zone.component.d.ts +14 -0
  116. package/lib/messages/message.service.d.ts +59 -0
  117. package/lib/modellist/model-list-fields/model-list-field-header/model-list-field-header.component.d.ts +15 -0
  118. package/lib/modellist/model-list-fields/model-list-fields-selector/model-list-fields-selector.component.d.ts +19 -0
  119. package/lib/modellist/model-list-fields/model-list-fields.d.ts +67 -0
  120. package/lib/modellist/model-list-filters/filters/filtertypes.d.ts +1 -0
  121. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.component.d.ts +30 -0
  122. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-filter/model-list-autocomplete-filter.d.ts +22 -0
  123. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.component.d.ts +10 -0
  124. package/lib/modellist/model-list-filters/filters/model-list-autocomplete-multi-filter/model-list-autocomplete-multi-filter.d.ts +8 -0
  125. package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.component.d.ts +15 -0
  126. package/lib/modellist/model-list-filters/filters/model-list-date-filter/model-list-date-filter.d.ts +4 -0
  127. package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.component.d.ts +15 -0
  128. package/lib/modellist/model-list-filters/filters/model-list-datetime-filter/model-list-datetime-filter.d.ts +4 -0
  129. package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetime-range-filter.component.d.ts +11 -0
  130. package/lib/modellist/model-list-filters/filters/model-list-datetimerange-filter/model-list-datetimerange-filter.d.ts +4 -0
  131. package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.component.d.ts +11 -0
  132. package/lib/modellist/model-list-filters/filters/model-list-flags-filter/model-list-flags-filter.d.ts +4 -0
  133. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/adapters/ban.d.ts +35 -0
  134. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.component.d.ts +25 -0
  135. package/lib/modellist/model-list-filters/filters/model-list-geodistance-filter/model-list-geodistance-filter.d.ts +18 -0
  136. package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.component.d.ts +17 -0
  137. package/lib/modellist/model-list-filters/filters/model-list-number-filter/model-list-number-filter.d.ts +19 -0
  138. package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.component.d.ts +17 -0
  139. package/lib/modellist/model-list-filters/filters/model-list-select-filter/model-list-select-filter.d.ts +16 -0
  140. package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.component.d.ts +17 -0
  141. package/lib/modellist/model-list-filters/filters/model-list-select-multi-filter/model-list-select-multi-filter.d.ts +6 -0
  142. package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.component.d.ts +16 -0
  143. package/lib/modellist/model-list-filters/filters/model-list-text-filter/model-list-text-filter.d.ts +4 -0
  144. package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.component.d.ts +11 -0
  145. package/lib/modellist/model-list-filters/filters/model-list-tree-filter/model-list-tree-filter.d.ts +4 -0
  146. package/lib/modellist/model-list-filters/model-list-filter.d.ts +52 -0
  147. package/lib/modellist/model-list-filters/model-list-filters/model-list-filters.component.d.ts +9 -0
  148. package/lib/modellist/model-list-filters/model-list-filters-select/model-list-filters-select.component.d.ts +13 -0
  149. package/lib/modellist/model-list-filters/model-list-filters.d.ts +15 -0
  150. package/lib/modellist/model-list-paginator/model-list-paginator/model-list-paginator.component.d.ts +23 -0
  151. package/lib/modellist/model-list-paginator/model-list-paginator.d.ts +16 -0
  152. package/lib/modellist/model-list-sorter/model-list-sorter/model-list-sorter.component.d.ts +22 -0
  153. package/lib/modellist/model-list-sorter/model-list-sorter.d.ts +61 -0
  154. package/lib/modellist/model-list.service.d.ts +83 -0
  155. package/lib/routing/breadcrumb/breadcrumb.component.d.ts +42 -0
  156. package/lib/routing/routing.d.ts +64 -0
  157. package/lib/uploader/index.d.ts +5 -0
  158. package/lib/uploader/interfaces.d.ts +67 -0
  159. package/lib/uploader/ng-file-drop.directive.d.ts +22 -0
  160. package/lib/uploader/ng-file-select.directive.d.ts +19 -0
  161. package/lib/uploader/ngx-uploader.class.d.ts +35 -0
  162. package/lib/uploader/ngx-uploader.module.d.ts +8 -0
  163. package/lib/utils/slugify.d.ts +1 -0
  164. package/lib/utils/tab-memory.service.d.ts +29 -0
  165. package/package.json +35 -0
  166. package/public-api.d.ts +47 -0
  167. package/src/lib/data/README.md +35 -0
@@ -0,0 +1,151 @@
1
+ import { Inject, Injectable, InjectionToken, Optional } from "@angular/core";
2
+ import { ReplaySubject, timer } from "rxjs";
3
+ import * as i0 from "@angular/core";
4
+ export var DEFAULT_TIMEOUTS;
5
+ (function (DEFAULT_TIMEOUTS) {
6
+ DEFAULT_TIMEOUTS[DEFAULT_TIMEOUTS["SUCCESS"] = 3000] = "SUCCESS";
7
+ DEFAULT_TIMEOUTS[DEFAULT_TIMEOUTS["INFO"] = 4000] = "INFO";
8
+ DEFAULT_TIMEOUTS[DEFAULT_TIMEOUTS["WARNING"] = 10000] = "WARNING";
9
+ DEFAULT_TIMEOUTS[DEFAULT_TIMEOUTS["DANGER"] = 30000] = "DANGER";
10
+ })(DEFAULT_TIMEOUTS || (DEFAULT_TIMEOUTS = {}));
11
+ export var STATUS;
12
+ (function (STATUS) {
13
+ STATUS[STATUS["UNDISP"] = 0] = "UNDISP";
14
+ STATUS[STATUS["DISP"] = 1] = "DISP";
15
+ STATUS[STATUS["ACK"] = 2] = "ACK";
16
+ })(STATUS || (STATUS = {}));
17
+ const DEFAULT_MESSAGE_TIMEOUT = 5000;
18
+ export const DATA_MESSAGE_SOUNDS = new InjectionToken("data.message.sounds");
19
+ export class Message {
20
+ constructor(title, type = 1 /* TYPE.INFO */, message = "", trace = null, ttl = DEFAULT_MESSAGE_TIMEOUT) {
21
+ this.title = title;
22
+ this.type = type;
23
+ this.message = message;
24
+ this.trace = trace;
25
+ this.ttl = ttl;
26
+ this.status = STATUS[STATUS.UNDISP];
27
+ this.showTrace = false;
28
+ }
29
+ get style() {
30
+ if (this.type === 3 /* TYPE.DANGER */) {
31
+ return "alert alert-dismissible alert-danger";
32
+ }
33
+ if (this.type === 1 /* TYPE.INFO */) {
34
+ return "alert alert-dismissible alert-info";
35
+ }
36
+ if (this.type === 2 /* TYPE.WARNING */) {
37
+ return "alert alert-dismissible alert-warning";
38
+ }
39
+ if (this.type === 0 /* TYPE.SUCCESS */) {
40
+ return "alert alert-dismissible alert-success";
41
+ }
42
+ return "alert alert-dismissible alert-success";
43
+ }
44
+ ack() {
45
+ this.status = STATUS[STATUS.ACK];
46
+ }
47
+ }
48
+ export class DataMessageService {
49
+ constructor(ngZone, sounds) {
50
+ this.ngZone = ngZone;
51
+ this.sounds = sounds;
52
+ this._messages$ = new ReplaySubject(1);
53
+ this._messages = [];
54
+ this.init();
55
+ }
56
+ get current() {
57
+ return this._messages$.asObservable();
58
+ }
59
+ init() {
60
+ let changed = false;
61
+ if (!this._timer) {
62
+ this.ngZone.runOutsideAngular(() => {
63
+ this._timer = timer(500, 500);
64
+ this._subscription = this._timer.subscribe(() => {
65
+ for (const m of this._messages) {
66
+ m.ttl -= 500;
67
+ if (m.ttl <= 0) {
68
+ changed = true;
69
+ }
70
+ }
71
+ if (changed) {
72
+ this.ngZone.run(() => {
73
+ const out = [];
74
+ for (const m of this._messages) {
75
+ if (m.ttl >= 0) {
76
+ out.push(m);
77
+ }
78
+ }
79
+ this._messages = out;
80
+ this._notify();
81
+ });
82
+ }
83
+ });
84
+ });
85
+ }
86
+ }
87
+ close() {
88
+ this._subscription.unsubscribe();
89
+ }
90
+ success(title, message = "", trace = null, timeout = DEFAULT_TIMEOUTS.SUCCESS) {
91
+ this._messages.push(new Message(title, 0 /* TYPE.SUCCESS */, message, trace, timeout));
92
+ this.play("success");
93
+ this._notify();
94
+ }
95
+ info(title, message = "", trace = null, timeout = DEFAULT_TIMEOUTS.INFO) {
96
+ this._messages.push(new Message(title, 1 /* TYPE.INFO */, message, trace, timeout));
97
+ this.play("info");
98
+ this._notify();
99
+ }
100
+ warning(title, message = "", trace = null, timeout = DEFAULT_TIMEOUTS.WARNING) {
101
+ this._messages.push(new Message(title, 2 /* TYPE.WARNING */, message, trace, timeout));
102
+ this.play("warning");
103
+ this._notify();
104
+ }
105
+ danger(title, message = "", trace = null, timeout = DEFAULT_TIMEOUTS.DANGER) {
106
+ this._messages.push(new Message(title, 3 /* TYPE.DANGER */, message, trace, DEFAULT_TIMEOUTS.DANGER));
107
+ this.play("error");
108
+ this._notify();
109
+ }
110
+ error(title, message = "", trace = null) {
111
+ this.danger(title, message, trace);
112
+ }
113
+ debug(title, message = "", trace = null) {
114
+ console.log(title, message, trace);
115
+ }
116
+ ack(message) {
117
+ message.ack();
118
+ this._notify();
119
+ }
120
+ play(type = "notify") {
121
+ if (this.sounds && this.sounds[type]) {
122
+ const audio = new Audio(this.sounds[type]);
123
+ audio.play();
124
+ }
125
+ }
126
+ _notify() {
127
+ const out = [];
128
+ for (const message of this._messages) {
129
+ if ((message.status === STATUS[STATUS.UNDISP]) ||
130
+ (message.status === STATUS[STATUS.DISP])) {
131
+ message.status = STATUS[STATUS.DISP];
132
+ out.push(message);
133
+ }
134
+ }
135
+ this._messages$.next(out);
136
+ }
137
+ }
138
+ DataMessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: DataMessageService, deps: [{ token: i0.NgZone }, { token: DATA_MESSAGE_SOUNDS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
139
+ DataMessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: DataMessageService, providedIn: "root" });
140
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: DataMessageService, decorators: [{
141
+ type: Injectable,
142
+ args: [{
143
+ providedIn: "root"
144
+ }]
145
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: undefined, decorators: [{
146
+ type: Optional
147
+ }, {
148
+ type: Inject,
149
+ args: [DATA_MESSAGE_SOUNDS]
150
+ }] }]; } });
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL21lc3NhZ2VzL21lc3NhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQVUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBYSxhQUFhLEVBQWdCLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQzs7QUFNcEUsTUFBTSxDQUFOLElBQVksZ0JBS1g7QUFMRCxXQUFZLGdCQUFnQjtJQUMxQixnRUFBYyxDQUFBO0lBQ2QsMERBQVcsQ0FBQTtJQUNYLGlFQUFlLENBQUE7SUFDZiwrREFBYyxDQUFBO0FBQ2hCLENBQUMsRUFMVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBSzNCO0FBRUQsTUFBTSxDQUFOLElBQVksTUFFWDtBQUZELFdBQVksTUFBTTtJQUNoQix1Q0FBTSxDQUFBO0lBQUUsbUNBQUksQ0FBQTtJQUFFLGlDQUFHLENBQUE7QUFDbkIsQ0FBQyxFQUZXLE1BQU0sS0FBTixNQUFNLFFBRWpCO0FBRUQsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUM7QUFNckMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQWMscUJBQXFCLENBQUMsQ0FBQztBQUcxRixNQUFNLE9BQU8sT0FBTztJQUlsQixZQUFtQixLQUFhLEVBQ2Isd0JBQXNCLEVBQ3RCLFVBQWtCLEVBQUUsRUFDcEIsUUFBYSxJQUFJLEVBQ2pCLE1BQWMsdUJBQXVCO1FBSnJDLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBa0M7UUFQakQsV0FBTSxH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QUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7OytHQXRHVSxrQkFBa0Isd0NBT0csbUJBQW1CO21IQVB4QyxrQkFBa0IsY0FGakIsTUFBTTsyRkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFRYyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgTmdab25lLCBPcHRpb25hbH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lcn0gZnJvbSBcInJ4anNcIjtcblxuZXhwb3J0IGNvbnN0IGVudW0gVFlQRSB7XG4gIFNVQ0NFU1MsIElORk8sIFdBUk5JTkcsIERBTkdFUlxufVxuXG5leHBvcnQgZW51bSBERUZBVUxUX1RJTUVPVVRTIHtcbiAgU1VDQ0VTUyA9IDMwMDAsXG4gIElORk8gPSA0MDAwLFxuICBXQVJOSU5HID0gMTAwMDAsXG4gIERBTkdFUiA9IDMwMDAwXG59XG5cbmV4cG9ydCBlbnVtIFNUQVRVUyB7XG4gIFVORElTUCwgRElTUCwgQUNLXG59XG5cbmNvbnN0IERFRkFVTFRfTUVTU0FHRV9USU1FT1VUID0gNTAwMDtcblxuZXhwb3J0IGludGVyZmFjZSBJU291bmRUeXBlcyB7XG4gIFtpbmRleDogc3RyaW5nXTogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBEQVRBX01FU1NBR0VfU09VTkRTID0gbmV3IEluamVjdGlvblRva2VuPElTb3VuZFR5cGVzPihcImRhdGEubWVzc2FnZS5zb3VuZHNcIik7XG5cblxuZXhwb3J0IGNsYXNzIE1lc3NhZ2Uge1xuICBwdWJsaWMgc3RhdHVzOiBzdHJpbmcgPSBTVEFUVVNbU1RBVFVTLlVORElTUF07XG4gIHB1YmxpYyBzaG93VHJhY2UgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGl0bGU6IHN0cmluZyxcbiAgICAgICAgICAgICAgcHVibGljIHR5cGU6IFRZUEUgPSBUWVBFLklORk8sXG4gICAgICAgICAgICAgIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcgPSBcIlwiLFxuICAgICAgICAgICAgICBwdWJsaWMgdHJhY2U6IGFueSA9IG51bGwsXG4gICAgICAgICAgICAgIHB1YmxpYyB0dGw6IG51bWJlciA9IERFRkFVTFRfTUVTU0FHRV9USU1FT1VUKSB7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0eWxlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVFlQRS5EQU5HRVIpIHtcbiAgICAgIHJldHVybiBcImFsZXJ0IGFsZXJ0LWRpc21pc3NpYmxlIGFsZXJ0LWRhbmdlclwiO1xuICAgIH1cbiAgICBpZiAodGhpcy50eXBlID09PSBUWVBFLklORk8pIHtcbiAgICAgIHJldHVybiBcImFsZXJ0IGFsZXJ0LWRpc21pc3NpYmxlIGFsZXJ0LWluZm9cIjtcbiAgICB9XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVFlQRS5XQVJOSU5HKSB7XG4gICAgICByZXR1cm4gXCJhbGVydCBhbGVydC1kaXNtaXNzaWJsZSBhbGVydC13YXJuaW5nXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLnR5cGUgPT09IFRZUEUuU1VDQ0VTUykge1xuICAgICAgcmV0dXJuIFwiYWxlcnQgYWxlcnQtZGlzbWlzc2libGUgYWxlcnQtc3VjY2Vzc1wiO1xuICAgIH1cbiAgICByZXR1cm4gXCJhbGVydCBhbGVydC1kaXNtaXNzaWJsZSBhbGVydC1zdWNjZXNzXCI7XG4gIH1cblxuICBwdWJsaWMgYWNrKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdHVzID0gU1RBVFVTW1NUQVRVUy5BQ0tdO1xuICB9XG59XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiBcInJvb3RcIlxufSlcbmV4cG9ydCBjbGFzcyBEYXRhTWVzc2FnZVNlcnZpY2Uge1xuICBwdWJsaWMgX21lc3NhZ2VzJDogUmVwbGF5U3ViamVjdDxNZXNzYWdlW10+ID0gbmV3IFJlcGxheVN1YmplY3Q8TWVzc2FnZVtdPigxKTtcbiAgcHJpdmF0ZSBfbWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuICBwcml2YXRlIF90aW1lciE6IE9ic2VydmFibGU8YW55PjtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEQVRBX01FU1NBR0VfU09VTkRTKSBwdWJsaWMgc291bmRzOiBJU291bmRUeXBlcykge1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50KCk6IE9ic2VydmFibGU8TWVzc2FnZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0KCk6IHZvaWQge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLl90aW1lcikge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLl90aW1lciA9IHRpbWVyKDUwMCwgNTAwKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gdGhpcy5fdGltZXIuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5fbWVzc2FnZXMpIHtcbiAgICAgICAgICAgIG0udHRsIC09IDUwMDtcbiAgICAgICAgICAgIGlmIChtLnR0bCA8PSAwKSB7XG4gICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgb3V0OiBNZXNzYWdlW10gPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMuX21lc3NhZ2VzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG0udHRsID49IDApIHtcbiAgICAgICAgICAgICAgICAgIG91dC5wdXNoKG0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlcyA9IG91dDtcbiAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHN1Y2Nlc3ModGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nID0gXCJcIiwgdHJhY2U6IGFueSA9IG51bGwsIHRpbWVvdXQ6IG51bWJlciA9IERFRkFVTFRfVElNRU9VVFMuU1VDQ0VTUyk6IHZvaWQge1xuICAgIHRoaXMuX21lc3NhZ2VzLnB1c2gobmV3IE1lc3NhZ2UodGl0bGUsIFRZUEUuU1VDQ0VTUywgbWVzc2FnZSwgdHJhY2UsIHRpbWVvdXQpKTtcbiAgICB0aGlzLnBsYXkoXCJzdWNjZXNzXCIpO1xuICAgIHRoaXMuX25vdGlmeSgpO1xuICB9XG5cbiAgcHVibGljIGluZm8odGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nID0gXCJcIiwgdHJhY2U6IGFueSA9IG51bGwsIHRpbWVvdXQ6IG51bWJlciA9IERFRkFVTFRfVElNRU9VVFMuSU5GTyk6IHZvaWQge1xuICAgIHRoaXMuX21lc3NhZ2VzLnB1c2gobmV3IE1lc3NhZ2UodGl0bGUsIFRZUEUuSU5GTywgbWVzc2FnZSwgdHJhY2UsIHRpbWVvdXQpKTtcbiAgICB0aGlzLnBsYXkoXCJpbmZvXCIpO1xuICAgIHRoaXMuX25vdGlmeSgpO1xuICB9XG5cbiAgcHVibGljIHdhcm5pbmcodGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nID0gXCJcIiwgdHJhY2U6IGFueSA9IG51bGwsIHRpbWVvdXQ6IG51bWJlciA9IERFRkFVTFRfVElNRU9VVFMuV0FSTklORyk6IHZvaWQge1xuICAgIHRoaXMuX21lc3NhZ2VzLnB1c2gobmV3IE1lc3NhZ2UodGl0bGUsIFRZUEUuV0FSTklORywgbWVzc2FnZSwgdHJhY2UsIHRpbWVvdXQpKTtcbiAgICB0aGlzLnBsYXkoXCJ3YXJuaW5nXCIpXG4gICAgdGhpcy5fbm90aWZ5KCk7XG4gIH1cblxuICBwdWJsaWMgZGFuZ2VyKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyA9IFwiXCIsIHRyYWNlOiBhbnkgPSBudWxsLCB0aW1lb3V0OiBudW1iZXIgPSBERUZBVUxUX1RJTUVPVVRTLkRBTkdFUik6IHZvaWQge1xuICAgIHRoaXMuX21lc3NhZ2VzLnB1c2gobmV3IE1lc3NhZ2UodGl0bGUsIFRZUEUuREFOR0VSLCBtZXNzYWdlLCB0cmFjZSwgREVGQVVMVF9USU1FT1VUUy5EQU5HRVIpKTtcbiAgICB0aGlzLnBsYXkoXCJlcnJvclwiKVxuICAgIHRoaXMuX25vdGlmeSgpO1xuICB9XG5cbiAgcHVibGljIGVycm9yKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyA9IFwiXCIsIHRyYWNlOiBhbnkgPSBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5kYW5nZXIodGl0bGUsIG1lc3NhZ2UsIHRyYWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWJ1Zyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgPSBcIlwiLCB0cmFjZTogYW55ID0gbnVsbCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKHRpdGxlLCBtZXNzYWdlLCB0cmFjZSk7XG4gIH1cblxuICBwdWJsaWMgYWNrKG1lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcbiAgICBtZXNzYWdlLmFjaygpO1xuICAgIHRoaXMuX25vdGlmeSgpO1xuICB9XG5cbiAgcHVibGljIHBsYXkodHlwZTogc3RyaW5nID0gXCJub3RpZnlcIikge1xuICAgIGlmICh0aGlzLnNvdW5kcyAmJiB0aGlzLnNvdW5kc1t0eXBlXSkge1xuICAgICAgY29uc3QgYXVkaW8gPSBuZXcgQXVkaW8odGhpcy5zb3VuZHNbdHlwZV0pO1xuICAgICAgYXVkaW8ucGxheSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX25vdGlmeSgpOiB2b2lkIHtcbiAgICBjb25zdCBvdXQ6IE1lc3NhZ2VbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiB0aGlzLl9tZXNzYWdlcykge1xuICAgICAgaWYgKChtZXNzYWdlLnN0YXR1cyA9PT0gU1RBVFVTW1NUQVRVUy5VTkRJU1BdKSB8fFxuICAgICAgICAobWVzc2FnZS5zdGF0dXMgPT09IFNUQVRVU1tTVEFUVVMuRElTUF0pKSB7XG4gICAgICAgIG1lc3NhZ2Uuc3RhdHVzID0gU1RBVFVTW1NUQVRVUy5ESVNQXTtcbiAgICAgICAgb3V0LnB1c2gobWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX21lc3NhZ2VzJC5uZXh0KG91dCk7XG4gIH1cblxufVxuIl19
@@ -0,0 +1,34 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
4
+ import { ModelListSorterComponent } from '../../model-list-sorter/model-list-sorter/model-list-sorter.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@ng-bootstrap/ng-bootstrap";
8
+ export class ModelListFieldHeaderComponent {
9
+ constructor() {
10
+ this.sort = false;
11
+ }
12
+ disable() {
13
+ this.list.fields.disable(this.field);
14
+ }
15
+ enable(f) {
16
+ this.list.fields.move(f.name, 'after', this.field);
17
+ this.list.fields.enable(f.name);
18
+ }
19
+ }
20
+ ModelListFieldHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: ModelListFieldHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
+ ModelListFieldHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.9", type: ModelListFieldHeaderComponent, isStandalone: true, selector: "data-model-list-field-header", inputs: { list: "list", field: "field", sort: "sort", sortField: "sortField" }, ngImport: i0, template: "\n<ng-template #label><span #ref>\n <ng-content></ng-content></span><span *ngIf=\"!ref.children.length\">{{list.fields.get(field)?.label||field}}</span></ng-template>\n<div class=\"d-flex flex-row justify-content-between slabel\" [class.active]=\"mnu.isOpen()\">\n <div class=\"flex-grow-1\">\n <data-model-list-sorter [list]=\"list\" [field]=\"sortField||field\" *ngIf=\"sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </data-model-list-sorter>\n <ng-container *ngIf=\"!sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </ng-container>\n </div>\n <div class=\"navicons d-flex flex-row\"><i class=\"bi bi-caret-left-fill\" role=\"button\" (click)=\"list.fields.move(field, 'before')\"></i>\n <div ngbDropdown #mnu=\"ngbDropdown\"><i class=\"bi bi-record\" ngbDropdownToggle></i>\n <div ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"disable()\"><i class=\"bi bi-trash me-2\"></i>Supprimer</button>\n <h6 class=\"dropdown-header\">Ajouter une colonne apr\u00E8s</h6>\n <ng-container *ngFor=\"let f of list.fields.fields|async\">\n <ng-container *ngIf=\"f.allowed &amp;&amp; !f.enabled\">\n <button ngbDropdownItem (click)=\"enable(f)\"><i class=\"bi bi-plus-circle me-2\"></i>{{f.label||f.name}}</button>\n </ng-container>\n </ng-container>\n </div>\n </div><i class=\"bi bi-caret-right-fill\" role=\"button\" (click)=\"list.fields.move(field, 'after')\"></i>\n </div>\n</div>", styles: [".slabel .navicons{opacity:0}.slabel:hover .navicons,.slabel.active .navicons{opacity:1!important}.dropdown-toggle:after{display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i2.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i2.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i2.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i2.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { kind: "component", type: ModelListSorterComponent, selector: "data-model-list-sorter", inputs: ["list", "field"] }] });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: ModelListFieldHeaderComponent, decorators: [{
23
+ type: Component,
24
+ args: [{ selector: 'data-model-list-field-header', standalone: true, imports: [CommonModule, NgbDropdownModule, ModelListSorterComponent], template: "\n<ng-template #label><span #ref>\n <ng-content></ng-content></span><span *ngIf=\"!ref.children.length\">{{list.fields.get(field)?.label||field}}</span></ng-template>\n<div class=\"d-flex flex-row justify-content-between slabel\" [class.active]=\"mnu.isOpen()\">\n <div class=\"flex-grow-1\">\n <data-model-list-sorter [list]=\"list\" [field]=\"sortField||field\" *ngIf=\"sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </data-model-list-sorter>\n <ng-container *ngIf=\"!sort\">\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n </ng-container>\n </div>\n <div class=\"navicons d-flex flex-row\"><i class=\"bi bi-caret-left-fill\" role=\"button\" (click)=\"list.fields.move(field, 'before')\"></i>\n <div ngbDropdown #mnu=\"ngbDropdown\"><i class=\"bi bi-record\" ngbDropdownToggle></i>\n <div ngbDropdownMenu>\n <button ngbDropdownItem (click)=\"disable()\"><i class=\"bi bi-trash me-2\"></i>Supprimer</button>\n <h6 class=\"dropdown-header\">Ajouter une colonne apr\u00E8s</h6>\n <ng-container *ngFor=\"let f of list.fields.fields|async\">\n <ng-container *ngIf=\"f.allowed &amp;&amp; !f.enabled\">\n <button ngbDropdownItem (click)=\"enable(f)\"><i class=\"bi bi-plus-circle me-2\"></i>{{f.label||f.name}}</button>\n </ng-container>\n </ng-container>\n </div>\n </div><i class=\"bi bi-caret-right-fill\" role=\"button\" (click)=\"list.fields.move(field, 'after')\"></i>\n </div>\n</div>", styles: [".slabel .navicons{opacity:0}.slabel:hover .navicons,.slabel.active .navicons{opacity:1!important}.dropdown-toggle:after{display:none!important}\n"] }]
25
+ }], ctorParameters: function () { return []; }, propDecorators: { list: [{
26
+ type: Input
27
+ }], field: [{
28
+ type: Input
29
+ }], sort: [{
30
+ type: Input
31
+ }], sortField: [{
32
+ type: Input
33
+ }] } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC1maWVsZC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL21vZGVsbGlzdC9tb2RlbC1saXN0LWZpZWxkcy9tb2RlbC1saXN0LWZpZWxkLWhlYWRlci9tb2RlbC1saXN0LWZpZWxkLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvbW9kZWxsaXN0L21vZGVsLWxpc3QtZmllbGRzL21vZGVsLWxpc3QtZmllbGQtaGVhZGVyL21vZGVsLWxpc3QtZmllbGQtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSWpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQzs7OztBQVNqSCxNQUFNLE9BQU8sNkJBQTZCO0lBTXhDO1FBSGdCLFNBQUksR0FBYSxLQUFLLENBQUM7SUFHeEIsQ0FBQztJQUVoQixPQUFPO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sTUFBTSxDQUFDLENBQWlCO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDOzswSEFmVSw2QkFBNkI7OEdBQTdCLDZCQUE2Qix3S0NmMUMsdS9DQXlCTSwwTURaTSxZQUFZLDJkQUFFLGlCQUFpQiwyZ0JBQUUsd0JBQXdCOzJGQUV4RCw2QkFBNkI7a0JBUHpDLFNBQVM7K0JBQ0UsOEJBQThCLGNBRzVCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsQ0FBQzswRUFHcEQsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGVsTGlzdCB9IGZyb20gJy4uLy4uL21vZGVsLWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9kYXRhL2RhdGEtbW9kZWwnO1xuaW1wb3J0IHsgTW9kZWxMaXN0RmllbGQgfSBmcm9tICcuLi9tb2RlbC1saXN0LWZpZWxkcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdiRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBNb2RlbExpc3RTb3J0ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2RlbC1saXN0LXNvcnRlci9tb2RlbC1saXN0LXNvcnRlci9tb2RlbC1saXN0LXNvcnRlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRhLW1vZGVsLWxpc3QtZmllbGQtaGVhZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGVsLWxpc3QtZmllbGQtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kZWwtbGlzdC1maWVsZC1oZWFkZXIuY29tcG9uZW50LnNhc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTmdiRHJvcGRvd25Nb2R1bGUsIE1vZGVsTGlzdFNvcnRlckNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIE1vZGVsTGlzdEZpZWxkSGVhZGVyQ29tcG9uZW50PFQgZXh0ZW5kcyBEYXRhTW9kZWw+IHtcbiAgQElucHV0KCkgcHVibGljIGxpc3QhOiBNb2RlbExpc3Q8VD47XG4gIEBJbnB1dCgpIHB1YmxpYyBmaWVsZCE6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIHNvcnQ/OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzb3J0RmllbGQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5saXN0LmZpZWxkcy5kaXNhYmxlKHRoaXMuZmllbGQpO1xuICB9XG5cbiAgcHVibGljIGVuYWJsZShmOiBNb2RlbExpc3RGaWVsZCkge1xuICAgIHRoaXMubGlzdC5maWVsZHMubW92ZShmLm5hbWUsICdhZnRlcicsIHRoaXMuZmllbGQpO1xuICAgIHRoaXMubGlzdC5maWVsZHMuZW5hYmxlKGYubmFtZSk7XG4gIH1cbn1cbiIsIlxuPG5nLXRlbXBsYXRlICNsYWJlbD48c3BhbiAjcmVmPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD48L3NwYW4+PHNwYW4gKm5nSWY9XCIhcmVmLmNoaWxkcmVuLmxlbmd0aFwiPnt7bGlzdC5maWVsZHMuZ2V0KGZpZWxkKT8ubGFiZWx8fGZpZWxkfX08L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbjxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gc2xhYmVsXCIgW2NsYXNzLmFjdGl2ZV09XCJtbnUuaXNPcGVuKClcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+XG4gICAgPGRhdGEtbW9kZWwtbGlzdC1zb3J0ZXIgW2xpc3RdPVwibGlzdFwiIFtmaWVsZF09XCJzb3J0RmllbGR8fGZpZWxkXCIgKm5nSWY9XCJzb3J0XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGFiZWxcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2RhdGEtbW9kZWwtbGlzdC1zb3J0ZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzb3J0XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGFiZWxcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJuYXZpY29ucyBkLWZsZXggZmxleC1yb3dcIj48aSBjbGFzcz1cImJpIGJpLWNhcmV0LWxlZnQtZmlsbFwiIHJvbGU9XCJidXR0b25cIiAoY2xpY2spPVwibGlzdC5maWVsZHMubW92ZShmaWVsZCwgJ2JlZm9yZScpXCI+PC9pPlxuICAgIDxkaXYgbmdiRHJvcGRvd24gI21udT1cIm5nYkRyb3Bkb3duXCI+PGkgY2xhc3M9XCJiaSBiaS1yZWNvcmRcIiBuZ2JEcm9wZG93blRvZ2dsZT48L2k+XG4gICAgICA8ZGl2IG5nYkRyb3Bkb3duTWVudT5cbiAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrKT1cImRpc2FibGUoKVwiPjxpIGNsYXNzPVwiYmkgYmktdHJhc2ggbWUtMlwiPjwvaT5TdXBwcmltZXI8L2J1dHRvbj5cbiAgICAgICAgPGg2IGNsYXNzPVwiZHJvcGRvd24taGVhZGVyXCI+QWpvdXRlciB1bmUgY29sb25uZSBhcHLDqHM8L2g2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmIG9mIGxpc3QuZmllbGRzLmZpZWxkc3xhc3luY1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLmFsbG93ZWQgJmFtcDsmYW1wOyAhZi5lbmFibGVkXCI+XG4gICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwiZW5hYmxlKGYpXCI+PGkgY2xhc3M9XCJiaSBiaS1wbHVzLWNpcmNsZSBtZS0yXCI+PC9pPnt7Zi5sYWJlbHx8Zi5uYW1lfX08L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj48aSBjbGFzcz1cImJpIGJpLWNhcmV0LXJpZ2h0LWZpbGxcIiByb2xlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImxpc3QuZmllbGRzLm1vdmUoZmllbGQsICdhZnRlcicpXCI+PC9pPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -0,0 +1,63 @@
1
+ import { Component, Input, ViewChild } from '@angular/core';
2
+ import { CDK_DRAG_CONFIG, DragDropModule, } from '@angular/cdk/drag-drop';
3
+ import { CommonModule } from '@angular/common';
4
+ import { NgbOffcanvasModule } from '@ng-bootstrap/ng-bootstrap';
5
+ import { CdkScrollableModule } from '@angular/cdk/scrolling';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ng-bootstrap/ng-bootstrap";
8
+ import * as i2 from "@angular/common";
9
+ import * as i3 from "@angular/cdk/scrolling";
10
+ import * as i4 from "@angular/cdk/drag-drop";
11
+ const DragConfig = {
12
+ dragStartThreshold: 5,
13
+ pointerDirectionChangeThreshold: 10,
14
+ zIndex: 10000,
15
+ };
16
+ export class ModelListFieldsSelectorComponent {
17
+ constructor(_ofc) {
18
+ this._ofc = _ofc;
19
+ }
20
+ ngOnInit() {
21
+ if (!this.list || !this.list.fields) {
22
+ throw new Error('Missing list / fields');
23
+ }
24
+ }
25
+ open() {
26
+ this._ofc.open(this.ofctpl);
27
+ }
28
+ drop($event) {
29
+ let pos = $event.currentIndex * 10;
30
+ if ($event.currentIndex > $event.previousIndex) {
31
+ pos += 1;
32
+ }
33
+ else {
34
+ pos -= 1;
35
+ }
36
+ this.list.fields.setPosition($event.item.data, pos);
37
+ }
38
+ toggle(f) {
39
+ if (f.enabled) {
40
+ this.list.fields.disable(f.name);
41
+ }
42
+ else {
43
+ this.list.fields.enable(f.name);
44
+ }
45
+ }
46
+ }
47
+ ModelListFieldsSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: ModelListFieldsSelectorComponent, deps: [{ token: i1.NgbOffcanvas }], target: i0.ɵɵFactoryTarget.Component });
48
+ ModelListFieldsSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.9", type: ModelListFieldsSelectorComponent, isStandalone: true, selector: "data-model-list-fields-selector", inputs: { list: "list" }, providers: [{ provide: CDK_DRAG_CONFIG, useValue: DragConfig }], viewQueries: [{ propertyName: "ofctpl", first: true, predicate: ["selector"], descendants: true, static: true }], ngImport: i0, template: "<i class=\"bi bi-list-ul\" (click)=\"open()\" role=\"button\"></i>\n<ng-template #selector let-offcanvas>\n <div class=\"offcanvas-header\">\n <h4 class=\"offcanvas-title\">Choix des champs</h4>\n <button class=\"btn-close\" type=\"button\" aria-label=\"Close\" (click)=\"offcanvas.dismiss('x')\"></button>\n </div>\n <div class=\"offcanvas-body\" cdkScrollable>\n <div class=\"fields-list\" cdkDropList cdkDropListLockAxis=\"y\" (cdkDropListDropped)=\"drop($event)\" *ngIf=\"list.fields.fields|async as fields\">\n <ng-container *ngFor=\"let f of fields\">\n <div class=\"field-box\" cdkDrag (click)=\"toggle(f)\" [cdkDragData]=\"f.name\" [class.enabled]=\"f.enabled\" [class.compact]=\"fields.length&gt;30\">{{f.label}}</div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: [".fields-list{width:100%;max-width:100%;border:var(--bs-border-style) var(--bs-border-width) var(--bs-border-color);min-height:50px;display:block;background:var(--bs-body-bg-rgb);border-radius:var(--bs-border-radius-sm);overflow:hidden}.field-box{padding:.5rem 1rem;border-bottom:solid 1px #ccc;color:var(--bs-secondary);display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;cursor:move;background:white;font-size:var(--bs-body-font-size)}.field-box.compact{padding:.2rem 1rem;font-size:.8rem}.field-box.enabled{background-color:#90ee90;color:var(--bs-black)}.cdk-drag-preview{box-sizing:border-box;border-radius:var(--bs-border-radius-sm);box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.field-box:last-child{border:none}.fields-list.cdk-drop-list-dragging .field-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], 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: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i3.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: CdkScrollableModule }, { kind: "ngmodule", type: NgbOffcanvasModule }] });
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.9", ngImport: i0, type: ModelListFieldsSelectorComponent, decorators: [{
50
+ type: Component,
51
+ args: [{ selector: 'data-model-list-fields-selector', standalone: true, imports: [
52
+ CommonModule,
53
+ DragDropModule,
54
+ CdkScrollableModule,
55
+ NgbOffcanvasModule,
56
+ ], providers: [{ provide: CDK_DRAG_CONFIG, useValue: DragConfig }], template: "<i class=\"bi bi-list-ul\" (click)=\"open()\" role=\"button\"></i>\n<ng-template #selector let-offcanvas>\n <div class=\"offcanvas-header\">\n <h4 class=\"offcanvas-title\">Choix des champs</h4>\n <button class=\"btn-close\" type=\"button\" aria-label=\"Close\" (click)=\"offcanvas.dismiss('x')\"></button>\n </div>\n <div class=\"offcanvas-body\" cdkScrollable>\n <div class=\"fields-list\" cdkDropList cdkDropListLockAxis=\"y\" (cdkDropListDropped)=\"drop($event)\" *ngIf=\"list.fields.fields|async as fields\">\n <ng-container *ngFor=\"let f of fields\">\n <div class=\"field-box\" cdkDrag (click)=\"toggle(f)\" [cdkDragData]=\"f.name\" [class.enabled]=\"f.enabled\" [class.compact]=\"fields.length&gt;30\">{{f.label}}</div>\n </ng-container>\n </div>\n </div>\n</ng-template>", styles: [".fields-list{width:100%;max-width:100%;border:var(--bs-border-style) var(--bs-border-width) var(--bs-border-color);min-height:50px;display:block;background:var(--bs-body-bg-rgb);border-radius:var(--bs-border-radius-sm);overflow:hidden}.field-box{padding:.5rem 1rem;border-bottom:solid 1px #ccc;color:var(--bs-secondary);display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;cursor:move;background:white;font-size:var(--bs-body-font-size)}.field-box.compact{padding:.2rem 1rem;font-size:.8rem}.field-box.enabled{background-color:#90ee90;color:var(--bs-black)}.cdk-drag-preview{box-sizing:border-box;border-radius:var(--bs-border-radius-sm);box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.field-box:last-child{border:none}.fields-list.cdk-drop-list-dragging .field-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
57
+ }], ctorParameters: function () { return [{ type: i1.NgbOffcanvas }]; }, propDecorators: { list: [{
58
+ type: Input
59
+ }], ofctpl: [{
60
+ type: ViewChild,
61
+ args: ['selector', { static: true }]
62
+ }] } });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC1maWVsZHMtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS9zcmMvbGliL21vZGVsbGlzdC9tb2RlbC1saXN0LWZpZWxkcy9tb2RlbC1saXN0LWZpZWxkcy1zZWxlY3Rvci9tb2RlbC1saXN0LWZpZWxkcy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvbW9kZWxsaXN0L21vZGVsLWxpc3QtZmllbGRzL21vZGVsLWxpc3QtZmllbGRzLXNlbGVjdG9yL21vZGVsLWxpc3QtZmllbGRzLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdoRixPQUFPLEVBQ0wsZUFBZSxFQUVmLGNBQWMsR0FDZixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7OztBQUU3RCxNQUFNLFVBQVUsR0FBRztJQUNqQixrQkFBa0IsRUFBRSxDQUFDO0lBQ3JCLCtCQUErQixFQUFFLEVBQUU7SUFDbkMsTUFBTSxFQUFFLEtBQUs7Q0FDZCxDQUFDO0FBZUYsTUFBTSxPQUFPLGdDQUFnQztJQU0zQyxZQUFvQixJQUFrQjtRQUFsQixTQUFJLEdBQUosSUFBSSxDQUFjO0lBQUcsQ0FBQztJQUVuQyxRQUFRO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQTJCO1FBQzlCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ25DLElBQUksTUFBTSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFO1lBQzlDLEdBQUcsSUFBSSxDQUFDLENBQUM7U0FDVjthQUFNO1lBQ0wsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUNWO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTSxNQUFNLENBQUMsQ0FBaUI7UUFDN0IsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQzthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7OzZIQWxDVSxnQ0FBZ0M7aUhBQWhDLGdDQUFnQyx3R0FGaEMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLDRJQzlCakUsOHlCQWFjLCtqQ0RZVixZQUFZLG9UQUNaLGNBQWMsMmlDQUNkLG1CQUFtQiw4QkFDbkIsa0JBQWtCOzJGQUlULGdDQUFnQztrQkFiNUMsU0FBUzsrQkFDRSxpQ0FBaUMsY0FHL0IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLGtCQUFrQjtxQkFDbkIsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUM7bUdBSy9DLElBQUk7c0JBQW5CLEtBQUs7Z0JBRUMsTUFBTTtzQkFEWixTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS9kYXRhLW1vZGVsJztcbmltcG9ydCB7IE1vZGVsTGlzdCB9IGZyb20gJy4uLy4uL21vZGVsLWxpc3Quc2VydmljZSc7XG5pbXBvcnQge1xuICBDREtfRFJBR19DT05GSUcsXG4gIENka0RyYWdEcm9wLFxuICBEcmFnRHJvcE1vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdiT2ZmY2FudmFzLCBOZ2JPZmZjYW52YXNNb2R1bGUgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBNb2RlbExpc3RGaWVsZCB9IGZyb20gJy4uL21vZGVsLWxpc3QtZmllbGRzJztcbmltcG9ydCB7IENka1Njcm9sbGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcblxuY29uc3QgRHJhZ0NvbmZpZyA9IHtcbiAgZHJhZ1N0YXJ0VGhyZXNob2xkOiA1LFxuICBwb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOiAxMCxcbiAgekluZGV4OiAxMDAwMCxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdGEtbW9kZWwtbGlzdC1maWVsZHMtc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kZWwtbGlzdC1maWVsZHMtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb2RlbC1saXN0LWZpZWxkcy1zZWxlY3Rvci5jb21wb25lbnQuc2FzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIERyYWdEcm9wTW9kdWxlLFxuICAgIENka1Njcm9sbGFibGVNb2R1bGUsXG4gICAgTmdiT2ZmY2FudmFzTW9kdWxlLFxuICBdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IENES19EUkFHX0NPTkZJRywgdXNlVmFsdWU6IERyYWdDb25maWcgfV0sXG59KVxuZXhwb3J0IGNsYXNzIE1vZGVsTGlzdEZpZWxkc1NlbGVjdG9yQ29tcG9uZW50PFQgZXh0ZW5kcyBEYXRhTW9kZWw+XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIEBJbnB1dCgpIHB1YmxpYyBsaXN0ITogTW9kZWxMaXN0PFQ+O1xuICBAVmlld0NoaWxkKCdzZWxlY3RvcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBvZmN0cGwhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfb2ZjOiBOZ2JPZmZjYW52YXMpIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5saXN0IHx8ICF0aGlzLmxpc3QuZmllbGRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgbGlzdCAvIGZpZWxkcycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVuKCkge1xuICAgIHRoaXMuX29mYy5vcGVuKHRoaXMub2ZjdHBsKTtcbiAgfVxuXG4gIGRyb3AoJGV2ZW50OiBDZGtEcmFnRHJvcDxULCBhbnk+KSB7XG4gICAgbGV0IHBvcyA9ICRldmVudC5jdXJyZW50SW5kZXggKiAxMDtcbiAgICBpZiAoJGV2ZW50LmN1cnJlbnRJbmRleCA+ICRldmVudC5wcmV2aW91c0luZGV4KSB7XG4gICAgICBwb3MgKz0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zIC09IDE7XG4gICAgfVxuICAgIHRoaXMubGlzdC5maWVsZHMuc2V0UG9zaXRpb24oJGV2ZW50Lml0ZW0uZGF0YSwgcG9zKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGUoZjogTW9kZWxMaXN0RmllbGQpIHtcbiAgICBpZiAoZi5lbmFibGVkKSB7XG4gICAgICB0aGlzLmxpc3QuZmllbGRzLmRpc2FibGUoZi5uYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saXN0LmZpZWxkcy5lbmFibGUoZi5uYW1lKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxpIGNsYXNzPVwiYmkgYmktbGlzdC11bFwiIChjbGljayk9XCJvcGVuKClcIiByb2xlPVwiYnV0dG9uXCI+PC9pPlxuPG5nLXRlbXBsYXRlICNzZWxlY3RvciBsZXQtb2ZmY2FudmFzPlxuICA8ZGl2IGNsYXNzPVwib2ZmY2FudmFzLWhlYWRlclwiPlxuICAgIDxoNCBjbGFzcz1cIm9mZmNhbnZhcy10aXRsZVwiPkNob2l4IGRlcyBjaGFtcHM8L2g0PlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4tY2xvc2VcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm9mZmNhbnZhcy5kaXNtaXNzKCd4JylcIj48L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJvZmZjYW52YXMtYm9keVwiIGNka1Njcm9sbGFibGU+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkcy1saXN0XCIgY2RrRHJvcExpc3QgY2RrRHJvcExpc3RMb2NrQXhpcz1cInlcIiAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiICpuZ0lmPVwibGlzdC5maWVsZHMuZmllbGRzfGFzeW5jIGFzIGZpZWxkc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZiBvZiBmaWVsZHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWJveFwiIGNka0RyYWcgKGNsaWNrKT1cInRvZ2dsZShmKVwiIFtjZGtEcmFnRGF0YV09XCJmLm5hbWVcIiBbY2xhc3MuZW5hYmxlZF09XCJmLmVuYWJsZWRcIiBbY2xhc3MuY29tcGFjdF09XCJmaWVsZHMubGVuZ3RoJmd0OzMwXCI+e3tmLmxhYmVsfX08L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
@@ -0,0 +1,225 @@
1
+ import { ReplaySubject } from 'rxjs';
2
+ export class ModelListFields {
3
+ constructor(collection, params) {
4
+ this._fields = new ReplaySubject(1);
5
+ this._enabled = [];
6
+ this._output = new ReplaySubject(1);
7
+ // Get fields from model
8
+ const m = collection.create();
9
+ const tmp = [];
10
+ for (const fn of m.FN) {
11
+ tmp.push({
12
+ name: fn,
13
+ label: m.FM(fn).description || fn,
14
+ allowed: false,
15
+ enabled: false,
16
+ field: m.FV(fn),
17
+ position: tmp.length * 10,
18
+ });
19
+ }
20
+ // Add custom fields if provided
21
+ const custom = params?.custom || [];
22
+ for (const c of custom) {
23
+ tmp.push({
24
+ name: c.name,
25
+ label: c.label,
26
+ allowed: false,
27
+ enabled: false,
28
+ field: null,
29
+ position: tmp.length * 10,
30
+ });
31
+ }
32
+ // Prepare allowed fields (all fields if not set or empty)
33
+ let allowed;
34
+ if (params?.allowed === undefined || params?.allowed.length === 0) {
35
+ allowed = Array.from(m.FN);
36
+ for (const c of custom) {
37
+ allowed.push(c.name);
38
+ }
39
+ }
40
+ else {
41
+ allowed = params.allowed;
42
+ }
43
+ // Prepare excluded fields
44
+ const excluded = params?.excluded || [];
45
+ // Process default fields
46
+ // Use all allowed fields if empty of not set
47
+ const defaults = params?.defaults || allowed;
48
+ // Prepare fields status
49
+ // Set allowed
50
+ for (const fe of allowed) {
51
+ for (const f of tmp) {
52
+ if (f.name === fe) {
53
+ f.allowed = true;
54
+ }
55
+ }
56
+ }
57
+ // Set defaults
58
+ let pos = 0;
59
+ for (const fe of defaults) {
60
+ for (const f of tmp) {
61
+ if (f.name === fe) {
62
+ f.enabled = true;
63
+ f.allowed = true;
64
+ f.position = pos;
65
+ }
66
+ pos += 10;
67
+ }
68
+ }
69
+ // remove excluded
70
+ for (const fe of excluded) {
71
+ for (const f of tmp) {
72
+ if (f.name === fe) {
73
+ f.enabled = false;
74
+ f.allowed = false;
75
+ }
76
+ }
77
+ }
78
+ const filtered = [];
79
+ for (const f of tmp) {
80
+ if (!(!f.enabled && !f.allowed)) {
81
+ filtered.push(f);
82
+ }
83
+ }
84
+ this.__fields = filtered;
85
+ this._update();
86
+ }
87
+ get fields() {
88
+ return this._fields.asObservable();
89
+ }
90
+ get enabled() {
91
+ return this._enabled;
92
+ }
93
+ get output() {
94
+ return this._output.asObservable();
95
+ }
96
+ /**
97
+ * Enable a field by name. Position is optional.
98
+ *
99
+ * @param fname : name of field to be enabled
100
+ * @param position : position (optional)
101
+ * @returns current enabled fields
102
+ */
103
+ enable(fname, position) {
104
+ const f = this.get(fname);
105
+ if (f) {
106
+ f.enabled = true;
107
+ if (position !== undefined) {
108
+ f.position = position;
109
+ }
110
+ }
111
+ else {
112
+ console.error('Field not found', f);
113
+ }
114
+ this._update();
115
+ return this._enabled;
116
+ }
117
+ /**
118
+ * Disable a field by name.
119
+ *
120
+ * @param fname : name of field to be disabled
121
+ * @returns current enabled fields
122
+ */
123
+ disable(fname) {
124
+ const f = this.get(fname);
125
+ if (f) {
126
+ f.enabled = false;
127
+ }
128
+ else {
129
+ console.error('Field not found', f);
130
+ }
131
+ this._update();
132
+ return this._enabled;
133
+ }
134
+ /**
135
+ * Move field `fname` before or after (depending on `position`) field `dest`.
136
+ *
137
+ * @param fname field to move
138
+ * @param position ("before" or "after")
139
+ * @param dest reference field
140
+ * @returns current enabled fields
141
+ */
142
+ move(fname, position, dest = '') {
143
+ const ftarget = this.get(fname);
144
+ if (dest == '') {
145
+ const pos = this._enabled.indexOf(fname);
146
+ dest = this._enabled[pos + (position === 'before' ? -1 : +1)];
147
+ if (dest === undefined) {
148
+ return this._enabled;
149
+ }
150
+ }
151
+ const fdest = this.get(dest);
152
+ // istanbul ignore if
153
+ if (!ftarget || !fdest) {
154
+ console.error('Target / dest not found', fname, dest);
155
+ return this._enabled;
156
+ }
157
+ if (fname == dest) {
158
+ ftarget.position = fdest.position + (position === 'before' ? -15 : +15);
159
+ }
160
+ else {
161
+ ftarget.position = fdest.position + (position === 'before' ? -5 : +5);
162
+ }
163
+ this._update();
164
+ return this._enabled;
165
+ }
166
+ /**
167
+ * Check if field with name `fname` is enabled.
168
+ *
169
+ * @param fname : name of field
170
+ * @returns enabled (true) or disabled (false)
171
+ */
172
+ isEnabled(fname) {
173
+ return this._enabled.indexOf(fname) !== -1;
174
+ }
175
+ /**
176
+ * Get field by name
177
+ * @param fname : name of field
178
+ * @returns Model list field or null if not found
179
+ */
180
+ get(fname) {
181
+ for (const f of this.__fields) {
182
+ if (f.name === fname) {
183
+ return f;
184
+ }
185
+ }
186
+ return null;
187
+ }
188
+ /**
189
+ * Get field by position
190
+ * @param pos : position of field
191
+ * @returns Model list field or null if not found
192
+ */
193
+ getAtPos(pos) {
194
+ return this.__fields[pos] || null;
195
+ }
196
+ setPosition(fname, position) {
197
+ const f = this.get(fname);
198
+ if (f) {
199
+ f.position = position;
200
+ }
201
+ else {
202
+ console.error('Field not found', f);
203
+ }
204
+ this._update();
205
+ return this._enabled;
206
+ }
207
+ _update() {
208
+ this.__fields.sort((a, b) => a.position - b.position);
209
+ let i = 0;
210
+ for (const f of this.__fields) {
211
+ f.position = i * 10;
212
+ i += 1;
213
+ }
214
+ const out = [];
215
+ for (const f of this.__fields) {
216
+ if (f.enabled) {
217
+ out.push(f.name);
218
+ }
219
+ }
220
+ this._enabled = out;
221
+ this._output.next(this._enabled);
222
+ this._fields.next(this.__fields);
223
+ }
224
+ }
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbGlzdC1maWVsZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvbW9kZWxsaXN0L21vZGVsLWxpc3QtZmllbGRzL21vZGVsLWxpc3QtZmllbGRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFjakQsTUFBTSxPQUFPLGVBQWU7SUFHMUIsWUFBWSxVQUF5QixFQUFFLE1BQXFCO1FBc0ZwRCxZQUFPLEdBQUcsSUFBSSxhQUFhLENBQW1CLENBQUMsQ0FBQyxDQUFDO1FBTWpELGFBQVEsR0FBYSxFQUFFLENBQUM7UUFNeEIsWUFBTyxHQUFHLElBQUksYUFBYSxDQUFXLENBQUMsQ0FBQyxDQUFDO1FBakcvQyx3QkFBd0I7UUFDeEIsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzlCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNmLEtBQUssTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNyQixHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNQLElBQUksRUFBRSxFQUFFO2dCQUNSLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsSUFBSSxFQUFFO2dCQUNqQyxPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUUsS0FBSztnQkFDZCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2YsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRTthQUMxQixDQUFDLENBQUM7U0FDSjtRQUNELGdDQUFnQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRTtZQUN0QixH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ekIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzdCLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtnQkFDYixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNsQjtTQUNGO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGEtbW9kZWwnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbiB9IGZyb20gJy4uLy4uL2RhdGEvZGF0YS1jb2xsZWN0aW9uJztcbmltcG9ydCB7IEZpZWxkc1BhcmFtcyB9IGZyb20gJy4uL21vZGVsLWxpc3Quc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxMaXN0RmllbGQge1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGFsbG93ZWQ6IGJvb2xlYW47XG4gIGZpZWxkOiBhbnk7XG4gIHBvc2l0aW9uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2RlbExpc3RGaWVsZHM8VCBleHRlbmRzIERhdGFNb2RlbD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9fZmllbGRzITogTW9kZWxMaXN0RmllbGRbXTtcblxuICBjb25zdHJ1Y3Rvcihjb2xsZWN0aW9uOiBDb2xsZWN0aW9uPFQ+LCBwYXJhbXM/OiBGaWVsZHNQYXJhbXMpIHtcbiAgICAvLyBHZXQgZmllbGRzIGZyb20gbW9kZWxcbiAgICBjb25zdCBtID0gY29sbGVjdGlvbi5jcmVhdGUoKTtcbiAgICBjb25zdCB0bXAgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGZuIG9mIG0uRk4pIHtcbiAgICAgIHRtcC5wdXNoKHtcbiAgICAgICAgbmFtZTogZm4sXG4gICAgICAgIGxhYmVsOiBtLkZNKGZuKS5kZXNjcmlwdGlvbiB8fCBmbixcbiAgICAgICAgYWxsb3dlZDogZmFsc2UsXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBmaWVsZDogbS5GVihmbiksXG4gICAgICAgIHBvc2l0aW9uOiB0bXAubGVuZ3RoICogMTAsXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gQWRkIGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcbiAgICBjb25zdCBjdXN0b20gPSBwYXJhbXM/LmN1c3RvbSB8fCBbXTtcbiAgICBmb3IgKGNvbnN0IGMgb2YgY3VzdG9tKSB7XG4gICAgICB0bXAucHVzaCh7XG4gICAgICAgIG5hbWU6IGMubmFtZSxcbiAgICAgICAgbGFiZWw6IGMubGFiZWwsXG4gICAgICAgIGFsbG93ZWQ6IGZhbHNlLFxuICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgZmllbGQ6IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiB0bXAubGVuZ3RoICogMTAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGFsbG93ZWQgZmllbGRzIChhbGwgZmllbGRzIGlmIG5vdCBzZXQgb3IgZW1wdHkpXG4gICAgbGV0IGFsbG93ZWQ6IHN0cmluZ1tdO1xuICAgIGlmIChwYXJhbXM/LmFsbG93ZWQgPT09IHVuZGVmaW5lZCB8fCBwYXJhbXM/LmFsbG93ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICBhbGxvd2VkID0gQXJyYXkuZnJvbShtLkZOKTtcbiAgICAgIGZvciAoY29uc3QgYyBvZiBjdXN0b20pIHtcbiAgICAgICAgYWxsb3dlZC5wdXNoKGMubmFtZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsbG93ZWQgPSBwYXJhbXMuYWxsb3dlZDtcbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIGV4Y2x1ZGVkIGZpZWxkc1xuICAgIGNvbnN0IGV4Y2x1ZGVkOiBzdHJpbmdbXSA9IHBhcmFtcz8uZXhjbHVkZWQgfHwgW107XG5cbiAgICAvLyBQcm9jZXNzIGRlZmF1bHQgZmllbGRzXG4gICAgLy8gVXNlIGFsbCBhbGxvd2VkIGZpZWxkcyBpZiBlbXB0eSBvZiBub3Qgc2V0XG4gICAgY29uc3QgZGVmYXVsdHM6IHN0cmluZ1tdID0gcGFyYW1zPy5kZWZhdWx0cyB8fCBhbGxvd2VkO1xuXG4gICAgLy8gUHJlcGFyZSBmaWVsZHMgc3RhdHVzXG4gICAgLy8gU2V0IGFsbG93ZWRcbiAgICBmb3IgKGNvbnN0IGZlIG9mIGFsbG93ZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiB0bXApIHtcbiAgICAgICAgaWYgKGYubmFtZSA9PT0gZmUpIHtcbiAgICAgICAgICBmLmFsbG93ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIGxldCBwb3MgPSAwO1xuICAgIGZvciAoY29uc3QgZmUgb2YgZGVmYXVsdHMpIHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiB0bXApIHtcbiAgICAgICAgaWYgKGYubmFtZSA9PT0gZmUpIHtcbiAgICAgICAgICBmLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIGYuYWxsb3dlZCA9IHRydWU7XG4gICAgICAgICAgZi5wb3NpdGlvbiA9IHBvcztcbiAgICAgICAgfVxuICAgICAgICBwb3MgKz0gMTA7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJlbW92ZSBleGNsdWRlZFxuICAgIGZvciAoY29uc3QgZmUgb2YgZXhjbHVkZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiB0bXApIHtcbiAgICAgICAgaWYgKGYubmFtZSA9PT0gZmUpIHtcbiAgICAgICAgICBmLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICBmLmFsbG93ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJlZCA9IFtdO1xuICAgIGZvciAoY29uc3QgZiBvZiB0bXApIHtcbiAgICAgIGlmICghKCFmLmVuYWJsZWQgJiYgIWYuYWxsb3dlZCkpIHtcbiAgICAgICAgZmlsdGVyZWQucHVzaChmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fX2ZpZWxkcyA9IGZpbHRlcmVkO1xuXG4gICAgdGhpcy5fdXBkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9maWVsZHMgPSBuZXcgUmVwbGF5U3ViamVjdDxNb2RlbExpc3RGaWVsZFtdPigxKTtcblxuICBwdWJsaWMgZ2V0IGZpZWxkcygpOiBPYnNlcnZhYmxlPE1vZGVsTGlzdEZpZWxkW10+IHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRzLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZW5hYmxlZDogc3RyaW5nW10gPSBbXTtcblxuICBwdWJsaWMgZ2V0IGVuYWJsZWQoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfb3V0cHV0ID0gbmV3IFJlcGxheVN1YmplY3Q8c3RyaW5nW10+KDEpO1xuXG4gIHB1YmxpYyBnZXQgb3V0cHV0KCk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBhIGZpZWxkIGJ5IG5hbWUuIFBvc2l0aW9uIGlzIG9wdGlvbmFsLlxuICAgKlxuICAgKiBAcGFyYW0gZm5hbWUgOiBuYW1lIG9mIGZpZWxkIHRvIGJlIGVuYWJsZWRcbiAgICogQHBhcmFtICBwb3NpdGlvbiA6IHBvc2l0aW9uIChvcHRpb25hbClcbiAgICogQHJldHVybnMgY3VycmVudCBlbmFibGVkIGZpZWxkc1xuICAgKi9cbiAgcHVibGljIGVuYWJsZShmbmFtZTogc3RyaW5nLCBwb3NpdGlvbj86IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBmID0gdGhpcy5nZXQoZm5hbWUpO1xuICAgIGlmIChmKSB7XG4gICAgICBmLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgaWYgKHBvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZi5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGaWVsZCBub3QgZm91bmQnLCBmKTtcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSBhIGZpZWxkIGJ5IG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSBmbmFtZSA6IG5hbWUgb2YgZmllbGQgdG8gYmUgZGlzYWJsZWRcbiAgICogQHJldHVybnMgIGN1cnJlbnQgZW5hYmxlZCBmaWVsZHNcbiAgICovXG4gIHB1YmxpYyBkaXNhYmxlKGZuYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZiA9IHRoaXMuZ2V0KGZuYW1lKTtcbiAgICBpZiAoZikge1xuICAgICAgZi5lbmFibGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpZWxkIG5vdCBmb3VuZCcsIGYpO1xuICAgIH1cbiAgICB0aGlzLl91cGRhdGUoKTtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGZpZWxkIGBmbmFtZWAgYmVmb3JlIG9yIGFmdGVyIChkZXBlbmRpbmcgb24gYHBvc2l0aW9uYCkgZmllbGQgYGRlc3RgLlxuICAgKlxuICAgKiBAcGFyYW0gZm5hbWUgZmllbGQgdG8gbW92ZVxuICAgKiBAcGFyYW0gcG9zaXRpb24gKFwiYmVmb3JlXCIgb3IgXCJhZnRlclwiKVxuICAgKiBAcGFyYW0gZGVzdCByZWZlcmVuY2UgZmllbGRcbiAgICogQHJldHVybnMgY3VycmVudCBlbmFibGVkIGZpZWxkc1xuICAgKi9cbiAgcHVibGljIG1vdmUoXG4gICAgZm5hbWU6IHN0cmluZyxcbiAgICBwb3NpdGlvbjogJ2JlZm9yZScgfCAnYWZ0ZXInLFxuICAgIGRlc3Q6IHN0cmluZyA9ICcnXG4gICk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBmdGFyZ2V0ID0gdGhpcy5nZXQoZm5hbWUpO1xuICAgIGlmIChkZXN0ID09ICcnKSB7XG4gICAgICBjb25zdCBwb3MgPSB0aGlzLl9lbmFibGVkLmluZGV4T2YoZm5hbWUpO1xuICAgICAgZGVzdCA9IHRoaXMuX2VuYWJsZWRbcG9zICsgKHBvc2l0aW9uID09PSAnYmVmb3JlJyA/IC0xIDogKzEpXTtcbiAgICAgIGlmIChkZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGZkZXN0ID0gdGhpcy5nZXQoZGVzdCk7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gICAgaWYgKCFmdGFyZ2V0IHx8ICFmZGVzdCkge1xuICAgICAgY29uc29sZS5lcnJvcignVGFyZ2V0IC8gZGVzdCBub3QgZm91bmQnLCBmbmFtZSwgZGVzdCk7XG4gICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgICB9XG4gICAgaWYgKGZuYW1lID09IGRlc3QpIHtcbiAgICAgIGZ0YXJnZXQucG9zaXRpb24gPSBmZGVzdC5wb3NpdGlvbiArIChwb3NpdGlvbiA9PT0gJ2JlZm9yZScgPyAtMTUgOiArMTUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdGFyZ2V0LnBvc2l0aW9uID0gZmRlc3QucG9zaXRpb24gKyAocG9zaXRpb24gPT09ICdiZWZvcmUnID8gLTUgOiArNSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgZmllbGQgd2l0aCBuYW1lIGBmbmFtZWAgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQHBhcmFtIGZuYW1lIDogbmFtZSBvZiBmaWVsZFxuICAgKiBAcmV0dXJucyAgZW5hYmxlZCAodHJ1ZSkgb3IgZGlzYWJsZWQgKGZhbHNlKVxuICAgKi9cbiAgcHVibGljIGlzRW5hYmxlZChmbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQuaW5kZXhPZihmbmFtZSkgIT09IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmaWVsZCBieSBuYW1lXG4gICAqIEBwYXJhbSBmbmFtZSA6IG5hbWUgb2YgZmllbGRcbiAgICogQHJldHVybnMgTW9kZWwgbGlzdCBmaWVsZCBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgcHVibGljIGdldChmbmFtZTogc3RyaW5nKTogTW9kZWxMaXN0RmllbGQgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IGYgb2YgdGhpcy5fX2ZpZWxkcykge1xuICAgICAgaWYgKGYubmFtZSA9PT0gZm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmaWVsZCBieSBwb3NpdGlvblxuICAgKiBAcGFyYW0gcG9zIDogcG9zaXRpb24gb2YgZmllbGRcbiAgICogQHJldHVybnMgTW9kZWwgbGlzdCBmaWVsZCBvciBudWxsIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgcHVibGljIGdldEF0UG9zKHBvczogbnVtYmVyKTogTW9kZWxMaXN0RmllbGQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fX2ZpZWxkc1twb3NdIHx8IG51bGw7XG4gIH1cblxuICBzZXRQb3NpdGlvbihmbmFtZTogYW55LCBwb3NpdGlvbjogbnVtYmVyKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGYgPSB0aGlzLmdldChmbmFtZSk7XG4gICAgaWYgKGYpIHtcbiAgICAgIGYucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignRmllbGQgbm90IGZvdW5kJywgZik7XG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlKCkge1xuICAgIHRoaXMuX19maWVsZHMuc29ydCgoYSwgYikgPT4gYS5wb3NpdGlvbiAtIGIucG9zaXRpb24pO1xuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKGNvbnN0IGYgb2YgdGhpcy5fX2ZpZWxkcykge1xuICAgICAgZi5wb3NpdGlvbiA9IGkgKiAxMDtcbiAgICAgIGkgKz0gMTtcbiAgICB9XG4gICAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLl9fZmllbGRzKSB7XG4gICAgICBpZiAoZi5lbmFibGVkKSB7XG4gICAgICAgIG91dC5wdXNoKGYubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2VuYWJsZWQgPSBvdXQ7XG4gICAgdGhpcy5fb3V0cHV0Lm5leHQodGhpcy5fZW5hYmxlZCk7XG4gICAgdGhpcy5fZmllbGRzLm5leHQodGhpcy5fX2ZpZWxkcyk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ // FIXME: allow filter registering, thus making this static type impossible
2
+ export {};
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVydHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhL3NyYy9saWIvbW9kZWxsaXN0L21vZGVsLWxpc3QtZmlsdGVycy9maWx0ZXJzL2ZpbHRlcnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJFQUEyRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEZJWE1FOiBhbGxvdyBmaWx0ZXIgcmVnaXN0ZXJpbmcsIHRodXMgbWFraW5nIHRoaXMgc3RhdGljIHR5cGUgaW1wb3NzaWJsZVxuXG5leHBvcnQgdHlwZSBGSUxURVJfVFlQRSA9XG4gIHwgJ2F1dG9jb21wbGV0ZSdcbiAgfCAnYXV0b2NvbXBsZXRlbXVsdGknXG4gIHwgJ2RhdGV0aW1lJ1xuICB8ICdkYXRlJ1xuICB8ICdkYXRldGltZXJhbmdlJ1xuICB8ICdmbGFncydcbiAgfCAnZ2VvZGlzdGFuY2UnXG4gIHwgJ251bWJlcidcbiAgfCAnc2VsZWN0J1xuICB8ICdzZWxlY3RtdWx0aSdcbiAgfCAndGV4dCdcbiAgfCAndHJlZSc7XG4iXX0=