@bnsights/bbsf-controls 1.0.109 → 1.0.111

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 (282) hide show
  1. package/README.md +8 -0
  2. package/{esm2020 → esm2022}/bnsights-bbsf-controls.mjs +4 -4
  3. package/esm2022/bnsights-test-test-controls.mjs +5 -0
  4. package/{esm2020 → esm2022}/lib/Shared/Components/app-base-component.mjs +226 -226
  5. package/{esm2020 → esm2022}/lib/Shared/Components/ng-tag-input.mjs +176 -176
  6. package/{esm2020 → esm2022}/lib/Shared/Directives/template-name.directive.mjs +18 -18
  7. package/{esm2020 → esm2022}/lib/Shared/Enums/CalendarView.mjs +7 -7
  8. package/{esm2020 → esm2022}/lib/Shared/Enums/ControlLayout.mjs +5 -5
  9. package/{esm2020 → esm2022}/lib/Shared/Enums/Countries.mjs +246 -246
  10. package/{esm2020 → esm2022}/lib/Shared/Enums/Enums.mjs +32 -32
  11. package/{esm2020 → esm2022}/lib/Shared/Enums/FileType.mjs +21 -21
  12. package/{esm2020 → esm2022}/lib/Shared/Enums/FilterType.mjs +10 -10
  13. package/{esm2020 → esm2022}/lib/Shared/Enums/FontSize.mjs +6 -6
  14. package/{esm2020 → esm2022}/lib/Shared/Enums/ForceDirection.mjs +5 -5
  15. package/{esm2020 → esm2022}/lib/Shared/Enums/IconPosition.mjs +5 -5
  16. package/{esm2020 → esm2022}/lib/Shared/Enums/ImageType.mjs +9 -9
  17. package/{esm2020 → esm2022}/lib/Shared/Enums/InputType.mjs +9 -9
  18. package/{esm2020 → esm2022}/lib/Shared/Enums/Insert.mjs +8 -8
  19. package/{esm2020 → esm2022}/lib/Shared/Enums/LanguageMode.mjs +10 -10
  20. package/{esm2020 → esm2022}/lib/Shared/Enums/LanguageValidation.mjs +5 -5
  21. package/{esm2020 → esm2022}/lib/Shared/Enums/Misc.mjs +6 -6
  22. package/{esm2020 → esm2022}/lib/Shared/Enums/PagingActionMode.mjs +5 -5
  23. package/{esm2020 → esm2022}/lib/Shared/Enums/Para.mjs +8 -8
  24. package/{esm2020 → esm2022}/lib/Shared/Enums/PickerType.mjs +6 -6
  25. package/{esm2020 → esm2022}/lib/Shared/Enums/SelectMode.mjs +5 -5
  26. package/{esm2020 → esm2022}/lib/Shared/Enums/StartView.mjs +6 -6
  27. package/{esm2020 → esm2022}/lib/Shared/Enums/Style.mjs +7 -7
  28. package/{esm2020 → esm2022}/lib/Shared/Enums/StyleConfirmationMode.mjs +6 -6
  29. package/{esm2020 → esm2022}/lib/Shared/Enums/TagInputView.mjs +6 -6
  30. package/esm2022/lib/Shared/Enums/map-enums.mjs +7 -0
  31. package/{esm2020 → esm2022}/lib/Shared/Enums/menu-list-enum.mjs +5 -5
  32. package/{esm2020 → esm2022}/lib/Shared/Models/Attribute.mjs +2 -2
  33. package/{esm2020 → esm2022}/lib/Shared/Models/AutocompleteDTO.mjs +7 -7
  34. package/{esm2020 → esm2022}/lib/Shared/Models/AutocompleteOptions.mjs +23 -23
  35. package/{esm2020 → esm2022}/lib/Shared/Models/CalendarEventDTO.mjs +2 -2
  36. package/{esm2020 → esm2022}/lib/Shared/Models/CalendarOptions.mjs +18 -18
  37. package/{esm2020 → esm2022}/lib/Shared/Models/CancelDTO.mjs +6 -6
  38. package/{esm2020 → esm2022}/lib/Shared/Models/CaptchaStyle.mjs +2 -2
  39. package/{esm2020 → esm2022}/lib/Shared/Models/CheckBoxOptions.mjs +10 -10
  40. package/{esm2020 → esm2022}/lib/Shared/Models/ConfirmationModalOptions.mjs +38 -38
  41. package/{esm2020 → esm2022}/lib/Shared/Models/ControlOptionsBase.mjs +12 -12
  42. package/{esm2020 → esm2022}/lib/Shared/Models/CustomValidation.mjs +13 -13
  43. package/{esm2020 → esm2022}/lib/Shared/Models/DropdownListItem.mjs +2 -2
  44. package/{esm2020 → esm2022}/lib/Shared/Models/DropdownOptions.mjs +15 -15
  45. package/{esm2020 → esm2022}/lib/Shared/Models/EditPersonalImage.mjs +6 -6
  46. package/{esm2020 → esm2022}/lib/Shared/Models/EnglishArabicDTO.mjs +10 -10
  47. package/{esm2020 → esm2022}/lib/Shared/Models/FileDTO.mjs +1 -1
  48. package/{esm2020 → esm2022}/lib/Shared/Models/FileUploadModel.mjs +2 -2
  49. package/{esm2020 → esm2022}/lib/Shared/Models/FileUploadOptions.mjs +10 -10
  50. package/{esm2020 → esm2022}/lib/Shared/Models/FilterItem.mjs +7 -7
  51. package/{esm2020 → esm2022}/lib/Shared/Models/FormOptions.mjs +27 -27
  52. package/{esm2020 → esm2022}/lib/Shared/Models/HtmlEditorOptions.mjs +11 -11
  53. package/{esm2020 → esm2022}/lib/Shared/Models/ImageUploadOptions.mjs +13 -13
  54. package/esm2022/lib/Shared/Models/MapAutoCompleteOptions.mjs +10 -0
  55. package/{esm2020 → esm2022}/lib/Shared/Models/MapAutocompleteDTO.mjs +5 -5
  56. package/{esm2020 → esm2022}/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs +8 -8
  57. package/{esm2020 → esm2022}/lib/Shared/Models/MultiLingualTextAreaOptions.mjs +8 -8
  58. package/{esm2020 → esm2022}/lib/Shared/Models/MultilingualControlOptionsBase.mjs +15 -15
  59. package/{esm2020 → esm2022}/lib/Shared/Models/MultilingualTextBoxOptions.mjs +13 -13
  60. package/{esm2020 → esm2022}/lib/Shared/Models/MultipleFileUploadModel.mjs +8 -8
  61. package/{esm2020 → esm2022}/lib/Shared/Models/PagingDTO.mjs +12 -12
  62. package/{esm2020 → esm2022}/lib/Shared/Models/PagingOptions.mjs +46 -46
  63. package/{esm2020 → esm2022}/lib/Shared/Models/PagingPayload.mjs +2 -2
  64. package/{esm2020 → esm2022}/lib/Shared/Models/PhoneOptions.mjs +12 -12
  65. package/{esm2020 → esm2022}/lib/Shared/Models/ProfileImageUploadOptions.mjs +10 -10
  66. package/{esm2020 → esm2022}/lib/Shared/Models/ProfilePictureDTO.mjs +2 -2
  67. package/{esm2020 → esm2022}/lib/Shared/Models/RadioButtonItem.mjs +2 -2
  68. package/{esm2020 → esm2022}/lib/Shared/Models/RadioButtonOptions.mjs +3 -3
  69. package/{esm2020 → esm2022}/lib/Shared/Models/RangeNumber.mjs +2 -2
  70. package/{esm2020 → esm2022}/lib/Shared/Models/Recaptcha.mjs +5 -5
  71. package/{esm2020 → esm2022}/lib/Shared/Models/RecaptchaOptions.mjs +21 -21
  72. package/{esm2020 → esm2022}/lib/Shared/Models/RepeaterField.mjs +2 -2
  73. package/{esm2020 → esm2022}/lib/Shared/Models/RepeaterOptions.mjs +12 -12
  74. package/{esm2020 → esm2022}/lib/Shared/Models/SaveDTO.mjs +6 -6
  75. package/{esm2020 → esm2022}/lib/Shared/Models/TagsInputDTO.mjs +2 -2
  76. package/{esm2020 → esm2022}/lib/Shared/Models/TagsInputOptions.mjs +40 -40
  77. package/{esm2020 → esm2022}/lib/Shared/Models/TextAreaOptions.mjs +3 -3
  78. package/{esm2020 → esm2022}/lib/Shared/Models/TextBoxOptions.mjs +22 -22
  79. package/{esm2020 → esm2022}/lib/Shared/Models/ToggleslideOptions.mjs +8 -8
  80. package/{esm2020 → esm2022}/lib/Shared/Models/UploadPersonalImage.mjs +6 -6
  81. package/{esm2020 → esm2022}/lib/Shared/Models/bread-crumb.mjs +7 -7
  82. package/{esm2020 → esm2022}/lib/Shared/Models/control-filter-Item.mjs +5 -5
  83. package/{esm2020 → esm2022}/lib/Shared/Models/datePickerOptions.mjs +22 -22
  84. package/{esm2020 → esm2022}/lib/Shared/Models/filter-options.mjs +8 -8
  85. package/{esm2020 → esm2022}/lib/Shared/Models/page-header-options.mjs +77 -77
  86. package/{esm2020 → esm2022}/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +21 -21
  87. package/{esm2020 → esm2022}/lib/Shared/Pipes/bbsf-date.pipe.mjs +21 -21
  88. package/{esm2020 → esm2022}/lib/Shared/config/environment.mjs +11 -11
  89. package/{esm2020 → esm2022}/lib/Shared/default_intl.mjs +29 -29
  90. package/{esm2020 → esm2022}/lib/Shared/services/ControlUtility.mjs +162 -162
  91. package/{esm2020 → esm2022}/lib/Shared/services/GlobalSettings.service.mjs +30 -30
  92. package/esm2022/lib/Shared/services/OnPagingFiltersChange.service.mjs +24 -0
  93. package/{esm2020 → esm2022}/lib/Shared/services/render-component-service.service.mjs +30 -30
  94. package/esm2022/lib/Shared/services/validationErrorMassage.service.mjs +170 -0
  95. package/esm2022/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +262 -0
  96. package/esm2022/lib/controls/Calendar/Calendar.component.mjs +173 -0
  97. package/esm2022/lib/controls/CheckBox/CheckBox.component.mjs +117 -0
  98. package/{esm2020 → esm2022}/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +136 -136
  99. package/esm2022/lib/controls/DateTimePicker/DateTimePicker.component.mjs +223 -0
  100. package/esm2022/lib/controls/DropdownList/DropdownList.component.mjs +193 -0
  101. package/esm2022/lib/controls/FileUplaod/FileUplaod.component.mjs +447 -0
  102. package/{esm2020 → esm2022}/lib/controls/Form/Form.component.mjs +101 -101
  103. package/esm2022/lib/controls/HtmlEditor/HtmlEditor.component.mjs +226 -0
  104. package/esm2022/lib/controls/ImageUpload/ImageUpload.component.mjs +350 -0
  105. package/esm2022/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +404 -0
  106. package/esm2022/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +427 -0
  107. package/esm2022/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +429 -0
  108. package/esm2022/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +428 -0
  109. package/{esm2020 → esm2022}/lib/controls/Paging/JwPagination.component.mjs +121 -121
  110. package/{esm2020 → esm2022}/lib/controls/Paging/Paging.component.mjs +312 -312
  111. package/esm2022/lib/controls/Phone/Phone.component.mjs +129 -0
  112. package/esm2022/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +376 -0
  113. package/esm2022/lib/controls/RadioButton/RadioButton.component.mjs +109 -0
  114. package/{esm2020 → esm2022}/lib/controls/Recaptcha/Recaptcha.component.mjs +135 -135
  115. package/{esm2020 → esm2022}/lib/controls/Repeater/repeater/repeater.component.mjs +125 -125
  116. package/{esm2020 → esm2022}/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +750 -750
  117. package/{esm2020 → esm2022}/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +21 -21
  118. package/{esm2020 → esm2022}/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +108 -108
  119. package/esm2022/lib/controls/TagsInput/TagsInput.component.mjs +277 -0
  120. package/esm2022/lib/controls/TextArea/TextArea.component.mjs +196 -0
  121. package/esm2022/lib/controls/TextBox/TextBox.component.mjs +306 -0
  122. package/esm2022/lib/controls/Toggleslide/toggleslide.component.mjs +90 -0
  123. package/esm2022/lib/controls/bbsf-controls.module.mjs +339 -0
  124. package/{esm2020 → esm2022}/lib/controls/page-header-component/page-header-component.component.mjs +37 -37
  125. package/{esm2020 → esm2022}/public-api.mjs +128 -130
  126. package/{fesm2020 → fesm2022}/bnsights-bbsf-controls.mjs +8802 -8736
  127. package/fesm2022/bnsights-bbsf-controls.mjs.map +1 -0
  128. package/{fesm2015/bnsights-bbsf-controls.mjs → fesm2022/bnsights-test-test-controls.mjs} +8803 -8798
  129. package/fesm2022/bnsights-test-test-controls.mjs.map +1 -0
  130. package/index.d.ts +5 -5
  131. package/lib/Shared/Components/app-base-component.d.ts +58 -58
  132. package/lib/Shared/Components/ng-tag-input.d.ts +50 -50
  133. package/lib/Shared/Directives/template-name.directive.d.ts +9 -9
  134. package/lib/Shared/Enums/CalendarView.d.ts +6 -6
  135. package/lib/Shared/Enums/ControlLayout.d.ts +4 -4
  136. package/lib/Shared/Enums/Countries.d.ts +245 -245
  137. package/lib/Shared/Enums/Enums.d.ts +30 -30
  138. package/lib/Shared/Enums/FileType.d.ts +20 -20
  139. package/lib/Shared/Enums/FilterType.d.ts +9 -9
  140. package/lib/Shared/Enums/FontSize.d.ts +5 -5
  141. package/lib/Shared/Enums/ForceDirection.d.ts +4 -4
  142. package/lib/Shared/Enums/IconPosition.d.ts +4 -4
  143. package/lib/Shared/Enums/ImageType.d.ts +8 -8
  144. package/lib/Shared/Enums/InputType.d.ts +8 -8
  145. package/lib/Shared/Enums/Insert.d.ts +7 -7
  146. package/lib/Shared/Enums/LanguageMode.d.ts +9 -9
  147. package/lib/Shared/Enums/LanguageValidation.d.ts +4 -4
  148. package/lib/Shared/Enums/Misc.d.ts +5 -5
  149. package/lib/Shared/Enums/PagingActionMode.d.ts +4 -4
  150. package/lib/Shared/Enums/Para.d.ts +7 -7
  151. package/lib/Shared/Enums/PickerType.d.ts +5 -5
  152. package/lib/Shared/Enums/SelectMode.d.ts +4 -4
  153. package/lib/Shared/Enums/StartView.d.ts +5 -5
  154. package/lib/Shared/Enums/Style.d.ts +6 -6
  155. package/lib/Shared/Enums/StyleConfirmationMode.d.ts +5 -5
  156. package/lib/Shared/Enums/TagInputView.d.ts +5 -5
  157. package/lib/Shared/Enums/map-enums.d.ts +5 -0
  158. package/lib/Shared/Enums/menu-list-enum.d.ts +4 -4
  159. package/lib/Shared/Models/Attribute.d.ts +4 -4
  160. package/lib/Shared/Models/AutocompleteDTO.d.ts +5 -5
  161. package/lib/Shared/Models/AutocompleteOptions.d.ts +40 -40
  162. package/lib/Shared/Models/CalendarEventDTO.d.ts +8 -8
  163. package/lib/Shared/Models/CalendarOptions.d.ts +23 -23
  164. package/lib/Shared/Models/CancelDTO.d.ts +5 -5
  165. package/lib/Shared/Models/CaptchaStyle.d.ts +7 -7
  166. package/lib/Shared/Models/CheckBoxOptions.d.ts +7 -7
  167. package/lib/Shared/Models/ConfirmationModalOptions.d.ts +21 -21
  168. package/lib/Shared/Models/ControlOptionsBase.d.ts +44 -44
  169. package/lib/Shared/Models/CustomValidation.d.ts +10 -10
  170. package/lib/Shared/Models/DropdownListItem.d.ts +4 -4
  171. package/lib/Shared/Models/DropdownOptions.d.ts +33 -33
  172. package/lib/Shared/Models/EditPersonalImage.d.ts +5 -5
  173. package/lib/Shared/Models/EnglishArabicDTO.d.ts +4 -4
  174. package/lib/Shared/Models/FileDTO.d.ts +19 -19
  175. package/lib/Shared/Models/FileUploadModel.d.ts +4 -4
  176. package/lib/Shared/Models/FileUploadOptions.d.ts +19 -19
  177. package/lib/Shared/Models/FilterItem.d.ts +13 -13
  178. package/lib/Shared/Models/FormOptions.d.ts +16 -16
  179. package/lib/Shared/Models/HtmlEditorOptions.d.ts +31 -31
  180. package/lib/Shared/Models/ImageUploadOptions.d.ts +23 -23
  181. package/lib/Shared/Models/MapAutoCompleteOptions.d.ts +8 -6
  182. package/lib/Shared/Models/MapAutocompleteDTO.d.ts +7 -7
  183. package/lib/Shared/Models/MultiLingualHtmlEditorOptions.d.ts +22 -22
  184. package/lib/Shared/Models/MultiLingualTextAreaOptions.d.ts +12 -12
  185. package/lib/Shared/Models/MultilingualControlOptionsBase.d.ts +77 -77
  186. package/lib/Shared/Models/MultilingualTextBoxOptions.d.ts +12 -12
  187. package/lib/Shared/Models/MultipleFileUploadModel.d.ts +7 -7
  188. package/lib/Shared/Models/PagingDTO.d.ts +11 -11
  189. package/lib/Shared/Models/PagingOptions.d.ts +56 -56
  190. package/lib/Shared/Models/PagingPayload.d.ts +5 -5
  191. package/lib/Shared/Models/PhoneOptions.d.ts +21 -21
  192. package/lib/Shared/Models/ProfileImageUploadOptions.d.ts +28 -28
  193. package/lib/Shared/Models/ProfilePictureDTO.d.ts +13 -13
  194. package/lib/Shared/Models/RadioButtonItem.d.ts +4 -4
  195. package/lib/Shared/Models/RadioButtonOptions.d.ts +8 -8
  196. package/lib/Shared/Models/RangeNumber.d.ts +4 -4
  197. package/lib/Shared/Models/Recaptcha.d.ts +6 -6
  198. package/lib/Shared/Models/RecaptchaOptions.d.ts +18 -18
  199. package/lib/Shared/Models/RepeaterField.d.ts +7 -7
  200. package/lib/Shared/Models/RepeaterOptions.d.ts +19 -19
  201. package/lib/Shared/Models/SaveDTO.d.ts +5 -5
  202. package/lib/Shared/Models/TagsInputDTO.d.ts +6 -6
  203. package/lib/Shared/Models/TagsInputOptions.d.ts +57 -57
  204. package/lib/Shared/Models/TextAreaOptions.d.ts +23 -23
  205. package/lib/Shared/Models/TextBoxOptions.d.ts +37 -37
  206. package/lib/Shared/Models/ToggleslideOptions.d.ts +9 -9
  207. package/lib/Shared/Models/UploadPersonalImage.d.ts +5 -5
  208. package/lib/Shared/Models/bread-crumb.d.ts +6 -6
  209. package/lib/Shared/Models/control-filter-Item.d.ts +6 -6
  210. package/lib/Shared/Models/datePickerOptions.d.ts +29 -29
  211. package/lib/Shared/Models/filter-options.d.ts +7 -7
  212. package/lib/Shared/Models/page-header-options.d.ts +71 -71
  213. package/lib/Shared/Pipes/bbsf-date-time.pipe.d.ts +10 -10
  214. package/lib/Shared/Pipes/bbsf-date.pipe.d.ts +10 -10
  215. package/lib/Shared/config/environment.d.ts +1 -1
  216. package/lib/Shared/default_intl.d.ts +21 -21
  217. package/lib/Shared/services/ControlUtility.d.ts +32 -32
  218. package/lib/Shared/services/GlobalSettings.service.d.ts +17 -17
  219. package/lib/Shared/services/OnPagingFiltersChange.service.d.ts +10 -10
  220. package/lib/Shared/services/render-component-service.service.d.ts +10 -10
  221. package/lib/Shared/services/validationErrorMassage.service.d.ts +14 -14
  222. package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +59 -59
  223. package/lib/controls/Calendar/Calendar.component.d.ts +42 -42
  224. package/lib/controls/CheckBox/CheckBox.component.d.ts +37 -37
  225. package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +29 -29
  226. package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +61 -61
  227. package/lib/controls/DropdownList/DropdownList.component.d.ts +55 -55
  228. package/lib/controls/FileUplaod/FileUplaod.component.d.ts +58 -58
  229. package/lib/controls/Form/Form.component.d.ts +28 -28
  230. package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +49 -49
  231. package/lib/controls/ImageUpload/ImageUpload.component.d.ts +70 -70
  232. package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +70 -54
  233. package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +65 -65
  234. package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +74 -74
  235. package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +73 -73
  236. package/lib/controls/Paging/JwPagination.component.d.ts +27 -27
  237. package/lib/controls/Paging/Paging.component.d.ts +57 -57
  238. package/lib/controls/Phone/Phone.component.d.ts +43 -43
  239. package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +69 -69
  240. package/lib/controls/RadioButton/RadioButton.component.d.ts +37 -37
  241. package/lib/controls/Recaptcha/Recaptcha.component.d.ts +41 -41
  242. package/lib/controls/Repeater/repeater/repeater.component.d.ts +29 -29
  243. package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +23 -23
  244. package/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.d.ts +11 -11
  245. package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +19 -19
  246. package/lib/controls/TagsInput/TagsInput.component.d.ts +58 -58
  247. package/lib/controls/TextArea/TextArea.component.d.ts +51 -51
  248. package/lib/controls/TextBox/TextBox.component.d.ts +66 -66
  249. package/lib/controls/Toggleslide/toggleslide.component.d.ts +33 -33
  250. package/lib/controls/bbsf-controls.module.d.ts +70 -77
  251. package/lib/controls/page-header-component/page-header-component.component.d.ts +20 -20
  252. package/package.json +54 -63
  253. package/public-api.d.ts +118 -117
  254. package/src/lib/assets/Style-rtl.scss +46 -28
  255. package/src/lib/assets/Style.scss +4 -4
  256. package/src/lib/assets/images/marker-pin.svg +4 -0
  257. package/src/lib/assets/sass/base.scss +73 -21
  258. package/esm2020/lib/Shared/Models/MapAutoCompleteOptions.mjs +0 -4
  259. package/esm2020/lib/Shared/services/OnPagingFiltersChange.service.mjs +0 -24
  260. package/esm2020/lib/Shared/services/validationErrorMassage.service.mjs +0 -170
  261. package/esm2020/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +0 -262
  262. package/esm2020/lib/controls/Calendar/Calendar.component.mjs +0 -173
  263. package/esm2020/lib/controls/CheckBox/CheckBox.component.mjs +0 -117
  264. package/esm2020/lib/controls/DateTimePicker/DateTimePicker.component.mjs +0 -223
  265. package/esm2020/lib/controls/DropdownList/DropdownList.component.mjs +0 -194
  266. package/esm2020/lib/controls/FileUplaod/FileUplaod.component.mjs +0 -447
  267. package/esm2020/lib/controls/HtmlEditor/HtmlEditor.component.mjs +0 -226
  268. package/esm2020/lib/controls/ImageUpload/ImageUpload.component.mjs +0 -350
  269. package/esm2020/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +0 -325
  270. package/esm2020/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +0 -427
  271. package/esm2020/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +0 -429
  272. package/esm2020/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +0 -428
  273. package/esm2020/lib/controls/Phone/Phone.component.mjs +0 -129
  274. package/esm2020/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +0 -376
  275. package/esm2020/lib/controls/RadioButton/RadioButton.component.mjs +0 -109
  276. package/esm2020/lib/controls/TagsInput/TagsInput.component.mjs +0 -277
  277. package/esm2020/lib/controls/TextArea/TextArea.component.mjs +0 -196
  278. package/esm2020/lib/controls/TextBox/TextBox.component.mjs +0 -312
  279. package/esm2020/lib/controls/Toggleslide/toggleslide.component.mjs +0 -90
  280. package/esm2020/lib/controls/bbsf-controls.module.mjs +0 -361
  281. package/fesm2015/bnsights-bbsf-controls.mjs.map +0 -1
  282. package/fesm2020/bnsights-bbsf-controls.mjs.map +0 -1
@@ -1,312 +0,0 @@
1
- import { Component, Input, Optional, Output, EventEmitter, } from '@angular/core';
2
- import { FormControl, Validators, } from '@angular/forms';
3
- import { InputType } from '../../Shared/Enums/InputType';
4
- import { LanguageValidation } from '../../Shared/Enums/LanguageValidation';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../../Shared/services/ControlUtility";
7
- import * as i2 from "@angular/forms";
8
- import * as i3 from "@bnsights/bbsf-utilities";
9
- import * as i4 from "../../Shared/services/GlobalSettings.service";
10
- import * as i5 from "@angular/common";
11
- import * as i6 from "@ng-bootstrap/ng-bootstrap";
12
- import * as i7 from "ngx-mask";
13
- import * as i8 from "@angular/cdk/bidi";
14
- import * as i9 from "ngx-intl-tel-input";
15
- import * as i10 from "ng-inline-svg";
16
- export class TextboxComponent {
17
- // tslint:disable-next-line: max-line-length
18
- constructor(controlUtility, controlContainer, TextControlHost, UtilityService, controlValidationService, globalSettings) {
19
- this.controlUtility = controlUtility;
20
- this.controlContainer = controlContainer;
21
- this.TextControlHost = TextControlHost;
22
- this.UtilityService = UtilityService;
23
- this.controlValidationService = controlValidationService;
24
- this.globalSettings = globalSettings;
25
- this.OnChange = new EventEmitter();
26
- this.OnBlur = new EventEmitter();
27
- this.inputType = InputType;
28
- this.MaskPattern = '';
29
- this.WordCount = 0;
30
- this.WordCountArray = 0;
31
- this.IsShowWordCount = false;
32
- this.markAllAsTouched = false;
33
- this.validationRules = [];
34
- this.validationRulesasync = [];
35
- //For Show warning message of max length limit
36
- this.currentCharsCount = 0;
37
- this.showCharsLimitMsg = false;
38
- this.hasCharsLimitValidationError = false;
39
- this.minCharsLimit = -1; //To disable chars limit feature by default
40
- this.maxLimitWarningMsg = '';
41
- this.resetError = () => {
42
- this.controlValidationService.removeGlobalError();
43
- };
44
- //External Method
45
- this.RemoveRequiredValidation = () => {
46
- this.controlUtility.RemoveRequiredValidation(this.TextBoxFormControl, this.validationRules, this.options);
47
- };
48
- //External Method
49
- this.AddRequiredValidation = () => {
50
- this.controlUtility.AddRequiredValidation(this.TextBoxFormControl, this.validationRules, this.options);
51
- };
52
- //External Method
53
- this.RemoveCustomValidation = (CustomValidation) => {
54
- this.controlUtility.RemoveCustomValidation(this.TextBoxFormControl, this.validationRules, CustomValidation);
55
- };
56
- //External Method
57
- this.AddCustomValidation = (CustomValidation) => {
58
- this.controlUtility.AddCustomValidation(this.TextBoxFormControl, this.validationRules, CustomValidation);
59
- };
60
- //External Method
61
- this.IsValid = () => {
62
- this.controlUtility.IsValid(this.TextBoxFormControl);
63
- };
64
- TextboxComponent.controlContainerstatic = this.controlContainer;
65
- }
66
- ngOnInit() {
67
- if (this.options.IsReadonly && !this.options.Value) {
68
- this.options.Value = this.UtilityService.getResourceValue('NA');
69
- }
70
- if (this.options.ForceDirection)
71
- this.textDir = this.options.ForceDirection == 2 ? 'rtl' : 'ltr';
72
- else
73
- this.textDir = localStorage.getItem('language') == 'ar' ? 'rtl' : 'ltr';
74
- this.controlValidationService.isCreatedBefor = false;
75
- if (!this.options.MaxLength)
76
- this.options.MaxLength = this.globalSettings.MaxLengthTextBox;
77
- if (!this.options.ViewType)
78
- this.options.ViewType = this.globalSettings.ViewType;
79
- if (this.options.MaskPattern != null && this.options.MaskPattern != '') {
80
- this.MaskPattern = this.options.MaskPattern;
81
- this.options.Placeholder = this.MaskPattern;
82
- }
83
- this.group.addControl(this.options.Name, new FormControl(''));
84
- this.TextBoxFormControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
85
- this.TextBoxFormControl.setValue(this.options.Value);
86
- if (this.options.LabelKey != null && this.options.LabelKey != '')
87
- this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
88
- this.getCustomErrorsMassages();
89
- if (this.options.IsRequired) {
90
- this.validationRules.push(Validators.required);
91
- }
92
- switch (this.options.Type) {
93
- case InputType.Email:
94
- this.validationRules.push(Validators.compose([
95
- this.controlUtility.patternValidator(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, { EmailValidationKey: this.EmailValidationKey }),
96
- ]));
97
- break;
98
- case InputType.URL:
99
- const pattern = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]!\$&'\(\)\*\+,;=.]+$/;
100
- this.validationRules.push(Validators.compose([
101
- this.controlUtility.patternValidator(pattern, { URLValidationKey: this.URLValidationKey }),
102
- ]));
103
- break;
104
- case InputType.EID:
105
- this.MaskPattern = '000-0000-0000000-0';
106
- this.options.Placeholder = this.MaskPattern;
107
- break;
108
- case InputType.Number:
109
- if (this.options.CustomValidation.length == 0) {
110
- this.validationRules.push(Validators.compose([
111
- this.controlUtility.patternValidator(/^[0-9]*$/, {
112
- IntegerNumberValidationKey: '',
113
- }),
114
- ]));
115
- this.validationRules.push(Validators.compose([
116
- this.controlUtility.patternValidator(/^[+]?([.]\d+|\d+[.]?\d*)$/, { PositiveNumberValidationKey: '' }),
117
- ]));
118
- }
119
- if (this.options.NumberRange != null) {
120
- this.validationRules.push(Validators.min(this.options.NumberRange.From));
121
- this.validationRules.push(Validators.max(this.options.NumberRange.To));
122
- }
123
- break;
124
- case InputType.Password:
125
- if (!this.options.RemoveDefaultPasswordValidation) {
126
- this.validationRules.push(Validators.compose([
127
- this.controlUtility.patternValidator(/\d/, {
128
- PasswordComplexityHasNumber: this.PasswordComplexityHasNumber,
129
- }),
130
- this.controlUtility.patternValidator(/[A-Z]/, {
131
- PasswordComplexityHasCapitalLetter: this.PasswordComplexityHasCapitalLetter,
132
- }),
133
- this.controlUtility.patternValidator(/[a-z]/, {
134
- PasswordComplexityHasSmallLetter: this.PasswordComplexityHasSmallLetter,
135
- }),
136
- this.controlUtility.patternValidator(/[!@#$%^&*(),.?":{}|<>]/, {
137
- PasswordComplexityHasSpecialLetter: this.PasswordComplexityHasSpecialLetter,
138
- }),
139
- Validators.minLength(8),
140
- ]));
141
- }
142
- break;
143
- }
144
- if (this.options.LanguageValidation) {
145
- if (this.options.LanguageValidation == LanguageValidation.Arabic) {
146
- this.validationRules.push(Validators.compose([
147
- this.controlUtility.patternValidator(/^[^A-Za-z]*$/, {
148
- ArabicLetterOnly: this.ArabicLetterOnly,
149
- }),
150
- ]));
151
- }
152
- else if (this.options.LanguageValidation == LanguageValidation.English) {
153
- this.validationRules.push(Validators.compose([
154
- this.controlUtility.patternValidator(/^[~`!@#$%^&*()‘’“”_+=[\]\\{}|;':",.\/<>?a-zA-Z0-9- ]*$/, { EnglishLetterOnly: this.EnglishLetterOnly }),
155
- ]));
156
- }
157
- }
158
- if (this.options.CustomValidation.length > 0) {
159
- let Validations = this.options.CustomValidation;
160
- for (let index = 0; index < Validations.length; index++) {
161
- const Validation = Validations[index];
162
- this.validationRules.push(Validation.functionBody);
163
- }
164
- }
165
- if (this.options.MinLength > 0) {
166
- this.validationRules.push(Validators.minLength(this.options.MinLength));
167
- }
168
- if (this.options.MaxLength > 0) {
169
- this.validationRules.push(Validators.maxLength(this.options.MaxLength));
170
- if (!this.options.MaxLengthWarningLimit)
171
- this.options.MaxLengthWarningLimit =
172
- this.globalSettings.MaxLengthWarningLimit;
173
- this.minCharsLimit =
174
- this.options.MaxLength - this.options.MaxLengthWarningLimit;
175
- }
176
- this.TextBoxFormControl.setValidators(this.validationRules);
177
- this.TextBoxFormControl.setAsyncValidators(this.validationRulesasync);
178
- if (this.options.IsDisabled) {
179
- this.TextBoxFormControl.disable();
180
- }
181
- this.TextControlHost.ngSubmit.subscribe((value) => {
182
- this.group.markAllAsTouched();
183
- this.markAllAsTouched = true;
184
- });
185
- this.options.ValidationRules = this.validationRules;
186
- }
187
- ngAfterViewInit() {
188
- this.controlUtility.setAttributeForControl(this.options);
189
- }
190
- showGlobalError() {
191
- this.controlUtility.showGlobalError();
192
- }
193
- getErrorValidation(ErrorList) {
194
- if (this.markAllAsTouched && this.group.invalid) {
195
- this.showGlobalError();
196
- this.markAllAsTouched = false;
197
- }
198
- return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
199
- }
200
- getInputType(type) {
201
- return this.controlUtility.getInputType(type);
202
- }
203
- trimControlValue() {
204
- let originalValue = this.controlUtility.trimControlValue(this.TextBoxFormControl.value);
205
- this.TextBoxFormControl.patchValue(originalValue);
206
- if (this.options.PatchFunction &&
207
- this.options.PatchPath &&
208
- this.TextBoxFormControl.valid) {
209
- this.controlUtility.patchControlValue(originalValue, this.options.PatchFunction, this.options.PatchPath);
210
- }
211
- }
212
- copyInputMessage(inputElement) {
213
- this.controlUtility.CopyInputMessage(inputElement);
214
- }
215
- getCustomErrorsMassages() {
216
- this.EmailValidationKey =
217
- this.UtilityService.getResourceValue('EmailValidationKey');
218
- this.URLValidationKey =
219
- this.UtilityService.getResourceValue('urlValidationError');
220
- this.PasswordComplexityHasCapitalLetter =
221
- this.UtilityService.getResourceValue('PasswordComplexityHasCapitalLetter');
222
- this.PasswordComplexityHasNumber = this.UtilityService.getResourceValue('PasswordComplexityHasNumber');
223
- this.PasswordComplexityHasSmallLetter =
224
- this.UtilityService.getResourceValue('PasswordComplexityHasSmallLetter');
225
- this.PasswordComplexityHasSpecialLetter =
226
- this.UtilityService.getResourceValue('PasswordComplexityHasSpecialLetter');
227
- this.MaxWordCountValidationKey = this.UtilityService.getResourceValue('MaxWordCountValidationKey');
228
- this.ArabicLetterOnly = this.UtilityService.getResourceValue('ArabicIsRequiredAndOnly50CharactersEnglish');
229
- this.EnglishLetterOnly =
230
- this.UtilityService.getResourceValue('EnglishLetterOnly');
231
- }
232
- onTextChange() {
233
- if (this.options.Type == InputType.Number)
234
- if (!this.TextBoxFormControl.value) {
235
- this.TextBoxFormControl.setErrors({ IntegerNumberValidationKey: '' });
236
- return;
237
- }
238
- if (this.TextBoxFormControl.value == '') {
239
- this.WordCountArray = 0;
240
- this.WordCount = 0;
241
- }
242
- else {
243
- this.WordCountArray = this.TextBoxFormControl.value.split(' ').length;
244
- if (this.WordCountArray > 0) {
245
- if (this.WordCountArray > this.options.MaxWordCount) {
246
- this.WordCount = this.options.MaxWordCount;
247
- this.TextBoxFormControl.setErrors({
248
- MaxWordCountValidationKey: this.options.MaxWordCount,
249
- });
250
- this.TextBoxFormControl.markAsTouched();
251
- this.TextBoxFormControl.invalid;
252
- }
253
- else {
254
- this.WordCount = this.WordCountArray;
255
- }
256
- }
257
- //Check for maxlength limit count
258
- //MaxLength should be gretaer than or equals chars limit so that minCharsLimit would be >= 0
259
- if (this.options.MaxLength && this.minCharsLimit >= 0) {
260
- this.currentCharsCount = this.TextBoxFormControl.value.length;
261
- if (this.currentCharsCount > this.minCharsLimit) {
262
- this.showCharsLimitMsg = true;
263
- this.hasCharsLimitValidationError = true;
264
- if (this.currentCharsCount == this.options.MaxLength)
265
- this.charsLimitMsgClass = 'danger';
266
- else
267
- this.charsLimitMsgClass = 'warning';
268
- }
269
- else {
270
- this.showCharsLimitMsg = false;
271
- this.hasCharsLimitValidationError = false;
272
- }
273
- var max = this.options.MaxLength;
274
- var current = this.currentCharsCount;
275
- this.maxLimitWarningMsg = this.UtilityService.getResourceValue('MaxLengthLimitWarning');
276
- }
277
- }
278
- this.OnChange.emit(this.TextBoxFormControl.value);
279
- }
280
- onFocus(isFocus) {
281
- this.IsShowWordCount = isFocus;
282
- //onFocus
283
- if (isFocus) {
284
- if (this.hasCharsLimitValidationError)
285
- //check if there was previous validation error
286
- this.showCharsLimitMsg = true;
287
- } //onFocusOut
288
- else
289
- this.showCharsLimitMsg = false;
290
- }
291
- onTextBlur() {
292
- this.OnBlur.emit(this.TextBoxFormControl.value);
293
- }
294
- }
295
- TextboxComponent.controlContainerstatic = null;
296
- TextboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TextboxComponent, deps: [{ token: i1.ControlUtility }, { token: i2.ControlContainer, optional: true }, { token: i2.FormGroupDirective }, { token: i3.UtilityService }, { token: i3.ControlValidationService }, { token: i4.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component });
297
- TextboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TextboxComponent, selector: "BBSF-TextBox", inputs: { group: "group", options: "options" }, outputs: { OnChange: "OnChange", OnBlur: "OnBlur" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired))&&!options.IsReadonly\" class=\"text-danger\">*</span>\r\n </label>\r\n <!--MaskPattern-->\r\n <div *ngIf=\"MaskPattern!=null&&MaskPattern!=''&&!options.IsReadonly\" class=\"bbsf-input-container\"\r\n [ngClass]=\"options.EnableCopyToClipboard? 'p-40px' : '' \">\r\n <!--Icon-->\r\n <div *ngIf=\"options.Icon!=null\" class=\"svg svg-icon-grey bbsf-icon\" [ngClass]=\"(options.IconPosition==1)?'bbsf-left-icon':'bbsf-right-icon'\">\r\n <span [inlineSVG]=\"options.Icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{options.ExtraClasses}}\" [mask]=\"MaskPattern\" placeHolderCharacter=\" \" [showMaskTyped]=\"true\" [validation]=\"true\"\r\n [dir]=\"textDir\" aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{options.Name}}\" type=\"{{getInputType(options.Type)}}\"\r\n [(ngModel)]=\"options.Value\" [class.is-invalid]=\"TextBoxFormControl.invalid && TextBoxFormControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" autocomplete=\"{{options.AutoComplete}}\" (change)=\"trimControlValue()\"\r\n (keyup)=\"onTextChange()\" [readonly]=\"options.IsReadonly\"\r\n (keydown)=\"WordCountArray>options.MaxWordCount&&$event.keyCode !=8?$event.preventDefault():null\" #userinput (blur)=\"onTextBlur()\">\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" *ngIf=\"options.EnableCopyToClipboard\" (click)=\"copyInputMessage(userinput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n <!--NoMaskPattern-->\r\n <div *ngIf=\"MaskPattern==null||MaskPattern==''&&!options.IsReadonly\" class=\"bbsf-input-container\"\r\n [ngClass]=\"options.EnableCopyToClipboard? 'p-40px' : '' \">\r\n <!--Icon-->\r\n <div class=\"svg svg-icon-grey bbsf-icon\" [ngClass]=\"(options.IconPosition==1)?'bbsf-left-icon':'bbsf-right-icon'\" *ngIf=\"options.Icon!=null\">\r\n <span [inlineSVG]=\"options.Icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{options.ExtraClasses}} \" [dir]=\"textDir\" (focus)=\"onFocus(true)\" (focusout)=\"onFocus(false)\"\r\n maxlength=\"{{options.MaxLength}}\" minlength=\"{{options.MinLength}}\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{options.Name}}\" type=\"{{getInputType(options.Type)}}\"\r\n [class.is-invalid]=\"TextBoxFormControl.invalid && TextBoxFormControl.touched\" placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\"\r\n autocomplete=\"{{options.AutoComplete}}\" (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [(ngModel)]=\"options.Value\"\r\n (keydown)=\"WordCountArray>options.MaxWordCount&&$event.keyCode !=8?$event.preventDefault():null\" [readonly]=\"options.IsReadonly\" #userinput\r\n (blur)=\"onTextBlur()\">\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" triggers=\"click:blur\" *ngIf=\"options.EnableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userinput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.IsReadonly\">\r\n <a *ngIf=\"options.Type==inputType.Email\" href=\"mailto: {{options.Value}}\">{{options.Value}}</a>\r\n <a *ngIf=\"options.Type==inputType.URL\" href=\"{{options.Value}}\" target=\"_blank\">{{options.Value}}</a>\r\n <span *ngIf=\"options.Type!=inputType.URL&&options.Type!=inputType.Email\" class=\"readonly-view\">{{options.Value}}</span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.MaxWordCount>0&&IsShowWordCount\">{{WordCount}}/{{options.MaxWordCount}}\r\n Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showCharsLimitMsg\"\r\n [ngClass]=\"{'badge-light-warning': charsLimitMsgClass === 'warning', 'badge-light-danger' : charsLimitMsgClass === 'danger' }\">\r\n {{maxLimitWarningMsg}}\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.LabelDescription!=null\">{{options.LabelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" [dir]=\"textDir\" *ngIf=\"(TextBoxFormControl.invalid && TextBoxFormControl.touched)\">\r\n {{getErrorValidation(TextBoxFormControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty)\">{{resetError()}}</div>\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i7.MaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime"] }, { kind: "directive", type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i9.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "pipe", type: i5.KeyValuePipe, name: "keyvalue" }] });
298
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TextboxComponent, decorators: [{
299
- type: Component,
300
- args: [{ selector: 'BBSF-TextBox', template: "<div class=\"form-group bbsf-control bbsf-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired))&&!options.IsReadonly\" class=\"text-danger\">*</span>\r\n </label>\r\n <!--MaskPattern-->\r\n <div *ngIf=\"MaskPattern!=null&&MaskPattern!=''&&!options.IsReadonly\" class=\"bbsf-input-container\"\r\n [ngClass]=\"options.EnableCopyToClipboard? 'p-40px' : '' \">\r\n <!--Icon-->\r\n <div *ngIf=\"options.Icon!=null\" class=\"svg svg-icon-grey bbsf-icon\" [ngClass]=\"(options.IconPosition==1)?'bbsf-left-icon':'bbsf-right-icon'\">\r\n <span [inlineSVG]=\"options.Icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{options.ExtraClasses}}\" [mask]=\"MaskPattern\" placeHolderCharacter=\" \" [showMaskTyped]=\"true\" [validation]=\"true\"\r\n [dir]=\"textDir\" aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{options.Name}}\" type=\"{{getInputType(options.Type)}}\"\r\n [(ngModel)]=\"options.Value\" [class.is-invalid]=\"TextBoxFormControl.invalid && TextBoxFormControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" autocomplete=\"{{options.AutoComplete}}\" (change)=\"trimControlValue()\"\r\n (keyup)=\"onTextChange()\" [readonly]=\"options.IsReadonly\"\r\n (keydown)=\"WordCountArray>options.MaxWordCount&&$event.keyCode !=8?$event.preventDefault():null\" #userinput (blur)=\"onTextBlur()\">\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" *ngIf=\"options.EnableCopyToClipboard\" (click)=\"copyInputMessage(userinput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n <!--NoMaskPattern-->\r\n <div *ngIf=\"MaskPattern==null||MaskPattern==''&&!options.IsReadonly\" class=\"bbsf-input-container\"\r\n [ngClass]=\"options.EnableCopyToClipboard? 'p-40px' : '' \">\r\n <!--Icon-->\r\n <div class=\"svg svg-icon-grey bbsf-icon\" [ngClass]=\"(options.IconPosition==1)?'bbsf-left-icon':'bbsf-right-icon'\" *ngIf=\"options.Icon!=null\">\r\n <span [inlineSVG]=\"options.Icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{options.ExtraClasses}} \" [dir]=\"textDir\" (focus)=\"onFocus(true)\" (focusout)=\"onFocus(false)\"\r\n maxlength=\"{{options.MaxLength}}\" minlength=\"{{options.MinLength}}\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{options.Name}}\" type=\"{{getInputType(options.Type)}}\"\r\n [class.is-invalid]=\"TextBoxFormControl.invalid && TextBoxFormControl.touched\" placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\"\r\n autocomplete=\"{{options.AutoComplete}}\" (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [(ngModel)]=\"options.Value\"\r\n (keydown)=\"WordCountArray>options.MaxWordCount&&$event.keyCode !=8?$event.preventDefault():null\" [readonly]=\"options.IsReadonly\" #userinput\r\n (blur)=\"onTextBlur()\">\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" triggers=\"click:blur\" *ngIf=\"options.EnableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userinput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.IsReadonly\">\r\n <a *ngIf=\"options.Type==inputType.Email\" href=\"mailto: {{options.Value}}\">{{options.Value}}</a>\r\n <a *ngIf=\"options.Type==inputType.URL\" href=\"{{options.Value}}\" target=\"_blank\">{{options.Value}}</a>\r\n <span *ngIf=\"options.Type!=inputType.URL&&options.Type!=inputType.Email\" class=\"readonly-view\">{{options.Value}}</span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.MaxWordCount>0&&IsShowWordCount\">{{WordCount}}/{{options.MaxWordCount}}\r\n Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showCharsLimitMsg\"\r\n [ngClass]=\"{'badge-light-warning': charsLimitMsgClass === 'warning', 'badge-light-danger' : charsLimitMsgClass === 'danger' }\">\r\n {{maxLimitWarningMsg}}\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.LabelDescription!=null\">{{options.LabelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" [dir]=\"textDir\" *ngIf=\"(TextBoxFormControl.invalid && TextBoxFormControl.touched)\">\r\n {{getErrorValidation(TextBoxFormControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty)\">{{resetError()}}</div>\r\n</div>" }]
301
- }], ctorParameters: function () { return [{ type: i1.ControlUtility }, { type: i2.ControlContainer, decorators: [{
302
- type: Optional
303
- }] }, { type: i2.FormGroupDirective }, { type: i3.UtilityService }, { type: i3.ControlValidationService }, { type: i4.GlobalSettings }]; }, propDecorators: { group: [{
304
- type: Input
305
- }], options: [{
306
- type: Input
307
- }], OnChange: [{
308
- type: Output
309
- }], OnBlur: [{
310
- type: Output
311
- }] } });
312
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvVGV4dEJveC9UZXh0Qm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9UZXh0Qm94L1RleHRCb3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFdBQVcsRUFDWCxVQUFVLEdBS1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFPekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7Ozs7OztBQU8zRSxNQUFNLE9BQU8sZ0JBQWdCO0lBRTNCLDRDQUE0QztJQUM1QyxZQUNVLGNBQThCLEVBQ2xCLGdCQUFrQyxFQUMvQyxlQUFtQyxFQUNuQyxjQUE4QixFQUM3Qix3QkFBa0QsRUFDbEQsY0FBOEI7UUFMOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ2xCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDL0Msb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBQ25DLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM3Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQU05QixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUvQixjQUFTLEdBQUcsU0FBUyxDQUFBO1FBRTVC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QUM7SUFFRCxPQUFPLENBQUMsT0FBZ0I7UUFDdEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7UUFFL0IsU0FBUztRQUNULElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxJQUFJLENBQUMsNEJBQTRCO2dCQUNuQyw4Q0FBOEM7Z0JBQzlDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7U0FDakMsQ0FBQyxZQUFZOztZQUNULElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQXVDRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7O0FBcllNLHVDQUFzQixHQUFHLElBQUksQ0FBQzs4R0FEMUIsZ0JBQWdCO2tHQUFoQixnQkFBZ0IseUpDL0I3QixrZ0tBd0VNOzRGRHpDTyxnQkFBZ0I7a0JBSjVCLFNBQVM7K0JBQ0UsY0FBYzs7MEJBUXJCLFFBQVE7OEtBUUYsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEZvcm1Db250cm9sLFxyXG4gIFZhbGlkYXRvcnMsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIEFic3RyYWN0Q29udHJvbCxcclxuICBDb250cm9sQ29udGFpbmVyLFxyXG4gIEZvcm1Hcm91cERpcmVjdGl2ZSxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRleHRCb3hPcHRpb25zIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9UZXh0Qm94T3B0aW9ucyc7XHJcbmltcG9ydCB7IElucHV0VHlwZSB9IGZyb20gJy4uLy4uL1NoYXJlZC9FbnVtcy9JbnB1dFR5cGUnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7XHJcbiAgQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gIFV0aWxpdHlTZXJ2aWNlLFxyXG59IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IEdsb2JhbFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0dsb2JhbFNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMYW5ndWFnZVZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvTGFuZ3VhZ2VWYWxpZGF0aW9uJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdCQlNGLVRleHRCb3gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9UZXh0Qm94LmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRleHRib3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHN0YXRpYyBjb250cm9sQ29udGFpbmVyc3RhdGljID0gbnVsbDtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjb250cm9sVXRpbGl0eTogQ29udHJvbFV0aWxpdHksXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICBwdWJsaWMgVGV4dENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmUsXHJcbiAgICBwdWJsaWMgVXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb250cm9sVmFsaWRhdGlvblNlcnZpY2U6IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZ2xvYmFsU2V0dGluZ3M6IEdsb2JhbFNldHRpbmdzXHJcbiAgKSB7XHJcbiAgICBUZXh0Ym94Q29tcG9uZW50LmNvbnRyb2xDb250YWluZXJzdGF0aWMgPSB0aGlzLmNvbnRyb2xDb250YWluZXI7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogVGV4dEJveE9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIE9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBPbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyBpbnB1dFR5cGUgPSBJbnB1dFR5cGVcclxuICBUZXh0Qm94Rm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBNYXNrUGF0dGVybjogc3RyaW5nID0gJyc7XHJcbiAgV29yZENvdW50OiBudW1iZXIgPSAwO1xyXG4gIFdvcmRDb3VudEFycmF5OiBudW1iZXIgPSAwO1xyXG4gIEVtYWlsVmFsaWRhdGlvbktleTogc3RyaW5nO1xyXG4gIFVSTFZhbGlkYXRpb25LZXk6IHN0cmluZztcclxuICBQYXNzd29yZENvbXBsZXhpdHlIYXNOdW1iZXI6IHN0cmluZztcclxuICBBcmFiaWNMZXR0ZXJPbmx5OiBzdHJpbmc7XHJcbiAgRW5nbGlzaExldHRlck9ubHk6IHN0cmluZztcclxuICBQYXNzd29yZENvbXBsZXhpdHlIYXNDYXBpdGFsTGV0dGVyOiBzdHJpbmc7XHJcbiAgUGFzc3dvcmRDb21wbGV4aXR5SGFzU21hbGxMZXR0ZXI6IHN0cmluZztcclxuICBQYXNzd29yZENvbXBsZXhpdHlIYXNTcGVjaWFsTGV0dGVyOiBzdHJpbmc7XHJcbiAgTWF4V29yZENvdW50VmFsaWRhdGlvbktleTogc3RyaW5nO1xyXG4gIElzU2hvd1dvcmRDb3VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG1hcmtBbGxBc1RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB2YWxpZGF0aW9uUnVsZXMgPSBbXTtcclxuICB2YWxpZGF0aW9uUnVsZXNhc3luYyA9IFtdO1xyXG4gIC8vRm9yIFNob3cgd2FybmluZyBtZXNzYWdlIG9mIG1heCBsZW5ndGggbGltaXRcclxuICBjdXJyZW50Q2hhcnNDb3VudDogbnVtYmVyID0gMDtcclxuICBzaG93Q2hhcnNMaW1pdE1zZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhhc0NoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjaGFyc0xpbWl0TXNnQ2xhc3M6IHN0cmluZztcclxuICBtaW5DaGFyc0xpbWl0OiBudW1iZXIgPSAtMTsgLy9UbyBkaXNhYmxlIGNoYXJzIGxpbWl0IGZlYXR1cmUgYnkgZGVmYXVsdFxyXG4gIG1heExpbWl0V2FybmluZ01zZzogc3RyaW5nID0gJyc7XHJcbiAgdGV4dERpcjtcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuSXNSZWFkb25seSAmJiAhdGhpcy5vcHRpb25zLlZhbHVlKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5WYWx1ZSA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnTkEnKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuRm9yY2VEaXJlY3Rpb24pXHJcbiAgICAgIHRoaXMudGV4dERpciA9IHRoaXMub3B0aW9ucy5Gb3JjZURpcmVjdGlvbiA9PSAyID8gJ3J0bCcgOiAnbHRyJztcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy50ZXh0RGlyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJykgPT0gJ2FyJyA/ICdydGwnIDogJ2x0cic7XHJcblxyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UuaXNDcmVhdGVkQmVmb3IgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5NYXhMZW5ndGgpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5NYXhMZW5ndGggPSB0aGlzLmdsb2JhbFNldHRpbmdzLk1heExlbmd0aFRleHRCb3g7XHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuVmlld1R5cGUpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5WaWV3VHlwZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuVmlld1R5cGU7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5NYXNrUGF0dGVybiAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5NYXNrUGF0dGVybiAhPSAnJykge1xyXG4gICAgICB0aGlzLk1hc2tQYXR0ZXJuID0gdGhpcy5vcHRpb25zLk1hc2tQYXR0ZXJuO1xyXG4gICAgICB0aGlzLm9wdGlvbnMuUGxhY2Vob2xkZXIgPSB0aGlzLk1hc2tQYXR0ZXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncm91cC5hZGRDb250cm9sKHRoaXMub3B0aW9ucy5OYW1lLCBuZXcgRm9ybUNvbnRyb2woJycpKTtcclxuICAgIHRoaXMuVGV4dEJveEZvcm1Db250cm9sID0gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm9wdGlvbnMuTmFtZV07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuVGV4dEJveEZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMub3B0aW9ucy5WYWx1ZSk7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSAnJylcclxuICAgICAgdGhpcy5vcHRpb25zLkxhYmVsVmFsdWUgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLkxhYmVsS2V5XHJcbiAgICAgICk7XHJcblxyXG4gICAgdGhpcy5nZXRDdXN0b21FcnJvcnNNYXNzYWdlcygpO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy5UeXBlKSB7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlLkVtYWlsOlxyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoXHJcbiAgICAgICAgICAgICAgL14oKFtePD4oKVtcXF1cXFxcLiw7Olxcc0BcXFwiXSsoXFwuW148PigpW1xcXVxcXFwuLDs6XFxzQFxcXCJdKykqKXwoXFxcIi4rXFxcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcXSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC8sXHJcbiAgICAgICAgICAgICAgeyBFbWFpbFZhbGlkYXRpb25LZXk6IHRoaXMuRW1haWxWYWxpZGF0aW9uS2V5IH1cclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlLlVSTDpcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gL14oPzpodHRwKHMpPzpcXC9cXC8pP1tcXHcuLV0rKD86XFwuW1xcd1xcLi1dKykrW1xcd1xcLVxcLl9+Oi8/I1tcXF0hXFwkJidcXChcXClcXCpcXCssOz0uXSskLztcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgIHBhdHRlcm4sXHJcbiAgICAgICAgICAgICAgeyBVUkxWYWxpZGF0aW9uS2V5OiB0aGlzLlVSTFZhbGlkYXRpb25LZXkgfVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5FSUQ6XHJcbiAgICAgICAgdGhpcy5NYXNrUGF0dGVybiA9ICcwMDAtMDAwMC0wMDAwMDAwLTAnO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5QbGFjZWhvbGRlciA9IHRoaXMuTWFza1BhdHRlcm47XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnB1dFR5cGUuTnVtYmVyOlxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuQ3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL15bMC05XSokLywge1xyXG4gICAgICAgICAgICAgICAgSW50ZWdlck51bWJlclZhbGlkYXRpb25LZXk6ICcnLFxyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgICAgL15bK10/KFsuXVxcZCt8XFxkK1suXT9cXGQqKSQvLFxyXG4gICAgICAgICAgICAgICAgeyBQb3NpdGl2ZU51bWJlclZhbGlkYXRpb25LZXk6ICcnIH1cclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5OdW1iZXJSYW5nZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLm1pbih0aGlzLm9wdGlvbnMuTnVtYmVyUmFuZ2UuRnJvbSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLm1heCh0aGlzLm9wdGlvbnMuTnVtYmVyUmFuZ2UuVG8pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBJbnB1dFR5cGUuUGFzc3dvcmQ6XHJcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuUmVtb3ZlRGVmYXVsdFBhc3N3b3JkVmFsaWRhdGlvbikge1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL1xcZC8sIHtcclxuICAgICAgICAgICAgICAgIFBhc3N3b3JkQ29tcGxleGl0eUhhc051bWJlcjogdGhpcy5QYXNzd29yZENvbXBsZXhpdHlIYXNOdW1iZXIsXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKC9bQS1aXS8sIHtcclxuICAgICAgICAgICAgICAgIFBhc3N3b3JkQ29tcGxleGl0eUhhc0NhcGl0YWxMZXR0ZXI6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuUGFzc3dvcmRDb21wbGV4aXR5SGFzQ2FwaXRhbExldHRlcixcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL1thLXpdLywge1xyXG4gICAgICAgICAgICAgICAgUGFzc3dvcmRDb21wbGV4aXR5SGFzU21hbGxMZXR0ZXI6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuUGFzc3dvcmRDb21wbGV4aXR5SGFzU21hbGxMZXR0ZXIsXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKC9bIUAjJCVeJiooKSwuP1wiOnt9fDw+XS8sIHtcclxuICAgICAgICAgICAgICAgIFBhc3N3b3JkQ29tcGxleGl0eUhhc1NwZWNpYWxMZXR0ZXI6XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuUGFzc3dvcmRDb21wbGV4aXR5SGFzU3BlY2lhbExldHRlcixcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KSxcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5MYW5ndWFnZVZhbGlkYXRpb24pIHtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5MYW5ndWFnZVZhbGlkYXRpb24gPT0gTGFuZ3VhZ2VWYWxpZGF0aW9uLkFyYWJpYykge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoL15bXkEtWmEtel0qJC8sIHtcclxuICAgICAgICAgICAgICBBcmFiaWNMZXR0ZXJPbmx5OiB0aGlzLkFyYWJpY0xldHRlck9ubHksXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5MYW5ndWFnZVZhbGlkYXRpb24gPT0gTGFuZ3VhZ2VWYWxpZGF0aW9uLkVuZ2xpc2hcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChcclxuICAgICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcihcclxuICAgICAgICAgICAgICAvXlt+YCFAIyQlXiYqKCnigJjigJnigJzigJ1fKz1bXFxdXFxcXHt9fDsnOlwiLC5cXC88Pj9hLXpBLVowLTktIF0qJC8sXHJcbiAgICAgICAgICAgICAgeyBFbmdsaXNoTGV0dGVyT25seTogdGhpcy5FbmdsaXNoTGV0dGVyT25seSB9XHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgVmFsaWRhdGlvbnMgPSB0aGlzLm9wdGlvbnMuQ3VzdG9tVmFsaWRhdGlvbjtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFZhbGlkYXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IFZhbGlkYXRpb24gPSBWYWxpZGF0aW9uc1tpbmRleF07XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0aW9uLmZ1bmN0aW9uQm9keSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuTWluTGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMub3B0aW9ucy5NaW5MZW5ndGgpKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMub3B0aW9ucy5NYXhMZW5ndGgpKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLk1heExlbmd0aFdhcm5pbmdMaW1pdClcclxuICAgICAgICB0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoV2FybmluZ0xpbWl0ID1cclxuICAgICAgICAgIHRoaXMuZ2xvYmFsU2V0dGluZ3MuTWF4TGVuZ3RoV2FybmluZ0xpbWl0O1xyXG5cclxuICAgICAgdGhpcy5taW5DaGFyc0xpbWl0ID1cclxuICAgICAgICB0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoIC0gdGhpcy5vcHRpb25zLk1heExlbmd0aFdhcm5pbmdMaW1pdDtcclxuICAgIH1cclxuICAgIHRoaXMuVGV4dEJveEZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5UZXh0Qm94Rm9ybUNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGlvblJ1bGVzYXN5bmMpO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Jc0Rpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuVGV4dEJveEZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLlRleHRDb250cm9sSG9zdC5uZ1N1Ym1pdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vcHRpb25zLlZhbGlkYXRpb25SdWxlcyA9IHRoaXMudmFsaWRhdGlvblJ1bGVzO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5zZXRBdHRyaWJ1dGVGb3JDb250cm9sKHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICByZXNldEVycm9yID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UucmVtb3ZlR2xvYmFsRXJyb3IoKTtcclxuICB9O1xyXG5cclxuICBzaG93R2xvYmFsRXJyb3IoKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNob3dHbG9iYWxFcnJvcigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RXJyb3JWYWxpZGF0aW9uKEVycm9yTGlzdCkge1xyXG4gICAgaWYgKHRoaXMubWFya0FsbEFzVG91Y2hlZCAmJiB0aGlzLmdyb3VwLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5zaG93R2xvYmFsRXJyb3IoKTtcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBnZXRJbnB1dFR5cGUodHlwZTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250cm9sVXRpbGl0eS5nZXRJbnB1dFR5cGUodHlwZSk7XHJcbiAgfVxyXG5cclxuICB0cmltQ29udHJvbFZhbHVlKCkge1xyXG4gICAgbGV0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLmNvbnRyb2xVdGlsaXR5LnRyaW1Db250cm9sVmFsdWUoXHJcbiAgICAgIHRoaXMuVGV4dEJveEZvcm1Db250cm9sLnZhbHVlXHJcbiAgICApO1xyXG4gICAgdGhpcy5UZXh0Qm94Rm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShvcmlnaW5hbFZhbHVlKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5vcHRpb25zLlBhdGNoRnVuY3Rpb24gJiZcclxuICAgICAgdGhpcy5vcHRpb25zLlBhdGNoUGF0aCAmJlxyXG4gICAgICB0aGlzLlRleHRCb3hGb3JtQ29udHJvbC52YWxpZFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0Y2hDb250cm9sVmFsdWUoXHJcbiAgICAgICAgb3JpZ2luYWxWYWx1ZSxcclxuICAgICAgICB0aGlzLm9wdGlvbnMuUGF0Y2hGdW5jdGlvbixcclxuICAgICAgICB0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Db3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBnZXRDdXN0b21FcnJvcnNNYXNzYWdlcygpIHtcclxuICAgIHRoaXMuRW1haWxWYWxpZGF0aW9uS2V5ID1cclxuICAgICAgdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFbWFpbFZhbGlkYXRpb25LZXknKTtcclxuICAgIHRoaXMuVVJMVmFsaWRhdGlvbktleSA9XHJcbiAgICAgIHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgndXJsVmFsaWRhdGlvbkVycm9yJyk7XHJcbiAgICB0aGlzLlBhc3N3b3JkQ29tcGxleGl0eUhhc0NhcGl0YWxMZXR0ZXIgPVxyXG4gICAgICB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXHJcbiAgICAgICAgJ1Bhc3N3b3JkQ29tcGxleGl0eUhhc0NhcGl0YWxMZXR0ZXInXHJcbiAgICAgICk7XHJcbiAgICB0aGlzLlBhc3N3b3JkQ29tcGxleGl0eUhhc051bWJlciA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcclxuICAgICAgJ1Bhc3N3b3JkQ29tcGxleGl0eUhhc051bWJlcidcclxuICAgICk7XHJcbiAgICB0aGlzLlBhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyID1cclxuICAgICAgdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdQYXNzd29yZENvbXBsZXhpdHlIYXNTbWFsbExldHRlcicpO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbXBsZXhpdHlIYXNTcGVjaWFsTGV0dGVyID1cclxuICAgICAgdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFxyXG4gICAgICAgICdQYXNzd29yZENvbXBsZXhpdHlIYXNTcGVjaWFsTGV0dGVyJ1xyXG4gICAgICApO1xyXG4gICAgdGhpcy5NYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5ID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFxyXG4gICAgICAnTWF4V29yZENvdW50VmFsaWRhdGlvbktleSdcclxuICAgICk7XHJcbiAgICB0aGlzLkFyYWJpY0xldHRlck9ubHkgPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXHJcbiAgICAgICdBcmFiaWNJc1JlcXVpcmVkQW5kT25seTUwQ2hhcmFjdGVyc0VuZ2xpc2gnXHJcbiAgICApO1xyXG4gICAgdGhpcy5FbmdsaXNoTGV0dGVyT25seSA9XHJcbiAgICAgIHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRW5nbGlzaExldHRlck9ubHknKTtcclxuICB9XHJcblxyXG4gIG9uVGV4dENoYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuVHlwZSA9PSBJbnB1dFR5cGUuTnVtYmVyKVxyXG4gICAgICBpZiAoIXRoaXMuVGV4dEJveEZvcm1Db250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5UZXh0Qm94Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHsgSW50ZWdlck51bWJlclZhbGlkYXRpb25LZXk6ICcnIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlRleHRCb3hGb3JtQ29udHJvbC52YWx1ZSA9PSAnJykge1xyXG4gICAgICB0aGlzLldvcmRDb3VudEFycmF5ID0gMDtcclxuICAgICAgdGhpcy5Xb3JkQ291bnQgPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5Xb3JkQ291bnRBcnJheSA9IHRoaXMuVGV4dEJveEZvcm1Db250cm9sLnZhbHVlLnNwbGl0KCcgJykubGVuZ3RoO1xyXG4gICAgICBpZiAodGhpcy5Xb3JkQ291bnRBcnJheSA+IDApIHtcclxuICAgICAgICBpZiAodGhpcy5Xb3JkQ291bnRBcnJheSA+IHRoaXMub3B0aW9ucy5NYXhXb3JkQ291bnQpIHtcclxuICAgICAgICAgIHRoaXMuV29yZENvdW50ID0gdGhpcy5vcHRpb25zLk1heFdvcmRDb3VudDtcclxuICAgICAgICAgIHRoaXMuVGV4dEJveEZvcm1Db250cm9sLnNldEVycm9ycyh7XHJcbiAgICAgICAgICAgIE1heFdvcmRDb3VudFZhbGlkYXRpb25LZXk6IHRoaXMub3B0aW9ucy5NYXhXb3JkQ291bnQsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuVGV4dEJveEZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgIHRoaXMuVGV4dEJveEZvcm1Db250cm9sLmludmFsaWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuV29yZENvdW50ID0gdGhpcy5Xb3JkQ291bnRBcnJheTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy9DaGVjayBmb3IgbWF4bGVuZ3RoIGxpbWl0IGNvdW50XHJcbiAgICAgIC8vTWF4TGVuZ3RoIHNob3VsZCBiZSBncmV0YWVyIHRoYW4gb3IgZXF1YWxzIGNoYXJzIGxpbWl0IHNvIHRoYXQgbWluQ2hhcnNMaW1pdCB3b3VsZCBiZSA+PSAwXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoICYmIHRoaXMubWluQ2hhcnNMaW1pdCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hhcnNDb3VudCA9IHRoaXMuVGV4dEJveEZvcm1Db250cm9sLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2hhcnNDb3VudCA+IHRoaXMubWluQ2hhcnNMaW1pdCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93Q2hhcnNMaW1pdE1zZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmhhc0NoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJzQ291bnQgPT0gdGhpcy5vcHRpb25zLk1heExlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5jaGFyc0xpbWl0TXNnQ2xhc3MgPSAnZGFuZ2VyJztcclxuICAgICAgICAgIGVsc2UgdGhpcy5jaGFyc0xpbWl0TXNnQ2xhc3MgPSAnd2FybmluZyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0NoYXJzTGltaXRNc2cgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgbWF4OiBudW1iZXIgPSB0aGlzLm9wdGlvbnMuTWF4TGVuZ3RoO1xyXG4gICAgICAgIHZhciBjdXJyZW50OiBudW1iZXIgPSB0aGlzLmN1cnJlbnRDaGFyc0NvdW50O1xyXG5cclxuICAgICAgICB0aGlzLm1heExpbWl0V2FybmluZ01zZyA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnTWF4TGVuZ3RoTGltaXRXYXJuaW5nJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLk9uQ2hhbmdlLmVtaXQodGhpcy5UZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhpc0ZvY3VzOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLklzU2hvd1dvcmRDb3VudCA9IGlzRm9jdXM7XHJcblxyXG4gICAgLy9vbkZvY3VzXHJcbiAgICBpZiAoaXNGb2N1cykge1xyXG4gICAgICBpZiAodGhpcy5oYXNDaGFyc0xpbWl0VmFsaWRhdGlvbkVycm9yKVxyXG4gICAgICAgIC8vY2hlY2sgaWYgdGhlcmUgd2FzIHByZXZpb3VzIHZhbGlkYXRpb24gZXJyb3JcclxuICAgICAgICB0aGlzLnNob3dDaGFyc0xpbWl0TXNnID0gdHJ1ZTtcclxuICAgIH0gLy9vbkZvY3VzT3V0XHJcbiAgICBlbHNlIHRoaXMuc2hvd0NoYXJzTGltaXRNc2cgPSBmYWxzZTtcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBSZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LlJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy5UZXh0Qm94Rm9ybUNvbnRyb2wsXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLFxyXG4gICAgICB0aGlzLm9wdGlvbnNcclxuICAgICk7XHJcbiAgfTtcclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIEFkZFJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkUmVxdWlyZWRWYWxpZGF0aW9uKFxyXG4gICAgICB0aGlzLlRleHRCb3hGb3JtQ29udHJvbCxcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMsXHJcbiAgICAgIHRoaXMub3B0aW9uc1xyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIFJlbW92ZUN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVDdXN0b21WYWxpZGF0aW9uKFxyXG4gICAgICB0aGlzLlRleHRCb3hGb3JtQ29udHJvbCxcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMsXHJcbiAgICAgIEN1c3RvbVZhbGlkYXRpb25cclxuICAgICk7XHJcbiAgfTtcclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIEFkZEN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRDdXN0b21WYWxpZGF0aW9uKFxyXG4gICAgICB0aGlzLlRleHRCb3hGb3JtQ29udHJvbCxcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMsXHJcbiAgICAgIEN1c3RvbVZhbGlkYXRpb25cclxuICAgICk7XHJcbiAgfTtcclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIElzVmFsaWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LklzVmFsaWQodGhpcy5UZXh0Qm94Rm9ybUNvbnRyb2wpO1xyXG4gIH07XHJcblxyXG4gIG9uVGV4dEJsdXIoKSB7XHJcbiAgICB0aGlzLk9uQmx1ci5lbWl0KHRoaXMuVGV4dEJveEZvcm1Db250cm9sLnZhbHVlKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgYmJzZi1jb250cm9sIGJic2YtdGV4dGJveFwiIFtmb3JtR3JvdXBdPVwiZ3JvdXBcIj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cIihvcHRpb25zLlZpZXdUeXBlPT0xKT8nYmJzZi12ZXJ0aWNhbCc6J2Jic2YtaG9yaXpvbnRhbCdcIj5cclxuICAgIDwhLS1sYWJlbC0tPlxyXG4gICAgPGxhYmVsICpuZ0lmPVwiIW9wdGlvbnMuSGlkZUxhYmVsXCIgY2xhc3M9XCJiYnNmLWxhYmVsIHt7b3B0aW9ucy5MYWJlbEV4dHJhQ2xhc3Nlc319XCI+XHJcbiAgICAgIHt7b3B0aW9ucy5MYWJlbFZhbHVlfX1cclxuICAgICAgPCEtLUFzdGVyaXNrLS0+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwiKChvcHRpb25zLlNob3dBc3RlcmlzayYmb3B0aW9ucy5Jc1JlcXVpcmVkKXx8KG9wdGlvbnMuSXNSZXF1aXJlZCkpJiYhb3B0aW9ucy5Jc1JlYWRvbmx5XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICA8L2xhYmVsPlxyXG4gICAgPCEtLU1hc2tQYXR0ZXJuLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiTWFza1BhdHRlcm4hPW51bGwmJk1hc2tQYXR0ZXJuIT0nJyYmIW9wdGlvbnMuSXNSZWFkb25seVwiIGNsYXNzPVwiYmJzZi1pbnB1dC1jb250YWluZXJcIlxyXG4gICAgICBbbmdDbGFzc109XCJvcHRpb25zLkVuYWJsZUNvcHlUb0NsaXBib2FyZD8gJ3AtNDBweCcgOiAnJyBcIj5cclxuICAgICAgPCEtLUljb24tLT5cclxuICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnMuSWNvbiE9bnVsbFwiIGNsYXNzPVwic3ZnIHN2Zy1pY29uLWdyZXkgYmJzZi1pY29uXCIgW25nQ2xhc3NdPVwiKG9wdGlvbnMuSWNvblBvc2l0aW9uPT0xKT8nYmJzZi1sZWZ0LWljb24nOidiYnNmLXJpZ2h0LWljb24nXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCJvcHRpb25zLkljb25cIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0taW5wdXQtLT5cclxuICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHt7b3B0aW9ucy5FeHRyYUNsYXNzZXN9fVwiIFttYXNrXT1cIk1hc2tQYXR0ZXJuXCIgcGxhY2VIb2xkZXJDaGFyYWN0ZXI9XCIgXCIgW3Nob3dNYXNrVHlwZWRdPVwidHJ1ZVwiIFt2YWxpZGF0aW9uXT1cInRydWVcIlxyXG4gICAgICAgIFtkaXJdPVwidGV4dERpclwiIGFyaWEtZGVzY3JpYmVkYnk9XCJlbWFpbC1lcnJvclwiIGFyaWEtaW52YWxpZD1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJ7e29wdGlvbnMuTmFtZX19XCIgdHlwZT1cInt7Z2V0SW5wdXRUeXBlKG9wdGlvbnMuVHlwZSl9fVwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zLlZhbHVlXCIgW2NsYXNzLmlzLWludmFsaWRdPVwiVGV4dEJveEZvcm1Db250cm9sLmludmFsaWQgJiYgVGV4dEJveEZvcm1Db250cm9sLnRvdWNoZWRcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3tvcHRpb25zLlBsYWNlaG9sZGVyfX1cIiBpZD1cInt7b3B0aW9ucy5OYW1lfX1cIiBhdXRvY29tcGxldGU9XCJ7e29wdGlvbnMuQXV0b0NvbXBsZXRlfX1cIiAoY2hhbmdlKT1cInRyaW1Db250cm9sVmFsdWUoKVwiXHJcbiAgICAgICAgKGtleXVwKT1cIm9uVGV4dENoYW5nZSgpXCIgW3JlYWRvbmx5XT1cIm9wdGlvbnMuSXNSZWFkb25seVwiXHJcbiAgICAgICAgKGtleWRvd24pPVwiV29yZENvdW50QXJyYXk+b3B0aW9ucy5NYXhXb3JkQ291bnQmJiRldmVudC5rZXlDb2RlICE9OD8kZXZlbnQucHJldmVudERlZmF1bHQoKTpudWxsXCIgI3VzZXJpbnB1dCAoYmx1cik9XCJvblRleHRCbHVyKClcIj5cclxuICAgICAgPCEtLUNvcHlUb0NsaXBib2FyZC0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImNvcHktY2xpcGJvYXJkXCIgbmdiVG9vbHRpcD1cIkNvcGllZCFcIiAqbmdJZj1cIm9wdGlvbnMuRW5hYmxlQ29weVRvQ2xpcGJvYXJkXCIgKGNsaWNrKT1cImNvcHlJbnB1dE1lc3NhZ2UodXNlcmlucHV0KVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNvcHlcIj48L2k+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLU5vTWFza1BhdHRlcm4tLT5cclxuICAgIDxkaXYgKm5nSWY9XCJNYXNrUGF0dGVybj09bnVsbHx8TWFza1BhdHRlcm49PScnJiYhb3B0aW9ucy5Jc1JlYWRvbmx5XCIgY2xhc3M9XCJiYnNmLWlucHV0LWNvbnRhaW5lclwiXHJcbiAgICAgIFtuZ0NsYXNzXT1cIm9wdGlvbnMuRW5hYmxlQ29weVRvQ2xpcGJvYXJkPyAncC00MHB4JyA6ICcnIFwiPlxyXG4gICAgICA8IS0tSWNvbi0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic3ZnIHN2Zy1pY29uLWdyZXkgYmJzZi1pY29uXCIgW25nQ2xhc3NdPVwiKG9wdGlvbnMuSWNvblBvc2l0aW9uPT0xKT8nYmJzZi1sZWZ0LWljb24nOidiYnNmLXJpZ2h0LWljb24nXCIgKm5nSWY9XCJvcHRpb25zLkljb24hPW51bGxcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIm9wdGlvbnMuSWNvblwiPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wge3tvcHRpb25zLkV4dHJhQ2xhc3Nlc319IFwiIFtkaXJdPVwidGV4dERpclwiIChmb2N1cyk9XCJvbkZvY3VzKHRydWUpXCIgKGZvY3Vzb3V0KT1cIm9uRm9jdXMoZmFsc2UpXCJcclxuICAgICAgICBtYXhsZW5ndGg9XCJ7e29wdGlvbnMuTWF4TGVuZ3RofX1cIiBtaW5sZW5ndGg9XCJ7e29wdGlvbnMuTWluTGVuZ3RofX1cIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiBhcmlhLWludmFsaWQ9XCJ0cnVlXCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ7e29wdGlvbnMuTmFtZX19XCIgdHlwZT1cInt7Z2V0SW5wdXRUeXBlKG9wdGlvbnMuVHlwZSl9fVwiXHJcbiAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwiVGV4dEJveEZvcm1Db250cm9sLmludmFsaWQgJiYgVGV4dEJveEZvcm1Db250cm9sLnRvdWNoZWRcIiBwbGFjZWhvbGRlcj1cInt7b3B0aW9ucy5QbGFjZWhvbGRlcn19XCIgaWQ9XCJ7e29wdGlvbnMuTmFtZX19XCJcclxuICAgICAgICBhdXRvY29tcGxldGU9XCJ7e29wdGlvbnMuQXV0b0NvbXBsZXRlfX1cIiAoY2hhbmdlKT1cInRyaW1Db250cm9sVmFsdWUoKVwiIChrZXl1cCk9XCJvblRleHRDaGFuZ2UoKVwiIFsobmdNb2RlbCldPVwib3B0aW9ucy5WYWx1ZVwiXHJcbiAgICAgICAgKGtleWRvd24pPVwiV29yZENvdW50QXJyYXk+b3B0aW9ucy5NYXhXb3JkQ291bnQmJiRldmVudC5rZXlDb2RlICE9OD8kZXZlbnQucHJldmVudERlZmF1bHQoKTpudWxsXCIgW3JlYWRvbmx5XT1cIm9wdGlvbnMuSXNSZWFkb25seVwiICN1c2VyaW5wdXRcclxuICAgICAgICAoYmx1cik9XCJvblRleHRCbHVyKClcIj5cclxuICAgICAgPCEtLUNvcHlUb0NsaXBib2FyZC0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImNvcHktY2xpcGJvYXJkXCIgbmdiVG9vbHRpcD1cIkNvcGllZCFcIiB0cmlnZ2Vycz1cImNsaWNrOmJsdXJcIiAqbmdJZj1cIm9wdGlvbnMuRW5hYmxlQ29weVRvQ2xpcGJvYXJkXCJcclxuICAgICAgICAoY2xpY2spPVwiY29weUlucHV0TWVzc2FnZSh1c2VyaW5wdXQpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtY29weVwiPjwvaT5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIHJlYWRvbmx5IC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIm9wdGlvbnMuSXNSZWFkb25seVwiPlxyXG4gICAgICA8YSAqbmdJZj1cIm9wdGlvbnMuVHlwZT09aW5wdXRUeXBlLkVtYWlsXCIgaHJlZj1cIm1haWx0bzoge3tvcHRpb25zLlZhbHVlfX1cIj57e29wdGlvbnMuVmFsdWV9fTwvYT5cclxuICAgICAgPGEgKm5nSWY9XCJvcHRpb25zLlR5cGU9PWlucHV0VHlwZS5VUkxcIiBocmVmPVwie3tvcHRpb25zLlZhbHVlfX1cIiB0YXJnZXQ9XCJfYmxhbmtcIj57e29wdGlvbnMuVmFsdWV9fTwvYT5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJvcHRpb25zLlR5cGUhPWlucHV0VHlwZS5VUkwmJm9wdGlvbnMuVHlwZSE9aW5wdXRUeXBlLkVtYWlsXCIgY2xhc3M9XCJyZWFkb25seS12aWV3XCI+e3tvcHRpb25zLlZhbHVlfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwic3VidGV4dC1jb250YWluZXJcIj5cclxuICAgIDwhLS13b3JkQ291bnQtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLXdvcmQtY291bnRcIiAqbmdJZj1cIm9wdGlvbnMuTWF4V29yZENvdW50PjAmJklzU2hvd1dvcmRDb3VudFwiPnt7V29yZENvdW50fX0ve3tvcHRpb25zLk1heFdvcmRDb3VudH19XHJcbiAgICAgIFdvcmRzPC9kaXY+XHJcbiAgICA8IS0tIENoYXJzTGltaXRNc2ctLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLWNoYXJhY3Rlci1jb3VudFwiICpuZ0lmPVwic2hvd0NoYXJzTGltaXRNc2dcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7J2JhZGdlLWxpZ2h0LXdhcm5pbmcnOiBjaGFyc0xpbWl0TXNnQ2xhc3MgPT09ICd3YXJuaW5nJywgJ2JhZGdlLWxpZ2h0LWRhbmdlcicgOiBjaGFyc0xpbWl0TXNnQ2xhc3MgPT09ICdkYW5nZXInIH1cIj5cclxuICAgICAge3ttYXhMaW1pdFdhcm5pbmdNc2d9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIExhYmVsRGVzY3JpcHRpb24tLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLWNvbnRyb2wtZGVzY1wiICpuZ0lmPVwib3B0aW9ucy5MYWJlbERlc2NyaXB0aW9uIT1udWxsXCI+e3tvcHRpb25zLkxhYmVsRGVzY3JpcHRpb259fTwvZGl2PlxyXG4gICAgPCEtLSByZXF1aXJlZFRleHQtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLXZhbGlkYXRpb25cIiBbZGlyXT1cInRleHREaXJcIiAqbmdJZj1cIihUZXh0Qm94Rm9ybUNvbnRyb2wuaW52YWxpZCAmJiBUZXh0Qm94Rm9ybUNvbnRyb2wudG91Y2hlZClcIj5cclxuICAgICAge3tnZXRFcnJvclZhbGlkYXRpb24oVGV4dEJveEZvcm1Db250cm9sLmVycm9yc3xrZXl2YWx1ZSl9fVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cIihncm91cC52YWxpZCYmZ3JvdXAuZGlydHkmJmdyb3VwLnRvdWNoZWQgKXx8KGdyb3VwLnVudG91Y2hlZCYmZ3JvdXAuaW52YWxpZCYmZ3JvdXAuZGlydHkpXCI+e3tyZXNldEVycm9yKCl9fTwvZGl2PlxyXG48L2Rpdj4iXX0=
@@ -1,90 +0,0 @@
1
- import { Component, Input, Optional, EventEmitter, Output } from '@angular/core';
2
- import { FormControl } from '@angular/forms';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../../Shared/services/ControlUtility";
5
- import * as i2 from "@angular/forms";
6
- import * as i3 from "@bnsights/bbsf-utilities";
7
- import * as i4 from "../../Shared/services/GlobalSettings.service";
8
- import * as i5 from "@angular/common";
9
- import * as i6 from "@angular/material/slide-toggle";
10
- import * as i7 from "@angular/cdk/bidi";
11
- import * as i8 from "ngx-intl-tel-input";
12
- export class ToggleslideComponent {
13
- // tslint:disable-next-line: max-line-length
14
- constructor(controlUtility, controlContainer, ToggleslideControlHost, TextControlHost, UtilityService, controlValidationService, globalSettings) {
15
- this.controlUtility = controlUtility;
16
- this.controlContainer = controlContainer;
17
- this.ToggleslideControlHost = ToggleslideControlHost;
18
- this.TextControlHost = TextControlHost;
19
- this.UtilityService = UtilityService;
20
- this.controlValidationService = controlValidationService;
21
- this.globalSettings = globalSettings;
22
- this.OnChange = new EventEmitter();
23
- this.SlideValue = false;
24
- this.markAllAsTouched = false;
25
- ToggleslideComponent.controlContainerstatic = this.controlContainer;
26
- }
27
- ngOnInit() {
28
- if (this.options.ForceDirection)
29
- this.textDir = this.options.ForceDirection == 2 ? 'rtl' : 'ltr';
30
- else
31
- this.textDir = localStorage.getItem('language') == 'ar' ? 'rtl' : 'ltr';
32
- this.group.addControl(this.options.Name, new FormControl(''));
33
- this.ToggleslideFormControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
34
- let validationRules = [];
35
- let validationRulesasync = [];
36
- this.SlideValue = this.options.Value == undefined ? false : this.options.Value;
37
- if (!this.options.ViewType)
38
- this.options.ViewType = this.globalSettings.ViewType;
39
- if (this.options.IsDisabled || this.options.IsReadonly) {
40
- this.ToggleslideFormControl.disable();
41
- }
42
- if (this.options.LabelKey != null && this.options.LabelKey != "")
43
- this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
44
- }
45
- ngAfterViewInit() {
46
- if (this.options.AttributeList != null) {
47
- var element = document.getElementById(this.options.Name);
48
- for (let index = 0; index < this.options.AttributeList.length; index++) {
49
- element.setAttribute(this.options.AttributeList[index].Key, this.options.AttributeList[index].value);
50
- }
51
- }
52
- }
53
- resetError() {
54
- this.controlValidationService.removeGlobalError();
55
- }
56
- showGlobalError() {
57
- this.controlUtility.showGlobalError();
58
- }
59
- getErrorValidation(ErrorList) {
60
- if (this.markAllAsTouched && this.group.invalid) {
61
- this.showGlobalError();
62
- this.markAllAsTouched = false;
63
- }
64
- return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
65
- }
66
- changeValueToggle() {
67
- this.OnChange.emit(this.SlideValue);
68
- this.options.Value = this.SlideValue;
69
- this.ToggleslideFormControl.setValue(this.SlideValue);
70
- if (this.options.PatchFunction && this.options.PatchPath && this.ToggleslideFormControl.valid) {
71
- this.controlUtility.patchControlValue(this.SlideValue, this.options.PatchFunction, this.options.PatchPath);
72
- }
73
- }
74
- }
75
- ToggleslideComponent.controlContainerstatic = null;
76
- ToggleslideComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToggleslideComponent, deps: [{ token: i1.ControlUtility }, { token: i2.ControlContainer, optional: true }, { token: i2.FormGroupDirective }, { token: i2.FormGroupDirective }, { token: i3.UtilityService }, { token: i3.ControlValidationService }, { token: i4.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component });
77
- ToggleslideComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ToggleslideComponent, selector: "BBSF-Toggleslide", inputs: { group: "group", options: "options" }, outputs: { OnChange: "OnChange" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-toggleslide\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label [hidden]=\"options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n </label>\r\n <div *ngIf=\"!options.IsReadonly\"class=\"bbsf-input-container\">\r\n <!--input-->\r\n <mat-slide-toggle [(ngModel)]=\"SlideValue\" [dir]=\"textDir\" [cssClass]=\"(options.ViewType==1)?'':'col-md-9'\"\r\n formControlName=\"{{options.Name}}\" disableRipple=\"true\" [disabled]=\"options.IsDisabled\" (change)=\"changeValueToggle()\">\r\n </mat-slide-toggle>\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.IsReadonly\">\r\n <span class=\"readonly-view\" *ngIf=\"options.Value\">{{UtilityService.getResourceValue(\"Yes\")}}</span>\r\n <span class=\"readonly-view\" *ngIf=\"!options.Value\">{{UtilityService.getResourceValue(\"No\")}}</span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.LabelDescription!=null\">{{options.LabelDescription}}</div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i7.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i8.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ToggleslideComponent, decorators: [{
79
- type: Component,
80
- args: [{ selector: 'BBSF-Toggleslide', template: "<div class=\"form-group bbsf-control bbsf-toggleslide\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label [hidden]=\"options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n </label>\r\n <div *ngIf=\"!options.IsReadonly\"class=\"bbsf-input-container\">\r\n <!--input-->\r\n <mat-slide-toggle [(ngModel)]=\"SlideValue\" [dir]=\"textDir\" [cssClass]=\"(options.ViewType==1)?'':'col-md-9'\"\r\n formControlName=\"{{options.Name}}\" disableRipple=\"true\" [disabled]=\"options.IsDisabled\" (change)=\"changeValueToggle()\">\r\n </mat-slide-toggle>\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.IsReadonly\">\r\n <span class=\"readonly-view\" *ngIf=\"options.Value\">{{UtilityService.getResourceValue(\"Yes\")}}</span>\r\n <span class=\"readonly-view\" *ngIf=\"!options.Value\">{{UtilityService.getResourceValue(\"No\")}}</span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.LabelDescription!=null\">{{options.LabelDescription}}</div>\r\n </div>\r\n</div>\r\n" }]
81
- }], ctorParameters: function () { return [{ type: i1.ControlUtility }, { type: i2.ControlContainer, decorators: [{
82
- type: Optional
83
- }] }, { type: i2.FormGroupDirective }, { type: i2.FormGroupDirective }, { type: i3.UtilityService }, { type: i3.ControlValidationService }, { type: i4.GlobalSettings }]; }, propDecorators: { group: [{
84
- type: Input
85
- }], options: [{
86
- type: Input
87
- }], OnChange: [{
88
- type: Output
89
- }] } });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlc2xpZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL1RvZ2dsZXNsaWRlL3RvZ2dsZXNsaWRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9Ub2dnbGVzbGlkZS9Ub2dnbGVzbGlkZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQW9FLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBVy9HLE1BQU0sT0FBTyxvQkFBb0I7SUFJL0IsNENBQTRDO0lBQzVDLFlBQW9CLGNBQThCLEVBQXNCLGdCQUFrQyxFQUNqRyxzQkFBMEMsRUFBUyxlQUFtQyxFQUN0RixjQUE4QixFQUFVLHdCQUFrRCxFQUN6RixjQUE4QjtRQUhwQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBc0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNqRywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQW9CO1FBQVMsb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBQ3RGLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDekYsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBSzlCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXhDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBUGhDLG9CQUFvQixDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FB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Q0FBQyxjQUFjLENBQUMseUJBQXlCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFHRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQTtRQUNuQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNyRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7WUFDN0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7U0FDMUc7SUFDSCxDQUFDOztBQTFFTSwyQ0FBc0IsR0FBRyxJQUFJLENBQUM7a0hBSDFCLG9CQUFvQjtzR0FBcEIsb0JBQW9CLDJJQ1pqQyx5d0NBdUJBOzRGRFhhLG9CQUFvQjtrQkFKaEMsU0FBUzsrQkFDRSxrQkFBa0I7OzBCQVF5QixRQUFROytNQU1wRCxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9wdGlvbmFsLCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIENvbnRyb2xDb250YWluZXIsIEZvcm1Hcm91cERpcmVjdGl2ZSwgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29udHJvbFV0aWxpdHkgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvQ29udHJvbFV0aWxpdHknO1xyXG5pbXBvcnQgeyBUb2dnbGVTbGlkZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL1RvZ2dsZXNsaWRlT3B0aW9ucyc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvR2xvYmFsU2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnQkJTRi1Ub2dnbGVzbGlkZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL1RvZ2dsZXNsaWRlLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVG9nZ2xlc2xpZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuXHJcbiAgc3RhdGljIGNvbnRyb2xDb250YWluZXJzdGF0aWMgPSBudWxsO1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb250cm9sVXRpbGl0eTogQ29udHJvbFV0aWxpdHksIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcclxuICAgIHB1YmxpYyBUb2dnbGVzbGlkZUNvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmUsIHB1YmxpYyBUZXh0Q29udHJvbEhvc3Q6IEZvcm1Hcm91cERpcmVjdGl2ZSxcclxuICAgIHB1YmxpYyBVdGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlOiBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdsb2JhbFNldHRpbmdzOiBHbG9iYWxTZXR0aW5ncykge1xyXG4gICAgVG9nZ2xlc2xpZGVDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICB9XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBvcHRpb25zOiBUb2dnbGVTbGlkZU9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIE9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIFRvZ2dsZXNsaWRlRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBTbGlkZVZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWFya0FsbEFzVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRleHREaXI7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYodGhpcy5vcHRpb25zLkZvcmNlRGlyZWN0aW9uKVxyXG4gICAgdGhpcy50ZXh0RGlyPXRoaXMub3B0aW9ucy5Gb3JjZURpcmVjdGlvbj09Mj8ncnRsJzonbHRyJztcclxuICAgIGVsc2VcclxuICAgIHRoaXMudGV4dERpcj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKT09J2FyJz8ncnRsJzonbHRyJztcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLlRvZ2dsZXNsaWRlRm9ybUNvbnRyb2wgPSB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMub3B0aW9ucy5OYW1lXTsgLy8gIG5ldyBGb3JtQ29udHJvbCgnJyx2YWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgbGV0IHZhbGlkYXRpb25SdWxlcyA9IFtdO1xyXG4gICAgbGV0IHZhbGlkYXRpb25SdWxlc2FzeW5jID0gW107XHJcbiAgICB0aGlzLlNsaWRlVmFsdWUgPSB0aGlzLm9wdGlvbnMuVmFsdWUgPT0gdW5kZWZpbmVkID8gZmFsc2UgOiB0aGlzLm9wdGlvbnMuVmFsdWU7XHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuVmlld1R5cGUpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5WaWV3VHlwZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuVmlld1R5cGU7XHJcblxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLklzRGlzYWJsZWQgfHx0aGlzLm9wdGlvbnMuSXNSZWFkb25seSApIHtcclxuICAgICAgICB0aGlzLlRvZ2dsZXNsaWRlRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IFwiXCIpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5MYWJlbFZhbHVlID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKHRoaXMub3B0aW9ucy5MYWJlbEtleSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5BdHRyaWJ1dGVMaXN0ICE9IG51bGwpIHtcclxuICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm9wdGlvbnMuTmFtZSk7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm9wdGlvbnMuQXR0cmlidXRlTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm9wdGlvbnMuQXR0cmlidXRlTGlzdFtpbmRleF0uS2V5LCB0aGlzLm9wdGlvbnMuQXR0cmlidXRlTGlzdFtpbmRleF0udmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJlc2V0RXJyb3IoKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5yZW1vdmVHbG9iYWxFcnJvcigpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0dsb2JhbEVycm9yKCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5zaG93R2xvYmFsRXJyb3IoKVxyXG4gIH1cclxuXHJcbiAgZ2V0RXJyb3JWYWxpZGF0aW9uKEVycm9yTGlzdDogYW55W10pOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMubWFya0FsbEFzVG91Y2hlZCAmJiB0aGlzLmdyb3VwLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5zaG93R2xvYmFsRXJyb3IoKVxyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmNvbnRyb2xVdGlsaXR5LmdldEVycm9yVmFsaWRhdGlvbk1hc3NhZ2UoRXJyb3JMaXN0LCB0aGlzLmdyb3VwLCB0aGlzLm9wdGlvbnMpO1xyXG4gIH1cclxuXHJcblxyXG4gIGNoYW5nZVZhbHVlVG9nZ2xlKCkge1xyXG4gICAgdGhpcy5PbkNoYW5nZS5lbWl0KHRoaXMuU2xpZGVWYWx1ZSlcclxuICAgIHRoaXMub3B0aW9ucy5WYWx1ZT0gdGhpcy5TbGlkZVZhbHVlXHJcbiAgICB0aGlzLlRvZ2dsZXNsaWRlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5TbGlkZVZhbHVlKVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uICYmIHRoaXMub3B0aW9ucy5QYXRjaFBhdGggJiYgdGhpcy5Ub2dnbGVzbGlkZUZvcm1Db250cm9sLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0Y2hDb250cm9sVmFsdWUodGhpcy5TbGlkZVZhbHVlLHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uICx0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoKVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBiYnNmLWNvbnRyb2wgYmJzZi10b2dnbGVzbGlkZVwiIFtmb3JtR3JvdXBdPVwiZ3JvdXBcIj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cIihvcHRpb25zLlZpZXdUeXBlPT0xKT8nYmJzZi12ZXJ0aWNhbCc6J2Jic2YtaG9yaXpvbnRhbCdcIj5cclxuICAgIDwhLS1sYWJlbC0tPlxyXG4gICAgPGxhYmVsIFtoaWRkZW5dPVwib3B0aW9ucy5IaWRlTGFiZWxcIiBjbGFzcz1cImJic2YtbGFiZWwge3tvcHRpb25zLkxhYmVsRXh0cmFDbGFzc2VzfX1cIj5cclxuICAgICAge3tvcHRpb25zLkxhYmVsVmFsdWV9fVxyXG4gICAgPC9sYWJlbD5cclxuICAgIDxkaXYgKm5nSWY9XCIhb3B0aW9ucy5Jc1JlYWRvbmx5XCJjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cIlNsaWRlVmFsdWVcIiBbZGlyXT1cInRleHREaXJcIiBbY3NzQ2xhc3NdPVwiKG9wdGlvbnMuVmlld1R5cGU9PTEpPycnOidjb2wtbWQtOSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ7e29wdGlvbnMuTmFtZX19XCIgZGlzYWJsZVJpcHBsZT1cInRydWVcIiBbZGlzYWJsZWRdPVwib3B0aW9ucy5Jc0Rpc2FibGVkXCIgKGNoYW5nZSk9XCJjaGFuZ2VWYWx1ZVRvZ2dsZSgpXCI+XHJcbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIHJlYWRvbmx5IC0tPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwib3B0aW9ucy5Jc1JlYWRvbmx5XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWFkb25seS12aWV3XCIgKm5nSWY9XCJvcHRpb25zLlZhbHVlXCI+e3tVdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiWWVzXCIpfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWFkb25seS12aWV3XCIgKm5nSWY9XCIhb3B0aW9ucy5WYWx1ZVwiPnt7VXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5vXCIpfX08L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzdWJ0ZXh0LWNvbnRhaW5lclwiPlxyXG4gICAgPCEtLSBMYWJlbERlc2NyaXB0aW9uLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi1jb250cm9sLWRlc2NcIiAgKm5nSWY9XCJvcHRpb25zLkxhYmVsRGVzY3JpcHRpb24hPW51bGxcIj57e29wdGlvbnMuTGFiZWxEZXNjcmlwdGlvbn19PC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=