@bnsights/bbsf-controls 1.0.107 → 1.0.109

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 (221) hide show
  1. package/README.md +11 -0
  2. package/esm2020/bnsights-bbsf-controls.mjs +5 -0
  3. package/esm2020/lib/Shared/Components/app-base-component.mjs +226 -0
  4. package/esm2020/lib/Shared/Components/ng-tag-input.mjs +331 -0
  5. package/esm2020/lib/Shared/Directives/template-name.directive.mjs +18 -0
  6. package/{esm2015/lib/Shared/Models/DropdownListItem.js → esm2020/lib/Shared/Models/DropdownListItem.mjs} +1 -1
  7. package/esm2020/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +21 -0
  8. package/esm2020/lib/Shared/Pipes/bbsf-date.pipe.mjs +21 -0
  9. package/esm2020/lib/Shared/default_intl.mjs +29 -0
  10. package/esm2020/lib/Shared/services/ControlUtility.mjs +162 -0
  11. package/esm2020/lib/Shared/services/GlobalSettings.service.mjs +30 -0
  12. package/esm2020/lib/Shared/services/OnPagingFiltersChange.service.mjs +24 -0
  13. package/esm2020/lib/Shared/services/render-component-service.service.mjs +30 -0
  14. package/esm2020/lib/Shared/services/validationErrorMassage.service.mjs +170 -0
  15. package/esm2020/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +262 -0
  16. package/esm2020/lib/controls/Calendar/Calendar.component.mjs +173 -0
  17. package/esm2020/lib/controls/CheckBox/CheckBox.component.mjs +117 -0
  18. package/esm2020/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +136 -0
  19. package/esm2020/lib/controls/DateTimePicker/DateTimePicker.component.mjs +223 -0
  20. package/esm2020/lib/controls/DropdownList/DropdownList.component.mjs +194 -0
  21. package/esm2020/lib/controls/FileUplaod/FileUplaod.component.mjs +447 -0
  22. package/esm2020/lib/controls/Form/Form.component.mjs +101 -0
  23. package/esm2020/lib/controls/HtmlEditor/HtmlEditor.component.mjs +226 -0
  24. package/esm2020/lib/controls/ImageUpload/ImageUpload.component.mjs +350 -0
  25. package/esm2020/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +325 -0
  26. package/esm2020/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +427 -0
  27. package/esm2020/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +429 -0
  28. package/esm2020/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +428 -0
  29. package/esm2020/lib/controls/Paging/JwPagination.component.mjs +156 -0
  30. package/esm2020/lib/controls/Paging/Paging.component.mjs +312 -0
  31. package/esm2020/lib/controls/Phone/Phone.component.mjs +129 -0
  32. package/esm2020/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +376 -0
  33. package/esm2020/lib/controls/RadioButton/RadioButton.component.mjs +109 -0
  34. package/esm2020/lib/controls/Recaptcha/Recaptcha.component.mjs +135 -0
  35. package/esm2020/lib/controls/Repeater/repeater/repeater.component.mjs +125 -0
  36. package/esm2020/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +750 -0
  37. package/esm2020/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +21 -0
  38. package/esm2020/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +108 -0
  39. package/esm2020/lib/controls/TagsInput/TagsInput.component.mjs +277 -0
  40. package/esm2020/lib/controls/TextArea/TextArea.component.mjs +196 -0
  41. package/esm2020/lib/controls/TextBox/TextBox.component.mjs +312 -0
  42. package/esm2020/lib/controls/Toggleslide/toggleslide.component.mjs +90 -0
  43. package/esm2020/lib/controls/bbsf-controls.module.mjs +361 -0
  44. package/esm2020/lib/controls/page-header-component/page-header-component.component.mjs +37 -0
  45. package/{esm2015/public-api.js → esm2020/public-api.mjs} +2 -2
  46. package/fesm2015/{bnsights-bbsf-controls.js → bnsights-bbsf-controls.mjs} +2214 -2111
  47. package/fesm2015/bnsights-bbsf-controls.mjs.map +1 -0
  48. package/fesm2020/bnsights-bbsf-controls.mjs +9098 -0
  49. package/fesm2020/bnsights-bbsf-controls.mjs.map +1 -0
  50. package/index.d.ts +5 -0
  51. package/lib/Shared/Components/app-base-component.d.ts +7 -0
  52. package/lib/Shared/Components/ng-tag-input.d.ts +4 -1
  53. package/lib/Shared/Directives/template-name.directive.d.ts +3 -0
  54. package/lib/Shared/Models/DropdownListItem.d.ts +2 -2
  55. package/lib/Shared/Pipes/bbsf-date-time.pipe.d.ts +3 -0
  56. package/lib/Shared/Pipes/bbsf-date.pipe.d.ts +3 -0
  57. package/lib/Shared/default_intl.d.ts +3 -0
  58. package/lib/Shared/services/ControlUtility.d.ts +3 -0
  59. package/lib/Shared/services/GlobalSettings.service.d.ts +3 -0
  60. package/lib/Shared/services/OnPagingFiltersChange.service.d.ts +3 -0
  61. package/lib/Shared/services/render-component-service.service.d.ts +3 -0
  62. package/lib/Shared/services/validationErrorMassage.service.d.ts +4 -3
  63. package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +3 -0
  64. package/lib/controls/Calendar/Calendar.component.d.ts +3 -0
  65. package/lib/controls/CheckBox/CheckBox.component.d.ts +3 -0
  66. package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +3 -0
  67. package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +3 -0
  68. package/lib/controls/DropdownList/DropdownList.component.d.ts +5 -0
  69. package/lib/controls/FileUplaod/FileUplaod.component.d.ts +3 -0
  70. package/lib/controls/Form/Form.component.d.ts +3 -0
  71. package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +3 -0
  72. package/lib/controls/ImageUpload/ImageUpload.component.d.ts +3 -0
  73. package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +3 -0
  74. package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +3 -0
  75. package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +3 -0
  76. package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +3 -0
  77. package/lib/controls/Paging/JwPagination.component.d.ts +3 -0
  78. package/lib/controls/Paging/Paging.component.d.ts +3 -0
  79. package/lib/controls/Phone/Phone.component.d.ts +3 -0
  80. package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +3 -0
  81. package/lib/controls/RadioButton/RadioButton.component.d.ts +3 -0
  82. package/lib/controls/Recaptcha/Recaptcha.component.d.ts +3 -0
  83. package/lib/controls/Repeater/repeater/repeater.component.d.ts +3 -0
  84. package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +3 -0
  85. package/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.d.ts +3 -0
  86. package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +3 -0
  87. package/lib/controls/TagsInput/TagsInput.component.d.ts +3 -0
  88. package/lib/controls/TextArea/TextArea.component.d.ts +3 -0
  89. package/lib/controls/TextBox/TextBox.component.d.ts +3 -0
  90. package/lib/controls/Toggleslide/toggleslide.component.d.ts +3 -0
  91. package/lib/controls/bbsf-controls.module.d.ts +71 -4
  92. package/lib/controls/page-header-component/page-header-component.component.d.ts +3 -0
  93. package/package.json +44 -48
  94. package/public-api.d.ts +1 -1
  95. package/bnsights-bbsf-controls-1.0.107.tgz +0 -0
  96. package/bnsights-bbsf-controls.d.ts +0 -5
  97. package/bnsights-bbsf-controls.metadata.json +0 -1
  98. package/bundles/bnsights-bbsf-controls.umd.js +0 -9636
  99. package/bundles/bnsights-bbsf-controls.umd.js.map +0 -1
  100. package/esm2015/bnsights-bbsf-controls.js +0 -6
  101. package/esm2015/lib/Shared/Components/app-base-component.js +0 -202
  102. package/esm2015/lib/Shared/Components/ng-tag-input.js +0 -323
  103. package/esm2015/lib/Shared/Directives/template-name.directive.js +0 -18
  104. package/esm2015/lib/Shared/Pipes/bbsf-date-time.pipe.js +0 -20
  105. package/esm2015/lib/Shared/Pipes/bbsf-date.pipe.js +0 -20
  106. package/esm2015/lib/Shared/default_intl.js +0 -29
  107. package/esm2015/lib/Shared/services/ControlUtility.js +0 -164
  108. package/esm2015/lib/Shared/services/GlobalSettings.service.js +0 -28
  109. package/esm2015/lib/Shared/services/OnPagingFiltersChange.service.js +0 -22
  110. package/esm2015/lib/Shared/services/render-component-service.service.js +0 -30
  111. package/esm2015/lib/Shared/services/validationErrorMassage.service.js +0 -172
  112. package/esm2015/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.js +0 -266
  113. package/esm2015/lib/controls/Calendar/Calendar.component.js +0 -177
  114. package/esm2015/lib/controls/CheckBox/CheckBox.component.js +0 -118
  115. package/esm2015/lib/controls/ConfirmationModal/ConfirmationModal.component.js +0 -139
  116. package/esm2015/lib/controls/DateTimePicker/DateTimePicker.component.js +0 -227
  117. package/esm2015/lib/controls/DropdownList/DropdownList.component.js +0 -192
  118. package/esm2015/lib/controls/FileUplaod/FileUplaod.component.js +0 -447
  119. package/esm2015/lib/controls/Form/Form.component.js +0 -106
  120. package/esm2015/lib/controls/HtmlEditor/HtmlEditor.component.js +0 -226
  121. package/esm2015/lib/controls/ImageUpload/ImageUpload.component.js +0 -347
  122. package/esm2015/lib/controls/MapAutoComplete/MapAutoComplete.component.js +0 -325
  123. package/esm2015/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.js +0 -429
  124. package/esm2015/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.js +0 -434
  125. package/esm2015/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.js +0 -433
  126. package/esm2015/lib/controls/Paging/JwPagination.component.js +0 -129
  127. package/esm2015/lib/controls/Paging/Paging.component.js +0 -312
  128. package/esm2015/lib/controls/Phone/Phone.component.js +0 -129
  129. package/esm2015/lib/controls/ProfileImageUploader/ProfileImageUploader.component.js +0 -371
  130. package/esm2015/lib/controls/RadioButton/RadioButton.component.js +0 -111
  131. package/esm2015/lib/controls/Recaptcha/Recaptcha.component.js +0 -135
  132. package/esm2015/lib/controls/Repeater/repeater/repeater.component.js +0 -117
  133. package/esm2015/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.js +0 -748
  134. package/esm2015/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.js +0 -19
  135. package/esm2015/lib/controls/Repeater/repeater-table/repeater-table.component.js +0 -108
  136. package/esm2015/lib/controls/TagsInput/TagsInput.component.js +0 -278
  137. package/esm2015/lib/controls/TextArea/TextArea.component.js +0 -197
  138. package/esm2015/lib/controls/TextBox/TextBox.component.js +0 -309
  139. package/esm2015/lib/controls/Toggleslide/toggleslide.component.js +0 -90
  140. package/esm2015/lib/controls/bbsf-controls.module.js +0 -240
  141. package/esm2015/lib/controls/page-header-component/page-header-component.component.js +0 -32
  142. package/fesm2015/bnsights-bbsf-controls.js.map +0 -1
  143. package/src/lib/assets/.gitkeep +0 -0
  144. /package/{esm2015/lib/Shared/Enums/CalendarView.js → esm2020/lib/Shared/Enums/CalendarView.mjs} +0 -0
  145. /package/{esm2015/lib/Shared/Enums/ControlLayout.js → esm2020/lib/Shared/Enums/ControlLayout.mjs} +0 -0
  146. /package/{esm2015/lib/Shared/Enums/Countries.js → esm2020/lib/Shared/Enums/Countries.mjs} +0 -0
  147. /package/{esm2015/lib/Shared/Enums/Enums.js → esm2020/lib/Shared/Enums/Enums.mjs} +0 -0
  148. /package/{esm2015/lib/Shared/Enums/FileType.js → esm2020/lib/Shared/Enums/FileType.mjs} +0 -0
  149. /package/{esm2015/lib/Shared/Enums/FilterType.js → esm2020/lib/Shared/Enums/FilterType.mjs} +0 -0
  150. /package/{esm2015/lib/Shared/Enums/FontSize.js → esm2020/lib/Shared/Enums/FontSize.mjs} +0 -0
  151. /package/{esm2015/lib/Shared/Enums/ForceDirection.js → esm2020/lib/Shared/Enums/ForceDirection.mjs} +0 -0
  152. /package/{esm2015/lib/Shared/Enums/IconPosition.js → esm2020/lib/Shared/Enums/IconPosition.mjs} +0 -0
  153. /package/{esm2015/lib/Shared/Enums/ImageType.js → esm2020/lib/Shared/Enums/ImageType.mjs} +0 -0
  154. /package/{esm2015/lib/Shared/Enums/InputType.js → esm2020/lib/Shared/Enums/InputType.mjs} +0 -0
  155. /package/{esm2015/lib/Shared/Enums/Insert.js → esm2020/lib/Shared/Enums/Insert.mjs} +0 -0
  156. /package/{esm2015/lib/Shared/Enums/LanguageMode.js → esm2020/lib/Shared/Enums/LanguageMode.mjs} +0 -0
  157. /package/{esm2015/lib/Shared/Enums/LanguageValidation.js → esm2020/lib/Shared/Enums/LanguageValidation.mjs} +0 -0
  158. /package/{esm2015/lib/Shared/Enums/Misc.js → esm2020/lib/Shared/Enums/Misc.mjs} +0 -0
  159. /package/{esm2015/lib/Shared/Enums/PagingActionMode.js → esm2020/lib/Shared/Enums/PagingActionMode.mjs} +0 -0
  160. /package/{esm2015/lib/Shared/Enums/Para.js → esm2020/lib/Shared/Enums/Para.mjs} +0 -0
  161. /package/{esm2015/lib/Shared/Enums/PickerType.js → esm2020/lib/Shared/Enums/PickerType.mjs} +0 -0
  162. /package/{esm2015/lib/Shared/Enums/SelectMode.js → esm2020/lib/Shared/Enums/SelectMode.mjs} +0 -0
  163. /package/{esm2015/lib/Shared/Enums/StartView.js → esm2020/lib/Shared/Enums/StartView.mjs} +0 -0
  164. /package/{esm2015/lib/Shared/Enums/Style.js → esm2020/lib/Shared/Enums/Style.mjs} +0 -0
  165. /package/{esm2015/lib/Shared/Enums/StyleConfirmationMode.js → esm2020/lib/Shared/Enums/StyleConfirmationMode.mjs} +0 -0
  166. /package/{esm2015/lib/Shared/Enums/TagInputView.js → esm2020/lib/Shared/Enums/TagInputView.mjs} +0 -0
  167. /package/{esm2015/lib/Shared/Enums/menu-list-enum.js → esm2020/lib/Shared/Enums/menu-list-enum.mjs} +0 -0
  168. /package/{esm2015/lib/Shared/Models/Attribute.js → esm2020/lib/Shared/Models/Attribute.mjs} +0 -0
  169. /package/{esm2015/lib/Shared/Models/AutocompleteDTO.js → esm2020/lib/Shared/Models/AutocompleteDTO.mjs} +0 -0
  170. /package/{esm2015/lib/Shared/Models/AutocompleteOptions.js → esm2020/lib/Shared/Models/AutocompleteOptions.mjs} +0 -0
  171. /package/{esm2015/lib/Shared/Models/CalendarEventDTO.js → esm2020/lib/Shared/Models/CalendarEventDTO.mjs} +0 -0
  172. /package/{esm2015/lib/Shared/Models/CalendarOptions.js → esm2020/lib/Shared/Models/CalendarOptions.mjs} +0 -0
  173. /package/{esm2015/lib/Shared/Models/CancelDTO.js → esm2020/lib/Shared/Models/CancelDTO.mjs} +0 -0
  174. /package/{esm2015/lib/Shared/Models/CaptchaStyle.js → esm2020/lib/Shared/Models/CaptchaStyle.mjs} +0 -0
  175. /package/{esm2015/lib/Shared/Models/CheckBoxOptions.js → esm2020/lib/Shared/Models/CheckBoxOptions.mjs} +0 -0
  176. /package/{esm2015/lib/Shared/Models/ConfirmationModalOptions.js → esm2020/lib/Shared/Models/ConfirmationModalOptions.mjs} +0 -0
  177. /package/{esm2015/lib/Shared/Models/ControlOptionsBase.js → esm2020/lib/Shared/Models/ControlOptionsBase.mjs} +0 -0
  178. /package/{esm2015/lib/Shared/Models/CustomValidation.js → esm2020/lib/Shared/Models/CustomValidation.mjs} +0 -0
  179. /package/{esm2015/lib/Shared/Models/DropdownOptions.js → esm2020/lib/Shared/Models/DropdownOptions.mjs} +0 -0
  180. /package/{esm2015/lib/Shared/Models/EditPersonalImage.js → esm2020/lib/Shared/Models/EditPersonalImage.mjs} +0 -0
  181. /package/{esm2015/lib/Shared/Models/EnglishArabicDTO.js → esm2020/lib/Shared/Models/EnglishArabicDTO.mjs} +0 -0
  182. /package/{esm2015/lib/Shared/Models/FileDTO.js → esm2020/lib/Shared/Models/FileDTO.mjs} +0 -0
  183. /package/{esm2015/lib/Shared/Models/FileUploadModel.js → esm2020/lib/Shared/Models/FileUploadModel.mjs} +0 -0
  184. /package/{esm2015/lib/Shared/Models/FileUploadOptions.js → esm2020/lib/Shared/Models/FileUploadOptions.mjs} +0 -0
  185. /package/{esm2015/lib/Shared/Models/FilterItem.js → esm2020/lib/Shared/Models/FilterItem.mjs} +0 -0
  186. /package/{esm2015/lib/Shared/Models/FormOptions.js → esm2020/lib/Shared/Models/FormOptions.mjs} +0 -0
  187. /package/{esm2015/lib/Shared/Models/HtmlEditorOptions.js → esm2020/lib/Shared/Models/HtmlEditorOptions.mjs} +0 -0
  188. /package/{esm2015/lib/Shared/Models/ImageUploadOptions.js → esm2020/lib/Shared/Models/ImageUploadOptions.mjs} +0 -0
  189. /package/{esm2015/lib/Shared/Models/MapAutoCompleteOptions.js → esm2020/lib/Shared/Models/MapAutoCompleteOptions.mjs} +0 -0
  190. /package/{esm2015/lib/Shared/Models/MapAutocompleteDTO.js → esm2020/lib/Shared/Models/MapAutocompleteDTO.mjs} +0 -0
  191. /package/{esm2015/lib/Shared/Models/MultiLingualHtmlEditorOptions.js → esm2020/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs} +0 -0
  192. /package/{esm2015/lib/Shared/Models/MultiLingualTextAreaOptions.js → esm2020/lib/Shared/Models/MultiLingualTextAreaOptions.mjs} +0 -0
  193. /package/{esm2015/lib/Shared/Models/MultilingualControlOptionsBase.js → esm2020/lib/Shared/Models/MultilingualControlOptionsBase.mjs} +0 -0
  194. /package/{esm2015/lib/Shared/Models/MultilingualTextBoxOptions.js → esm2020/lib/Shared/Models/MultilingualTextBoxOptions.mjs} +0 -0
  195. /package/{esm2015/lib/Shared/Models/MultipleFileUploadModel.js → esm2020/lib/Shared/Models/MultipleFileUploadModel.mjs} +0 -0
  196. /package/{esm2015/lib/Shared/Models/PagingDTO.js → esm2020/lib/Shared/Models/PagingDTO.mjs} +0 -0
  197. /package/{esm2015/lib/Shared/Models/PagingOptions.js → esm2020/lib/Shared/Models/PagingOptions.mjs} +0 -0
  198. /package/{esm2015/lib/Shared/Models/PagingPayload.js → esm2020/lib/Shared/Models/PagingPayload.mjs} +0 -0
  199. /package/{esm2015/lib/Shared/Models/PhoneOptions.js → esm2020/lib/Shared/Models/PhoneOptions.mjs} +0 -0
  200. /package/{esm2015/lib/Shared/Models/ProfileImageUploadOptions.js → esm2020/lib/Shared/Models/ProfileImageUploadOptions.mjs} +0 -0
  201. /package/{esm2015/lib/Shared/Models/ProfilePictureDTO.js → esm2020/lib/Shared/Models/ProfilePictureDTO.mjs} +0 -0
  202. /package/{esm2015/lib/Shared/Models/RadioButtonItem.js → esm2020/lib/Shared/Models/RadioButtonItem.mjs} +0 -0
  203. /package/{esm2015/lib/Shared/Models/RadioButtonOptions.js → esm2020/lib/Shared/Models/RadioButtonOptions.mjs} +0 -0
  204. /package/{esm2015/lib/Shared/Models/RangeNumber.js → esm2020/lib/Shared/Models/RangeNumber.mjs} +0 -0
  205. /package/{esm2015/lib/Shared/Models/Recaptcha.js → esm2020/lib/Shared/Models/Recaptcha.mjs} +0 -0
  206. /package/{esm2015/lib/Shared/Models/RecaptchaOptions.js → esm2020/lib/Shared/Models/RecaptchaOptions.mjs} +0 -0
  207. /package/{esm2015/lib/Shared/Models/RepeaterField.js → esm2020/lib/Shared/Models/RepeaterField.mjs} +0 -0
  208. /package/{esm2015/lib/Shared/Models/RepeaterOptions.js → esm2020/lib/Shared/Models/RepeaterOptions.mjs} +0 -0
  209. /package/{esm2015/lib/Shared/Models/SaveDTO.js → esm2020/lib/Shared/Models/SaveDTO.mjs} +0 -0
  210. /package/{esm2015/lib/Shared/Models/TagsInputDTO.js → esm2020/lib/Shared/Models/TagsInputDTO.mjs} +0 -0
  211. /package/{esm2015/lib/Shared/Models/TagsInputOptions.js → esm2020/lib/Shared/Models/TagsInputOptions.mjs} +0 -0
  212. /package/{esm2015/lib/Shared/Models/TextAreaOptions.js → esm2020/lib/Shared/Models/TextAreaOptions.mjs} +0 -0
  213. /package/{esm2015/lib/Shared/Models/TextBoxOptions.js → esm2020/lib/Shared/Models/TextBoxOptions.mjs} +0 -0
  214. /package/{esm2015/lib/Shared/Models/ToggleslideOptions.js → esm2020/lib/Shared/Models/ToggleslideOptions.mjs} +0 -0
  215. /package/{esm2015/lib/Shared/Models/UploadPersonalImage.js → esm2020/lib/Shared/Models/UploadPersonalImage.mjs} +0 -0
  216. /package/{esm2015/lib/Shared/Models/bread-crumb.js → esm2020/lib/Shared/Models/bread-crumb.mjs} +0 -0
  217. /package/{esm2015/lib/Shared/Models/control-filter-Item.js → esm2020/lib/Shared/Models/control-filter-Item.mjs} +0 -0
  218. /package/{esm2015/lib/Shared/Models/datePickerOptions.js → esm2020/lib/Shared/Models/datePickerOptions.mjs} +0 -0
  219. /package/{esm2015/lib/Shared/Models/filter-options.js → esm2020/lib/Shared/Models/filter-options.mjs} +0 -0
  220. /package/{esm2015/lib/Shared/Models/page-header-options.js → esm2020/lib/Shared/Models/page-header-options.mjs} +0 -0
  221. /package/{esm2015/lib/Shared/config/environment.js → esm2020/lib/Shared/config/environment.mjs} +0 -0
@@ -1,266 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Component, Input, Optional, Output, EventEmitter } from '@angular/core';
3
- import { FormControl, Validators, ControlContainer, FormGroupDirective } from '@angular/forms';
4
- import { ErrorMassageValidation } from '../../Shared/services/validationErrorMassage.service';
5
- import { ControlUtility } from '../../Shared/services/ControlUtility';
6
- import { AutocompleteDTO } from '../../Shared/Models/AutocompleteDTO';
7
- import { noop, Observable, of } from 'rxjs';
8
- import { map, switchMap, tap } from 'rxjs/operators';
9
- import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
10
- import { ControlValidationService, RequestHandlerService, RequestOptionsModel, UtilityService } from '@bnsights/bbsf-utilities';
11
- import { GlobalSettings } from '../../Shared/services/GlobalSettings.service';
12
- export class AutocompleteTextBoxComponent {
13
- // tslint:disable-next-line: max-line-length
14
- constructor(http, ErrorHandler, requestHandlerService, controlUtility, controlContainer, AutocompleteTextBoxControlHost, UtilityService, controlValidationService, globalSettings) {
15
- this.http = http;
16
- this.ErrorHandler = ErrorHandler;
17
- this.requestHandlerService = requestHandlerService;
18
- this.controlUtility = controlUtility;
19
- this.controlContainer = controlContainer;
20
- this.AutocompleteTextBoxControlHost = AutocompleteTextBoxControlHost;
21
- this.UtilityService = UtilityService;
22
- this.controlValidationService = controlValidationService;
23
- this.globalSettings = globalSettings;
24
- this.OnChange = new EventEmitter();
25
- this.keyword = 'value';
26
- this.Search = '';
27
- this.Key = '';
28
- this.Api = 'http';
29
- this.Value = 'value';
30
- this.NewSelectionValidationKey = '';
31
- this.markAllAsTouched = false;
32
- this.validationRules = [];
33
- this.validationRulesasync = [];
34
- this.dataList = [];
35
- this.SelectedValue = "";
36
- this.avatarImage = "./src/assets/images/userimg.png";
37
- this.resetError = () => {
38
- this.controlValidationService.RemoveGlobalError();
39
- };
40
- // onFocused(e) {
41
- // // do something
42
- // }
43
- // onBlur(Value) {
44
- // if (this.options.AllowNewSelection == true) {
45
- // if (typeof (Value) == 'object') {
46
- // this.AutocompleteTextBoxControl.setValue(Value);
47
- // this.AutocompleteTextBoxControl.updateValueAndValidity()
48
- // }
49
- // else {
50
- // let AutocompleteModel = new AutocompleteDTO();
51
- // AutocompleteModel.value = Value;
52
- // let model = new TypeaheadMatch(AutocompleteModel,Value);
53
- // this.AutocompleteTextBoxControl.setValue(model);
54
- // this.AutocompleteTextBoxControl.updateValueAndValidity()
55
- // }
56
- // }
57
- // else {
58
- // if (this.AutocompleteTextBoxControl.value == Value) {
59
- // this.AutocompleteTextBoxControl.setErrors({ NewSelectionValidationKey: this.NewSelectionValidationKey });
60
- // this.AutocompleteTextBoxControl.markAsTouched();
61
- // this.AutocompleteTextBoxControl.invalid;
62
- // return;
63
- // }
64
- // }
65
- // }
66
- // handleResultSelected(result) {
67
- // this.AutocompleteTextBoxControl.setValue(result);
68
- // this.AutocompleteTextBoxControl.updateValueAndValidity()
69
- // this.OnChange.emit(this.AutocompleteTextBoxControl.value)
70
- // this.Search = this.AutocompleteTextBoxControl.value.value
71
- // }
72
- //External Method
73
- this.RemoveRequiredValidation = () => {
74
- this.controlUtility.RemoveRequiredValidation(this.AutocompleteTextBoxControl, this.validationRules, this.options);
75
- };
76
- //External Method
77
- this.AddRequiredValidation = () => {
78
- this.controlUtility.AddRequiredValidation(this.AutocompleteTextBoxControl, this.validationRules, this.options);
79
- };
80
- //External Method
81
- this.RemoveCustomValidation = (CustomValidation) => {
82
- this.controlUtility.RemoveCustomValidation(this.AutocompleteTextBoxControl, this.validationRules, CustomValidation);
83
- };
84
- //External Method
85
- this.AddCustomValidation = (CustomValidation) => {
86
- this.controlUtility.AddCustomValidation(this.AutocompleteTextBoxControl, this.validationRules, CustomValidation);
87
- };
88
- //External Method
89
- this.IsValid = () => {
90
- this.controlUtility.IsValid(this.AutocompleteTextBoxControl);
91
- };
92
- AutocompleteTextBoxComponent.controlContainerstatic = this.controlContainer;
93
- }
94
- ngOnInit() {
95
- if (this.options.IsReadonly && !this.options.Value)
96
- this.options.Value = this.UtilityService.getResourceValue('NA');
97
- if (this.options.ForceDirection)
98
- this.textDir = this.options.ForceDirection == 2 ? 'rtl' : 'ltr';
99
- else
100
- this.textDir = localStorage.getItem('language') == 'ar' ? 'rtl' : 'ltr';
101
- this.controlValidationService.isCreatedBefor = false;
102
- this.group.addControl(this.options.Name, new FormControl(''));
103
- this.AutocompleteTextBoxControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
104
- if (!this.options.ViewType)
105
- this.options.ViewType = this.globalSettings.ViewType;
106
- if (this.options.LabelKey != null && this.options.LabelKey != "")
107
- this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
108
- // this.AutocompleteTextBoxControl.setValue(this.options.Value);
109
- if (this.options.CustomValidation.length > 0) {
110
- let Validations = this.options.CustomValidation;
111
- for (let index = 0; index < Validations.length; index++) {
112
- const Validation = Validations[index];
113
- this.validationRules.push(Validation.functionBody);
114
- }
115
- }
116
- if (this.options.IsRequired) {
117
- this.validationRules.push(Validators.required);
118
- }
119
- this.AutocompleteTextBoxControl.setValidators(this.validationRules);
120
- this.AutocompleteTextBoxControl.setAsyncValidators(this.validationRulesasync);
121
- if (this.options.IsDisabled) {
122
- this.AutocompleteTextBoxControl.disable();
123
- }
124
- if (this.options.SelectedValue != undefined && this.options.SelectedValue != null) {
125
- this.SelectedValue = this.options.SelectedValue;
126
- }
127
- this.AutocompleteTextBoxControlHost.ngSubmit.subscribe((value) => {
128
- if (this.AutocompleteTextBoxControl.value == this.Search && this.options.AllowNewSelection == false) {
129
- this.AutocompleteTextBoxControl.setErrors({ NewSelectionValidationKey: this.NewSelectionValidationKey });
130
- this.AutocompleteTextBoxControl.markAsTouched();
131
- this.AutocompleteTextBoxControl.invalid;
132
- }
133
- this.group.markAllAsTouched();
134
- this.markAllAsTouched = true;
135
- });
136
- const httpOptions = {
137
- headers: new HttpHeaders({
138
- 'Content-Type': 'application/json',
139
- 'Authorization': this.options.ValidationToken
140
- }),
141
- };
142
- this.suggestions$ = new Observable((observer) => {
143
- observer.next(this.Search);
144
- }).pipe(switchMap((query) => {
145
- if (query) {
146
- let params = new HttpParams();
147
- params = params.append(this.options.QueryParam, query);
148
- let requestOptionsModel = new RequestOptionsModel();
149
- requestOptionsModel.disableBlockUI = true;
150
- requestOptionsModel.disableSuccessNotification = true;
151
- // using github public api to get users by name
152
- return this.requestHandlerService.get(this.options.ActionURL, params, null, requestOptionsModel)
153
- .pipe(map((data) => data || []), tap(() => noop, err => {
154
- // in case of http error
155
- this.errorMessage = err && err.message || 'Something goes wrong';
156
- }));
157
- }
158
- return of([]);
159
- }));
160
- }
161
- ngAfterViewInit() {
162
- this.controlUtility.setAttributeForControl(this.options);
163
- }
164
- showGlobalError() {
165
- this.controlUtility.showGlobalError();
166
- }
167
- getErrorValidation(ErrorList) {
168
- if (this.markAllAsTouched && this.group.invalid) {
169
- this.showGlobalError();
170
- this.markAllAsTouched = false;
171
- }
172
- return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
173
- }
174
- copyInputMessage(inputElement) {
175
- this.controlUtility.CopyInputMessage(inputElement);
176
- }
177
- selectEvent(item) {
178
- if (this.options.AllowNewSelection == true) {
179
- if (typeof (item) == 'object') {
180
- this.AutocompleteTextBoxControl.setValue(item);
181
- this.AutocompleteTextBoxControl.updateValueAndValidity();
182
- }
183
- else {
184
- let AutocompleteModel = new AutocompleteDTO();
185
- AutocompleteModel.value = item;
186
- this.AutocompleteTextBoxControl.setValue(AutocompleteModel);
187
- this.AutocompleteTextBoxControl.updateValueAndValidity();
188
- }
189
- }
190
- else {
191
- if (this.AutocompleteTextBoxControl.value == item.value) {
192
- this.AutocompleteTextBoxControl.setErrors({ NewSelectionValidationKey: this.NewSelectionValidationKey });
193
- this.AutocompleteTextBoxControl.markAsTouched();
194
- this.AutocompleteTextBoxControl.invalid;
195
- return;
196
- }
197
- else {
198
- this.AutocompleteTextBoxControl.setValue(item);
199
- this.AutocompleteTextBoxControl.updateValueAndValidity();
200
- let originalValue = this.AutocompleteTextBoxControl.value;
201
- if (this.options.PatchFunction && this.options.PatchPath && this.group.get(this.options.Name).valid) {
202
- this.controlUtility.patchControlValue(originalValue, this.options.PatchFunction, this.options.PatchPath);
203
- }
204
- }
205
- }
206
- // move this line here to emit value no matter is from database or not
207
- this.OnChange.emit(this.AutocompleteTextBoxControl.value);
208
- //Use this line to enable two way binding.
209
- this.options.Value = this.AutocompleteTextBoxControl.value;
210
- }
211
- onChangeSearch(search) {
212
- return __awaiter(this, void 0, void 0, function* () {
213
- if (this.options.MaxLength && search.length > this.options.MaxLength) {
214
- const formControl = this.AutocompleteTextBoxControl;
215
- formControl.setErrors({ errorMassage: this.UtilityService.getResourceValue("MaxLenghtValidationKey") + " " + this.options.MaxLength });
216
- formControl.markAsTouched();
217
- return;
218
- }
219
- this.Search = search;
220
- this.SelectedValue = "";
221
- yield this.suggestions$.subscribe((result) => {
222
- if ((result == null || result.length == 0 || result.length == 0) && this.options.AllowNewSelection == true) {
223
- this.dataList = [
224
- {
225
- key: 0,
226
- value: this.Search
227
- }
228
- ];
229
- }
230
- else {
231
- this.dataList = result;
232
- }
233
- });
234
- });
235
- }
236
- onInputCleared() {
237
- this.AutocompleteTextBoxControl.setValue(null);
238
- this.OnChange.emit(null);
239
- this.AutocompleteTextBoxControl.updateValueAndValidity();
240
- }
241
- }
242
- AutocompleteTextBoxComponent.controlContainerstatic = null;
243
- AutocompleteTextBoxComponent.decorators = [
244
- { type: Component, args: [{
245
- // tslint:disable-next-line: component-selector
246
- selector: 'BBSF-AutocompleteTextBox',
247
- template: "\r\n<div class=\"form-group bbsf-control bbsf-autocomplete-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 <!--Input container-->\r\n <div class=\"bbsf-input-container\" *ngIf=\"!options.IsReadonly\">\r\n <!--input-->\r\n <ng-autocomplete class=\"form-control {{options.ExtraClasses}}\" *ngIf=\"!options.AllowNewSelection\" [data]=\"dataList\" [initialValue]=\"SelectedValue\"\r\n [searchKeyword]=\"keyword\" placeholder=\"{{options.Placeholder}}\" (selected)='selectEvent($event)'\r\n (inputChanged)='onChangeSearch($event)' historyIdentifier=\"dataList\" [itemTemplate]=\"options.CustomTemplate?options.CustomTemplate:itemTemplate\"\r\n [dir]=\"textDir\"\r\n formControlName=\"{{options.Name}}\"\r\n aria-describedby=\"email-error\"\r\n aria-invalid=\"true\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\"\r\n (inputCleared)=\"onInputCleared()\"\r\n >\r\n </ng-autocomplete>\r\n\r\n <ng-autocomplete class=\"form-control {{options.ExtraClasses}}\" *ngIf=\"options.AllowNewSelection\" [data]=\"dataList\" [initialValue]=\"SelectedValue\"\r\n [searchKeyword]=\"keyword\" placeholder=\"{{options.Placeholder}}\" (selected)='selectEvent($event)'\r\n (inputChanged)='onChangeSearch($event)' historyIdentifier=\"dataList\" [itemTemplate]=\"options.CustomTemplate?options.CustomTemplate:itemTemplate\"\r\n [dir]=\"textDir\" (inputCleared)=\"onInputCleared()\"\r\n formControlName=\"{{options.Name}}\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n [class.is-invalid]=\"AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched\">\r\n </ng-autocomplete>\r\n\r\n <ng-template #itemTemplate let-item>\r\n <img *ngIf=\"options.ItemWithImage\" src=\"{{(item.image?item.image:avatarImage)}}\" />\r\n <a [innerHTML]=\"item.value\"></a>\r\n </ng-template>\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.IsReadonly\"><span class=\"readonly-view\">{{AutocompleteTextBoxControl.value.value}}</span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\" *ngIf=\"!options.IsReadonly\">\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\" *ngIf=\"(AutocompleteTextBoxControl.invalid && AutocompleteTextBoxControl.touched)\">\r\n {{getErrorValidation(AutocompleteTextBoxControl.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>\r\n\r\n"
248
- },] }
249
- ];
250
- AutocompleteTextBoxComponent.ctorParameters = () => [
251
- { type: HttpClient },
252
- { type: ErrorMassageValidation },
253
- { type: RequestHandlerService },
254
- { type: ControlUtility },
255
- { type: ControlContainer, decorators: [{ type: Optional }] },
256
- { type: FormGroupDirective },
257
- { type: UtilityService },
258
- { type: ControlValidationService },
259
- { type: GlobalSettings }
260
- ];
261
- AutocompleteTextBoxComponent.propDecorators = {
262
- group: [{ type: Input }],
263
- options: [{ type: Input }],
264
- OnChange: [{ type: Output }]
265
- };
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXV0b2NvbXBsZXRlVGV4dEJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvQXV0b2NvbXBsZXRlVGV4dEJveC9BdXRvY29tcGxldGVUZXh0Qm94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQVcsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDN0csT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQThCLGdCQUFnQixFQUFFLGtCQUFrQixFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFKLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQVksRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFPOUUsTUFBTSxPQUFPLDRCQUE0QjtJQUl2Qyw0Q0FBNEM7SUFDNUMsWUFBb0IsSUFBZ0IsRUFBVSxZQUFvQyxFQUFVLHFCQUE0QyxFQUM5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QyxvMUdBQW1EO2FBQ3BEOzs7WUFSUSxVQUFVO1lBTlYsc0JBQXNCO1lBT0kscUJBQXFCO1lBTi9DLGNBQWM7WUFGdUMsZ0JBQWdCLHVCQXNCakMsUUFBUTtZQXRCMkIsa0JBQWtCO1lBUW5CLGNBQWM7WUFBcEYsd0JBQXdCO1lBQ3hCLGNBQWM7OztvQkFrQnBCLEtBQUs7c0JBQ0wsS0FBSzt1QkFDTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBEb0NoZWNrLCBPcHRpb25hbCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEF0dHJpYnV0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIEZvcm1Hcm91cERpcmVjdGl2ZSwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEVycm9yTWFzc2FnZVZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvdmFsaWRhdGlvbkVycm9yTWFzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29udHJvbFV0aWxpdHkgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvQ29udHJvbFV0aWxpdHknO1xyXG5pbXBvcnQgeyBBdXRvY29tcGxldGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9BdXRvY29tcGxldGVPcHRpb25zJztcclxuaW1wb3J0IHsgQXV0b2NvbXBsZXRlRFRPIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9BdXRvY29tcGxldGVEVE8nO1xyXG5pbXBvcnQgeyBub29wLCBPYnNlcnZhYmxlLCBPYnNlcnZlciwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLCBSZXF1ZXN0T3B0aW9uc01vZGVsLCBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IEdsb2JhbFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0dsb2JhbFNldHRpbmdzLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ0JCU0YtQXV0b2NvbXBsZXRlVGV4dEJveCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL0F1dG9jb21wbGV0ZVRleHRCb3guY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVUZXh0Qm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4gIHN0YXRpYyBjb250cm9sQ29udGFpbmVyc3RhdGljID0gbnVsbDtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBFcnJvckhhbmRsZXI6IEVycm9yTWFzc2FnZVZhbGlkYXRpb24sIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbnRyb2xVdGlsaXR5OiBDb250cm9sVXRpbGl0eSwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOlxyXG4gICAgICBDb250cm9sQ29udGFpbmVyLCBwdWJsaWMgQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmUsIHByaXZhdGUgVXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb250cm9sVmFsaWRhdGlvblNlcnZpY2U6IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSwgcHJpdmF0ZSBnbG9iYWxTZXR0aW5nczogR2xvYmFsU2V0dGluZ3MpIHtcclxuICAgIEF1dG9jb21wbGV0ZVRleHRCb3hDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICB9XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBvcHRpb25zOiBBdXRvY29tcGxldGVPcHRpb25zO1xyXG4gIEBPdXRwdXQoKSBPbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBrZXl3b3JkOiBzdHJpbmcgPSAndmFsdWUnXHJcbiAgQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBTZWFyY2g6IHN0cmluZyA9ICcnXHJcbiAgS2V5OiBzdHJpbmcgPSAnJ1xyXG5cclxuICBBcGk6IHN0cmluZyA9ICdodHRwJztcclxuICBWYWx1ZTogc3RyaW5nID0gJ3ZhbHVlJ1xyXG4gIE5ld1NlbGVjdGlvblZhbGlkYXRpb25LZXk6IHN0cmluZyA9ICcnO1xyXG4gIG1hcmtBbGxBc1RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB2YWxpZGF0aW9uUnVsZXMgPSBbXTtcclxuICB2YWxpZGF0aW9uUnVsZXNhc3luYyA9IFtdO1xyXG4gIGRhdGFTb3VyY2U6IE9ic2VydmFibGU8YW55PjtcclxuICBzdWdnZXN0aW9ucyQ6IE9ic2VydmFibGU8YW55W10+O1xyXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xyXG4gIGRhdGFMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIFNlbGVjdGVkVmFsdWU6IHN0cmluZyA9IFwiXCJcclxuICBhdmF0YXJJbWFnZTogc3RyaW5nID0gXCIuL3NyYy9hc3NldHMvaW1hZ2VzL3VzZXJpbWcucG5nXCI7XHJcbiAgdGV4dERpcjtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzUmVhZG9ubHkgJiYgIXRoaXMub3B0aW9ucy5WYWx1ZSlcclxuICAgICAgdGhpcy5vcHRpb25zLlZhbHVlID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdOQScpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuRm9yY2VEaXJlY3Rpb24pXHJcbiAgICAgIHRoaXMudGV4dERpciA9IHRoaXMub3B0aW9ucy5Gb3JjZURpcmVjdGlvbiA9PSAyID8gJ3J0bCcgOiAnbHRyJztcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy50ZXh0RGlyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmd1YWdlJykgPT0gJ2FyJyA/ICdydGwnIDogJ2x0cic7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5pc0NyZWF0ZWRCZWZvciA9IGZhbHNlXHJcbiAgICB0aGlzLmdyb3VwLmFkZENvbnRyb2wodGhpcy5vcHRpb25zLk5hbWUsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xyXG4gICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbCA9IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLk5hbWVdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuVmlld1R5cGUpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5WaWV3VHlwZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuVmlld1R5cGU7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSBcIlwiKVxyXG4gICAgICB0aGlzLm9wdGlvbnMuTGFiZWxWYWx1ZSA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSh0aGlzLm9wdGlvbnMuTGFiZWxLZXkpO1xyXG5cclxuICAgIC8vIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLlZhbHVlKTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgVmFsaWRhdGlvbnMgPSB0aGlzLm9wdGlvbnMuQ3VzdG9tVmFsaWRhdGlvblxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgVmFsaWRhdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgVmFsaWRhdGlvbiA9IFZhbGlkYXRpb25zW2luZGV4XTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzUmVxdWlyZWQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgIH1cclxuICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlc2FzeW5jKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuSXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLmRpc2FibGUoKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5TZWxlY3RlZFZhbHVlICE9IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMuU2VsZWN0ZWRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRWYWx1ZSA9IHRoaXMub3B0aW9ucy5TZWxlY3RlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sSG9zdC5uZ1N1Ym1pdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnZhbHVlID09IHRoaXMuU2VhcmNoICYmIHRoaXMub3B0aW9ucy5BbGxvd05ld1NlbGVjdGlvbiA9PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wuc2V0RXJyb3JzKHsgTmV3U2VsZWN0aW9uVmFsaWRhdGlvbktleTogdGhpcy5OZXdTZWxlY3Rpb25WYWxpZGF0aW9uS2V5IH0pO1xyXG4gICAgICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wuaW52YWxpZDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKVxyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiB0aGlzLm9wdGlvbnMuVmFsaWRhdGlvblRva2VuXHJcbiAgICAgIH0pLFxyXG4gICAgfTtcclxuXHJcblxyXG5cclxuXHJcbiAgICB0aGlzLnN1Z2dlc3Rpb25zJCA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8c3RyaW5nPikgPT4ge1xyXG4gICAgICBvYnNlcnZlci5uZXh0KHRoaXMuU2VhcmNoKTtcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgocXVlcnk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChxdWVyeSkge1xyXG4gICAgICAgICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKHRoaXMub3B0aW9ucy5RdWVyeVBhcmFtLCBxdWVyeSk7XHJcbiAgICAgICAgICBsZXQgcmVxdWVzdE9wdGlvbnNNb2RlbCA9IG5ldyBSZXF1ZXN0T3B0aW9uc01vZGVsKClcclxuICAgICAgICAgIHJlcXVlc3RPcHRpb25zTW9kZWwuZGlzYWJsZUJsb2NrVUkgPSB0cnVlO1xyXG4gICAgICAgICAgcmVxdWVzdE9wdGlvbnNNb2RlbC5kaXNhYmxlU3VjY2Vzc05vdGlmaWNhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAvLyB1c2luZyBnaXRodWIgcHVibGljIGFwaSB0byBnZXQgdXNlcnMgYnkgbmFtZVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdEhhbmRsZXJTZXJ2aWNlLmdldCh0aGlzLm9wdGlvbnMuQWN0aW9uVVJMLCBwYXJhbXMsIG51bGwsIHJlcXVlc3RPcHRpb25zTW9kZWwpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIG1hcCgoZGF0YSkgPT4gZGF0YSBhcyBBdHRyaWJ1dGVbXSB8fCBbXSksXHJcbiAgICAgICAgICAgICAgdGFwKCgpID0+IG5vb3AsIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGh0dHAgZXJyb3JcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyICYmIGVyci5tZXNzYWdlIHx8ICdTb21ldGhpbmcgZ29lcyB3cm9uZyc7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2V0QXR0cmlidXRlRm9yQ29udHJvbCh0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gIHJlc2V0RXJyb3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5SZW1vdmVHbG9iYWxFcnJvcigpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0dsb2JhbEVycm9yKCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5zaG93R2xvYmFsRXJyb3IoKVxyXG4gIH1cclxuXHJcblxyXG4gIGdldEVycm9yVmFsaWRhdGlvbihFcnJvckxpc3QpIHtcclxuXHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBjb3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Db3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudClcclxuICB9XHJcblxyXG5cclxuICBzZWxlY3RFdmVudChpdGVtKSB7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5BbGxvd05ld1NlbGVjdGlvbiA9PSB0cnVlKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgKGl0ZW0pID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWx1ZShpdGVtKTtcclxuICAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBBdXRvY29tcGxldGVNb2RlbCA9IG5ldyBBdXRvY29tcGxldGVEVE8oKTtcclxuICAgICAgICBBdXRvY29tcGxldGVNb2RlbC52YWx1ZSA9IGl0ZW07XHJcbiAgICAgICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWx1ZShBdXRvY29tcGxldGVNb2RlbCk7XHJcbiAgICAgICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnZhbHVlID09IGl0ZW0udmFsdWUpIHtcclxuICAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnNldEVycm9ycyh7IE5ld1NlbGVjdGlvblZhbGlkYXRpb25LZXk6IHRoaXMuTmV3U2VsZWN0aW9uVmFsaWRhdGlvbktleSB9KTtcclxuICAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLmludmFsaWQ7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wuc2V0VmFsdWUoaXRlbSk7XHJcbiAgICAgICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcclxuICAgICAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uICYmIHRoaXMub3B0aW9ucy5QYXRjaFBhdGggJiYgdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLk5hbWUpLnZhbGlkKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdGNoQ29udHJvbFZhbHVlKG9yaWdpbmFsVmFsdWUsIHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uLCB0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBtb3ZlIHRoaXMgbGluZSBoZXJlIHRvIGVtaXQgdmFsdWUgbm8gbWF0dGVyIGlzIGZyb20gZGF0YWJhc2Ugb3Igbm90IFxyXG4gICAgdGhpcy5PbkNoYW5nZS5lbWl0KHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wudmFsdWUpXHJcbiAgICAvL1VzZSB0aGlzIGxpbmUgdG8gZW5hYmxlIHR3byB3YXkgYmluZGluZy5cclxuICAgIHRoaXMub3B0aW9ucy5WYWx1ZSA9IHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wudmFsdWU7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkNoYW5nZVNlYXJjaChzZWFyY2g6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5NYXhMZW5ndGggJiYgc2VhcmNoLmxlbmd0aCA+IHRoaXMub3B0aW9ucy5NYXhMZW5ndGgpIHtcclxuICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sO1xyXG4gICAgICBmb3JtQ29udHJvbC5zZXRFcnJvcnMoeyBlcnJvck1hc3NhZ2U6IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk1heExlbmdodFZhbGlkYXRpb25LZXlcIikgKyBcIiBcIiArIHRoaXMub3B0aW9ucy5NYXhMZW5ndGggfSk7XHJcbiAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5TZWFyY2ggPSBzZWFyY2g7XHJcbiAgICB0aGlzLlNlbGVjdGVkVmFsdWUgPSBcIlwiO1xyXG4gICAgYXdhaXQgdGhpcy5zdWdnZXN0aW9ucyQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKChyZXN1bHQgPT0gbnVsbCB8fCByZXN1bHQubGVuZ3RoID09IDAgfHwgcmVzdWx0Lmxlbmd0aCA9PSAwKSAmJiB0aGlzLm9wdGlvbnMuQWxsb3dOZXdTZWxlY3Rpb24gPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuZGF0YUxpc3QgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGtleTogMCxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuU2VhcmNoXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGF0YUxpc3QgPSByZXN1bHRcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG9uSW5wdXRDbGVhcmVkKCkge1xyXG4gICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuT25DaGFuZ2UuZW1pdChudWxsKTtcclxuICAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXHJcbiAgfVxyXG4gIC8vIG9uRm9jdXNlZChlKSB7XHJcbiAgLy8gICAvLyBkbyBzb21ldGhpbmdcclxuICAvLyB9XHJcblxyXG5cclxuICAvLyBvbkJsdXIoVmFsdWUpIHtcclxuICAvLyAgIGlmICh0aGlzLm9wdGlvbnMuQWxsb3dOZXdTZWxlY3Rpb24gPT0gdHJ1ZSkge1xyXG5cclxuICAvLyAgICAgaWYgKHR5cGVvZiAoVmFsdWUpID09ICdvYmplY3QnKSB7XHJcbiAgLy8gICAgICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC5zZXRWYWx1ZShWYWx1ZSk7XHJcbiAgLy8gICAgICAgdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcclxuXHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgZWxzZSB7XHJcbiAgLy8gICAgICAgbGV0IEF1dG9jb21wbGV0ZU1vZGVsID0gbmV3IEF1dG9jb21wbGV0ZURUTygpO1xyXG4gIC8vICAgICAgIEF1dG9jb21wbGV0ZU1vZGVsLnZhbHVlID0gVmFsdWU7XHJcbiAgLy8gICAgICAgbGV0IG1vZGVsID0gbmV3IFR5cGVhaGVhZE1hdGNoKEF1dG9jb21wbGV0ZU1vZGVsLFZhbHVlKTtcclxuICAvLyAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnNldFZhbHVlKG1vZGVsKTtcclxuICAvLyAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxyXG5cclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIGVsc2Uge1xyXG5cclxuICAvLyAgICAgaWYgKHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wudmFsdWUgPT0gVmFsdWUpIHtcclxuICAvLyAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLnNldEVycm9ycyh7IE5ld1NlbGVjdGlvblZhbGlkYXRpb25LZXk6IHRoaXMuTmV3U2VsZWN0aW9uVmFsaWRhdGlvbktleSB9KTtcclxuICAvLyAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAvLyAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLmludmFsaWQ7XHJcbiAgLy8gICAgICAgcmV0dXJuO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gIH1cclxuXHJcblxyXG4gIC8vIGhhbmRsZVJlc3VsdFNlbGVjdGVkKHJlc3VsdCkge1xyXG5cclxuICAvLyAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wuc2V0VmFsdWUocmVzdWx0KTtcclxuICAvLyAgIHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXHJcbiAgLy8gICB0aGlzLk9uQ2hhbmdlLmVtaXQodGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC52YWx1ZSlcclxuICAvLyAgIHRoaXMuU2VhcmNoID0gdGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbC52YWx1ZS52YWx1ZVxyXG5cclxuXHJcblxyXG4gIC8vIH1cclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBSZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LlJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbih0aGlzLkF1dG9jb21wbGV0ZVRleHRCb3hDb250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgdGhpcy5vcHRpb25zKVxyXG4gIH1cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIEFkZFJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIFJlbW92ZUN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVDdXN0b21WYWxpZGF0aW9uKHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCBDdXN0b21WYWxpZGF0aW9uKVxyXG4gIH1cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIEFkZEN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRDdXN0b21WYWxpZGF0aW9uKHRoaXMuQXV0b2NvbXBsZXRlVGV4dEJveENvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCBDdXN0b21WYWxpZGF0aW9uKVxyXG4gIH1cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIElzVmFsaWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LklzVmFsaWQodGhpcy5BdXRvY29tcGxldGVUZXh0Qm94Q29udHJvbClcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxuIl19
@@ -1,177 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import dayGridPlugin from '@fullcalendar/daygrid';
3
- import timeGrigPlugin from '@fullcalendar/timegrid';
4
- import interactionPlugin from '@fullcalendar/interaction'; // for dateClick
5
- import timeGridPlugin from '@fullcalendar/timegrid';
6
- import listPlugin from '@fullcalendar/list';
7
- import { Component, Input, Optional, ViewChild } from '@angular/core';
8
- import { FormControl, ControlContainer, FormGroupDirective } from '@angular/forms';
9
- import { ErrorMassageValidation } from '../../Shared/services/validationErrorMassage.service';
10
- import { ControlUtility } from '../../Shared/services/ControlUtility';
11
- import { CalendarView } from '../../Shared/Enums/CalendarView';
12
- // import { CalendarOptions as CalendarOptionsModel, DateSelectArg, EventApi, EventClickArg } from '@fullcalendar/angular';
13
- import enGbLocale from '@fullcalendar/core/locales/en-gb';
14
- import ArLocale from '@fullcalendar/core/locales/ar';
15
- import { BBSFTranslateService, ControlValidationService, UtilityService } from '@bnsights/bbsf-utilities';
16
- export class CalendarComponent {
17
- // tslint:disable-next-line: max-line-length
18
- constructor(ErrorHandler, controlUtility, controlContainer, PhoneControlHost, UtilityService, translate, controlValidationService) {
19
- this.ErrorHandler = ErrorHandler;
20
- this.controlUtility = controlUtility;
21
- this.controlContainer = controlContainer;
22
- this.PhoneControlHost = PhoneControlHost;
23
- this.UtilityService = UtilityService;
24
- this.translate = translate;
25
- this.controlValidationService = controlValidationService;
26
- this.calendarVisible = true;
27
- this.currentEvents = [];
28
- this.calendarPlugins = [dayGridPlugin, timeGrigPlugin, interactionPlugin, listPlugin];
29
- this.calendarWeekends = true;
30
- this.calendarEvents = [];
31
- this.DefaultView = "";
32
- this.CalendarViews = '';
33
- this.locales = [];
34
- this.CurrentLanguage = "";
35
- this.resetError = () => {
36
- this.controlValidationService.RemoveGlobalError();
37
- };
38
- CalendarComponent.controlContainerstatic = this.controlContainer;
39
- }
40
- ngOnInit() {
41
- return __awaiter(this, void 0, void 0, function* () {
42
- switch (yield this.UtilityService.getCurrentLanguage()) {
43
- case 'ar':
44
- this.locales = [ArLocale];
45
- this.CurrentLanguage = "Ar";
46
- break;
47
- case 'en':
48
- this.locales = [enGbLocale];
49
- this.CurrentLanguage = "En";
50
- break;
51
- default:
52
- break;
53
- }
54
- this.translate.onLangChange.subscribe((event) => {
55
- switch (event.lang) {
56
- case 'ar':
57
- this.locales = [ArLocale];
58
- this.CurrentLanguage = "Ar";
59
- break;
60
- case 'en':
61
- this.locales = [enGbLocale];
62
- this.CurrentLanguage = "En";
63
- break;
64
- default:
65
- break;
66
- }
67
- });
68
- this.calendarEvents = this.options.EventList;
69
- this.calendarWeekends = this.options.AllowCalendarWeekends;
70
- switch (this.options.DefaultView) {
71
- case CalendarView.Month:
72
- this.DefaultView = "dayGridMonth";
73
- break;
74
- case CalendarView.Weekly:
75
- this.DefaultView = "timeGridWeek";
76
- break;
77
- case CalendarView.Daily:
78
- this.DefaultView = "timeGridDay";
79
- break;
80
- default:
81
- break;
82
- }
83
- if (this.options.CalendarViews != null && this.options.CalendarViews.length > 0)
84
- for (let index = 0; index < this.options.CalendarViews.length; index++) {
85
- const element = this.options.CalendarViews[index];
86
- switch (element) {
87
- case CalendarView.Agenda:
88
- this.CalendarViews += "listWeek,";
89
- break;
90
- case CalendarView.Daily:
91
- this.CalendarViews += "timeGridDay,";
92
- break;
93
- case CalendarView.Weekly:
94
- this.CalendarViews += "timeGridWeek,";
95
- break;
96
- case CalendarView.Month:
97
- this.CalendarViews += "dayGridMonth,";
98
- break;
99
- default:
100
- break;
101
- }
102
- }
103
- this.group.addControl(this.options.Name, new FormControl(''));
104
- this.CalendarFormControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
105
- this.calendarOptions = {
106
- plugins: [
107
- dayGridPlugin,
108
- timeGridPlugin,
109
- listPlugin,
110
- interactionPlugin
111
- ],
112
- headerToolbar: {
113
- left: 'prev,next today',
114
- center: 'title',
115
- right: this.CalendarViews.substring(0, this.CalendarViews.length - 1)
116
- },
117
- locales: this.locales,
118
- locale: this.CurrentLanguage,
119
- initialView: this.CalendarViews.split(',')[0],
120
- initialEvents: this.calendarEvents,
121
- initialDate: this.options.DefaultDate,
122
- weekends: this.options.AllowCalendarWeekends,
123
- editable: this.options.Eventeditable,
124
- selectable: this.options.Eventselectable,
125
- // selectMirror: true,
126
- dayMaxEvents: this.options.dayMaxEvents,
127
- select: this.OnDayClickFunction.bind(this),
128
- eventClick: this.OnEventClickFunction.bind(this),
129
- // eventsSet: this.handleEvents.bind(this)
130
- /* you can update a remote database when these fire:
131
- eventAdd:
132
- eventChange:
133
- eventRemove:
134
- */
135
- };
136
- });
137
- }
138
- ngAfterViewInit() {
139
- }
140
- getErrorValidation(Errorsitem) {
141
- }
142
- OnDayClickFunction(arg) {
143
- if (this.options.OnDayClickFunction != null) {
144
- let DayClickFunction = this.options.OnDayClickFunction;
145
- DayClickFunction(arg);
146
- }
147
- }
148
- OnEventClickFunction(arg) {
149
- if (this.options.OnEventClickFunction != null) {
150
- let EventClickFunction = this.options.OnEventClickFunction;
151
- EventClickFunction(arg.event);
152
- }
153
- }
154
- }
155
- CalendarComponent.controlContainerstatic = null;
156
- CalendarComponent.decorators = [
157
- { type: Component, args: [{
158
- selector: 'BBSF-Calendar',
159
- template: "\r\n<div class=\"b-control b-calendar\">\r\n <div class=\"form-group validate is-invalid\" [formGroup]=\"group\">\r\n <!-- <full-calendar #calendar\r\n [defaultDate]=\"options.DefaultDate\"\r\n [defaultView]=\"DefaultView\"\r\n [header]=\"{\r\n left: 'prev,next today',\r\n center: 'title',\r\n right: CalendarViews\r\n }\"\r\n ngDefaultControl\r\n formControlName=\"{{options.Name}}\"\r\n [locales]=\"locales\"\r\n [plugins]=\"calendarPlugins\"\r\n [weekends]=\"calendarWeekends\"\r\n [events]=\"calendarEvents\"\r\n (dateClick)=\"OnDayClickFunction($event)\"\r\n (eventClick)=\"OnEventClickFunction($event)\"\r\n id=\"{{options.Name}}\"></full-calendar> -->\r\n\r\n\r\n <full-calendar\r\n *ngIf=\"options.CalendarVisible\"\r\n [options]='calendarOptions'\r\n id=\"{{options.Name}}\"\r\n ngDefaultControl\r\n formControlName=\"{{options.Name}}\"\r\n ></full-calendar>\r\n\r\n </div>\r\n</div>\r\n",
160
- styles: [""]
161
- },] }
162
- ];
163
- CalendarComponent.ctorParameters = () => [
164
- { type: ErrorMassageValidation },
165
- { type: ControlUtility },
166
- { type: ControlContainer, decorators: [{ type: Optional }] },
167
- { type: FormGroupDirective },
168
- { type: UtilityService },
169
- { type: BBSFTranslateService },
170
- { type: ControlValidationService }
171
- ];
172
- CalendarComponent.propDecorators = {
173
- group: [{ type: Input }],
174
- options: [{ type: Input }],
175
- calendarComponent: [{ type: ViewChild, args: ['calendar', { static: false },] }]
176
- };
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL0NhbGVuZGFyL0NhbGVuZGFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxhQUFhLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxjQUFjLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxpQkFBaUIsTUFBTSwyQkFBMkIsQ0FBQyxDQUFDLGdCQUFnQjtBQUMzRSxPQUFPLGNBQWMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLFVBQVUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBVyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxXQUFXLEVBQTBDLGdCQUFnQixFQUFFLGtCQUFrQixFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFKLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsMkhBQTJIO0FBQzNILE9BQU8sVUFBVSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFELE9BQU8sUUFBUSxNQUFNLCtCQUErQixDQUFDO0FBRXJELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU8xRyxNQUFNLE9BQU8saUJBQWlCO0lBSTVCLDRDQUE0QztJQUM1QyxZQUFvQixZQUFvQyxFQUFVLGNBQThCLEVBQXNCLGdCQUFrQyxFQUFTLGdCQUFvQyxFQUFTLGNBQTZCLEVBQVMsU0FBK0IsRUFBUyx3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SUFFRCxvQkFBb0IsQ0FBQyxHQUFHO1FBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLEVBQUU7WUFDN0MsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO1lBQzNELGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvQjtJQUVILENBQUM7O0FBM0pNLHdDQUFzQixHQUFHLElBQUksQ0FBQzs7WUFSdEMsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxlQUFlO2dCQUN6QixnekNBQXdDOzthQUV6Qzs7O1lBZFEsc0JBQXNCO1lBQ3RCLGNBQWM7WUFGdUMsZ0JBQWdCLHVCQXFCdUIsUUFBUTtZQXJCN0Isa0JBQWtCO1lBU3pDLGNBQWM7WUFBOUQsb0JBQW9CO1lBQUUsd0JBQXdCOzs7b0JBZXBELEtBQUs7c0JBQ0wsS0FBSztnQ0FFTCxTQUFTLFNBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZ1bGxDYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJ0BmdWxsY2FsZW5kYXIvYW5ndWxhcic7XHJcbmltcG9ydCAqIGFzIGNvcmUgZnJvbSAnQGZ1bGxjYWxlbmRhci9jb3JlJztcclxuaW1wb3J0IGRheUdyaWRQbHVnaW4gZnJvbSAnQGZ1bGxjYWxlbmRhci9kYXlncmlkJztcclxuaW1wb3J0IHRpbWVHcmlnUGx1Z2luIGZyb20gJ0BmdWxsY2FsZW5kYXIvdGltZWdyaWQnO1xyXG5pbXBvcnQgaW50ZXJhY3Rpb25QbHVnaW4gZnJvbSAnQGZ1bGxjYWxlbmRhci9pbnRlcmFjdGlvbic7IC8vIGZvciBkYXRlQ2xpY2tcclxuaW1wb3J0IHRpbWVHcmlkUGx1Z2luIGZyb20gJ0BmdWxsY2FsZW5kYXIvdGltZWdyaWQnO1xyXG5pbXBvcnQgbGlzdFBsdWdpbiBmcm9tICdAZnVsbGNhbGVuZGFyL2xpc3QnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIERvQ2hlY2ssIE9wdGlvbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMsIEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtR3JvdXBEaXJlY3RpdmUsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBFcnJvck1hc3NhZ2VWYWxpZGF0aW9uIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL3ZhbGlkYXRpb25FcnJvck1hc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnRyb2xVdGlsaXR5IH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0NvbnRyb2xVdGlsaXR5JztcclxuaW1wb3J0IHsgQ2FsZW5kYXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9DYWxlbmRhck9wdGlvbnMnO1xyXG5pbXBvcnQgeyBDYWxlbmRhclZpZXcgfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvQ2FsZW5kYXJWaWV3JztcclxuLy8gaW1wb3J0IHsgQ2FsZW5kYXJPcHRpb25zIGFzIENhbGVuZGFyT3B0aW9uc01vZGVsLCBEYXRlU2VsZWN0QXJnLCBFdmVudEFwaSwgRXZlbnRDbGlja0FyZyB9IGZyb20gJ0BmdWxsY2FsZW5kYXIvYW5ndWxhcic7XHJcbmltcG9ydCBlbkdiTG9jYWxlIGZyb20gJ0BmdWxsY2FsZW5kYXIvY29yZS9sb2NhbGVzL2VuLWdiJztcclxuaW1wb3J0IEFyTG9jYWxlIGZyb20gJ0BmdWxsY2FsZW5kYXIvY29yZS9sb2NhbGVzL2FyJztcclxuaW1wb3J0IHsgTGFuZ0NoYW5nZUV2ZW50IH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnQkJTRi1DYWxlbmRhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL0NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9DYWxlbmRhci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IG51bGw7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIEVycm9ySGFuZGxlcjogRXJyb3JNYXNzYWdlVmFsaWRhdGlvbiwgcHJpdmF0ZSBjb250cm9sVXRpbGl0eTogQ29udHJvbFV0aWxpdHksIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lciwgcHVibGljIFBob25lQ29udHJvbEhvc3Q6IEZvcm1Hcm91cERpcmVjdGl2ZSxwcml2YXRlIFV0aWxpdHlTZXJ2aWNlOlV0aWxpdHlTZXJ2aWNlLHByaXZhdGUgdHJhbnNsYXRlOiBCQlNGVHJhbnNsYXRlU2VydmljZSxwcml2YXRlIGNvbnRyb2xWYWxpZGF0aW9uU2VydmljZTpDb250cm9sVmFsaWRhdGlvblNlcnZpY2UpIHtcclxuICAgIENhbGVuZGFyQ29tcG9uZW50LmNvbnRyb2xDb250YWluZXJzdGF0aWMgPSB0aGlzLmNvbnRyb2xDb250YWluZXI7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogQ2FsZW5kYXJPcHRpb25zO1xyXG4gIENhbGVuZGFyRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBAVmlld0NoaWxkKCdjYWxlbmRhcicsIHsgc3RhdGljOiBmYWxzZSB9KSBjYWxlbmRhckNvbXBvbmVudDogRnVsbENhbGVuZGFyQ29tcG9uZW50OyAvLyB0aGUgI2NhbGVuZGFyIGluIHRoZSB0ZW1wbGF0ZVxyXG5cclxuXHJcblxyXG4gIGNhbGVuZGFyVmlzaWJsZSA9IHRydWU7XHJcbiAgY2FsZW5kYXJPcHRpb25zOiBjb3JlLkNhbGVuZGFyT3B0aW9ucztcclxuICBjdXJyZW50RXZlbnRzOiBjb3JlLkV2ZW50QXBpW10gPSBbXTtcclxuICBjYWxlbmRhclBsdWdpbnMgPSBbZGF5R3JpZFBsdWdpbiwgdGltZUdyaWdQbHVnaW4sIGludGVyYWN0aW9uUGx1Z2luLCBsaXN0UGx1Z2luXTtcclxuICBjYWxlbmRhcldlZWtlbmRzID0gdHJ1ZTtcclxuICBjYWxlbmRhckV2ZW50czogY29yZS5FdmVudElucHV0W10gPSBbXTtcclxuICBEZWZhdWx0VmlldyA9IFwiXCJcclxuICBDYWxlbmRhclZpZXdzID0gJydcclxuICBsb2NhbGVzID0gW107XHJcbiAgQ3VycmVudExhbmd1YWdlID0gXCJcIlxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgc3dpdGNoIChhd2FpdCB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpKSB7XHJcbiAgICAgIGNhc2UgJ2FyJzpcclxuICAgICAgICB0aGlzLmxvY2FsZXMgPSBbQXJMb2NhbGVdXHJcbiAgICAgICAgdGhpcy5DdXJyZW50TGFuZ3VhZ2UgPSBcIkFyXCJcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZW4nOlxyXG4gICAgICAgIHRoaXMubG9jYWxlcyA9IFtlbkdiTG9jYWxlXVxyXG4gICAgICAgIHRoaXMuQ3VycmVudExhbmd1YWdlID0gXCJFblwiXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IExhbmdDaGFuZ2VFdmVudCkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGV2ZW50LmxhbmcpIHtcclxuICAgICAgICBjYXNlICdhcic6XHJcbiAgICAgICAgICB0aGlzLmxvY2FsZXMgPSBbQXJMb2NhbGVdXHJcbiAgICAgICAgICB0aGlzLkN1cnJlbnRMYW5ndWFnZSA9IFwiQXJcIlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnZW4nOlxyXG4gICAgICAgICAgdGhpcy5sb2NhbGVzID0gW2VuR2JMb2NhbGVdXHJcbiAgICAgICAgICB0aGlzLkN1cnJlbnRMYW5ndWFnZSA9IFwiRW5cIlxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG4gICAgdGhpcy5jYWxlbmRhckV2ZW50cyA9IHRoaXMub3B0aW9ucy5FdmVudExpc3RcclxuICAgIHRoaXMuY2FsZW5kYXJXZWVrZW5kcyA9IHRoaXMub3B0aW9ucy5BbGxvd0NhbGVuZGFyV2Vla2VuZHNcclxuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLkRlZmF1bHRWaWV3KSB7XHJcbiAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3Lk1vbnRoOlxyXG4gICAgICAgIHRoaXMuRGVmYXVsdFZpZXcgPSBcImRheUdyaWRNb250aFwiXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LldlZWtseTpcclxuICAgICAgICB0aGlzLkRlZmF1bHRWaWV3ID0gXCJ0aW1lR3JpZFdlZWtcIlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENhbGVuZGFyVmlldy5EYWlseTpcclxuICAgICAgICB0aGlzLkRlZmF1bHRWaWV3ID0gXCJ0aW1lR3JpZERheVwiXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkNhbGVuZGFyVmlld3MgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuQ2FsZW5kYXJWaWV3cy5sZW5ndGggPiAwKVxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLkNhbGVuZGFyVmlld3MubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMub3B0aW9ucy5DYWxlbmRhclZpZXdzW2luZGV4XTtcclxuICAgICAgICBzd2l0Y2ggKGVsZW1lbnQpIHtcclxuICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LkFnZW5kYTpcclxuICAgICAgICAgICAgdGhpcy5DYWxlbmRhclZpZXdzICs9IFwibGlzdFdlZWssXCJcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIENhbGVuZGFyVmlldy5EYWlseTpcclxuICAgICAgICAgICAgdGhpcy5DYWxlbmRhclZpZXdzICs9IFwidGltZUdyaWREYXksXCJcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIENhbGVuZGFyVmlldy5XZWVrbHk6XHJcbiAgICAgICAgICAgIHRoaXMuQ2FsZW5kYXJWaWV3cyArPSBcInRpbWVHcmlkV2VlayxcIlxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3Lk1vbnRoOlxyXG4gICAgICAgICAgICB0aGlzLkNhbGVuZGFyVmlld3MgKz0gXCJkYXlHcmlkTW9udGgsXCJcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgdGhpcy5ncm91cC5hZGRDb250cm9sKHRoaXMub3B0aW9ucy5OYW1lLCBuZXcgRm9ybUNvbnRyb2woJycpKTtcclxuICAgIHRoaXMuQ2FsZW5kYXJGb3JtQ29udHJvbCA9IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLk5hbWVdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcblxyXG5cclxuICAgIHRoaXMuY2FsZW5kYXJPcHRpb25zID0ge1xyXG4gICAgICBwbHVnaW5zOiBbXHJcbiAgICAgICAgZGF5R3JpZFBsdWdpbixcclxuICAgICAgICB0aW1lR3JpZFBsdWdpbixcclxuICAgICAgICBsaXN0UGx1Z2luLFxyXG4gICAgICAgIGludGVyYWN0aW9uUGx1Z2luXHJcbiAgICAgIF0sXHJcbiAgICAgIGhlYWRlclRvb2xiYXI6IHtcclxuICAgICAgICBsZWZ0OiAncHJldixuZXh0IHRvZGF5JyxcclxuICAgICAgICBjZW50ZXI6ICd0aXRsZScsXHJcbiAgICAgICAgcmlnaHQ6IHRoaXMuQ2FsZW5kYXJWaWV3cy5zdWJzdHJpbmcoMCwgdGhpcy5DYWxlbmRhclZpZXdzLmxlbmd0aCAtIDEpXHJcbiAgICAgIH0sXHJcbiAgICAgIGxvY2FsZXM6IHRoaXMubG9jYWxlcyxcclxuICAgICAgbG9jYWxlOiB0aGlzLkN1cnJlbnRMYW5ndWFnZSxcclxuICAgICAgaW5pdGlhbFZpZXc6IHRoaXMuQ2FsZW5kYXJWaWV3cy5zcGxpdCgnLCcpWzBdLFxyXG4gICAgICBpbml0aWFsRXZlbnRzOiB0aGlzLmNhbGVuZGFyRXZlbnRzLFxyXG4gICAgICBpbml0aWFsRGF0ZTogdGhpcy5vcHRpb25zLkRlZmF1bHREYXRlLFxyXG4gICAgICB3ZWVrZW5kczogdGhpcy5vcHRpb25zLkFsbG93Q2FsZW5kYXJXZWVrZW5kcyxcclxuICAgICAgZWRpdGFibGU6IHRoaXMub3B0aW9ucy5FdmVudGVkaXRhYmxlLFxyXG4gICAgICBzZWxlY3RhYmxlOiB0aGlzLm9wdGlvbnMuRXZlbnRzZWxlY3RhYmxlLFxyXG4gICAgICAvLyBzZWxlY3RNaXJyb3I6IHRydWUsXHJcbiAgICAgIGRheU1heEV2ZW50czogdGhpcy5vcHRpb25zLmRheU1heEV2ZW50cyxcclxuICAgICAgc2VsZWN0OiB0aGlzLk9uRGF5Q2xpY2tGdW5jdGlvbi5iaW5kKHRoaXMpLFxyXG4gICAgICBldmVudENsaWNrOiB0aGlzLk9uRXZlbnRDbGlja0Z1bmN0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgIC8vIGV2ZW50c1NldDogdGhpcy5oYW5kbGVFdmVudHMuYmluZCh0aGlzKVxyXG4gICAgICAvKiB5b3UgY2FuIHVwZGF0ZSBhIHJlbW90ZSBkYXRhYmFzZSB3aGVuIHRoZXNlIGZpcmU6XHJcbiAgICAgIGV2ZW50QWRkOlxyXG4gICAgICBldmVudENoYW5nZTpcclxuICAgICAgZXZlbnRSZW1vdmU6XHJcbiAgICAgICovXHJcbiAgICB9O1xyXG5cclxuICB9XHJcblxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHJlc2V0RXJyb3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5SZW1vdmVHbG9iYWxFcnJvcigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RXJyb3JWYWxpZGF0aW9uKEVycm9yc2l0ZW06IGFueVtdKSB7XHJcbiAgfVxyXG5cclxuXHJcbiAgT25EYXlDbGlja0Z1bmN0aW9uKGFyZykge1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuT25EYXlDbGlja0Z1bmN0aW9uICE9IG51bGwpIHtcclxuICAgICAgbGV0IERheUNsaWNrRnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMuT25EYXlDbGlja0Z1bmN0aW9uO1xyXG4gICAgICBEYXlDbGlja0Z1bmN0aW9uKGFyZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBPbkV2ZW50Q2xpY2tGdW5jdGlvbihhcmcpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuT25FdmVudENsaWNrRnVuY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICBsZXQgRXZlbnRDbGlja0Z1bmN0aW9uID0gdGhpcy5vcHRpb25zLk9uRXZlbnRDbGlja0Z1bmN0aW9uO1xyXG4gICAgICBFdmVudENsaWNrRnVuY3Rpb24oYXJnLmV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8vIGhhbmRsZURhdGVTZWxlY3Qoc2VsZWN0SW5mbzogRGF0ZVNlbGVjdEFyZykge1xyXG4gIC8vICAgY29uc3QgdGl0bGUgPSBwcm9tcHQoJ1BsZWFzZSBlbnRlciBhIG5ldyB0aXRsZSBmb3IgeW91ciBldmVudCcpO1xyXG4gIC8vICAgY29uc3QgY2FsZW5kYXJBcGkgPSBzZWxlY3RJbmZvLnZpZXcuY2FsZW5kYXI7XHJcblxyXG4gIC8vICAgY2FsZW5kYXJBcGkudW5zZWxlY3QoKTsgLy8gY2xlYXIgZGF0ZSBzZWxlY3Rpb25cclxuXHJcbiAgLy8gICBpZiAodGl0bGUpIHtcclxuICAvLyAgICAgY2FsZW5kYXJBcGkuYWRkRXZlbnQoe1xyXG4gIC8vICAgICAgIGlkOiBcIjFcIixcclxuICAvLyAgICAgICB0aXRsZSxcclxuICAvLyAgICAgICBzdGFydDogc2VsZWN0SW5mby5zdGFydFN0cixcclxuICAvLyAgICAgICBlbmQ6IHNlbGVjdEluZm8uZW5kU3RyLFxyXG4gIC8vICAgICAgIGFsbERheTogc2VsZWN0SW5mby5hbGxEYXlcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBoYW5kbGVFdmVudENsaWNrKGNsaWNrSW5mbzogRXZlbnRDbGlja0FyZykge1xyXG4gIC8vICAgaWYgKGNvbmZpcm0oYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIGV2ZW50ICcke2NsaWNrSW5mby5ldmVudC50aXRsZX0nYCkpIHtcclxuICAvLyAgICAgY2xpY2tJbmZvLmV2ZW50LnJlbW92ZSgpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gaGFuZGxlRXZlbnRzKGV2ZW50czogRXZlbnRBcGlbXSkge1xyXG4gIC8vICAgdGhpcy5jdXJyZW50RXZlbnRzID0gZXZlbnRzO1xyXG4gIC8vIH1cclxuXHJcblxyXG5cclxuXHJcbn1cclxuXHJcblxyXG4iXX0=