ngx-edu-sharing-ui 10.0.21 → 10.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/assets/scss/material-theme.scss +3 -3
  2. package/assets/scss/mixins.scss +1 -1
  3. package/assets/scss/variables-root.scss +2 -0
  4. package/assets/scss/variables-scss.scss +3 -4
  5. package/assets/scss/variables.scss +1 -1
  6. package/fesm2022/ngx-edu-sharing-ui.mjs +376 -319
  7. package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
  8. package/lib/index.d.ts +1 -0
  9. package/lib/list-items/list-widget.d.ts +1 -1
  10. package/lib/mds-viewer/mds-editor-instance-service.abstract.d.ts +14 -0
  11. package/lib/mds-viewer/widget/mds-widget.component.d.ts +6 -4
  12. package/package.json +6 -8
  13. package/esm2022/lib/actionbar/actionbar.component.mjs +0 -206
  14. package/esm2022/lib/common/edu-sharing-ui-common.module.mjs +0 -170
  15. package/esm2022/lib/directives/border-box-observer.directive.mjs +0 -71
  16. package/esm2022/lib/directives/check-text-overflow.directive.mjs +0 -71
  17. package/esm2022/lib/directives/drag-nodes/drag-nodes.mjs +0 -14
  18. package/esm2022/lib/directives/drag-nodes/nodes-drag-source.directive.mjs +0 -79
  19. package/esm2022/lib/directives/drag-nodes/nodes-drag.directive.mjs +0 -49
  20. package/esm2022/lib/directives/drag-nodes/nodes-drop-target.directive.mjs +0 -105
  21. package/esm2022/lib/directives/focus-state.directive.mjs +0 -44
  22. package/esm2022/lib/directives/icon.directive.mjs +0 -184
  23. package/esm2022/lib/directives/infinite-scroll.directive.mjs +0 -85
  24. package/esm2022/lib/dropdown/dropdown.component.mjs +0 -83
  25. package/esm2022/lib/edu-sharing-ui-configuration.mjs +0 -48
  26. package/esm2022/lib/edu-sharing-ui.module.mjs +0 -82
  27. package/esm2022/lib/index.mjs +0 -96
  28. package/esm2022/lib/list-items/available-widgets.mjs +0 -27
  29. package/esm2022/lib/list-items/format-duration.pipe.mjs +0 -20
  30. package/esm2022/lib/list-items/list-base/list-base.component.mjs +0 -46
  31. package/esm2022/lib/list-items/list-collection-info/list-collection-info.component.mjs +0 -29
  32. package/esm2022/lib/list-items/list-counts/list-counts.component.mjs +0 -56
  33. package/esm2022/lib/list-items/list-items.module.mjs +0 -50
  34. package/esm2022/lib/list-items/list-node-license/list-node-license.component.mjs +0 -41
  35. package/esm2022/lib/list-items/list-node-replication-source/list-node-replication-source.component.mjs +0 -47
  36. package/esm2022/lib/list-items/list-node-workflow/list-node-workflow.component.mjs +0 -24
  37. package/esm2022/lib/list-items/list-text/list-text.component.mjs +0 -106
  38. package/esm2022/lib/list-items/list-widget.mjs +0 -49
  39. package/esm2022/lib/list-items/node-row/node-row.component.mjs +0 -24
  40. package/esm2022/lib/list-items/node-source.pipe.mjs +0 -49
  41. package/esm2022/lib/mds/mds-helper.service.mjs +0 -167
  42. package/esm2022/lib/mds/mds.module.mjs +0 -16
  43. package/esm2022/lib/mds-viewer/mds-viewer.component.mjs +0 -170
  44. package/esm2022/lib/mds-viewer/mds-viewer.service.mjs +0 -18
  45. package/esm2022/lib/mds-viewer/replace-element-with-div.mjs +0 -47
  46. package/esm2022/lib/mds-viewer/view-instance.service.mjs +0 -27
  47. package/esm2022/lib/mds-viewer/widget/mds-widget.component.mjs +0 -379
  48. package/esm2022/lib/node-entries/combined-data-source.mjs +0 -41
  49. package/esm2022/lib/node-entries/custom-templates-data-source.mjs +0 -7
  50. package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +0 -21
  51. package/esm2022/lib/node-entries/entries-model.mjs +0 -24
  52. package/esm2022/lib/node-entries/items-cap.mjs +0 -47
  53. package/esm2022/lib/node-entries/list-item-label.pipe.mjs +0 -37
  54. package/esm2022/lib/node-entries/node-cache.mjs +0 -73
  55. package/esm2022/lib/node-entries/node-data-source-remote.mjs +0 -4
  56. package/esm2022/lib/node-entries/node-data-source.mjs +0 -117
  57. package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +0 -117
  58. package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +0 -329
  59. package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +0 -44
  60. package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +0 -27
  61. package/esm2022/lib/node-entries/node-entries-global.service.mjs +0 -71
  62. package/esm2022/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.mjs +0 -42
  63. package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +0 -294
  64. package/esm2022/lib/node-entries/node-entries-templates.service.mjs +0 -11
  65. package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +0 -369
  66. package/esm2022/lib/node-entries/node-entries.component.mjs +0 -132
  67. package/esm2022/lib/node-entries/node-entries.module.mjs +0 -161
  68. package/esm2022/lib/node-entries/node-rating/node-rating.component.mjs +0 -125
  69. package/esm2022/lib/node-entries/node-stats-badges/node-stats-badges.component.mjs +0 -48
  70. package/esm2022/lib/node-entries/node-type-badge/node-type-badge.component.mjs +0 -36
  71. package/esm2022/lib/node-entries/option-button/option-button.component.mjs +0 -75
  72. package/esm2022/lib/node-entries/preview-image/preview-image.component.mjs +0 -53
  73. package/esm2022/lib/node-entries/sort-select-panel/sort-select-panel.component.mjs +0 -41
  74. package/esm2022/lib/node-url/node-url.component.mjs +0 -132
  75. package/esm2022/lib/pipes/file-size.pipe.mjs +0 -32
  76. package/esm2022/lib/pipes/format-date.pipe.mjs +0 -38
  77. package/esm2022/lib/pipes/mds-duration.pipe.mjs +0 -25
  78. package/esm2022/lib/pipes/node-icon.pipe.mjs +0 -18
  79. package/esm2022/lib/pipes/node-image-size.pipe.mjs +0 -24
  80. package/esm2022/lib/pipes/node-image.pipe.mjs +0 -55
  81. package/esm2022/lib/pipes/node-license.pipe.mjs +0 -24
  82. package/esm2022/lib/pipes/node-person-name.pipe.mjs +0 -50
  83. package/esm2022/lib/pipes/node-title.pipe.mjs +0 -35
  84. package/esm2022/lib/pipes/option-tooltip.pipe.mjs +0 -33
  85. package/esm2022/lib/pipes/property-slug.pipe.mjs +0 -16
  86. package/esm2022/lib/pipes/replace-chars.pipe.mjs +0 -29
  87. package/esm2022/lib/pipes/vcard-name.pipe.mjs +0 -25
  88. package/esm2022/lib/services/abstract/app.service.mjs +0 -3
  89. package/esm2022/lib/services/abstract/keyboard-shortcuts.service.mjs +0 -10
  90. package/esm2022/lib/services/abstract/options-helper.service.mjs +0 -3
  91. package/esm2022/lib/services/abstract/toast.service.mjs +0 -3
  92. package/esm2022/lib/services/accessibility.service.mjs +0 -73
  93. package/esm2022/lib/services/app-container.service.mjs +0 -69
  94. package/esm2022/lib/services/local-events.service.mjs +0 -43
  95. package/esm2022/lib/services/node-entries.service.mjs +0 -201
  96. package/esm2022/lib/services/node-helper.service.mjs +0 -330
  97. package/esm2022/lib/services/nodes-drag-drop.service.mjs +0 -155
  98. package/esm2022/lib/services/options-helper-data.service.mjs +0 -142
  99. package/esm2022/lib/services/render-helper.service.mjs +0 -114
  100. package/esm2022/lib/services/repo-url.service.mjs +0 -50
  101. package/esm2022/lib/services/search-helper.service.mjs +0 -52
  102. package/esm2022/lib/services/temporary-storage.service.mjs +0 -48
  103. package/esm2022/lib/services/ui.service.mjs +0 -327
  104. package/esm2022/lib/sort-dropdown/sort-dropdown.component.mjs +0 -50
  105. package/esm2022/lib/spinner/spinner.component.mjs +0 -19
  106. package/esm2022/lib/spinner-small/spinner-small.component.mjs +0 -18
  107. package/esm2022/lib/translations/fallback-translation-handler.mjs +0 -6
  108. package/esm2022/lib/translations/translation-loader.mjs +0 -219
  109. package/esm2022/lib/translations/translation-source.mjs +0 -11
  110. package/esm2022/lib/translations/translations.module.mjs +0 -82
  111. package/esm2022/lib/translations/translations.service.mjs +0 -238
  112. package/esm2022/lib/types/accessibillity.mjs +0 -19
  113. package/esm2022/lib/types/api-models.mjs +0 -2
  114. package/esm2022/lib/types/drag-drop.mjs +0 -2
  115. package/esm2022/lib/types/injection-tokens.mjs +0 -31
  116. package/esm2022/lib/types/keyboard-shortcuts.mjs +0 -11
  117. package/esm2022/lib/types/list-item.mjs +0 -41
  118. package/esm2022/lib/types/option-item.mjs +0 -192
  119. package/esm2022/lib/types/workflow.mjs +0 -25
  120. package/esm2022/lib/util/DateHelper.mjs +0 -200
  121. package/esm2022/lib/util/VCard.mjs +0 -278
  122. package/esm2022/lib/util/color-helper.mjs +0 -124
  123. package/esm2022/lib/util/duration-helper.mjs +0 -102
  124. package/esm2022/lib/util/functions.mjs +0 -13
  125. package/esm2022/lib/util/helper.mjs +0 -64
  126. package/esm2022/lib/util/isNumeric.mjs +0 -11
  127. package/esm2022/lib/util/rest-helper.mjs +0 -42
  128. package/esm2022/lib/util/ui-animation.mjs +0 -146
  129. package/esm2022/lib/util/ui-constants.mjs +0 -21
  130. package/esm2022/ngx-edu-sharing-ui.mjs +0 -5
  131. package/esm2022/public-api.mjs +0 -2
package/lib/index.d.ts CHANGED
@@ -90,3 +90,4 @@ export * from './util/ui-animation';
90
90
  export * from './util/ui-constants';
91
91
  export * from './mds/mds-helper.service';
92
92
  export * from './services/search-helper.service';
93
+ export * from './mds-viewer/mds-editor-instance-service.abstract';
@@ -25,7 +25,7 @@ export declare class ListWidget {
25
25
  protected readonly provideLabelSubject: BehaviorSubject<boolean>;
26
26
  constructor();
27
27
  static ɵfac: i0.ɵɵFactoryDeclaration<ListWidget, never>;
28
- static ɵdir: i0.ɵɵDirectiveDeclaration<ListWidget, never, never, { "node": { "alias": "node"; "required": false; }; "item": { "alias": "item"; "required": false; }; "provideLabel": { "alias": "provideLabel"; "required": false; }; }, {}, never, never, false, never>;
28
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ListWidget, never, never, { "node": { "alias": "node"; "required": false; }; "item": { "alias": "item"; "required": false; }; "provideLabel": { "alias": "provideLabel"; "required": false; }; }, {}, never, never, true, never>;
29
29
  }
30
30
  export type ListWidgetClass = {
31
31
  supportedItems: ListItem[];
@@ -0,0 +1,14 @@
1
+ import { BehaviorSubject } from 'rxjs';
2
+ import { Node } from 'ngx-edu-sharing-api';
3
+ import { Values } from '../services/search-helper.service';
4
+ export type EditorMode = 'nodes' | 'search' | 'form' | 'inline' | 'viewer';
5
+ export declare abstract class MdsEditorInstanceServiceAbstract {
6
+ mdsId: string;
7
+ editorMode: EditorMode;
8
+ /** Current values (if not in node mode) */
9
+ values$: BehaviorSubject<Values>;
10
+ /** Nodes with updated and complete metadata. */
11
+ nodes$: BehaviorSubject<Node[]>;
12
+ abstract saveWidgetValue(widget: any): Promise<void>;
13
+ abstract fetchDisplayValues(widget: any): Promise<void>;
14
+ }
@@ -1,4 +1,4 @@
1
- import { ElementRef, OnChanges, OnInit, SimpleChanges } from '@angular/core';
1
+ import { ElementRef, Injector, OnChanges, OnInit, SimpleChanges } from '@angular/core';
2
2
  import { TranslateService } from '@ngx-translate/core';
3
3
  import { MatRipple } from '@angular/material/core';
4
4
  import { MdsValue, MdsWidget, Suggestion } from 'ngx-edu-sharing-api';
@@ -7,6 +7,7 @@ import { ViewInstanceService } from '../view-instance.service';
7
7
  import { BehaviorSubject } from 'rxjs';
8
8
  import { MdsViewerService } from '../mds-viewer.service';
9
9
  import { NodeHelperService } from '../../services/node-helper.service';
10
+ import { MdsEditorInstanceServiceAbstract } from '../mds-editor-instance-service.abstract';
10
11
  import * as i0 from "@angular/core";
11
12
  export declare enum MdsType {
12
13
  Io = "io",
@@ -72,10 +73,12 @@ export declare enum ValueType {
72
73
  Range = 2
73
74
  }
74
75
  export declare class MdsWidgetComponent implements OnInit, OnChanges {
76
+ private mdsEditorInstance;
75
77
  translate: TranslateService;
76
78
  private ui;
77
79
  private viewInstance;
78
80
  private mdsViewerService;
81
+ private injector;
79
82
  private nodeHelper;
80
83
  readonly ROUTER_PREFIX: string;
81
84
  private static readonly inlineEditing;
@@ -96,7 +99,6 @@ export declare class MdsWidgetComponent implements OnInit, OnChanges {
96
99
  id: string;
97
100
  }[];
98
101
  isEmpty: import("@angular/core").Signal<boolean>;
99
- private mdsEditorInstance;
100
102
  license$: BehaviorSubject<{
101
103
  name: string;
102
104
  icon: string;
@@ -104,7 +106,7 @@ export declare class MdsWidgetComponent implements OnInit, OnChanges {
104
106
  get headingLevel(): number;
105
107
  value: import("@angular/core").WritableSignal<string[]>;
106
108
  private temporaryValue;
107
- constructor(translate: TranslateService, ui: UIService, viewInstance: ViewInstanceService, mdsViewerService: MdsViewerService, nodeHelper: NodeHelperService);
109
+ constructor(mdsEditorInstance: MdsEditorInstanceServiceAbstract, translate: TranslateService, ui: UIService, viewInstance: ViewInstanceService, mdsViewerService: MdsViewerService, injector: Injector, nodeHelper: NodeHelperService);
108
110
  ngOnChanges(changes: SimpleChanges): Promise<void>;
109
111
  ngOnInit(): Promise<void>;
110
112
  getDefinition(): MdsWidget;
@@ -131,6 +133,6 @@ export declare class MdsWidgetComponent implements OnInit, OnChanges {
131
133
  private getRawValue;
132
134
  getSearchParams(key: MdsValue): any;
133
135
  startEdit(event: MouseEvent): void;
134
- static ɵfac: i0.ɵɵFactoryDeclaration<MdsWidgetComponent, never>;
136
+ static ɵfac: i0.ɵɵFactoryDeclaration<MdsWidgetComponent, [{ optional: true; }, null, null, null, null, null, null]>;
135
137
  static ɵcmp: i0.ɵɵComponentDeclaration<MdsWidgetComponent, "es-mds-widget", never, { "widget": { "alias": "widget"; "required": false; }; "showCaption": { "alias": "showCaption"; "required": false; }; "inlineEditing": { "alias": "inlineEditing"; "required": false; }; "definition": { "alias": "definition"; "required": false; }; "view": { "alias": "view"; "required": false; }; }, {}, never, never, false, never>;
136
138
  }
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "ngx-edu-sharing-ui",
3
- "version": "10.0.21",
3
+ "version": "10.0.22",
4
4
  "license": "GNU GPL v2",
5
5
  "description": "Angular components for Edu-Sharing UX parts",
6
6
  "peerDependencies": {
7
- "@angular/cdk": ">=14.0.0",
8
- "@angular/common": ">=14.0.0",
9
- "@angular/core": ">=14.0.0 ",
10
- "@angular/material": ">=14.0.0",
7
+ "@angular/cdk": ">=18.0.0",
8
+ "@angular/common": ">=18.0.0",
9
+ "@angular/core": ">=18.0.0 ",
10
+ "@angular/material": ">=18.0.0",
11
11
  "material-design-icons": "^3.0.1",
12
12
  "ngx-rendering-service-api": ">=0.0.0",
13
- "@ngx-translate/core": ">=14.0.0",
13
+ "@ngx-translate/core": ">=18.0.0",
14
14
  "angular-material-css-vars": "^6.0.0 || ^7.0.0",
15
15
  "rxjs": "^6.6.7 || ^7.0.0",
16
16
  "lodash-es": "^4.17.21"
@@ -26,8 +26,6 @@
26
26
  },
27
27
  ".": {
28
28
  "types": "./index.d.ts",
29
- "esm2022": "./esm2022/ngx-edu-sharing-ui.mjs",
30
- "esm": "./esm2022/ngx-edu-sharing-ui.mjs",
31
29
  "default": "./fesm2022/ngx-edu-sharing-ui.mjs"
32
30
  }
33
31
  },
@@ -1,206 +0,0 @@
1
- import { trigger } from '@angular/animations';
2
- import { Component, Input } from '@angular/core';
3
- import { UIAnimation } from '../util/ui-animation';
4
- import { UIConstants } from '../util/ui-constants';
5
- import { Helper } from '../util/helper';
6
- import { BehaviorSubject } from 'rxjs';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../services/ui.service";
9
- import * as i2 from "@ngx-translate/core";
10
- import * as i3 from "@angular/common";
11
- import * as i4 from "@angular/material/menu";
12
- import * as i5 from "@angular/material/button";
13
- import * as i6 from "@angular/material/tooltip";
14
- import * as i7 from "../dropdown/dropdown.component";
15
- import * as i8 from "../directives/icon.directive";
16
- import * as i9 from "../pipes/option-tooltip.pipe";
17
- import * as i10 from "../pipes/replace-chars.pipe";
18
- /**
19
- * The action bar provides several icons, usually at the top right, with actions for a current context
20
- */
21
- export class ActionbarComponent {
22
- /**
23
- * Set the options, see @OptionItem
24
- */
25
- set options(options) {
26
- this.optionsIn = options;
27
- this.prepareOptions(options);
28
- }
29
- constructor(uiService, translate) {
30
- this.uiService = uiService;
31
- this.translate = translate;
32
- /**
33
- * The amount of options which are not hidden inside an overflow menu
34
- * (default: depending on mobile (1) or not (2))
35
- * Also use numberOfAlwaysVisibleOptionsMobile to control the amount of mobile options visible
36
- */
37
- this.numberOfAlwaysVisibleOptions = 2;
38
- this.numberOfAlwaysVisibleOptionsMobile = 1;
39
- /**
40
- * Visual style of the actionbar
41
- *
42
- * Values:
43
- * - 'button': material buttons with icons and text on medium to large screens
44
- * - 'icon-button': material buttons without text
45
- * - 'round': circular buttons without text
46
- * @default 'button'
47
- */
48
- this.appearance = 'button';
49
- /**
50
- * dropdownPosition is for position of dropdown (default = left)
51
- * Values 'left' or 'right'
52
- */
53
- this.dropdownPosition = 'left';
54
- /**
55
- * backgroundType for color matching, either bright, dark or primary
56
- */
57
- this.backgroundType = 'bright';
58
- /**
59
- * Style, currently default or 'flat' if all always visible icons should get a flat look
60
- */
61
- this.style = 'default';
62
- /**
63
- * Highlight one or more of the always-visible buttons as primary action.
64
- *
65
- * - `first`, `last`: The first / last of `optionsAlways` by order.
66
- * - `manual`: Highlight all options that set `isPrimary = true`.
67
- */
68
- this.highlight = 'first';
69
- /**
70
- * Should disabled ("greyed out") options be shown or hidden?
71
- */
72
- this.showDisabled = true;
73
- /**
74
- * the position of the mat tooltips
75
- */
76
- this.tooltipPosition = 'below';
77
- /**
78
- * breakpoint width at which point the mobile display count is used
79
- */
80
- this.mobileBreakpoint = UIConstants.MOBILE_WIDTH;
81
- this.optionsIn = [];
82
- this.optionsAlways$ = new BehaviorSubject([]);
83
- this.optionsMenu$ = new BehaviorSubject([]);
84
- this.optionsToggleBefore = [];
85
- this.optionsToggleAfter = [];
86
- }
87
- prepareOptions(options) {
88
- options = this.uiService.filterValidOptions(Helper.deepCopyArray(options));
89
- if (options == null) {
90
- this.optionsAlways$.next([]);
91
- this.optionsMenu$.next([]);
92
- return;
93
- }
94
- this.optionsToggleBefore = this.uiService.filterToggleOptions(options, true, 'before');
95
- this.optionsToggleAfter = this.uiService.filterToggleOptions(options, true, 'after');
96
- this.optionsAlways$.next(this.getActionOptions(this.uiService.filterToggleOptions(options, false)).slice(0, this.getNumberOptions()));
97
- if (!this.optionsAlways$.value.length) {
98
- this.optionsAlways$.next(this.uiService
99
- .filterToggleOptions(options, false)
100
- .slice(0, this.getNumberOptions()));
101
- }
102
- this.optionsMenu$.next(this.hideActionOptions(this.uiService.filterToggleOptions(options, false), this.optionsAlways$.value));
103
- void this.uiService.updateOptionEnabledState(this.optionsAlways$);
104
- void this.uiService.updateOptionEnabledState(this.optionsMenu$);
105
- // may causes weird looking
106
- /*if(this.optionsMenu.length<2) {
107
- this.optionsAlways = this.optionsAlways.concat(this.optionsMenu);
108
- this.optionsMenu = [];
109
- }*/
110
- }
111
- getNumberOptions() {
112
- if (window.innerWidth < this.mobileBreakpoint) {
113
- return this.numberOfAlwaysVisibleOptionsMobile;
114
- }
115
- return this.numberOfAlwaysVisibleOptions;
116
- }
117
- click(option) {
118
- if (!option.isEnabled) {
119
- if (option.disabledCallback) {
120
- option.disabledCallback();
121
- }
122
- return;
123
- }
124
- option.callback();
125
- }
126
- getActionOptions(options) {
127
- const result = [];
128
- for (const option of options) {
129
- if (option.showAsAction)
130
- result.push(option);
131
- }
132
- return result;
133
- }
134
- hideActionOptions(options, optionsAlways) {
135
- const result = [];
136
- for (const option of options) {
137
- if (optionsAlways.indexOf(option) === -1)
138
- result.push(option);
139
- }
140
- return result;
141
- }
142
- /**
143
- * Invalidate / refreshes all options based on their current callbacks
144
- */
145
- invalidate() {
146
- this.prepareOptions(this.optionsIn);
147
- }
148
- filterDisabled(options) {
149
- if (options == null)
150
- return null;
151
- const filtered = [];
152
- for (const option of options) {
153
- if (option.isEnabled || this.showDisabled)
154
- filtered.push(option);
155
- }
156
- return filtered;
157
- }
158
- canShowDropdown() {
159
- if (!this.optionsMenu$.value.length) {
160
- return false;
161
- }
162
- return this.optionsMenu$.value.filter((o) => o.isEnabled).length > 0;
163
- }
164
- shouldHighlight(optionIndex, option) {
165
- switch (this.highlight) {
166
- case 'first':
167
- return optionIndex === 0;
168
- case 'last':
169
- return optionIndex === this.optionsAlways$.value.length - 1;
170
- case 'manual':
171
- return option.isPrimary;
172
- }
173
- }
174
- ngOnChanges(changes) {
175
- this.invalidate();
176
- }
177
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ActionbarComponent, deps: [{ token: i1.UIService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
178
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: ActionbarComponent, selector: "es-actionbar", inputs: { numberOfAlwaysVisibleOptions: "numberOfAlwaysVisibleOptions", numberOfAlwaysVisibleOptionsMobile: "numberOfAlwaysVisibleOptionsMobile", appearance: "appearance", dropdownPosition: "dropdownPosition", backgroundType: "backgroundType", style: "style", highlight: "highlight", showDisabled: "showDisabled", tooltipPosition: "tooltipPosition", options: "options", mobileBreakpoint: "mobileBreakpoint" }, usesOnChanges: true, ngImport: i0, template: "<es-dropdown\n #dropdownRef\n [options]=\"optionsMenu$ | async\"\n [showDisabled]=\"showDisabled\"\n [position]=\"dropdownPosition\"\n></es-dropdown>\n<div\n class=\"actionbar\"\n [class.actionbar-all-flat]=\"style === 'flat'\"\n [class.actionbar-background-dark]=\"backgroundType === 'dark'\"\n [class.actionbar-background-primary]=\"backgroundType === 'primary'\"\n [class.actionbar-round]=\"appearance === 'round'\"\n [class.actionbar-icon-button]=\"appearance === 'icon-button'\"\n>\n <div\n *ngIf=\"optionsToggleBefore.length\"\n class=\"actionToggle before\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <ng-container\n *ngTemplateOutlet=\"toggle; context: { optionsToggle: optionsToggleBefore }\"\n ></ng-container>\n </div>\n <ng-container *ngFor=\"let option of optionsAlways$ | async; let i = index\">\n <button\n *ngIf=\"shouldHighlight(i, option)\"\n mat-flat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n [matTooltipPosition]=\"tooltipPosition\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n <button\n *ngIf=\"!shouldHighlight(i, option)\"\n mat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n [matTooltipPosition]=\"tooltipPosition\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n </ng-container>\n <button\n mat-button\n color=\"primary\"\n class=\"more\"\n [attr.aria-label]=\"'OPTIONS.SHOW_ALL_OPTIONS' | translate\"\n [matMenuTriggerFor]=\"dropdownRef.menu\"\n *ngIf=\"canShowDropdown()\"\n data-test=\"more-actions-button\"\n >\n <i esIcon=\"more_vert\" [aria]=\"false\"></i>\n </button>\n <div\n *ngIf=\"optionsToggleAfter.length\"\n class=\"actionToggle after\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <ng-container\n *ngTemplateOutlet=\"toggle; context: { optionsToggle: optionsToggleAfter }\"\n ></ng-container>\n </div>\n</div>\n<ng-template #toggle let-optionsToggle=\"optionsToggle\">\n <ng-container *ngFor=\"let option of optionsToggle\">\n <button\n *ngIf=\"option.isToggleVisible\"\n mat-icon-button\n matTooltip=\"{{ option.name | translate }}\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n [class]=\"\n 'toggle-' +\n (option.name | replaceChars : { search: '.', replace: '-' }) +\n (option.isEnabled ? '' : ' disabled')\n \"\n attr.data-test=\"toggle-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\" [aria]=\"false\"></i>\n </button>\n </ng-container>\n</ng-template>\n", styles: [".actionbar{display:flex;align-items:center;gap:10px}.actionToggle>button{color:var(--textLight)}button{min-width:unset}.light{color:#fff;background:transparent}.disabled{pointer-events:all}.light a{color:#fff}.actionToggle.after.actionToggleDivider{padding-left:10px;border-left:1px solid #ddd}.actionToggle.before.actionToggleDivider{padding-right:10px;margin-right:10px;border-right:1px solid #ddd}.more{color:var(--primary);background-color:transparent}.actionbar-background-dark .mat-button{color:rgb(var(--palette-foreground-text-dark))}.actionbar-background-dark .mat-button:disabled{color:rgba(var(--palette-foreground-text-dark),.75)}.actionbar-background-primary .mdc-button{color:rgb(var(--palette-foreground-text-dark))}.actionbar-background-primary .mat-mdc-unelevated-button{background-color:#fff;color:var(--primary)}.actionbar-background-primary .mat-mdc-unelevated-button:disabled{color:#00000080;background-color:#eee}.actionbar-round button{width:45px;height:45px;justify-content:center}.actionbar-round button{border-radius:50%;box-shadow:0 0 5px #0000004d}.actionbar-round.actionbar-background-primary .mat-button{background-color:#fff;color:var(--primary)}.actionbar-round.actionbar-all-flat button{background:#fff;color:var(--primary)!important}.actionbar-round.actionbar-all-flat button:disabled{color:var(--textLight)!important}.actionbar-round .more,.actionbar-round .actionAlways{background:#fff;color:var(--primary);display:flex;width:45px;height:45px;line-height:45px;text-align:center;align-items:center}.actionbar-round .more .edu-icons,.actionbar-round .more .material-icons,.actionbar-round .actionAlways .edu-icons,.actionbar-round .actionAlways .material-icons{position:relative;font-size:24px}.actionbar-round .more span,.actionbar-round .actionAlways span{display:none}.actionbar-round .action-always .edu-icons,.actionbar-round .action-always .material-icons{right:4px!important}@media screen and (max-width: 1100px){.action-always-caption{display:none}.action-always{padding:0 1rem}::ng-deep .action-always-caption{display:none}.mat-flat-button{padding:5px}}.actionbar-icon-button .action-always{padding:0 1rem}.actionbar-icon-button ::ng-deep .action-always-caption{display:none}.actionbar-icon-button .mat-flat-button{padding:5px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i7.DropdownComponent, selector: "es-dropdown", inputs: ["position", "options", "callbackObjects", "showDisabled", "menuClass"] }, { kind: "directive", type: i8.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.OptionTooltipPipe, name: "optionTooltip" }, { kind: "pipe", type: i10.ReplaceCharsPipe, name: "replaceChars" }], animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))] }); }
179
- }
180
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ActionbarComponent, decorators: [{
181
- type: Component,
182
- args: [{ selector: 'es-actionbar', animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))], template: "<es-dropdown\n #dropdownRef\n [options]=\"optionsMenu$ | async\"\n [showDisabled]=\"showDisabled\"\n [position]=\"dropdownPosition\"\n></es-dropdown>\n<div\n class=\"actionbar\"\n [class.actionbar-all-flat]=\"style === 'flat'\"\n [class.actionbar-background-dark]=\"backgroundType === 'dark'\"\n [class.actionbar-background-primary]=\"backgroundType === 'primary'\"\n [class.actionbar-round]=\"appearance === 'round'\"\n [class.actionbar-icon-button]=\"appearance === 'icon-button'\"\n>\n <div\n *ngIf=\"optionsToggleBefore.length\"\n class=\"actionToggle before\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <ng-container\n *ngTemplateOutlet=\"toggle; context: { optionsToggle: optionsToggleBefore }\"\n ></ng-container>\n </div>\n <ng-container *ngFor=\"let option of optionsAlways$ | async; let i = index\">\n <button\n *ngIf=\"shouldHighlight(i, option)\"\n mat-flat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n [matTooltipPosition]=\"tooltipPosition\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n <button\n *ngIf=\"!shouldHighlight(i, option)\"\n mat-button\n color=\"primary\"\n [disabled]=\"!option.isEnabled\"\n [class.display-none]=\"!option.isEnabled && !showDisabled\"\n matTooltip=\"{{ option | optionTooltip | async }}\"\n [matTooltipPosition]=\"tooltipPosition\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n >\n <i [esIcon]=\"option.icon\"></i>\n <span class=\"action-always-caption\" *ngIf=\"option.showName && appearance === 'button'\">\n {{ option.name | translate }}</span\n >\n </button>\n </ng-container>\n <button\n mat-button\n color=\"primary\"\n class=\"more\"\n [attr.aria-label]=\"'OPTIONS.SHOW_ALL_OPTIONS' | translate\"\n [matMenuTriggerFor]=\"dropdownRef.menu\"\n *ngIf=\"canShowDropdown()\"\n data-test=\"more-actions-button\"\n >\n <i esIcon=\"more_vert\" [aria]=\"false\"></i>\n </button>\n <div\n *ngIf=\"optionsToggleAfter.length\"\n class=\"actionToggle after\"\n [class.actionToggleDivider]=\"(optionsAlways$ | async).length\"\n >\n <ng-container\n *ngTemplateOutlet=\"toggle; context: { optionsToggle: optionsToggleAfter }\"\n ></ng-container>\n </div>\n</div>\n<ng-template #toggle let-optionsToggle=\"optionsToggle\">\n <ng-container *ngFor=\"let option of optionsToggle\">\n <button\n *ngIf=\"option.isToggleVisible\"\n mat-icon-button\n matTooltip=\"{{ option.name | translate }}\"\n [attr.aria-label]=\"option.ariaLabel || option.name | translate\"\n (click)=\"click(option)\"\n [class]=\"\n 'toggle-' +\n (option.name | replaceChars : { search: '.', replace: '-' }) +\n (option.isEnabled ? '' : ' disabled')\n \"\n attr.data-test=\"toggle-{{ option.name }}\"\n >\n <i [esIcon]=\"option.icon\" [aria]=\"false\"></i>\n </button>\n </ng-container>\n</ng-template>\n", styles: [".actionbar{display:flex;align-items:center;gap:10px}.actionToggle>button{color:var(--textLight)}button{min-width:unset}.light{color:#fff;background:transparent}.disabled{pointer-events:all}.light a{color:#fff}.actionToggle.after.actionToggleDivider{padding-left:10px;border-left:1px solid #ddd}.actionToggle.before.actionToggleDivider{padding-right:10px;margin-right:10px;border-right:1px solid #ddd}.more{color:var(--primary);background-color:transparent}.actionbar-background-dark .mat-button{color:rgb(var(--palette-foreground-text-dark))}.actionbar-background-dark .mat-button:disabled{color:rgba(var(--palette-foreground-text-dark),.75)}.actionbar-background-primary .mdc-button{color:rgb(var(--palette-foreground-text-dark))}.actionbar-background-primary .mat-mdc-unelevated-button{background-color:#fff;color:var(--primary)}.actionbar-background-primary .mat-mdc-unelevated-button:disabled{color:#00000080;background-color:#eee}.actionbar-round button{width:45px;height:45px;justify-content:center}.actionbar-round button{border-radius:50%;box-shadow:0 0 5px #0000004d}.actionbar-round.actionbar-background-primary .mat-button{background-color:#fff;color:var(--primary)}.actionbar-round.actionbar-all-flat button{background:#fff;color:var(--primary)!important}.actionbar-round.actionbar-all-flat button:disabled{color:var(--textLight)!important}.actionbar-round .more,.actionbar-round .actionAlways{background:#fff;color:var(--primary);display:flex;width:45px;height:45px;line-height:45px;text-align:center;align-items:center}.actionbar-round .more .edu-icons,.actionbar-round .more .material-icons,.actionbar-round .actionAlways .edu-icons,.actionbar-round .actionAlways .material-icons{position:relative;font-size:24px}.actionbar-round .more span,.actionbar-round .actionAlways span{display:none}.actionbar-round .action-always .edu-icons,.actionbar-round .action-always .material-icons{right:4px!important}@media screen and (max-width: 1100px){.action-always-caption{display:none}.action-always{padding:0 1rem}::ng-deep .action-always-caption{display:none}.mat-flat-button{padding:5px}}.actionbar-icon-button .action-always{padding:0 1rem}.actionbar-icon-button ::ng-deep .action-always-caption{display:none}.actionbar-icon-button .mat-flat-button{padding:5px}\n"] }]
183
- }], ctorParameters: () => [{ type: i1.UIService }, { type: i2.TranslateService }], propDecorators: { numberOfAlwaysVisibleOptions: [{
184
- type: Input
185
- }], numberOfAlwaysVisibleOptionsMobile: [{
186
- type: Input
187
- }], appearance: [{
188
- type: Input
189
- }], dropdownPosition: [{
190
- type: Input
191
- }], backgroundType: [{
192
- type: Input
193
- }], style: [{
194
- type: Input
195
- }], highlight: [{
196
- type: Input
197
- }], showDisabled: [{
198
- type: Input
199
- }], tooltipPosition: [{
200
- type: Input
201
- }], options: [{
202
- type: Input
203
- }], mobileBreakpoint: [{
204
- type: Input
205
- }] } });
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvYWN0aW9uYmFyL2FjdGlvbmJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL2FjdGlvbmJhci9hY3Rpb25iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUUzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7QUFRdkM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBaUQzQjs7T0FFRztJQUNILElBQWEsT0FBTyxDQUFDLE9BQXFCO1FBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQVlELFlBQW9CLFNBQW9CLEVBQVUsU0FBMkI7UUFBekQsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBbEU3RTs7OztXQUlHO1FBQ00saUNBQTRCLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLHVDQUFrQyxHQUFHLENBQUMsQ0FBQztRQUNoRDs7Ozs7Ozs7V0FRRztRQUNNLGVBQVUsR0FBdUMsUUFBUSxDQUFDO1FBQ25FOzs7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VyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7NkdBV3JGLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRyxrQ0FBa0M7c0JBQTFDLEtBQUs7Z0JBVUcsVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBS0csY0FBYztzQkFBdEIsS0FBSztnQkFJRyxLQUFLO3NCQUFiLEtBQUs7Z0JBT0csU0FBUztzQkFBakIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBS08sT0FBTztzQkFBbkIsS0FBSztnQkFRRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFVJQW5pbWF0aW9uIH0gZnJvbSAnLi4vdXRpbC91aS1hbmltYXRpb24nO1xuaW1wb3J0IHsgVUlDb25zdGFudHMgfSBmcm9tICcuLi91dGlsL3VpLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBPcHRpb25JdGVtIH0gZnJvbSAnLi4vdHlwZXMvb3B0aW9uLWl0ZW0nO1xuaW1wb3J0IHsgVUlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdWkuc2VydmljZSc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi91dGlsL2hlbHBlcic7XG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLWFjdGlvbmJhcicsXG4gICAgdGVtcGxhdGVVcmw6ICdhY3Rpb25iYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydhY3Rpb25iYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBhbmltYXRpb25zOiBbdHJpZ2dlcignb3Blbk92ZXJsYXknLCBVSUFuaW1hdGlvbi5vcGVuT3ZlcmxheShVSUFuaW1hdGlvbi5BTklNQVRJT05fVElNRV9GQVNUKSldLFxufSlcbi8qKlxuICogVGhlIGFjdGlvbiBiYXIgcHJvdmlkZXMgc2V2ZXJhbCBpY29ucywgdXN1YWxseSBhdCB0aGUgdG9wIHJpZ2h0LCB3aXRoIGFjdGlvbnMgZm9yIGEgY3VycmVudCBjb250ZXh0XG4gKi9cbmV4cG9ydCBjbGFzcyBBY3Rpb25iYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIC8qKlxuICAgICAqIFRoZSBhbW91bnQgb2Ygb3B0aW9ucyB3aGljaCBhcmUgbm90IGhpZGRlbiBpbnNpZGUgYW4gb3ZlcmZsb3cgbWVudVxuICAgICAqIChkZWZhdWx0OiBkZXBlbmRpbmcgb24gbW9iaWxlICgxKSBvciBub3QgKDIpKVxuICAgICAqIEFsc28gdXNlIG51bWJlck9mQWx3YXlzVmlzaWJsZU9wdGlvbnNNb2JpbGUgdG8gY29udHJvbCB0aGUgYW1vdW50IG9mIG1vYmlsZSBvcHRpb25zIHZpc2libGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBudW1iZXJPZkFsd2F5c1Zpc2libGVPcHRpb25zID0gMjtcbiAgICBASW5wdXQoKSBudW1iZXJPZkFsd2F5c1Zpc2libGVPcHRpb25zTW9iaWxlID0gMTtcbiAgICAvKipcbiAgICAgKiBWaXN1YWwgc3R5bGUgb2YgdGhlIGFjdGlvbmJhclxuICAgICAqXG4gICAgICogVmFsdWVzOlxuICAgICAqICAtICdidXR0b24nOiBtYXRlcmlhbCBidXR0b25zIHdpdGggaWNvbnMgYW5kIHRleHQgb24gbWVkaXVtIHRvIGxhcmdlIHNjcmVlbnNcbiAgICAgKiAgLSAnaWNvbi1idXR0b24nOiBtYXRlcmlhbCBidXR0b25zIHdpdGhvdXQgdGV4dFxuICAgICAqICAtICdyb3VuZCc6IGNpcmN1bGFyIGJ1dHRvbnMgd2l0aG91dCB0ZXh0XG4gICAgICogQGRlZmF1bHQgJ2J1dHRvbidcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhcHBlYXJhbmNlOiAncm91bmQnIHwgJ2J1dHRvbicgfCAnaWNvbi1idXR0b24nID0gJ2J1dHRvbic7XG4gICAgLyoqXG4gICAgICogZHJvcGRvd25Qb3NpdGlvbiBpcyBmb3IgcG9zaXRpb24gb2YgZHJvcGRvd24gKGRlZmF1bHQgPSBsZWZ0KVxuICAgICAqIFZhbHVlcyAnbGVmdCcgb3IgJ3JpZ2h0J1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGRyb3Bkb3duUG9zaXRpb246ICdsZWZ0JyB8ICdyaWdodCcgPSAnbGVmdCc7XG5cbiAgICAvKipcbiAgICAgKiBiYWNrZ3JvdW5kVHlwZSBmb3IgY29sb3IgbWF0Y2hpbmcsIGVpdGhlciBicmlnaHQsIGRhcmsgb3IgcHJpbWFyeVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGJhY2tncm91bmRUeXBlOiAnYnJpZ2h0JyB8ICdkYXJrJyB8ICdwcmltYXJ5JyA9ICdicmlnaHQnO1xuICAgIC8qKlxuICAgICAqIFN0eWxlLCBjdXJyZW50bHkgZGVmYXVsdCBvciAnZmxhdCcgaWYgYWxsIGFsd2F5cyB2aXNpYmxlIGljb25zIHNob3VsZCBnZXQgYSBmbGF0IGxvb2tcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZTogJ2RlZmF1bHQnIHwgJ2ZsYXQnID0gJ2RlZmF1bHQnO1xuICAgIC8qKlxuICAgICAqIEhpZ2hsaWdodCBvbmUgb3IgbW9yZSBvZiB0aGUgYWx3YXlzLXZpc2libGUgYnV0dG9ucyBhcyBwcmltYXJ5IGFjdGlvbi5cbiAgICAgKlxuICAgICAqIC0gYGZpcnN0YCwgYGxhc3RgOiBUaGUgZmlyc3QgLyBsYXN0IG9mIGBvcHRpb25zQWx3YXlzYCBieSBvcmRlci5cbiAgICAgKiAtIGBtYW51YWxgOiBIaWdobGlnaHQgYWxsIG9wdGlvbnMgdGhhdCBzZXQgYGlzUHJpbWFyeSA9IHRydWVgLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGhpZ2hsaWdodDogJ2ZpcnN0JyB8ICdsYXN0JyB8ICdtYW51YWwnID0gJ2ZpcnN0JztcbiAgICAvKipcbiAgICAgKiBTaG91bGQgZGlzYWJsZWQgKFwiZ3JleWVkIG91dFwiKSBvcHRpb25zIGJlIHNob3duIG9yIGhpZGRlbj9cbiAgICAgKi9cbiAgICBASW5wdXQoKSBzaG93RGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogdGhlIHBvc2l0aW9uIG9mIHRoZSBtYXQgdG9vbHRpcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0b29sdGlwUG9zaXRpb246IFRvb2x0aXBQb3NpdGlvbiA9ICdiZWxvdyc7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIG9wdGlvbnMsIHNlZSBAT3B0aW9uSXRlbVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNldCBvcHRpb25zKG9wdGlvbnM6IE9wdGlvbkl0ZW1bXSkge1xuICAgICAgICB0aGlzLm9wdGlvbnNJbiA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMucHJlcGFyZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYnJlYWtwb2ludCB3aWR0aCBhdCB3aGljaCBwb2ludCB0aGUgbW9iaWxlIGRpc3BsYXkgY291bnQgaXMgdXNlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIG1vYmlsZUJyZWFrcG9pbnQgPSBVSUNvbnN0YW50cy5NT0JJTEVfV0lEVEg7XG4gICAgb3B0aW9uc0luOiBPcHRpb25JdGVtW10gPSBbXTtcbiAgICBvcHRpb25zQWx3YXlzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8T3B0aW9uSXRlbVtdPihbXSk7XG4gICAgb3B0aW9uc01lbnUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPcHRpb25JdGVtW10+KFtdKTtcbiAgICBvcHRpb25zVG9nZ2xlQmVmb3JlOiBPcHRpb25JdGVtW10gPSBbXTtcbiAgICBvcHRpb25zVG9nZ2xlQWZ0ZXI6IE9wdGlvbkl0ZW1bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB1aVNlcnZpY2U6IFVJU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XG5cbiAgICBwcml2YXRlIHByZXBhcmVPcHRpb25zKG9wdGlvbnM6IE9wdGlvbkl0ZW1bXSkge1xuICAgICAgICBvcHRpb25zID0gdGhpcy51aVNlcnZpY2UuZmlsdGVyVmFsaWRPcHRpb25zKEhlbHBlci5kZWVwQ29weUFycmF5KG9wdGlvbnMpKTtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zQWx3YXlzJC5uZXh0KFtdKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc01lbnUkLm5leHQoW10pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9uc1RvZ2dsZUJlZm9yZSA9IHRoaXMudWlTZXJ2aWNlLmZpbHRlclRvZ2dsZU9wdGlvbnMob3B0aW9ucywgdHJ1ZSwgJ2JlZm9yZScpO1xuICAgICAgICB0aGlzLm9wdGlvbnNUb2dnbGVBZnRlciA9IHRoaXMudWlTZXJ2aWNlLmZpbHRlclRvZ2dsZU9wdGlvbnMob3B0aW9ucywgdHJ1ZSwgJ2FmdGVyJyk7XG4gICAgICAgIHRoaXMub3B0aW9uc0Fsd2F5cyQubmV4dChcbiAgICAgICAgICAgIHRoaXMuZ2V0QWN0aW9uT3B0aW9ucyh0aGlzLnVpU2VydmljZS5maWx0ZXJUb2dnbGVPcHRpb25zKG9wdGlvbnMsIGZhbHNlKSkuc2xpY2UoXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB0aGlzLmdldE51bWJlck9wdGlvbnMoKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zQWx3YXlzJC52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc0Fsd2F5cyQubmV4dChcbiAgICAgICAgICAgICAgICB0aGlzLnVpU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyVG9nZ2xlT3B0aW9ucyhvcHRpb25zLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsIHRoaXMuZ2V0TnVtYmVyT3B0aW9ucygpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zTWVudSQubmV4dChcbiAgICAgICAgICAgIHRoaXMuaGlkZUFjdGlvbk9wdGlvbnMoXG4gICAgICAgICAgICAgICAgdGhpcy51aVNlcnZpY2UuZmlsdGVyVG9nZ2xlT3B0aW9ucyhvcHRpb25zLCBmYWxzZSksXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zQWx3YXlzJC52YWx1ZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHZvaWQgdGhpcy51aVNlcnZpY2UudXBkYXRlT3B0aW9uRW5hYmxlZFN0YXRlKHRoaXMub3B0aW9uc0Fsd2F5cyQpO1xuICAgICAgICB2b2lkIHRoaXMudWlTZXJ2aWNlLnVwZGF0ZU9wdGlvbkVuYWJsZWRTdGF0ZSh0aGlzLm9wdGlvbnNNZW51JCk7XG4gICAgICAgIC8vIG1heSBjYXVzZXMgd2VpcmQgbG9va2luZ1xuICAgICAgICAvKmlmKHRoaXMub3B0aW9uc01lbnUubGVuZ3RoPDIpIHtcbiAgICAgIHRoaXMub3B0aW9uc0Fsd2F5cyA9IHRoaXMub3B0aW9uc0Fsd2F5cy5jb25jYXQodGhpcy5vcHRpb25zTWVudSk7XG4gICAgICB0aGlzLm9wdGlvbnNNZW51ID0gW107XG4gICAgfSovXG4gICAgfVxuXG4gICAgcHVibGljIGdldE51bWJlck9wdGlvbnMoKSB7XG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IHRoaXMubW9iaWxlQnJlYWtwb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtYmVyT2ZBbHdheXNWaXNpYmxlT3B0aW9uc01vYmlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5udW1iZXJPZkFsd2F5c1Zpc2libGVPcHRpb25zO1xuICAgIH1cblxuICAgIGNsaWNrKG9wdGlvbjogT3B0aW9uSXRlbSkge1xuICAgICAgICBpZiAoIW9wdGlvbi5pc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb24uZGlzYWJsZWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIG9wdGlvbi5kaXNhYmxlZENhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9uLmNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBY3Rpb25PcHRpb25zKG9wdGlvbnM6IE9wdGlvbkl0ZW1bXSkge1xuICAgICAgICBjb25zdCByZXN1bHQ6IE9wdGlvbkl0ZW1bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uLnNob3dBc0FjdGlvbikgcmVzdWx0LnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZUFjdGlvbk9wdGlvbnMob3B0aW9uczogT3B0aW9uSXRlbVtdLCBvcHRpb25zQWx3YXlzOiBPcHRpb25JdGVtW10pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBPcHRpb25JdGVtW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnNBbHdheXMuaW5kZXhPZihvcHRpb24pID09PSAtMSkgcmVzdWx0LnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludmFsaWRhdGUgLyByZWZyZXNoZXMgYWxsIG9wdGlvbnMgYmFzZWQgb24gdGhlaXIgY3VycmVudCBjYWxsYmFja3NcbiAgICAgKi9cbiAgICBwdWJsaWMgaW52YWxpZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlT3B0aW9ucyh0aGlzLm9wdGlvbnNJbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJEaXNhYmxlZChvcHRpb25zOiBPcHRpb25JdGVtW10pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb24uaXNFbmFibGVkIHx8IHRoaXMuc2hvd0Rpc2FibGVkKSBmaWx0ZXJlZC5wdXNoKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgIH1cblxuICAgIGNhblNob3dEcm9wZG93bigpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnNNZW51JC52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zTWVudSQudmFsdWUuZmlsdGVyKChvKSA9PiBvLmlzRW5hYmxlZCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBzaG91bGRIaWdobGlnaHQob3B0aW9uSW5kZXg6IG51bWJlciwgb3B0aW9uOiBPcHRpb25JdGVtKTogYm9vbGVhbiB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5oaWdobGlnaHQpIHtcbiAgICAgICAgICAgIGNhc2UgJ2ZpcnN0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uSW5kZXggPT09IDA7XG4gICAgICAgICAgICBjYXNlICdsYXN0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uSW5kZXggPT09IHRoaXMub3B0aW9uc0Fsd2F5cyQudmFsdWUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNhc2UgJ21hbnVhbCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5pc1ByaW1hcnk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgIH1cbn1cbiIsIjxlcy1kcm9wZG93blxuICAjZHJvcGRvd25SZWZcbiAgW29wdGlvbnNdPVwib3B0aW9uc01lbnUkIHwgYXN5bmNcIlxuICBbc2hvd0Rpc2FibGVkXT1cInNob3dEaXNhYmxlZFwiXG4gIFtwb3NpdGlvbl09XCJkcm9wZG93blBvc2l0aW9uXCJcbj48L2VzLWRyb3Bkb3duPlxuPGRpdlxuICBjbGFzcz1cImFjdGlvbmJhclwiXG4gIFtjbGFzcy5hY3Rpb25iYXItYWxsLWZsYXRdPVwic3R5bGUgPT09ICdmbGF0J1wiXG4gIFtjbGFzcy5hY3Rpb25iYXItYmFja2dyb3VuZC1kYXJrXT1cImJhY2tncm91bmRUeXBlID09PSAnZGFyaydcIlxuICBbY2xhc3MuYWN0aW9uYmFyLWJhY2tncm91bmQtcHJpbWFyeV09XCJiYWNrZ3JvdW5kVHlwZSA9PT0gJ3ByaW1hcnknXCJcbiAgW2NsYXNzLmFjdGlvbmJhci1yb3VuZF09XCJhcHBlYXJhbmNlID09PSAncm91bmQnXCJcbiAgW2NsYXNzLmFjdGlvbmJhci1pY29uLWJ1dHRvbl09XCJhcHBlYXJhbmNlID09PSAnaWNvbi1idXR0b24nXCJcbj5cbiAgPGRpdlxuICAgICpuZ0lmPVwib3B0aW9uc1RvZ2dsZUJlZm9yZS5sZW5ndGhcIlxuICAgIGNsYXNzPVwiYWN0aW9uVG9nZ2xlIGJlZm9yZVwiXG4gICAgW2NsYXNzLmFjdGlvblRvZ2dsZURpdmlkZXJdPVwiKG9wdGlvbnNBbHdheXMkIHwgYXN5bmMpLmxlbmd0aFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRvZ2dsZTsgY29udGV4dDogeyBvcHRpb25zVG9nZ2xlOiBvcHRpb25zVG9nZ2xlQmVmb3JlIH1cIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zQWx3YXlzJCB8IGFzeW5jOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJzaG91bGRIaWdobGlnaHQoaSwgb3B0aW9uKVwiXG4gICAgICBtYXQtZmxhdC1idXR0b25cbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIW9wdGlvbi5pc0VuYWJsZWRcIlxuICAgICAgW2NsYXNzLmRpc3BsYXktbm9uZV09XCIhb3B0aW9uLmlzRW5hYmxlZCAmJiAhc2hvd0Rpc2FibGVkXCJcbiAgICAgIG1hdFRvb2x0aXA9XCJ7eyBvcHRpb24gfCBvcHRpb25Ub29sdGlwIHwgYXN5bmMgfX1cIlxuICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJvcHRpb24uYXJpYUxhYmVsIHx8IG9wdGlvbi5uYW1lIHwgdHJhbnNsYXRlXCJcbiAgICAgIChjbGljayk9XCJjbGljayhvcHRpb24pXCJcbiAgICA+XG4gICAgICA8aSBbZXNJY29uXT1cIm9wdGlvbi5pY29uXCI+PC9pPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYWx3YXlzLWNhcHRpb25cIiAqbmdJZj1cIm9wdGlvbi5zaG93TmFtZSAmJiBhcHBlYXJhbmNlID09PSAnYnV0dG9uJ1wiPlxuICAgICAgICB7eyBvcHRpb24ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3BhblxuICAgICAgPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiIXNob3VsZEhpZ2hsaWdodChpLCBvcHRpb24pXCJcbiAgICAgIG1hdC1idXR0b25cbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIW9wdGlvbi5pc0VuYWJsZWRcIlxuICAgICAgW2NsYXNzLmRpc3BsYXktbm9uZV09XCIhb3B0aW9uLmlzRW5hYmxlZCAmJiAhc2hvd0Rpc2FibGVkXCJcbiAgICAgIG1hdFRvb2x0aXA9XCJ7eyBvcHRpb24gfCBvcHRpb25Ub29sdGlwIHwgYXN5bmMgfX1cIlxuICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJvcHRpb24uYXJpYUxhYmVsIHx8IG9wdGlvbi5uYW1lIHwgdHJhbnNsYXRlXCJcbiAgICAgIChjbGljayk9XCJjbGljayhvcHRpb24pXCJcbiAgICA+XG4gICAgICA8aSBbZXNJY29uXT1cIm9wdGlvbi5pY29uXCI+PC9pPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYWx3YXlzLWNhcHRpb25cIiAqbmdJZj1cIm9wdGlvbi5zaG93TmFtZSAmJiBhcHBlYXJhbmNlID09PSAnYnV0dG9uJ1wiPlxuICAgICAgICB7eyBvcHRpb24ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3BhblxuICAgICAgPlxuICAgIDwvYnV0dG9uPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGJ1dHRvblxuICAgIG1hdC1idXR0b25cbiAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgIGNsYXNzPVwibW9yZVwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInT1BUSU9OUy5TSE9XX0FMTF9PUFRJT05TJyB8IHRyYW5zbGF0ZVwiXG4gICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImRyb3Bkb3duUmVmLm1lbnVcIlxuICAgICpuZ0lmPVwiY2FuU2hvd0Ryb3Bkb3duKClcIlxuICAgIGRhdGEtdGVzdD1cIm1vcmUtYWN0aW9ucy1idXR0b25cIlxuICA+XG4gICAgPGkgZXNJY29uPVwibW9yZV92ZXJ0XCIgW2FyaWFdPVwiZmFsc2VcIj48L2k+XG4gIDwvYnV0dG9uPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJvcHRpb25zVG9nZ2xlQWZ0ZXIubGVuZ3RoXCJcbiAgICBjbGFzcz1cImFjdGlvblRvZ2dsZSBhZnRlclwiXG4gICAgW2NsYXNzLmFjdGlvblRvZ2dsZURpdmlkZXJdPVwiKG9wdGlvbnNBbHdheXMkIHwgYXN5bmMpLmxlbmd0aFwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRvZ2dsZTsgY29udGV4dDogeyBvcHRpb25zVG9nZ2xlOiBvcHRpb25zVG9nZ2xlQWZ0ZXIgfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICN0b2dnbGUgbGV0LW9wdGlvbnNUb2dnbGU9XCJvcHRpb25zVG9nZ2xlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zVG9nZ2xlXCI+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJvcHRpb24uaXNUb2dnbGVWaXNpYmxlXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgbWF0VG9vbHRpcD1cInt7IG9wdGlvbi5uYW1lIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwib3B0aW9uLmFyaWFMYWJlbCB8fCBvcHRpb24ubmFtZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAoY2xpY2spPVwiY2xpY2sob3B0aW9uKVwiXG4gICAgICBbY2xhc3NdPVwiXG4gICAgICAgICd0b2dnbGUtJyArXG4gICAgICAgIChvcHRpb24ubmFtZSB8IHJlcGxhY2VDaGFycyA6IHsgc2VhcmNoOiAnLicsIHJlcGxhY2U6ICctJyB9KSArXG4gICAgICAgIChvcHRpb24uaXNFbmFibGVkID8gJycgOiAnIGRpc2FibGVkJylcbiAgICAgIFwiXG4gICAgICBhdHRyLmRhdGEtdGVzdD1cInRvZ2dsZS17eyBvcHRpb24ubmFtZSB9fVwiXG4gICAgPlxuICAgICAgPGkgW2VzSWNvbl09XCJvcHRpb24uaWNvblwiIFthcmlhXT1cImZhbHNlXCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,170 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
3
- import { MatButtonModule } from '@angular/material/button';
4
- import { MatRippleModule } from '@angular/material/core';
5
- import { MatMenuModule } from '@angular/material/menu';
6
- import { MatTooltipModule } from '@angular/material/tooltip';
7
- import { RouterModule } from '@angular/router';
8
- import { TranslateModule } from '@ngx-translate/core';
9
- import { ActionbarComponent } from '../actionbar/actionbar.component';
10
- import { BorderBoxObserverDirective } from '../directives/border-box-observer.directive';
11
- import { CheckTextOverflowDirective } from '../directives/check-text-overflow.directive';
12
- import { FocusStateDirective } from '../directives/focus-state.directive';
13
- import { IconDirective } from '../directives/icon.directive';
14
- import { InfiniteScrollDirective } from '../directives/infinite-scroll.directive';
15
- import { DropdownComponent } from '../dropdown/dropdown.component';
16
- import { NodeUrlComponent } from '../node-url/node-url.component';
17
- import { FormatSizePipe } from '../pipes/file-size.pipe';
18
- import { FormatDatePipe } from '../pipes/format-date.pipe';
19
- import { NodeIconPipe } from '../pipes/node-icon.pipe';
20
- import { NodeImageSizePipe } from '../pipes/node-image-size.pipe';
21
- import { NodeImagePipe } from '../pipes/node-image.pipe';
22
- import { NodePersonNamePipe } from '../pipes/node-person-name.pipe';
23
- import { NodeTitlePipe } from '../pipes/node-title.pipe';
24
- import { OptionTooltipPipe } from '../pipes/option-tooltip.pipe';
25
- import { ReplaceCharsPipe } from '../pipes/replace-chars.pipe';
26
- import { VCardNamePipe } from '../pipes/vcard-name.pipe';
27
- import { SortDropdownComponent } from '../sort-dropdown/sort-dropdown.component';
28
- import { SpinnerComponent } from '../spinner/spinner.component';
29
- import { PropertySlugPipe } from '../pipes/property-slug.pipe';
30
- import { NodeLicensePipe } from '../pipes/node-license.pipe';
31
- import { MdsWidgetComponent } from '../mds-viewer/widget/mds-widget.component';
32
- import { MdsDurationPipe } from '../pipes/mds-duration.pipe';
33
- import { MdsViewerComponent } from '../mds-viewer/mds-viewer.component';
34
- import { SpinnerSmallComponent } from '../spinner-small/spinner-small.component';
35
- import * as i0 from "@angular/core";
36
- export class EduSharingUiCommonModule {
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
38
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiCommonModule, declarations: [MdsViewerComponent,
39
- MdsWidgetComponent,
40
- ActionbarComponent,
41
- BorderBoxObserverDirective,
42
- CheckTextOverflowDirective,
43
- DropdownComponent,
44
- FocusStateDirective,
45
- FormatDatePipe,
46
- FormatSizePipe,
47
- IconDirective,
48
- MdsDurationPipe,
49
- InfiniteScrollDirective,
50
- PropertySlugPipe,
51
- NodeIconPipe,
52
- NodeImagePipe,
53
- NodeImageSizePipe,
54
- NodeLicensePipe,
55
- NodePersonNamePipe,
56
- NodeTitlePipe,
57
- NodeUrlComponent,
58
- OptionTooltipPipe,
59
- ReplaceCharsPipe,
60
- SortDropdownComponent,
61
- VCardNamePipe], imports: [CommonModule,
62
- MatMenuModule,
63
- SpinnerComponent,
64
- SpinnerSmallComponent,
65
- MatButtonModule,
66
- MatTooltipModule,
67
- MatRippleModule,
68
- TranslateModule,
69
- RouterModule], exports: [MdsViewerComponent,
70
- MdsWidgetComponent,
71
- ActionbarComponent,
72
- BorderBoxObserverDirective,
73
- CheckTextOverflowDirective,
74
- DropdownComponent,
75
- FocusStateDirective,
76
- FormatDatePipe,
77
- FormatSizePipe,
78
- MdsDurationPipe,
79
- IconDirective,
80
- InfiniteScrollDirective,
81
- PropertySlugPipe,
82
- NodeIconPipe,
83
- NodeImagePipe,
84
- NodeImageSizePipe,
85
- NodePersonNamePipe,
86
- NodeTitlePipe,
87
- NodeUrlComponent,
88
- SortDropdownComponent,
89
- SpinnerComponent,
90
- SpinnerSmallComponent,
91
- VCardNamePipe] }); }
92
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiCommonModule, imports: [CommonModule,
93
- MatMenuModule,
94
- SpinnerComponent,
95
- SpinnerSmallComponent,
96
- MatButtonModule,
97
- MatTooltipModule,
98
- MatRippleModule,
99
- TranslateModule,
100
- RouterModule] }); }
101
- }
102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EduSharingUiCommonModule, decorators: [{
103
- type: NgModule,
104
- args: [{
105
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
106
- declarations: [
107
- MdsViewerComponent,
108
- MdsWidgetComponent,
109
- ActionbarComponent,
110
- BorderBoxObserverDirective,
111
- CheckTextOverflowDirective,
112
- DropdownComponent,
113
- FocusStateDirective,
114
- FormatDatePipe,
115
- FormatSizePipe,
116
- IconDirective,
117
- MdsDurationPipe,
118
- InfiniteScrollDirective,
119
- PropertySlugPipe,
120
- NodeIconPipe,
121
- NodeImagePipe,
122
- NodeImageSizePipe,
123
- NodeLicensePipe,
124
- NodePersonNamePipe,
125
- NodeTitlePipe,
126
- NodeUrlComponent,
127
- OptionTooltipPipe,
128
- ReplaceCharsPipe,
129
- SortDropdownComponent,
130
- VCardNamePipe,
131
- ],
132
- imports: [
133
- CommonModule,
134
- MatMenuModule,
135
- SpinnerComponent,
136
- SpinnerSmallComponent,
137
- MatButtonModule,
138
- MatTooltipModule,
139
- MatRippleModule,
140
- TranslateModule,
141
- RouterModule,
142
- ],
143
- exports: [
144
- MdsViewerComponent,
145
- MdsWidgetComponent,
146
- ActionbarComponent,
147
- BorderBoxObserverDirective,
148
- CheckTextOverflowDirective,
149
- DropdownComponent,
150
- FocusStateDirective,
151
- FormatDatePipe,
152
- FormatSizePipe,
153
- MdsDurationPipe,
154
- IconDirective,
155
- InfiniteScrollDirective,
156
- PropertySlugPipe,
157
- NodeIconPipe,
158
- NodeImagePipe,
159
- NodeImageSizePipe,
160
- NodePersonNamePipe,
161
- NodeTitlePipe,
162
- NodeUrlComponent,
163
- SortDropdownComponent,
164
- SpinnerComponent,
165
- SpinnerSmallComponent,
166
- VCardNamePipe,
167
- ],
168
- }]
169
- }] });
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWR1LXNoYXJpbmctdWktY29tbW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvY29tbW9uL2VkdS1zaGFyaW5nLXVpLWNvbW1vbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN6RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdD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akIsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixlQUFlO3dCQUNmLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLGFBQWE7cUJBQ2hCO29CQUNELE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsWUFBWTtxQkFDZjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIsMEJBQTBCO3dCQUMxQiwwQkFBMEI7d0JBQzFCLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixhQUFhO3dCQUNiLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLGdCQUFnQjt3QkFDaEIscUJBQXFCO3dCQUNyQixhQUFhO3FCQUNoQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdFJpcHBsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vYWN0aW9uYmFyL2FjdGlvbmJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm9yZGVyQm94T2JzZXJ2ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2JvcmRlci1ib3gtb2JzZXJ2ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IENoZWNrVGV4dE92ZXJmbG93RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jaGVjay10ZXh0LW92ZXJmbG93LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGb2N1c1N0YXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9mb2N1cy1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWNvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvaWNvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSW5maW5pdGVTY3JvbGxEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2luZmluaXRlLXNjcm9sbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZVVybENvbXBvbmVudCB9IGZyb20gJy4uL25vZGUtdXJsL25vZGUtdXJsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtYXRTaXplUGlwZSB9IGZyb20gJy4uL3BpcGVzL2ZpbGUtc2l6ZS5waXBlJztcbmltcG9ydCB7IEZvcm1hdERhdGVQaXBlIH0gZnJvbSAnLi4vcGlwZXMvZm9ybWF0LWRhdGUucGlwZSc7XG5pbXBvcnQgeyBOb2RlSWNvblBpcGUgfSBmcm9tICcuLi9waXBlcy9ub2RlLWljb24ucGlwZSc7XG5pbXBvcnQgeyBOb2RlSW1hZ2VTaXplUGlwZSB9IGZyb20gJy4uL3BpcGVzL25vZGUtaW1hZ2Utc2l6ZS5waXBlJztcbmltcG9ydCB7IE5vZGVJbWFnZVBpcGUgfSBmcm9tICcuLi9waXBlcy9ub2RlLWltYWdlLnBpcGUnO1xuaW1wb3J0IHsgTm9kZVBlcnNvbk5hbWVQaXBlIH0gZnJvbSAnLi4vcGlwZXMvbm9kZS1wZXJzb24tbmFtZS5waXBlJztcbmltcG9ydCB7IE5vZGVUaXRsZVBpcGUgfSBmcm9tICcuLi9waXBlcy9ub2RlLXRpdGxlLnBpcGUnO1xuaW1wb3J0IHsgT3B0aW9uVG9vbHRpcFBpcGUgfSBmcm9tICcuLi9waXBlcy9vcHRpb24tdG9vbHRpcC5waXBlJztcbmltcG9ydCB7IFJlcGxhY2VDaGFyc1BpcGUgfSBmcm9tICcuLi9waXBlcy9yZXBsYWNlLWNoYXJzLnBpcGUnO1xuaW1wb3J0IHsgVkNhcmROYW1lUGlwZSB9IGZyb20gJy4uL3BpcGVzL3ZjYXJkLW5hbWUucGlwZSc7XG5pbXBvcnQgeyBTb3J0RHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9zb3J0LWRyb3Bkb3duL3NvcnQtZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IFNwaW5uZXJDb21wb25lbnQgfSBmcm9tICcuLi9zcGlubmVyL3NwaW5uZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFByb3BlcnR5U2x1Z1BpcGUgfSBmcm9tICcuLi9waXBlcy9wcm9wZXJ0eS1zbHVnLnBpcGUnO1xuaW1wb3J0IHsgTm9kZUxpY2Vuc2VQaXBlIH0gZnJvbSAnLi4vcGlwZXMvbm9kZS1saWNlbnNlLnBpcGUnO1xuaW1wb3J0IHsgTWRzV2lkZ2V0Q29tcG9uZW50IH0gZnJvbSAnLi4vbWRzLXZpZXdlci93aWRnZXQvbWRzLXdpZGdldC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWRzRHVyYXRpb25QaXBlIH0gZnJvbSAnLi4vcGlwZXMvbWRzLWR1cmF0aW9uLnBpcGUnO1xuaW1wb3J0IHsgTWRzVmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vbWRzLXZpZXdlci9tZHMtdmlld2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTcGlubmVyU21hbGxDb21wb25lbnQgfSBmcm9tICcuLi9zcGlubmVyLXNtYWxsL3NwaW5uZXItc21hbGwuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIE1kc1ZpZXdlckNvbXBvbmVudCxcbiAgICAgICAgTWRzV2lkZ2V0Q29tcG9uZW50LFxuICAgICAgICBBY3Rpb25iYXJDb21wb25lbnQsXG4gICAgICAgIEJvcmRlckJveE9ic2VydmVyRGlyZWN0aXZlLFxuICAgICAgICBDaGVja1RleHRPdmVyZmxvd0RpcmVjdGl2ZSxcbiAgICAgICAgRHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIEZvY3VzU3RhdGVEaXJlY3RpdmUsXG4gICAgICAgIEZvcm1hdERhdGVQaXBlLFxuICAgICAgICBGb3JtYXRTaXplUGlwZSxcbiAgICAgICAgSWNvbkRpcmVjdGl2ZSxcbiAgICAgICAgTWRzRHVyYXRpb25QaXBlLFxuICAgICAgICBJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSxcbiAgICAgICAgUHJvcGVydHlTbHVnUGlwZSxcbiAgICAgICAgTm9kZUljb25QaXBlLFxuICAgICAgICBOb2RlSW1hZ2VQaXBlLFxuICAgICAgICBOb2RlSW1hZ2VTaXplUGlwZSxcbiAgICAgICAgTm9kZUxpY2Vuc2VQaXBlLFxuICAgICAgICBOb2RlUGVyc29uTmFtZVBpcGUsXG4gICAgICAgIE5vZGVUaXRsZVBpcGUsXG4gICAgICAgIE5vZGVVcmxDb21wb25lbnQsXG4gICAgICAgIE9wdGlvblRvb2x0aXBQaXBlLFxuICAgICAgICBSZXBsYWNlQ2hhcnNQaXBlLFxuICAgICAgICBTb3J0RHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIFZDYXJkTmFtZVBpcGUsXG4gICAgXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcbiAgICAgICAgU3Bpbm5lckNvbXBvbmVudCxcbiAgICAgICAgU3Bpbm5lclNtYWxsQ29tcG9uZW50LFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgICAgIE1hdFJpcHBsZU1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBSb3V0ZXJNb2R1bGUsXG4gICAgXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIE1kc1ZpZXdlckNvbXBvbmVudCxcbiAgICAgICAgTWRzV2lkZ2V0Q29tcG9uZW50LFxuICAgICAgICBBY3Rpb25iYXJDb21wb25lbnQsXG4gICAgICAgIEJvcmRlckJveE9ic2VydmVyRGlyZWN0aXZlLFxuICAgICAgICBDaGVja1RleHRPdmVyZmxvd0RpcmVjdGl2ZSxcbiAgICAgICAgRHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIEZvY3VzU3RhdGVEaXJlY3RpdmUsXG4gICAgICAgIEZvcm1hdERhdGVQaXBlLFxuICAgICAgICBGb3JtYXRTaXplUGlwZSxcbiAgICAgICAgTWRzRHVyYXRpb25QaXBlLFxuICAgICAgICBJY29uRGlyZWN0aXZlLFxuICAgICAgICBJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSxcbiAgICAgICAgUHJvcGVydHlTbHVnUGlwZSxcbiAgICAgICAgTm9kZUljb25QaXBlLFxuICAgICAgICBOb2RlSW1hZ2VQaXBlLFxuICAgICAgICBOb2RlSW1hZ2VTaXplUGlwZSxcbiAgICAgICAgTm9kZVBlcnNvbk5hbWVQaXBlLFxuICAgICAgICBOb2RlVGl0bGVQaXBlLFxuICAgICAgICBOb2RlVXJsQ29tcG9uZW50LFxuICAgICAgICBTb3J0RHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIFNwaW5uZXJDb21wb25lbnQsXG4gICAgICAgIFNwaW5uZXJTbWFsbENvbXBvbmVudCxcbiAgICAgICAgVkNhcmROYW1lUGlwZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFZHVTaGFyaW5nVWlDb21tb25Nb2R1bGUge31cbiJdfQ==