ngx-edu-sharing-ui 10.0.20 → 10.0.22

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 (131) hide show
  1. package/assets/scss/material-theme.scss +3 -3
  2. package/assets/scss/mixins.scss +1 -1
  3. package/assets/scss/variables-root.scss +2 -0
  4. package/assets/scss/variables-scss.scss +3 -4
  5. package/assets/scss/variables.scss +1 -1
  6. package/fesm2022/ngx-edu-sharing-ui.mjs +376 -319
  7. package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
  8. package/lib/index.d.ts +1 -0
  9. package/lib/list-items/list-widget.d.ts +1 -1
  10. package/lib/mds-viewer/mds-editor-instance-service.abstract.d.ts +14 -0
  11. package/lib/mds-viewer/widget/mds-widget.component.d.ts +6 -4
  12. package/package.json +8 -9
  13. package/esm2022/lib/actionbar/actionbar.component.mjs +0 -206
  14. package/esm2022/lib/common/edu-sharing-ui-common.module.mjs +0 -170
  15. package/esm2022/lib/directives/border-box-observer.directive.mjs +0 -71
  16. package/esm2022/lib/directives/check-text-overflow.directive.mjs +0 -71
  17. package/esm2022/lib/directives/drag-nodes/drag-nodes.mjs +0 -14
  18. package/esm2022/lib/directives/drag-nodes/nodes-drag-source.directive.mjs +0 -79
  19. package/esm2022/lib/directives/drag-nodes/nodes-drag.directive.mjs +0 -49
  20. package/esm2022/lib/directives/drag-nodes/nodes-drop-target.directive.mjs +0 -105
  21. package/esm2022/lib/directives/focus-state.directive.mjs +0 -44
  22. package/esm2022/lib/directives/icon.directive.mjs +0 -184
  23. package/esm2022/lib/directives/infinite-scroll.directive.mjs +0 -85
  24. package/esm2022/lib/dropdown/dropdown.component.mjs +0 -83
  25. package/esm2022/lib/edu-sharing-ui-configuration.mjs +0 -48
  26. package/esm2022/lib/edu-sharing-ui.module.mjs +0 -82
  27. package/esm2022/lib/index.mjs +0 -96
  28. package/esm2022/lib/list-items/available-widgets.mjs +0 -27
  29. package/esm2022/lib/list-items/format-duration.pipe.mjs +0 -20
  30. package/esm2022/lib/list-items/list-base/list-base.component.mjs +0 -46
  31. package/esm2022/lib/list-items/list-collection-info/list-collection-info.component.mjs +0 -29
  32. package/esm2022/lib/list-items/list-counts/list-counts.component.mjs +0 -56
  33. package/esm2022/lib/list-items/list-items.module.mjs +0 -50
  34. package/esm2022/lib/list-items/list-node-license/list-node-license.component.mjs +0 -41
  35. package/esm2022/lib/list-items/list-node-replication-source/list-node-replication-source.component.mjs +0 -47
  36. package/esm2022/lib/list-items/list-node-workflow/list-node-workflow.component.mjs +0 -24
  37. package/esm2022/lib/list-items/list-text/list-text.component.mjs +0 -106
  38. package/esm2022/lib/list-items/list-widget.mjs +0 -49
  39. package/esm2022/lib/list-items/node-row/node-row.component.mjs +0 -24
  40. package/esm2022/lib/list-items/node-source.pipe.mjs +0 -49
  41. package/esm2022/lib/mds/mds-helper.service.mjs +0 -167
  42. package/esm2022/lib/mds/mds.module.mjs +0 -16
  43. package/esm2022/lib/mds-viewer/mds-viewer.component.mjs +0 -170
  44. package/esm2022/lib/mds-viewer/mds-viewer.service.mjs +0 -18
  45. package/esm2022/lib/mds-viewer/replace-element-with-div.mjs +0 -47
  46. package/esm2022/lib/mds-viewer/view-instance.service.mjs +0 -27
  47. package/esm2022/lib/mds-viewer/widget/mds-widget.component.mjs +0 -379
  48. package/esm2022/lib/node-entries/combined-data-source.mjs +0 -41
  49. package/esm2022/lib/node-entries/custom-templates-data-source.mjs +0 -7
  50. package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +0 -21
  51. package/esm2022/lib/node-entries/entries-model.mjs +0 -24
  52. package/esm2022/lib/node-entries/items-cap.mjs +0 -47
  53. package/esm2022/lib/node-entries/list-item-label.pipe.mjs +0 -37
  54. package/esm2022/lib/node-entries/node-cache.mjs +0 -73
  55. package/esm2022/lib/node-entries/node-data-source-remote.mjs +0 -4
  56. package/esm2022/lib/node-entries/node-data-source.mjs +0 -117
  57. package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +0 -117
  58. package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +0 -329
  59. package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +0 -44
  60. package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +0 -27
  61. package/esm2022/lib/node-entries/node-entries-global.service.mjs +0 -71
  62. package/esm2022/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.mjs +0 -42
  63. package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +0 -294
  64. package/esm2022/lib/node-entries/node-entries-templates.service.mjs +0 -11
  65. package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +0 -369
  66. package/esm2022/lib/node-entries/node-entries.component.mjs +0 -132
  67. package/esm2022/lib/node-entries/node-entries.module.mjs +0 -161
  68. package/esm2022/lib/node-entries/node-rating/node-rating.component.mjs +0 -125
  69. package/esm2022/lib/node-entries/node-stats-badges/node-stats-badges.component.mjs +0 -48
  70. package/esm2022/lib/node-entries/node-type-badge/node-type-badge.component.mjs +0 -36
  71. package/esm2022/lib/node-entries/option-button/option-button.component.mjs +0 -75
  72. package/esm2022/lib/node-entries/preview-image/preview-image.component.mjs +0 -53
  73. package/esm2022/lib/node-entries/sort-select-panel/sort-select-panel.component.mjs +0 -41
  74. package/esm2022/lib/node-url/node-url.component.mjs +0 -132
  75. package/esm2022/lib/pipes/file-size.pipe.mjs +0 -32
  76. package/esm2022/lib/pipes/format-date.pipe.mjs +0 -38
  77. package/esm2022/lib/pipes/mds-duration.pipe.mjs +0 -25
  78. package/esm2022/lib/pipes/node-icon.pipe.mjs +0 -18
  79. package/esm2022/lib/pipes/node-image-size.pipe.mjs +0 -24
  80. package/esm2022/lib/pipes/node-image.pipe.mjs +0 -55
  81. package/esm2022/lib/pipes/node-license.pipe.mjs +0 -24
  82. package/esm2022/lib/pipes/node-person-name.pipe.mjs +0 -50
  83. package/esm2022/lib/pipes/node-title.pipe.mjs +0 -35
  84. package/esm2022/lib/pipes/option-tooltip.pipe.mjs +0 -33
  85. package/esm2022/lib/pipes/property-slug.pipe.mjs +0 -16
  86. package/esm2022/lib/pipes/replace-chars.pipe.mjs +0 -29
  87. package/esm2022/lib/pipes/vcard-name.pipe.mjs +0 -25
  88. package/esm2022/lib/services/abstract/app.service.mjs +0 -3
  89. package/esm2022/lib/services/abstract/keyboard-shortcuts.service.mjs +0 -10
  90. package/esm2022/lib/services/abstract/options-helper.service.mjs +0 -3
  91. package/esm2022/lib/services/abstract/toast.service.mjs +0 -3
  92. package/esm2022/lib/services/accessibility.service.mjs +0 -73
  93. package/esm2022/lib/services/app-container.service.mjs +0 -69
  94. package/esm2022/lib/services/local-events.service.mjs +0 -43
  95. package/esm2022/lib/services/node-entries.service.mjs +0 -201
  96. package/esm2022/lib/services/node-helper.service.mjs +0 -330
  97. package/esm2022/lib/services/nodes-drag-drop.service.mjs +0 -155
  98. package/esm2022/lib/services/options-helper-data.service.mjs +0 -142
  99. package/esm2022/lib/services/render-helper.service.mjs +0 -114
  100. package/esm2022/lib/services/repo-url.service.mjs +0 -50
  101. package/esm2022/lib/services/search-helper.service.mjs +0 -52
  102. package/esm2022/lib/services/temporary-storage.service.mjs +0 -48
  103. package/esm2022/lib/services/ui.service.mjs +0 -327
  104. package/esm2022/lib/sort-dropdown/sort-dropdown.component.mjs +0 -50
  105. package/esm2022/lib/spinner/spinner.component.mjs +0 -19
  106. package/esm2022/lib/spinner-small/spinner-small.component.mjs +0 -18
  107. package/esm2022/lib/translations/fallback-translation-handler.mjs +0 -6
  108. package/esm2022/lib/translations/translation-loader.mjs +0 -219
  109. package/esm2022/lib/translations/translation-source.mjs +0 -11
  110. package/esm2022/lib/translations/translations.module.mjs +0 -82
  111. package/esm2022/lib/translations/translations.service.mjs +0 -238
  112. package/esm2022/lib/types/accessibillity.mjs +0 -19
  113. package/esm2022/lib/types/api-models.mjs +0 -2
  114. package/esm2022/lib/types/drag-drop.mjs +0 -2
  115. package/esm2022/lib/types/injection-tokens.mjs +0 -31
  116. package/esm2022/lib/types/keyboard-shortcuts.mjs +0 -11
  117. package/esm2022/lib/types/list-item.mjs +0 -41
  118. package/esm2022/lib/types/option-item.mjs +0 -192
  119. package/esm2022/lib/types/workflow.mjs +0 -25
  120. package/esm2022/lib/util/DateHelper.mjs +0 -200
  121. package/esm2022/lib/util/VCard.mjs +0 -278
  122. package/esm2022/lib/util/color-helper.mjs +0 -124
  123. package/esm2022/lib/util/duration-helper.mjs +0 -102
  124. package/esm2022/lib/util/functions.mjs +0 -13
  125. package/esm2022/lib/util/helper.mjs +0 -64
  126. package/esm2022/lib/util/isNumeric.mjs +0 -11
  127. package/esm2022/lib/util/rest-helper.mjs +0 -42
  128. package/esm2022/lib/util/ui-animation.mjs +0 -146
  129. package/esm2022/lib/util/ui-constants.mjs +0 -21
  130. package/esm2022/ngx-edu-sharing-ui.mjs +0 -5
  131. package/esm2022/public-api.mjs +0 -2
@@ -1,47 +0,0 @@
1
- import * as rxjs from 'rxjs';
2
- import { BehaviorSubject } from 'rxjs';
3
- import { distinctUntilChanged, map } from 'rxjs/operators';
4
- export class ItemsCap {
5
- constructor() {
6
- this._cap = new BehaviorSubject(null);
7
- this._disabled = new BehaviorSubject(false);
8
- this._isActivelyCapping = false;
9
- this._effectiveCap = rxjs
10
- .combineLatest([this._cap, this._disabled])
11
- .pipe(map(([cap, disabled]) => (disabled ? null : cap)), distinctUntilChanged());
12
- }
13
- /** The number of items to which the data should be capped. */
14
- get cap() {
15
- return this._cap.value;
16
- }
17
- set cap(value) {
18
- this._cap.next(value ?? null);
19
- }
20
- /** Whether to temporarily disable capping. */
21
- get disabled() {
22
- return this._disabled.value;
23
- }
24
- set disabled(value) {
25
- this._disabled.next(value);
26
- }
27
- /** Whether there is more data available that is currently being capped. */
28
- get isActivelyCapping() {
29
- return this._isActivelyCapping;
30
- }
31
- connect(dataStream) {
32
- return rxjs.combineLatest([this._effectiveCap, dataStream]).pipe(map(([effectiveCap, originalData]) => {
33
- const needToCap = this._needToCap(effectiveCap, originalData);
34
- this._isActivelyCapping = needToCap;
35
- if (needToCap) {
36
- return originalData.slice(0, effectiveCap);
37
- }
38
- else {
39
- return originalData;
40
- }
41
- }));
42
- }
43
- _needToCap(effectiveCap, originalData) {
44
- return effectiveCap && originalData?.length > effectiveCap;
45
- }
46
- }
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMtY2FwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvaXRlbXMtY2FwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNELE1BQU0sT0FBTyxRQUFRO0lBQXJCO1FBUVksU0FBSSxHQUFHLElBQUksZUFBZSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQVNoRCxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFNdkMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBRTNCLGtCQUFhLEdBQThCLElBQUk7YUFDbEQsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDMUMsSUFBSSxDQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNqRCxvQkFBb0IsRUFBRSxDQUN6QixDQUFDO0lBbUJWLENBQUM7SUFoREcsOERBQThEO0lBQzlELElBQUksR0FBRztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksR0FBRyxDQUFDLEtBQW9CO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBR0QsOENBQThDO0lBQzlDLElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUdELDJFQUEyRTtJQUMzRSxJQUFJLGlCQUFpQjtRQUNqQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNuQyxDQUFDO0lBVUQsT0FBTyxDQUFDLFVBQTJCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzVELEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztZQUNwQyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNaLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDL0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sWUFBWSxDQUFDO1lBQ3hCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVPLFVBQVUsQ0FBQyxZQUEyQixFQUFFLFlBQWlCO1FBQzdELE9BQU8sWUFBWSxJQUFJLFlBQVksRUFBRSxNQUFNLEdBQUcsWUFBWSxDQUFDO0lBQy9ELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHJ4anMgZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtc0NhcDxUPiB7XG4gICAgLyoqIFRoZSBudW1iZXIgb2YgaXRlbXMgdG8gd2hpY2ggdGhlIGRhdGEgc2hvdWxkIGJlIGNhcHBlZC4gKi9cbiAgICBnZXQgY2FwKCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FwLnZhbHVlO1xuICAgIH1cbiAgICBzZXQgY2FwKHZhbHVlOiBudW1iZXIgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX2NhcC5uZXh0KHZhbHVlID8/IG51bGwpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jYXAgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gdGVtcG9yYXJpbHkgZGlzYWJsZSBjYXBwaW5nLiAqL1xuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkLnZhbHVlO1xuICAgIH1cbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQubmV4dCh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogV2hldGhlciB0aGVyZSBpcyBtb3JlIGRhdGEgYXZhaWxhYmxlIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGNhcHBlZC4gKi9cbiAgICBnZXQgaXNBY3RpdmVseUNhcHBpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZWx5Q2FwcGluZztcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNBY3RpdmVseUNhcHBpbmcgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2VmZmVjdGl2ZUNhcDogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPiA9IHJ4anNcbiAgICAgICAgLmNvbWJpbmVMYXRlc3QoW3RoaXMuX2NhcCwgdGhpcy5fZGlzYWJsZWRdKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoW2NhcCwgZGlzYWJsZWRdKSA9PiAoZGlzYWJsZWQgPyBudWxsIDogY2FwKSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICApO1xuXG4gICAgY29ubmVjdChkYXRhU3RyZWFtOiBPYnNlcnZhYmxlPFRbXT4pOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgICAgICByZXR1cm4gcnhqcy5jb21iaW5lTGF0ZXN0KFt0aGlzLl9lZmZlY3RpdmVDYXAsIGRhdGFTdHJlYW1dKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbZWZmZWN0aXZlQ2FwLCBvcmlnaW5hbERhdGFdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVlZFRvQ2FwID0gdGhpcy5fbmVlZFRvQ2FwKGVmZmVjdGl2ZUNhcCwgb3JpZ2luYWxEYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0FjdGl2ZWx5Q2FwcGluZyA9IG5lZWRUb0NhcDtcbiAgICAgICAgICAgICAgICBpZiAobmVlZFRvQ2FwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbERhdGEuc2xpY2UoMCwgZWZmZWN0aXZlQ2FwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxEYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX25lZWRUb0NhcChlZmZlY3RpdmVDYXA6IG51bWJlciB8IG51bGwsIG9yaWdpbmFsRGF0YTogVFtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBlZmZlY3RpdmVDYXAgJiYgb3JpZ2luYWxEYXRhPy5sZW5ndGggPiBlZmZlY3RpdmVDYXA7XG4gICAgfVxufVxuIl19
@@ -1,37 +0,0 @@
1
- import { Pipe } from '@angular/core';
2
- import * as rxjs from 'rxjs';
3
- import { delay, startWith, switchMap } from 'rxjs/operators';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@ngx-translate/core";
6
- import * as i2 from "../translations/translations.service";
7
- export class ListItemLabelPipe {
8
- constructor(translate, translations) {
9
- this.translate = translate;
10
- this.translations = translations;
11
- }
12
- transform(item, args = { fallback: item.name }) {
13
- const mapping = {
14
- NODE: 'NODE',
15
- COLLECTION: 'NODE',
16
- NODE_PROPOSAL: 'NODE_PROPOSAL',
17
- ORG: 'ORG',
18
- GROUP: 'GROUP',
19
- USER: 'USER',
20
- };
21
- if (item.label) {
22
- return rxjs.of(item.label);
23
- }
24
- else {
25
- return this.translations.waitForInit().pipe(startWith(null), delay(1), switchMap(() => this.translate.get(mapping[item.type] + '.' + item.name, {
26
- fallback: args.fallback,
27
- })));
28
- }
29
- }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListItemLabelPipe, deps: [{ token: i1.TranslateService }, { token: i2.TranslationsService }], target: i0.ɵɵFactoryTarget.Pipe }); }
31
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: ListItemLabelPipe, name: "esListItemLabel" }); }
32
- }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ListItemLabelPipe, decorators: [{
34
- type: Pipe,
35
- args: [{ name: 'esListItemLabel' }]
36
- }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.TranslationsService }] });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLWxhYmVsLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL25vZGUtZW50cmllcy9saXN0LWl0ZW0tbGFiZWwucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUVwRCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUk3QixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUc3RCxNQUFNLE9BQU8saUJBQWlCO0lBQzFCLFlBQW9CLFNBQTJCLEVBQVUsWUFBaUM7UUFBdEUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7SUFBRyxDQUFDO0lBRTlGLFNBQVMsQ0FBQyxJQUFjLEVBQUUsSUFBSSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDcEQsTUFBTSxPQUFPLEdBQUc7WUFDWixJQUFJLEVBQUUsTUFBTTtZQUNaLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLGFBQWEsRUFBRSxlQUFlO1lBQzlCLEdBQUcsRUFBRSxLQUFLO1lBQ1YsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsTUFBTTtTQUNmLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNiLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUN2QyxTQUFTLENBQUMsSUFBWSxDQUFDLEVBQ3ZCLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixTQUFTLENBQUMsR0FBRyxFQUFFLENBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDckQsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQzFCLENBQUMsQ0FDTCxDQUNKLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQzsrR0F6QlEsaUJBQWlCOzZHQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRDdCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgKiBhcyByeGpzIGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICcuLi90eXBlcy9saXN0LWl0ZW0nO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zU2VydmljZSB9IGZyb20gJy4uL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBkZWxheSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBQaXBlKHsgbmFtZTogJ2VzTGlzdEl0ZW1MYWJlbCcgfSlcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbUxhYmVsUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0aW9uczogVHJhbnNsYXRpb25zU2VydmljZSkge31cblxuICAgIHRyYW5zZm9ybShpdGVtOiBMaXN0SXRlbSwgYXJncyA9IHsgZmFsbGJhY2s6IGl0ZW0ubmFtZSB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgIE5PREU6ICdOT0RFJyxcbiAgICAgICAgICAgIENPTExFQ1RJT046ICdOT0RFJyxcbiAgICAgICAgICAgIE5PREVfUFJPUE9TQUw6ICdOT0RFX1BST1BPU0FMJyxcbiAgICAgICAgICAgIE9SRzogJ09SRycsXG4gICAgICAgICAgICBHUk9VUDogJ0dST1VQJyxcbiAgICAgICAgICAgIFVTRVI6ICdVU0VSJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGl0ZW0ubGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiByeGpzLm9mKGl0ZW0ubGFiZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25zLndhaXRGb3JJbml0KCkucGlwZShcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbCBhcyB2b2lkKSxcbiAgICAgICAgICAgICAgICBkZWxheSgxKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0KG1hcHBpbmdbaXRlbS50eXBlXSArICcuJyArIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s6IGFyZ3MuZmFsbGJhY2ssXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,73 +0,0 @@
1
- import { notNull } from '../util/functions';
2
- export class NodeCache {
3
- constructor() {
4
- this._slices = [];
5
- }
6
- add(slice) {
7
- if (slice.endIndex - slice.startIndex !== slice.data.length) {
8
- throw new Error('Tried to add invalid slice to cache: ' + JSON.stringify(slice));
9
- }
10
- this._slices = this._normalizeSlices([...this._slices, slice]);
11
- }
12
- clear() {
13
- this._slices = [];
14
- }
15
- get(range) {
16
- for (const slice of this._slices) {
17
- if (slice.startIndex <= range.startIndex && slice.endIndex >= range.endIndex) {
18
- return slice.data.slice(range.startIndex - slice.startIndex, range.endIndex - slice.startIndex);
19
- }
20
- }
21
- // for the first request
22
- console.warn('Requested range was not found in the slices cache, falling back to a smaller slice (the backend resolved too less data)', range, this._slices);
23
- for (const slice of this._slices) {
24
- if (slice.startIndex <= range.startIndex && slice.endIndex >= range.startIndex) {
25
- return slice.data.slice(range.startIndex - slice.startIndex, range.endIndex - slice.startIndex);
26
- }
27
- }
28
- console.error('Could not find any slice for the range', range, this._slices);
29
- return null;
30
- }
31
- getMissingRange(requestedRange) {
32
- let fromIndex = requestedRange.startIndex;
33
- let toIndex = requestedRange.endIndex;
34
- for (const slice of this._slices) {
35
- if (slice.startIndex <= fromIndex && slice.endIndex > fromIndex) {
36
- fromIndex = slice.endIndex;
37
- }
38
- else if (slice.startIndex < toIndex && slice.endIndex >= toIndex) {
39
- toIndex = slice.startIndex;
40
- }
41
- if (fromIndex >= toIndex) {
42
- return null;
43
- }
44
- }
45
- return { startIndex: fromIndex, endIndex: toIndex };
46
- }
47
- _normalizeSlices(slices) {
48
- slices.sort((lhs, rhs) => lhs.startIndex - rhs.startIndex);
49
- for (let i = 0; i < slices.length - 1; i++) {
50
- for (let j = i + 1; j < slices.length; j++) {
51
- if (this._canMerge(slices[i], slices[j])) {
52
- slices[i] = this._merge(slices[i], slices[j]);
53
- slices[j] = null; // Mark for deletion
54
- }
55
- }
56
- }
57
- return slices.filter(notNull);
58
- }
59
- _canMerge(lhs, rhs) {
60
- if (!lhs || !rhs) {
61
- return false;
62
- }
63
- return lhs.endIndex >= rhs.startIndex;
64
- }
65
- _merge(lhs, rhs) {
66
- return {
67
- startIndex: lhs.startIndex,
68
- endIndex: rhs.endIndex,
69
- data: [...lhs.data, ...rhs.data.slice(lhs.endIndex - rhs.startIndex)],
70
- };
71
- }
72
- }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL25vZGUtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBVzVDLE1BQU0sT0FBTyxTQUFTO0lBQXRCO1FBQ1ksWUFBTyxHQUFpQyxFQUFFLENBQUM7SUFtRnZELENBQUM7SUFqRkcsR0FBRyxDQUFDLEtBQXdCO1FBQ3hCLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQXFCO1FBQ3JCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9CLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMzRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUNuQixLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQ25DLEtBQUssQ0FBQyxRQUFRLEdB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LElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNmLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUMxQyxDQUFDO0lBRU8sTUFBTSxDQUFDLEdBQXNCLEVBQUUsR0FBc0I7UUFDekQsT0FBTztZQUNILFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtZQUMxQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7WUFDdEIsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDeEUsQ0FBQztJQUNOLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vdE51bGwgfSBmcm9tICcuLi91dGlsL2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZUNhY2hlUmFuZ2Uge1xuICAgIHN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBlbmRJbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVDYWNoZVNsaWNlPFQ+IGV4dGVuZHMgTm9kZUNhY2hlUmFuZ2Uge1xuICAgIGRhdGE6IHJlYWRvbmx5IFRbXTtcbn1cblxuZXhwb3J0IGNsYXNzIE5vZGVDYWNoZTxUPiB7XG4gICAgcHJpdmF0ZSBfc2xpY2VzOiByZWFkb25seSBOb2RlQ2FjaGVTbGljZTxUPltdID0gW107XG5cbiAgICBhZGQoc2xpY2U6IE5vZGVDYWNoZVNsaWNlPFQ+KTogdm9pZCB7XG4gICAgICAgIGlmIChzbGljZS5lbmRJbmRleCAtIHNsaWNlLnN0YXJ0SW5kZXggIT09IHNsaWNlLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyaWVkIHRvIGFkZCBpbnZhbGlkIHNsaWNlIHRvIGNhY2hlOiAnICsgSlNPTi5zdHJpbmdpZnkoc2xpY2UpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zbGljZXMgPSB0aGlzLl9ub3JtYWxpemVTbGljZXMoWy4uLnRoaXMuX3NsaWNlcywgc2xpY2VdKTtcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5fc2xpY2VzID0gW107XG4gICAgfVxuXG4gICAgZ2V0KHJhbmdlOiBOb2RlQ2FjaGVSYW5nZSk6IFRbXSB8IG51bGwge1xuICAgICAgICBmb3IgKGNvbnN0IHNsaWNlIG9mIHRoaXMuX3NsaWNlcykge1xuICAgICAgICAgICAgaWYgKHNsaWNlLnN0YXJ0SW5kZXggPD0gcmFuZ2Uuc3RhcnRJbmRleCAmJiBzbGljZS5lbmRJbmRleCA+PSByYW5nZS5lbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzbGljZS5kYXRhLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICByYW5nZS5zdGFydEluZGV4IC0gc2xpY2Uuc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kSW5kZXggLSBzbGljZS5zdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm9yIHRoZSBmaXJzdCByZXF1ZXN0XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICdSZXF1ZXN0ZWQgcmFuZ2Ugd2FzIG5vdCBmb3VuZCBpbiB0aGUgc2xpY2VzIGNhY2hlLCBmYWxsaW5nIGJhY2sgdG8gYSBzbWFsbGVyIHNsaWNlICh0aGUgYmFja2VuZCByZXNvbHZlZCB0b28gbGVzcyBkYXRhKScsXG4gICAgICAgICAgICByYW5nZSxcbiAgICAgICAgICAgIHRoaXMuX3NsaWNlcyxcbiAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBzbGljZSBvZiB0aGlzLl9zbGljZXMpIHtcbiAgICAgICAgICAgIGlmIChzbGljZS5zdGFydEluZGV4IDw9IHJhbmdlLnN0YXJ0SW5kZXggJiYgc2xpY2UuZW5kSW5kZXggPj0gcmFuZ2Uuc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzbGljZS5kYXRhLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICByYW5nZS5zdGFydEluZGV4IC0gc2xpY2Uuc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kSW5kZXggLSBzbGljZS5zdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGZpbmQgYW55IHNsaWNlIGZvciB0aGUgcmFuZ2UnLCByYW5nZSwgdGhpcy5fc2xpY2VzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0TWlzc2luZ1JhbmdlKHJlcXVlc3RlZFJhbmdlOiBOb2RlQ2FjaGVSYW5nZSk6IE5vZGVDYWNoZVJhbmdlIHwgbnVsbCB7XG4gICAgICAgIGxldCBmcm9tSW5kZXggPSByZXF1ZXN0ZWRSYW5nZS5zdGFydEluZGV4O1xuICAgICAgICBsZXQgdG9JbmRleCA9IHJlcXVlc3RlZFJhbmdlLmVuZEluZGV4O1xuICAgICAgICBmb3IgKGNvbnN0IHNsaWNlIG9mIHRoaXMuX3NsaWNlcykge1xuICAgICAgICAgICAgaWYgKHNsaWNlLnN0YXJ0SW5kZXggPD0gZnJvbUluZGV4ICYmIHNsaWNlLmVuZEluZGV4ID4gZnJvbUluZGV4KSB7XG4gICAgICAgICAgICAgICAgZnJvbUluZGV4ID0gc2xpY2UuZW5kSW5kZXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNsaWNlLnN0YXJ0SW5kZXggPCB0b0luZGV4ICYmIHNsaWNlLmVuZEluZGV4ID49IHRvSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0b0luZGV4ID0gc2xpY2Uuc3RhcnRJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmcm9tSW5kZXggPj0gdG9JbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXJ0SW5kZXg6IGZyb21JbmRleCwgZW5kSW5kZXg6IHRvSW5kZXggfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9ub3JtYWxpemVTbGljZXMoc2xpY2VzOiBOb2RlQ2FjaGVTbGljZTxUPltdKTogTm9kZUNhY2hlU2xpY2U8VD5bXSB7XG4gICAgICAgIHNsaWNlcy5zb3J0KChsaHMsIHJocykgPT4gbGhzLnN0YXJ0SW5kZXggLSByaHMuc3RhcnRJbmRleCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpY2VzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgc2xpY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Nhbk1lcmdlKHNsaWNlc1tpXSwgc2xpY2VzW2pdKSkge1xuICAgICAgICAgICAgICAgICAgICBzbGljZXNbaV0gPSB0aGlzLl9tZXJnZShzbGljZXNbaV0sIHNsaWNlc1tqXSk7XG4gICAgICAgICAgICAgICAgICAgIHNsaWNlc1tqXSA9IG51bGw7IC8vIE1hcmsgZm9yIGRlbGV0aW9uXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzbGljZXMuZmlsdGVyKG5vdE51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Nhbk1lcmdlKGxoczogTm9kZUNhY2hlU2xpY2U8VD4sIHJoczogTm9kZUNhY2hlU2xpY2U8VD4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFsaHMgfHwgIXJocykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaHMuZW5kSW5kZXggPj0gcmhzLnN0YXJ0SW5kZXg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWVyZ2UobGhzOiBOb2RlQ2FjaGVTbGljZTxUPiwgcmhzOiBOb2RlQ2FjaGVTbGljZTxUPik6IE5vZGVDYWNoZVNsaWNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IGxocy5zdGFydEluZGV4LFxuICAgICAgICAgICAgZW5kSW5kZXg6IHJocy5lbmRJbmRleCxcbiAgICAgICAgICAgIGRhdGE6IFsuLi5saHMuZGF0YSwgLi4ucmhzLmRhdGEuc2xpY2UobGhzLmVuZEluZGV4IC0gcmhzLnN0YXJ0SW5kZXgpXSxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
@@ -1,4 +0,0 @@
1
- import { NodeDataSource } from './node-data-source';
2
- export class NodeDataSourceRemote extends NodeDataSource {
3
- }
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1kYXRhLXNvdXJjZS1yZW1vdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL25vZGUtZW50cmllcy9ub2RlLWRhdGEtc291cmNlLXJlbW90ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFjcEQsTUFBTSxPQUFnQixvQkFHcEIsU0FBUSxjQUFpQjtDQWdCMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb2RlRGF0YVNvdXJjZSB9IGZyb20gJy4vbm9kZS1kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBHZW5lcmljQXV0aG9yaXR5LCBOb2RlIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBQYWdpbmF0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL25vZGUtZW50cmllcy1nbG9iYWwuc2VydmljZSc7XG5pbXBvcnQgeyBTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBTb3J0UGFuZWwgfSBmcm9tICcuLi90eXBlcy9saXN0LWl0ZW0nO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcblxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uQ29uZmlnIHtcbiAgICBkZWZhdWx0UGFnZVNpemU6IG51bWJlcjtcbiAgICBzdHJhdGVneTogUGFnaW5hdGlvblN0cmF0ZWd5O1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTm9kZURhdGFTb3VyY2VSZW1vdGU8XG4gICAgVCBleHRlbmRzIE5vZGUgfCBHZW5lcmljQXV0aG9yaXR5ID0gTm9kZSxcbiAgICBQIGV4dGVuZHMgTWF0UGFnaW5hdG9yID0gTWF0UGFnaW5hdG9yLFxuPiBleHRlbmRzIE5vZGVEYXRhU291cmNlPFQ+IHtcbiAgICBhYnN0cmFjdCBnZXQgcGFnaW5hdG9yKCk6IFAgfCBudWxsO1xuICAgIGFic3RyYWN0IHNldCBwYWdpbmF0b3IodmFsdWU6IFAgfCBudWxsKTtcbiAgICBhYnN0cmFjdCBnZXQgc29ydFBhbmVsKCk6IFNvcnRQYW5lbDtcbiAgICBhYnN0cmFjdCBzZXQgc29ydFBhbmVsKHZhbHVlOiBTb3J0UGFuZWwpO1xuICAgIGFic3RyYWN0IGxvYWRNb3JlKCk6IGJvb2xlYW47XG5cbiAgICBhYnN0cmFjdCByZWdpc3RlclF1ZXJ5UGFyYW1ldGVycyhyb3V0ZTogQWN0aXZhdGVkUm91dGUpOiB2b2lkO1xuXG4gICAgYWJzdHJhY3QgaW5pdCh7XG4gICAgICAgIHBhZ2luYXRpb25Db25maWcsXG4gICAgICAgIGRlZmF1bHRTb3J0LFxuICAgIH06IHtcbiAgICAgICAgcGFnaW5hdGlvbkNvbmZpZzogUGFnaW5hdGlvbkNvbmZpZztcbiAgICAgICAgZGVmYXVsdFNvcnQ6IFNvcnQ7XG4gICAgfSk6IHZvaWQ7XG59XG4iXX0=
@@ -1,117 +0,0 @@
1
- import { DataSource } from '@angular/cdk/collections';
2
- import { BehaviorSubject } from 'rxjs';
3
- import { Helper } from '../util/helper';
4
- export class NodeDataSource extends DataSource {
5
- get isLoading() {
6
- return this.isLoadingSubject.value;
7
- }
8
- set isLoading(isLoading) {
9
- this.isLoadingSubject.next(isLoading);
10
- }
11
- get itemsCap() {
12
- return this._itemsCap;
13
- }
14
- set itemsCap(value) {
15
- this._itemsCap = value;
16
- this.connectRenderData();
17
- }
18
- constructor(initialData = []) {
19
- super();
20
- this.dataStream = new BehaviorSubject([]);
21
- this.pagination$ = new BehaviorSubject(null);
22
- // Include `LoadingState` to be type-compatible to `NodeDataSourceRemote` although not used
23
- // here.
24
- this.isLoadingSubject = new BehaviorSubject(false);
25
- this.initialPageLoaded = false;
26
- this.renderData = new BehaviorSubject([]);
27
- this.setData(initialData);
28
- }
29
- connect() {
30
- if (!this.renderDataSubscription) {
31
- this.connectRenderData();
32
- }
33
- return this.renderData;
34
- }
35
- connectRenderData() {
36
- this.renderDataSubscription?.unsubscribe();
37
- if (this.itemsCap) {
38
- this.renderDataSubscription = this.itemsCap
39
- .connect(this.dataStream)
40
- .subscribe((data) => this.renderData.next(data));
41
- }
42
- else {
43
- this.renderDataSubscription = this.dataStream.subscribe((data) => this.renderData.next(data));
44
- }
45
- }
46
- connectPagination() {
47
- return this.pagination$;
48
- }
49
- disconnect() { }
50
- setData(data, pagination = null) {
51
- this.dataStream.next(data);
52
- this.setPagination(pagination);
53
- }
54
- appendData(appendData, location = 'after') {
55
- let data = this.getData();
56
- if (location === 'after') {
57
- data = data.concat(appendData);
58
- }
59
- else {
60
- data = appendData.concat(data);
61
- }
62
- this.dataStream.next(data);
63
- }
64
- /**
65
- * Removes elements from the visible data.
66
- */
67
- removeData(toRemove) {
68
- const newData = this.getData().filter((value) => !toRemove.some((d) => Helper.objectEquals(d.ref, value.ref)));
69
- const removedData = this.getData().filter((value) => !newData.includes(value));
70
- this.dataStream.next(newData);
71
- if (this.pagination$.value) {
72
- const pagination = this.pagination$.value;
73
- this.setPagination({
74
- count: pagination.count - removedData.length,
75
- from: pagination.from,
76
- total: pagination.total - removedData.length,
77
- });
78
- }
79
- }
80
- setPagination(pagination) {
81
- this.pagination$.next(pagination);
82
- }
83
- reset() {
84
- this.setData([]);
85
- }
86
- hasMore() {
87
- if (!this.pagination$.value) {
88
- return undefined;
89
- }
90
- return this.pagination$.value.total > this.dataStream.value?.length;
91
- }
92
- // FIXME: This is somewhat dangerous because we rely on `connect` being called from outside, but
93
- // this method provides a way to access data without ever calling `connect`.
94
- getData() {
95
- return this.renderData.value;
96
- }
97
- isEmpty() {
98
- return this.dataStream.value?.length === 0;
99
- }
100
- getTotal() {
101
- return this.pagination$.value?.total
102
- ? Math.max(this.pagination$.value?.total, this.getData()?.length || 0)
103
- : this.dataStream.value?.length ?? 0;
104
- }
105
- isFullyLoaded() {
106
- return this.getTotal() <= this.dataStream.value?.length;
107
- }
108
- /**
109
- * force a refresh of all elements in the current data stream
110
- * trigger this to enforce a rebuild of the nodes in all sub-components
111
- * i.e. if data from some nodes has changed
112
- */
113
- refresh() {
114
- this.dataStream.next(Helper.deepCopy(this.dataStream.value));
115
- }
116
- }
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1kYXRhLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL25vZGUtZGF0YS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVl4QyxNQUFNLE9BQU8sY0FBa0QsU0FBUSxVQUFhO0lBTWhGLElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsU0FBaUM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBR0QsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUF5QjtRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBSUQsWUFBWSxjQUFtQixFQUFFO1FBQzdCLEtBQUssRUFBRSxDQUFDO1FBeEJGLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUM1QyxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFhLElBQUksQ0FBQyxDQUFDO1FBQzVELDJGQUEyRjtRQUMzRixRQUFRO1FBQ0QscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQXlCLEtBQUssQ0FBQyxDQUFDO1FBTzdFLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQVNoQixlQUFV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QUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSXRlbXNDYXAgfSBmcm9tICcuL2l0ZW1zLWNhcCc7XG5pbXBvcnQgeyBHZW5lcmljQXV0aG9yaXR5LCBOb2RlLCBQYWdpbmF0aW9uIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi91dGlsL2hlbHBlcic7XG5cbmV4cG9ydCB0eXBlIExvYWRpbmdTdGF0ZSA9XG4gICAgLy8gVGhlIGRhdGEgc291cmNlIGlzIGxvYWRpbmcgZGF0YSBmb3IgdGhlIGZpcnN0IHRpbWUuXG4gICAgfCAnaW5pdGlhbCdcbiAgICAvLyBMb2FkaW5nIGRhdGEgYWZ0ZXIgY2hhbmdlIG9mIHBhcmFtZXRlcnMsIGkuZS4sIGl0IHdpbGwgcmVwbGFjZSB0aGUgY3VycmVudCBkYXRhIHdoZW4gZG9uZS5cbiAgICB8ICdyZXNldCdcbiAgICAvLyBMb2FkaW5nIGFub3RoZXIgcGFnZSB3aXRoIHVuY2hhbmdlZCBwYXJhbWV0ZXJzLlxuICAgIHwgJ3BhZ2UnXG4gICAgLy8gTG9hZGluZyBkb25lLlxuICAgIHwgZmFsc2U7XG5cbmV4cG9ydCBjbGFzcyBOb2RlRGF0YVNvdXJjZTxUIGV4dGVuZHMgTm9kZSB8IEdlbmVyaWNBdXRob3JpdHk+IGV4dGVuZHMgRGF0YVNvdXJjZTxUPiB7XG4gICAgcHJvdGVjdGVkIGRhdGFTdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xuICAgIHByaXZhdGUgcGFnaW5hdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhZ2luYXRpb24+KG51bGwpO1xuICAgIC8vIEluY2x1ZGUgYExvYWRpbmdTdGF0ZWAgdG8gYmUgdHlwZS1jb21wYXRpYmxlIHRvIGBOb2RlRGF0YVNvdXJjZVJlbW90ZWAgYWx0aG91Z2ggbm90IHVzZWRcbiAgICAvLyBoZXJlLlxuICAgIHB1YmxpYyBpc0xvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMb2FkaW5nU3RhdGUgfCBib29sZWFuPihmYWxzZSk7XG4gICAgZ2V0IGlzTG9hZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nU3ViamVjdC52YWx1ZTtcbiAgICB9XG4gICAgc2V0IGlzTG9hZGluZyhpc0xvYWRpbmc6IExvYWRpbmdTdGF0ZSB8IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdTdWJqZWN0Lm5leHQoaXNMb2FkaW5nKTtcbiAgICB9XG4gICAgaW5pdGlhbFBhZ2VMb2FkZWQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2l0ZW1zQ2FwOiBJdGVtc0NhcDxUPiB8IG51bGw7XG4gICAgZ2V0IGl0ZW1zQ2FwKCk6IEl0ZW1zQ2FwPFQ+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0NhcDtcbiAgICB9XG4gICAgc2V0IGl0ZW1zQ2FwKHZhbHVlOiBJdGVtc0NhcDxUPiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5faXRlbXNDYXAgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jb25uZWN0UmVuZGVyRGF0YSgpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcmVuZGVyRGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VFtdPihbXSk7XG4gICAgcHJvdGVjdGVkIHJlbmRlckRhdGFTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihpbml0aWFsRGF0YTogVFtdID0gW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXREYXRhKGluaXRpYWxEYXRhKTtcbiAgICB9XG5cbiAgICBjb25uZWN0KCk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgICAgIGlmICghdGhpcy5yZW5kZXJEYXRhU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RSZW5kZXJEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbm5lY3RSZW5kZXJEYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlckRhdGFTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGlmICh0aGlzLml0ZW1zQ2FwKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckRhdGFTdWJzY3JpcHRpb24gPSB0aGlzLml0ZW1zQ2FwXG4gICAgICAgICAgICAgICAgLmNvbm5lY3QodGhpcy5kYXRhU3RyZWFtKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMucmVuZGVyRGF0YS5uZXh0KGRhdGEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRGF0YVN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YVN0cmVhbS5zdWJzY3JpYmUoKGRhdGEpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJEYXRhLm5leHQoZGF0YSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29ubmVjdFBhZ2luYXRpb24oKTogT2JzZXJ2YWJsZTxQYWdpbmF0aW9uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb24kO1xuICAgIH1cblxuICAgIGRpc2Nvbm5lY3QoKSB7fVxuXG4gICAgc2V0RGF0YShkYXRhOiBUW10sIHBhZ2luYXRpb246IFBhZ2luYXRpb24gPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZGF0YVN0cmVhbS5uZXh0KGRhdGEpO1xuICAgICAgICB0aGlzLnNldFBhZ2luYXRpb24ocGFnaW5hdGlvbik7XG4gICAgfVxuXG4gICAgYXBwZW5kRGF0YShhcHBlbmREYXRhOiBUW10sIGxvY2F0aW9uOiAnYmVmb3JlJyB8ICdhZnRlcicgPSAnYWZ0ZXInKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5nZXREYXRhKCk7XG4gICAgICAgIGlmIChsb2NhdGlvbiA9PT0gJ2FmdGVyJykge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGEuY29uY2F0KGFwcGVuZERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGFwcGVuZERhdGEuY29uY2F0KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVN0cmVhbS5uZXh0KGRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgZWxlbWVudHMgZnJvbSB0aGUgdmlzaWJsZSBkYXRhLlxuICAgICAqL1xuICAgIHJlbW92ZURhdGEodG9SZW1vdmU6IFRbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdEYXRhID0gdGhpcy5nZXREYXRhKCkuZmlsdGVyKFxuICAgICAgICAgICAgKHZhbHVlKSA9PlxuICAgICAgICAgICAgICAgICF0b1JlbW92ZS5zb21lKChkKSA9PiBIZWxwZXIub2JqZWN0RXF1YWxzKChkIGFzIE5vZGUpLnJlZiwgKHZhbHVlIGFzIE5vZGUpLnJlZikpLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZW1vdmVkRGF0YSA9IHRoaXMuZ2V0RGF0YSgpLmZpbHRlcigodmFsdWUpID0+ICFuZXdEYXRhLmluY2x1ZGVzKHZhbHVlKSk7XG4gICAgICAgIHRoaXMuZGF0YVN0cmVhbS5uZXh0KG5ld0RhdGEpO1xuICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uJC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMucGFnaW5hdGlvbiQudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnNldFBhZ2luYXRpb24oe1xuICAgICAgICAgICAgICAgIGNvdW50OiBwYWdpbmF0aW9uLmNvdW50IC0gcmVtb3ZlZERhdGEubGVuZ3RoLFxuICAgICAgICAgICAgICAgIGZyb206IHBhZ2luYXRpb24uZnJvbSxcbiAgICAgICAgICAgICAgICB0b3RhbDogcGFnaW5hdGlvbi50b3RhbCAtIHJlbW92ZWREYXRhLmxlbmd0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UGFnaW5hdGlvbihwYWdpbmF0aW9uOiBQYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiQubmV4dChwYWdpbmF0aW9uKTtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5zZXREYXRhKFtdKTtcbiAgICB9XG5cbiAgICBoYXNNb3JlKCkge1xuICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbiQudmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvbiQudmFsdWUudG90YWwgPiB0aGlzLmRhdGFTdHJlYW0udmFsdWU/Lmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hhdCBkYW5nZXJvdXMgYmVjYXVzZSB3ZSByZWx5IG9uIGBjb25uZWN0YCBiZWluZyBjYWxsZWQgZnJvbSBvdXRzaWRlLCBidXRcbiAgICAvLyB0aGlzIG1ldGhvZCBwcm92aWRlcyBhIHdheSB0byBhY2Nlc3MgZGF0YSB3aXRob3V0IGV2ZXIgY2FsbGluZyBgY29ubmVjdGAuXG4gICAgZ2V0RGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRGF0YS52YWx1ZTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhU3RyZWFtLnZhbHVlPy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgZ2V0VG90YWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb24kLnZhbHVlPy50b3RhbFxuICAgICAgICAgICAgPyBNYXRoLm1heCh0aGlzLnBhZ2luYXRpb24kLnZhbHVlPy50b3RhbCwgdGhpcy5nZXREYXRhKCk/Lmxlbmd0aCB8fCAwKVxuICAgICAgICAgICAgOiB0aGlzLmRhdGFTdHJlYW0udmFsdWU/Lmxlbmd0aCA/PyAwO1xuICAgIH1cblxuICAgIGlzRnVsbHlMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRvdGFsKCkgPD0gdGhpcy5kYXRhU3RyZWFtLnZhbHVlPy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZm9yY2UgYSByZWZyZXNoIG9mIGFsbCBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBkYXRhIHN0cmVhbVxuICAgICAqIHRyaWdnZXIgdGhpcyB0byBlbmZvcmNlIGEgcmVidWlsZCBvZiB0aGUgbm9kZXMgaW4gYWxsIHN1Yi1jb21wb25lbnRzXG4gICAgICogaS5lLiBpZiBkYXRhIGZyb20gc29tZSBub2RlcyBoYXMgY2hhbmdlZFxuICAgICAqL1xuICAgIHJlZnJlc2goKSB7XG4gICAgICAgIHRoaXMuZGF0YVN0cmVhbS5uZXh0KEhlbHBlci5kZWVwQ29weSh0aGlzLmRhdGFTdHJlYW0udmFsdWUpKTtcbiAgICB9XG59XG4iXX0=
@@ -1,117 +0,0 @@
1
- import { Component, Input, Optional, ViewChild, } from '@angular/core';
2
- import { ClickSource, InteractionType } from '../entries-model';
3
- import { CustomFieldSpecialType } from '../node-entries-global.service';
4
- import { Target } from '../../types/option-item';
5
- import { RestConstants } from 'ngx-edu-sharing-api';
6
- import { ColorHelper, PreferredColor } from '../../util/color-helper';
7
- import { take } from 'rxjs/operators';
8
- import { BehaviorSubject } from 'rxjs';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "../../services/node-entries.service";
11
- import * as i2 from "../../services/node-helper.service";
12
- import * as i3 from "ngx-edu-sharing-api";
13
- import * as i4 from "../node-entries-templates.service";
14
- import * as i5 from "../node-entries-global.service";
15
- import * as i6 from "../../services/abstract/toast.service";
16
- import * as i7 from "@angular/common";
17
- import * as i8 from "../../directives/focus-state.directive";
18
- import * as i9 from "../../directives/icon.directive";
19
- import * as i10 from "../../node-url/node-url.component";
20
- import * as i11 from "../../list-items/list-base/list-base.component";
21
- import * as i12 from "@angular/material/checkbox";
22
- import * as i13 from "@angular/material/button";
23
- import * as i14 from "@angular/material/menu";
24
- import * as i15 from "@angular/material/core";
25
- import * as i16 from "../node-rating/node-rating.component";
26
- import * as i17 from "../preview-image/preview-image.component";
27
- import * as i18 from "../node-type-badge/node-type-badge.component";
28
- import * as i19 from "../option-button/option-button.component";
29
- import * as i20 from "../node-stats-badges/node-stats-badges.component";
30
- import * as i21 from "../../pipes/property-slug.pipe";
31
- import * as i22 from "../../pipes/node-title.pipe";
32
- import * as i23 from "@ngx-translate/core";
33
- import * as i24 from "../list-item-label.pipe";
34
- export class NodeEntriesCardComponent {
35
- constructor(entriesService, nodeHelper, applicationRef, configService, authenticationService, templatesService, nodeEntriesGlobalService, toast) {
36
- this.entriesService = entriesService;
37
- this.nodeHelper = nodeHelper;
38
- this.applicationRef = applicationRef;
39
- this.configService = configService;
40
- this.authenticationService = authenticationService;
41
- this.templatesService = templatesService;
42
- this.nodeEntriesGlobalService = nodeEntriesGlobalService;
43
- this.toast = toast;
44
- this.InteractionType = InteractionType;
45
- this.Target = Target;
46
- this.ClickSource = ClickSource;
47
- this.CustomFieldSpecialType = CustomFieldSpecialType;
48
- this.showRatings = new BehaviorSubject(false);
49
- }
50
- ngOnChanges(changes) {
51
- this.isCollection = this.nodeHelper.isNodeCollection(changes.node?.currentValue);
52
- }
53
- getTextColor() {
54
- return ColorHelper.getPreferredColor(this.node.collection.color) === PreferredColor.Black
55
- ? '#000'
56
- : '#fff';
57
- }
58
- optionsOnCard() {
59
- const options = this.entriesService.options?.[Target.List];
60
- const always = options?.filter((o) => o.showAlways);
61
- if (always?.some((o) => o.showCallback([this.node]))) {
62
- return always;
63
- }
64
- // we do NOT show any additional actions
65
- return [];
66
- // return options.filter((o) => o.showAsAction && o.showCallback(this.node)).slice(0, 3);
67
- }
68
- openContextmenu(event, node) {
69
- event.stopPropagation();
70
- event.preventDefault();
71
- if (!this.dropdown) {
72
- // Call `preventDefault()` even when there is no menu, so we can use `cdkDrag` with a
73
- // start delay without being interrupted by the standard long-tap action.
74
- return;
75
- }
76
- if (event instanceof MouseEvent) {
77
- ({ clientX: this.dropdownLeft, clientY: this.dropdownTop } = event);
78
- }
79
- else {
80
- ({ x: this.dropdownLeft, y: this.dropdownTop } = event.target.getBoundingClientRect());
81
- }
82
- this.entriesService.openDropdown(this.dropdown, node, () => this.menuTrigger.openMenu());
83
- }
84
- getVisibleColumns() {
85
- return this.entriesService.columns?.filter((c) => c.visible);
86
- }
87
- async openMenu(node) {
88
- this.entriesService.openDropdown(this.dropdown, node);
89
- }
90
- async ngOnInit() {
91
- await this.configService.observeConfig().pipe(take(1)).toPromise();
92
- this.showRatings.next(this.configService.instant('rating.mode', 'none') !== 'none' &&
93
- (await this.authenticationService.hasToolpermission(RestConstants.TOOLPERMISSION_RATE_READ)));
94
- }
95
- getTemplate(name) {
96
- return this.nodeEntriesGlobalService.getCustomFieldTemplate({
97
- type: 'NODE',
98
- name,
99
- }, this.node);
100
- }
101
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesCardComponent, deps: [{ token: i1.NodeEntriesService }, { token: i2.NodeHelperService }, { token: i0.ApplicationRef }, { token: i3.ConfigService }, { token: i3.AuthenticationService }, { token: i4.NodeEntriesTemplatesService }, { token: i5.NodeEntriesGlobalService }, { token: i6.Toast, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
102
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: NodeEntriesCardComponent, selector: "es-node-entries-card", inputs: { dropdown: "dropdown", node: "node" }, viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event, node)\"\n (keydown.ContextMenu)=\"openContextmenu($event, node)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate : { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:2px solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:2px solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { kind: "directive", type: i9.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "component", type: i10.NodeUrlComponent, selector: "es-node-url", inputs: ["node", "nodes", "target", "scope", "queryParams", "mode", "disabled", "alwaysRipple", "aria-describedby", "aria-label"], outputs: ["buttonClick"] }, { kind: "component", type: i11.ListBaseComponent, selector: "es-list-base", inputs: ["forceText"] }, { kind: "component", type: i12.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i15.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i16.NodeRatingComponent, selector: "es-node-rating", inputs: ["node"] }, { kind: "component", type: i17.PreviewImageComponent, selector: "es-preview-image", inputs: ["node", "playAnimation"] }, { kind: "component", type: i18.NodeTypeBadgeComponent, selector: "es-node-type-badge", inputs: ["node"] }, { kind: "component", type: i19.OptionButtonComponent, selector: "es-option-button", inputs: ["option", "node"] }, { kind: "component", type: i20.NodeStatsBadgesComponent, selector: "es-node-stats-badges", inputs: ["node", "backgroundStyle"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i21.PropertySlugPipe, name: "propertySlug" }, { kind: "pipe", type: i22.NodeTitlePipe, name: "nodeTitle" }, { kind: "pipe", type: i23.TranslatePipe, name: "translate" }, { kind: "pipe", type: i24.ListItemLabelPipe, name: "esListItemLabel" }] }); }
103
- }
104
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NodeEntriesCardComponent, decorators: [{
105
- type: Component,
106
- args: [{ selector: 'es-node-entries-card', template: "<div\n [class]=\"\n 'grid-card' +\n (isCollection\n ? ' grid-card-collection grid-card-collection-scope-' +\n node.collection.scope +\n ' grid-card-collection-type-' +\n node.collection.type\n : '') +\n ($any(node).virtual ? ' grid-card-virtual' : '') +\n ' ' +\n nodeEntriesGlobalService.getCustomCssClass(node)\n \"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n [class.dynamic-single-click]=\"entriesService.singleClickHint === 'dynamic'\"\n [class.selected]=\"entriesService.selection.isSelected(node)\"\n (contextmenu)=\"openContextmenu($event, node)\"\n (keydown.ContextMenu)=\"openContextmenu($event, node)\"\n>\n <div\n *ngIf=\"templatesService.overlay\"\n class=\"card-overlay\"\n (click)=\"\n entriesService.clickItem.emit({\n element: node,\n source: ClickSource.Overlay,\n })\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"templatesService.overlay; context: { element: node }\"\n ></ng-container>\n </div>\n <button\n *ngIf=\"dropdown\"\n #menuTrigger=\"matMenuTrigger\"\n mat-button\n class=\"dropdown-dummy cdk-visually-hidden\"\n [style.left.px]=\"dropdownLeft\"\n [style.top.px]=\"dropdownTop\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n ></button>\n <div class=\"card-top-bar\" [style.background-color]=\"isCollection ? node.collection.color : null\">\n <div class=\"card-top-bar-collection-color\" *ngIf=\"nodeHelper.isNodeCollection(node)\"></div>\n <es-node-type-badge [node]=\"node\"></es-node-type-badge>\n <div *ngIf=\"isCollection && node.collection.pinned\" class=\"card-top-bar-flag\">\n <i esIcon=\"edu-pin\"></i>\n </div>\n <div class=\"card-top-bar-empty\"></div>\n <es-node-stats-badges [node]=\"node\"></es-node-stats-badges>\n <div class=\"card-top-bar-checkbox\" *ngIf=\"entriesService.checkbox\">\n <mat-checkbox\n [checked]=\"entriesService.selection.isSelected(node)\"\n (change)=\"entriesService.onCheckboxChanged(node, $event.checked)\"\n color=\"primary\"\n aria-label=\"{{ 'SELECT' | translate : { element: (node | nodeTitle) } }}\"\n ></mat-checkbox>\n </div>\n </div>\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n mode=\"wrapper\"\n [node]=\"node\"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </es-node-url>\n <div\n *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\"\n matRipple\n (click)=\"\n entriesService.onClicked({\n event: $event,\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n (dblclick)=\"\n entriesService.dblClickItem.emit({\n element: node,\n source: ClickSource.Metadata,\n })\n \"\n esFocusState\n #cardFocusState=\"esFocusState\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n image;\n context: { playAnimation: cardFocusState.hovering || cardFocusState.hasFocus }\n \"\n ></ng-container>\n <ng-container *ngTemplateOutlet=\"meta\"></ng-container>\n </div>\n <div class=\"card-options\" *ngIf=\"entriesService.options || showRatings\">\n <div class=\"card-rating-area\">\n <es-node-rating [node]=\"node\"></es-node-rating>\n </div>\n <div class=\"card-options-area\">\n <es-option-button\n *ngFor=\"let option of optionsOnCard()\"\n class=\"card-options-always\"\n [option]=\"option\"\n [node]=\"node\"\n ></es-option-button>\n <div class=\"card-options-spacer\"></div>\n <button\n *ngIf=\"dropdown\"\n mat-icon-button\n color=\"primary\"\n (click)=\"openMenu(node)\"\n [matMenuTriggerFor]=\"dropdown.menu\"\n [attr.aria-label]=\"'OPTIONS_FOR' | translate : { element: (node | nodeTitle) }\"\n data-test=\"card-options-button\"\n >\n <i esIcon=\"more_vert\"></i>\n </button>\n </div>\n </div>\n <ng-template #image let-playAnimation=\"playAnimation\">\n <div\n class=\"card-image-area\"\n [style.background-color]=\"isCollection ? node.collection.color : null\"\n >\n <ng-container *ngIf=\"getTemplate(CustomFieldSpecialType.preview) as ref\">\n <ng-container *ngTemplateOutlet=\"ref; context: { node: this.node }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!getTemplate(CustomFieldSpecialType.preview)\">\n <es-preview-image\n *ngIf=\"!(isCollection && node.preview.isIcon)\"\n [node]=\"node\"\n [playAnimation]=\"playAnimation\"\n ></es-preview-image>\n <div *ngIf=\"isCollection && node.preview.isIcon\" class=\"card-collection-image\">\n <i esIcon=\"layers\"></i>\n </div>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #meta let-link=\"link\">\n <div class=\"card-meta\">\n <div\n *ngFor=\"let displayPart of getVisibleColumns(); let first = first\"\n class=\"card-meta-row card-meta-row-{{ displayPart.name | lowercase | propertySlug }}\"\n [class.card-meta-row-primary]=\"first\"\n >\n <ng-container *ngIf=\"first\">\n <es-node-url\n *ngIf=\"entriesService.elementInteractionType === InteractionType.DefaultActionLink\"\n [node]=\"node\"\n #link\n >\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </es-node-url>\n <div *ngIf=\"entriesService.elementInteractionType !== InteractionType.DefaultActionLink\">\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!first\">\n <label>\n {{ displayPart | esListItemLabel | async }}\n </label>\n <es-list-base [item]=\"displayPart\" [node]=\"node\" [provideLabel]=\"false\"> </es-list-base>\n </ng-container>\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".grid-card{transition:all var(--transitionNormal);overflow:hidden;background-color:#fff;box-shadow:0 3px 3px #0000001a;display:grid;height:100%;grid-template-columns:auto}:host-context(body.es-contrast-mode) .grid-card{border:1px solid rgba(0,0,0,.42)}.grid-card.selected{background-color:rgb(var(--palette-primary-50))}.grid-card .dropdown-dummy{position:fixed}.grid-card .card-options{display:grid;grid-template-columns:1fr auto;grid-column-gap:10px}.grid-card .card-options .card-rating-area{display:flex;align-items:center;height:100%;padding-left:10px}.grid-card .card-options .card-options-area{display:flex}.grid-card .card-options .card-options-area es-option-button,.grid-card .card-options .card-options-area button{transition:all var(--transitionNormal);margin:0 2px;border-radius:50%}.grid-card .card-options .card-options-area es-option-button:hover,.grid-card .card-options .card-options-area es-option-button:focus,.grid-card .card-options .card-options-area button:hover,.grid-card .card-options .card-options-area button:focus{background-color:#fff}.grid-card:not(.grid-card-collection) .card-top-bar{background-color:var(--palette-primary-200)}.grid-card.grid-card-virtual{outline:2px dashed var(--nodeVirtualColor)}.grid-card .card-top-bar{height:40px;display:flex;gap:15px;align-items:center;padding:0 20px;position:relative}.grid-card .card-top-bar .card-top-bar-collection-color{position:absolute;background-color:#ffffff80;inset:0}.grid-card .card-top-bar .card-top-bar-flag{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;border-radius:50%;background-color:#fff;padding:5px;position:relative;z-index:1;box-shadow:0 0 5px #0000004d}.grid-card .card-top-bar .card-top-bar-flag i{font-size:18px;color:#333}.grid-card .card-top-bar .card-top-bar-flag img{width:18px;height:18px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox{margin-right:-5px;position:relative;top:-1.3px}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator{outline:none}.grid-card .card-top-bar .card-top-bar-checkbox mat-checkbox.cdk-keyboard-focused ::ng-deep .mat-focus-indicator:after{content:\"\";position:absolute;inset:2px;outline:none;border:2px solid var(--palette-primary-300);border-color:#fff}.grid-card .card-top-bar .card-top-bar-empty{width:0;flex-grow:1}.grid-card .card-image-area{height:150px;padding:0;display:flex}.grid-card .card-image-area es-preview-image{flex-grow:1}.grid-card .card-image-area .card-collection-image{display:flex;width:100%;height:100%;align-items:center;justify-content:center}.grid-card .card-image-area .card-collection-image i{display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;color:#000000bf;background-color:#ffffff80;padding:40px;font-size:40px;border-radius:50%}.grid-card .card-meta{padding:10px 20px 0;display:grid;flex-direction:row}.grid-card .card-meta .card-meta-row{display:flex;flex-direction:row;align-items:center;min-height:2.8em;gap:5px}.grid-card .card-meta .card-meta-row:not(:first-child)>label{cursor:inherit;color:var(--textLight);font-size:85%}.grid-card .card-meta .card-meta-row:not(:first-child)>es-list-base{color:#000;flex-grow:1;margin:5px 0;display:flex;justify-content:flex-end;text-align:end;word-break:break-word}.grid-card .card-meta .card-meta-row:first-child{font-size:120%}.grid-card .card-meta .card-meta-row:first-child>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;font-size:120%;color:var(--textMain);height:2.8em;text-align:left;word-break:break-word}.grid-card.dynamic-single-click:hover{box-shadow:0 0 25px #0003;background-color:rgb(var(--palette-primary-50))}.grid-card.dynamic-single-click.grid-card-collection:hover .card-meta{background-color:#ffffffe6}.grid-card.grid-card-collection .card-meta{background-color:#fffc}.grid-card.grid-card-collection .card-options{background-color:#ffffffe6}.grid-card .card-options{border-top:1px solid #ddd}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text{word-break:break-word}:host ::ng-deep .grid-card .card-meta-row:first-child es-list-base>es-list-text span,:host ::ng-deep .grid-card .card-meta-row:first-child es-node-url a es-list-base>es-list-text span{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card .card-meta-row es-node-url a{color:var(--textMain)}:host ::ng-deep .grid-card .card-meta-row es-node-url a.cdk-keyboard-focused{display:inline-flex;outline:none;outline:2px solid var(--palette-primary-300);outline-offset:2px}:host ::ng-deep .card-meta es-list-base img{max-width:100px;max-height:20px}:host ::ng-deep .card-meta es-list-base es-list-node-license img{height:20px}:host ::ng-deep .card-meta es-list-base es-list-collection-info{display:flex;align-items:center}:host ::ng-deep .card-meta es-list-base es-list-collection-info i{font-size:12pt;margin:0 6px}:host ::ng-deep .grid-card-collection es-node-url a.cdk-keyboard-focused .card-meta{background-color:#fff}.card-overlay{position:absolute;z-index:2;inset:0;pointer-events:none}.card-overlay ::ng-deep>*{pointer-events:auto}.grid-card{grid-template-rows:40px auto auto}.grid-card .card-meta .card-meta-row>es-list-base{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;line-height:1.4em;max-height:2.8em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"] }]
107
- }], ctorParameters: () => [{ type: i1.NodeEntriesService }, { type: i2.NodeHelperService }, { type: i0.ApplicationRef }, { type: i3.ConfigService }, { type: i3.AuthenticationService }, { type: i4.NodeEntriesTemplatesService }, { type: i5.NodeEntriesGlobalService }, { type: i6.Toast, decorators: [{
108
- type: Optional
109
- }] }], propDecorators: { dropdown: [{
110
- type: Input
111
- }], menuTrigger: [{
112
- type: ViewChild,
113
- args: ['menuTrigger']
114
- }], node: [{
115
- type: Input
116
- }] } });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBNEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHakQsT0FBTyxFQUE4QyxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU92QyxNQUFNLE9BQU8sd0JBQXdCO0lBY2pDLFlBQ1csY0FBcUMsRUFDckMsVUFBNkIsRUFDN0IsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIscUJBQTRDLEVBQzVDLGdCQUE2QyxFQUM3Qyx3QkFBa0QsRUFDckMsS0FBWTtRQVB6QixtQkFBYyxHQUFkLGNBQWMs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QUFPO1FBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1YsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxLQUFLLE1BQU07WUFDeEQsQ0FBQyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FDL0MsYUFBYSxDQUFDLHdCQUF3QixDQUN6QyxDQUFDLENBQ1QsQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBNEI7UUFDcEMsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsc0JBQXNCLENBQ3ZEO1lBQ0ksSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJO1NBQ1AsRUFDRCxJQUFJLENBQUMsSUFBWSxDQUNwQixDQUFDO0lBQ04sQ0FBQzsrR0F6RlEsd0JBQXdCO21HQUF4Qix3QkFBd0IsNk9DN0JyQywyek1BaUxBOzs0RkRwSmEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNJLHNCQUFzQjs7MEJBMEIzQixRQUFRO3lDQWpCSixRQUFRO3NCQUFoQixLQUFLO2dCQUVvQixXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBRWYsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgQ2xpY2tTb3VyY2UsIEludGVyYWN0aW9uVHlwZSB9IGZyb20gJy4uL2VudHJpZXMtbW9kZWwnO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNUZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vbm9kZS1lbnRyaWVzLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbUZpZWxkU3BlY2lhbFR5cGUsIE5vZGVFbnRyaWVzR2xvYmFsU2VydmljZSB9IGZyb20gJy4uL25vZGUtZW50cmllcy1nbG9iYWwuc2VydmljZSc7XG5pbXBvcnQgeyBUYXJnZXQgfSBmcm9tICcuLi8uLi90eXBlcy9vcHRpb24taXRlbSc7XG5pbXBvcnQgeyBOb2RlRW50cmllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWVudHJpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlLCBDb25maWdTZXJ2aWNlLCBOb2RlLCBSZXN0Q29uc3RhbnRzIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5pbXBvcnQgeyBDb2xvckhlbHBlciwgUHJlZmVycmVkQ29sb3IgfSBmcm9tICcuLi8uLi91dGlsL2NvbG9yLWhlbHBlcic7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9hc3QgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hYnN0cmFjdC90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLW5vZGUtZW50cmllcy1jYXJkJyxcbiAgICB0ZW1wbGF0ZVVybDogJ25vZGUtZW50cmllcy1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUVudHJpZXNDYXJkQ29tcG9uZW50PFQgZXh0ZW5kcyBOb2RlPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgICByZWFkb25seSBJbnRlcmFjdGlvblR5cGUgPSBJbnRlcmFjdGlvblR5cGU7XG4gICAgcmVhZG9ubHkgVGFyZ2V0ID0gVGFyZ2V0O1xuICAgIHJlYWRvbmx5IENsaWNrU291cmNlID0gQ2xpY2tTb3VyY2U7XG4gICAgcmVhZG9ubHkgQ3VzdG9tRmllbGRTcGVjaWFsVHlwZSA9IEN1c3RvbUZpZWxkU3BlY2lhbFR5cGU7XG4gICAgQElucHV0KCkgZHJvcGRvd246IERyb3Bkb3duQ29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZCgnbWVudVRyaWdnZXInKSBtZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXI7XG5cbiAgICBASW5wdXQoKSBub2RlOiBUO1xuICAgIGRyb3Bkb3duTGVmdDogbnVtYmVyO1xuICAgIGRyb3Bkb3duVG9wOiBudW1iZXI7XG4gICAgc2hvd1JhdGluZ3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICBpc0NvbGxlY3Rpb246IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbnRyaWVzU2VydmljZTogTm9kZUVudHJpZXNTZXJ2aWNlPFQ+LFxuICAgICAgICBwdWJsaWMgbm9kZUhlbHBlcjogTm9kZUhlbHBlclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyB0ZW1wbGF0ZXNTZXJ2aWNlOiBOb2RlRW50cmllc1RlbXBsYXRlc1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBub2RlRW50cmllc0dsb2JhbFNlcnZpY2U6IE5vZGVFbnRyaWVzR2xvYmFsU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0b2FzdDogVG9hc3QsXG4gICAgKSB7fVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzQ29sbGVjdGlvbiA9IHRoaXMubm9kZUhlbHBlci5pc05vZGVDb2xsZWN0aW9uKGNoYW5nZXMubm9kZT8uY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXRUZXh0Q29sb3IoKSB7XG4gICAgICAgIHJldHVybiBDb2xvckhlbHBlci5nZXRQcmVmZXJyZWRDb2xvcih0aGlzLm5vZGUuY29sbGVjdGlvbi5jb2xvcikgPT09IFByZWZlcnJlZENvbG9yLkJsYWNrXG4gICAgICAgICAgICA/ICcjMDAwJ1xuICAgICAgICAgICAgOiAnI2ZmZic7XG4gICAgfVxuICAgIG9wdGlvbnNPbkNhcmQoKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVudHJpZXNTZXJ2aWNlLm9wdGlvbnM/LltUYXJnZXQuTGlzdF07XG4gICAgICAgIGNvbnN0IGFsd2F5cyA9IG9wdGlvbnM/LmZpbHRlcigobykgPT4gby5zaG93QWx3YXlzKTtcbiAgICAgICAgaWYgKGFsd2F5cz8uc29tZSgobykgPT4gby5zaG93Q2FsbGJhY2soW3RoaXMubm9kZV0pKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFsd2F5cztcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSBkbyBOT1Qgc2hvdyBhbnkgYWRkaXRpb25hbCBhY3Rpb25zXG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgLy8gcmV0dXJuIG9wdGlvbnMuZmlsdGVyKChvKSA9PiBvLnNob3dBc0FjdGlvbiAmJiBvLnNob3dDYWxsYmFjayh0aGlzLm5vZGUpKS5zbGljZSgwLCAzKTtcbiAgICB9XG5cbiAgICBvcGVuQ29udGV4dG1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQgfCBFdmVudCwgbm9kZTogVCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmRyb3Bkb3duKSB7XG4gICAgICAgICAgICAvLyBDYWxsIGBwcmV2ZW50RGVmYXVsdCgpYCBldmVuIHdoZW4gdGhlcmUgaXMgbm8gbWVudSwgc28gd2UgY2FuIHVzZSBgY2RrRHJhZ2Agd2l0aCBhXG4gICAgICAgICAgICAvLyBzdGFydCBkZWxheSB3aXRob3V0IGJlaW5nIGludGVycnVwdGVkIGJ5IHRoZSBzdGFuZGFyZCBsb25nLXRhcCBhY3Rpb24uXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICAgICAgKHsgY2xpZW50WDogdGhpcy5kcm9wZG93bkxlZnQsIGNsaWVudFk6IHRoaXMuZHJvcGRvd25Ub3AgfSA9IGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICh7IHg6IHRoaXMuZHJvcGRvd25MZWZ0LCB5OiB0aGlzLmRyb3Bkb3duVG9wIH0gPSAoXG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICAgICAgICApLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLm9wZW5Ecm9wZG93bih0aGlzLmRyb3Bkb3duLCBub2RlLCAoKSA9PiB0aGlzLm1lbnVUcmlnZ2VyLm9wZW5NZW51KCkpO1xuICAgIH1cblxuICAgIGdldFZpc2libGVDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzU2VydmljZS5jb2x1bW5zPy5maWx0ZXIoKGMpID0+IGMudmlzaWJsZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgb3Blbk1lbnUobm9kZTogVCkge1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLm9wZW5Ecm9wZG93bih0aGlzLmRyb3Bkb3duLCBub2RlKTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb25maWdTZXJ2aWNlLm9ic2VydmVDb25maWcoKS5waXBlKHRha2UoMSkpLnRvUHJvbWlzZSgpO1xuICAgICAgICB0aGlzLnNob3dSYXRpbmdzLm5leHQoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaW5zdGFudCgncmF0aW5nLm1vZGUnLCAnbm9uZScpICE9PSAnbm9uZScgJiZcbiAgICAgICAgICAgICAgICAoYXdhaXQgdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuaGFzVG9vbHBlcm1pc3Npb24oXG4gICAgICAgICAgICAgICAgICAgIFJlc3RDb25zdGFudHMuVE9PTFBFUk1JU1NJT05fUkFURV9SRUFELFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldFRlbXBsYXRlKG5hbWU6IEN1c3RvbUZpZWxkU3BlY2lhbFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlLmdldEN1c3RvbUZpZWxkVGVtcGxhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ05PREUnLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5ub2RlIGFzIE5vZGUsXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPGRpdlxuICBbY2xhc3NdPVwiXG4gICAgJ2dyaWQtY2FyZCcgK1xuICAgIChpc0NvbGxlY3Rpb25cbiAgICAgID8gJyBncmlkLWNhcmQtY29sbGVjdGlvbiBncmlkLWNhcmQtY29sbGVjdGlvbi1zY29wZS0nICtcbiAgICAgICAgbm9kZS5jb2xsZWN0aW9uLnNjb3BlICtcbiAgICAgICAgJyBncmlkLWNhcmQtY29sbGVjdGlvbi10eXBlLScgK1xuICAgICAgICBub2RlLmNvbGxlY3Rpb24udHlwZVxuICAgICAgOiAnJykgK1xuICAgICgkYW55KG5vZGUpLnZpcnR1YWwgPyAnIGdyaWQtY2FyZC12aXJ0dWFsJyA6ICcnKSArXG4gICAgJyAnICtcbiAgICBub2RlRW50cmllc0dsb2JhbFNlcnZpY2UuZ2V0Q3VzdG9tQ3NzQ2xhc3Mobm9kZSlcbiAgXCJcbiAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXNDb2xsZWN0aW9uID8gbm9kZS5jb2xsZWN0aW9uLmNvbG9yIDogbnVsbFwiXG4gIFtjbGFzcy5keW5hbWljLXNpbmdsZS1jbGlja109XCJlbnRyaWVzU2VydmljZS5zaW5nbGVDbGlja0hpbnQgPT09ICdkeW5hbWljJ1wiXG4gIFtjbGFzcy5zZWxlY3RlZF09XCJlbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKVwiXG4gIChjb250ZXh0bWVudSk9XCJvcGVuQ29udGV4dG1lbnUoJGV2ZW50LCBub2RlKVwiXG4gIChrZXlkb3duLkNvbnRleHRNZW51KT1cIm9wZW5Db250ZXh0bWVudSgkZXZlbnQsIG5vZGUpXCJcbj5cbiAgPGRpdlxuICAgICpuZ0lmPVwidGVtcGxhdGVzU2VydmljZS5vdmVybGF5XCJcbiAgICBjbGFzcz1cImNhcmQtb3ZlcmxheVwiXG4gICAgKGNsaWNrKT1cIlxuICAgICAgZW50cmllc1NlcnZpY2UuY2xpY2tJdGVtLmVtaXQoe1xuICAgICAgICBlbGVtZW50OiBub2RlLFxuICAgICAgICBzb3VyY2U6IENsaWNrU291cmNlLk92ZXJsYXksXG4gICAgICB9KVxuICAgIFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1NlcnZpY2Uub3ZlcmxheTsgY29udGV4dDogeyBlbGVtZW50OiBub2RlIH1cIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cImRyb3Bkb3duXCJcbiAgICAjbWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgbWF0LWJ1dHRvblxuICAgIGNsYXNzPVwiZHJvcGRvd24tZHVtbXkgY2RrLXZpc3VhbGx5LWhpZGRlblwiXG4gICAgW3N0eWxlLmxlZnQucHhdPVwiZHJvcGRvd25MZWZ0XCJcbiAgICBbc3R5bGUudG9wLnB4XT1cImRyb3Bkb3duVG9wXCJcbiAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgPjwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXNDb2xsZWN0aW9uID8gbm9kZS5jb2xsZWN0aW9uLmNvbG9yIDogbnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY29sbGVjdGlvbi1jb2xvclwiICpuZ0lmPVwibm9kZUhlbHBlci5pc05vZGVDb2xsZWN0aW9uKG5vZGUpXCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtdHlwZS1iYWRnZSBbbm9kZV09XCJub2RlXCI+PC9lcy1ub2RlLXR5cGUtYmFkZ2U+XG4gICAgPGRpdiAqbmdJZj1cImlzQ29sbGVjdGlvbiAmJiBub2RlLmNvbGxlY3Rpb24ucGlubmVkXCIgY2xhc3M9XCJjYXJkLXRvcC1iYXItZmxhZ1wiPlxuICAgICAgPGkgZXNJY29uPVwiZWR1LXBpblwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyLWVtcHR5XCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtc3RhdHMtYmFkZ2VzIFtub2RlXT1cIm5vZGVcIj48L2VzLW5vZGUtc3RhdHMtYmFkZ2VzPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY2hlY2tib3hcIiAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmNoZWNrYm94XCI+XG4gICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgIFtjaGVja2VkXT1cImVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJlbnRyaWVzU2VydmljZS5vbkNoZWNrYm94Q2hhbmdlZChub2RlLCAkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBhcmlhLWxhYmVsPVwie3sgJ1NFTEVDVCcgfCB0cmFuc2xhdGUgOiB7IGVsZW1lbnQ6IChub2RlIHwgbm9kZVRpdGxlKSB9IH19XCJcbiAgICAgID48L21hdC1jaGVja2JveD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxlcy1ub2RlLXVybFxuICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICBtb2RlPVwid3JhcHBlclwiXG4gICAgW25vZGVdPVwibm9kZVwiXG4gICAgZXNGb2N1c1N0YXRlXG4gICAgI2NhcmRGb2N1c1N0YXRlPVwiZXNGb2N1c1N0YXRlXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGltYWdlO1xuICAgICAgICBjb250ZXh0OiB7IHBsYXlBbmltYXRpb246IGNhcmRGb2N1c1N0YXRlLmhvdmVyaW5nIHx8IGNhcmRGb2N1c1N0YXRlLmhhc0ZvY3VzIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXRhXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZXMtbm9kZS11cmw+XG4gIDxkaXZcbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmVsZW1lbnRJbnRlcmFjdGlvblR5cGUgIT09IEludGVyYWN0aW9uVHlwZS5EZWZhdWx0QWN0aW9uTGlua1wiXG4gICAgbWF0UmlwcGxlXG4gICAgKGNsaWNrKT1cIlxuICAgICAgZW50cmllc1NlcnZpY2Uub25DbGlja2VkKHtcbiAgICAgICAgZXZlbnQ6ICRldmVudCxcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YSxcbiAgICAgIH0pXG4gICAgXCJcbiAgICAoZGJsY2xpY2spPVwiXG4gICAgICBlbnRyaWVzU2VydmljZS5kYmxDbGlja0l0ZW0uZW1pdCh7XG4gICAgICAgIGVsZW1lbnQ6IG5vZGUsXG4gICAgICAgIHNvdXJjZTogQ2xpY2tTb3VyY2UuTWV0YWRhdGEsXG4gICAgICB9KVxuICAgIFwiXG4gICAgZXNGb2N1c1N0YXRlXG4gICAgI2NhcmRGb2N1c1N0YXRlPVwiZXNGb2N1c1N0YXRlXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGltYWdlO1xuICAgICAgICBjb250ZXh0OiB7IHBsYXlBbmltYXRpb246IGNhcmRGb2N1c1N0YXRlLmhvdmVyaW5nIHx8IGNhcmRGb2N1c1N0YXRlLmhhc0ZvY3VzIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXRhXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1vcHRpb25zXCIgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5vcHRpb25zIHx8IHNob3dSYXRpbmdzXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtcmF0aW5nLWFyZWFcIj5cbiAgICAgIDxlcy1ub2RlLXJhdGluZyBbbm9kZV09XCJub2RlXCI+PC9lcy1ub2RlLXJhdGluZz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1vcHRpb25zLWFyZWFcIj5cbiAgICAgIDxlcy1vcHRpb24tYnV0dG9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc09uQ2FyZCgpXCJcbiAgICAgICAgY2xhc3M9XCJjYXJkLW9wdGlvbnMtYWx3YXlzXCJcbiAgICAgICAgW29wdGlvbl09XCJvcHRpb25cIlxuICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgID48L2VzLW9wdGlvbi1idXR0b24+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1vcHRpb25zLXNwYWNlclwiPjwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cImRyb3Bkb3duXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIChjbGljayk9XCJvcGVuTWVudShub2RlKVwiXG4gICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJkcm9wZG93bi5tZW51XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInT1BUSU9OU19GT1InIHwgdHJhbnNsYXRlIDogeyBlbGVtZW50OiAobm9kZSB8IG5vZGVUaXRsZSkgfVwiXG4gICAgICAgIGRhdGEtdGVzdD1cImNhcmQtb3B0aW9ucy1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8aSBlc0ljb249XCJtb3JlX3ZlcnRcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjaW1hZ2UgbGV0LXBsYXlBbmltYXRpb249XCJwbGF5QW5pbWF0aW9uXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjYXJkLWltYWdlLWFyZWFcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXNDb2xsZWN0aW9uID8gbm9kZS5jb2xsZWN0aW9uLmNvbG9yIDogbnVsbFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFRlbXBsYXRlKEN1c3RvbUZpZWxkU3BlY2lhbFR5cGUucHJldmlldykgYXMgcmVmXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZWY7IGNvbnRleHQ6IHsgbm9kZTogdGhpcy5ub2RlIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFnZXRUZW1wbGF0ZShDdXN0b21GaWVsZFNwZWNpYWxUeXBlLnByZXZpZXcpXCI+XG4gICAgICAgIDxlcy1wcmV2aWV3LWltYWdlXG4gICAgICAgICAgKm5nSWY9XCIhKGlzQ29sbGVjdGlvbiAmJiBub2RlLnByZXZpZXcuaXNJY29uKVwiXG4gICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgW3BsYXlBbmltYXRpb25dPVwicGxheUFuaW1hdGlvblwiXG4gICAgICAgID48L2VzLXByZXZpZXctaW1hZ2U+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0NvbGxlY3Rpb24gJiYgbm9kZS5wcmV2aWV3LmlzSWNvblwiIGNsYXNzPVwiY2FyZC1jb2xsZWN0aW9uLWltYWdlXCI+XG4gICAgICAgICAgPGkgZXNJY29uPVwibGF5ZXJzXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI21ldGEgbGV0LWxpbms9XCJsaW5rXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtbWV0YVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgZGlzcGxheVBhcnQgb2YgZ2V0VmlzaWJsZUNvbHVtbnMoKTsgbGV0IGZpcnN0ID0gZmlyc3RcIlxuICAgICAgICBjbGFzcz1cImNhcmQtbWV0YS1yb3cgY2FyZC1tZXRhLXJvdy17eyBkaXNwbGF5UGFydC5uYW1lIHwgbG93ZXJjYXNlIHwgcHJvcGVydHlTbHVnIH19XCJcbiAgICAgICAgW2NsYXNzLmNhcmQtbWV0YS1yb3ctcHJpbWFyeV09XCJmaXJzdFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaXJzdFwiPlxuICAgICAgICAgIDxlcy1ub2RlLXVybFxuICAgICAgICAgICAgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5lbGVtZW50SW50ZXJhY3Rpb25UeXBlID09PSBJbnRlcmFjdGlvblR5cGUuRGVmYXVsdEFjdGlvbkxpbmtcIlxuICAgICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgICAjbGlua1xuICAgICAgICAgID5cbiAgICAgICAgICAgIDxlcy1saXN0LWJhc2UgW2l0ZW1dPVwiZGlzcGxheVBhcnRcIiBbbm9kZV09XCJub2RlXCIgW3Byb3ZpZGVMYWJlbF09XCJmYWxzZVwiPiA8L2VzLWxpc3QtYmFzZT5cbiAgICAgICAgICA8L2VzLW5vZGUtdXJsPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJlbnRyaWVzU2VydmljZS5lbGVtZW50SW50ZXJhY3Rpb25UeXBlICE9PSBJbnRlcmFjdGlvblR5cGUuRGVmYXVsdEFjdGlvbkxpbmtcIj5cbiAgICAgICAgICAgIDxlcy1saXN0LWJhc2UgW2l0ZW1dPVwiZGlzcGxheVBhcnRcIiBbbm9kZV09XCJub2RlXCIgW3Byb3ZpZGVMYWJlbF09XCJmYWxzZVwiPiA8L2VzLWxpc3QtYmFzZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlyc3RcIj5cbiAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICB7eyBkaXNwbGF5UGFydCB8IGVzTGlzdEl0ZW1MYWJlbCB8IGFzeW5jIH19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==