@bnsights/bbsf-controls 1.0.87 → 1.0.89

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 (218) hide show
  1. package/README.md +6 -2
  2. package/bnsights-bbsf-controls-1.0.89.tgz +0 -0
  3. package/bnsights-bbsf-controls.d.ts +1 -1
  4. package/bnsights-bbsf-controls.metadata.json +1 -0
  5. package/bundles/bnsights-bbsf-controls.umd.js +9454 -0
  6. package/bundles/bnsights-bbsf-controls.umd.js.map +1 -0
  7. package/esm2015/bnsights-bbsf-controls.js +6 -0
  8. package/esm2015/lib/Shared/Directives/template-name.directive.js +18 -0
  9. package/esm2015/lib/Shared/Pipes/bbsf-date-time.pipe.js +20 -0
  10. package/esm2015/lib/Shared/Pipes/bbsf-date.pipe.js +20 -0
  11. package/esm2015/lib/Shared/components/app-base-component.js +202 -0
  12. package/esm2015/lib/Shared/components/ng-tag-input.js +323 -0
  13. package/esm2015/lib/Shared/default_intl.js +29 -0
  14. package/esm2015/lib/Shared/services/ControlUtility.js +164 -0
  15. package/esm2015/lib/Shared/services/GlobalSettings.service.js +28 -0
  16. package/esm2015/lib/Shared/services/OnPagingFiltersChange.service.js +22 -0
  17. package/esm2015/lib/Shared/services/render-component-service.service.js +30 -0
  18. package/esm2015/lib/Shared/services/validationErrorMassage.service.js +137 -0
  19. package/esm2015/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.js +249 -0
  20. package/esm2015/lib/controls/Calendar/Calendar.component.js +177 -0
  21. package/esm2015/lib/controls/CheckBox/CheckBox.component.js +115 -0
  22. package/esm2015/lib/controls/ConfirmationModal/ConfirmationModal.component.js +139 -0
  23. package/esm2015/lib/controls/DateTimePicker/DateTimePicker.component.js +221 -0
  24. package/esm2015/lib/controls/DropdownList/DropdownList.component.js +179 -0
  25. package/esm2015/lib/controls/FileUplaod/FileUplaod.component.js +451 -0
  26. package/esm2015/lib/controls/Form/Form.component.js +106 -0
  27. package/esm2015/lib/controls/HtmlEditor/HtmlEditor.component.js +223 -0
  28. package/esm2015/lib/controls/ImageUpload/ImageUpload.component.js +347 -0
  29. package/esm2015/lib/controls/MapAutoComplete/MapAutoComplete.component.js +325 -0
  30. package/esm2015/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.js +429 -0
  31. package/esm2015/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.js +430 -0
  32. package/esm2015/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.js +429 -0
  33. package/esm2015/lib/controls/Paging/JwPagination.component.js +129 -0
  34. package/esm2015/lib/controls/Paging/Paging.component.js +312 -0
  35. package/esm2015/lib/controls/Phone/Phone.component.js +124 -0
  36. package/esm2015/lib/controls/ProfileImageUploader/ProfileImageUploader.component.js +349 -0
  37. package/esm2015/lib/controls/RadioButton/RadioButton.component.js +108 -0
  38. package/esm2015/lib/controls/Recaptcha/Recaptcha.component.js +132 -0
  39. package/esm2015/lib/controls/Repeater/repeater/repeater.component.js +117 -0
  40. package/esm2015/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.js +748 -0
  41. package/esm2015/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.js +19 -0
  42. package/esm2015/lib/controls/Repeater/repeater-table/repeater-table.component.js +108 -0
  43. package/esm2015/lib/controls/TagsInput/TagsInput.component.js +269 -0
  44. package/esm2015/lib/controls/TextArea/TextArea.component.js +192 -0
  45. package/esm2015/lib/controls/TextBox/TextBox.component.js +263 -0
  46. package/esm2015/lib/controls/Toggleslide/toggleslide.component.js +84 -0
  47. package/esm2015/lib/controls/bbsf-controls.module.js +239 -0
  48. package/esm2015/lib/controls/page-header-component/page-header-component.component.js +32 -0
  49. package/fesm2015/{bnsights-bbsf-controls.mjs → bnsights-bbsf-controls.js} +1511 -1630
  50. package/fesm2015/bnsights-bbsf-controls.js.map +1 -0
  51. package/lib/Shared/Directives/template-name.directive.d.ts +0 -3
  52. package/lib/Shared/Pipes/bbsf-date-time.pipe.d.ts +0 -3
  53. package/lib/Shared/Pipes/bbsf-date.pipe.d.ts +0 -3
  54. package/lib/Shared/components/app-base-component.d.ts +1 -3
  55. package/lib/Shared/components/ng-tag-input.d.ts +0 -3
  56. package/lib/Shared/default_intl.d.ts +0 -3
  57. package/lib/Shared/services/ControlUtility.d.ts +0 -3
  58. package/lib/Shared/services/GlobalSettings.service.d.ts +0 -3
  59. package/lib/Shared/services/OnPagingFiltersChange.service.d.ts +0 -3
  60. package/lib/Shared/services/render-component-service.service.d.ts +0 -3
  61. package/lib/Shared/services/validationErrorMassage.service.d.ts +0 -3
  62. package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +0 -3
  63. package/lib/controls/Calendar/Calendar.component.d.ts +5 -9
  64. package/lib/controls/CheckBox/CheckBox.component.d.ts +0 -3
  65. package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +0 -3
  66. package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +0 -3
  67. package/lib/controls/DropdownList/DropdownList.component.d.ts +0 -3
  68. package/lib/controls/FileUplaod/FileUplaod.component.d.ts +0 -3
  69. package/lib/controls/Form/Form.component.d.ts +0 -3
  70. package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +0 -3
  71. package/lib/controls/ImageUpload/ImageUpload.component.d.ts +0 -3
  72. package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +0 -3
  73. package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +0 -3
  74. package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +0 -3
  75. package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +0 -3
  76. package/lib/controls/Paging/JwPagination.component.d.ts +0 -3
  77. package/lib/controls/Paging/Paging.component.d.ts +0 -3
  78. package/lib/controls/Phone/Phone.component.d.ts +0 -3
  79. package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +0 -3
  80. package/lib/controls/RadioButton/RadioButton.component.d.ts +0 -3
  81. package/lib/controls/Recaptcha/Recaptcha.component.d.ts +0 -3
  82. package/lib/controls/Repeater/repeater/repeater.component.d.ts +0 -3
  83. package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +0 -3
  84. package/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.d.ts +0 -3
  85. package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +0 -3
  86. package/lib/controls/TagsInput/TagsInput.component.d.ts +0 -3
  87. package/lib/controls/TextArea/TextArea.component.d.ts +0 -3
  88. package/lib/controls/TextBox/TextBox.component.d.ts +0 -3
  89. package/lib/controls/Toggleslide/toggleslide.component.d.ts +0 -3
  90. package/lib/controls/bbsf-controls.module.d.ts +0 -74
  91. package/lib/controls/page-header-component/page-header-component.component.d.ts +0 -3
  92. package/package.json +15 -27
  93. package/bnsights-bbsf-controls-1.0.87.tgz +0 -0
  94. package/esm2020/bnsights-bbsf-controls.mjs +0 -5
  95. package/esm2020/lib/Shared/Directives/template-name.directive.mjs +0 -18
  96. package/esm2020/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +0 -21
  97. package/esm2020/lib/Shared/Pipes/bbsf-date.pipe.mjs +0 -21
  98. package/esm2020/lib/Shared/components/app-base-component.mjs +0 -198
  99. package/esm2020/lib/Shared/components/ng-tag-input.mjs +0 -336
  100. package/esm2020/lib/Shared/default_intl.mjs +0 -29
  101. package/esm2020/lib/Shared/services/ControlUtility.mjs +0 -162
  102. package/esm2020/lib/Shared/services/GlobalSettings.service.mjs +0 -30
  103. package/esm2020/lib/Shared/services/OnPagingFiltersChange.service.mjs +0 -24
  104. package/esm2020/lib/Shared/services/render-component-service.service.mjs +0 -30
  105. package/esm2020/lib/Shared/services/validationErrorMassage.service.mjs +0 -137
  106. package/esm2020/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +0 -245
  107. package/esm2020/lib/controls/Calendar/Calendar.component.mjs +0 -172
  108. package/esm2020/lib/controls/CheckBox/CheckBox.component.mjs +0 -114
  109. package/esm2020/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +0 -136
  110. package/esm2020/lib/controls/DateTimePicker/DateTimePicker.component.mjs +0 -217
  111. package/esm2020/lib/controls/DropdownList/DropdownList.component.mjs +0 -179
  112. package/esm2020/lib/controls/FileUplaod/FileUplaod.component.mjs +0 -453
  113. package/esm2020/lib/controls/Form/Form.component.mjs +0 -101
  114. package/esm2020/lib/controls/HtmlEditor/HtmlEditor.component.mjs +0 -223
  115. package/esm2020/lib/controls/ImageUpload/ImageUpload.component.mjs +0 -350
  116. package/esm2020/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +0 -325
  117. package/esm2020/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +0 -427
  118. package/esm2020/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +0 -427
  119. package/esm2020/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +0 -426
  120. package/esm2020/lib/controls/Paging/JwPagination.component.mjs +0 -156
  121. package/esm2020/lib/controls/Paging/Paging.component.mjs +0 -312
  122. package/esm2020/lib/controls/Phone/Phone.component.mjs +0 -124
  123. package/esm2020/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +0 -354
  124. package/esm2020/lib/controls/RadioButton/RadioButton.component.mjs +0 -106
  125. package/esm2020/lib/controls/Recaptcha/Recaptcha.component.mjs +0 -132
  126. package/esm2020/lib/controls/Repeater/repeater/repeater.component.mjs +0 -125
  127. package/esm2020/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +0 -750
  128. package/esm2020/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +0 -21
  129. package/esm2020/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +0 -108
  130. package/esm2020/lib/controls/TagsInput/TagsInput.component.mjs +0 -268
  131. package/esm2020/lib/controls/TextArea/TextArea.component.mjs +0 -192
  132. package/esm2020/lib/controls/TextBox/TextBox.component.mjs +0 -266
  133. package/esm2020/lib/controls/Toggleslide/toggleslide.component.mjs +0 -84
  134. package/esm2020/lib/controls/bbsf-controls.module.mjs +0 -401
  135. package/esm2020/lib/controls/page-header-component/page-header-component.component.mjs +0 -37
  136. package/fesm2015/bnsights-bbsf-controls.mjs.map +0 -1
  137. package/fesm2020/bnsights-bbsf-controls.mjs +0 -8938
  138. package/fesm2020/bnsights-bbsf-controls.mjs.map +0 -1
  139. /package/{esm2020/lib/Shared/Enums/CalendarView.mjs → esm2015/lib/Shared/Enums/CalendarView.js} +0 -0
  140. /package/{esm2020/lib/Shared/Enums/ControlLayout.mjs → esm2015/lib/Shared/Enums/ControlLayout.js} +0 -0
  141. /package/{esm2020/lib/Shared/Enums/Countries.mjs → esm2015/lib/Shared/Enums/Countries.js} +0 -0
  142. /package/{esm2020/lib/Shared/Enums/Enums.mjs → esm2015/lib/Shared/Enums/Enums.js} +0 -0
  143. /package/{esm2020/lib/Shared/Enums/FileType.mjs → esm2015/lib/Shared/Enums/FileType.js} +0 -0
  144. /package/{esm2020/lib/Shared/Enums/FilterType.mjs → esm2015/lib/Shared/Enums/FilterType.js} +0 -0
  145. /package/{esm2020/lib/Shared/Enums/FontSize.mjs → esm2015/lib/Shared/Enums/FontSize.js} +0 -0
  146. /package/{esm2020/lib/Shared/Enums/ForceDirection.mjs → esm2015/lib/Shared/Enums/ForceDirection.js} +0 -0
  147. /package/{esm2020/lib/Shared/Enums/IconPosition.mjs → esm2015/lib/Shared/Enums/IconPosition.js} +0 -0
  148. /package/{esm2020/lib/Shared/Enums/ImageType.mjs → esm2015/lib/Shared/Enums/ImageType.js} +0 -0
  149. /package/{esm2020/lib/Shared/Enums/InputType.mjs → esm2015/lib/Shared/Enums/InputType.js} +0 -0
  150. /package/{esm2020/lib/Shared/Enums/Insert.mjs → esm2015/lib/Shared/Enums/Insert.js} +0 -0
  151. /package/{esm2020/lib/Shared/Enums/LanguageMode.mjs → esm2015/lib/Shared/Enums/LanguageMode.js} +0 -0
  152. /package/{esm2020/lib/Shared/Enums/LanguageValidation.mjs → esm2015/lib/Shared/Enums/LanguageValidation.js} +0 -0
  153. /package/{esm2020/lib/Shared/Enums/Misc.mjs → esm2015/lib/Shared/Enums/Misc.js} +0 -0
  154. /package/{esm2020/lib/Shared/Enums/PagingActionMode.mjs → esm2015/lib/Shared/Enums/PagingActionMode.js} +0 -0
  155. /package/{esm2020/lib/Shared/Enums/Para.mjs → esm2015/lib/Shared/Enums/Para.js} +0 -0
  156. /package/{esm2020/lib/Shared/Enums/PickerType.mjs → esm2015/lib/Shared/Enums/PickerType.js} +0 -0
  157. /package/{esm2020/lib/Shared/Enums/SelectMode.mjs → esm2015/lib/Shared/Enums/SelectMode.js} +0 -0
  158. /package/{esm2020/lib/Shared/Enums/StartView.mjs → esm2015/lib/Shared/Enums/StartView.js} +0 -0
  159. /package/{esm2020/lib/Shared/Enums/Style.mjs → esm2015/lib/Shared/Enums/Style.js} +0 -0
  160. /package/{esm2020/lib/Shared/Enums/StyleConfirmationMode.mjs → esm2015/lib/Shared/Enums/StyleConfirmationMode.js} +0 -0
  161. /package/{esm2020/lib/Shared/Enums/TagInputView.mjs → esm2015/lib/Shared/Enums/TagInputView.js} +0 -0
  162. /package/{esm2020/lib/Shared/Enums/menu-list-enum.mjs → esm2015/lib/Shared/Enums/menu-list-enum.js} +0 -0
  163. /package/{esm2020/lib/Shared/Models/Attribute.mjs → esm2015/lib/Shared/Models/Attribute.js} +0 -0
  164. /package/{esm2020/lib/Shared/Models/AutocompleteDTO.mjs → esm2015/lib/Shared/Models/AutocompleteDTO.js} +0 -0
  165. /package/{esm2020/lib/Shared/Models/AutocompleteOptions.mjs → esm2015/lib/Shared/Models/AutocompleteOptions.js} +0 -0
  166. /package/{esm2020/lib/Shared/Models/CalendarEventDTO.mjs → esm2015/lib/Shared/Models/CalendarEventDTO.js} +0 -0
  167. /package/{esm2020/lib/Shared/Models/CalendarOptions.mjs → esm2015/lib/Shared/Models/CalendarOptions.js} +0 -0
  168. /package/{esm2020/lib/Shared/Models/CancelDTO.mjs → esm2015/lib/Shared/Models/CancelDTO.js} +0 -0
  169. /package/{esm2020/lib/Shared/Models/CaptchaStyle.mjs → esm2015/lib/Shared/Models/CaptchaStyle.js} +0 -0
  170. /package/{esm2020/lib/Shared/Models/CheckBoxOptions.mjs → esm2015/lib/Shared/Models/CheckBoxOptions.js} +0 -0
  171. /package/{esm2020/lib/Shared/Models/ConfirmationModalOptions.mjs → esm2015/lib/Shared/Models/ConfirmationModalOptions.js} +0 -0
  172. /package/{esm2020/lib/Shared/Models/ControlOptionsBase.mjs → esm2015/lib/Shared/Models/ControlOptionsBase.js} +0 -0
  173. /package/{esm2020/lib/Shared/Models/CustomValidation.mjs → esm2015/lib/Shared/Models/CustomValidation.js} +0 -0
  174. /package/{esm2020/lib/Shared/Models/DropdownListItem.mjs → esm2015/lib/Shared/Models/DropdownListItem.js} +0 -0
  175. /package/{esm2020/lib/Shared/Models/DropdownOptions.mjs → esm2015/lib/Shared/Models/DropdownOptions.js} +0 -0
  176. /package/{esm2020/lib/Shared/Models/EditPersonalImage.mjs → esm2015/lib/Shared/Models/EditPersonalImage.js} +0 -0
  177. /package/{esm2020/lib/Shared/Models/EnglishArabicDTO.mjs → esm2015/lib/Shared/Models/EnglishArabicDTO.js} +0 -0
  178. /package/{esm2020/lib/Shared/Models/FileDTO.mjs → esm2015/lib/Shared/Models/FileDTO.js} +0 -0
  179. /package/{esm2020/lib/Shared/Models/FileUploadModel.mjs → esm2015/lib/Shared/Models/FileUploadModel.js} +0 -0
  180. /package/{esm2020/lib/Shared/Models/FileUploadOptions.mjs → esm2015/lib/Shared/Models/FileUploadOptions.js} +0 -0
  181. /package/{esm2020/lib/Shared/Models/FilterItem.mjs → esm2015/lib/Shared/Models/FilterItem.js} +0 -0
  182. /package/{esm2020/lib/Shared/Models/FormOptions.mjs → esm2015/lib/Shared/Models/FormOptions.js} +0 -0
  183. /package/{esm2020/lib/Shared/Models/HtmlEditorOptions.mjs → esm2015/lib/Shared/Models/HtmlEditorOptions.js} +0 -0
  184. /package/{esm2020/lib/Shared/Models/ImageUploadOptions.mjs → esm2015/lib/Shared/Models/ImageUploadOptions.js} +0 -0
  185. /package/{esm2020/lib/Shared/Models/MapAutoCompleteOptions.mjs → esm2015/lib/Shared/Models/MapAutoCompleteOptions.js} +0 -0
  186. /package/{esm2020/lib/Shared/Models/MapAutocompleteDTO.mjs → esm2015/lib/Shared/Models/MapAutocompleteDTO.js} +0 -0
  187. /package/{esm2020/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs → esm2015/lib/Shared/Models/MultiLingualHtmlEditorOptions.js} +0 -0
  188. /package/{esm2020/lib/Shared/Models/MultiLingualTextAreaOptions.mjs → esm2015/lib/Shared/Models/MultiLingualTextAreaOptions.js} +0 -0
  189. /package/{esm2020/lib/Shared/Models/MultilingualControlOptionsBase.mjs → esm2015/lib/Shared/Models/MultilingualControlOptionsBase.js} +0 -0
  190. /package/{esm2020/lib/Shared/Models/MultilingualTextBoxOptions.mjs → esm2015/lib/Shared/Models/MultilingualTextBoxOptions.js} +0 -0
  191. /package/{esm2020/lib/Shared/Models/MultipleFileUploadModel.mjs → esm2015/lib/Shared/Models/MultipleFileUploadModel.js} +0 -0
  192. /package/{esm2020/lib/Shared/Models/PagingDTO.mjs → esm2015/lib/Shared/Models/PagingDTO.js} +0 -0
  193. /package/{esm2020/lib/Shared/Models/PagingOptions.mjs → esm2015/lib/Shared/Models/PagingOptions.js} +0 -0
  194. /package/{esm2020/lib/Shared/Models/PagingPayload.mjs → esm2015/lib/Shared/Models/PagingPayload.js} +0 -0
  195. /package/{esm2020/lib/Shared/Models/PhoneOptions.mjs → esm2015/lib/Shared/Models/PhoneOptions.js} +0 -0
  196. /package/{esm2020/lib/Shared/Models/ProfileImageUploadOptions.mjs → esm2015/lib/Shared/Models/ProfileImageUploadOptions.js} +0 -0
  197. /package/{esm2020/lib/Shared/Models/ProfilePictureDTO.mjs → esm2015/lib/Shared/Models/ProfilePictureDTO.js} +0 -0
  198. /package/{esm2020/lib/Shared/Models/RadioButtonItem.mjs → esm2015/lib/Shared/Models/RadioButtonItem.js} +0 -0
  199. /package/{esm2020/lib/Shared/Models/RadioButtonOptions.mjs → esm2015/lib/Shared/Models/RadioButtonOptions.js} +0 -0
  200. /package/{esm2020/lib/Shared/Models/RangeNumber.mjs → esm2015/lib/Shared/Models/RangeNumber.js} +0 -0
  201. /package/{esm2020/lib/Shared/Models/Recaptcha.mjs → esm2015/lib/Shared/Models/Recaptcha.js} +0 -0
  202. /package/{esm2020/lib/Shared/Models/RecaptchaOptions.mjs → esm2015/lib/Shared/Models/RecaptchaOptions.js} +0 -0
  203. /package/{esm2020/lib/Shared/Models/RepeaterField.mjs → esm2015/lib/Shared/Models/RepeaterField.js} +0 -0
  204. /package/{esm2020/lib/Shared/Models/RepeaterOptions.mjs → esm2015/lib/Shared/Models/RepeaterOptions.js} +0 -0
  205. /package/{esm2020/lib/Shared/Models/SaveDTO.mjs → esm2015/lib/Shared/Models/SaveDTO.js} +0 -0
  206. /package/{esm2020/lib/Shared/Models/TagsInputDTO.mjs → esm2015/lib/Shared/Models/TagsInputDTO.js} +0 -0
  207. /package/{esm2020/lib/Shared/Models/TagsInputOptions.mjs → esm2015/lib/Shared/Models/TagsInputOptions.js} +0 -0
  208. /package/{esm2020/lib/Shared/Models/TextAreaOptions.mjs → esm2015/lib/Shared/Models/TextAreaOptions.js} +0 -0
  209. /package/{esm2020/lib/Shared/Models/TextBoxOptions.mjs → esm2015/lib/Shared/Models/TextBoxOptions.js} +0 -0
  210. /package/{esm2020/lib/Shared/Models/ToggleslideOptions.mjs → esm2015/lib/Shared/Models/ToggleslideOptions.js} +0 -0
  211. /package/{esm2020/lib/Shared/Models/UploadPersonalImage.mjs → esm2015/lib/Shared/Models/UploadPersonalImage.js} +0 -0
  212. /package/{esm2020/lib/Shared/Models/bread-crumb.mjs → esm2015/lib/Shared/Models/bread-crumb.js} +0 -0
  213. /package/{esm2020/lib/Shared/Models/control-filter-Item.mjs → esm2015/lib/Shared/Models/control-filter-Item.js} +0 -0
  214. /package/{esm2020/lib/Shared/Models/datePickerOptions.mjs → esm2015/lib/Shared/Models/datePickerOptions.js} +0 -0
  215. /package/{esm2020/lib/Shared/Models/filter-options.mjs → esm2015/lib/Shared/Models/filter-options.js} +0 -0
  216. /package/{esm2020/lib/Shared/Models/page-header-options.mjs → esm2015/lib/Shared/Models/page-header-options.js} +0 -0
  217. /package/{esm2020/lib/Shared/config/environment.mjs → esm2015/lib/Shared/config/environment.js} +0 -0
  218. /package/{esm2020/public-api.mjs → esm2015/public-api.js} +0 -0
@@ -0,0 +1,19 @@
1
+ import { Component, Input } from '@angular/core';
2
+ export class RepeaterItemFieldComponent {
3
+ constructor() { }
4
+ ngOnInit() {
5
+ }
6
+ }
7
+ RepeaterItemFieldComponent.decorators = [
8
+ { type: Component, args: [{
9
+ selector: 'repeater-item-field',
10
+ template: "<ng-container *ngFor=\"let template of templates ; index as i\">\r\n <ng-container *ngIf=\"i==filedIndex\" [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext] ={itemIndex:itemIndex,controlIndex:i}></ng-container>\r\n </ng-container>\r\n"
11
+ },] }
12
+ ];
13
+ RepeaterItemFieldComponent.ctorParameters = () => [];
14
+ RepeaterItemFieldComponent.propDecorators = {
15
+ templates: [{ type: Input }],
16
+ filedIndex: [{ type: Input }],
17
+ itemIndex: [{ type: Input }]
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItaXRlbS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvUmVwZWF0ZXIvcmVwZWF0ZXItaXRlbS1maWVsZC9yZXBlYXRlci1pdGVtLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFNdEUsTUFBTSxPQUFPLDBCQUEwQjtJQUtyQyxnQkFBZ0IsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQzs7O1lBWkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLG1RQUFtRDthQUNwRDs7Ozt3QkFFRSxLQUFLO3lCQUNMLEtBQUs7d0JBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmVwZWF0ZXItaXRlbS1maWVsZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcGVhdGVyLWl0ZW0tZmllbGQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXBlYXRlckl0ZW1GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgdGVtcGxhdGVzOiAgQXJyYXk8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgQElucHV0KCkgZmlsZWRJbmRleDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGl0ZW1JbmRleDogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -0,0 +1,108 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { UtilityService } from '@bnsights/bbsf-utilities';
4
+ export class RepeaterTableComponent {
5
+ constructor(utilityService) {
6
+ this.utilityService = utilityService;
7
+ this.items = [];
8
+ this.originalItems = [];
9
+ }
10
+ ngOnInit() {
11
+ this.repeaterGroup = new FormGroup({});
12
+ this.group.addControl(this.options.Name, this.repeaterGroup);
13
+ if (this.options.RepeaterValue.length > 0) {
14
+ this.originalItems = this.options.RepeaterValue;
15
+ for (let index = 0; index < this.options.RepeaterValue.length; index++) {
16
+ this.items.push(index);
17
+ }
18
+ }
19
+ else
20
+ for (let index = 0; index < this.options.MinRequiredItems; index++) {
21
+ this.items.push(index);
22
+ }
23
+ this.repeaterGroup.valueChanges.subscribe((res) => {
24
+ let result = [];
25
+ let rowNumber = [];
26
+ let addItems = [];
27
+ for (const key in this.repeaterGroup.controls) {
28
+ if (Object.prototype.hasOwnProperty.call(this.repeaterGroup.controls, key)) {
29
+ const keySplitArr = key.split('.');
30
+ let item = {
31
+ [keySplitArr[1]]: { [keySplitArr[0]]: this.group.controls[this.options.Name].value[key] }
32
+ };
33
+ addItems.push(item);
34
+ if (!rowNumber.includes(keySplitArr[1]))
35
+ rowNumber.push(keySplitArr[1]);
36
+ }
37
+ }
38
+ for (let index = 0; index < rowNumber.length; index++) {
39
+ const row = rowNumber[index];
40
+ let addObject = {};
41
+ let filteredElements = addItems.filter(item => item[row]);
42
+ for (let index = 0; index < filteredElements.length; index++) {
43
+ const filteredElement = filteredElements[index];
44
+ for (const key in filteredElement) {
45
+ if (Object.prototype.hasOwnProperty.call(filteredElement, key)) {
46
+ const element = filteredElement[key];
47
+ for (const key in element) {
48
+ if (Object.prototype.hasOwnProperty.call(element, key)) {
49
+ const value = element[key];
50
+ addObject[key] = value;
51
+ }
52
+ }
53
+ }
54
+ }
55
+ }
56
+ result.push(addObject);
57
+ }
58
+ this.options.RepeaterValue = result;
59
+ });
60
+ }
61
+ deleteItem(Index) {
62
+ if (this.items.length == this.options.MinRequiredItems && this.options.IsRequired)
63
+ return;
64
+ let deletedControls = [];
65
+ let controlNames = this.options.RepeaterStructure.map(e => e.ControlOptions.Name);
66
+ for (const key in this.repeaterGroup.controls) {
67
+ if (Object.prototype.hasOwnProperty.call(this.repeaterGroup.controls, key)) {
68
+ for (let index = 0; index < controlNames.length; index++) {
69
+ const element = controlNames[index];
70
+ const keySplitArr = key.split('.');
71
+ if (keySplitArr[0] + keySplitArr[1] == `${element}${Index}`) {
72
+ const element = this.repeaterGroup.controls[key];
73
+ deletedControls.push({ [key]: element });
74
+ }
75
+ }
76
+ }
77
+ }
78
+ for (let index = 0; index < deletedControls.length; index++) {
79
+ const element = deletedControls[index];
80
+ for (const key in element) {
81
+ if (Object.prototype.hasOwnProperty.call(element, key)) {
82
+ this.repeaterGroup.removeControl(key);
83
+ }
84
+ }
85
+ }
86
+ this.items = this.items.filter((res) => res != this.items[Index]);
87
+ }
88
+ addItem() {
89
+ if (this.items.length == 0)
90
+ this.items.push(this.items.length);
91
+ else
92
+ this.items.push(this.items[this.items.length - 1] + 1);
93
+ }
94
+ }
95
+ RepeaterTableComponent.decorators = [
96
+ { type: Component, args: [{
97
+ selector: 'BBSF-repeater-table',
98
+ template: "<div class=\"form-group bbsf-control bbsf-repeater\">\r\n <!--table-->\r\n <div class=\"table-responsive\">\r\n <table class=\"bbsf-repeater-table table {{options.RepeaterTableExtraClasses}}\">\r\n <thead class=\"table-head\">\r\n <tr class=\"{{options.RepeaterTableRowExtraClasses}}\">\r\n <th *ngFor=\"let item of options.RepeaterStructure\" [hidden]=\"item.IsHiddenInput\">{{item.HeaderTitle}}</th>\r\n <th *ngIf=\"!options.DisableDeleteButton\" class=\"text-center\">{{utilityService.getResourceValue(options.ActionLabelKey)}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"table-body\">\r\n <tr *ngFor=\"let item of items ; index as i\">\r\n <td *ngFor=\"let RepeaterField of options.RepeaterStructure ; index as r\" [hidden]=\"RepeaterField.IsHiddenInput\">\r\n <repeater-field-builder [RepeaterField]=\"RepeaterField\" [itemNumber]=\"i\"\r\n [itemsValue]=\"originalItems\" [controlNumber]=\"r\" [group]=\"repeaterGroup\">\r\n </repeater-field-builder>\r\n </td>\r\n <td *ngIf=\"!options.DisableDeleteButton\" class=\"td-delete\">\r\n <button class=\"{{options.DeleteButtonExtraClasses}} btn btn-icon btn-sm btn-danger\" type=\"button\" (click)=\"deleteItem(i)\"\r\n [disabled]=\"(items.length ==options.MinRequiredItems&&options.IsRequired)\">\r\n <span [innerHTML]=\"options.DeleteButtonText\"></span>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--add button-->\r\n <div class=\"repeater-add-btn\" *ngIf=\"!options.DisableAddButton\">\r\n <button class=\"{{options.AddButtonExtraClasses}} btn btn-sm btn-brand\" type=\"button\" (click)=\"addItem()\">\r\n <span [innerHTML]=\"options.AddButtonText\"></span>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n\r\n"
99
+ },] }
100
+ ];
101
+ RepeaterTableComponent.ctorParameters = () => [
102
+ { type: UtilityService }
103
+ ];
104
+ RepeaterTableComponent.propDecorators = {
105
+ group: [{ type: Input }],
106
+ options: [{ type: Input }]
107
+ };
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL1JlcGVhdGVyL3JlcGVhdGVyLXRhYmxlL3JlcGVhdGVyLXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBMkQsTUFBTSxlQUFlLENBQUM7QUFDMUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU8xRCxNQUFNLE9BQU8sc0JBQXNCO0lBT2pDLFlBQW1CLGNBQTZCO1FBQTdCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBSmhELFVBQUssR0FBYSxFQUFFLENBQUE7UUFFcEIsa0JBQWEsR0FBUSxFQUFFLENBQUM7SUFFNEIsQ0FBQztJQUVyRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0QsSUFBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUN0QztZQUNFLElBQUksQ0FBQyxhQUFhLEdBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDL0MsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDdEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FB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LElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMzRCxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7Z0JBQ3pCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUE7aUJBQ3RDO2FBQ0Y7U0FDRjtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzs7WUFFbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDOzs7WUF0R0EsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLHk1REFBOEM7YUFDL0M7OztZQU5RLGNBQWM7OztvQkFRcEIsS0FBSztzQkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFJlcGVhdGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9Nb2RlbHMvUmVwZWF0ZXJPcHRpb25zJztcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnQkJTRi1yZXBlYXRlci10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcGVhdGVyLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcGVhdGVyVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQgeyBcclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFJlcGVhdGVyT3B0aW9ucztcclxuICBpdGVtczogbnVtYmVyW10gPSBbXVxyXG4gIHJlcGVhdGVyR3JvdXA6IEZvcm1Hcm91cDtcclxuICBvcmlnaW5hbEl0ZW1zOmFueSBbXT1bXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHV0aWxpdHlTZXJ2aWNlOlV0aWxpdHlTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcGVhdGVyR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgdGhpcy5yZXBlYXRlckdyb3VwKTtcclxuICAgIGlmKHRoaXMub3B0aW9ucy5SZXBlYXRlclZhbHVlLmxlbmd0aD4wKVxyXG4gICAge1xyXG4gICAgICB0aGlzLm9yaWdpbmFsSXRlbXM9IHRoaXMub3B0aW9ucy5SZXBlYXRlclZhbHVlO1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLlJlcGVhdGVyVmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICBcclxuICAgIGVsc2VcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm9wdGlvbnMuTWluUmVxdWlyZWRJdGVtczsgaW5kZXgrKykge1xyXG4gICAgICB0aGlzLml0ZW1zLnB1c2goaW5kZXgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXBlYXRlckdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICBsZXQgcmVzdWx0ID0gW107XHJcbiAgICAgIGxldCByb3dOdW1iZXIgPSBbXTtcclxuICAgICAgbGV0IGFkZEl0ZW1zID0gW107XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucmVwZWF0ZXJHcm91cC5jb250cm9scykge1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5yZXBlYXRlckdyb3VwLmNvbnRyb2xzLCBrZXkpKSB7XHJcbiAgICAgICAgICBjb25zdCBrZXlTcGxpdEFyciA9IGtleS5zcGxpdCgnLicpXHJcbiAgICAgICAgICBsZXQgaXRlbSA9IHtcclxuICAgICAgICAgICAgW2tleVNwbGl0QXJyWzFdXTogeyBba2V5U3BsaXRBcnJbMF1dOiB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMub3B0aW9ucy5OYW1lXS52YWx1ZVtrZXldIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGFkZEl0ZW1zLnB1c2goaXRlbSlcclxuICAgICAgICAgIGlmICghcm93TnVtYmVyLmluY2x1ZGVzKGtleVNwbGl0QXJyWzFdKSlcclxuICAgICAgICAgICAgcm93TnVtYmVyLnB1c2goa2V5U3BsaXRBcnJbMV0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByb3dOdW1iZXIubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gcm93TnVtYmVyW2luZGV4XTtcclxuICAgICAgICBsZXQgYWRkT2JqZWN0ID0ge31cclxuICAgICAgICBsZXQgZmlsdGVyZWRFbGVtZW50cyA9IGFkZEl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW1bcm93XSlcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZmlsdGVyZWRFbGVtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkRWxlbWVudCA9IGZpbHRlcmVkRWxlbWVudHNbaW5kZXhdO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZmlsdGVyZWRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZmlsdGVyZWRFbGVtZW50LCBrZXkpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGZpbHRlcmVkRWxlbWVudFtrZXldO1xyXG4gICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZWxlbWVudCwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGVsZW1lbnRba2V5XTtcclxuICAgICAgICAgICAgICAgICAgYWRkT2JqZWN0W2tleV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQucHVzaChhZGRPYmplY3QpXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcHRpb25zLlJlcGVhdGVyVmFsdWUgPSByZXN1bHQ7XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIGRlbGV0ZUl0ZW0oSW5kZXgpIHtcclxuICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSB0aGlzLm9wdGlvbnMuTWluUmVxdWlyZWRJdGVtcyAmJiB0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgbGV0IGRlbGV0ZWRDb250cm9sczogYW55W10gPSBbXVxyXG4gICAgbGV0IGNvbnRyb2xOYW1lcyA9IHRoaXMub3B0aW9ucy5SZXBlYXRlclN0cnVjdHVyZS5tYXAoZSA9PiBlLkNvbnRyb2xPcHRpb25zLk5hbWUpXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnJlcGVhdGVyR3JvdXAuY29udHJvbHMpIHtcclxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnJlcGVhdGVyR3JvdXAuY29udHJvbHMsIGtleSkpIHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY29udHJvbE5hbWVzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNvbnRyb2xOYW1lc1tpbmRleF07XHJcbiAgICAgICAgICBjb25zdCBrZXlTcGxpdEFyciA9IGtleS5zcGxpdCgnLicpXHJcbiAgICAgICAgICBpZiAoa2V5U3BsaXRBcnJbMF0gKyBrZXlTcGxpdEFyclsxXSA9PSBgJHtlbGVtZW50fSR7SW5kZXh9YCkge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5yZXBlYXRlckdyb3VwLmNvbnRyb2xzW2tleV07XHJcbiAgICAgICAgICAgIGRlbGV0ZWRDb250cm9scy5wdXNoKHsgW2tleV06IGVsZW1lbnQgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkZWxldGVkQ29udHJvbHMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkZWxldGVkQ29udHJvbHNbaW5kZXhdO1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlbGVtZW50LCBrZXkpKSB7XHJcbiAgICAgICAgICB0aGlzLnJlcGVhdGVyR3JvdXAucmVtb3ZlQ29udHJvbChrZXkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChyZXMpID0+IHJlcyAhPSB0aGlzLml0ZW1zW0luZGV4XSlcclxuICB9XHJcblxyXG4gIGFkZEl0ZW0oKSB7XHJcbiAgICBpZih0aGlzLml0ZW1zLmxlbmd0aD09MClcclxuICAgIHRoaXMuaXRlbXMucHVzaCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICBlbHNlXHJcbiAgICB0aGlzLml0ZW1zLnB1c2godGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aC0xXSsxKTtcclxufVxyXG5cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,269 @@
1
+ import { Component, Input, Optional, Output, EventEmitter, ViewChild } from '@angular/core';
2
+ import { FormControl, Validators, FormGroup, ControlContainer, FormGroupDirective } from '@angular/forms';
3
+ import { ControlUtility } from '../../Shared/services/ControlUtility';
4
+ import { HttpClient } from '@angular/common/http';
5
+ import { EMPTY } from 'rxjs';
6
+ import { ControlValidationService, RequestHandlerService, RequestOptionsModel, UtilityService } from '@bnsights/bbsf-utilities';
7
+ import { GlobalSettings } from '../../Shared/services/GlobalSettings.service';
8
+ export class TagsInputComponent {
9
+ // tslint:disable-next-line: max-line-length
10
+ constructor(http, controlUtility, requestHandlerService, controlContainer, TagsInputControlHost, UtilityService, controlValidationService, globalSettings) {
11
+ this.http = http;
12
+ this.controlUtility = controlUtility;
13
+ this.requestHandlerService = requestHandlerService;
14
+ this.controlContainer = controlContainer;
15
+ this.TagsInputControlHost = TagsInputControlHost;
16
+ this.UtilityService = UtilityService;
17
+ this.controlValidationService = controlValidationService;
18
+ this.globalSettings = globalSettings;
19
+ this.OnChange = new EventEmitter();
20
+ // TagInputControl: AbstractControl;
21
+ this.SelectedId = [];
22
+ this.tags = [];
23
+ this.NewSelectionValidationKey = "";
24
+ this.markAllAsTouched = false;
25
+ this.validationRules = [];
26
+ this.validationRulesasync = [];
27
+ this.SearchResultHasItems = false;
28
+ this.resetError = () => {
29
+ this.controlValidationService.RemoveGlobalError();
30
+ };
31
+ //External Method
32
+ this.RemoveRequiredValidation = () => {
33
+ this.controlUtility.RemoveRequiredValidation(this.TagsFormControl, this.validationRules, this.options);
34
+ };
35
+ //External Method
36
+ this.AddRequiredValidation = () => {
37
+ this.controlUtility.AddRequiredValidation(this.TagsFormControl, this.validationRules, this.options);
38
+ };
39
+ //External Method
40
+ this.RemoveCustomValidation = (CustomValidation) => {
41
+ this.controlUtility.RemoveCustomValidation(this.TagsFormControl, this.validationRules, CustomValidation);
42
+ };
43
+ //External Method
44
+ this.AddCustomValidation = (CustomValidation) => {
45
+ this.controlUtility.AddCustomValidation(this.TagsFormControl, this.validationRules, CustomValidation);
46
+ };
47
+ //External Method
48
+ this.IsValid = () => {
49
+ this.controlUtility.IsValid(this.TagsFormControl);
50
+ };
51
+ TagsInputComponent.controlContainerstatic = this.controlContainer;
52
+ }
53
+ static showErrorOfInputs(errors) {
54
+ const controlContainerstatic = TagsInputComponent.controlContainerstatic;
55
+ const formGroup = controlContainerstatic.control;
56
+ for (const key in errors) {
57
+ if (errors.hasOwnProperty(key)) {
58
+ for (const iterator of errors[key]) {
59
+ const formControl = formGroup.get(key);
60
+ formControl.setErrors({ "FluentApi": iterator });
61
+ formControl.markAsTouched();
62
+ }
63
+ }
64
+ }
65
+ }
66
+ ngOnDestroy() {
67
+ if (this.changeValueSubscription)
68
+ this.changeValueSubscription.unsubscribe();
69
+ }
70
+ ngOnInit() {
71
+ this.textDir = this.options.ForceDirection == 2 ? 'rtl' : 'ltr';
72
+ this.controlValidationService.isCreatedBefor = false;
73
+ this.options.DatasourceItemText = this.options.DatasourceItemText.toLowerCase();
74
+ this.TagsFormGroup = new FormGroup({});
75
+ ;
76
+ this.TagsFormGroup.addControl("tags", new FormControl(''));
77
+ this.TagsFormControl = this.TagsFormGroup.controls["tags"]; // new FormControl('',validationRules);
78
+ this.group.addControl(this.options.Name, this.TagsFormControl);
79
+ if (!this.options.ViewType)
80
+ this.options.ViewType = this.globalSettings.ViewType;
81
+ if (this.options.LabelKey != null && this.options.LabelKey != "")
82
+ this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
83
+ if (!this.options.NoResultText)
84
+ this.options.NoResultText = this.UtilityService.getResourceValue("NoItemsMatch");
85
+ // this.group.addControl(this.options.Name, new FormControl(''));
86
+ // this.TagInputControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
87
+ this.TagsFormControl.setValue(this.options.Value);
88
+ if (this.options.IsRequired) {
89
+ this.validationRules.push(Validators.required);
90
+ }
91
+ if (this.options.CustomValidation.length > 0) {
92
+ let Validations = this.options.CustomValidation;
93
+ for (let index = 0; index < Validations.length; index++) {
94
+ const Validation = Validations[index];
95
+ this.validationRules.push(Validation.functionBody);
96
+ }
97
+ }
98
+ this.TagsFormControl.setValidators(this.validationRules);
99
+ this.TagsFormControl.setAsyncValidators(this.validationRulesasync);
100
+ if (this.options.IsDisabled) {
101
+ this.TagsFormControl.disable();
102
+ }
103
+ if (this.options.Value != undefined && this.options.Value.length > 0) {
104
+ for (let index = 0; index < this.options.Value.length; index++) {
105
+ const element = this.options.Value[index];
106
+ this.SelectedId.push(element.id);
107
+ }
108
+ this.tags = this.options.Value;
109
+ this.TagsFormControl.setValue(this.options.Value);
110
+ }
111
+ this.TagsInputControlHost.ngSubmit.subscribe((value) => {
112
+ this.group.markAllAsTouched();
113
+ this.markAllAsTouched = true;
114
+ });
115
+ //Check for changing in value
116
+ this.changeValueSubscription = this.TagsFormControl.valueChanges.subscribe(c => {
117
+ var _a;
118
+ this.tags = this.TagsFormControl.value;
119
+ this.SelectedId = (_a = this.tags) === null || _a === void 0 ? void 0 : _a.filter(item => item.id).map(item => item.id);
120
+ if (this.tags == null) {
121
+ this.SearchKey.selected = "";
122
+ this.tags = [];
123
+ this.TagsFormControl.setValue([]);
124
+ }
125
+ });
126
+ }
127
+ ngAfterViewInit() {
128
+ if (this.options.AttributeList != null) {
129
+ var element = document.getElementById(this.options.Name);
130
+ for (let index = 0; index < this.options.AttributeList.length; index++) {
131
+ element.setAttribute(this.options.AttributeList[index].Key, this.options.AttributeList[index].value);
132
+ }
133
+ }
134
+ let inputElement = document.getElementById(this.options.Name).getElementsByTagName("input")[0];
135
+ inputElement.setAttribute("autocomplete", "off");
136
+ }
137
+ showGlobalError() {
138
+ this.controlUtility.showGlobalError();
139
+ }
140
+ getErrorValidation(ErrorList) {
141
+ if (this.markAllAsTouched && this.group.invalid) {
142
+ this.showGlobalError();
143
+ this.markAllAsTouched = false;
144
+ }
145
+ return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
146
+ }
147
+ copyInputMessage(inputElement) {
148
+ this.controlUtility.CopyInputMessage(inputElement);
149
+ }
150
+ searchFunctionFactory(Text) {
151
+ //If no text then return empty observable
152
+ if (!Text)
153
+ return EMPTY;
154
+ let Url = `${this.options.ActionURL}?${this.options.QueryParamName}=${encodeURIComponent(Text)}&${this.options.SelectedItemsParamName}=${this.SelectedId}`;
155
+ if (this.options.ExtraFilters)
156
+ Url = Url + `&${this.options.ExtraFilters}`;
157
+ let requestOptionsModel = new RequestOptionsModel();
158
+ requestOptionsModel.disableBlockUI = true;
159
+ requestOptionsModel.disableSuccessNotification = true;
160
+ let Model = this.requestHandlerService.get(Url, null, null, requestOptionsModel);
161
+ return Model;
162
+ }
163
+ AddTag(event, key) {
164
+ var _a, _b;
165
+ //Check if input is yab press
166
+ if (event.key === "Tab")
167
+ return;
168
+ //Check if input is enter press
169
+ if (this.IsNoMatch == true && event.key == "Enter" && this.options.AllowNewSelection && key.selected) {
170
+ if (!(this.tags.length >= this.options.MaxNumberTags)) {
171
+ this.tags.push({ name: key.selected });
172
+ this.group.get(this.options.Name).setValue(this.tags);
173
+ this.group.get(this.options.Name).markAllAsTouched();
174
+ this.group.updateValueAndValidity();
175
+ if (this.group.get(this.options.Name).valid) {
176
+ key.selected = null;
177
+ return;
178
+ }
179
+ else
180
+ this.tags.pop();
181
+ }
182
+ }
183
+ //Check if input is charachter
184
+ else if (String.fromCharCode(event.keyCode).match(/(\w|\s)/g)) {
185
+ if (this.IsNoMatch && !this.options.AllowNewSelection && key.selected) {
186
+ this.TagsFormControl.setErrors({ "errorMassage": this.options.NoResultText });
187
+ this.TagsFormControl.markAsTouched();
188
+ }
189
+ else if (this.IsNoMatch == false && this.options.AllowNewSelection == false) {
190
+ this.TagsFormControl.clearValidators();
191
+ this.TagsFormControl.updateValueAndValidity();
192
+ }
193
+ }
194
+ //Remove unmatched error incase of deleting search value
195
+ else if (event.key === "Backspace" && ((_a = key.selected) === null || _a === void 0 ? void 0 : _a.length) <= 1 && this.TagsFormControl.hasError('errorMassage')) {
196
+ this.TagsFormControl.setErrors({ "errorMassage": null });
197
+ this.TagsFormControl.updateValueAndValidity();
198
+ if (((_b = this.SelectedId) === null || _b === void 0 ? void 0 : _b.length) == 0 && this.options.IsRequired) {
199
+ this.TagsFormControl.setErrors({ required: "" });
200
+ this.TagsFormControl.markAsTouched();
201
+ }
202
+ }
203
+ }
204
+ onTagsChanged(result) {
205
+ //console.log(this.tags)
206
+ if (result["change"] == "add") {
207
+ this.SelectedId.push(result.tag.id);
208
+ }
209
+ if (result["change"] == "remove") {
210
+ this.SelectedId = this.SelectedId.filter((item) => item != result.tag.id);
211
+ if (this.SelectedId.length == 0 && this.options.IsRequired == true) {
212
+ this.TagsFormControl.setErrors({ required: "" });
213
+ this.TagsFormControl.markAsTouched();
214
+ this.TagsFormControl.invalid;
215
+ }
216
+ }
217
+ let originalValue = this.TagsFormControl.value.map(function (a) { return a.id; });
218
+ if (this.options.PatchFunction && this.options.PatchPath && this.TagsFormControl.valid) {
219
+ this.controlUtility.patchControlValue(originalValue, this.options.PatchFunction, this.options.PatchPath);
220
+ }
221
+ this.options.Value = this.tags;
222
+ this.group.get(this.options.Name).setValue(this.tags);
223
+ this.TagsFormControl.updateValueAndValidity();
224
+ this.group.updateValueAndValidity();
225
+ this.OnChange.emit(originalValue);
226
+ }
227
+ onNoOptionsMatch(event) {
228
+ this.IsNoMatch = event;
229
+ }
230
+ onTagsInputBlur(SearchKey) {
231
+ if (SearchKey.selected && this.options.AllowNewSelection && this.IsNoMatch && this.tags.length < this.options.MaxNumberTags) {
232
+ this.tags.push({ name: SearchKey.selected });
233
+ this.group.get(this.options.Name).setValue(this.tags);
234
+ this.group.get(this.options.Name).markAllAsTouched();
235
+ this.group.updateValueAndValidity();
236
+ if (this.group.get(this.options.Name).valid) {
237
+ SearchKey.selected = null;
238
+ return;
239
+ }
240
+ else
241
+ this.tags.pop();
242
+ }
243
+ }
244
+ }
245
+ TagsInputComponent.controlContainerstatic = null;
246
+ TagsInputComponent.decorators = [
247
+ { type: Component, args: [{
248
+ // tslint:disable-next-line: component-selector
249
+ selector: 'BBSF-TagsInput',
250
+ template: "\r\n<div [formGroup]=\"group\">\r\n <div class=\"form-group bbsf-control bbsf-tags-input\" [formGroup]=\"TagsFormGroup\">\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)\" class=\"text-danger\">*</span>\r\n </label>\r\n <!--input-->\r\n <div class=\"bbsf-input-container\">\r\n <b-tags-input type=\"text\" class=\"form-control {{options.ExtraClasses}}\"\r\n [dir]=\"textDir\" [disabled]=\"options.IsDisabled\" aria-describedby=\"email-error\"\r\n aria-invalid=\"true\" formControlName=\"tags\"\r\n [class.is-invalid]=\"TagsFormControl.invalid && TagsFormControl.touched\" placeholder=\"{{options.Placeholder}}\"\r\n id=\"{{options.Name}}\" (onTagsChanged)=\"onTagsChanged($event)\" [(ngModel)]=\"tags\"\r\n [removeLastOnBackspace]=\"options.RemoveLastOnBackspace\" (onNoOptionsMatch)=\"onNoOptionsMatch($event)\"\r\n [options]=\"searchFunctionFactory(SearchKey.selected)\" #SearchKey\r\n [scrollableOptions]=\"options.ScrollableOptions\" [scrollableOptionsInView]=\"options.MaxSearchResultsCount\"\r\n (keydown)=\"AddTag($event,SearchKey)\" [ViewMode]=\"options.TagInputMode\"\r\n [maxTags]=\"options.MaxNumberTags\" [minLengthBeforeOptions]=\"options.MinSearchLength\"\r\n [showDescription]=\"options.ShowDescription\" [defaultImageURL]=\"options.DefaultImgUrl\" name=\"tags\"\r\n (onBlurInput)=\"onTagsInputBlur(SearchKey)\">\r\n </b-tags-input>\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 <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(TagsFormControl.invalid && TagsFormControl.touched)\">\r\n {{getErrorValidation(TagsFormControl.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</div>\r\n"
251
+ },] }
252
+ ];
253
+ TagsInputComponent.ctorParameters = () => [
254
+ { type: HttpClient },
255
+ { type: ControlUtility },
256
+ { type: RequestHandlerService },
257
+ { type: ControlContainer, decorators: [{ type: Optional }] },
258
+ { type: FormGroupDirective },
259
+ { type: UtilityService },
260
+ { type: ControlValidationService },
261
+ { type: GlobalSettings }
262
+ ];
263
+ TagsInputComponent.propDecorators = {
264
+ group: [{ type: Input }],
265
+ options: [{ type: Input }],
266
+ OnChange: [{ type: Output }],
267
+ SearchKey: [{ type: ViewChild, args: ['SearchKey', { static: false },] }]
268
+ };
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFnc0lucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9UYWdzSW5wdXQvVGFnc0lucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBVyxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBcUQsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQzVLLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBbUIsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxLQUFLLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFROUUsTUFBTSxPQUFPLGtCQUFrQjtJQUU3Qiw0Q0FBNEM7SUFDNUMsWUFBb0IsSUFBZ0IsRUFBVSxjQUE4QixFQUFVLHFCQUE0QyxFQUFzQixnQkFBa0MsRUFBUyxvQkFBd0MsRUFDak8sY0FBOEIsRUFBVSx3QkFBa0QsRUFDMUYsY0FBOEI7UUFGcEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFBc0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUFTLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FB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QUFDLENBQUMsS0FBSyxFQUFFO2dCQUMzQyxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDMUIsT0FBTzthQUNSOztnQkFFQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQzs7QUF6UU0seUNBQXNCLEdBQUcsSUFBSSxDQUFDOztZQU50QyxTQUFTLFNBQUM7Z0JBQ1QsK0NBQStDO2dCQUMvQyxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixrK0VBQXlDO2FBQzFDOzs7WUFWUSxVQUFVO1lBRlYsY0FBYztZQUlZLHFCQUFxQjtZQUxNLGdCQUFnQix1QkFpQnlELFFBQVE7WUFqQi9ELGtCQUFrQjtZQUtuQixjQUFjO1lBQXBGLHdCQUF3QjtZQUN4QixjQUFjOzs7b0JBaUJwQixLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsTUFBTTt3QkFDTixTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgRG9DaGVjaywgT3B0aW9uYWwsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgU2ltcGxlQ2hhbmdlLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMsIEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtR3JvdXBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbnRyb2xVdGlsaXR5IH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0NvbnRyb2xVdGlsaXR5JztcclxuaW1wb3J0IHsgVGFnc0lucHV0T3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvVGFnc0lucHV0T3B0aW9ucyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLCBSZXF1ZXN0SGFuZGxlclNlcnZpY2UsIFJlcXVlc3RPcHRpb25zTW9kZWwsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvR2xvYmFsU2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICdCQlNGLVRhZ3NJbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL1RhZ3NJbnB1dC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhZ3NJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IG51bGw7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgY29udHJvbFV0aWxpdHk6IENvbnRyb2xVdGlsaXR5LCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLCBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsIHB1YmxpYyBUYWdzSW5wdXRDb250cm9sSG9zdDogRm9ybUdyb3VwRGlyZWN0aXZlLFxyXG4gICAgcHJpdmF0ZSBVdGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlOiBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdsb2JhbFNldHRpbmdzOiBHbG9iYWxTZXR0aW5ncykge1xyXG4gICAgVGFnc0lucHV0Q29tcG9uZW50LmNvbnRyb2xDb250YWluZXJzdGF0aWMgPSB0aGlzLmNvbnRyb2xDb250YWluZXI7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFRhZ3NJbnB1dE9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIE9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ1NlYXJjaEtleScsIHsgc3RhdGljOiBmYWxzZSB9KSBTZWFyY2hLZXk6IGFueTtcclxuXHJcbiAgLy8gVGFnSW5wdXRDb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgU2VsZWN0ZWRJZDogYW55W10gPSBbXVxyXG4gIHRhZ3MgPSBbXTtcclxuICBOZXdTZWxlY3Rpb25WYWxpZGF0aW9uS2V5OiBzdHJpbmcgPSBcIlwiO1xyXG4gIFRhZ3NGb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxuICBUYWdzRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbFxyXG4gIElzTm9NYXRjaDogYW55O1xyXG4gIG1hcmtBbGxBc1RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB2YWxpZGF0aW9uUnVsZXMgPSBbXTtcclxuICB2YWxpZGF0aW9uUnVsZXNhc3luYyA9IFtdO1xyXG4gIGNoYW5nZVZhbHVlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgU2VhcmNoUmVzdWx0SGFzSXRlbXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0ZXh0RGlyO1xyXG4gIHN0YXRpYyBzaG93RXJyb3JPZklucHV0cyhlcnJvcnM6IGFueSkge1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2xDb250YWluZXJzdGF0aWMgPSBUYWdzSW5wdXRDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYztcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2xDb250YWluZXJzdGF0aWMuY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBlcnJvcnMpIHtcclxuICAgICAgaWYgKGVycm9ycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVyYXRvciBvZiBlcnJvcnNba2V5XSkge1xyXG4gICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGtleSkgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgICBmb3JtQ29udHJvbC5zZXRFcnJvcnMoeyBcIkZsdWVudEFwaVwiOiBpdGVyYXRvciB9KTtcclxuICAgICAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGFuZ2VWYWx1ZVN1YnNjcmlwdGlvbilcclxuICAgICAgdGhpcy5jaGFuZ2VWYWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudGV4dERpcj10aGlzLm9wdGlvbnMuRm9yY2VEaXJlY3Rpb249PTI/J3J0bCc6J2x0cic7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5pc0NyZWF0ZWRCZWZvciA9IGZhbHNlXHJcblxyXG4gICAgdGhpcy5vcHRpb25zLkRhdGFzb3VyY2VJdGVtVGV4dCA9IHRoaXMub3B0aW9ucy5EYXRhc291cmNlSXRlbVRleHQudG9Mb3dlckNhc2UoKTtcclxuICAgIHRoaXMuVGFnc0Zvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pOztcclxuICAgIHRoaXMuVGFnc0Zvcm1Hcm91cC5hZGRDb250cm9sKFwidGFnc1wiLCBuZXcgRm9ybUNvbnRyb2woJycpKTtcclxuICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sID0gdGhpcy5UYWdzRm9ybUdyb3VwLmNvbnRyb2xzW1widGFnc1wiXTsgLy8gIG5ldyBGb3JtQ29udHJvbCgnJyx2YWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5ncm91cC5hZGRDb250cm9sKHRoaXMub3B0aW9ucy5OYW1lLCB0aGlzLlRhZ3NGb3JtQ29udHJvbCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuVmlld1R5cGUpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5WaWV3VHlwZSA9IHRoaXMuZ2xvYmFsU2V0dGluZ3MuVmlld1R5cGU7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSBcIlwiKVxyXG4gICAgICB0aGlzLm9wdGlvbnMuTGFiZWxWYWx1ZSA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSh0aGlzLm9wdGlvbnMuTGFiZWxLZXkpO1xyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLk5vUmVzdWx0VGV4dClcclxuICAgICAgdGhpcy5vcHRpb25zLk5vUmVzdWx0VGV4dCA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5vSXRlbXNNYXRjaFwiKTtcclxuXHJcbiAgICAvLyB0aGlzLmdyb3VwLmFkZENvbnRyb2wodGhpcy5vcHRpb25zLk5hbWUsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xyXG4gICAgLy8gdGhpcy5UYWdJbnB1dENvbnRyb2wgPSB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMub3B0aW9ucy5OYW1lXTsgLy8gIG5ldyBGb3JtQ29udHJvbCgnJyx2YWxpZGF0aW9uUnVsZXMpO1xyXG5cclxuICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLnNldFZhbHVlKHRoaXMub3B0aW9ucy5WYWx1ZSk7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5DdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IFZhbGlkYXRpb25zID0gdGhpcy5vcHRpb25zLkN1c3RvbVZhbGlkYXRpb25cclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFZhbGlkYXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IFZhbGlkYXRpb24gPSBWYWxpZGF0aW9uc1tpbmRleF07XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0aW9uLmZ1bmN0aW9uQm9keSk7XHJcbiAgICAgIH1cclxuXHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLlRhZ3NGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlc2FzeW5jKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuSXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLlRhZ3NGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5WYWx1ZSAhPSB1bmRlZmluZWQgJiYgdGhpcy5vcHRpb25zLlZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5WYWx1ZS5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5vcHRpb25zLlZhbHVlW2luZGV4XTtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkSWQucHVzaChlbGVtZW50LmlkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRhZ3MgPSB0aGlzLm9wdGlvbnMuVmFsdWVcclxuICAgICAgdGhpcy5UYWdzRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLlZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLlRhZ3NJbnB1dENvbnRyb2xIb3N0Lm5nU3VibWl0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgdGhpcy5ncm91cC5tYXJrQWxsQXNUb3VjaGVkKClcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICAvL0NoZWNrIGZvciBjaGFuZ2luZyBpbiB2YWx1ZVxyXG4gICAgdGhpcy5jaGFuZ2VWYWx1ZVN1YnNjcmlwdGlvbiA9IHRoaXMuVGFnc0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoYyA9PiB7XHJcbiAgICAgIHRoaXMudGFncyA9IHRoaXMuVGFnc0Zvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICB0aGlzLlNlbGVjdGVkSWQgPSB0aGlzLnRhZ3M/LmZpbHRlcihpdGVtID0+IGl0ZW0uaWQpLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xyXG4gICAgICBpZiAodGhpcy50YWdzID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLlNlYXJjaEtleS5zZWxlY3RlZCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy50YWdzID0gW107XHJcbiAgICAgICAgdGhpcy5UYWdzRm9ybUNvbnRyb2wuc2V0VmFsdWUoW10pXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkF0dHJpYnV0ZUxpc3QgIT0gbnVsbCkge1xyXG4gICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9ucy5OYW1lKTtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMub3B0aW9ucy5BdHRyaWJ1dGVMaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMub3B0aW9ucy5BdHRyaWJ1dGVMaXN0W2luZGV4XS5LZXksIHRoaXMub3B0aW9ucy5BdHRyaWJ1dGVMaXN0W2luZGV4XS52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBpbnB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm9wdGlvbnMuTmFtZSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXVxyXG4gICAgaW5wdXRFbGVtZW50LnNldEF0dHJpYnV0ZShcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKVxyXG4gIH1cclxuXHJcbiAgcmVzZXRFcnJvciA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLlJlbW92ZUdsb2JhbEVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBzaG93R2xvYmFsRXJyb3IoKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNob3dHbG9iYWxFcnJvcigpXHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JMaXN0KSB7XHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBjb3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudCkge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Db3B5SW5wdXRNZXNzYWdlKGlucHV0RWxlbWVudClcclxuICB9XHJcblxyXG4gIHNlYXJjaEZ1bmN0aW9uRmFjdG9yeShUZXh0OiBhbnkpOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xyXG4gICAgLy9JZiBubyB0ZXh0IHRoZW4gcmV0dXJuIGVtcHR5IG9ic2VydmFibGVcclxuICAgIGlmICghVGV4dClcclxuICAgICAgcmV0dXJuIEVNUFRZO1xyXG5cclxuICAgIGxldCBVcmwgPSBgJHt0aGlzLm9wdGlvbnMuQWN0aW9uVVJMfT8ke3RoaXMub3B0aW9ucy5RdWVyeVBhcmFtTmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQoVGV4dCl9JiR7dGhpcy5vcHRpb25zLlNlbGVjdGVkSXRlbXNQYXJhbU5hbWV9PSR7dGhpcy5TZWxlY3RlZElkfWBcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuRXh0cmFGaWx0ZXJzKVxyXG4gICAgICBVcmwgPSBVcmwgKyBgJiR7dGhpcy5vcHRpb25zLkV4dHJhRmlsdGVyc31gXHJcbiAgICBsZXQgcmVxdWVzdE9wdGlvbnNNb2RlbCA9IG5ldyBSZXF1ZXN0T3B0aW9uc01vZGVsKClcclxuICAgIHJlcXVlc3RPcHRpb25zTW9kZWwuZGlzYWJsZUJsb2NrVUkgPSB0cnVlO1xyXG4gICAgcmVxdWVzdE9wdGlvbnNNb2RlbC5kaXNhYmxlU3VjY2Vzc05vdGlmaWNhdGlvbiA9IHRydWU7XHJcbiAgICBsZXQgTW9kZWwgPSB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5nZXQoVXJsLCBudWxsLCBudWxsLCByZXF1ZXN0T3B0aW9uc01vZGVsKTtcclxuICAgIHJldHVybiBNb2RlbCBhcyBhbnk7XHJcbiAgfVxyXG5cclxuICBBZGRUYWcoZXZlbnQsIGtleSkge1xyXG4gICAgLy9DaGVjayBpZiBpbnB1dCBpcyB5YWIgcHJlc3NcclxuICAgIGlmIChldmVudC5rZXkgPT09IFwiVGFiXCIpXHJcbiAgICAgIHJldHVybjtcclxuICAgIC8vQ2hlY2sgaWYgaW5wdXQgaXMgZW50ZXIgcHJlc3NcclxuICAgIGlmICh0aGlzLklzTm9NYXRjaCA9PSB0cnVlICYmIGV2ZW50LmtleSA9PSBcIkVudGVyXCIgJiYgdGhpcy5vcHRpb25zLkFsbG93TmV3U2VsZWN0aW9uICYmIGtleS5zZWxlY3RlZCkge1xyXG4gICAgICBpZiAoISh0aGlzLnRhZ3MubGVuZ3RoID49IHRoaXMub3B0aW9ucy5NYXhOdW1iZXJUYWdzKSkge1xyXG4gICAgICAgIHRoaXMudGFncy5wdXNoKHsgbmFtZToga2V5LnNlbGVjdGVkIH0pO1xyXG4gICAgICAgIHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS5zZXRWYWx1ZSh0aGlzLnRhZ3MpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgdGhpcy5ncm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS52YWxpZCkge1xyXG4gICAgICAgICAga2V5LnNlbGVjdGVkID0gbnVsbDtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy50YWdzLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvL0NoZWNrIGlmIGlucHV0IGlzIGNoYXJhY2h0ZXJcclxuICAgIGVsc2UgaWYgKFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQua2V5Q29kZSkubWF0Y2goLyhcXHd8XFxzKS9nKSkge1xyXG4gICAgICBpZiAodGhpcy5Jc05vTWF0Y2ggJiYgIXRoaXMub3B0aW9ucy5BbGxvd05ld1NlbGVjdGlvbiAmJiBrZXkuc2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLlRhZ3NGb3JtQ29udHJvbC5zZXRFcnJvcnMoeyBcImVycm9yTWFzc2FnZVwiOiB0aGlzLm9wdGlvbnMuTm9SZXN1bHRUZXh0IH0pO1xyXG4gICAgICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLklzTm9NYXRjaCA9PSBmYWxzZSAmJiB0aGlzLm9wdGlvbnMuQWxsb3dOZXdTZWxlY3Rpb24gPT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLlRhZ3NGb3JtQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB0aGlzLlRhZ3NGb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vUmVtb3ZlIHVubWF0Y2hlZCBlcnJvciBpbmNhc2Ugb2YgZGVsZXRpbmcgc2VhcmNoIHZhbHVlXHJcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiQmFja3NwYWNlXCIgJiYga2V5LnNlbGVjdGVkPy5sZW5ndGggPD0gMSAmJiB0aGlzLlRhZ3NGb3JtQ29udHJvbC5oYXNFcnJvcignZXJyb3JNYXNzYWdlJykpIHtcclxuICAgICAgdGhpcy5UYWdzRm9ybUNvbnRyb2wuc2V0RXJyb3JzKHsgXCJlcnJvck1hc3NhZ2VcIjogbnVsbCB9KTtcclxuICAgICAgdGhpcy5UYWdzRm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICBpZiAodGhpcy5TZWxlY3RlZElkPy5sZW5ndGggPT0gMCAmJiB0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCkge1xyXG4gICAgICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiBcIlwiIH0pO1xyXG4gICAgICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UYWdzQ2hhbmdlZChyZXN1bHQpIHtcclxuICAgIC8vY29uc29sZS5sb2codGhpcy50YWdzKVxyXG4gICAgaWYgKHJlc3VsdFtcImNoYW5nZVwiXSA9PSBcImFkZFwiKSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRJZC5wdXNoKHJlc3VsdC50YWcuaWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlc3VsdFtcImNoYW5nZVwiXSA9PSBcInJlbW92ZVwiKSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRJZCA9IHRoaXMuU2VsZWN0ZWRJZC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT0gcmVzdWx0LnRhZy5pZCk7XHJcbiAgICAgIGlmICh0aGlzLlNlbGVjdGVkSWQubGVuZ3RoID09IDAgJiYgdGhpcy5vcHRpb25zLklzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiBcIlwiIH0pO1xyXG4gICAgICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLlRhZ3NGb3JtQ29udHJvbC5pbnZhbGlkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuVGFnc0Zvcm1Db250cm9sLnZhbHVlLm1hcChmdW5jdGlvbiAoYSkgeyByZXR1cm4gYS5pZDsgfSk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLlBhdGNoRnVuY3Rpb24gJiYgdGhpcy5vcHRpb25zLlBhdGNoUGF0aCAmJiB0aGlzLlRhZ3NGb3JtQ29udHJvbC52YWxpZCkge1xyXG4gICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdGNoQ29udHJvbFZhbHVlKG9yaWdpbmFsVmFsdWUsIHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uLCB0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoKTtcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5WYWx1ZT0gdGhpcy50YWdzXHJcbiAgICB0aGlzLmdyb3VwLmdldCh0aGlzLm9wdGlvbnMuTmFtZSkuc2V0VmFsdWUodGhpcy50YWdzKTtcclxuICAgIHRoaXMuVGFnc0Zvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuZ3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5PbkNoYW5nZS5lbWl0KG9yaWdpbmFsVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25Ob09wdGlvbnNNYXRjaChldmVudCkge1xyXG4gICAgdGhpcy5Jc05vTWF0Y2ggPSBldmVudDtcclxuICB9XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5UYWdzRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgQWRkUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5UYWdzRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcblxyXG4gIFJlbW92ZUN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVDdXN0b21WYWxpZGF0aW9uKHRoaXMuVGFnc0Zvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBBZGRDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkQ3VzdG9tVmFsaWRhdGlvbih0aGlzLlRhZ3NGb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgfVxyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIElzVmFsaWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LklzVmFsaWQodGhpcy5UYWdzRm9ybUNvbnRyb2wpXHJcbiAgfVxyXG5cclxuICBvblRhZ3NJbnB1dEJsdXIoU2VhcmNoS2V5KSB7XHJcbiAgICBpZiAoU2VhcmNoS2V5LnNlbGVjdGVkICYmIHRoaXMub3B0aW9ucy5BbGxvd05ld1NlbGVjdGlvbiAmJiB0aGlzLklzTm9NYXRjaCAmJiB0aGlzLnRhZ3MubGVuZ3RoIDwgdGhpcy5vcHRpb25zLk1heE51bWJlclRhZ3MpIHtcclxuICAgICAgdGhpcy50YWdzLnB1c2goeyBuYW1lOiBTZWFyY2hLZXkuc2VsZWN0ZWQgfSk7XHJcbiAgICAgIHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS5zZXRWYWx1ZSh0aGlzLnRhZ3MpO1xyXG4gICAgICB0aGlzLmdyb3VwLmdldCh0aGlzLm9wdGlvbnMuTmFtZSkubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICB0aGlzLmdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS52YWxpZCkge1xyXG4gICAgICAgIFNlYXJjaEtleS5zZWxlY3RlZCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLnRhZ3MucG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==