turbogui-angular 7.0.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/esm2020/main/controller/browser.service.mjs +48 -0
  2. package/esm2020/main/controller/dialog.service.mjs +324 -0
  3. package/esm2020/main/controller/globalerror.service.mjs +68 -0
  4. package/esm2020/main/controller/http.service.mjs +70 -0
  5. package/esm2020/main/controller/localization.service.mjs +22 -0
  6. package/esm2020/main/controller/notification.service.mjs +56 -0
  7. package/esm2020/main/controller/user.service.mjs +124 -0
  8. package/esm2020/main/controller/views.service.mjs +113 -0
  9. package/esm2020/main/model/modules/turbogui-angular.module.mjs +140 -0
  10. package/esm2020/main/view/animations/fade.animation.mjs +35 -0
  11. package/esm2020/main/view/components/busy-state-base/busy-state-base.component.mjs +38 -0
  12. package/esm2020/main/view/components/button-base/button-base.component.mjs +180 -0
  13. package/esm2020/main/view/components/button-container/button-container.component.mjs +34 -0
  14. package/esm2020/main/view/components/button-image/button-image.component.mjs +47 -0
  15. package/esm2020/main/view/components/dialog-error/dialog-error.component.mjs +41 -0
  16. package/esm2020/main/view/components/dialog-multiple-option/dialog-multiple-option.component.mjs +38 -0
  17. package/esm2020/main/view/components/dialog-single-option/dialog-single-option.component.mjs +41 -0
  18. package/esm2020/main/view/components/dialog-single-selection-list/dialog-single-selection-list.component.mjs +112 -0
  19. package/esm2020/main/view/components/dialog-two-option/dialog-two-option.component.mjs +42 -0
  20. package/{esm2015/main/view/components/views-container/views-container.component.js → esm2020/main/view/components/views-container/views-container.component.mjs} +15 -13
  21. package/esm2020/main/view/directives/AutoFocusOnDisplayDirective.mjs +39 -0
  22. package/esm2020/main/view/directives/AutoSelectTextOnFocusDirective.mjs +39 -0
  23. package/esm2020/main/view/directives/ElementCreatedDirective.mjs +42 -0
  24. package/esm2020/main/view/directives/ElementDestroyedDirective.mjs +42 -0
  25. package/{esm2015/public_api.js → esm2020/public_api.mjs} +1 -1
  26. package/esm2020/turbogui-angular.mjs +5 -0
  27. package/fesm2015/turbogui-angular.mjs +1951 -0
  28. package/fesm2015/turbogui-angular.mjs.map +1 -0
  29. package/{fesm2015/turbogui-angular.js → fesm2020/turbogui-angular.mjs} +366 -298
  30. package/fesm2020/turbogui-angular.mjs.map +1 -0
  31. package/index.d.ts +6 -0
  32. package/main/controller/browser.service.d.ts +3 -8
  33. package/main/controller/browser.service.d.ts.map +1 -1
  34. package/main/controller/dialog.service.d.ts +3 -8
  35. package/main/controller/dialog.service.d.ts.map +1 -1
  36. package/main/controller/globalerror.service.d.ts +3 -0
  37. package/main/controller/globalerror.service.d.ts.map +1 -1
  38. package/main/controller/http.service.d.ts +3 -8
  39. package/main/controller/http.service.d.ts.map +1 -1
  40. package/main/controller/localization.service.d.ts +3 -8
  41. package/main/controller/localization.service.d.ts.map +1 -1
  42. package/main/controller/notification.service.d.ts +3 -8
  43. package/main/controller/notification.service.d.ts.map +1 -1
  44. package/main/controller/user.service.d.ts +3 -8
  45. package/main/controller/user.service.d.ts.map +1 -1
  46. package/main/controller/views.service.d.ts +3 -0
  47. package/main/controller/views.service.d.ts.map +1 -1
  48. package/main/model/modules/turbogui-angular.module.d.ts +23 -8
  49. package/main/model/modules/turbogui-angular.module.d.ts.map +1 -1
  50. package/main/view/animations/fade.animation.d.ts +3 -8
  51. package/main/view/animations/fade.animation.d.ts.map +1 -1
  52. package/main/view/components/busy-state-base/busy-state-base.component.d.ts +3 -8
  53. package/main/view/components/busy-state-base/busy-state-base.component.d.ts.map +1 -1
  54. package/main/view/components/button-base/button-base.component.d.ts +3 -0
  55. package/main/view/components/button-base/button-base.component.d.ts.map +1 -1
  56. package/main/view/components/button-container/button-container.component.d.ts +3 -8
  57. package/main/view/components/button-container/button-container.component.d.ts.map +1 -1
  58. package/main/view/components/button-image/button-image.component.d.ts +3 -0
  59. package/main/view/components/button-image/button-image.component.d.ts.map +1 -1
  60. package/main/view/components/dialog-error/dialog-error.component.d.ts +3 -8
  61. package/main/view/components/dialog-error/dialog-error.component.d.ts.map +1 -1
  62. package/main/view/components/dialog-multiple-option/dialog-multiple-option.component.d.ts +3 -8
  63. package/main/view/components/dialog-multiple-option/dialog-multiple-option.component.d.ts.map +1 -1
  64. package/main/view/components/dialog-single-option/dialog-single-option.component.d.ts +3 -8
  65. package/main/view/components/dialog-single-option/dialog-single-option.component.d.ts.map +1 -1
  66. package/main/view/components/dialog-single-selection-list/dialog-single-selection-list.component.d.ts +3 -8
  67. package/main/view/components/dialog-single-selection-list/dialog-single-selection-list.component.d.ts.map +1 -1
  68. package/main/view/components/dialog-two-option/dialog-two-option.component.d.ts +3 -8
  69. package/main/view/components/dialog-two-option/dialog-two-option.component.d.ts.map +1 -1
  70. package/main/view/components/views-container/views-container.component.d.ts +3 -0
  71. package/main/view/components/views-container/views-container.component.d.ts.map +1 -1
  72. package/main/view/directives/AutoFocusOnDisplayDirective.d.ts +3 -0
  73. package/main/view/directives/AutoFocusOnDisplayDirective.d.ts.map +1 -1
  74. package/main/view/directives/AutoSelectTextOnFocusDirective.d.ts +3 -0
  75. package/main/view/directives/AutoSelectTextOnFocusDirective.d.ts.map +1 -1
  76. package/main/view/directives/ElementCreatedDirective.d.ts +3 -0
  77. package/main/view/directives/ElementCreatedDirective.d.ts.map +1 -1
  78. package/main/view/directives/ElementDestroyedDirective.d.ts +3 -0
  79. package/main/view/directives/ElementDestroyedDirective.d.ts.map +1 -1
  80. package/package.json +25 -13
  81. package/turbogui-angular.d.ts.map +1 -1
  82. package/bundles/turbogui-angular.umd.js +0 -2431
  83. package/bundles/turbogui-angular.umd.js.map +0 -1
  84. package/esm2015/main/controller/browser.service.js +0 -48
  85. package/esm2015/main/controller/dialog.service.js +0 -329
  86. package/esm2015/main/controller/globalerror.service.js +0 -65
  87. package/esm2015/main/controller/http.service.js +0 -70
  88. package/esm2015/main/controller/localization.service.js +0 -19
  89. package/esm2015/main/controller/notification.service.js +0 -53
  90. package/esm2015/main/controller/user.service.js +0 -125
  91. package/esm2015/main/controller/views.service.js +0 -113
  92. package/esm2015/main/model/modules/turbogui-angular.module.js +0 -93
  93. package/esm2015/main/view/animations/fade.animation.js +0 -32
  94. package/esm2015/main/view/components/busy-state-base/busy-state-base.component.js +0 -39
  95. package/esm2015/main/view/components/button-base/button-base.component.js +0 -149
  96. package/esm2015/main/view/components/button-container/button-container.component.js +0 -35
  97. package/esm2015/main/view/components/button-image/button-image.component.js +0 -46
  98. package/esm2015/main/view/components/dialog-error/dialog-error.component.js +0 -39
  99. package/esm2015/main/view/components/dialog-multiple-option/dialog-multiple-option.component.js +0 -36
  100. package/esm2015/main/view/components/dialog-single-option/dialog-single-option.component.js +0 -39
  101. package/esm2015/main/view/components/dialog-single-selection-list/dialog-single-selection-list.component.js +0 -108
  102. package/esm2015/main/view/components/dialog-two-option/dialog-two-option.component.js +0 -40
  103. package/esm2015/main/view/directives/AutoFocusOnDisplayDirective.js +0 -40
  104. package/esm2015/main/view/directives/AutoSelectTextOnFocusDirective.js +0 -39
  105. package/esm2015/main/view/directives/ElementCreatedDirective.js +0 -38
  106. package/esm2015/main/view/directives/ElementDestroyedDirective.js +0 -38
  107. package/esm2015/turbogui-angular.js +0 -7
  108. package/fesm2015/turbogui-angular.js.map +0 -1
  109. package/main/controller/browser.service.ngfactory.d.ts.map +0 -1
  110. package/main/controller/dialog.service.ngfactory.d.ts.map +0 -1
  111. package/main/controller/globalerror.service.ngfactory.d.ts.map +0 -1
  112. package/main/controller/http.service.ngfactory.d.ts.map +0 -1
  113. package/main/controller/localization.service.ngfactory.d.ts.map +0 -1
  114. package/main/controller/notification.service.ngfactory.d.ts.map +0 -1
  115. package/main/controller/user.service.ngfactory.d.ts.map +0 -1
  116. package/main/controller/views.service.ngfactory.d.ts.map +0 -1
  117. package/main/model/modules/turbogui-angular.module.ngfactory.d.ts.map +0 -1
  118. package/main/view/animations/fade.animation.ngfactory.d.ts.map +0 -1
  119. package/main/view/components/busy-state-base/busy-state-base.component.ngfactory.d.ts.map +0 -1
  120. package/main/view/components/busy-state-base/busy-state-base.component.scss.shim.ngstyle.d.ts.map +0 -1
  121. package/main/view/components/button-container/button-container.component.ngfactory.d.ts.map +0 -1
  122. package/main/view/components/button-container/button-container.component.scss.shim.ngstyle.d.ts.map +0 -1
  123. package/main/view/components/button-image/button-image.component.ngfactory.d.ts.map +0 -1
  124. package/main/view/components/button-image/button-image.component.scss.shim.ngstyle.d.ts.map +0 -1
  125. package/main/view/components/dialog-error/dialog-error.component.ngfactory.d.ts.map +0 -1
  126. package/main/view/components/dialog-error/dialog-error.component.scss.shim.ngstyle.d.ts.map +0 -1
  127. package/main/view/components/dialog-multiple-option/dialog-multiple-option.component.ngfactory.d.ts.map +0 -1
  128. package/main/view/components/dialog-multiple-option/dialog-multiple-option.component.scss.shim.ngstyle.d.ts.map +0 -1
  129. package/main/view/components/dialog-single-option/dialog-single-option.component.ngfactory.d.ts.map +0 -1
  130. package/main/view/components/dialog-single-option/dialog-single-option.component.scss.shim.ngstyle.d.ts.map +0 -1
  131. package/main/view/components/dialog-single-selection-list/dialog-single-selection-list.component.ngfactory.d.ts.map +0 -1
  132. package/main/view/components/dialog-single-selection-list/dialog-single-selection-list.component.scss.shim.ngstyle.d.ts.map +0 -1
  133. package/main/view/components/dialog-two-option/dialog-two-option.component.ngfactory.d.ts.map +0 -1
  134. package/main/view/components/dialog-two-option/dialog-two-option.component.scss.shim.ngstyle.d.ts.map +0 -1
  135. package/main/view/components/views-container/views-container.component.ngfactory.d.ts.map +0 -1
  136. package/main/view/components/views-container/views-container.component.scss.shim.ngstyle.d.ts.map +0 -1
  137. package/main/view/directives/AutoFocusOnDisplayDirective.ngfactory.d.ts.map +0 -1
  138. package/main/view/directives/AutoSelectTextOnFocusDirective.ngfactory.d.ts.map +0 -1
  139. package/main/view/directives/ElementCreatedDirective.ngfactory.d.ts.map +0 -1
  140. package/main/view/directives/ElementDestroyedDirective.ngfactory.d.ts.map +0 -1
  141. package/turbogui-angular.d.ts +0 -7
  142. package/turbogui-angular.metadata.json +0 -1
  143. /package/{esm2015/main/controller/httpservice/HTTPServiceGetRequest.js → esm2020/main/controller/httpservice/HTTPServiceGetRequest.mjs} +0 -0
  144. /package/{esm2015/main/controller/httpservice/HTTPServicePostRequest.js → esm2020/main/controller/httpservice/HTTPServicePostRequest.mjs} +0 -0
  145. /package/{esm2015/main/managers/DelayedMethodCallManager.js → esm2020/main/managers/DelayedMethodCallManager.mjs} +0 -0
  146. /package/{esm2015/main/model/classes/GUINotification.js → esm2020/main/model/classes/GUINotification.mjs} +0 -0
  147. /package/{esm2015/main/model/classes/View.js → esm2020/main/model/classes/View.mjs} +0 -0
  148. /package/{esm2015/main/model/classes/ViewModel.js → esm2020/main/model/classes/ViewModel.mjs} +0 -0
  149. /package/{esm2015/main/model/classes/ViewService.js → esm2020/main/model/classes/ViewService.mjs} +0 -0
  150. /package/{esm2015/main/view/components/dialog-base/dialog-base.component.js → esm2020/main/view/components/dialog-base/dialog-base.component.mjs} +0 -0
  151. /package/{esm2015/main/view/components/dialog-options-base/dialog-options-base.component.js → esm2020/main/view/components/dialog-options-base/dialog-options-base.component.mjs} +0 -0
@@ -0,0 +1,180 @@
1
+ /**
2
+ * TurboGUI is A library that helps with the most common and generic UI elements and functionalities
3
+ *
4
+ * Website : -> http://www.turbogui.org
5
+ * License : -> Licensed under the Apache License, Version 2.0. You may not use this file except in compliance with the License.
6
+ * License Url : -> http://www.apache.org/licenses/LICENSE-2.0
7
+ * CopyRight : -> Copyright 2018 Edertone Advanded Solutions. https://www.edertone.com
8
+ */
9
+ import { HostBinding, HostListener, Input, Directive } from '@angular/core';
10
+ import * as i0 from "@angular/core";
11
+ /**
12
+ * This is the base class for all button components
13
+ */
14
+ export class ButtonBaseComponent {
15
+ constructor() {
16
+ /**
17
+ * Defines the actual opacity that is binded on the html part
18
+ */
19
+ this.currentOpacity = .7;
20
+ /**
21
+ * Defines the actual scale that is binded on the html part
22
+ */
23
+ this.currentScale = 'scale(1)';
24
+ /**
25
+ * Defines if the button can be clicked or not
26
+ */
27
+ this.pointerEvents = 'initial';
28
+ /**
29
+ * Specifies if the button animations must rollback when the user releases the mouse or pointer after pressing it
30
+ */
31
+ this.releaseOnMouseUp = true;
32
+ /**
33
+ * Specifies the amount of milliseconds that the button will vibrate when it gets clicked (only on compatible devices and browsers)
34
+ * Set it to 0 to disable click vibration
35
+ */
36
+ this.vibrateOnClick = 25;
37
+ /**
38
+ * Defines the button opacity when it is not clicked
39
+ */
40
+ this.defaultOpacity = .7;
41
+ /**
42
+ * Defines the image scale when it is not clicked
43
+ */
44
+ this.defaultScale = 1;
45
+ /**
46
+ * Defines the button opacity when it is hovered
47
+ */
48
+ this.hoverOpacity = .8;
49
+ /**
50
+ * Defines the image scale when it is hovered
51
+ */
52
+ this.hoverScale = 1;
53
+ /**
54
+ * Defines the button opacity when it is clicked
55
+ */
56
+ this.clickOpacity = 1;
57
+ /**
58
+ * Defines the image scale when it is clicked
59
+ */
60
+ this.clickScale = 1;
61
+ /**
62
+ * Defines the button opacity when it is disabled
63
+ */
64
+ this.disabledOpacity = .2;
65
+ /**
66
+ * Stores the value that tells if the button is enabled or disabled
67
+ */
68
+ this._enabled = true;
69
+ }
70
+ /**
71
+ * Specifies if the button is enabled or disabled
72
+ */
73
+ set enabled(v) {
74
+ this._enabled = v;
75
+ this.currentOpacity = v ? this.defaultOpacity : this.disabledOpacity;
76
+ this.pointerEvents = v ? 'initial' : 'none';
77
+ }
78
+ ;
79
+ /**
80
+ * Set button default values
81
+ */
82
+ ngOnInit() {
83
+ this.currentOpacity = this._enabled ? this.defaultOpacity : this.disabledOpacity;
84
+ this.currentScale = 'scale(1)';
85
+ }
86
+ /**
87
+ * Listens for the mouse over the button component
88
+ */
89
+ onMouseOver() {
90
+ if (this._enabled) {
91
+ this.currentOpacity = this.hoverOpacity;
92
+ this.currentScale = 'scale(' + this.hoverScale + ')';
93
+ }
94
+ }
95
+ /**
96
+ * Listens for the mouse out of the button component
97
+ */
98
+ onMouseOut() {
99
+ if (this._enabled) {
100
+ this.currentOpacity = this.defaultOpacity;
101
+ this.currentScale = 'scale(' + this.defaultScale + ')';
102
+ }
103
+ }
104
+ /**
105
+ * Listens for the mouse down on the button component
106
+ */
107
+ onMouseDown() {
108
+ if (this._enabled) {
109
+ this.currentOpacity = this.clickOpacity;
110
+ this.currentScale = 'scale(' + this.clickScale + ')';
111
+ }
112
+ }
113
+ /**
114
+ * Listens for the mouse up of the button component
115
+ */
116
+ onMouseUp() {
117
+ if (this._enabled) {
118
+ if (this.vibrateOnClick > 0 && window.navigator && window.navigator.vibrate) {
119
+ window.navigator.vibrate(this.vibrateOnClick);
120
+ }
121
+ if (this.releaseOnMouseUp) {
122
+ this.currentOpacity = this.defaultOpacity;
123
+ this.currentScale = 'scale(' + this.defaultScale + ')';
124
+ }
125
+ }
126
+ }
127
+ }
128
+ ButtonBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
129
+ ButtonBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: ButtonBaseComponent, inputs: { releaseOnMouseUp: "releaseOnMouseUp", vibrateOnClick: "vibrateOnClick", defaultOpacity: "defaultOpacity", defaultScale: "defaultScale", hoverOpacity: "hoverOpacity", hoverScale: "hoverScale", clickOpacity: "clickOpacity", clickScale: "clickScale", disabledOpacity: "disabledOpacity", enabled: "enabled" }, host: { listeners: { "mouseover": "onMouseOver()", "mouseout": "onMouseOut()", "pointerout": "onMouseOut()", "pointerleave": "onMouseOut()", "pointerdown": "onMouseDown()", "pointerup": "onMouseUp()" }, properties: { "style.opacity": "this.currentOpacity", "style.transform": "this.currentScale", "style.pointer-events": "this.pointerEvents" } }, ngImport: i0 });
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonBaseComponent, decorators: [{
131
+ type: Directive
132
+ }], propDecorators: { currentOpacity: [{
133
+ type: HostBinding,
134
+ args: ['style.opacity']
135
+ }], currentScale: [{
136
+ type: HostBinding,
137
+ args: ['style.transform']
138
+ }], pointerEvents: [{
139
+ type: HostBinding,
140
+ args: ['style.pointer-events']
141
+ }], releaseOnMouseUp: [{
142
+ type: Input
143
+ }], vibrateOnClick: [{
144
+ type: Input
145
+ }], defaultOpacity: [{
146
+ type: Input
147
+ }], defaultScale: [{
148
+ type: Input
149
+ }], hoverOpacity: [{
150
+ type: Input
151
+ }], hoverScale: [{
152
+ type: Input
153
+ }], clickOpacity: [{
154
+ type: Input
155
+ }], clickScale: [{
156
+ type: Input
157
+ }], disabledOpacity: [{
158
+ type: Input
159
+ }], enabled: [{
160
+ type: Input
161
+ }], onMouseOver: [{
162
+ type: HostListener,
163
+ args: ['mouseover']
164
+ }], onMouseOut: [{
165
+ type: HostListener,
166
+ args: ['mouseout']
167
+ }, {
168
+ type: HostListener,
169
+ args: ['pointerout']
170
+ }, {
171
+ type: HostListener,
172
+ args: ['pointerleave']
173
+ }], onMouseDown: [{
174
+ type: HostListener,
175
+ args: ['pointerdown']
176
+ }], onMouseUp: [{
177
+ type: HostListener,
178
+ args: ['pointerup']
179
+ }] } });
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVyYm9ndWktYW5ndWxhci9zcmMvbWFpbi92aWV3L2NvbXBvbmVudHMvYnV0dG9uLWJhc2UvYnV0dG9uLWJhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUdwRjs7R0FFRztBQUVILE1BQU0sT0FBZ0IsbUJBQW1CO0lBRHpDO1FBSUk7O1dBRUc7UUFDMkIsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFHbEQ7O1dBRUc7UUFDNkIsaUJBQVksR0FBRyxVQUFVLENBQUM7UUFHMUQ7O1dBRUc7UUFDa0Msa0JBQWEsR0FBRyxTQUFTLENBQUM7UUFHL0Q7O1dBRUc7UUFDTSxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFHakM7OztXQUdHO1FBQ00sbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFHN0I7O1dBRUc7UUFDTSxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUc3Qjs7V0FFRztRQUNNLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRzFCOztXQUVHO1FBQ00saUJBQVksR0FBRyxFQUFFLENBQUM7UUFHM0I7O1dBRUc7UUFDTSxlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBR3hCOztXQUVHO1FBQ00saUJBQVksR0FBRyxDQUFDLENBQUM7UUFHMUI7O1dBRUc7UUFDTSxlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBR3hCOztXQUVHO1FBQ00sb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFHOUI7O1dBRUc7UUFDSyxhQUFRLEdBQUcsSUFBSSxDQUFDO0tBMEYzQjtJQXZGRzs7T0FFRztJQUNILElBQWEsT0FBTyxDQUFDLENBQVM7UUFFMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFFbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7UUFFckUsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2hELENBQUM7SUFBQSxDQUFDO0lBR0Y7O09BRUc7SUFDSCxRQUFRO1FBRUosSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2pGLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDO0lBQ25DLENBQUM7SUFHRDs7T0FFRztJQUVILFdBQVc7UUFFUCxJQUFHLElBQUksQ0FBQyxRQUFRLEVBQUM7WUFFYixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDeEMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLEdBQUksSUFBSSxDQUFDLFVBQTRCLEdBQUcsR0FBRyxDQUFDO1NBQzNFO0lBQ0wsQ0FBQztJQUdEOztPQUVHO0lBSUgsVUFBVTtRQUVOLElBQUcsSUFBSSxDQUFDLFFBQVEsRUFBQztZQUViLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsR0FBSSxJQUFJLENBQUMsWUFBOEIsR0FBRyxHQUFHLENBQUM7U0FDN0U7SUFDTCxDQUFDO0lBR0Q7O09BRUc7SUFFSCxXQUFXO1FBRVAsSUFBRyxJQUFJLENBQUMsUUFBUSxFQUFDO1lBRWIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxHQUFJLElBQUksQ0FBQyxVQUE0QixHQUFHLEdBQUcsQ0FBQztTQUMzRTtJQUNMLENBQUM7SUFHRDs7T0FFRztJQUVILFNBQVM7UUFFTCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFFZixJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7Z0JBRXpFLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNqRDtZQUVELElBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFDO2dCQUVyQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxHQUFJLElBQUksQ0FBQyxZQUE4QixHQUFHLEdBQUcsQ0FBQzthQUM3RTtTQUNKO0lBQ0wsQ0FBQzs7Z0hBeEtpQixtQkFBbUI7b0dBQW5CLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQUR4QyxTQUFTOzhCQU93QixjQUFjO3NCQUEzQyxXQUFXO3VCQUFDLGVBQWU7Z0JBTUksWUFBWTtzQkFBM0MsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBTU8sYUFBYTtzQkFBakQsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBTTFCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFPRyxjQUFjO3NCQUF0QixLQUFLO2dCQU1HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBTUcsWUFBWTtzQkFBcEIsS0FBSztnQkFNRyxZQUFZO3NCQUFwQixLQUFLO2dCQU1HLFVBQVU7c0JBQWxCLEtBQUs7Z0JBTUcsWUFBWTtzQkFBcEIsS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLO2dCQU1HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBWU8sT0FBTztzQkFBbkIsS0FBSztnQkF3Qk4sV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVc7Z0JBaUJ6QixVQUFVO3NCQUhULFlBQVk7dUJBQUMsVUFBVTs7c0JBQ3ZCLFlBQVk7dUJBQUMsWUFBWTs7c0JBQ3pCLFlBQVk7dUJBQUMsY0FBYztnQkFlNUIsV0FBVztzQkFEVixZQUFZO3VCQUFDLGFBQWE7Z0JBZTNCLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR1cmJvR1VJIGlzIEEgbGlicmFyeSB0aGF0IGhlbHBzIHdpdGggdGhlIG1vc3QgY29tbW9uIGFuZCBnZW5lcmljIFVJIGVsZW1lbnRzIGFuZCBmdW5jdGlvbmFsaXRpZXNcclxuICpcclxuICogV2Vic2l0ZSA6IC0+IGh0dHA6Ly93d3cudHVyYm9ndWkub3JnXHJcbiAqIExpY2Vuc2UgOiAtPiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIExpY2Vuc2UgVXJsIDogLT4gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAqIENvcHlSaWdodCA6IC0+IENvcHlyaWdodCAyMDE4IEVkZXJ0b25lIEFkdmFuZGVkIFNvbHV0aW9ucy4gaHR0cHM6Ly93d3cuZWRlcnRvbmUuY29tXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5cclxuLyoqXHJcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBidXR0b24gY29tcG9uZW50c1xyXG4gKi9cclxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnV0dG9uQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVmaW5lcyB0aGUgYWN0dWFsIG9wYWNpdHkgdGhhdCBpcyBiaW5kZWQgb24gdGhlIGh0bWwgcGFydFxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm9wYWNpdHknKSBjdXJyZW50T3BhY2l0eSA9IC43O1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgdGhlIGFjdHVhbCBzY2FsZSB0aGF0IGlzIGJpbmRlZCBvbiB0aGUgaHRtbCBwYXJ0XHJcbiAgICAgKi9cclxuICAgIEBIb3N0QmluZGluZygnc3R5bGUudHJhbnNmb3JtJykgY3VycmVudFNjYWxlID0gJ3NjYWxlKDEpJztcclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgaWYgdGhlIGJ1dHRvbiBjYW4gYmUgY2xpY2tlZCBvciBub3RcclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5wb2ludGVyLWV2ZW50cycpIHBvaW50ZXJFdmVudHMgPSAnaW5pdGlhbCc7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmaWVzIGlmIHRoZSBidXR0b24gYW5pbWF0aW9ucyBtdXN0IHJvbGxiYWNrIHdoZW4gdGhlIHVzZXIgcmVsZWFzZXMgdGhlIG1vdXNlIG9yIHBvaW50ZXIgYWZ0ZXIgcHJlc3NpbmcgaXRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcmVsZWFzZU9uTW91c2VVcCA9IHRydWU7XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgdGhhdCB0aGUgYnV0dG9uIHdpbGwgdmlicmF0ZSB3aGVuIGl0IGdldHMgY2xpY2tlZCAob25seSBvbiBjb21wYXRpYmxlIGRldmljZXMgYW5kIGJyb3dzZXJzKVxyXG4gICAgICogU2V0IGl0IHRvIDAgdG8gZGlzYWJsZSBjbGljayB2aWJyYXRpb25cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgdmlicmF0ZU9uQ2xpY2sgPSAyNTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIHRoZSBidXR0b24gb3BhY2l0eSB3aGVuIGl0IGlzIG5vdCBjbGlja2VkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGRlZmF1bHRPcGFjaXR5ID0gLjc7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVmaW5lcyB0aGUgaW1hZ2Ugc2NhbGUgd2hlbiBpdCBpcyBub3QgY2xpY2tlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBkZWZhdWx0U2NhbGUgPSAxO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgdGhlIGJ1dHRvbiBvcGFjaXR5IHdoZW4gaXQgaXMgaG92ZXJlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBob3Zlck9wYWNpdHkgPSAuODtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIHRoZSBpbWFnZSBzY2FsZSB3aGVuIGl0IGlzIGhvdmVyZWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgaG92ZXJTY2FsZSA9IDE7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVmaW5lcyB0aGUgYnV0dG9uIG9wYWNpdHkgd2hlbiBpdCBpcyBjbGlja2VkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGNsaWNrT3BhY2l0eSA9IDE7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVmaW5lcyB0aGUgaW1hZ2Ugc2NhbGUgd2hlbiBpdCBpcyBjbGlja2VkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGNsaWNrU2NhbGUgPSAxO1xyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogRGVmaW5lcyB0aGUgYnV0dG9uIG9wYWNpdHkgd2hlbiBpdCBpcyBkaXNhYmxlZFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZE9wYWNpdHkgPSAuMjtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yZXMgdGhlIHZhbHVlIHRoYXQgdGVsbHMgaWYgdGhlIGJ1dHRvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2VuYWJsZWQgPSB0cnVlO1xyXG4gICAgXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGJ1dHRvbiBpcyBlbmFibGVkIG9yIGRpc2FibGVkXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHNldCBlbmFibGVkKHY6Ym9vbGVhbil7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHY7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jdXJyZW50T3BhY2l0eSA9IHYgPyB0aGlzLmRlZmF1bHRPcGFjaXR5IDogdGhpcy5kaXNhYmxlZE9wYWNpdHk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wb2ludGVyRXZlbnRzID0gdiA/ICdpbml0aWFsJyA6ICdub25lJzsgXHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBidXR0b24gZGVmYXVsdCB2YWx1ZXNcclxuICAgICAqL1xyXG4gICAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudE9wYWNpdHkgPSB0aGlzLl9lbmFibGVkID8gdGhpcy5kZWZhdWx0T3BhY2l0eSA6IHRoaXMuZGlzYWJsZWRPcGFjaXR5O1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNjYWxlID0gJ3NjYWxlKDEpJztcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0ZW5zIGZvciB0aGUgbW91c2Ugb3ZlciB0aGUgYnV0dG9uIGNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZW92ZXInKVxyXG4gICAgb25Nb3VzZU92ZXIoKSB7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuX2VuYWJsZWQpe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50T3BhY2l0eSA9IHRoaXMuaG92ZXJPcGFjaXR5O1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTY2FsZSA9ICdzY2FsZSgnICsgKHRoaXMuaG92ZXJTY2FsZSBhcyBhbnkgYXMgc3RyaW5nKSArICcpJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGlzdGVucyBmb3IgdGhlIG1vdXNlIG91dCBvZiB0aGUgYnV0dG9uIGNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZW91dCcpXHJcbiAgICBASG9zdExpc3RlbmVyKCdwb2ludGVyb3V0JylcclxuICAgIEBIb3N0TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScpXHJcbiAgICBvbk1vdXNlT3V0KCkge1xyXG5cclxuICAgICAgICBpZih0aGlzLl9lbmFibGVkKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE9wYWNpdHkgPSB0aGlzLmRlZmF1bHRPcGFjaXR5O1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTY2FsZSA9ICdzY2FsZSgnICsgKHRoaXMuZGVmYXVsdFNjYWxlIGFzIGFueSBhcyBzdHJpbmcpICsgJyknO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0ZW5zIGZvciB0aGUgbW91c2UgZG93biBvbiB0aGUgYnV0dG9uIGNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASG9zdExpc3RlbmVyKCdwb2ludGVyZG93bicpXHJcbiAgICBvbk1vdXNlRG93bigpIHtcclxuXHJcbiAgICAgICAgaWYodGhpcy5fZW5hYmxlZCl7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRPcGFjaXR5ID0gdGhpcy5jbGlja09wYWNpdHk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNjYWxlID0gJ3NjYWxlKCcgKyAodGhpcy5jbGlja1NjYWxlIGFzIGFueSBhcyBzdHJpbmcpICsgJyknOyBcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGlzdGVucyBmb3IgdGhlIG1vdXNlIHVwIG9mIHRoZSBidXR0b24gY29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3BvaW50ZXJ1cCcpXHJcbiAgICBvbk1vdXNlVXAoKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodGhpcy52aWJyYXRlT25DbGljayA+IDAgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnZpYnJhdGUpIHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgd2luZG93Lm5hdmlnYXRvci52aWJyYXRlKHRoaXMudmlicmF0ZU9uQ2xpY2spO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZih0aGlzLnJlbGVhc2VPbk1vdXNlVXApe1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRPcGFjaXR5ID0gdGhpcy5kZWZhdWx0T3BhY2l0eTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNjYWxlID0gJ3NjYWxlKCcgKyAodGhpcy5kZWZhdWx0U2NhbGUgYXMgYW55IGFzIHN0cmluZykgKyAnKSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,34 @@
1
+ /**
2
+ * TurboGUI is A library that helps with the most common and generic UI elements and functionalities
3
+ *
4
+ * Website : -> http://www.turbogui.org
5
+ * License : -> Licensed under the Apache License, Version 2.0. You may not use this file except in compliance with the License.
6
+ * License Url : -> http://www.apache.org/licenses/LICENSE-2.0
7
+ * CopyRight : -> Copyright 2018 Edertone Advanded Solutions. https://www.edertone.com
8
+ */
9
+ import { Component, HostBinding } from '@angular/core';
10
+ import { FadeAnimationClass } from '../../animations/fade.animation';
11
+ import { ButtonBaseComponent } from '../../../view/components/button-base/button-base.component';
12
+ import * as i0 from "@angular/core";
13
+ /**
14
+ * This component is a basic button without visual appearance, that is used as a container to load any content.
15
+ */
16
+ export class ButtonContainerComponent extends ButtonBaseComponent {
17
+ constructor() {
18
+ super(...arguments);
19
+ /**
20
+ * This is used to attach the fade animation directly to this component so it fades in and out when created and removed from the app
21
+ */
22
+ this.buttonFade = true;
23
+ }
24
+ }
25
+ ButtonContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonContainerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
26
+ ButtonContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ButtonContainerComponent, selector: "tg-button-container", host: { properties: { "@buttonFade": "this.buttonFade" } }, usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>", styles: [":host{-webkit-user-select:none;-moz-user-select:none;user-select:none;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:opacity .3s ease,transform .2s cubic-bezier(.04,.62,.58,1);display:flex;justify-content:center;align-items:center}\n"], animations: [FadeAnimationClass.getTrigger('buttonFade', '300ms ease', '300ms ease')] });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonContainerComponent, decorators: [{
28
+ type: Component,
29
+ args: [{ selector: 'tg-button-container', animations: [FadeAnimationClass.getTrigger('buttonFade', '300ms ease', '300ms ease')], template: "<ng-content></ng-content>", styles: [":host{-webkit-user-select:none;-moz-user-select:none;user-select:none;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:opacity .3s ease,transform .2s cubic-bezier(.04,.62,.58,1);display:flex;justify-content:center;align-items:center}\n"] }]
30
+ }], propDecorators: { buttonFade: [{
31
+ type: HostBinding,
32
+ args: ['@buttonFade']
33
+ }] } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dXJib2d1aS1hbmd1bGFyL3NyYy9tYWluL3ZpZXcvY29tcG9uZW50cy9idXR0b24tY29udGFpbmVyL2J1dHRvbi1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVyYm9ndWktYW5ndWxhci9zcmMvbWFpbi92aWV3L2NvbXBvbmVudHMvYnV0dG9uLWNvbnRhaW5lci9idXR0b24tY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0REFBNEQsQ0FBQzs7QUFHakc7O0dBRUc7QUFTSCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsbUJBQW1CO0lBUmpFOztRQVdJOztXQUVHO1FBQ3lCLGVBQVUsR0FBRyxJQUFJLENBQUM7S0FDakQ7O3FIQVBZLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLDhJQ3pCckMsMkJBQXlCLHdTRG9CWCxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDOzJGQUsxRSx3QkFBd0I7a0JBUnBDLFNBQVM7K0JBQ0UscUJBQXFCLGNBRW5CLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7OEJBV3ZELFVBQVU7c0JBQXJDLFdBQVc7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBUdXJib0dVSSBpcyBBIGxpYnJhcnkgdGhhdCBoZWxwcyB3aXRoIHRoZSBtb3N0IGNvbW1vbiBhbmQgZ2VuZXJpYyBVSSBlbGVtZW50cyBhbmQgZnVuY3Rpb25hbGl0aWVzXHJcbiAqXHJcbiAqIFdlYnNpdGUgOiAtPiBodHRwOi8vd3d3LnR1cmJvZ3VpLm9yZ1xyXG4gKiBMaWNlbnNlIDogLT4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gKiBMaWNlbnNlIFVybCA6IC0+IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gKiBDb3B5UmlnaHQgOiAtPiBDb3B5cmlnaHQgMjAxOCBFZGVydG9uZSBBZHZhbmRlZCBTb2x1dGlvbnMuIGh0dHBzOi8vd3d3LmVkZXJ0b25lLmNvbVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmFkZUFuaW1hdGlvbkNsYXNzIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9ucy9mYWRlLmFuaW1hdGlvbic7XHJcbmltcG9ydCB7IEJ1dHRvbkJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi92aWV3L2NvbXBvbmVudHMvYnV0dG9uLWJhc2UvYnV0dG9uLWJhc2UuY29tcG9uZW50JztcclxuXHJcblxyXG4vKipcclxuICogVGhpcyBjb21wb25lbnQgaXMgYSBiYXNpYyBidXR0b24gd2l0aG91dCB2aXN1YWwgYXBwZWFyYW5jZSwgdGhhdCBpcyB1c2VkIGFzIGEgY29udGFpbmVyIHRvIGxvYWQgYW55IGNvbnRlbnQuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RnLWJ1dHRvbi1jb250YWluZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24tY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBhbmltYXRpb25zOiBbRmFkZUFuaW1hdGlvbkNsYXNzLmdldFRyaWdnZXIoJ2J1dHRvbkZhZGUnLCAnMzAwbXMgZWFzZScsICczMDBtcyBlYXNlJyldLFxyXG4gIHN0eWxlVXJsczogWycuL2J1dHRvbi1jb250YWluZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBCdXR0b25Db250YWluZXJDb21wb25lbnQgZXh0ZW5kcyBCdXR0b25CYXNlQ29tcG9uZW50IHtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gYXR0YWNoIHRoZSBmYWRlIGFuaW1hdGlvbiBkaXJlY3RseSB0byB0aGlzIGNvbXBvbmVudCBzbyBpdCBmYWRlcyBpbiBhbmQgb3V0IHdoZW4gY3JlYXRlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBhcHBcclxuICAgICAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdAYnV0dG9uRmFkZScpIGJ1dHRvbkZhZGUgPSB0cnVlO1xyXG59XHJcbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD4iXX0=
@@ -0,0 +1,47 @@
1
+ /**
2
+ * TurboGUI is A library that helps with the most common and generic UI elements and functionalities
3
+ *
4
+ * Website : -> http://www.turbogui.org
5
+ * License : -> Licensed under the Apache License, Version 2.0. You may not use this file except in compliance with the License.
6
+ * License Url : -> http://www.apache.org/licenses/LICENSE-2.0
7
+ * CopyRight : -> Copyright 2018 Edertone Advanded Solutions. https://www.edertone.com
8
+ */
9
+ import { Component, HostBinding, Input } from '@angular/core';
10
+ import { FadeAnimationClass } from '../../animations/fade.animation';
11
+ import { ButtonBaseComponent } from '../../../view/components/button-base/button-base.component';
12
+ import * as i0 from "@angular/core";
13
+ /**
14
+ * This component is a basic button that uses an image as its visual appearance
15
+ */
16
+ export class ButtonImageComponent extends ButtonBaseComponent {
17
+ constructor() {
18
+ super(...arguments);
19
+ /**
20
+ * This is used to attach the fade animation directly to this component so it fades in and out when created and removed from the app
21
+ */
22
+ this.buttonFade = true;
23
+ /**
24
+ * Defines the path to the image that is shown by this button
25
+ */
26
+ this.src = '';
27
+ /**
28
+ * Defines the percentual size of the image based on the button size. 100 means the image will fill the whole button,
29
+ * 50 only half, etc..
30
+ */
31
+ this.percentSize = 100;
32
+ }
33
+ }
34
+ ButtonImageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonImageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
35
+ ButtonImageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ButtonImageComponent, selector: "tg-button-image", inputs: { src: "src", percentSize: "percentSize" }, host: { properties: { "@buttonFade": "this.buttonFade" } }, usesInheritance: true, ngImport: i0, template: "<img src=\"{{src}}\"\r\n [style.width]=\"percentSize + '%'\"\r\n [style.height]=\"percentSize + '%'\" />", styles: [":host{-webkit-user-select:none;-moz-user-select:none;user-select:none;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:opacity .3s ease,transform .2s cubic-bezier(.04,.62,.58,1);display:flex;justify-content:center;align-items:center}img{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}\n"], animations: [FadeAnimationClass.getTrigger('buttonFade', '300ms ease', '300ms ease')] });
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ButtonImageComponent, decorators: [{
37
+ type: Component,
38
+ args: [{ selector: 'tg-button-image', animations: [FadeAnimationClass.getTrigger('buttonFade', '300ms ease', '300ms ease')], template: "<img src=\"{{src}}\"\r\n [style.width]=\"percentSize + '%'\"\r\n [style.height]=\"percentSize + '%'\" />", styles: [":host{-webkit-user-select:none;-moz-user-select:none;user-select:none;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:opacity .3s ease,transform .2s cubic-bezier(.04,.62,.58,1);display:flex;justify-content:center;align-items:center}img{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}\n"] }]
39
+ }], propDecorators: { buttonFade: [{
40
+ type: HostBinding,
41
+ args: ['@buttonFade']
42
+ }], src: [{
43
+ type: Input
44
+ }], percentSize: [{
45
+ type: Input
46
+ }] } });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLWltYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1cmJvZ3VpLWFuZ3VsYXIvc3JjL21haW4vdmlldy9jb21wb25lbnRzL2J1dHRvbi1pbWFnZS9idXR0b24taW1hZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVyYm9ndWktYW5ndWxhci9zcmMvbWFpbi92aWV3L2NvbXBvbmVudHMvYnV0dG9uLWltYWdlL2J1dHRvbi1pbWFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDOztBQUdqRzs7R0FFRztBQVNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxtQkFBbUI7SUFSN0Q7O1FBV0k7O1dBRUc7UUFDeUIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUc5Qzs7V0FFRztRQUNNLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFHbEI7OztXQUdHO1FBQ00sZ0JBQVcsR0FBRyxHQUFHLENBQUM7S0FDOUI7O2lIQXBCWSxvQkFBb0I7cUdBQXBCLG9CQUFvQiw4TEN6QmpDLGdIQUV5Qyx3YURrQjNCLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7MkZBSzFFLG9CQUFvQjtrQkFSaEMsU0FBUzsrQkFDRSxpQkFBaUIsY0FFZixDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDOzhCQVd2RCxVQUFVO3NCQUFyQyxXQUFXO3VCQUFDLGFBQWE7Z0JBTWpCLEdBQUc7c0JBQVgsS0FBSztnQkFPRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR1cmJvR1VJIGlzIEEgbGlicmFyeSB0aGF0IGhlbHBzIHdpdGggdGhlIG1vc3QgY29tbW9uIGFuZCBnZW5lcmljIFVJIGVsZW1lbnRzIGFuZCBmdW5jdGlvbmFsaXRpZXNcclxuICpcclxuICogV2Vic2l0ZSA6IC0+IGh0dHA6Ly93d3cudHVyYm9ndWkub3JnXHJcbiAqIExpY2Vuc2UgOiAtPiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIExpY2Vuc2UgVXJsIDogLT4gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAqIENvcHlSaWdodCA6IC0+IENvcHlyaWdodCAyMDE4IEVkZXJ0b25lIEFkdmFuZGVkIFNvbHV0aW9ucy4gaHR0cHM6Ly93d3cuZWRlcnRvbmUuY29tXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGYWRlQW5pbWF0aW9uQ2xhc3MgfSBmcm9tICcuLi8uLi9hbmltYXRpb25zL2ZhZGUuYW5pbWF0aW9uJztcclxuaW1wb3J0IHsgQnV0dG9uQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3ZpZXcvY29tcG9uZW50cy9idXR0b24tYmFzZS9idXR0b24tYmFzZS5jb21wb25lbnQnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBUaGlzIGNvbXBvbmVudCBpcyBhIGJhc2ljIGJ1dHRvbiB0aGF0IHVzZXMgYW4gaW1hZ2UgYXMgaXRzIHZpc3VhbCBhcHBlYXJhbmNlXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RnLWJ1dHRvbi1pbWFnZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi1pbWFnZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgYW5pbWF0aW9uczogW0ZhZGVBbmltYXRpb25DbGFzcy5nZXRUcmlnZ2VyKCdidXR0b25GYWRlJywgJzMwMG1zIGVhc2UnLCAnMzAwbXMgZWFzZScpXSxcclxuICBzdHlsZVVybHM6IFsnLi9idXR0b24taW1hZ2UuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBCdXR0b25JbWFnZUNvbXBvbmVudCBleHRlbmRzIEJ1dHRvbkJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBhdHRhY2ggdGhlIGZhZGUgYW5pbWF0aW9uIGRpcmVjdGx5IHRvIHRoaXMgY29tcG9uZW50IHNvIGl0IGZhZGVzIGluIGFuZCBvdXQgd2hlbiBjcmVhdGVkIGFuZCByZW1vdmVkIGZyb20gdGhlIGFwcFxyXG4gICAgICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ0BidXR0b25GYWRlJykgYnV0dG9uRmFkZSA9IHRydWU7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVmaW5lcyB0aGUgcGF0aCB0byB0aGUgaW1hZ2UgdGhhdCBpcyBzaG93biBieSB0aGlzIGJ1dHRvblxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBzcmMgPSAnJztcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIHRoZSBwZXJjZW50dWFsIHNpemUgb2YgdGhlIGltYWdlIGJhc2VkIG9uIHRoZSBidXR0b24gc2l6ZS4gMTAwIG1lYW5zIHRoZSBpbWFnZSB3aWxsIGZpbGwgdGhlIHdob2xlIGJ1dHRvbixcclxuICAgICAqIDUwIG9ubHkgaGFsZiwgZXRjLi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcGVyY2VudFNpemUgPSAxMDA7XHJcbn1cclxuIiwiPGltZyBzcmM9XCJ7e3NyY319XCJcclxuICAgIFtzdHlsZS53aWR0aF09XCJwZXJjZW50U2l6ZSArICclJ1wiXHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cInBlcmNlbnRTaXplICsgJyUnXCIgLz4iXX0=
@@ -0,0 +1,41 @@
1
+ /**
2
+ * TurboGUI is A library that helps with the most common and generic UI elements and functionalities
3
+ *
4
+ * Website : -> http://www.turbogui.org
5
+ * License : -> Licensed under the Apache License, Version 2.0. You may not use this file except in compliance with the License.
6
+ * License Url : -> http://www.apache.org/licenses/LICENSE-2.0
7
+ * CopyRight : -> Copyright 2018 Edertone Advanded Solutions. https://www.edertone.com
8
+ */
9
+ import { Component, Inject } from '@angular/core';
10
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
11
+ import { DialogOptionsBaseComponent } from '../dialog-options-base/dialog-options-base.component';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/material/dialog";
14
+ import * as i2 from "@angular/material/button";
15
+ import * as i3 from "@angular/common";
16
+ /**
17
+ * A dialog component with a single option button, to be used for error notifications
18
+ */
19
+ export class DialogErrorComponent extends DialogOptionsBaseComponent {
20
+ constructor(dialogRef, data) {
21
+ super();
22
+ this.dialogRef = dialogRef;
23
+ this.data = data;
24
+ if (data.texts.length < 1) {
25
+ throw new Error('DialogErrorComponent expects 2 texts: The title and optionally a description');
26
+ }
27
+ if (data.options.length !== 1) {
28
+ throw new Error('DialogErrorComponent expects only one option');
29
+ }
30
+ }
31
+ }
32
+ DialogErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogErrorComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
33
+ DialogErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DialogErrorComponent, selector: "tg-dialog-error", usesInheritance: true, ngImport: i0, template: "<div class=\"titleAndIconContainer\">\r\n <h3>\r\n {{data.texts[0]}}\r\n </h3>\r\n \r\n <!-- error icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\">\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" fill=\"#ff0000\" />\r\n </svg>\r\n \r\n</div>\r\n\r\n<p *ngIf=\"data.texts.length > 1\">\r\n {{data.texts[1]}}\r\n</p>\r\n\r\n<button mat-raised-button color=\"warn\"\r\n (click)=\"dialogRef.close(0)\">\r\n \r\n {{data.options[0]}}\r\n \r\n</button>", styles: [":host{position:relative;min-height:300px}.titleAndIconContainer{display:flex;flex-direction:row;align-items:center}h3{margin-top:0;margin-bottom:25px;width:82%}svg{width:18%;height:auto}p{margin-bottom:52px}button{float:right;width:50%;min-width:50px}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogErrorComponent, decorators: [{
35
+ type: Component,
36
+ args: [{ selector: 'tg-dialog-error', template: "<div class=\"titleAndIconContainer\">\r\n <h3>\r\n {{data.texts[0]}}\r\n </h3>\r\n \r\n <!-- error icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\">\r\n <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\r\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" fill=\"#ff0000\" />\r\n </svg>\r\n \r\n</div>\r\n\r\n<p *ngIf=\"data.texts.length > 1\">\r\n {{data.texts[1]}}\r\n</p>\r\n\r\n<button mat-raised-button color=\"warn\"\r\n (click)=\"dialogRef.close(0)\">\r\n \r\n {{data.options[0]}}\r\n \r\n</button>", styles: [":host{position:relative;min-height:300px}.titleAndIconContainer{display:flex;flex-direction:row;align-items:center}h3{margin-top:0;margin-bottom:25px;width:82%}svg{width:18%;height:auto}p{margin-bottom:52px}button{float:right;width:50%;min-width:50px}\n"] }]
37
+ }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
38
+ type: Inject,
39
+ args: [MAT_DIALOG_DATA]
40
+ }] }]; } });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWVycm9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1cmJvZ3VpLWFuZ3VsYXIvc3JjL21haW4vdmlldy9jb21wb25lbnRzL2RpYWxvZy1lcnJvci9kaWFsb2ctZXJyb3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVyYm9ndWktYW5ndWxhci9zcmMvbWFpbi92aWV3L2NvbXBvbmVudHMvZGlhbG9nLWVycm9yL2RpYWxvZy1lcnJvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQzs7Ozs7QUFHbEc7O0dBRUc7QUFRSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsMEJBQTBCO0lBRWhFLFlBQW1CLFNBQW1ELEVBQWtDLElBQVM7UUFFN0csS0FBSyxFQUFFLENBQUM7UUFGTyxjQUFTLEdBQVQsU0FBUyxDQUEwQztRQUFrQyxTQUFJLEdBQUosSUFBSSxDQUFLO1FBSTdHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBRXZCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEVBQThFLENBQUMsQ0FBQztTQUNuRztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBRTNCLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztTQUNuRTtJQUNMLENBQUM7O2lIQWZRLG9CQUFvQiw4Q0FFbUQsZUFBZTtxR0FGdEYsb0JBQW9CLDhFQ3hCakMsK3BCQXNCUzsyRkRFSSxvQkFBb0I7a0JBUGhDLFNBQVM7K0JBQ0UsaUJBQWlCOzswQkFRZ0QsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR1cmJvR1VJIGlzIEEgbGlicmFyeSB0aGF0IGhlbHBzIHdpdGggdGhlIG1vc3QgY29tbW9uIGFuZCBnZW5lcmljIFVJIGVsZW1lbnRzIGFuZCBmdW5jdGlvbmFsaXRpZXNcclxuICpcclxuICogV2Vic2l0ZSA6IC0+IGh0dHA6Ly93d3cudHVyYm9ndWkub3JnXHJcbiAqIExpY2Vuc2UgOiAtPiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIExpY2Vuc2UgVXJsIDogLT4gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAqIENvcHlSaWdodCA6IC0+IENvcHlyaWdodCAyMDE4IEVkZXJ0b25lIEFkdmFuZGVkIFNvbHV0aW9ucy4gaHR0cHM6Ly93d3cuZWRlcnRvbmUuY29tXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBEaWFsb2dPcHRpb25zQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2RpYWxvZy1vcHRpb25zLWJhc2UvZGlhbG9nLW9wdGlvbnMtYmFzZS5jb21wb25lbnQnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBIGRpYWxvZyBjb21wb25lbnQgd2l0aCBhIHNpbmdsZSBvcHRpb24gYnV0dG9uLCB0byBiZSB1c2VkIGZvciBlcnJvciBub3RpZmljYXRpb25zXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RnLWRpYWxvZy1lcnJvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RpYWxvZy1lcnJvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGlhbG9nLWVycm9yLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRGlhbG9nRXJyb3JDb21wb25lbnQgZXh0ZW5kcyBEaWFsb2dPcHRpb25zQmFzZUNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPERpYWxvZ09wdGlvbnNCYXNlQ29tcG9uZW50PiwgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnkpIHtcclxuXHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoZGF0YS50ZXh0cy5sZW5ndGggPCAxKSB7XHJcblxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpYWxvZ0Vycm9yQ29tcG9uZW50IGV4cGVjdHMgMiB0ZXh0czogVGhlIHRpdGxlIGFuZCBvcHRpb25hbGx5IGEgZGVzY3JpcHRpb24nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkYXRhLm9wdGlvbnMubGVuZ3RoICE9PSAxKSB7XHJcblxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpYWxvZ0Vycm9yQ29tcG9uZW50IGV4cGVjdHMgb25seSBvbmUgb3B0aW9uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0aXRsZUFuZEljb25Db250YWluZXJcIj5cclxuICAgIDxoMz5cclxuICAgICAgICB7e2RhdGEudGV4dHNbMF19fVxyXG4gICAgPC9oMz5cclxuICAgIFxyXG4gICAgPCEtLSBlcnJvciBpY29uIC0tPlxyXG4gICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiPlxyXG4gICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICAgICAgPHBhdGggZD1cIk0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2elwiIGZpbGw9XCIjZmYwMDAwXCIgLz5cclxuICAgIDwvc3ZnPlxyXG4gICAgXHJcbjwvZGl2PlxyXG5cclxuPHAgKm5nSWY9XCJkYXRhLnRleHRzLmxlbmd0aCA+IDFcIj5cclxuICAgIHt7ZGF0YS50ZXh0c1sxXX19XHJcbjwvcD5cclxuXHJcbjxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJ3YXJuXCJcclxuICAgIChjbGljayk9XCJkaWFsb2dSZWYuY2xvc2UoMClcIj5cclxuICAgIFxyXG4gICAge3tkYXRhLm9wdGlvbnNbMF19fVxyXG4gICAgXHJcbjwvYnV0dG9uPiJdfQ==
@@ -0,0 +1,38 @@
1
+ /**
2
+ * TurboGUI is A library that helps with the most common and generic UI elements and functionalities
3
+ *
4
+ * Website : -> http://www.turbogui.org
5
+ * License : -> Licensed under the Apache License, Version 2.0. You may not use this file except in compliance with the License.
6
+ * License Url : -> http://www.apache.org/licenses/LICENSE-2.0
7
+ * CopyRight : -> Copyright 2018 Edertone Advanded Solutions. https://www.edertone.com
8
+ */
9
+ import { Component, Inject } from '@angular/core';
10
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
11
+ import { DialogOptionsBaseComponent } from '../dialog-options-base/dialog-options-base.component';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/material/dialog";
14
+ import * as i2 from "@angular/material/button";
15
+ import * as i3 from "@angular/common";
16
+ /**
17
+ * A dialog component that is designed to show more than one option buttons (usually more than two), to be used with dialog service
18
+ */
19
+ export class DialogMultipleOptionComponent extends DialogOptionsBaseComponent {
20
+ constructor(dialogRef, data) {
21
+ super();
22
+ this.dialogRef = dialogRef;
23
+ this.data = data;
24
+ if (data.texts.length < 1) {
25
+ throw new Error('DialogMultipleOptionComponent expects 2 texts: The title and optionally a description');
26
+ }
27
+ }
28
+ }
29
+ DialogMultipleOptionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogMultipleOptionComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
30
+ DialogMultipleOptionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DialogMultipleOptionComponent, selector: "tg-dialog-multiple-option", usesInheritance: true, ngImport: i0, template: "<h3>\r\n {{data.texts[0]}}\r\n</h3>\r\n\r\n<p *ngIf=\"data.texts.length > 1\">\r\n {{data.texts[1]}}\r\n</p>\r\n\r\n<button mat-raised-button color=\"primary\"\r\n *ngFor=\"let option of data.options; let i = index\"\r\n (click)=\"dialogRef.close(i)\">\r\n \r\n {{option}}\r\n \r\n</button>", styles: [":host{display:flex;flex-direction:column;min-height:193px}h3{margin-bottom:45px}button{margin-bottom:25px}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogMultipleOptionComponent, decorators: [{
32
+ type: Component,
33
+ args: [{ selector: 'tg-dialog-multiple-option', template: "<h3>\r\n {{data.texts[0]}}\r\n</h3>\r\n\r\n<p *ngIf=\"data.texts.length > 1\">\r\n {{data.texts[1]}}\r\n</p>\r\n\r\n<button mat-raised-button color=\"primary\"\r\n *ngFor=\"let option of data.options; let i = index\"\r\n (click)=\"dialogRef.close(i)\">\r\n \r\n {{option}}\r\n \r\n</button>", styles: [":host{display:flex;flex-direction:column;min-height:193px}h3{margin-bottom:45px}button{margin-bottom:25px}\n"] }]
34
+ }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
35
+ type: Inject,
36
+ args: [MAT_DIALOG_DATA]
37
+ }] }]; } });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLW11bHRpcGxlLW9wdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dXJib2d1aS1hbmd1bGFyL3NyYy9tYWluL3ZpZXcvY29tcG9uZW50cy9kaWFsb2ctbXVsdGlwbGUtb3B0aW9uL2RpYWxvZy1tdWx0aXBsZS1vcHRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVyYm9ndWktYW5ndWxhci9zcmMvbWFpbi92aWV3L2NvbXBvbmVudHMvZGlhbG9nLW11bHRpcGxlLW9wdGlvbi9kaWFsb2ctbXVsdGlwbGUtb3B0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDOzs7OztBQUdsRzs7R0FFRztBQVFILE1BQU0sT0FBTyw2QkFBOEIsU0FBUSwwQkFBMEI7SUFFekUsWUFBbUIsU0FBbUQsRUFBa0MsSUFBUztRQUU3RyxLQUFLLEVBQUUsQ0FBQztRQUZPLGNBQVMsR0FBVCxTQUFTLENBQTBDO1FBQWtDLFNBQUksR0FBSixJQUFJLENBQUs7UUFJN0csSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFFdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1RkFBdUYsQ0FBQyxDQUFDO1NBQzVHO0lBQ0wsQ0FBQzs7MEhBVlEsNkJBQTZCLDhDQUUwQyxlQUFlOzhHQUZ0Riw2QkFBNkIsd0ZDeEIxQyx5VEFjUzsyRkRVSSw2QkFBNkI7a0JBUHpDLFNBQVM7K0JBQ0UsMkJBQTJCOzswQkFRc0MsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR1cmJvR1VJIGlzIEEgbGlicmFyeSB0aGF0IGhlbHBzIHdpdGggdGhlIG1vc3QgY29tbW9uIGFuZCBnZW5lcmljIFVJIGVsZW1lbnRzIGFuZCBmdW5jdGlvbmFsaXRpZXNcclxuICpcclxuICogV2Vic2l0ZSA6IC0+IGh0dHA6Ly93d3cudHVyYm9ndWkub3JnXHJcbiAqIExpY2Vuc2UgOiAtPiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIExpY2Vuc2UgVXJsIDogLT4gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAqIENvcHlSaWdodCA6IC0+IENvcHlyaWdodCAyMDE4IEVkZXJ0b25lIEFkdmFuZGVkIFNvbHV0aW9ucy4gaHR0cHM6Ly93d3cuZWRlcnRvbmUuY29tXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBEaWFsb2dPcHRpb25zQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2RpYWxvZy1vcHRpb25zLWJhc2UvZGlhbG9nLW9wdGlvbnMtYmFzZS5jb21wb25lbnQnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBIGRpYWxvZyBjb21wb25lbnQgdGhhdCBpcyBkZXNpZ25lZCB0byBzaG93IG1vcmUgdGhhbiBvbmUgb3B0aW9uIGJ1dHRvbnMgKHVzdWFsbHkgbW9yZSB0aGFuIHR3byksIHRvIGJlIHVzZWQgd2l0aCBkaWFsb2cgc2VydmljZVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0Zy1kaWFsb2ctbXVsdGlwbGUtb3B0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGlhbG9nLW11bHRpcGxlLW9wdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGlhbG9nLW11bHRpcGxlLW9wdGlvbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIERpYWxvZ011bHRpcGxlT3B0aW9uQ29tcG9uZW50IGV4dGVuZHMgRGlhbG9nT3B0aW9uc0Jhc2VDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxEaWFsb2dPcHRpb25zQmFzZUNvbXBvbmVudD4sIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55KSB7XHJcblxyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGRhdGEudGV4dHMubGVuZ3RoIDwgMSkge1xyXG5cclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaWFsb2dNdWx0aXBsZU9wdGlvbkNvbXBvbmVudCBleHBlY3RzIDIgdGV4dHM6IFRoZSB0aXRsZSBhbmQgb3B0aW9uYWxseSBhIGRlc2NyaXB0aW9uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxoMz5cclxuICAgIHt7ZGF0YS50ZXh0c1swXX19XHJcbjwvaDM+XHJcblxyXG48cCAqbmdJZj1cImRhdGEudGV4dHMubGVuZ3RoID4gMVwiPlxyXG4gICAge3tkYXRhLnRleHRzWzFdfX1cclxuPC9wPlxyXG5cclxuPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBkYXRhLm9wdGlvbnM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgKGNsaWNrKT1cImRpYWxvZ1JlZi5jbG9zZShpKVwiPlxyXG4gICAgXHJcbiAgICB7e29wdGlvbn19XHJcbiAgICBcclxuPC9idXR0b24+Il19
@@ -0,0 +1,41 @@
1
+ /**
2
+ * TurboGUI is A library that helps with the most common and generic UI elements and functionalities
3
+ *
4
+ * Website : -> http://www.turbogui.org
5
+ * License : -> Licensed under the Apache License, Version 2.0. You may not use this file except in compliance with the License.
6
+ * License Url : -> http://www.apache.org/licenses/LICENSE-2.0
7
+ * CopyRight : -> Copyright 2018 Edertone Advanded Solutions. https://www.edertone.com
8
+ */
9
+ import { Component, Inject } from '@angular/core';
10
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
11
+ import { DialogOptionsBaseComponent } from '../dialog-options-base/dialog-options-base.component';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@angular/material/dialog";
14
+ import * as i2 from "@angular/material/button";
15
+ import * as i3 from "@angular/common";
16
+ /**
17
+ * A dialog component with a single option button, to be used with dialog service
18
+ */
19
+ export class DialogSingleOptionComponent extends DialogOptionsBaseComponent {
20
+ constructor(dialogRef, data) {
21
+ super();
22
+ this.dialogRef = dialogRef;
23
+ this.data = data;
24
+ if (data.texts.length < 1) {
25
+ throw new Error('DialogSingleOptionComponent expects 2 texts: The title and optionally a description');
26
+ }
27
+ if (data.options.length !== 1) {
28
+ throw new Error('DialogSingleOptionComponent expects only one option');
29
+ }
30
+ }
31
+ }
32
+ DialogSingleOptionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogSingleOptionComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
33
+ DialogSingleOptionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DialogSingleOptionComponent, selector: "tg-dialog-single-option", usesInheritance: true, ngImport: i0, template: "<h3>\r\n {{data.texts[0]}}\r\n</h3>\r\n\r\n<p *ngIf=\"data.texts.length > 1\">\r\n {{data.texts[1]}}\r\n</p>\r\n\r\n<button mat-raised-button color=\"primary\"\r\n (click)=\"dialogRef.close(0)\">\r\n \r\n {{data.options[0]}}\r\n \r\n</button>", styles: [":host{min-height:300px}h3{margin-bottom:25px}p{margin-bottom:52px}button{float:right}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogSingleOptionComponent, decorators: [{
35
+ type: Component,
36
+ args: [{ selector: 'tg-dialog-single-option', template: "<h3>\r\n {{data.texts[0]}}\r\n</h3>\r\n\r\n<p *ngIf=\"data.texts.length > 1\">\r\n {{data.texts[1]}}\r\n</p>\r\n\r\n<button mat-raised-button color=\"primary\"\r\n (click)=\"dialogRef.close(0)\">\r\n \r\n {{data.options[0]}}\r\n \r\n</button>", styles: [":host{min-height:300px}h3{margin-bottom:25px}p{margin-bottom:52px}button{float:right}\n"] }]
37
+ }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
38
+ type: Inject,
39
+ args: [MAT_DIALOG_DATA]
40
+ }] }]; } });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLXNpbmdsZS1vcHRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVyYm9ndWktYW5ndWxhci9zcmMvbWFpbi92aWV3L2NvbXBvbmVudHMvZGlhbG9nLXNpbmdsZS1vcHRpb24vZGlhbG9nLXNpbmdsZS1vcHRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVyYm9ndWktYW5ndWxhci9zcmMvbWFpbi92aWV3L2NvbXBvbmVudHMvZGlhbG9nLXNpbmdsZS1vcHRpb24vZGlhbG9nLXNpbmdsZS1vcHRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7O0FBR2xHOztHQUVHO0FBUUgsTUFBTSxPQUFPLDJCQUE0QixTQUFRLDBCQUEwQjtJQUV2RSxZQUFtQixTQUFtRCxFQUFrQyxJQUFTO1FBRTdHLEtBQUssRUFBRSxDQUFDO1FBRk8sY0FBUyxHQUFULFNBQVMsQ0FBMEM7UUFBa0MsU0FBSSxHQUFKLElBQUksQ0FBSztRQUk3RyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUV2QixNQUFNLElBQUksS0FBSyxDQUFDLHFGQUFxRixDQUFDLENBQUM7U0FDMUc7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUUzQixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7U0FDMUU7SUFDTCxDQUFDOzt3SEFmUSwyQkFBMkIsOENBRTRDLGVBQWU7NEdBRnRGLDJCQUEyQixzRkN4QnhDLHNRQWFTOzJGRFdJLDJCQUEyQjtrQkFQdkMsU0FBUzsrQkFDRSx5QkFBeUI7OzBCQVF3QyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVHVyYm9HVUkgaXMgQSBsaWJyYXJ5IHRoYXQgaGVscHMgd2l0aCB0aGUgbW9zdCBjb21tb24gYW5kIGdlbmVyaWMgVUkgZWxlbWVudHMgYW5kIGZ1bmN0aW9uYWxpdGllc1xyXG4gKlxyXG4gKiBXZWJzaXRlIDogLT4gaHR0cDovL3d3dy50dXJib2d1aS5vcmdcclxuICogTGljZW5zZSA6IC0+IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cclxuICogTGljZW5zZSBVcmwgOiAtPiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICogQ29weVJpZ2h0IDogLT4gQ29weXJpZ2h0IDIwMTggRWRlcnRvbmUgQWR2YW5kZWQgU29sdXRpb25zLiBodHRwczovL3d3dy5lZGVydG9uZS5jb21cclxuICovXHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IERpYWxvZ09wdGlvbnNCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGlhbG9nLW9wdGlvbnMtYmFzZS9kaWFsb2ctb3B0aW9ucy1iYXNlLmNvbXBvbmVudCc7XHJcblxyXG5cclxuLyoqXHJcbiAqIEEgZGlhbG9nIGNvbXBvbmVudCB3aXRoIGEgc2luZ2xlIG9wdGlvbiBidXR0b24sIHRvIGJlIHVzZWQgd2l0aCBkaWFsb2cgc2VydmljZVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0Zy1kaWFsb2ctc2luZ2xlLW9wdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RpYWxvZy1zaW5nbGUtb3B0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kaWFsb2ctc2luZ2xlLW9wdGlvbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIERpYWxvZ1NpbmdsZU9wdGlvbkNvbXBvbmVudCBleHRlbmRzIERpYWxvZ09wdGlvbnNCYXNlQ29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RGlhbG9nT3B0aW9uc0Jhc2VDb21wb25lbnQ+LCBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSkge1xyXG5cclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChkYXRhLnRleHRzLmxlbmd0aCA8IDEpIHtcclxuXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRGlhbG9nU2luZ2xlT3B0aW9uQ29tcG9uZW50IGV4cGVjdHMgMiB0ZXh0czogVGhlIHRpdGxlIGFuZCBvcHRpb25hbGx5IGEgZGVzY3JpcHRpb24nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkYXRhLm9wdGlvbnMubGVuZ3RoICE9PSAxKSB7XHJcblxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpYWxvZ1NpbmdsZU9wdGlvbkNvbXBvbmVudCBleHBlY3RzIG9ubHkgb25lIG9wdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8aDM+XHJcbiAgICB7e2RhdGEudGV4dHNbMF19fVxyXG48L2gzPlxyXG5cclxuPHAgKm5nSWY9XCJkYXRhLnRleHRzLmxlbmd0aCA+IDFcIj5cclxuICAgIHt7ZGF0YS50ZXh0c1sxXX19XHJcbjwvcD5cclxuXHJcbjxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCJcclxuICAgIChjbGljayk9XCJkaWFsb2dSZWYuY2xvc2UoMClcIj5cclxuICAgIFxyXG4gICAge3tkYXRhLm9wdGlvbnNbMF19fVxyXG4gICAgXHJcbjwvYnV0dG9uPiJdfQ==
@@ -0,0 +1,112 @@
1
+ /**
2
+ * TurboGUI is A library that helps with the most common and generic UI elements and functionalities
3
+ *
4
+ * Website : -> http://www.turbogui.org
5
+ * License : -> Licensed under the Apache License, Version 2.0. You may not use this file except in compliance with the License.
6
+ * License Url : -> http://www.apache.org/licenses/LICENSE-2.0
7
+ * CopyRight : -> Copyright 2018 Edertone Advanded Solutions. https://www.edertone.com
8
+ */
9
+ import { Component, Inject } from '@angular/core';
10
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
11
+ import { DialogOptionsBaseComponent } from '../dialog-options-base/dialog-options-base.component';
12
+ import { StringUtils } from 'turbocommons-ts';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/material/dialog";
15
+ import * as i2 from "../../../controller/browser.service";
16
+ import * as i3 from "@angular/material/form-field";
17
+ import * as i4 from "@angular/material/input";
18
+ import * as i5 from "@angular/material/button";
19
+ import * as i6 from "@angular/common";
20
+ import * as i7 from "../../directives/AutoFocusOnDisplayDirective";
21
+ /**
22
+ * A dialog component which allows us to select one single item from a list. The elements on that list are displayed on a table
23
+ * which may show a scroll if necessary when there are many elements on the list.
24
+ *
25
+ * It also allows us to filter inside the list with a custom text that we can type into a search input, which is optional.
26
+ *
27
+ * texts parameter must contain the title, the description (optional), the filter input title (optional), and the submit button caption.
28
+ * If that caption is not provided, the selection will be automatically performed once user clicks on an element on the list. Otherwise,
29
+ * the element will be selected on the list and the selection will be performed once the user clicks on the submit button.
30
+ *
31
+ * options parameter must contain the list of elements that will be displayed to the user
32
+ */
33
+ export class DialogSingleSelectionListComponent extends DialogOptionsBaseComponent {
34
+ constructor(dialogRef, browserService, data) {
35
+ super();
36
+ this.dialogRef = dialogRef;
37
+ this.browserService = browserService;
38
+ this.data = data;
39
+ /**
40
+ * Declare a reference to the string utils class so it can be used on the html part
41
+ */
42
+ this.stringUtils = StringUtils;
43
+ /**
44
+ * Contains the list of elements that will be directly shown to the user at the component list.
45
+ * It may be filtered or not depending on this component setup and the user input
46
+ */
47
+ this.filteredOptions = [];
48
+ /**
49
+ * Contains the original list of elements that are provided to be listed on this component before
50
+ * being possibly filtered. It is only used as a backup, not shown to the user
51
+ */
52
+ this.originalOptions = [];
53
+ /**
54
+ * The same list as the originally provided but processed for a better text search.
55
+ * It will be used to perform the search, but not shown to the user.
56
+ */
57
+ this.originalOptionsFullTextSearch = [];
58
+ /**
59
+ * Stores the index for the element that's been selected by the user
60
+ */
61
+ this.selectedItemIndex = -1;
62
+ /**
63
+ * This method is used to greatly improve ngFor performance with arrays of primitive values. It tells the refresh
64
+ * function to work by index instead of by value. The change in performance when refreshing the list is massive.
65
+ */
66
+ this.trackByFn = (index, _value) => index;
67
+ if (data.texts.length < 1) {
68
+ throw new Error('DialogSingleSelectionListComponent expects 4 texts: The title, the description (optional), the filter input title (optional), and the submit button caption');
69
+ }
70
+ if (data.options.length < 1) {
71
+ throw new Error('DialogSingleSelectionListComponent expects one or more options');
72
+ }
73
+ this.originalOptions = data.options;
74
+ for (let option of this.originalOptions) {
75
+ this.filteredOptions.push(option);
76
+ this.originalOptionsFullTextSearch.push(StringUtils.formatForFullTextSearch(option));
77
+ }
78
+ }
79
+ /**
80
+ * Method to calculate the max possible height that the list items container is allowed to have
81
+ */
82
+ getListItemsContainerMaxheight() {
83
+ return (this.browserService.getWindowHeight() * 0.6) + 'px';
84
+ }
85
+ /**
86
+ * When the user types a value on the input element to filter the list, this method will perform
87
+ * that filtering and refresh the list
88
+ */
89
+ onSearchChange(input) {
90
+ this.selectedItemIndex = -1;
91
+ let inputValue = StringUtils.formatForFullTextSearch(input.value);
92
+ for (let i = 0; i < this.originalOptionsFullTextSearch.length; i++) {
93
+ if (inputValue === '' ||
94
+ this.originalOptionsFullTextSearch[i].indexOf(inputValue) >= 0) {
95
+ this.filteredOptions[i] = this.originalOptions[i];
96
+ }
97
+ else {
98
+ this.filteredOptions[i] = '';
99
+ }
100
+ }
101
+ }
102
+ }
103
+ DialogSingleSelectionListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogSingleSelectionListComponent, deps: [{ token: i1.MatDialogRef }, { token: i2.BrowserService }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
104
+ DialogSingleSelectionListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DialogSingleSelectionListComponent, selector: "tg-dialog-single-selection-list", usesInheritance: true, ngImport: i0, template: "<h3>\r\n {{data.texts[0]}}\r\n</h3>\r\n\r\n<p *ngIf=\"data.texts.length > 1 &amp;&amp; !stringUtils.isEmpty(data.texts[1])\">\r\n {{data.texts[1]}}\r\n</p>\r\n\r\n<mat-form-field *ngIf=\"data.texts.length > 2 &amp;&amp; !stringUtils.isEmpty(data.texts[2])\"\r\n class=\"searchItemInputContainer\">\r\n \r\n <input matInput autoFocusOnDisplay\r\n placeholder=\"{{data.texts[2]}}\"\r\n (input)=\"onSearchChange($event.target)\">\r\n \r\n</mat-form-field>\r\n\r\n<div class=\"listItemsContainer\"\r\n [style.max-height]=\"getListItemsContainerMaxheight()\">\r\n\r\n <div class=\"listItemContainer\"\r\n [style.background-color]=\"selectedItemIndex === i ? '#90d1ffad' : (i % 2 === 0 ? 'initial' : '#00000009')\"\r\n *ngFor=\"let item of filteredOptions; let i = index; trackBy: trackByFn\"\r\n (click)=\"data.texts.length < 4 ? dialogRef.close(i) : selectedItemIndex = i\">\r\n \r\n <p *ngIf=\"item !== ''\">\r\n {{item}}\r\n </p>\r\n \r\n </div>\r\n\r\n</div>\r\n\r\n<button mat-raised-button color=\"primary\"\r\n [disabled]=\"selectedItemIndex < 0\"\r\n (click)=\"dialogRef.close(selectedItemIndex)\"\r\n *ngIf=\"data.texts.length > 3\">\r\n\r\n {{data.texts[3]}}\r\n \r\n</button>", styles: [":host{min-height:300px}h3{margin-top:0;margin-bottom:10px}p{margin-top:0;margin-bottom:5px}.searchItemInputContainer{width:100%;margin-top:0;margin-bottom:0}.listItemsContainer{overflow-y:auto;border:1px solid rgba(0,0,0,.2);border-radius:4px;margin-bottom:5px}.listItemContainer p{line-height:36px;width:calc(100% - 12px);margin:0 0 0 6px}button{float:right}\n"], dependencies: [{ kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.AutoFocusOnDisplayDirective, selector: "[autoFocusOnDisplay]" }] });
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DialogSingleSelectionListComponent, decorators: [{
106
+ type: Component,
107
+ args: [{ selector: 'tg-dialog-single-selection-list', template: "<h3>\r\n {{data.texts[0]}}\r\n</h3>\r\n\r\n<p *ngIf=\"data.texts.length > 1 &amp;&amp; !stringUtils.isEmpty(data.texts[1])\">\r\n {{data.texts[1]}}\r\n</p>\r\n\r\n<mat-form-field *ngIf=\"data.texts.length > 2 &amp;&amp; !stringUtils.isEmpty(data.texts[2])\"\r\n class=\"searchItemInputContainer\">\r\n \r\n <input matInput autoFocusOnDisplay\r\n placeholder=\"{{data.texts[2]}}\"\r\n (input)=\"onSearchChange($event.target)\">\r\n \r\n</mat-form-field>\r\n\r\n<div class=\"listItemsContainer\"\r\n [style.max-height]=\"getListItemsContainerMaxheight()\">\r\n\r\n <div class=\"listItemContainer\"\r\n [style.background-color]=\"selectedItemIndex === i ? '#90d1ffad' : (i % 2 === 0 ? 'initial' : '#00000009')\"\r\n *ngFor=\"let item of filteredOptions; let i = index; trackBy: trackByFn\"\r\n (click)=\"data.texts.length < 4 ? dialogRef.close(i) : selectedItemIndex = i\">\r\n \r\n <p *ngIf=\"item !== ''\">\r\n {{item}}\r\n </p>\r\n \r\n </div>\r\n\r\n</div>\r\n\r\n<button mat-raised-button color=\"primary\"\r\n [disabled]=\"selectedItemIndex < 0\"\r\n (click)=\"dialogRef.close(selectedItemIndex)\"\r\n *ngIf=\"data.texts.length > 3\">\r\n\r\n {{data.texts[3]}}\r\n \r\n</button>", styles: [":host{min-height:300px}h3{margin-top:0;margin-bottom:10px}p{margin-top:0;margin-bottom:5px}.searchItemInputContainer{width:100%;margin-top:0;margin-bottom:0}.listItemsContainer{overflow-y:auto;border:1px solid rgba(0,0,0,.2);border-radius:4px;margin-bottom:5px}.listItemContainer p{line-height:36px;width:calc(100% - 12px);margin:0 0 0 6px}button{float:right}\n"] }]
108
+ }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: i2.BrowserService }, { type: undefined, decorators: [{
109
+ type: Inject,
110
+ args: [MAT_DIALOG_DATA]
111
+ }] }]; } });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLXNpbmdsZS1zZWxlY3Rpb24tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dXJib2d1aS1hbmd1bGFyL3NyYy9tYWluL3ZpZXcvY29tcG9uZW50cy9kaWFsb2ctc2luZ2xlLXNlbGVjdGlvbi1saXN0L2RpYWxvZy1zaW5nbGUtc2VsZWN0aW9uLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVyYm9ndWktYW5ndWxhci9zcmMvbWFpbi92aWV3L2NvbXBvbmVudHMvZGlhbG9nLXNpbmdsZS1zZWxlY3Rpb24tbGlzdC9kaWFsb2ctc2luZ2xlLXNlbGVjdGlvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBRWxHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7O0FBRzlDOzs7Ozs7Ozs7OztHQVdHO0FBUUgsTUFBTSxPQUFPLGtDQUFtQyxTQUFRLDBCQUEwQjtJQW1DOUUsWUFBbUIsU0FBbUQsRUFDbkQsY0FBOEIsRUFDTCxJQUFTO1FBRWpELEtBQUssRUFBRSxDQUFDO1FBSk8sY0FBUyxHQUFULFNBQVMsQ0FBMEM7UUFDbkQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ0wsU0FBSSxHQUFKLElBQUksQ0FBSztRQWxDckQ7O1dBRUc7UUFDSCxnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQUUxQjs7O1dBR0c7UUFDSCxvQkFBZSxHQUFZLEVBQUUsQ0FBQztRQUc5Qjs7O1dBR0c7UUFDSyxvQkFBZSxHQUFZLEVBQUUsQ0FBQztRQUd0Qzs7O1dBR0c7UUFDSyxrQ0FBNkIsR0FBWSxFQUFFLENBQUM7UUFHcEQ7O1dBRUc7UUFDSCxzQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQztRQThEdkI7OztXQUdHO1FBQ0gsY0FBUyxHQUFHLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDO1FBekRqRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUV2QixNQUFNLElBQUksS0FBSyxDQUFDLDZKQUE2SixDQUFDLENBQUM7U0FDbEw7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUV6QixNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7U0FDckY7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFcEMsS0FBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFDO1lBRW5DLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDeEY7SUFDTCxDQUFDO0lBR0Q7O09BRUc7SUFDSCw4QkFBOEI7UUFFMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2hFLENBQUM7SUFHRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsS0FBc0I7UUFFakMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTVCLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFFL0QsSUFBRyxVQUFVLEtBQUssRUFBRTtnQkFDakIsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUM7Z0JBRTlELElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUVyRDtpQkFBSTtnQkFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNoQztTQUNKO0lBQ0wsQ0FBQzs7K0hBNUZRLGtDQUFrQyw0RUFxQ3ZCLGVBQWU7bUhBckMxQixrQ0FBa0MsOEZDbkMvQywrd0NBd0NTOzJGRExJLGtDQUFrQztrQkFQOUMsU0FBUzsrQkFDRSxpQ0FBaUM7OzBCQTJDNUIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR1cmJvR1VJIGlzIEEgbGlicmFyeSB0aGF0IGhlbHBzIHdpdGggdGhlIG1vc3QgY29tbW9uIGFuZCBnZW5lcmljIFVJIGVsZW1lbnRzIGFuZCBmdW5jdGlvbmFsaXRpZXNcclxuICpcclxuICogV2Vic2l0ZSA6IC0+IGh0dHA6Ly93d3cudHVyYm9ndWkub3JnXHJcbiAqIExpY2Vuc2UgOiAtPiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIExpY2Vuc2UgVXJsIDogLT4gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAqIENvcHlSaWdodCA6IC0+IENvcHlyaWdodCAyMDE4IEVkZXJ0b25lIEFkdmFuZGVkIFNvbHV0aW9ucy4gaHR0cHM6Ly93d3cuZWRlcnRvbmUuY29tXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBEaWFsb2dPcHRpb25zQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2RpYWxvZy1vcHRpb25zLWJhc2UvZGlhbG9nLW9wdGlvbnMtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCcm93c2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRyb2xsZXIvYnJvd3Nlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RyaW5nVXRpbHMgfSBmcm9tICd0dXJib2NvbW1vbnMtdHMnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBIGRpYWxvZyBjb21wb25lbnQgd2hpY2ggYWxsb3dzIHVzIHRvIHNlbGVjdCBvbmUgc2luZ2xlIGl0ZW0gZnJvbSBhIGxpc3QuIFRoZSBlbGVtZW50cyBvbiB0aGF0IGxpc3QgYXJlIGRpc3BsYXllZCBvbiBhIHRhYmxlXHJcbiAqIHdoaWNoIG1heSBzaG93IGEgc2Nyb2xsIGlmIG5lY2Vzc2FyeSB3aGVuIHRoZXJlIGFyZSBtYW55IGVsZW1lbnRzIG9uIHRoZSBsaXN0LlxyXG4gKiBcclxuICogSXQgYWxzbyBhbGxvd3MgdXMgdG8gZmlsdGVyIGluc2lkZSB0aGUgbGlzdCB3aXRoIGEgY3VzdG9tIHRleHQgdGhhdCB3ZSBjYW4gdHlwZSBpbnRvIGEgc2VhcmNoIGlucHV0LCB3aGljaCBpcyBvcHRpb25hbC5cclxuICpcclxuICogdGV4dHMgcGFyYW1ldGVyIG11c3QgY29udGFpbiB0aGUgdGl0bGUsIHRoZSBkZXNjcmlwdGlvbiAob3B0aW9uYWwpLCB0aGUgZmlsdGVyIGlucHV0IHRpdGxlIChvcHRpb25hbCksIGFuZCB0aGUgc3VibWl0IGJ1dHRvbiBjYXB0aW9uLlxyXG4gKiBJZiB0aGF0IGNhcHRpb24gaXMgbm90IHByb3ZpZGVkLCB0aGUgc2VsZWN0aW9uIHdpbGwgYmUgYXV0b21hdGljYWxseSBwZXJmb3JtZWQgb25jZSB1c2VyIGNsaWNrcyBvbiBhbiBlbGVtZW50IG9uIHRoZSBsaXN0LiBPdGhlcndpc2UsIFxyXG4gKiB0aGUgZWxlbWVudCB3aWxsIGJlIHNlbGVjdGVkIG9uIHRoZSBsaXN0IGFuZCB0aGUgc2VsZWN0aW9uIHdpbGwgYmUgcGVyZm9ybWVkIG9uY2UgdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBzdWJtaXQgYnV0dG9uLlxyXG4gKlxyXG4gKiBvcHRpb25zIHBhcmFtZXRlciBtdXN0IGNvbnRhaW4gdGhlIGxpc3Qgb2YgZWxlbWVudHMgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlciAgXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RnLWRpYWxvZy1zaW5nbGUtc2VsZWN0aW9uLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kaWFsb2ctc2luZ2xlLXNlbGVjdGlvbi1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kaWFsb2ctc2luZ2xlLXNlbGVjdGlvbi1saXN0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRGlhbG9nU2luZ2xlU2VsZWN0aW9uTGlzdENvbXBvbmVudCBleHRlbmRzIERpYWxvZ09wdGlvbnNCYXNlQ29tcG9uZW50IHtcclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIERlY2xhcmUgYSByZWZlcmVuY2UgdG8gdGhlIHN0cmluZyB1dGlscyBjbGFzcyBzbyBpdCBjYW4gYmUgdXNlZCBvbiB0aGUgaHRtbCBwYXJ0XHJcbiAgICAgKi9cclxuICAgIHN0cmluZ1V0aWxzID0gU3RyaW5nVXRpbHM7XHJcbiAgICBcclxuICAgIC8qKiBcclxuICAgICAqIENvbnRhaW5zIHRoZSBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgd2lsbCBiZSBkaXJlY3RseSBzaG93biB0byB0aGUgdXNlciBhdCB0aGUgY29tcG9uZW50IGxpc3QuXHJcbiAgICAgKiBJdCBtYXkgYmUgZmlsdGVyZWQgb3Igbm90IGRlcGVuZGluZyBvbiB0aGlzIGNvbXBvbmVudCBzZXR1cCBhbmQgdGhlIHVzZXIgaW5wdXRcclxuICAgICAqL1xyXG4gICAgZmlsdGVyZWRPcHRpb25zOnN0cmluZ1tdID0gW107XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250YWlucyB0aGUgb3JpZ2luYWwgbGlzdCBvZiBlbGVtZW50cyB0aGF0IGFyZSBwcm92aWRlZCB0byBiZSBsaXN0ZWQgb24gdGhpcyBjb21wb25lbnQgYmVmb3JlXHJcbiAgICAgKiBiZWluZyBwb3NzaWJseSBmaWx0ZXJlZC4gSXQgaXMgb25seSB1c2VkIGFzIGEgYmFja3VwLCBub3Qgc2hvd24gdG8gdGhlIHVzZXJcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvcmlnaW5hbE9wdGlvbnM6c3RyaW5nW10gPSBbXTtcclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzYW1lIGxpc3QgYXMgdGhlIG9yaWdpbmFsbHkgcHJvdmlkZWQgYnV0IHByb2Nlc3NlZCBmb3IgYSBiZXR0ZXIgdGV4dCBzZWFyY2guXHJcbiAgICAgKiBJdCB3aWxsIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgc2VhcmNoLCBidXQgbm90IHNob3duIHRvIHRoZSB1c2VyLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9yaWdpbmFsT3B0aW9uc0Z1bGxUZXh0U2VhcmNoOnN0cmluZ1tdID0gW107XHJcbiAgICAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBTdG9yZXMgdGhlIGluZGV4IGZvciB0aGUgZWxlbWVudCB0aGF0J3MgYmVlbiBzZWxlY3RlZCBieSB0aGUgdXNlclxyXG4gICAgICovXHJcbiAgICBzZWxlY3RlZEl0ZW1JbmRleCA9IC0xO1xyXG4gICAgXHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPERpYWxvZ09wdGlvbnNCYXNlQ29tcG9uZW50PixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBicm93c2VyU2VydmljZTogQnJvd3NlclNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSkge1xyXG5cclxuICAgICAgICBzdXBlcigpO1xyXG5cclxuICAgICAgICBpZiAoZGF0YS50ZXh0cy5sZW5ndGggPCAxKSB7XHJcblxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpYWxvZ1NpbmdsZVNlbGVjdGlvbkxpc3RDb21wb25lbnQgZXhwZWN0cyA0IHRleHRzOiBUaGUgdGl0bGUsIHRoZSBkZXNjcmlwdGlvbiAob3B0aW9uYWwpLCB0aGUgZmlsdGVyIGlucHV0IHRpdGxlIChvcHRpb25hbCksIGFuZCB0aGUgc3VibWl0IGJ1dHRvbiBjYXB0aW9uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChkYXRhLm9wdGlvbnMubGVuZ3RoIDwgMSkge1xyXG5cclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaWFsb2dTaW5nbGVTZWxlY3Rpb25MaXN0Q29tcG9uZW50IGV4cGVjdHMgb25lIG9yIG1vcmUgb3B0aW9ucycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IGRhdGEub3B0aW9ucztcclxuICAgICAgICBcclxuICAgICAgICBmb3IobGV0IG9wdGlvbiBvZiB0aGlzLm9yaWdpbmFsT3B0aW9ucyl7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zRnVsbFRleHRTZWFyY2gucHVzaChTdHJpbmdVdGlscy5mb3JtYXRGb3JGdWxsVGV4dFNlYXJjaChvcHRpb24pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdG8gY2FsY3VsYXRlIHRoZSBtYXggcG9zc2libGUgaGVpZ2h0IHRoYXQgdGhlIGxpc3QgaXRlbXMgY29udGFpbmVyIGlzIGFsbG93ZWQgdG8gaGF2ZVxyXG4gICAgICovXHJcbiAgICBnZXRMaXN0SXRlbXNDb250YWluZXJNYXhoZWlnaHQoKXtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gKHRoaXMuYnJvd3NlclNlcnZpY2UuZ2V0V2luZG93SGVpZ2h0KCkgKiAwLjYpICsgJ3B4JztcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHRoZSB1c2VyIHR5cGVzIGEgdmFsdWUgb24gdGhlIGlucHV0IGVsZW1lbnQgdG8gZmlsdGVyIHRoZSBsaXN0LCB0aGlzIG1ldGhvZCB3aWxsIHBlcmZvcm1cclxuICAgICAqIHRoYXQgZmlsdGVyaW5nIGFuZCByZWZyZXNoIHRoZSBsaXN0XHJcbiAgICAgKi9cclxuICAgIG9uU2VhcmNoQ2hhbmdlKGlucHV0OkhUTUxJbnB1dEVsZW1lbnQpe1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gLTE7XHJcbiAgICAgICBcclxuICAgICAgICBsZXQgaW5wdXRWYWx1ZSA9IFN0cmluZ1V0aWxzLmZvcm1hdEZvckZ1bGxUZXh0U2VhcmNoKGlucHV0LnZhbHVlKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9yaWdpbmFsT3B0aW9uc0Z1bGxUZXh0U2VhcmNoLmxlbmd0aDsgaSsrKXtcclxuXHJcbiAgICAgICAgICAgIGlmKGlucHV0VmFsdWUgPT09ICcnIHx8XHJcbiAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zRnVsbFRleHRTZWFyY2hbaV0uaW5kZXhPZihpbnB1dFZhbHVlKSA+PSAwKXtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc1tpXSA9IHRoaXMub3JpZ2luYWxPcHRpb25zW2ldO1xyXG5cclxuICAgICAgICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbaV0gPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdyZWF0bHkgaW1wcm92ZSBuZ0ZvciBwZXJmb3JtYW5jZSB3aXRoIGFycmF5cyBvZiBwcmltaXRpdmUgdmFsdWVzLiBJdCB0ZWxscyB0aGUgcmVmcmVzaFxyXG4gICAgICogZnVuY3Rpb24gdG8gd29yayBieSBpbmRleCBpbnN0ZWFkIG9mIGJ5IHZhbHVlLiBUaGUgY2hhbmdlIGluIHBlcmZvcm1hbmNlIHdoZW4gcmVmcmVzaGluZyB0aGUgbGlzdCBpcyBtYXNzaXZlLiBcclxuICAgICAqL1xyXG4gICAgdHJhY2tCeUZuID0gKGluZGV4OiBudW1iZXIsIF92YWx1ZTogc3RyaW5nKSA9PiBpbmRleDtcclxufVxyXG4iLCI8aDM+XHJcbiAgICB7e2RhdGEudGV4dHNbMF19fVxyXG48L2gzPlxyXG5cclxuPHAgKm5nSWY9XCJkYXRhLnRleHRzLmxlbmd0aCA+IDEgJmFtcDsmYW1wOyAhc3RyaW5nVXRpbHMuaXNFbXB0eShkYXRhLnRleHRzWzFdKVwiPlxyXG4gICAge3tkYXRhLnRleHRzWzFdfX1cclxuPC9wPlxyXG5cclxuPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiZGF0YS50ZXh0cy5sZW5ndGggPiAyICZhbXA7JmFtcDsgIXN0cmluZ1V0aWxzLmlzRW1wdHkoZGF0YS50ZXh0c1syXSlcIlxyXG4gICAgY2xhc3M9XCJzZWFyY2hJdGVtSW5wdXRDb250YWluZXJcIj5cclxuICAgIFxyXG4gICAgPGlucHV0IG1hdElucHV0IGF1dG9Gb2N1c09uRGlzcGxheVxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3tkYXRhLnRleHRzWzJdfX1cIlxyXG4gICAgICAgIChpbnB1dCk9XCJvblNlYXJjaENoYW5nZSgkZXZlbnQudGFyZ2V0KVwiPlxyXG4gICAgICAgIFxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuPGRpdiBjbGFzcz1cImxpc3RJdGVtc0NvbnRhaW5lclwiXHJcbiAgICBbc3R5bGUubWF4LWhlaWdodF09XCJnZXRMaXN0SXRlbXNDb250YWluZXJNYXhoZWlnaHQoKVwiPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJsaXN0SXRlbUNvbnRhaW5lclwiXHJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwic2VsZWN0ZWRJdGVtSW5kZXggPT09IGkgPyAnIzkwZDFmZmFkJyA6IChpICUgMiA9PT0gMCA/ICdpbml0aWFsJyA6ICcjMDAwMDAwMDknKVwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRPcHRpb25zOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgIChjbGljayk9XCJkYXRhLnRleHRzLmxlbmd0aCA8IDQgPyBkaWFsb2dSZWYuY2xvc2UoaSkgOiBzZWxlY3RlZEl0ZW1JbmRleCA9IGlcIj5cclxuICAgIFxyXG4gICAgICAgIDxwICpuZ0lmPVwiaXRlbSAhPT0gJydcIj5cclxuICAgICAgICAgICAge3tpdGVtfX1cclxuICAgICAgICA8L3A+XHJcbiAgICBcclxuICAgIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG48YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICBbZGlzYWJsZWRdPVwic2VsZWN0ZWRJdGVtSW5kZXggPCAwXCJcclxuICAgIChjbGljayk9XCJkaWFsb2dSZWYuY2xvc2Uoc2VsZWN0ZWRJdGVtSW5kZXgpXCJcclxuICAgICpuZ0lmPVwiZGF0YS50ZXh0cy5sZW5ndGggPiAzXCI+XHJcblxyXG4gICAge3tkYXRhLnRleHRzWzNdfX1cclxuICAgIFxyXG48L2J1dHRvbj4iXX0=