@bravobit/bb-foundation 0.21.3 → 0.21.6

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 (148) hide show
  1. package/elements/lib/directives/form-submitter.directive.d.ts +9 -0
  2. package/elements/lib/elements.module.d.ts +25 -24
  3. package/elements/lib/form-error/form-error.component.d.ts +9 -5
  4. package/elements/public_api.d.ts +1 -0
  5. package/esm2020/auth/lib/auth.interceptor.mjs +3 -3
  6. package/esm2020/auth/lib/auth.module.mjs +4 -4
  7. package/esm2020/auth/lib/auth.service.mjs +3 -3
  8. package/esm2020/auth/lib/directives/authenticated.directive.mjs +3 -3
  9. package/esm2020/auth/lib/directives/permission.directive.mjs +3 -3
  10. package/esm2020/auth/lib/directives/role.directive.mjs +3 -3
  11. package/esm2020/auth/lib/guards/anonymous.guard.mjs +3 -3
  12. package/esm2020/auth/lib/guards/authenticated.guard.mjs +3 -3
  13. package/esm2020/auth/lib/helpers/mapper.helper.mjs +3 -3
  14. package/esm2020/auth/lib/permissions.service.mjs +3 -3
  15. package/esm2020/collections/lib/collections.module.mjs +4 -4
  16. package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +3 -3
  17. package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +3 -3
  18. package/esm2020/collections/lib/components/collections.directive.mjs +12 -12
  19. package/esm2020/controls/lib/checkbox/checkbox/checkbox.component.mjs +3 -3
  20. package/esm2020/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +3 -3
  21. package/esm2020/controls/lib/checkbox/checkbox.module.mjs +4 -4
  22. package/esm2020/controls/lib/controls.module.mjs +4 -4
  23. package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +3 -3
  24. package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +3 -3
  25. package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +3 -3
  26. package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +3 -3
  27. package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +3 -3
  28. package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +3 -3
  29. package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +3 -3
  30. package/esm2020/dashboard/lib/dashboard.module.mjs +4 -4
  31. package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +3 -3
  32. package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +3 -3
  33. package/esm2020/dialog/lib/dialog-container/dialog-container.component.mjs +3 -3
  34. package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +3 -3
  35. package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +3 -3
  36. package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +3 -3
  37. package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +3 -3
  38. package/esm2020/dialog/lib/dialog.insertion.mjs +3 -3
  39. package/esm2020/dialog/lib/dialog.module.mjs +4 -4
  40. package/esm2020/dialog/lib/dialog.service.mjs +3 -3
  41. package/esm2020/elements/lib/avatar/avatar.component.mjs +3 -3
  42. package/esm2020/elements/lib/button/button.component.mjs +6 -6
  43. package/esm2020/elements/lib/checkbox/checkbox.component.mjs +3 -3
  44. package/esm2020/elements/lib/date-picker/date-picker.component.mjs +3 -3
  45. package/esm2020/elements/lib/directives/addon.directive.mjs +6 -6
  46. package/esm2020/elements/lib/directives/autosize.directive.mjs +3 -3
  47. package/esm2020/elements/lib/directives/focus-trap.directive.mjs +3 -3
  48. package/esm2020/elements/lib/directives/focus.directive.mjs +3 -3
  49. package/esm2020/elements/lib/directives/form-submit.directive.mjs +3 -3
  50. package/esm2020/elements/lib/directives/form-submitter.directive.mjs +25 -0
  51. package/esm2020/elements/lib/directives/input.directive.mjs +6 -6
  52. package/esm2020/elements/lib/directives/template.directive.mjs +3 -3
  53. package/esm2020/elements/lib/dropdown/dropdown.component.mjs +6 -6
  54. package/esm2020/elements/lib/elements.module.mjs +9 -5
  55. package/esm2020/elements/lib/file-picker/file-picker.component.mjs +3 -3
  56. package/esm2020/elements/lib/form-control/form-control.component.mjs +3 -3
  57. package/esm2020/elements/lib/form-error/form-error.component.mjs +22 -7
  58. package/esm2020/elements/lib/form-group/form-group.component.mjs +3 -3
  59. package/esm2020/elements/lib/icon/icon.component.mjs +3 -3
  60. package/esm2020/elements/lib/image-picker/image-picker.component.mjs +3 -3
  61. package/esm2020/elements/lib/pipes/file-image.pipe.mjs +3 -3
  62. package/esm2020/elements/lib/pipes/file-size.pipe.mjs +3 -3
  63. package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +3 -3
  64. package/esm2020/elements/lib/spinner/spinner.component.mjs +3 -3
  65. package/esm2020/elements/lib/tag/tag.component.mjs +3 -3
  66. package/esm2020/elements/public_api.mjs +2 -1
  67. package/esm2020/http/lib/http.module.mjs +4 -4
  68. package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +3 -3
  69. package/esm2020/http/lib/interceptors/error.interceptor.mjs +3 -3
  70. package/esm2020/lib/core/services/clipboard.service.mjs +3 -3
  71. package/esm2020/lib/core/services/exif.service.mjs +3 -3
  72. package/esm2020/lib/core/services/file-loader.service.mjs +3 -3
  73. package/esm2020/lib/core/services/image-converter.service.mjs +3 -3
  74. package/esm2020/lib/core/services/languages.service.mjs +3 -3
  75. package/esm2020/lib/core/services/network.service.mjs +3 -3
  76. package/esm2020/lib/core/services/patch.service.mjs +3 -3
  77. package/esm2020/lib/core/services/platform.service.mjs +3 -3
  78. package/esm2020/localize/lib/localize.module.mjs +4 -4
  79. package/esm2020/localize/lib/localize.pipe.mjs +3 -3
  80. package/esm2020/localize/lib/localize.service.mjs +3 -3
  81. package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +3 -3
  82. package/esm2020/localize/lib/views/localize-template-or-string.directive.mjs +3 -3
  83. package/esm2020/localize/lib/views/localize-template.directive.mjs +3 -3
  84. package/esm2020/masking/lib/directives/currency-mask.directive.mjs +35 -0
  85. package/esm2020/masking/lib/directives/date-mask.directive.mjs +35 -0
  86. package/esm2020/masking/lib/directives/input-mask.directive.mjs +118 -0
  87. package/esm2020/masking/lib/input-mask.interface.mjs +1 -1
  88. package/esm2020/masking/lib/masking.module.mjs +22 -8
  89. package/esm2020/masking/lib/masking.service.mjs +9 -9
  90. package/esm2020/masking/public_api.mjs +4 -2
  91. package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +3 -3
  92. package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +3 -3
  93. package/esm2020/notifications/lib/notifications.module.mjs +4 -4
  94. package/esm2020/notifications/lib/notifications.service.mjs +3 -3
  95. package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +3 -3
  96. package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +3 -3
  97. package/esm2020/recaptcha/lib/recaptcha.module.mjs +4 -4
  98. package/esm2020/storage/lib/storage.service.mjs +3 -3
  99. package/esm2020/table/lib/components/table/table.component.mjs +9 -9
  100. package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +3 -3
  101. package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +3 -3
  102. package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +3 -3
  103. package/esm2020/table/lib/table.module.mjs +4 -4
  104. package/esm2020/theming/lib/theming.module.mjs +4 -4
  105. package/esm2020/theming/lib/theming.service.mjs +3 -3
  106. package/fesm2015/bravobit-bb-foundation-auth.mjs +31 -31
  107. package/fesm2015/bravobit-bb-foundation-collections.mjs +22 -22
  108. package/fesm2015/bravobit-bb-foundation-controls.mjs +14 -14
  109. package/fesm2015/bravobit-bb-foundation-dashboard.mjs +25 -25
  110. package/fesm2015/bravobit-bb-foundation-dialog.mjs +31 -31
  111. package/fesm2015/bravobit-bb-foundation-elements.mjs +129 -90
  112. package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -1
  113. package/fesm2015/bravobit-bb-foundation-http.mjs +10 -10
  114. package/fesm2015/bravobit-bb-foundation-localize.mjs +19 -19
  115. package/fesm2015/bravobit-bb-foundation-masking.mjs +108 -26
  116. package/fesm2015/bravobit-bb-foundation-masking.mjs.map +1 -1
  117. package/fesm2015/bravobit-bb-foundation-notifications.mjs +13 -13
  118. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs +10 -10
  119. package/fesm2015/bravobit-bb-foundation-storage.mjs +3 -3
  120. package/fesm2015/bravobit-bb-foundation-table.mjs +22 -22
  121. package/fesm2015/bravobit-bb-foundation-theming.mjs +7 -7
  122. package/fesm2015/bravobit-bb-foundation.mjs +24 -24
  123. package/fesm2020/bravobit-bb-foundation-auth.mjs +31 -31
  124. package/fesm2020/bravobit-bb-foundation-collections.mjs +22 -22
  125. package/fesm2020/bravobit-bb-foundation-controls.mjs +14 -14
  126. package/fesm2020/bravobit-bb-foundation-dashboard.mjs +25 -25
  127. package/fesm2020/bravobit-bb-foundation-dialog.mjs +31 -31
  128. package/fesm2020/bravobit-bb-foundation-elements.mjs +129 -90
  129. package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -1
  130. package/fesm2020/bravobit-bb-foundation-http.mjs +10 -10
  131. package/fesm2020/bravobit-bb-foundation-localize.mjs +19 -19
  132. package/fesm2020/bravobit-bb-foundation-masking.mjs +101 -26
  133. package/fesm2020/bravobit-bb-foundation-masking.mjs.map +1 -1
  134. package/fesm2020/bravobit-bb-foundation-notifications.mjs +13 -13
  135. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +10 -10
  136. package/fesm2020/bravobit-bb-foundation-storage.mjs +3 -3
  137. package/fesm2020/bravobit-bb-foundation-table.mjs +22 -22
  138. package/fesm2020/bravobit-bb-foundation-theming.mjs +7 -7
  139. package/fesm2020/bravobit-bb-foundation.mjs +24 -24
  140. package/masking/lib/directives/currency-mask.directive.d.ts +17 -0
  141. package/masking/lib/directives/date-mask.directive.d.ts +17 -0
  142. package/masking/lib/{input-mask.directive.d.ts → directives/input-mask.directive.d.ts} +4 -4
  143. package/masking/lib/input-mask.interface.d.ts +1 -6
  144. package/masking/lib/masking.module.d.ts +4 -2
  145. package/masking/lib/masking.service.d.ts +1 -1
  146. package/masking/public_api.d.ts +3 -1
  147. package/package.json +1 -1
  148. package/esm2020/masking/lib/input-mask.directive.mjs +0 -117
@@ -1,117 +0,0 @@
1
- import { Directive, HostListener, Input, Optional, Self } from '@angular/core';
2
- import { fromEvent, merge } from 'rxjs';
3
- import _Inputmask from 'inputmask';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/cdk/platform";
6
- import * as i2 from "@angular/forms";
7
- const InputmaskConstructor = _Inputmask.default || _Inputmask;
8
- export class BbInputMask {
9
- constructor(_ngZone, _platform, _renderer, _elementRef, _control) {
10
- this._ngZone = _ngZone;
11
- this._platform = _platform;
12
- this._renderer = _renderer;
13
- this._elementRef = _elementRef;
14
- this._control = _control;
15
- // State.
16
- this.inputMaskPlugin = null;
17
- this.nativeInputElement = null;
18
- this.eventsSubscription = null;
19
- this._inputMaskOptions = null;
20
- this._onChange = () => ({});
21
- this.onInput = (_) => ({});
22
- this.onTouched = () => ({});
23
- this.validate = (control) => !control.value || !this.inputMaskPlugin || this.inputMaskPlugin?.isValid()
24
- ? null
25
- : { inputMask: true };
26
- this.nativeInputElement = this._elementRef.nativeElement;
27
- if (this._control != null) {
28
- this._control.valueAccessor = this;
29
- }
30
- }
31
- set bbInputMask(mask) {
32
- if (!mask) {
33
- return;
34
- }
35
- this._inputMaskOptions = mask;
36
- this.updateMask();
37
- }
38
- ngOnInit() {
39
- const control = this._control.control;
40
- if (!control) {
41
- return;
42
- }
43
- control.setValidators(control.validator ? [control.validator, this.validate] : [this.validate]);
44
- control.updateValueAndValidity();
45
- }
46
- ngOnDestroy() {
47
- this.destroyMask();
48
- }
49
- writeValue(value) {
50
- if (!this.nativeInputElement) {
51
- return;
52
- }
53
- this._renderer.setProperty(this.nativeInputElement, 'value', value ?? '');
54
- }
55
- registerOnChange(fn) {
56
- this._onChange = fn;
57
- const parser = this._inputMaskOptions?.parser;
58
- this.onInput = value => this._onChange(parser ? parser(value) : value);
59
- }
60
- registerOnTouched(fn) {
61
- this.onTouched = fn;
62
- }
63
- setDisabledState(isDisabled) {
64
- if (!this.nativeInputElement) {
65
- return;
66
- }
67
- this._renderer.setProperty(this.nativeInputElement, 'disabled', isDisabled);
68
- }
69
- updateMask() {
70
- this.destroyMask();
71
- this.createMask();
72
- this.registerOnChange(this._onChange);
73
- }
74
- createMask() {
75
- if (!this._platform.isBrowser || !this.nativeInputElement || this._inputMaskOptions === null || Object.keys(this._inputMaskOptions).length === 0) {
76
- return;
77
- }
78
- const { parser, ...options } = this._inputMaskOptions;
79
- this.inputMaskPlugin = this._ngZone.runOutsideAngular(() => new InputmaskConstructor(options).mask(this.nativeInputElement));
80
- const setValue$ = fromEvent(this.nativeInputElement, 'setvalue');
81
- const cleared$ = fromEvent(this.nativeInputElement, 'cleared');
82
- this.eventsSubscription = merge(setValue$, cleared$)
83
- .subscribe(event => this.onInput(event?.target?.['value']));
84
- const control = this._control?.control;
85
- if (!control) {
86
- return;
87
- }
88
- setTimeout(() => control?.updateValueAndValidity());
89
- }
90
- destroyMask() {
91
- this.eventsSubscription?.unsubscribe();
92
- this.eventsSubscription = null;
93
- this.inputMaskPlugin?.remove();
94
- this.inputMaskPlugin = null;
95
- }
96
- }
97
- BbInputMask.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: BbInputMask, deps: [{ token: i0.NgZone }, { token: i1.Platform }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
98
- BbInputMask.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.4", type: BbInputMask, selector: "input[bbInputMask]", inputs: { bbInputMask: "bbInputMask" }, host: { listeners: { "input": "onInput($event.target.value)", "blur": "onTouched($event.target.value)" } }, ngImport: i0 });
99
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: BbInputMask, decorators: [{
100
- type: Directive,
101
- args: [{
102
- selector: 'input[bbInputMask]'
103
- }]
104
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.Platform }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i2.NgControl, decorators: [{
105
- type: Optional
106
- }, {
107
- type: Self
108
- }] }]; }, propDecorators: { bbInputMask: [{
109
- type: Input
110
- }], onInput: [{
111
- type: HostListener,
112
- args: ['input', ['$event.target.value']]
113
- }], onTouched: [{
114
- type: HostListener,
115
- args: ['blur', ['$event.target.value']]
116
- }] } });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbWFzay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL21hc2tpbmcvc3JjL2xpYi9pbnB1dC1tYXNrLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQTZCLFFBQVEsRUFBYSxJQUFJLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHL0gsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFHcEQsT0FBTyxVQUFVLE1BQU0sV0FBVyxDQUFDOzs7O0FBRW5DLE1BQU0sb0JBQW9CLEdBQUksVUFBd0QsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDO0FBSzdHLE1BQU0sT0FBTyxXQUFXO0lBb0JwQixZQUFvQixPQUFlLEVBQ2YsU0FBbUIsRUFDbkIsU0FBb0IsRUFDcEIsV0FBeUMsRUFDckIsUUFBb0I7UUFKeEMsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixnQkFBVyxHQUFYLFdBQVcsQ0FBOEI7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQVo1RCxTQUFTO1FBQ1Qsb0JBQWUsR0FBOEIsSUFBSSxDQUFDO1FBQ2xELHVCQUFrQixHQUE0QixJQUFJLENBQUM7UUFDbkQsdUJBQWtCLEdBQXdCLElBQUksQ0FBQztRQUV2QyxzQkFBaUIsR0FBK0IsSUFBSSxDQUFDO1FBQ3JELGNBQVMsR0FBOEIsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQWMxRCxZQUFPLEdBQXlCLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBR2pELGNBQVMsR0FBZSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxD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QztJQUNoQyxDQUFDOzt3R0EvR1EsV0FBVzs0RkFBWCxXQUFXOzJGQUFYLFdBQVc7a0JBSHZCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtpQkFDakM7OzBCQXlCZ0IsUUFBUTs7MEJBQUksSUFBSTs0Q0FyQnpCLFdBQVc7c0JBRGQsS0FBSztnQkE4Qk4sT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO2dCQUk5QyxTQUFTO3NCQURSLFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgTmdab25lLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIFJlbmRlcmVyMiwgU2VsZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCwgVmFsaWRhdG9yfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0lucHV0TWFza09wdGlvbnN9IGZyb20gJy4vaW5wdXQtbWFzay5pbnRlcmZhY2UnO1xuaW1wb3J0IHtmcm9tRXZlbnQsIG1lcmdlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB0eXBlIElucHV0bWFzayBmcm9tICdpbnB1dG1hc2snO1xuaW1wb3J0IF9JbnB1dG1hc2sgZnJvbSAnaW5wdXRtYXNrJztcblxuY29uc3QgSW5wdXRtYXNrQ29uc3RydWN0b3IgPSAoX0lucHV0bWFzayBhcyB1bmtub3duIGFzIHsgZGVmYXVsdD86IElucHV0bWFzay5TdGF0aWMgfSkuZGVmYXVsdCB8fCBfSW5wdXRtYXNrO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2lucHV0W2JiSW5wdXRNYXNrXSdcbn0pXG5leHBvcnQgY2xhc3MgQmJJbnB1dE1hc2s8VCA9IGFueT4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBiYklucHV0TWFzayhtYXNrOiBJbnB1dE1hc2tPcHRpb25zPFQ+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIW1hc2spIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2lucHV0TWFza09wdGlvbnMgPSBtYXNrO1xuICAgICAgICB0aGlzLnVwZGF0ZU1hc2soKTtcbiAgICB9XG5cbiAgICAvLyBTdGF0ZS5cbiAgICBpbnB1dE1hc2tQbHVnaW46IElucHV0bWFzay5JbnN0YW5jZSB8IG51bGwgPSBudWxsO1xuICAgIG5hdGl2ZUlucHV0RWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGV2ZW50c1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIF9pbnB1dE1hc2tPcHRpb25zOiBJbnB1dE1hc2tPcHRpb25zPFQ+IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogVCB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiAoe30pO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PixcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHByaXZhdGUgX2NvbnRyb2w/OiBOZ0NvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5uYXRpdmVJbnB1dEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLl9jb250cm9sICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdpbnB1dCcsIFsnJGV2ZW50LnRhcmdldC52YWx1ZSddKVxuICAgIG9uSW5wdXQ6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKF86IGFueSkgPT4gKHt9KTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInLCBbJyRldmVudC50YXJnZXQudmFsdWUnXSlcbiAgICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiAoe30pO1xuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLl9jb250cm9sLmNvbnRyb2w7XG4gICAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKGNvbnRyb2wudmFsaWRhdG9yID8gW2NvbnRyb2wudmFsaWRhdG9yLCB0aGlzLnZhbGlkYXRlXSA6IFt0aGlzLnZhbGlkYXRlXSk7XG4gICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lNYXNrKCk7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5uYXRpdmVJbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLm5hdGl2ZUlucHV0RWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUgPz8gJycpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogVCB8IG51bGwpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gdGhpcy5faW5wdXRNYXNrT3B0aW9ucz8ucGFyc2VyO1xuICAgICAgICB0aGlzLm9uSW5wdXQgPSB2YWx1ZSA9PiB0aGlzLl9vbkNoYW5nZShwYXJzZXIgPyBwYXJzZXIodmFsdWUpIDogdmFsdWUpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdGhpcy5uYXRpdmVJbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLm5hdGl2ZUlucHV0RWxlbWVudCwgJ2Rpc2FibGVkJywgaXNEaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiAhY29udHJvbC52YWx1ZSB8fCAhdGhpcy5pbnB1dE1hc2tQbHVnaW4gfHwgdGhpcy5pbnB1dE1hc2tQbHVnaW4/LmlzVmFsaWQoKVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB7aW5wdXRNYXNrOiB0cnVlfTtcblxuICAgIHByaXZhdGUgdXBkYXRlTWFzaygpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95TWFzaygpO1xuICAgICAgICB0aGlzLmNyZWF0ZU1hc2soKTtcbiAgICAgICAgdGhpcy5yZWdpc3Rlck9uQ2hhbmdlKHRoaXMuX29uQ2hhbmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU1hc2soKSB7XG4gICAgICAgIGlmICghdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyIHx8ICF0aGlzLm5hdGl2ZUlucHV0RWxlbWVudCB8fCB0aGlzLl9pbnB1dE1hc2tPcHRpb25zID09PSBudWxsIHx8IE9iamVjdC5rZXlzKHRoaXMuX2lucHV0TWFza09wdGlvbnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge3BhcnNlciwgLi4ub3B0aW9uc30gPSB0aGlzLl9pbnB1dE1hc2tPcHRpb25zO1xuICAgICAgICB0aGlzLmlucHV0TWFza1BsdWdpbiA9IHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBuZXcgSW5wdXRtYXNrQ29uc3RydWN0b3Iob3B0aW9ucykubWFzayh0aGlzLm5hdGl2ZUlucHV0RWxlbWVudCkpO1xuXG4gICAgICAgIGNvbnN0IHNldFZhbHVlJCA9IGZyb21FdmVudCh0aGlzLm5hdGl2ZUlucHV0RWxlbWVudCwgJ3NldHZhbHVlJyk7XG4gICAgICAgIGNvbnN0IGNsZWFyZWQkID0gZnJvbUV2ZW50KHRoaXMubmF0aXZlSW5wdXRFbGVtZW50LCAnY2xlYXJlZCcpO1xuXG4gICAgICAgIHRoaXMuZXZlbnRzU3Vic2NyaXB0aW9uID0gbWVyZ2Uoc2V0VmFsdWUkLCBjbGVhcmVkJClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5vbklucHV0KGV2ZW50Py50YXJnZXQ/LlsndmFsdWUnXSkpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLl9jb250cm9sPy5jb250cm9sO1xuICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95TWFzaygpIHtcbiAgICAgICAgdGhpcy5ldmVudHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZXZlbnRzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbnB1dE1hc2tQbHVnaW4/LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLmlucHV0TWFza1BsdWdpbiA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gUmVxdWlyZWQgc28gdGhhdCB0aGUgdGVtcGxhdGUgdHlwZSBjaGVja2VyIGNhbiBpbmZlciB0aGUgdHlwZSBvZiB0aGUgY29lcmNlZCBpbnB1dHMuXG4gICAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2JiSW5wdXRNYXNrOiBJbnB1dE1hc2tPcHRpb25zPGFueT4gfCBudWxsIHwgdW5kZWZpbmVkO1xuXG59XG4iXX0=