ngx-edu-sharing-ui 9.0.2 → 9.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/esm2022/lib/actionbar/actionbar.component.mjs +33 -18
  2. package/esm2022/lib/common/edu-sharing-ui-common.module.mjs +73 -62
  3. package/esm2022/lib/directives/check-text-overflow.directive.mjs +8 -2
  4. package/esm2022/lib/directives/icon.directive.mjs +38 -14
  5. package/esm2022/lib/directives/infinite-scroll.directive.mjs +85 -0
  6. package/esm2022/lib/dropdown/dropdown.component.mjs +17 -10
  7. package/esm2022/lib/edu-sharing-ui-configuration.mjs +8 -1
  8. package/esm2022/lib/edu-sharing-ui.module.mjs +5 -1
  9. package/esm2022/lib/list-items/list-base/list-base.component.mjs +6 -6
  10. package/esm2022/lib/list-items/list-counts/list-counts.component.mjs +3 -1
  11. package/esm2022/lib/list-items/list-text/list-text.component.mjs +17 -17
  12. package/esm2022/lib/mds/mds-helper.service.mjs +167 -0
  13. package/esm2022/lib/mds/mds.module.mjs +16 -0
  14. package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +3 -3
  15. package/esm2022/lib/node-entries/entries-model.mjs +2 -1
  16. package/esm2022/lib/node-entries/node-cache.mjs +9 -1
  17. package/esm2022/lib/node-entries/node-data-source.mjs +4 -2
  18. package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +16 -12
  19. package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +37 -22
  20. package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +5 -5
  21. package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +7 -3
  22. package/esm2022/lib/node-entries/node-entries-global.service.mjs +14 -1
  23. package/esm2022/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.mjs +3 -3
  24. package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +45 -34
  25. package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +17 -5
  26. package/esm2022/lib/node-entries/node-entries.component.mjs +2 -2
  27. package/esm2022/lib/node-entries/node-rating/node-rating.component.mjs +35 -12
  28. package/esm2022/lib/node-entries/option-button/option-button.component.mjs +24 -11
  29. package/esm2022/lib/node-entries/sort-select-panel/sort-select-panel.component.mjs +3 -3
  30. package/esm2022/lib/node-url/node-url.component.mjs +7 -3
  31. package/esm2022/lib/pipes/file-size.pipe.mjs +6 -5
  32. package/esm2022/lib/pipes/node-title.pipe.mjs +7 -1
  33. package/esm2022/lib/pipes/option-tooltip.pipe.mjs +3 -3
  34. package/esm2022/lib/pipes/property-slug.pipe.mjs +16 -0
  35. package/esm2022/lib/services/abstract/options-helper.service.mjs +1 -1
  36. package/esm2022/lib/services/app-container.service.mjs +66 -0
  37. package/esm2022/lib/services/node-entries.service.mjs +47 -3
  38. package/esm2022/lib/services/node-helper.service.mjs +38 -12
  39. package/esm2022/lib/services/options-helper-data.service.mjs +5 -5
  40. package/esm2022/lib/services/repo-url.service.mjs +2 -1
  41. package/esm2022/lib/services/ui.service.mjs +22 -1
  42. package/esm2022/lib/spinner/spinner.component.mjs +4 -3
  43. package/esm2022/lib/translations/translation-loader.mjs +48 -14
  44. package/esm2022/lib/translations/translations.module.mjs +15 -4
  45. package/esm2022/lib/translations/translations.service.mjs +25 -7
  46. package/esm2022/lib/types/injection-tokens.mjs +9 -0
  47. package/esm2022/lib/types/option-item.mjs +9 -3
  48. package/esm2022/module.mjs +51 -43
  49. package/fesm2022/ngx-edu-sharing-ui.mjs +4595 -3931
  50. package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
  51. package/lib/actionbar/actionbar.component.d.ts +13 -3
  52. package/lib/common/edu-sharing-ui-common.module.d.ts +27 -25
  53. package/lib/directives/icon.directive.d.ts +6 -4
  54. package/lib/directives/infinite-scroll.directive.d.ts +22 -0
  55. package/lib/dropdown/dropdown.component.d.ts +6 -3
  56. package/lib/edu-sharing-ui-configuration.d.ts +5 -0
  57. package/lib/edu-sharing-ui.module.d.ts +7 -6
  58. package/lib/list-items/list-widget.d.ts +1 -1
  59. package/lib/mds/mds-helper.service.d.ts +37 -0
  60. package/lib/mds/mds.module.d.ts +6 -0
  61. package/lib/node-entries/entries-model.d.ts +3 -2
  62. package/lib/node-entries/node-data-source.d.ts +1 -1
  63. package/lib/node-entries/node-entries-card/node-entries-card.component.d.ts +2 -2
  64. package/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.d.ts +6 -1
  65. package/lib/node-entries/node-entries-global-options/node-entries-global-options.component.d.ts +1 -0
  66. package/lib/node-entries/node-entries-global.service.d.ts +7 -0
  67. package/lib/node-entries/node-entries-table/node-entries-table.component.d.ts +4 -1
  68. package/lib/node-entries/node-entries-wrapper.component.d.ts +8 -3
  69. package/lib/node-entries/node-rating/node-rating.component.d.ts +3 -3
  70. package/lib/node-entries/option-button/option-button.component.d.ts +8 -3
  71. package/lib/pipes/node-title.pipe.d.ts +2 -1
  72. package/lib/pipes/option-tooltip.pipe.d.ts +1 -1
  73. package/lib/pipes/property-slug.pipe.d.ts +7 -0
  74. package/lib/services/abstract/options-helper.service.d.ts +4 -4
  75. package/lib/services/app-container.service.d.ts +43 -0
  76. package/lib/services/node-entries.service.d.ts +31 -6
  77. package/lib/services/node-helper.service.d.ts +7 -5
  78. package/lib/services/options-helper-data.service.d.ts +6 -6
  79. package/lib/services/ui.service.d.ts +15 -2
  80. package/lib/spinner/spinner.component.d.ts +1 -1
  81. package/lib/translations/translation-loader.d.ts +2 -1
  82. package/lib/translations/translations.service.d.ts +5 -2
  83. package/lib/types/injection-tokens.d.ts +8 -0
  84. package/lib/types/option-item.d.ts +10 -6
  85. package/module.d.ts +50 -42
  86. package/package.json +1 -1
  87. package/esm2022/lib/translations/languages.mjs +0 -5
  88. package/lib/translations/languages.d.ts +0 -4
@@ -98,7 +98,9 @@ export class NodeDataSource extends DataSource {
98
98
  return this.dataStream.value?.length === 0;
99
99
  }
100
100
  getTotal() {
101
- return this.pagination$.value?.total ?? this.dataStream.value?.length ?? 0;
101
+ return this.pagination$.value?.total
102
+ ? Math.max(this.pagination$.value?.total, this.getData()?.length || 0)
103
+ : this.dataStream.value?.length ?? 0;
102
104
  }
103
105
  isFullyLoaded() {
104
106
  return this.getTotal() <= this.dataStream.value?.length;
@@ -112,4 +114,4 @@ export class NodeDataSource extends DataSource {
112
114
  this.dataStream.next(Helper.deepCopy(this.dataStream.value));
113
115
  }
114
116
  }
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1kYXRhLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL25vZGUtZGF0YS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVl4QyxNQUFNLE9BQU8sY0FBa0QsU0FBUSxVQUFhO0lBTWhGLElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsU0FBaUM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBR0QsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUF5QjtRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBSUQsWUFBWSxjQUFtQixFQUFFO1FBQzdCLEtBQUssRUFBRSxDQUFDO1FBeEJGLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUM1QyxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFhLElBQUksQ0FBQyxDQUFDO1FBQzVELDJGQUEyRjtRQUMzRixRQUFRO1FBQ0QscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQXlCLEtBQUssQ0FBQyxDQUFDO1FBTzdFLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQVNoQixlQUFVLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFLaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDNUI7UUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDM0MsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxRQUFRO2lCQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDeEIsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO2FBQU07WUFDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDN0IsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtRQUNiLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsVUFBVSxLQUFJLENBQUM7SUFFZixPQUFPLENBQUMsSUFBUyxFQUFFLGFBQXlCLElBQUk7UUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQWUsRUFBRSxXQUErQixPQUFPO1FBQzlELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQixJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUU7WUFDdEIsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNILElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLFFBQWE7UUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FDakMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNOLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBRSxDQUFVLENBQUMsR0FBRyxFQUFHLEtBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN2RixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtZQUN4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUNmLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNO2dCQUM1QyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7Z0JBQ3JCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNO2FBQy9DLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFzQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDekIsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7SUFDeEUsQ0FBQztJQUVELGdHQUFnRztJQUNoRyw0RUFBNEU7SUFDNUUsT0FBTztRQUNILE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxhQUFhO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO0lBQzVELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEl0ZW1zQ2FwIH0gZnJvbSAnLi9pdGVtcy1jYXAnO1xuaW1wb3J0IHsgTm9kZSwgR2VuZXJpY0F1dGhvcml0eSwgUGFnaW5hdGlvbiB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi4vdXRpbC9oZWxwZXInO1xuXG5leHBvcnQgdHlwZSBMb2FkaW5nU3RhdGUgPVxuICAgIC8vIFRoZSBkYXRhIHNvdXJjZSBpcyBsb2FkaW5nIGRhdGEgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgIHwgJ2luaXRpYWwnXG4gICAgLy8gTG9hZGluZyBkYXRhIGFmdGVyIGNoYW5nZSBvZiBwYXJhbWV0ZXJzLCBpLmUuLCBpdCB3aWxsIHJlcGxhY2UgdGhlIGN1cnJlbnQgZGF0YSB3aGVuIGRvbmUuXG4gICAgfCAncmVzZXQnXG4gICAgLy8gTG9hZGluZyBhbm90aGVyIHBhZ2Ugd2l0aCB1bmNoYW5nZWQgcGFyYW1ldGVycy5cbiAgICB8ICdwYWdlJ1xuICAgIC8vIExvYWRpbmcgZG9uZS5cbiAgICB8IGZhbHNlO1xuXG5leHBvcnQgY2xhc3MgTm9kZURhdGFTb3VyY2U8VCBleHRlbmRzIE5vZGUgfCBHZW5lcmljQXV0aG9yaXR5PiBleHRlbmRzIERhdGFTb3VyY2U8VD4ge1xuICAgIHByb3RlY3RlZCBkYXRhU3RyZWFtID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUW10+KFtdKTtcbiAgICBwcml2YXRlIHBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uPihudWxsKTtcbiAgICAvLyBJbmNsdWRlIGBMb2FkaW5nU3RhdGVgIHRvIGJlIHR5cGUtY29tcGF0aWJsZSB0byBgTm9kZURhdGFTb3VyY2VSZW1vdGVgIGFsdGhvdWdoIG5vdCB1c2VkXG4gICAgLy8gaGVyZS5cbiAgICBwdWJsaWMgaXNMb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TG9hZGluZ1N0YXRlIHwgYm9vbGVhbj4oZmFsc2UpO1xuICAgIGdldCBpc0xvYWRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTG9hZGluZ1N1YmplY3QudmFsdWU7XG4gICAgfVxuICAgIHNldCBpc0xvYWRpbmcoaXNMb2FkaW5nOiBMb2FkaW5nU3RhdGUgfCBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nU3ViamVjdC5uZXh0KGlzTG9hZGluZyk7XG4gICAgfVxuICAgIGluaXRpYWxQYWdlTG9hZGVkID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9pdGVtc0NhcDogSXRlbXNDYXA8VD4gfCBudWxsO1xuICAgIGdldCBpdGVtc0NhcCgpOiBJdGVtc0NhcDxUPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNDYXA7XG4gICAgfVxuICAgIHNldCBpdGVtc0NhcCh2YWx1ZTogSXRlbXNDYXA8VD4gfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zQ2FwID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY29ubmVjdFJlbmRlckRhdGEoKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIHJlbmRlckRhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xuICAgIHByb3RlY3RlZCByZW5kZXJEYXRhU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoaW5pdGlhbERhdGE6IFRbXSA9IFtdKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2V0RGF0YShpbml0aWFsRGF0YSk7XG4gICAgfVxuXG4gICAgY29ubmVjdCgpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgICAgICBpZiAoIXRoaXMucmVuZGVyRGF0YVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0UmVuZGVyRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckRhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25uZWN0UmVuZGVyRGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJEYXRhU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5pdGVtc0NhcCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJEYXRhU3Vic2NyaXB0aW9uID0gdGhpcy5pdGVtc0NhcFxuICAgICAgICAgICAgICAgIC5jb25uZWN0KHRoaXMuZGF0YVN0cmVhbSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLnJlbmRlckRhdGEubmV4dChkYXRhKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckRhdGFTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFTdHJlYW0uc3Vic2NyaWJlKChkYXRhKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRGF0YS5uZXh0KGRhdGEpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbm5lY3RQYWdpbmF0aW9uKCk6IE9ic2VydmFibGU8UGFnaW5hdGlvbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uJDtcbiAgICB9XG5cbiAgICBkaXNjb25uZWN0KCkge31cblxuICAgIHNldERhdGEoZGF0YTogVFtdLCBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0gbnVsbCkge1xuICAgICAgICB0aGlzLmRhdGFTdHJlYW0ubmV4dChkYXRhKTtcbiAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uKHBhZ2luYXRpb24pO1xuICAgIH1cblxuICAgIGFwcGVuZERhdGEoYXBwZW5kRGF0YTogVFtdLCBsb2NhdGlvbjogJ2JlZm9yZScgfCAnYWZ0ZXInID0gJ2FmdGVyJykge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICBpZiAobG9jYXRpb24gPT09ICdhZnRlcicpIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmNvbmNhdChhcHBlbmREYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBhcHBlbmREYXRhLmNvbmNhdChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTdHJlYW0ubmV4dChkYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGVsZW1lbnRzIGZyb20gdGhlIHZpc2libGUgZGF0YS5cbiAgICAgKi9cbiAgICByZW1vdmVEYXRhKHRvUmVtb3ZlOiBUW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3RGF0YSA9IHRoaXMuZ2V0RGF0YSgpLmZpbHRlcihcbiAgICAgICAgICAgICh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAhdG9SZW1vdmUuc29tZSgoZCkgPT4gSGVscGVyLm9iamVjdEVxdWFscygoZCBhcyBOb2RlKS5yZWYsICh2YWx1ZSBhcyBOb2RlKS5yZWYpKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZERhdGEgPSB0aGlzLmdldERhdGEoKS5maWx0ZXIoKHZhbHVlKSA9PiAhbmV3RGF0YS5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgICAgICB0aGlzLmRhdGFTdHJlYW0ubmV4dChuZXdEYXRhKTtcbiAgICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbiQudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLnBhZ2luYXRpb24kLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uKHtcbiAgICAgICAgICAgICAgICBjb3VudDogcGFnaW5hdGlvbi5jb3VudCAtIHJlbW92ZWREYXRhLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBmcm9tOiBwYWdpbmF0aW9uLmZyb20sXG4gICAgICAgICAgICAgICAgdG90YWw6IHBhZ2luYXRpb24udG90YWwgLSByZW1vdmVkRGF0YS5sZW5ndGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFBhZ2luYXRpb24ocGFnaW5hdGlvbjogUGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQocGFnaW5hdGlvbik7XG4gICAgfVxuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YShbXSk7XG4gICAgfVxuXG4gICAgaGFzTW9yZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRpb24kLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb24kLnZhbHVlLnRvdGFsID4gdGhpcy5kYXRhU3RyZWFtLnZhbHVlPy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gRklYTUU6IFRoaXMgaXMgc29tZXdoYXQgZGFuZ2Vyb3VzIGJlY2F1c2Ugd2UgcmVseSBvbiBgY29ubmVjdGAgYmVpbmcgY2FsbGVkIGZyb20gb3V0c2lkZSwgYnV0XG4gICAgLy8gdGhpcyBtZXRob2QgcHJvdmlkZXMgYSB3YXkgdG8gYWNjZXNzIGRhdGEgd2l0aG91dCBldmVyIGNhbGxpbmcgYGNvbm5lY3RgLlxuICAgIGdldERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckRhdGEudmFsdWU7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVN0cmVhbS52YWx1ZT8ubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGdldFRvdGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uJC52YWx1ZT8udG90YWwgPz8gdGhpcy5kYXRhU3RyZWFtLnZhbHVlPy5sZW5ndGggPz8gMDtcbiAgICB9XG5cbiAgICBpc0Z1bGx5TG9hZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb3RhbCgpIDw9IHRoaXMuZGF0YVN0cmVhbS52YWx1ZT8ubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZvcmNlIGEgcmVmcmVzaCBvZiBhbGwgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgZGF0YSBzdHJlYW1cbiAgICAgKiB0cmlnZ2VyIHRoaXMgdG8gZW5mb3JjZSBhIHJlYnVpbGQgb2YgdGhlIG5vZGVzIGluIGFsbCBzdWItY29tcG9uZW50c1xuICAgICAqIGkuZS4gaWYgZGF0YSBmcm9tIHNvbWUgbm9kZXMgaGFzIGNoYW5nZWRcbiAgICAgKi9cbiAgICByZWZyZXNoKCkge1xuICAgICAgICB0aGlzLmRhdGFTdHJlYW0ubmV4dChIZWxwZXIuZGVlcENvcHkodGhpcy5kYXRhU3RyZWFtLnZhbHVlKSk7XG4gICAgfVxufVxuIl19
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1kYXRhLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvbm9kZS1lbnRyaWVzL25vZGUtZGF0YS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVl4QyxNQUFNLE9BQU8sY0FBa0QsU0FBUSxVQUFhO0lBTWhGLElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsU0FBaUM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBR0QsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUF5QjtRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBSUQsWUFBWSxjQUFtQixFQUFFO1FBQzdCLEtBQUssRUFBRSxDQUFDO1FBeEJGLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUM1QyxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFhLElBQUksQ0FBQyxDQUFDO1FBQzVELDJGQUEyRjtRQUMzRixRQUFRO1FBQ0QscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQXlCLEtBQUssQ0FBQyxDQUFDO1FBTzdFLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQVNoQixlQUFVLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFLaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDNUI7UUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDM0MsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxRQUFRO2lCQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDeEIsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO2FBQU07WUFDSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDN0IsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtRQUNiLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsVUFBVSxLQUFJLENBQUM7SUFFZixPQUFPLENBQUMsSUFBUyxFQUFFLGFBQXlCLElBQUk7UUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQWUsRUFBRSxXQUErQixPQUFPO1FBQzlELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQixJQUFJLFFBQVEsS0FBSyxPQUFPLEVBQUU7WUFDdEIsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNILElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLFFBQWE7UUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FDakMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNOLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBRSxDQUFVLENBQUMsR0FBRyxFQUFHLEtBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN2RixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtZQUN4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUNmLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNO2dCQUM1QyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7Z0JBQ3JCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNO2FBQy9DLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFzQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDekIsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7SUFDeEUsQ0FBQztJQUVELGdHQUFnRztJQUNoRyw0RUFBNEU7SUFDNUUsT0FBTztRQUNILE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUs7WUFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO1lBQ3RFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxhQUFhO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO0lBQzVELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEl0ZW1zQ2FwIH0gZnJvbSAnLi9pdGVtcy1jYXAnO1xuaW1wb3J0IHsgR2VuZXJpY0F1dGhvcml0eSwgTm9kZSwgUGFnaW5hdGlvbiB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgSGVscGVyIH0gZnJvbSAnLi4vdXRpbC9oZWxwZXInO1xuXG5leHBvcnQgdHlwZSBMb2FkaW5nU3RhdGUgPVxuICAgIC8vIFRoZSBkYXRhIHNvdXJjZSBpcyBsb2FkaW5nIGRhdGEgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgIHwgJ2luaXRpYWwnXG4gICAgLy8gTG9hZGluZyBkYXRhIGFmdGVyIGNoYW5nZSBvZiBwYXJhbWV0ZXJzLCBpLmUuLCBpdCB3aWxsIHJlcGxhY2UgdGhlIGN1cnJlbnQgZGF0YSB3aGVuIGRvbmUuXG4gICAgfCAncmVzZXQnXG4gICAgLy8gTG9hZGluZyBhbm90aGVyIHBhZ2Ugd2l0aCB1bmNoYW5nZWQgcGFyYW1ldGVycy5cbiAgICB8ICdwYWdlJ1xuICAgIC8vIExvYWRpbmcgZG9uZS5cbiAgICB8IGZhbHNlO1xuXG5leHBvcnQgY2xhc3MgTm9kZURhdGFTb3VyY2U8VCBleHRlbmRzIE5vZGUgfCBHZW5lcmljQXV0aG9yaXR5PiBleHRlbmRzIERhdGFTb3VyY2U8VD4ge1xuICAgIHByb3RlY3RlZCBkYXRhU3RyZWFtID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUW10+KFtdKTtcbiAgICBwcml2YXRlIHBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uPihudWxsKTtcbiAgICAvLyBJbmNsdWRlIGBMb2FkaW5nU3RhdGVgIHRvIGJlIHR5cGUtY29tcGF0aWJsZSB0byBgTm9kZURhdGFTb3VyY2VSZW1vdGVgIGFsdGhvdWdoIG5vdCB1c2VkXG4gICAgLy8gaGVyZS5cbiAgICBwdWJsaWMgaXNMb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TG9hZGluZ1N0YXRlIHwgYm9vbGVhbj4oZmFsc2UpO1xuICAgIGdldCBpc0xvYWRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTG9hZGluZ1N1YmplY3QudmFsdWU7XG4gICAgfVxuICAgIHNldCBpc0xvYWRpbmcoaXNMb2FkaW5nOiBMb2FkaW5nU3RhdGUgfCBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nU3ViamVjdC5uZXh0KGlzTG9hZGluZyk7XG4gICAgfVxuICAgIGluaXRpYWxQYWdlTG9hZGVkID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9pdGVtc0NhcDogSXRlbXNDYXA8VD4gfCBudWxsO1xuICAgIGdldCBpdGVtc0NhcCgpOiBJdGVtc0NhcDxUPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNDYXA7XG4gICAgfVxuICAgIHNldCBpdGVtc0NhcCh2YWx1ZTogSXRlbXNDYXA8VD4gfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zQ2FwID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY29ubmVjdFJlbmRlckRhdGEoKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIHJlbmRlckRhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xuICAgIHByb3RlY3RlZCByZW5kZXJEYXRhU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoaW5pdGlhbERhdGE6IFRbXSA9IFtdKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2V0RGF0YShpbml0aWFsRGF0YSk7XG4gICAgfVxuXG4gICAgY29ubmVjdCgpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgICAgICBpZiAoIXRoaXMucmVuZGVyRGF0YVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0UmVuZGVyRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckRhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb25uZWN0UmVuZGVyRGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJEYXRhU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5pdGVtc0NhcCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJEYXRhU3Vic2NyaXB0aW9uID0gdGhpcy5pdGVtc0NhcFxuICAgICAgICAgICAgICAgIC5jb25uZWN0KHRoaXMuZGF0YVN0cmVhbSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLnJlbmRlckRhdGEubmV4dChkYXRhKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckRhdGFTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFTdHJlYW0uc3Vic2NyaWJlKChkYXRhKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRGF0YS5uZXh0KGRhdGEpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbm5lY3RQYWdpbmF0aW9uKCk6IE9ic2VydmFibGU8UGFnaW5hdGlvbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uJDtcbiAgICB9XG5cbiAgICBkaXNjb25uZWN0KCkge31cblxuICAgIHNldERhdGEoZGF0YTogVFtdLCBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0gbnVsbCkge1xuICAgICAgICB0aGlzLmRhdGFTdHJlYW0ubmV4dChkYXRhKTtcbiAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uKHBhZ2luYXRpb24pO1xuICAgIH1cblxuICAgIGFwcGVuZERhdGEoYXBwZW5kRGF0YTogVFtdLCBsb2NhdGlvbjogJ2JlZm9yZScgfCAnYWZ0ZXInID0gJ2FmdGVyJykge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICBpZiAobG9jYXRpb24gPT09ICdhZnRlcicpIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmNvbmNhdChhcHBlbmREYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBhcHBlbmREYXRhLmNvbmNhdChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTdHJlYW0ubmV4dChkYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGVsZW1lbnRzIGZyb20gdGhlIHZpc2libGUgZGF0YS5cbiAgICAgKi9cbiAgICByZW1vdmVEYXRhKHRvUmVtb3ZlOiBUW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3RGF0YSA9IHRoaXMuZ2V0RGF0YSgpLmZpbHRlcihcbiAgICAgICAgICAgICh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAhdG9SZW1vdmUuc29tZSgoZCkgPT4gSGVscGVyLm9iamVjdEVxdWFscygoZCBhcyBOb2RlKS5yZWYsICh2YWx1ZSBhcyBOb2RlKS5yZWYpKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZERhdGEgPSB0aGlzLmdldERhdGEoKS5maWx0ZXIoKHZhbHVlKSA9PiAhbmV3RGF0YS5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgICAgICB0aGlzLmRhdGFTdHJlYW0ubmV4dChuZXdEYXRhKTtcbiAgICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbiQudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLnBhZ2luYXRpb24kLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmF0aW9uKHtcbiAgICAgICAgICAgICAgICBjb3VudDogcGFnaW5hdGlvbi5jb3VudCAtIHJlbW92ZWREYXRhLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBmcm9tOiBwYWdpbmF0aW9uLmZyb20sXG4gICAgICAgICAgICAgICAgdG90YWw6IHBhZ2luYXRpb24udG90YWwgLSByZW1vdmVkRGF0YS5sZW5ndGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFBhZ2luYXRpb24ocGFnaW5hdGlvbjogUGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24kLm5leHQocGFnaW5hdGlvbik7XG4gICAgfVxuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YShbXSk7XG4gICAgfVxuXG4gICAgaGFzTW9yZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRpb24kLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb24kLnZhbHVlLnRvdGFsID4gdGhpcy5kYXRhU3RyZWFtLnZhbHVlPy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gRklYTUU6IFRoaXMgaXMgc29tZXdoYXQgZGFuZ2Vyb3VzIGJlY2F1c2Ugd2UgcmVseSBvbiBgY29ubmVjdGAgYmVpbmcgY2FsbGVkIGZyb20gb3V0c2lkZSwgYnV0XG4gICAgLy8gdGhpcyBtZXRob2QgcHJvdmlkZXMgYSB3YXkgdG8gYWNjZXNzIGRhdGEgd2l0aG91dCBldmVyIGNhbGxpbmcgYGNvbm5lY3RgLlxuICAgIGdldERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckRhdGEudmFsdWU7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVN0cmVhbS52YWx1ZT8ubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGdldFRvdGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uJC52YWx1ZT8udG90YWxcbiAgICAgICAgICAgID8gTWF0aC5tYXgodGhpcy5wYWdpbmF0aW9uJC52YWx1ZT8udG90YWwsIHRoaXMuZ2V0RGF0YSgpPy5sZW5ndGggfHwgMClcbiAgICAgICAgICAgIDogdGhpcy5kYXRhU3RyZWFtLnZhbHVlPy5sZW5ndGggPz8gMDtcbiAgICB9XG5cbiAgICBpc0Z1bGx5TG9hZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb3RhbCgpIDw9IHRoaXMuZGF0YVN0cmVhbS52YWx1ZT8ubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZvcmNlIGEgcmVmcmVzaCBvZiBhbGwgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgZGF0YSBzdHJlYW1cbiAgICAgKiB0cmlnZ2VyIHRoaXMgdG8gZW5mb3JjZSBhIHJlYnVpbGQgb2YgdGhlIG5vZGVzIGluIGFsbCBzdWItY29tcG9uZW50c1xuICAgICAqIGkuZS4gaWYgZGF0YSBmcm9tIHNvbWUgbm9kZXMgaGFzIGNoYW5nZWRcbiAgICAgKi9cbiAgICByZWZyZXNoKCkge1xuICAgICAgICB0aGlzLmRhdGFTdHJlYW0ubmV4dChIZWxwZXIuZGVlcENvcHkodGhpcy5kYXRhU3RyZWFtLnZhbHVlKSk7XG4gICAgfVxufVxuIl19
@@ -14,8 +14,8 @@ import * as i4 from "../node-entries-templates.service";
14
14
  import * as i5 from "../node-entries-global.service";
15
15
  import * as i6 from "../../services/abstract/toast.service";
16
16
  import * as i7 from "@angular/common";
17
- import * as i8 from "../../directives/icon.directive";
18
- import * as i9 from "../../directives/focus-state.directive";
17
+ import * as i8 from "../../directives/focus-state.directive";
18
+ import * as i9 from "../../directives/icon.directive";
19
19
  import * as i10 from "../../node-url/node-url.component";
20
20
  import * as i11 from "../../list-items/list-base/list-base.component";
21
21
  import * as i12 from "@angular/material/checkbox";
@@ -27,9 +27,10 @@ import * as i17 from "../preview-image/preview-image.component";
27
27
  import * as i18 from "../node-type-badge/node-type-badge.component";
28
28
  import * as i19 from "../option-button/option-button.component";
29
29
  import * as i20 from "../node-stats-badges/node-stats-badges.component";
30
- import * as i21 from "../../pipes/node-title.pipe";
31
- import * as i22 from "@ngx-translate/core";
32
- import * as i23 from "../list-item-label.pipe";
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";
33
34
  export class NodeEntriesCardComponent {
34
35
  constructor(entriesService, nodeHelper, applicationRef, configService, authenticationService, templatesService, nodeEntriesGlobalService, toast) {
35
36
  this.entriesService = entriesService;
@@ -55,16 +56,16 @@ export class NodeEntriesCardComponent {
55
56
  : '#fff';
56
57
  }
57
58
  optionsOnCard() {
58
- const options = this.entriesService.options[Target.List];
59
- const always = options.filter((o) => o.showAlways);
60
- if (always.some((o) => o.showCallback(this.node))) {
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))) {
61
62
  return always;
62
63
  }
63
64
  // we do NOT show any additional actions
64
65
  return [];
65
66
  // return options.filter((o) => o.showAsAction && o.showCallback(this.node)).slice(0, 3);
66
67
  }
67
- openContextmenu(event) {
68
+ openContextmenu(event, node) {
68
69
  event.stopPropagation();
69
70
  event.preventDefault();
70
71
  if (!this.dropdown) {
@@ -84,6 +85,8 @@ export class NodeEntriesCardComponent {
84
85
  }
85
86
  // Wait for the menu to reflect changed options.
86
87
  setTimeout(() => {
88
+ this.dropdown.callbackObject = node;
89
+ this.dropdown.ngOnChanges();
87
90
  if (this.dropdown.canShowDropdown()) {
88
91
  this.menuTrigger.openMenu();
89
92
  }
@@ -98,6 +101,7 @@ export class NodeEntriesCardComponent {
98
101
  async openMenu(node) {
99
102
  this.entriesService.selection.clear();
100
103
  this.entriesService.selection.select(node);
104
+ this.entriesService.selection.clickSource = ClickSource.Dropdown;
101
105
  await this.applicationRef.tick();
102
106
  this.dropdown.menu.focusFirstItem();
103
107
  }
@@ -113,11 +117,11 @@ export class NodeEntriesCardComponent {
113
117
  }, this.node);
114
118
  }
115
119
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", 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 }); }
116
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", 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=\"grid-card\"\n [class.grid-card-collection]=\"isCollection\"\n [class.grid-card-virtual]=\"$any(node).virtual\"\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)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\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 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 }}\"\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%}.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:var(--focusWidth) 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.5em;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>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;color:var(--textMain);font-size:120%;height:2.5em;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.25em;max-height:2.5em;-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 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:var(--focusWidth) 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.25em;max-height:2.5em;-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.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "directive", type: i9.FocusStateDirective, selector: "[esFocusState]", exportAs: ["esFocusState"] }, { 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: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", 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.NodeTitlePipe, name: "nodeTitle" }, { kind: "pipe", type: i22.TranslatePipe, name: "translate" }, { kind: "pipe", type: i23.ListItemLabelPipe, name: "esListItemLabel" }] }); }
120
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", 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:var(--focusWidth) 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:var(--focusWidth) 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: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", 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" }] }); }
117
121
  }
118
122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: NodeEntriesCardComponent, decorators: [{
119
123
  type: Component,
120
- args: [{ selector: 'es-node-entries-card', template: "<div\n class=\"grid-card\"\n [class.grid-card-collection]=\"isCollection\"\n [class.grid-card-virtual]=\"$any(node).virtual\"\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)\"\n (keydown.ContextMenu)=\"openContextmenu($event)\"\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 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 }}\"\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%}.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:var(--focusWidth) 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.5em;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>es-list-base,.grid-card .card-meta .card-meta-row:first-child>es-node-url{width:100%;color:var(--textMain);font-size:120%;height:2.5em;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.25em;max-height:2.5em;-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 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:var(--focusWidth) 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.25em;max-height:2.5em;-webkit-line-clamp:2;-webkit-box-orient:vertical}:host ::ng-deep .grid-card es-node-url .node-url-wrapper{height:100%}\n"] }]
124
+ 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:var(--focusWidth) 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:var(--focusWidth) 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"] }]
121
125
  }], ctorParameters: function () { return [{ 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: [{
122
126
  type: Optional
123
127
  }] }]; }, propDecorators: { dropdown: [{
@@ -128,4 +132,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
128
132
  }], node: [{
129
133
  type: Input
130
134
  }] } });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBNEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHakQsT0FBTyxFQUE4QyxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT3ZDLE1BQU0sT0FBTyx3QkFBd0I7SUFjakMsWUFDVyxjQUFxQyxFQUNyQyxVQUE2QixFQUM3QixjQUE4QixFQUM5QixhQUE0QixFQUM1QixxQkFBNEMsRUFDNUMsZ0JBQTZDLEVBQzVDLHdCQUFrRCxFQUN0QyxLQUFZO1FBUHpCLG1CQUFjLEdBQWQsY0FBYyxD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QUFDLElBQVksQ0FDcEIsQ0FBQztJQUNOLENBQUM7OEdBdkdRLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDZPQzdCckMscWhNQXVLQTs7MkZEMUlhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDSSxzQkFBc0I7OzBCQTBCM0IsUUFBUTs0Q0FqQkosUUFBUTtzQkFBaEIsS0FBSztnQkFFb0IsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUVmLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQXBwbGljYXRpb25SZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IENsaWNrU291cmNlLCBJbnRlcmFjdGlvblR5cGUgfSBmcm9tICcuLi9lbnRyaWVzLW1vZGVsJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL25vZGUtZW50cmllcy10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21GaWVsZFNwZWNpYWxUeXBlLCBOb2RlRW50cmllc0dsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi9ub2RlLWVudHJpZXMtZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSAnLi4vLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgTm9kZUVudHJpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1lbnRyaWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSwgQ29uZmlnU2VydmljZSwgTm9kZSwgUmVzdENvbnN0YW50cyB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuaW1wb3J0IHsgQ29sb3JIZWxwZXIsIFByZWZlcnJlZENvbG9yIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2xvci1oZWxwZXInO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWJzdHJhY3QvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1ub2RlLWVudHJpZXMtY2FyZCcsXG4gICAgdGVtcGxhdGVVcmw6ICdub2RlLWVudHJpZXMtY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ25vZGUtZW50cmllcy1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVFbnRyaWVzQ2FyZENvbXBvbmVudDxUIGV4dGVuZHMgTm9kZT4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XG4gICAgcmVhZG9ubHkgSW50ZXJhY3Rpb25UeXBlID0gSW50ZXJhY3Rpb25UeXBlO1xuICAgIHJlYWRvbmx5IFRhcmdldCA9IFRhcmdldDtcbiAgICByZWFkb25seSBDbGlja1NvdXJjZSA9IENsaWNrU291cmNlO1xuICAgIHJlYWRvbmx5IEN1c3RvbUZpZWxkU3BlY2lhbFR5cGUgPSBDdXN0b21GaWVsZFNwZWNpYWxUeXBlO1xuICAgIEBJbnB1dCgpIGRyb3Bkb3duOiBEcm9wZG93bkNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ21lbnVUcmlnZ2VyJykgbWVudVRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyO1xuXG4gICAgQElucHV0KCkgbm9kZTogVDtcbiAgICBkcm9wZG93bkxlZnQ6IG51bWJlcjtcbiAgICBkcm9wZG93blRvcDogbnVtYmVyO1xuICAgIHNob3dSYXRpbmdzID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gICAgaXNDb2xsZWN0aW9uOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZW50cmllc1NlcnZpY2U6IE5vZGVFbnRyaWVzU2VydmljZTxUPixcbiAgICAgICAgcHVibGljIG5vZGVIZWxwZXI6IE5vZGVIZWxwZXJTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgICAgICBwdWJsaWMgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHVibGljIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgdGVtcGxhdGVzU2VydmljZTogTm9kZUVudHJpZXNUZW1wbGF0ZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5vZGVFbnRyaWVzR2xvYmFsU2VydmljZTogTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0OiBUb2FzdCxcbiAgICApIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNDb2xsZWN0aW9uID0gdGhpcy5ub2RlSGVscGVyLmlzTm9kZUNvbGxlY3Rpb24oY2hhbmdlcy5ub2RlPy5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGdldFRleHRDb2xvcigpIHtcbiAgICAgICAgcmV0dXJuIENvbG9ySGVscGVyLmdldFByZWZlcnJlZENvbG9yKHRoaXMubm9kZS5jb2xsZWN0aW9uLmNvbG9yKSA9PT0gUHJlZmVycmVkQ29sb3IuQmxhY2tcbiAgICAgICAgICAgID8gJyMwMDAnXG4gICAgICAgICAgICA6ICcjZmZmJztcbiAgICB9XG4gICAgb3B0aW9uc09uQ2FyZCgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZW50cmllc1NlcnZpY2Uub3B0aW9uc1tUYXJnZXQuTGlzdF07XG4gICAgICAgIGNvbnN0IGFsd2F5cyA9IG9wdGlvbnMuZmlsdGVyKChvKSA9PiBvLnNob3dBbHdheXMpO1xuICAgICAgICBpZiAoYWx3YXlzLnNvbWUoKG8pID0+IG8uc2hvd0NhbGxiYWNrKHRoaXMubm9kZSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gYWx3YXlzO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlIGRvIE5PVCBzaG93IGFueSBhZGRpdGlvbmFsIGFjdGlvbnNcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAvLyByZXR1cm4gb3B0aW9ucy5maWx0ZXIoKG8pID0+IG8uc2hvd0FzQWN0aW9uICYmIG8uc2hvd0NhbGxiYWNrKHRoaXMubm9kZSkpLnNsaWNlKDAsIDMpO1xuICAgIH1cblxuICAgIG9wZW5Db250ZXh0bWVudShldmVudDogTW91c2VFdmVudCB8IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoIXRoaXMuZHJvcGRvd24pIHtcbiAgICAgICAgICAgIC8vIENhbGwgYHByZXZlbnREZWZhdWx0KClgIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBtZW51LCBzbyB3ZSBjYW4gdXNlIGBjZGtEcmFnYCB3aXRoIGFcbiAgICAgICAgICAgIC8vIHN0YXJ0IGRlbGF5IHdpdGhvdXQgYmVpbmcgaW50ZXJydXB0ZWQgYnkgdGhlIHN0YW5kYXJkIGxvbmctdGFwIGFjdGlvbi5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICAoeyBjbGllbnRYOiB0aGlzLmRyb3Bkb3duTGVmdCwgY2xpZW50WTogdGhpcy5kcm9wZG93blRvcCB9ID0gZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKHsgeDogdGhpcy5kcm9wZG93bkxlZnQsIHk6IHRoaXMuZHJvcGRvd25Ub3AgfSA9IChcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnRcbiAgICAgICAgICAgICkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0ZWQuaW5jbHVkZXModGhpcy5ub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdCh0aGlzLm5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdhaXQgZm9yIHRoZSBtZW51IHRvIHJlZmxlY3QgY2hhbmdlZCBvcHRpb25zLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmNhblNob3dEcm9wZG93bigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51VHJpZ2dlci5vcGVuTWVudSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnRvYXN0KCdOT19BVkFJTEFCTEVfT1BUSU9OUycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRWaXNpYmxlQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1NlcnZpY2UuY29sdW1ucz8uZmlsdGVyKChjKSA9PiBjLnZpc2libGUpO1xuICAgIH1cblxuICAgIGFzeW5jIG9wZW5NZW51KG5vZGU6IFQpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xuICAgICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5tZW51LmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlnU2VydmljZS5vYnNlcnZlQ29uZmlnKCkucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgICAgICAgdGhpcy5zaG93UmF0aW5ncy5uZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmluc3RhbnQoJ3JhdGluZy5tb2RlJywgJ25vbmUnKSAhPT0gJ25vbmUnICYmXG4gICAgICAgICAgICAgICAgKGF3YWl0IHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmhhc1Rvb2xwZXJtaXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICBSZXN0Q29uc3RhbnRzLlRPT0xQRVJNSVNTSU9OX1JBVEVfUkVBRCxcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRUZW1wbGF0ZShuYW1lOiBDdXN0b21GaWVsZFNwZWNpYWxUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVFbnRyaWVzR2xvYmFsU2VydmljZS5nZXRDdXN0b21GaWVsZFRlbXBsYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdOT0RFJyxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMubm9kZSBhcyBOb2RlLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJncmlkLWNhcmRcIlxuICBbY2xhc3MuZ3JpZC1jYXJkLWNvbGxlY3Rpb25dPVwiaXNDb2xsZWN0aW9uXCJcbiAgW2NsYXNzLmdyaWQtY2FyZC12aXJ0dWFsXT1cIiRhbnkobm9kZSkudmlydHVhbFwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlzQ29sbGVjdGlvbiA/IG5vZGUuY29sbGVjdGlvbi5jb2xvciA6IG51bGxcIlxuICBbY2xhc3MuZHluYW1pYy1zaW5nbGUtY2xpY2tdPVwiZW50cmllc1NlcnZpY2Uuc2luZ2xlQ2xpY2tIaW50ID09PSAnZHluYW1pYydcIlxuICBbY2xhc3Muc2VsZWN0ZWRdPVwiZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAoY29udGV4dG1lbnUpPVwib3BlbkNvbnRleHRtZW51KCRldmVudClcIlxuICAoa2V5ZG93bi5Db250ZXh0TWVudSk9XCJvcGVuQ29udGV4dG1lbnUoJGV2ZW50KVwiXG4+XG4gIDxkaXZcbiAgICAqbmdJZj1cInRlbXBsYXRlc1NlcnZpY2Uub3ZlcmxheVwiXG4gICAgY2xhc3M9XCJjYXJkLW92ZXJsYXlcIlxuICAgIChjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmNsaWNrSXRlbS5lbWl0KHtcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5PdmVybGF5XG4gICAgICB9KVxuICAgIFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1NlcnZpY2Uub3ZlcmxheTsgY29udGV4dDogeyBlbGVtZW50OiBub2RlIH1cIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cImRyb3Bkb3duXCJcbiAgICAjbWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgbWF0LWJ1dHRvblxuICAgIGNsYXNzPVwiZHJvcGRvd24tZHVtbXkgY2RrLXZpc3VhbGx5LWhpZGRlblwiXG4gICAgW3N0eWxlLmxlZnQucHhdPVwiZHJvcGRvd25MZWZ0XCJcbiAgICBbc3R5bGUudG9wLnB4XT1cImRyb3Bkb3duVG9wXCJcbiAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgPjwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXNDb2xsZWN0aW9uID8gbm9kZS5jb2xsZWN0aW9uLmNvbG9yIDogbnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY29sbGVjdGlvbi1jb2xvclwiICpuZ0lmPVwibm9kZUhlbHBlci5pc05vZGVDb2xsZWN0aW9uKG5vZGUpXCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtdHlwZS1iYWRnZSBbbm9kZV09XCJub2RlXCI+PC9lcy1ub2RlLXR5cGUtYmFkZ2U+XG4gICAgPGRpdiAqbmdJZj1cImlzQ29sbGVjdGlvbiAmJiBub2RlLmNvbGxlY3Rpb24ucGlubmVkXCIgY2xhc3M9XCJjYXJkLXRvcC1iYXItZmxhZ1wiPlxuICAgICAgPGkgZXNJY29uPVwiZWR1LXBpblwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyLWVtcHR5XCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtc3RhdHMtYmFkZ2VzIFtub2RlXT1cIm5vZGVcIj48L2VzLW5vZGUtc3RhdHMtYmFkZ2VzPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY2hlY2tib3hcIiAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmNoZWNrYm94XCI+XG4gICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgIFtjaGVja2VkXT1cImVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJlbnRyaWVzU2VydmljZS5vbkNoZWNrYm94Q2hhbmdlZChub2RlLCAkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICBhcmlhLWxhYmVsPVwie3sgJ1NFTEVDVCcgfCB0cmFuc2xhdGUgOiB7IGVsZW1lbnQ6IChub2RlIHwgbm9kZVRpdGxlKSB9IH19XCJcbiAgICAgID48L21hdC1jaGVja2JveD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxlcy1ub2RlLXVybFxuICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICBtb2RlPVwid3JhcHBlclwiXG4gICAgW25vZGVdPVwibm9kZVwiXG4gICAgZXNGb2N1c1N0YXRlXG4gICAgI2NhcmRGb2N1c1N0YXRlPVwiZXNGb2N1c1N0YXRlXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGltYWdlO1xuICAgICAgICBjb250ZXh0OiB7IHBsYXlBbmltYXRpb246IGNhcmRGb2N1c1N0YXRlLmhvdmVyaW5nIHx8IGNhcmRGb2N1c1N0YXRlLmhhc0ZvY3VzIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXRhXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZXMtbm9kZS11cmw+XG4gIDxkaXZcbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmVsZW1lbnRJbnRlcmFjdGlvblR5cGUgIT09IEludGVyYWN0aW9uVHlwZS5EZWZhdWx0QWN0aW9uTGlua1wiXG4gICAgbWF0UmlwcGxlXG4gICAgKGNsaWNrKT1cIlxuICAgICAgZW50cmllc1NlcnZpY2Uub25DbGlja2VkKHtcbiAgICAgICAgZXZlbnQ6ICRldmVudCxcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YVxuICAgICAgfSlcbiAgICBcIlxuICAgIChkYmxjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmRibENsaWNrSXRlbS5lbWl0KHtcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YVxuICAgICAgfSlcbiAgICBcIlxuICAgIGVzRm9jdXNTdGF0ZVxuICAgICNjYXJkRm9jdXNTdGF0ZT1cImVzRm9jdXNTdGF0ZVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBpbWFnZTtcbiAgICAgICAgY29udGV4dDogeyBwbGF5QW5pbWF0aW9uOiBjYXJkRm9jdXNTdGF0ZS5ob3ZlcmluZyB8fCBjYXJkRm9jdXNTdGF0ZS5oYXNGb2N1cyB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWV0YVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9uc1wiICpuZ0lmPVwiZW50cmllc1NlcnZpY2Uub3B0aW9ucyB8fCBzaG93UmF0aW5nc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXJhdGluZy1hcmVhXCI+XG4gICAgICA8ZXMtbm9kZS1yYXRpbmcgW25vZGVdPVwibm9kZVwiPjwvZXMtbm9kZS1yYXRpbmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1hcmVhXCI+XG4gICAgICA8ZXMtb3B0aW9uLWJ1dHRvblxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNPbkNhcmQoKVwiXG4gICAgICAgIGNsYXNzPVwiY2FyZC1vcHRpb25zLWFsd2F5c1wiXG4gICAgICAgIFtvcHRpb25dPVwib3B0aW9uXCJcbiAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICA+PC9lcy1vcHRpb24tYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1zcGFjZXJcIj48L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJkcm9wZG93blwiXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAoY2xpY2spPVwib3Blbk1lbnUobm9kZSlcIlxuICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09QVElPTlNfRk9SJyB8IHRyYW5zbGF0ZSA6IHsgZWxlbWVudDogKG5vZGUgfCBub2RlVGl0bGUpIH1cIlxuICAgICAgICBkYXRhLXRlc3Q9XCJjYXJkLW9wdGlvbnMtYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPGkgZXNJY29uPVwibW9yZV92ZXJ0XCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI2ltYWdlIGxldC1wbGF5QW5pbWF0aW9uPVwicGxheUFuaW1hdGlvblwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY2FyZC1pbWFnZS1hcmVhXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlzQ29sbGVjdGlvbiA/IG5vZGUuY29sbGVjdGlvbi5jb2xvciA6IG51bGxcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRUZW1wbGF0ZShDdXN0b21GaWVsZFNwZWNpYWxUeXBlLnByZXZpZXcpIGFzIHJlZlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVmOyBjb250ZXh0OiB7IG5vZGU6IHRoaXMubm9kZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ2V0VGVtcGxhdGUoQ3VzdG9tRmllbGRTcGVjaWFsVHlwZS5wcmV2aWV3KVwiPlxuICAgICAgICA8ZXMtcHJldmlldy1pbWFnZVxuICAgICAgICAgICpuZ0lmPVwiIShpc0NvbGxlY3Rpb24gJiYgbm9kZS5wcmV2aWV3LmlzSWNvbilcIlxuICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgIFtwbGF5QW5pbWF0aW9uXT1cInBsYXlBbmltYXRpb25cIlxuICAgICAgICA+PC9lcy1wcmV2aWV3LWltYWdlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDb2xsZWN0aW9uICYmIG5vZGUucHJldmlldy5pc0ljb25cIiBjbGFzcz1cImNhcmQtY29sbGVjdGlvbi1pbWFnZVwiPlxuICAgICAgICAgIDxpIGVzSWNvbj1cImxheWVyc1wiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNtZXRhIGxldC1saW5rPVwibGlua1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLW1ldGFcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IGRpc3BsYXlQYXJ0IG9mIGdldFZpc2libGVDb2x1bW5zKCk7IGxldCBmaXJzdCA9IGZpcnN0XCJcbiAgICAgICAgY2xhc3M9XCJjYXJkLW1ldGEtcm93IGNhcmQtbWV0YS1yb3cte3sgZGlzcGxheVBhcnQubmFtZSB8IGxvd2VyY2FzZSB9fVwiXG4gICAgICAgIFtjbGFzcy5jYXJkLW1ldGEtcm93LXByaW1hcnldPVwiZmlyc3RcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlyc3RcIj5cbiAgICAgICAgICA8ZXMtbm9kZS11cmxcbiAgICAgICAgICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgI2xpbmtcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgICAgPC9lcy1ub2RlLXVybD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSAhPT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCI+XG4gICAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpcnN0XCI+XG4gICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAge3sgZGlzcGxheVBhcnQgfCBlc0xpc3RJdGVtTGFiZWwgfCBhc3luYyB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGVzLWxpc3QtYmFzZSBbaXRlbV09XCJkaXNwbGF5UGFydFwiIFtub2RlXT1cIm5vZGVcIiBbcHJvdmlkZUxhYmVsXT1cImZhbHNlXCI+IDwvZXMtbGlzdC1iYXNlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWR1LXNoYXJpbmctdWkvc3JjL2xpYi9ub2RlLWVudHJpZXMvbm9kZS1lbnRyaWVzLWNhcmQvbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxLQUFLLEVBR0wsUUFBUSxFQUVSLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBNEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHakQsT0FBTyxFQUE4QyxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU92QyxNQUFNLE9BQU8sd0JBQXdCO0lBY2pDLFlBQ1csY0FBcUMsRUFDckMsVUFBNkIsRUFDN0IsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIscUJBQTRDLEVBQzVDLGdCQUE2QyxFQUM3Qyx3QkFBa0QsRUFDckMsS0FBWTtRQVB6QixtQkFBYyxHQUFkLGNBQWMs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QixDQUMvQyxhQUFhLENBQUMsd0JBQXdCLENBQ3pDLENBQUMsQ0FDVCxDQUFDO0lBQ04sQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUE0QjtRQUNwQyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxzQkFBc0IsQ0FDdkQ7WUFDSSxJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUk7U0FDUCxFQUNELElBQUksQ0FBQyxJQUFZLENBQ3BCLENBQUM7SUFDTixDQUFDOzhHQTFHUSx3QkFBd0I7a0dBQXhCLHdCQUF3Qiw2T0M3QnJDLHd6TUFpTEE7OzJGRHBKYSx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0ksc0JBQXNCOzswQkEwQjNCLFFBQVE7NENBakJKLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRW9CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFFZixJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBDbGlja1NvdXJjZSwgSW50ZXJhY3Rpb25UeXBlIH0gZnJvbSAnLi4vZW50cmllcy1tb2RlbCc7XG5pbXBvcnQgeyBOb2RlRW50cmllc1RlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9ub2RlLWVudHJpZXMtdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tRmllbGRTcGVjaWFsVHlwZSwgTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vbm9kZS1lbnRyaWVzLWdsb2JhbC5zZXJ2aWNlJztcbmltcG9ydCB7IFRhcmdldCB9IGZyb20gJy4uLy4uL3R5cGVzL29wdGlvbi1pdGVtJztcbmltcG9ydCB7IE5vZGVFbnRyaWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtZW50cmllcy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UsIENvbmZpZ1NlcnZpY2UsIE5vZGUsIFJlc3RDb25zdGFudHMgfSBmcm9tICduZ3gtZWR1LXNoYXJpbmctYXBpJztcbmltcG9ydCB7IENvbG9ySGVscGVyLCBQcmVmZXJyZWRDb2xvciB9IGZyb20gJy4uLy4uL3V0aWwvY29sb3ItaGVscGVyJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2FzdCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Fic3RyYWN0L3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXMtbm9kZS1lbnRyaWVzLWNhcmQnLFxuICAgIHRlbXBsYXRlVXJsOiAnbm9kZS1lbnRyaWVzLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydub2RlLWVudHJpZXMtY2FyZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBOb2RlRW50cmllc0NhcmRDb21wb25lbnQ8VCBleHRlbmRzIE5vZGU+IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIHJlYWRvbmx5IEludGVyYWN0aW9uVHlwZSA9IEludGVyYWN0aW9uVHlwZTtcbiAgICByZWFkb25seSBUYXJnZXQgPSBUYXJnZXQ7XG4gICAgcmVhZG9ubHkgQ2xpY2tTb3VyY2UgPSBDbGlja1NvdXJjZTtcbiAgICByZWFkb25seSBDdXN0b21GaWVsZFNwZWNpYWxUeXBlID0gQ3VzdG9tRmllbGRTcGVjaWFsVHlwZTtcbiAgICBASW5wdXQoKSBkcm9wZG93bjogRHJvcGRvd25Db21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdtZW51VHJpZ2dlcicpIG1lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcjtcblxuICAgIEBJbnB1dCgpIG5vZGU6IFQ7XG4gICAgZHJvcGRvd25MZWZ0OiBudW1iZXI7XG4gICAgZHJvcGRvd25Ub3A6IG51bWJlcjtcbiAgICBzaG93UmF0aW5ncyA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICAgIGlzQ29sbGVjdGlvbjogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVudHJpZXNTZXJ2aWNlOiBOb2RlRW50cmllc1NlcnZpY2U8VD4sXG4gICAgICAgIHB1YmxpYyBub2RlSGVscGVyOiBOb2RlSGVscGVyU2VydmljZSxcbiAgICAgICAgcHVibGljIGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgcHVibGljIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIHRlbXBsYXRlc1NlcnZpY2U6IE5vZGVFbnRyaWVzVGVtcGxhdGVzU2VydmljZSxcbiAgICAgICAgcHVibGljIG5vZGVFbnRyaWVzR2xvYmFsU2VydmljZTogTm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0OiBUb2FzdCxcbiAgICApIHt9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNDb2xsZWN0aW9uID0gdGhpcy5ub2RlSGVscGVyLmlzTm9kZUNvbGxlY3Rpb24oY2hhbmdlcy5ub2RlPy5jdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGdldFRleHRDb2xvcigpIHtcbiAgICAgICAgcmV0dXJuIENvbG9ySGVscGVyLmdldFByZWZlcnJlZENvbG9yKHRoaXMubm9kZS5jb2xsZWN0aW9uLmNvbG9yKSA9PT0gUHJlZmVycmVkQ29sb3IuQmxhY2tcbiAgICAgICAgICAgID8gJyMwMDAnXG4gICAgICAgICAgICA6ICcjZmZmJztcbiAgICB9XG4gICAgb3B0aW9uc09uQ2FyZCgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZW50cmllc1NlcnZpY2Uub3B0aW9ucz8uW1RhcmdldC5MaXN0XTtcbiAgICAgICAgY29uc3QgYWx3YXlzID0gb3B0aW9ucz8uZmlsdGVyKChvKSA9PiBvLnNob3dBbHdheXMpO1xuICAgICAgICBpZiAoYWx3YXlzPy5zb21lKChvKSA9PiBvLnNob3dDYWxsYmFjayh0aGlzLm5vZGUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGFsd2F5cztcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSBkbyBOT1Qgc2hvdyBhbnkgYWRkaXRpb25hbCBhY3Rpb25zXG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgLy8gcmV0dXJuIG9wdGlvbnMuZmlsdGVyKChvKSA9PiBvLnNob3dBc0FjdGlvbiAmJiBvLnNob3dDYWxsYmFjayh0aGlzLm5vZGUpKS5zbGljZSgwLCAzKTtcbiAgICB9XG5cbiAgICBvcGVuQ29udGV4dG1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQgfCBFdmVudCwgbm9kZTogVCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmRyb3Bkb3duKSB7XG4gICAgICAgICAgICAvLyBDYWxsIGBwcmV2ZW50RGVmYXVsdCgpYCBldmVuIHdoZW4gdGhlcmUgaXMgbm8gbWVudSwgc28gd2UgY2FuIHVzZSBgY2RrRHJhZ2Agd2l0aCBhXG4gICAgICAgICAgICAvLyBzdGFydCBkZWxheSB3aXRob3V0IGJlaW5nIGludGVycnVwdGVkIGJ5IHRoZSBzdGFuZGFyZCBsb25nLXRhcCBhY3Rpb24uXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICAgICAgKHsgY2xpZW50WDogdGhpcy5kcm9wZG93bkxlZnQsIGNsaWVudFk6IHRoaXMuZHJvcGRvd25Ub3AgfSA9IGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICh7IHg6IHRoaXMuZHJvcGRvd25MZWZ0LCB5OiB0aGlzLmRyb3Bkb3duVG9wIH0gPSAoXG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICAgICAgICApLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLnNlbGVjdGVkLmluY2x1ZGVzKHRoaXMubm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5ub2RlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXYWl0IGZvciB0aGUgbWVudSB0byByZWZsZWN0IGNoYW5nZWQgb3B0aW9ucy5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmNhbGxiYWNrT2JqZWN0ID0gbm9kZTtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24ubmdPbkNoYW5nZXMoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmNhblNob3dEcm9wZG93bigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51VHJpZ2dlci5vcGVuTWVudSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnRvYXN0KCdOT19BVkFJTEFCTEVfT1BUSU9OUycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRWaXNpYmxlQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllc1NlcnZpY2UuY29sdW1ucz8uZmlsdGVyKChjKSA9PiBjLnZpc2libGUpO1xuICAgIH1cblxuICAgIGFzeW5jIG9wZW5NZW51KG5vZGU6IFQpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5lbnRyaWVzU2VydmljZS5zZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xuICAgICAgICB0aGlzLmVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5jbGlja1NvdXJjZSA9IENsaWNrU291cmNlLkRyb3Bkb3duO1xuICAgICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5tZW51LmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlnU2VydmljZS5vYnNlcnZlQ29uZmlnKCkucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgICAgICAgdGhpcy5zaG93UmF0aW5ncy5uZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmluc3RhbnQoJ3JhdGluZy5tb2RlJywgJ25vbmUnKSAhPT0gJ25vbmUnICYmXG4gICAgICAgICAgICAgICAgKGF3YWl0IHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmhhc1Rvb2xwZXJtaXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICBSZXN0Q29uc3RhbnRzLlRPT0xQRVJNSVNTSU9OX1JBVEVfUkVBRCxcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRUZW1wbGF0ZShuYW1lOiBDdXN0b21GaWVsZFNwZWNpYWxUeXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVFbnRyaWVzR2xvYmFsU2VydmljZS5nZXRDdXN0b21GaWVsZFRlbXBsYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdOT0RFJyxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMubm9kZSBhcyBOb2RlLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgW2NsYXNzXT1cIlxuICAgICdncmlkLWNhcmQnICtcbiAgICAoaXNDb2xsZWN0aW9uXG4gICAgICA/ICcgZ3JpZC1jYXJkLWNvbGxlY3Rpb24gZ3JpZC1jYXJkLWNvbGxlY3Rpb24tc2NvcGUtJyArXG4gICAgICAgIG5vZGUuY29sbGVjdGlvbi5zY29wZSArXG4gICAgICAgICcgZ3JpZC1jYXJkLWNvbGxlY3Rpb24tdHlwZS0nICtcbiAgICAgICAgbm9kZS5jb2xsZWN0aW9uLnR5cGVcbiAgICAgIDogJycpICtcbiAgICAoJGFueShub2RlKS52aXJ0dWFsID8gJyBncmlkLWNhcmQtdmlydHVhbCcgOiAnJykgK1xuICAgICcgJyArXG4gICAgbm9kZUVudHJpZXNHbG9iYWxTZXJ2aWNlLmdldEN1c3RvbUNzc0NsYXNzKG5vZGUpXG4gIFwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlzQ29sbGVjdGlvbiA/IG5vZGUuY29sbGVjdGlvbi5jb2xvciA6IG51bGxcIlxuICBbY2xhc3MuZHluYW1pYy1zaW5nbGUtY2xpY2tdPVwiZW50cmllc1NlcnZpY2Uuc2luZ2xlQ2xpY2tIaW50ID09PSAnZHluYW1pYydcIlxuICBbY2xhc3Muc2VsZWN0ZWRdPVwiZW50cmllc1NlcnZpY2Uuc2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAoY29udGV4dG1lbnUpPVwib3BlbkNvbnRleHRtZW51KCRldmVudCwgbm9kZSlcIlxuICAoa2V5ZG93bi5Db250ZXh0TWVudSk9XCJvcGVuQ29udGV4dG1lbnUoJGV2ZW50LCBub2RlKVwiXG4+XG4gIDxkaXZcbiAgICAqbmdJZj1cInRlbXBsYXRlc1NlcnZpY2Uub3ZlcmxheVwiXG4gICAgY2xhc3M9XCJjYXJkLW92ZXJsYXlcIlxuICAgIChjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmNsaWNrSXRlbS5lbWl0KHtcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5PdmVybGF5XG4gICAgICB9KVxuICAgIFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlc1NlcnZpY2Uub3ZlcmxheTsgY29udGV4dDogeyBlbGVtZW50OiBub2RlIH1cIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxidXR0b25cbiAgICAqbmdJZj1cImRyb3Bkb3duXCJcbiAgICAjbWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgbWF0LWJ1dHRvblxuICAgIGNsYXNzPVwiZHJvcGRvd24tZHVtbXkgY2RrLXZpc3VhbGx5LWhpZGRlblwiXG4gICAgW3N0eWxlLmxlZnQucHhdPVwiZHJvcGRvd25MZWZ0XCJcbiAgICBbc3R5bGUudG9wLnB4XT1cImRyb3Bkb3duVG9wXCJcbiAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgPjwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXNDb2xsZWN0aW9uID8gbm9kZS5jb2xsZWN0aW9uLmNvbG9yIDogbnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY29sbGVjdGlvbi1jb2xvclwiICpuZ0lmPVwibm9kZUhlbHBlci5pc05vZGVDb2xsZWN0aW9uKG5vZGUpXCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtdHlwZS1iYWRnZSBbbm9kZV09XCJub2RlXCI+PC9lcy1ub2RlLXR5cGUtYmFkZ2U+XG4gICAgPGRpdiAqbmdJZj1cImlzQ29sbGVjdGlvbiAmJiBub2RlLmNvbGxlY3Rpb24ucGlubmVkXCIgY2xhc3M9XCJjYXJkLXRvcC1iYXItZmxhZ1wiPlxuICAgICAgPGkgZXNJY29uPVwiZWR1LXBpblwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b3AtYmFyLWVtcHR5XCI+PC9kaXY+XG4gICAgPGVzLW5vZGUtc3RhdHMtYmFkZ2VzIFtub2RlXT1cIm5vZGVcIj48L2VzLW5vZGUtc3RhdHMtYmFkZ2VzPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvcC1iYXItY2hlY2tib3hcIiAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmNoZWNrYm94XCI+XG4gICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgIFtjaGVja2VkXT1cImVudHJpZXNTZXJ2aWNlLnNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJlbnRyaWVzU2VydmljZS5vbkNoZWNrYm94Q2hhbmdlZChub2RlLCAkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBhcmlhLWxhYmVsPVwie3sgJ1NFTEVDVCcgfCB0cmFuc2xhdGUgOiB7IGVsZW1lbnQ6IChub2RlIHwgbm9kZVRpdGxlKSB9IH19XCJcbiAgICAgID48L21hdC1jaGVja2JveD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxlcy1ub2RlLXVybFxuICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICBtb2RlPVwid3JhcHBlclwiXG4gICAgW25vZGVdPVwibm9kZVwiXG4gICAgZXNGb2N1c1N0YXRlXG4gICAgI2NhcmRGb2N1c1N0YXRlPVwiZXNGb2N1c1N0YXRlXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGltYWdlO1xuICAgICAgICBjb250ZXh0OiB7IHBsYXlBbmltYXRpb246IGNhcmRGb2N1c1N0YXRlLmhvdmVyaW5nIHx8IGNhcmRGb2N1c1N0YXRlLmhhc0ZvY3VzIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXRhXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZXMtbm9kZS11cmw+XG4gIDxkaXZcbiAgICAqbmdJZj1cImVudHJpZXNTZXJ2aWNlLmVsZW1lbnRJbnRlcmFjdGlvblR5cGUgIT09IEludGVyYWN0aW9uVHlwZS5EZWZhdWx0QWN0aW9uTGlua1wiXG4gICAgbWF0UmlwcGxlXG4gICAgKGNsaWNrKT1cIlxuICAgICAgZW50cmllc1NlcnZpY2Uub25DbGlja2VkKHtcbiAgICAgICAgZXZlbnQ6ICRldmVudCxcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YVxuICAgICAgfSlcbiAgICBcIlxuICAgIChkYmxjbGljayk9XCJcbiAgICAgIGVudHJpZXNTZXJ2aWNlLmRibENsaWNrSXRlbS5lbWl0KHtcbiAgICAgICAgZWxlbWVudDogbm9kZSxcbiAgICAgICAgc291cmNlOiBDbGlja1NvdXJjZS5NZXRhZGF0YVxuICAgICAgfSlcbiAgICBcIlxuICAgIGVzRm9jdXNTdGF0ZVxuICAgICNjYXJkRm9jdXNTdGF0ZT1cImVzRm9jdXNTdGF0ZVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBpbWFnZTtcbiAgICAgICAgY29udGV4dDogeyBwbGF5QW5pbWF0aW9uOiBjYXJkRm9jdXNTdGF0ZS5ob3ZlcmluZyB8fCBjYXJkRm9jdXNTdGF0ZS5oYXNGb2N1cyB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWV0YVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9uc1wiICpuZ0lmPVwiZW50cmllc1NlcnZpY2Uub3B0aW9ucyB8fCBzaG93UmF0aW5nc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXJhdGluZy1hcmVhXCI+XG4gICAgICA8ZXMtbm9kZS1yYXRpbmcgW25vZGVdPVwibm9kZVwiPjwvZXMtbm9kZS1yYXRpbmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1hcmVhXCI+XG4gICAgICA8ZXMtb3B0aW9uLWJ1dHRvblxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNPbkNhcmQoKVwiXG4gICAgICAgIGNsYXNzPVwiY2FyZC1vcHRpb25zLWFsd2F5c1wiXG4gICAgICAgIFtvcHRpb25dPVwib3B0aW9uXCJcbiAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICA+PC9lcy1vcHRpb24tYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtb3B0aW9ucy1zcGFjZXJcIj48L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJkcm9wZG93blwiXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAoY2xpY2spPVwib3Blbk1lbnUobm9kZSlcIlxuICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZHJvcGRvd24ubWVudVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09QVElPTlNfRk9SJyB8IHRyYW5zbGF0ZSA6IHsgZWxlbWVudDogKG5vZGUgfCBub2RlVGl0bGUpIH1cIlxuICAgICAgICBkYXRhLXRlc3Q9XCJjYXJkLW9wdGlvbnMtYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPGkgZXNJY29uPVwibW9yZV92ZXJ0XCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI2ltYWdlIGxldC1wbGF5QW5pbWF0aW9uPVwicGxheUFuaW1hdGlvblwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY2FyZC1pbWFnZS1hcmVhXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImlzQ29sbGVjdGlvbiA/IG5vZGUuY29sbGVjdGlvbi5jb2xvciA6IG51bGxcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRUZW1wbGF0ZShDdXN0b21GaWVsZFNwZWNpYWxUeXBlLnByZXZpZXcpIGFzIHJlZlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVmOyBjb250ZXh0OiB7IG5vZGU6IHRoaXMubm9kZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ2V0VGVtcGxhdGUoQ3VzdG9tRmllbGRTcGVjaWFsVHlwZS5wcmV2aWV3KVwiPlxuICAgICAgICA8ZXMtcHJldmlldy1pbWFnZVxuICAgICAgICAgICpuZ0lmPVwiIShpc0NvbGxlY3Rpb24gJiYgbm9kZS5wcmV2aWV3LmlzSWNvbilcIlxuICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgIFtwbGF5QW5pbWF0aW9uXT1cInBsYXlBbmltYXRpb25cIlxuICAgICAgICA+PC9lcy1wcmV2aWV3LWltYWdlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDb2xsZWN0aW9uICYmIG5vZGUucHJldmlldy5pc0ljb25cIiBjbGFzcz1cImNhcmQtY29sbGVjdGlvbi1pbWFnZVwiPlxuICAgICAgICAgIDxpIGVzSWNvbj1cImxheWVyc1wiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNtZXRhIGxldC1saW5rPVwibGlua1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLW1ldGFcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IGRpc3BsYXlQYXJ0IG9mIGdldFZpc2libGVDb2x1bW5zKCk7IGxldCBmaXJzdCA9IGZpcnN0XCJcbiAgICAgICAgY2xhc3M9XCJjYXJkLW1ldGEtcm93IGNhcmQtbWV0YS1yb3cte3sgZGlzcGxheVBhcnQubmFtZSB8IGxvd2VyY2FzZSB8IHByb3BlcnR5U2x1ZyB9fVwiXG4gICAgICAgIFtjbGFzcy5jYXJkLW1ldGEtcm93LXByaW1hcnldPVwiZmlyc3RcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlyc3RcIj5cbiAgICAgICAgICA8ZXMtbm9kZS11cmxcbiAgICAgICAgICAgICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSA9PT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCJcbiAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgI2xpbmtcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgICAgPC9lcy1ub2RlLXVybD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZW50cmllc1NlcnZpY2UuZWxlbWVudEludGVyYWN0aW9uVHlwZSAhPT0gSW50ZXJhY3Rpb25UeXBlLkRlZmF1bHRBY3Rpb25MaW5rXCI+XG4gICAgICAgICAgICA8ZXMtbGlzdC1iYXNlIFtpdGVtXT1cImRpc3BsYXlQYXJ0XCIgW25vZGVdPVwibm9kZVwiIFtwcm92aWRlTGFiZWxdPVwiZmFsc2VcIj4gPC9lcy1saXN0LWJhc2U+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpcnN0XCI+XG4gICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAge3sgZGlzcGxheVBhcnQgfCBlc0xpc3RJdGVtTGFiZWwgfCBhc3luYyB9fVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGVzLWxpc3QtYmFzZSBbaXRlbV09XCJkaXNwbGF5UGFydFwiIFtub2RlXT1cIm5vZGVcIiBbcHJvdmlkZUxhYmVsXT1cImZhbHNlXCI+IDwvZXMtbGlzdC1iYXNlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=