@bnsights/bbsf-controls 1.0.109 → 1.0.111

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/README.md +8 -0
  2. package/{esm2020 → esm2022}/bnsights-bbsf-controls.mjs +4 -4
  3. package/esm2022/bnsights-test-test-controls.mjs +5 -0
  4. package/{esm2020 → esm2022}/lib/Shared/Components/app-base-component.mjs +226 -226
  5. package/{esm2020 → esm2022}/lib/Shared/Components/ng-tag-input.mjs +176 -176
  6. package/{esm2020 → esm2022}/lib/Shared/Directives/template-name.directive.mjs +18 -18
  7. package/{esm2020 → esm2022}/lib/Shared/Enums/CalendarView.mjs +7 -7
  8. package/{esm2020 → esm2022}/lib/Shared/Enums/ControlLayout.mjs +5 -5
  9. package/{esm2020 → esm2022}/lib/Shared/Enums/Countries.mjs +246 -246
  10. package/{esm2020 → esm2022}/lib/Shared/Enums/Enums.mjs +32 -32
  11. package/{esm2020 → esm2022}/lib/Shared/Enums/FileType.mjs +21 -21
  12. package/{esm2020 → esm2022}/lib/Shared/Enums/FilterType.mjs +10 -10
  13. package/{esm2020 → esm2022}/lib/Shared/Enums/FontSize.mjs +6 -6
  14. package/{esm2020 → esm2022}/lib/Shared/Enums/ForceDirection.mjs +5 -5
  15. package/{esm2020 → esm2022}/lib/Shared/Enums/IconPosition.mjs +5 -5
  16. package/{esm2020 → esm2022}/lib/Shared/Enums/ImageType.mjs +9 -9
  17. package/{esm2020 → esm2022}/lib/Shared/Enums/InputType.mjs +9 -9
  18. package/{esm2020 → esm2022}/lib/Shared/Enums/Insert.mjs +8 -8
  19. package/{esm2020 → esm2022}/lib/Shared/Enums/LanguageMode.mjs +10 -10
  20. package/{esm2020 → esm2022}/lib/Shared/Enums/LanguageValidation.mjs +5 -5
  21. package/{esm2020 → esm2022}/lib/Shared/Enums/Misc.mjs +6 -6
  22. package/{esm2020 → esm2022}/lib/Shared/Enums/PagingActionMode.mjs +5 -5
  23. package/{esm2020 → esm2022}/lib/Shared/Enums/Para.mjs +8 -8
  24. package/{esm2020 → esm2022}/lib/Shared/Enums/PickerType.mjs +6 -6
  25. package/{esm2020 → esm2022}/lib/Shared/Enums/SelectMode.mjs +5 -5
  26. package/{esm2020 → esm2022}/lib/Shared/Enums/StartView.mjs +6 -6
  27. package/{esm2020 → esm2022}/lib/Shared/Enums/Style.mjs +7 -7
  28. package/{esm2020 → esm2022}/lib/Shared/Enums/StyleConfirmationMode.mjs +6 -6
  29. package/{esm2020 → esm2022}/lib/Shared/Enums/TagInputView.mjs +6 -6
  30. package/esm2022/lib/Shared/Enums/map-enums.mjs +7 -0
  31. package/{esm2020 → esm2022}/lib/Shared/Enums/menu-list-enum.mjs +5 -5
  32. package/{esm2020 → esm2022}/lib/Shared/Models/Attribute.mjs +2 -2
  33. package/{esm2020 → esm2022}/lib/Shared/Models/AutocompleteDTO.mjs +7 -7
  34. package/{esm2020 → esm2022}/lib/Shared/Models/AutocompleteOptions.mjs +23 -23
  35. package/{esm2020 → esm2022}/lib/Shared/Models/CalendarEventDTO.mjs +2 -2
  36. package/{esm2020 → esm2022}/lib/Shared/Models/CalendarOptions.mjs +18 -18
  37. package/{esm2020 → esm2022}/lib/Shared/Models/CancelDTO.mjs +6 -6
  38. package/{esm2020 → esm2022}/lib/Shared/Models/CaptchaStyle.mjs +2 -2
  39. package/{esm2020 → esm2022}/lib/Shared/Models/CheckBoxOptions.mjs +10 -10
  40. package/{esm2020 → esm2022}/lib/Shared/Models/ConfirmationModalOptions.mjs +38 -38
  41. package/{esm2020 → esm2022}/lib/Shared/Models/ControlOptionsBase.mjs +12 -12
  42. package/{esm2020 → esm2022}/lib/Shared/Models/CustomValidation.mjs +13 -13
  43. package/{esm2020 → esm2022}/lib/Shared/Models/DropdownListItem.mjs +2 -2
  44. package/{esm2020 → esm2022}/lib/Shared/Models/DropdownOptions.mjs +15 -15
  45. package/{esm2020 → esm2022}/lib/Shared/Models/EditPersonalImage.mjs +6 -6
  46. package/{esm2020 → esm2022}/lib/Shared/Models/EnglishArabicDTO.mjs +10 -10
  47. package/{esm2020 → esm2022}/lib/Shared/Models/FileDTO.mjs +1 -1
  48. package/{esm2020 → esm2022}/lib/Shared/Models/FileUploadModel.mjs +2 -2
  49. package/{esm2020 → esm2022}/lib/Shared/Models/FileUploadOptions.mjs +10 -10
  50. package/{esm2020 → esm2022}/lib/Shared/Models/FilterItem.mjs +7 -7
  51. package/{esm2020 → esm2022}/lib/Shared/Models/FormOptions.mjs +27 -27
  52. package/{esm2020 → esm2022}/lib/Shared/Models/HtmlEditorOptions.mjs +11 -11
  53. package/{esm2020 → esm2022}/lib/Shared/Models/ImageUploadOptions.mjs +13 -13
  54. package/esm2022/lib/Shared/Models/MapAutoCompleteOptions.mjs +10 -0
  55. package/{esm2020 → esm2022}/lib/Shared/Models/MapAutocompleteDTO.mjs +5 -5
  56. package/{esm2020 → esm2022}/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs +8 -8
  57. package/{esm2020 → esm2022}/lib/Shared/Models/MultiLingualTextAreaOptions.mjs +8 -8
  58. package/{esm2020 → esm2022}/lib/Shared/Models/MultilingualControlOptionsBase.mjs +15 -15
  59. package/{esm2020 → esm2022}/lib/Shared/Models/MultilingualTextBoxOptions.mjs +13 -13
  60. package/{esm2020 → esm2022}/lib/Shared/Models/MultipleFileUploadModel.mjs +8 -8
  61. package/{esm2020 → esm2022}/lib/Shared/Models/PagingDTO.mjs +12 -12
  62. package/{esm2020 → esm2022}/lib/Shared/Models/PagingOptions.mjs +46 -46
  63. package/{esm2020 → esm2022}/lib/Shared/Models/PagingPayload.mjs +2 -2
  64. package/{esm2020 → esm2022}/lib/Shared/Models/PhoneOptions.mjs +12 -12
  65. package/{esm2020 → esm2022}/lib/Shared/Models/ProfileImageUploadOptions.mjs +10 -10
  66. package/{esm2020 → esm2022}/lib/Shared/Models/ProfilePictureDTO.mjs +2 -2
  67. package/{esm2020 → esm2022}/lib/Shared/Models/RadioButtonItem.mjs +2 -2
  68. package/{esm2020 → esm2022}/lib/Shared/Models/RadioButtonOptions.mjs +3 -3
  69. package/{esm2020 → esm2022}/lib/Shared/Models/RangeNumber.mjs +2 -2
  70. package/{esm2020 → esm2022}/lib/Shared/Models/Recaptcha.mjs +5 -5
  71. package/{esm2020 → esm2022}/lib/Shared/Models/RecaptchaOptions.mjs +21 -21
  72. package/{esm2020 → esm2022}/lib/Shared/Models/RepeaterField.mjs +2 -2
  73. package/{esm2020 → esm2022}/lib/Shared/Models/RepeaterOptions.mjs +12 -12
  74. package/{esm2020 → esm2022}/lib/Shared/Models/SaveDTO.mjs +6 -6
  75. package/{esm2020 → esm2022}/lib/Shared/Models/TagsInputDTO.mjs +2 -2
  76. package/{esm2020 → esm2022}/lib/Shared/Models/TagsInputOptions.mjs +40 -40
  77. package/{esm2020 → esm2022}/lib/Shared/Models/TextAreaOptions.mjs +3 -3
  78. package/{esm2020 → esm2022}/lib/Shared/Models/TextBoxOptions.mjs +22 -22
  79. package/{esm2020 → esm2022}/lib/Shared/Models/ToggleslideOptions.mjs +8 -8
  80. package/{esm2020 → esm2022}/lib/Shared/Models/UploadPersonalImage.mjs +6 -6
  81. package/{esm2020 → esm2022}/lib/Shared/Models/bread-crumb.mjs +7 -7
  82. package/{esm2020 → esm2022}/lib/Shared/Models/control-filter-Item.mjs +5 -5
  83. package/{esm2020 → esm2022}/lib/Shared/Models/datePickerOptions.mjs +22 -22
  84. package/{esm2020 → esm2022}/lib/Shared/Models/filter-options.mjs +8 -8
  85. package/{esm2020 → esm2022}/lib/Shared/Models/page-header-options.mjs +77 -77
  86. package/{esm2020 → esm2022}/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +21 -21
  87. package/{esm2020 → esm2022}/lib/Shared/Pipes/bbsf-date.pipe.mjs +21 -21
  88. package/{esm2020 → esm2022}/lib/Shared/config/environment.mjs +11 -11
  89. package/{esm2020 → esm2022}/lib/Shared/default_intl.mjs +29 -29
  90. package/{esm2020 → esm2022}/lib/Shared/services/ControlUtility.mjs +162 -162
  91. package/{esm2020 → esm2022}/lib/Shared/services/GlobalSettings.service.mjs +30 -30
  92. package/esm2022/lib/Shared/services/OnPagingFiltersChange.service.mjs +24 -0
  93. package/{esm2020 → esm2022}/lib/Shared/services/render-component-service.service.mjs +30 -30
  94. package/esm2022/lib/Shared/services/validationErrorMassage.service.mjs +170 -0
  95. package/esm2022/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +262 -0
  96. package/esm2022/lib/controls/Calendar/Calendar.component.mjs +173 -0
  97. package/esm2022/lib/controls/CheckBox/CheckBox.component.mjs +117 -0
  98. package/{esm2020 → esm2022}/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +136 -136
  99. package/esm2022/lib/controls/DateTimePicker/DateTimePicker.component.mjs +223 -0
  100. package/esm2022/lib/controls/DropdownList/DropdownList.component.mjs +193 -0
  101. package/esm2022/lib/controls/FileUplaod/FileUplaod.component.mjs +447 -0
  102. package/{esm2020 → esm2022}/lib/controls/Form/Form.component.mjs +101 -101
  103. package/esm2022/lib/controls/HtmlEditor/HtmlEditor.component.mjs +226 -0
  104. package/esm2022/lib/controls/ImageUpload/ImageUpload.component.mjs +350 -0
  105. package/esm2022/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +404 -0
  106. package/esm2022/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +427 -0
  107. package/esm2022/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +429 -0
  108. package/esm2022/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +428 -0
  109. package/{esm2020 → esm2022}/lib/controls/Paging/JwPagination.component.mjs +121 -121
  110. package/{esm2020 → esm2022}/lib/controls/Paging/Paging.component.mjs +312 -312
  111. package/esm2022/lib/controls/Phone/Phone.component.mjs +129 -0
  112. package/esm2022/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +376 -0
  113. package/esm2022/lib/controls/RadioButton/RadioButton.component.mjs +109 -0
  114. package/{esm2020 → esm2022}/lib/controls/Recaptcha/Recaptcha.component.mjs +135 -135
  115. package/{esm2020 → esm2022}/lib/controls/Repeater/repeater/repeater.component.mjs +125 -125
  116. package/{esm2020 → esm2022}/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +750 -750
  117. package/{esm2020 → esm2022}/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +21 -21
  118. package/{esm2020 → esm2022}/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +108 -108
  119. package/esm2022/lib/controls/TagsInput/TagsInput.component.mjs +277 -0
  120. package/esm2022/lib/controls/TextArea/TextArea.component.mjs +196 -0
  121. package/esm2022/lib/controls/TextBox/TextBox.component.mjs +306 -0
  122. package/esm2022/lib/controls/Toggleslide/toggleslide.component.mjs +90 -0
  123. package/esm2022/lib/controls/bbsf-controls.module.mjs +339 -0
  124. package/{esm2020 → esm2022}/lib/controls/page-header-component/page-header-component.component.mjs +37 -37
  125. package/{esm2020 → esm2022}/public-api.mjs +128 -130
  126. package/{fesm2020 → fesm2022}/bnsights-bbsf-controls.mjs +8802 -8736
  127. package/fesm2022/bnsights-bbsf-controls.mjs.map +1 -0
  128. package/{fesm2015/bnsights-bbsf-controls.mjs → fesm2022/bnsights-test-test-controls.mjs} +8803 -8798
  129. package/fesm2022/bnsights-test-test-controls.mjs.map +1 -0
  130. package/index.d.ts +5 -5
  131. package/lib/Shared/Components/app-base-component.d.ts +58 -58
  132. package/lib/Shared/Components/ng-tag-input.d.ts +50 -50
  133. package/lib/Shared/Directives/template-name.directive.d.ts +9 -9
  134. package/lib/Shared/Enums/CalendarView.d.ts +6 -6
  135. package/lib/Shared/Enums/ControlLayout.d.ts +4 -4
  136. package/lib/Shared/Enums/Countries.d.ts +245 -245
  137. package/lib/Shared/Enums/Enums.d.ts +30 -30
  138. package/lib/Shared/Enums/FileType.d.ts +20 -20
  139. package/lib/Shared/Enums/FilterType.d.ts +9 -9
  140. package/lib/Shared/Enums/FontSize.d.ts +5 -5
  141. package/lib/Shared/Enums/ForceDirection.d.ts +4 -4
  142. package/lib/Shared/Enums/IconPosition.d.ts +4 -4
  143. package/lib/Shared/Enums/ImageType.d.ts +8 -8
  144. package/lib/Shared/Enums/InputType.d.ts +8 -8
  145. package/lib/Shared/Enums/Insert.d.ts +7 -7
  146. package/lib/Shared/Enums/LanguageMode.d.ts +9 -9
  147. package/lib/Shared/Enums/LanguageValidation.d.ts +4 -4
  148. package/lib/Shared/Enums/Misc.d.ts +5 -5
  149. package/lib/Shared/Enums/PagingActionMode.d.ts +4 -4
  150. package/lib/Shared/Enums/Para.d.ts +7 -7
  151. package/lib/Shared/Enums/PickerType.d.ts +5 -5
  152. package/lib/Shared/Enums/SelectMode.d.ts +4 -4
  153. package/lib/Shared/Enums/StartView.d.ts +5 -5
  154. package/lib/Shared/Enums/Style.d.ts +6 -6
  155. package/lib/Shared/Enums/StyleConfirmationMode.d.ts +5 -5
  156. package/lib/Shared/Enums/TagInputView.d.ts +5 -5
  157. package/lib/Shared/Enums/map-enums.d.ts +5 -0
  158. package/lib/Shared/Enums/menu-list-enum.d.ts +4 -4
  159. package/lib/Shared/Models/Attribute.d.ts +4 -4
  160. package/lib/Shared/Models/AutocompleteDTO.d.ts +5 -5
  161. package/lib/Shared/Models/AutocompleteOptions.d.ts +40 -40
  162. package/lib/Shared/Models/CalendarEventDTO.d.ts +8 -8
  163. package/lib/Shared/Models/CalendarOptions.d.ts +23 -23
  164. package/lib/Shared/Models/CancelDTO.d.ts +5 -5
  165. package/lib/Shared/Models/CaptchaStyle.d.ts +7 -7
  166. package/lib/Shared/Models/CheckBoxOptions.d.ts +7 -7
  167. package/lib/Shared/Models/ConfirmationModalOptions.d.ts +21 -21
  168. package/lib/Shared/Models/ControlOptionsBase.d.ts +44 -44
  169. package/lib/Shared/Models/CustomValidation.d.ts +10 -10
  170. package/lib/Shared/Models/DropdownListItem.d.ts +4 -4
  171. package/lib/Shared/Models/DropdownOptions.d.ts +33 -33
  172. package/lib/Shared/Models/EditPersonalImage.d.ts +5 -5
  173. package/lib/Shared/Models/EnglishArabicDTO.d.ts +4 -4
  174. package/lib/Shared/Models/FileDTO.d.ts +19 -19
  175. package/lib/Shared/Models/FileUploadModel.d.ts +4 -4
  176. package/lib/Shared/Models/FileUploadOptions.d.ts +19 -19
  177. package/lib/Shared/Models/FilterItem.d.ts +13 -13
  178. package/lib/Shared/Models/FormOptions.d.ts +16 -16
  179. package/lib/Shared/Models/HtmlEditorOptions.d.ts +31 -31
  180. package/lib/Shared/Models/ImageUploadOptions.d.ts +23 -23
  181. package/lib/Shared/Models/MapAutoCompleteOptions.d.ts +8 -6
  182. package/lib/Shared/Models/MapAutocompleteDTO.d.ts +7 -7
  183. package/lib/Shared/Models/MultiLingualHtmlEditorOptions.d.ts +22 -22
  184. package/lib/Shared/Models/MultiLingualTextAreaOptions.d.ts +12 -12
  185. package/lib/Shared/Models/MultilingualControlOptionsBase.d.ts +77 -77
  186. package/lib/Shared/Models/MultilingualTextBoxOptions.d.ts +12 -12
  187. package/lib/Shared/Models/MultipleFileUploadModel.d.ts +7 -7
  188. package/lib/Shared/Models/PagingDTO.d.ts +11 -11
  189. package/lib/Shared/Models/PagingOptions.d.ts +56 -56
  190. package/lib/Shared/Models/PagingPayload.d.ts +5 -5
  191. package/lib/Shared/Models/PhoneOptions.d.ts +21 -21
  192. package/lib/Shared/Models/ProfileImageUploadOptions.d.ts +28 -28
  193. package/lib/Shared/Models/ProfilePictureDTO.d.ts +13 -13
  194. package/lib/Shared/Models/RadioButtonItem.d.ts +4 -4
  195. package/lib/Shared/Models/RadioButtonOptions.d.ts +8 -8
  196. package/lib/Shared/Models/RangeNumber.d.ts +4 -4
  197. package/lib/Shared/Models/Recaptcha.d.ts +6 -6
  198. package/lib/Shared/Models/RecaptchaOptions.d.ts +18 -18
  199. package/lib/Shared/Models/RepeaterField.d.ts +7 -7
  200. package/lib/Shared/Models/RepeaterOptions.d.ts +19 -19
  201. package/lib/Shared/Models/SaveDTO.d.ts +5 -5
  202. package/lib/Shared/Models/TagsInputDTO.d.ts +6 -6
  203. package/lib/Shared/Models/TagsInputOptions.d.ts +57 -57
  204. package/lib/Shared/Models/TextAreaOptions.d.ts +23 -23
  205. package/lib/Shared/Models/TextBoxOptions.d.ts +37 -37
  206. package/lib/Shared/Models/ToggleslideOptions.d.ts +9 -9
  207. package/lib/Shared/Models/UploadPersonalImage.d.ts +5 -5
  208. package/lib/Shared/Models/bread-crumb.d.ts +6 -6
  209. package/lib/Shared/Models/control-filter-Item.d.ts +6 -6
  210. package/lib/Shared/Models/datePickerOptions.d.ts +29 -29
  211. package/lib/Shared/Models/filter-options.d.ts +7 -7
  212. package/lib/Shared/Models/page-header-options.d.ts +71 -71
  213. package/lib/Shared/Pipes/bbsf-date-time.pipe.d.ts +10 -10
  214. package/lib/Shared/Pipes/bbsf-date.pipe.d.ts +10 -10
  215. package/lib/Shared/config/environment.d.ts +1 -1
  216. package/lib/Shared/default_intl.d.ts +21 -21
  217. package/lib/Shared/services/ControlUtility.d.ts +32 -32
  218. package/lib/Shared/services/GlobalSettings.service.d.ts +17 -17
  219. package/lib/Shared/services/OnPagingFiltersChange.service.d.ts +10 -10
  220. package/lib/Shared/services/render-component-service.service.d.ts +10 -10
  221. package/lib/Shared/services/validationErrorMassage.service.d.ts +14 -14
  222. package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +59 -59
  223. package/lib/controls/Calendar/Calendar.component.d.ts +42 -42
  224. package/lib/controls/CheckBox/CheckBox.component.d.ts +37 -37
  225. package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +29 -29
  226. package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +61 -61
  227. package/lib/controls/DropdownList/DropdownList.component.d.ts +55 -55
  228. package/lib/controls/FileUplaod/FileUplaod.component.d.ts +58 -58
  229. package/lib/controls/Form/Form.component.d.ts +28 -28
  230. package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +49 -49
  231. package/lib/controls/ImageUpload/ImageUpload.component.d.ts +70 -70
  232. package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +70 -54
  233. package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +65 -65
  234. package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +74 -74
  235. package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +73 -73
  236. package/lib/controls/Paging/JwPagination.component.d.ts +27 -27
  237. package/lib/controls/Paging/Paging.component.d.ts +57 -57
  238. package/lib/controls/Phone/Phone.component.d.ts +43 -43
  239. package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +69 -69
  240. package/lib/controls/RadioButton/RadioButton.component.d.ts +37 -37
  241. package/lib/controls/Recaptcha/Recaptcha.component.d.ts +41 -41
  242. package/lib/controls/Repeater/repeater/repeater.component.d.ts +29 -29
  243. package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +23 -23
  244. package/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.d.ts +11 -11
  245. package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +19 -19
  246. package/lib/controls/TagsInput/TagsInput.component.d.ts +58 -58
  247. package/lib/controls/TextArea/TextArea.component.d.ts +51 -51
  248. package/lib/controls/TextBox/TextBox.component.d.ts +66 -66
  249. package/lib/controls/Toggleslide/toggleslide.component.d.ts +33 -33
  250. package/lib/controls/bbsf-controls.module.d.ts +70 -77
  251. package/lib/controls/page-header-component/page-header-component.component.d.ts +20 -20
  252. package/package.json +54 -63
  253. package/public-api.d.ts +118 -117
  254. package/src/lib/assets/Style-rtl.scss +46 -28
  255. package/src/lib/assets/Style.scss +4 -4
  256. package/src/lib/assets/images/marker-pin.svg +4 -0
  257. package/src/lib/assets/sass/base.scss +73 -21
  258. package/esm2020/lib/Shared/Models/MapAutoCompleteOptions.mjs +0 -4
  259. package/esm2020/lib/Shared/services/OnPagingFiltersChange.service.mjs +0 -24
  260. package/esm2020/lib/Shared/services/validationErrorMassage.service.mjs +0 -170
  261. package/esm2020/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +0 -262
  262. package/esm2020/lib/controls/Calendar/Calendar.component.mjs +0 -173
  263. package/esm2020/lib/controls/CheckBox/CheckBox.component.mjs +0 -117
  264. package/esm2020/lib/controls/DateTimePicker/DateTimePicker.component.mjs +0 -223
  265. package/esm2020/lib/controls/DropdownList/DropdownList.component.mjs +0 -194
  266. package/esm2020/lib/controls/FileUplaod/FileUplaod.component.mjs +0 -447
  267. package/esm2020/lib/controls/HtmlEditor/HtmlEditor.component.mjs +0 -226
  268. package/esm2020/lib/controls/ImageUpload/ImageUpload.component.mjs +0 -350
  269. package/esm2020/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +0 -325
  270. package/esm2020/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +0 -427
  271. package/esm2020/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +0 -429
  272. package/esm2020/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +0 -428
  273. package/esm2020/lib/controls/Phone/Phone.component.mjs +0 -129
  274. package/esm2020/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +0 -376
  275. package/esm2020/lib/controls/RadioButton/RadioButton.component.mjs +0 -109
  276. package/esm2020/lib/controls/TagsInput/TagsInput.component.mjs +0 -277
  277. package/esm2020/lib/controls/TextArea/TextArea.component.mjs +0 -196
  278. package/esm2020/lib/controls/TextBox/TextBox.component.mjs +0 -312
  279. package/esm2020/lib/controls/Toggleslide/toggleslide.component.mjs +0 -90
  280. package/esm2020/lib/controls/bbsf-controls.module.mjs +0 -361
  281. package/fesm2015/bnsights-bbsf-controls.mjs.map +0 -1
  282. package/fesm2020/bnsights-bbsf-controls.mjs.map +0 -1
@@ -0,0 +1,109 @@
1
+ import { Component, Input, Optional, Output, EventEmitter } from '@angular/core';
2
+ import { FormControl, Validators } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../Shared/services/ControlUtility";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "@bnsights/bbsf-utilities";
7
+ import * as i4 from "../../Shared/services/GlobalSettings.service";
8
+ import * as i5 from "@angular/common";
9
+ import * as i6 from "ngx-intl-tel-input";
10
+ export class RadioButtonComponent {
11
+ static { this.controlContainerstatic = null; }
12
+ // tslint:disable-next-line: max-line-length
13
+ constructor(controlUtility, controlContainer, RadioButtonControlHost, UtilityService, controlValidationService, globalSettings) {
14
+ this.controlUtility = controlUtility;
15
+ this.controlContainer = controlContainer;
16
+ this.RadioButtonControlHost = RadioButtonControlHost;
17
+ this.UtilityService = UtilityService;
18
+ this.controlValidationService = controlValidationService;
19
+ this.globalSettings = globalSettings;
20
+ this.OnChange = new EventEmitter();
21
+ this.markAllAsTouched = false;
22
+ this.validationRules = [];
23
+ this.validationRulesasync = [];
24
+ this.resetError = () => {
25
+ this.controlValidationService.removeGlobalError();
26
+ };
27
+ //External Method
28
+ this.RemoveRequiredValidation = () => {
29
+ this.controlUtility.RemoveRequiredValidation(this.RadioButtonFormControl, this.validationRules, this.options);
30
+ };
31
+ //External Method
32
+ this.AddRequiredValidation = () => {
33
+ this.controlUtility.AddRequiredValidation(this.RadioButtonFormControl, this.validationRules, this.options);
34
+ };
35
+ //External Method
36
+ this.RemoveCustomValidation = (CustomValidation) => {
37
+ this.controlUtility.RemoveCustomValidation(this.RadioButtonFormControl, this.validationRules, CustomValidation);
38
+ };
39
+ //External Method
40
+ this.AddCustomValidation = (CustomValidation) => {
41
+ this.controlUtility.AddCustomValidation(this.RadioButtonFormControl, this.validationRules, CustomValidation);
42
+ };
43
+ //External Method
44
+ this.IsValid = () => {
45
+ this.controlUtility.IsValid(this.RadioButtonFormControl);
46
+ };
47
+ RadioButtonComponent.controlContainerstatic = this.controlContainer;
48
+ }
49
+ ngOnInit() {
50
+ this.group.addControl(this.options.Name, new FormControl(''));
51
+ this.RadioButtonFormControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
52
+ if (!this.options.ViewType)
53
+ this.options.ViewType = this.globalSettings.ViewType;
54
+ if (this.options.IsRequired) {
55
+ this.validationRules.push(Validators.required);
56
+ }
57
+ this.RadioButtonFormControl.setValidators(this.validationRules);
58
+ this.RadioButtonFormControl.setAsyncValidators(this.validationRulesasync);
59
+ if (this.options.IsDisabled) {
60
+ this.RadioButtonFormControl.disable();
61
+ }
62
+ if (this.options.LabelKey != null && this.options.LabelKey != "")
63
+ this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
64
+ this.RadioButtonControlHost.ngSubmit.subscribe((value) => {
65
+ this.group.markAllAsTouched();
66
+ this.markAllAsTouched = true;
67
+ });
68
+ if (this.options.Value) {
69
+ this.RadioButtonFormControl.setValue(this.options.Value.Value);
70
+ }
71
+ }
72
+ showGlobalError() {
73
+ this.controlUtility.showGlobalError();
74
+ }
75
+ getErrorValidation(ErrorList) {
76
+ if (this.markAllAsTouched && this.group.invalid) {
77
+ this.showGlobalError();
78
+ this.markAllAsTouched = false;
79
+ }
80
+ return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
81
+ }
82
+ onValueChanged() {
83
+ let originalValue = this.RadioButtonFormControl.value;
84
+ if (this.options.PatchFunction && this.options.PatchPath && this.RadioButtonFormControl.valid) {
85
+ this.controlUtility.patchControlValue(originalValue, this.options.PatchFunction, this.options.PatchPath);
86
+ }
87
+ //Use this line to enable two way binding.
88
+ this.options.Value = originalValue;
89
+ this.OnChange.emit(originalValue);
90
+ }
91
+ getSelectedItemValue(value) {
92
+ return this.options.Items.filter(item => item.Value == value)[0].Text;
93
+ }
94
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: RadioButtonComponent, deps: [{ token: i1.ControlUtility }, { token: i2.ControlContainer, optional: true }, { token: i2.FormGroupDirective }, { token: i3.UtilityService }, { token: i3.ControlValidationService }, { token: i4.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component }); }
95
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: RadioButtonComponent, selector: "BBSF-RadioButton", inputs: { group: "group", options: "options" }, outputs: { OnChange: "OnChange" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-radio-button\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label [hidden]=\"options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired))&&!options.IsReadonly\" class=\"text-danger\">*</span>\r\n </label>\r\n <div *ngIf=\"!options.IsReadonly\" class=\"bbsf-input-container\">\r\n <!--input-->\r\n <div class=\"radio-container\" *ngFor=\"let item of options.Items\">\r\n <input type=\"radio\" id=\"{{options.Name}}{{item.Value}}\"\r\n class=\"{{options.ExtraClasses}}\"\r\n [value]=\"item.Value\" checked=\"{{(options.Value!=null)&&(options.Value.Value == item.Value)}}\"\r\n (change)=\"onValueChanged()\"\r\n aria-describedby=\"email-error\"\r\n aria-invalid=\"true\" [(ngModel)]=\"options.Value\"\r\n formControlName=\"{{options.Name}}\">\r\n <label class=\"radio-input-label\" for=\"{{options.Name}}{{item.Value}}\">{{item.Text}}</label>\r\n </div>\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.IsReadonly\"><span class=\"readonly-view\">{{getSelectedItemValue(options.Value)}}</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!options.IsReadonly\" 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=\"(RadioButtonFormControl.invalid && RadioButtonFormControl.touched)\">\r\n {{getErrorValidation(RadioButtonFormControl.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", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i5.KeyValuePipe, name: "keyvalue" }] }); }
96
+ }
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: RadioButtonComponent, decorators: [{
98
+ type: Component,
99
+ args: [{ selector: 'BBSF-RadioButton', template: "<div class=\"form-group bbsf-control bbsf-radio-button\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label [hidden]=\"options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"((options.ShowAsterisk&&options.IsRequired)||(options.IsRequired))&&!options.IsReadonly\" class=\"text-danger\">*</span>\r\n </label>\r\n <div *ngIf=\"!options.IsReadonly\" class=\"bbsf-input-container\">\r\n <!--input-->\r\n <div class=\"radio-container\" *ngFor=\"let item of options.Items\">\r\n <input type=\"radio\" id=\"{{options.Name}}{{item.Value}}\"\r\n class=\"{{options.ExtraClasses}}\"\r\n [value]=\"item.Value\" checked=\"{{(options.Value!=null)&&(options.Value.Value == item.Value)}}\"\r\n (change)=\"onValueChanged()\"\r\n aria-describedby=\"email-error\"\r\n aria-invalid=\"true\" [(ngModel)]=\"options.Value\"\r\n formControlName=\"{{options.Name}}\">\r\n <label class=\"radio-input-label\" for=\"{{options.Name}}{{item.Value}}\">{{item.Text}}</label>\r\n </div>\r\n </div>\r\n <!-- readonly -->\r\n <div *ngIf=\"options.IsReadonly\"><span class=\"readonly-view\">{{getSelectedItemValue(options.Value)}}</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!options.IsReadonly\" 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=\"(RadioButtonFormControl.invalid && RadioButtonFormControl.touched)\">\r\n {{getErrorValidation(RadioButtonFormControl.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" }]
100
+ }], ctorParameters: () => [{ type: i1.ControlUtility }, { type: i2.ControlContainer, decorators: [{
101
+ type: Optional
102
+ }] }, { type: i2.FormGroupDirective }, { type: i3.UtilityService }, { type: i3.ControlValidationService }, { type: i4.GlobalSettings }], propDecorators: { group: [{
103
+ type: Input
104
+ }], options: [{
105
+ type: Input
106
+ }], OnChange: [{
107
+ type: Output
108
+ }] } });
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFkaW9CdXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL1JhZGlvQnV0dG9uL1JhZGlvQnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9SYWRpb0J1dHRvbi9SYWRpb0J1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBb0UsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFZM0gsTUFBTSxPQUFPLG9CQUFvQjthQUd4QiwyQkFBc0IsR0FBRyxJQUFJLEFBQVAsQ0FBUTtJQUNyQyw0Q0FBNEM7SUFDNUMsWUFBb0IsY0FBOEIsRUFBc0IsZ0JBQWtDLEVBQ2pHLHNCQUEwQyxFQUFVLGNBQThCLEVBQ2pGLHdCQUFrRCxFQUFVLGNBQThCO1FBRmhGLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFzQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2pHLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBb0I7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDakYsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUsxRixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUd4QyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIseUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBaUMxQixlQUFVLEdBQUcsR0FB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SyxHQUFFLGFBQWEsQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBSztRQUV4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUEsRUFBRSxDQUFBLElBQUksQ0FBQyxLQUFLLElBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0lBQ25FLENBQUM7OEdBaEZVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLDJJQ2JqQywyZ0VBb0NBOzsyRkR2QmEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUVFLGtCQUFrQjs7MEJBUXlCLFFBQVE7MktBS3BELEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3B0aW9uYWwsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7IFJhZGlvQnV0dG9uT3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvUmFkaW9CdXR0b25PcHRpb25zJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXR0aW5ncyB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9HbG9iYWxTZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ0JCU0YtUmFkaW9CdXR0b24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9SYWRpb0J1dHRvbi5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJhZGlvQnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4gIHN0YXRpYyBjb250cm9sQ29udGFpbmVyc3RhdGljID0gbnVsbDtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udHJvbFV0aWxpdHk6IENvbnRyb2xVdGlsaXR5LCBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICBwdWJsaWMgUmFkaW9CdXR0b25Db250cm9sSG9zdDogRm9ybUdyb3VwRGlyZWN0aXZlLCBwcml2YXRlIFV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlOiBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIHByaXZhdGUgZ2xvYmFsU2V0dGluZ3M6IEdsb2JhbFNldHRpbmdzKSB7XHJcbiAgICBSYWRpb0J1dHRvbkNvbXBvbmVudC5jb250cm9sQ29udGFpbmVyc3RhdGljID0gdGhpcy5jb250cm9sQ29udGFpbmVyO1xyXG4gIH1cclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFJhZGlvQnV0dG9uT3B0aW9ucztcclxuICBAT3V0cHV0KCkgT25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIFJhZGlvQnV0dG9uRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBtYXJrQWxsQXNUb3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgdmFsaWRhdGlvblJ1bGVzYXN5bmMgPSBbXTtcclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICB0aGlzLmdyb3VwLmFkZENvbnRyb2wodGhpcy5vcHRpb25zLk5hbWUsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xyXG4gICAgdGhpcy5SYWRpb0J1dHRvbkZvcm1Db250cm9sID0gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm9wdGlvbnMuTmFtZV07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuXHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5WaWV3VHlwZSlcclxuICAgICAgdGhpcy5vcHRpb25zLlZpZXdUeXBlID0gdGhpcy5nbG9iYWxTZXR0aW5ncy5WaWV3VHlwZTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzUmVxdWlyZWQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgIH1cclxuICAgIHRoaXMuUmFkaW9CdXR0b25Gb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuUmFkaW9CdXR0b25Gb3JtQ29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXNhc3luYyk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5SYWRpb0J1dHRvbkZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IFwiXCIpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5MYWJlbFZhbHVlID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKHRoaXMub3B0aW9ucy5MYWJlbEtleSk7XHJcblxyXG5cclxuICAgIHRoaXMuUmFkaW9CdXR0b25Db250cm9sSG9zdC5uZ1N1Ym1pdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JvdXAubWFya0FsbEFzVG91Y2hlZCgpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IHRydWVcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5WYWx1ZSkge1xyXG4gICAgICB0aGlzLlJhZGlvQnV0dG9uRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLlZhbHVlLlZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICByZXNldEVycm9yID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UucmVtb3ZlR2xvYmFsRXJyb3IoKTtcclxuICB9XHJcblxyXG4gIHNob3dHbG9iYWxFcnJvcigpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2hvd0dsb2JhbEVycm9yKClcclxuICB9XHJcblxyXG4gIGdldEVycm9yVmFsaWRhdGlvbihFcnJvckxpc3QpIHtcclxuICAgIGlmICh0aGlzLm1hcmtBbGxBc1RvdWNoZWQgJiYgdGhpcy5ncm91cC5pbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuc2hvd0dsb2JhbEVycm9yKClcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5jb250cm9sVXRpbGl0eS5nZXRFcnJvclZhbGlkYXRpb25NYXNzYWdlKEVycm9yTGlzdCwgdGhpcy5ncm91cCwgdGhpcy5vcHRpb25zKTtcclxuICB9XHJcblxyXG4gIG9uVmFsdWVDaGFuZ2VkKCkge1xyXG4gICAgbGV0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLlJhZGlvQnV0dG9uRm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLlBhdGNoRnVuY3Rpb24gJiYgdGhpcy5vcHRpb25zLlBhdGNoUGF0aCAmJiB0aGlzLlJhZGlvQnV0dG9uRm9ybUNvbnRyb2wudmFsaWQpIHtcclxuICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXRjaENvbnRyb2xWYWx1ZShvcmlnaW5hbFZhbHVlLHRoaXMub3B0aW9ucy5QYXRjaEZ1bmN0aW9uICx0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoKVxyXG4gICAgfVxyXG4gICAgLy9Vc2UgdGhpcyBsaW5lIHRvIGVuYWJsZSB0d28gd2F5IGJpbmRpbmcuXHJcbiAgICB0aGlzLm9wdGlvbnMuVmFsdWU9IG9yaWdpbmFsVmFsdWU7XHJcbiAgICB0aGlzLk9uQ2hhbmdlLmVtaXQob3JpZ2luYWxWYWx1ZSlcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkSXRlbVZhbHVlKHZhbHVlKVxyXG4gIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuSXRlbXMuZmlsdGVyKGl0ZW09Pml0ZW0uVmFsdWU9PXZhbHVlKVswXS5UZXh0XHJcbiAgfVxyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIFJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuUmFkaW9CdXR0b25Gb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIHRoaXMub3B0aW9ucylcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBBZGRSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkFkZFJlcXVpcmVkVmFsaWRhdGlvbih0aGlzLlJhZGlvQnV0dG9uRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIFJlbW92ZUN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVDdXN0b21WYWxpZGF0aW9uKHRoaXMuUmFkaW9CdXR0b25Gb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgQWRkQ3VzdG9tVmFsaWRhdGlvbiA9IChDdXN0b21WYWxpZGF0aW9uKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkFkZEN1c3RvbVZhbGlkYXRpb24odGhpcy5SYWRpb0J1dHRvbkZvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBJc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Jc1ZhbGlkKHRoaXMuUmFkaW9CdXR0b25Gb3JtQ29udHJvbClcclxuICB9XHJcbn1cclxuXHJcblxyXG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBiYnNmLWNvbnRyb2wgYmJzZi1yYWRpby1idXR0b25cIiBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCIob3B0aW9ucy5WaWV3VHlwZT09MSk/J2Jic2YtdmVydGljYWwnOidiYnNmLWhvcml6b250YWwnXCI+XHJcbiAgICA8IS0tbGFiZWwtLT5cclxuICAgIDxsYWJlbCAgW2hpZGRlbl09XCJvcHRpb25zLkhpZGVMYWJlbFwiIGNsYXNzPVwiYmJzZi1sYWJlbCB7e29wdGlvbnMuTGFiZWxFeHRyYUNsYXNzZXN9fVwiPlxyXG4gICAgICB7e29wdGlvbnMuTGFiZWxWYWx1ZX19XHJcbiAgICAgIDwhLS1Bc3Rlcmlzay0tPlxyXG4gICAgICA8c3BhbiAqbmdJZj1cIigob3B0aW9ucy5TaG93QXN0ZXJpc2smJm9wdGlvbnMuSXNSZXF1aXJlZCl8fChvcHRpb25zLklzUmVxdWlyZWQpKSYmIW9wdGlvbnMuSXNSZWFkb25seVwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgPC9sYWJlbD5cclxuICAgIDxkaXYgKm5nSWY9XCIhb3B0aW9ucy5Jc1JlYWRvbmx5XCIgY2xhc3M9XCJiYnNmLWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgICA8IS0taW5wdXQtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWNvbnRhaW5lclwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvbnMuSXRlbXNcIj5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgaWQ9XCJ7e29wdGlvbnMuTmFtZX19e3tpdGVtLlZhbHVlfX1cIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cInt7b3B0aW9ucy5FeHRyYUNsYXNzZXN9fVwiXHJcbiAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLlZhbHVlXCIgY2hlY2tlZD1cInt7KG9wdGlvbnMuVmFsdWUhPW51bGwpJiYob3B0aW9ucy5WYWx1ZS5WYWx1ZSA9PSBpdGVtLlZhbHVlKX19XCJcclxuICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlZCgpXCJcclxuICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cImVtYWlsLWVycm9yXCJcclxuICAgICAgICAgICAgICAgYXJpYS1pbnZhbGlkPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwib3B0aW9ucy5WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7b3B0aW9ucy5OYW1lfX1cIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpby1pbnB1dC1sYWJlbFwiIGZvcj1cInt7b3B0aW9ucy5OYW1lfX17e2l0ZW0uVmFsdWV9fVwiPnt7aXRlbS5UZXh0fX08L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIHJlYWRvbmx5IC0tPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwib3B0aW9ucy5Jc1JlYWRvbmx5XCI+PHNwYW4gY2xhc3M9XCJyZWFkb25seS12aWV3XCI+e3tnZXRTZWxlY3RlZEl0ZW1WYWx1ZShvcHRpb25zLlZhbHVlKX19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwiIW9wdGlvbnMuSXNSZWFkb25seVwiIGNsYXNzPVwic3VidGV4dC1jb250YWluZXJcIj5cclxuICAgIDwhLS0gTGFiZWxEZXNjcmlwdGlvbi0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtY29udHJvbC1kZXNjXCIgKm5nSWY9XCJvcHRpb25zLkxhYmVsRGVzY3JpcHRpb24hPW51bGxcIj57e29wdGlvbnMuTGFiZWxEZXNjcmlwdGlvbn19PC9kaXY+XHJcbiAgICA8IS0tIHJlcXVpcmVkVGV4dC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtdmFsaWRhdGlvblwiICpuZ0lmPVwiKFJhZGlvQnV0dG9uRm9ybUNvbnRyb2wuaW52YWxpZCAmJiBSYWRpb0J1dHRvbkZvcm1Db250cm9sLnRvdWNoZWQpXCI+XHJcbiAgICAgIHt7Z2V0RXJyb3JWYWxpZGF0aW9uKFJhZGlvQnV0dG9uRm9ybUNvbnRyb2wuZXJyb3JzfGtleXZhbHVlKX19XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICpuZ0lmPVwiKGdyb3VwLnZhbGlkJiZncm91cC5kaXJ0eSYmZ3JvdXAudG91Y2hlZCApfHwoZ3JvdXAudW50b3VjaGVkJiZncm91cC5pbnZhbGlkJiZncm91cC5kaXJ0eSkgXCI+e3tyZXNldEVycm9yKCl9fTwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
@@ -1,135 +1,135 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
2
- import { FormControl, Validators } from '@angular/forms';
3
- import { RequestOptionsModel } from '@bnsights/bbsf-utilities';
4
- import { RecaptchaModel } from '../../Shared/Models/Recaptcha';
5
- import { CaptchaStyle } from '../../Shared/Models/CaptchaStyle';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../../Shared/services/ControlUtility";
8
- import * as i2 from "@bnsights/bbsf-utilities";
9
- import * as i3 from "@angular/forms";
10
- import * as i4 from "../../Shared/services/GlobalSettings.service";
11
- import * as i5 from "@angular/common";
12
- import * as i6 from "@ng-bootstrap/ng-bootstrap";
13
- import * as i7 from "@angular/cdk/bidi";
14
- import * as i8 from "ngx-intl-tel-input";
15
- export class RecaptchaComponent {
16
- constructor(controlUtility, requestHandlerService, recaptchaControlHost, UtilityService, controlValidationService, globalSettings) {
17
- this.controlUtility = controlUtility;
18
- this.requestHandlerService = requestHandlerService;
19
- this.recaptchaControlHost = recaptchaControlHost;
20
- this.UtilityService = UtilityService;
21
- this.controlValidationService = controlValidationService;
22
- this.globalSettings = globalSettings;
23
- this.OnChange = new EventEmitter();
24
- this.validationRules = [];
25
- this.validationRulesAsync = [];
26
- this.recaptchaModel = new RecaptchaModel();
27
- this.resetError = () => {
28
- this.controlValidationService.removeGlobalError();
29
- };
30
- //External Method
31
- this.RemoveRequiredValidation = () => {
32
- this.controlUtility.RemoveRequiredValidation(this.ReCaptchaFormControl, this.validationRules, this.options);
33
- };
34
- //External Method
35
- this.AddRequiredValidation = () => {
36
- this.controlUtility.AddRequiredValidation(this.ReCaptchaFormControl, this.validationRules, this.options);
37
- };
38
- //External Method
39
- this.RemoveCustomValidation = (CustomValidation) => {
40
- this.controlUtility.RemoveCustomValidation(this.ReCaptchaFormControl, this.validationRules, CustomValidation);
41
- };
42
- //External Method
43
- this.AddCustomValidation = (CustomValidation) => {
44
- this.controlUtility.AddCustomValidation(this.ReCaptchaFormControl, this.validationRules, CustomValidation);
45
- };
46
- //External Method
47
- this.IsValid = () => {
48
- this.controlUtility.IsValid(this.ReCaptchaFormControl);
49
- };
50
- }
51
- ngOnInit() {
52
- if (this.options.ForceDirection)
53
- this.textDir = this.options.ForceDirection == 2 ? 'rtl' : 'ltr';
54
- else
55
- this.textDir = localStorage.getItem('language') == 'ar' ? 'rtl' : 'ltr';
56
- this.controlValidationService.isCreatedBefor = false;
57
- this.loadImage();
58
- if (!this.options.ViewType)
59
- this.options.ViewType = this.globalSettings.ViewType;
60
- this.group.addControl(this.options.Name, new FormControl(''));
61
- this.ReCaptchaFormControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
62
- if (this.options.LabelKey != null && this.options.LabelKey != "")
63
- this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
64
- if (this.options.IsRequired) {
65
- this.validationRules.push(Validators.required);
66
- }
67
- if (this.options.CustomValidation.length > 0) {
68
- let Validations = this.options.CustomValidation;
69
- for (let index = 0; index < Validations.length; index++) {
70
- const Validation = Validations[index];
71
- this.validationRules.push(Validation.functionBody);
72
- }
73
- }
74
- this.ReCaptchaFormControl.setValidators(this.validationRules);
75
- this.ReCaptchaFormControl.setAsyncValidators(this.validationRulesAsync);
76
- if (this.options.IsDisabled) {
77
- this.ReCaptchaFormControl.disable();
78
- }
79
- this.recaptchaControlHost.ngSubmit.subscribe((value) => {
80
- this.group.markAllAsTouched();
81
- this.markAllAsTouched = true;
82
- });
83
- }
84
- loadImage() {
85
- let style = new CaptchaStyle();
86
- style.BackgroundColorPrimary = this.options.BackgroundColorPrimary;
87
- style.BackgroundColorSecondary = this.options.BackgroundColorSecondary;
88
- style.TextColorPrimary = this.options.TextColorPrimary;
89
- style.TextColorSecondary = this.options.TextColorSecondary;
90
- style.FontSize = this.options.FontSize;
91
- let requestOptionsModel = new RequestOptionsModel();
92
- requestOptionsModel.disableBlockUI = true;
93
- requestOptionsModel.disableSuccessNotification = true;
94
- this.requestHandlerService.post(this.options.ActionURL, style, null, null, requestOptionsModel).subscribe((res) => {
95
- let model = res;
96
- this.recaptchaModel.ID = model.id;
97
- this.recaptchaModel.EncryptedText = model.encryptedText;
98
- this.recaptchaModel.ImageJpeg = model.imageJpeg;
99
- this.image = 'data:image/jpeg;base64,' + this.recaptchaModel.ImageJpeg;
100
- });
101
- }
102
- ngAfterViewInit() {
103
- this.controlUtility.setAttributeForControl(this.options);
104
- }
105
- showGlobalError() {
106
- this.controlUtility.showGlobalError();
107
- }
108
- getErrorValidation(ErrorList) {
109
- if (this.markAllAsTouched && this.group.invalid) {
110
- this.showGlobalError();
111
- this.markAllAsTouched = false;
112
- }
113
- return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
114
- }
115
- onTextChange(valueText) {
116
- let value = valueText.target.value;
117
- this.recaptchaModel.Text = value;
118
- this.group.get(this.options.Name).setValue(this.recaptchaModel);
119
- this.options.Value = this.recaptchaModel;
120
- this.OnChange.emit(this.ReCaptchaFormControl.value);
121
- }
122
- }
123
- RecaptchaComponentfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RecaptchaComponent, deps: [{ token: i1.ControlUtility }, { token: i2.RequestHandlerService }, { token: i3.FormGroupDirective }, { token: i2.UtilityService }, { token: i2.ControlValidationService }, { token: i4.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component });
124
- RecaptchaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RecaptchaComponent, selector: "BBSF-Recaptcha", inputs: { group: "group", options: "options" }, outputs: { OnChange: "OnChange" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-recaptcha\" [formGroup]=\"group\">\r\n <img class=\"h-100 w-100\" [src]=\"image\" />\r\n <button class=\"btn btn-sm btn-icon\" type=\"button\" ngbTooltip=\"{{UtilityService.getResourceValue('ReloadCaptcha')}}\"\r\n (click)=\"loadImage()\">\r\n <i class=\"fas fa-refresh\"></i>\r\n </button>\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 <input class=\"form-control {{options.ExtraClasses}}\"\r\n [dir]=\"textDir\"\r\n aria-describedby=\"email-error\" value=\"{{options.Value.Text}}\"\r\n aria-invalid=\"true\" formControlName=\"{{options.Name}}\" type=\"text\"\r\n [class.is-invalid]=\"ReCaptchaFormControl.invalid && ReCaptchaFormControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" autocomplete=\"{{options.AutoComplete}}\"\r\n (change)=\"onTextChange($event)\" [readonly]=\"options.IsReadonly\" />\r\n\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\"\r\n [dir]=\"textDir\"\r\n *ngIf=\"(ReCaptchaFormControl.invalid && ReCaptchaFormControl.touched)\">\r\n {{getErrorValidation(ReCaptchaFormControl.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", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i7.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i8.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i5.KeyValuePipe, name: "keyvalue" }] });
125
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RecaptchaComponent, decorators: [{
126
- type: Component,
127
- args: [{ selector: 'BBSF-Recaptcha', template: "<div class=\"form-group bbsf-control bbsf-recaptcha\" [formGroup]=\"group\">\r\n <img class=\"h-100 w-100\" [src]=\"image\" />\r\n <button class=\"btn btn-sm btn-icon\" type=\"button\" ngbTooltip=\"{{UtilityService.getResourceValue('ReloadCaptcha')}}\"\r\n (click)=\"loadImage()\">\r\n <i class=\"fas fa-refresh\"></i>\r\n </button>\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 <input class=\"form-control {{options.ExtraClasses}}\"\r\n [dir]=\"textDir\"\r\n aria-describedby=\"email-error\" value=\"{{options.Value.Text}}\"\r\n aria-invalid=\"true\" formControlName=\"{{options.Name}}\" type=\"text\"\r\n [class.is-invalid]=\"ReCaptchaFormControl.invalid && ReCaptchaFormControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" autocomplete=\"{{options.AutoComplete}}\"\r\n (change)=\"onTextChange($event)\" [readonly]=\"options.IsReadonly\" />\r\n\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\"\r\n [dir]=\"textDir\"\r\n *ngIf=\"(ReCaptchaFormControl.invalid && ReCaptchaFormControl.touched)\">\r\n {{getErrorValidation(ReCaptchaFormControl.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" }]
128
- }], ctorParameters: function () { return [{ type: i1.ControlUtility }, { type: i2.RequestHandlerService }, { type: i3.FormGroupDirective }, { type: i2.UtilityService }, { type: i2.ControlValidationService }, { type: i4.GlobalSettings }]; }, propDecorators: { group: [{
129
- type: Input
130
- }], options: [{
131
- type: Input
132
- }], OnChange: [{
133
- type: Output
134
- }] } });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjYXB0Y2hhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9SZWNhcHRjaGEvUmVjYXB0Y2hhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9SZWNhcHRjaGEvUmVjYXB0Y2hhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFZLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQW9FLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0gsT0FBTyxFQUFtRCxtQkFBbUIsRUFBa0IsTUFBTSwwQkFBMEIsQ0FBQztBQUdoSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7O0FBTWhFLE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFBb0IsY0FBOEIsRUFBVSxxQkFBNEMsRUFDL0Ysb0JBQXdDLEVBQVMsY0FBOEIsRUFDOUUsd0JBQWtELEVBQVUsY0FBOEI7UUFGaEYsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUMvRix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQW9CO1FBQVMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlFLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFJMUYsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFHeEMsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIseUJB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dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLCBSZXF1ZXN0T3B0aW9uc01vZGVsLCBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IEdsb2JhbFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0dsb2JhbFNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWNhcHRjaGFPcHRpb25zIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9SZWNhcHRjaGFPcHRpb25zJztcclxuaW1wb3J0IHsgUmVjYXB0Y2hhTW9kZWwgfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL1JlY2FwdGNoYSc7XHJcbmltcG9ydCB7IENhcHRjaGFTdHlsZSB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvQ2FwdGNoYVN0eWxlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnQkJTRi1SZWNhcHRjaGEnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9SZWNhcHRjaGEuY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVjYXB0Y2hhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBtYXJrQWxsQXNUb3VjaGVkOiBib29sZWFuO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udHJvbFV0aWxpdHk6IENvbnRyb2xVdGlsaXR5LCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIHJlY2FwdGNoYUNvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmUsIHB1YmxpYyBVdGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbnRyb2xWYWxpZGF0aW9uU2VydmljZTogQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLCBwcml2YXRlIGdsb2JhbFNldHRpbmdzOiBHbG9iYWxTZXR0aW5ncykge1xyXG4gIH1cclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFJlY2FwdGNoYU9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIE9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBSZUNhcHRjaGFGb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sO1xyXG4gIHZhbGlkYXRpb25SdWxlcyA9IFtdO1xyXG4gIHZhbGlkYXRpb25SdWxlc0FzeW5jID0gW107XHJcbiAgaW1hZ2U6IHN0cmluZ1xyXG4gIHJlY2FwdGNoYU1vZGVsOiBSZWNhcHRjaGFNb2RlbCA9IG5ldyBSZWNhcHRjaGFNb2RlbCgpO1xyXG4gIHRleHREaXI7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYodGhpcy5vcHRpb25zLkZvcmNlRGlyZWN0aW9uKVxyXG4gICAgdGhpcy50ZXh0RGlyPXRoaXMub3B0aW9ucy5Gb3JjZURpcmVjdGlvbj09Mj8ncnRsJzonbHRyJztcclxuICAgIGVsc2VcclxuICAgIHRoaXMudGV4dERpcj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKT09J2FyJz8ncnRsJzonbHRyJztcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLmlzQ3JlYXRlZEJlZm9yID0gZmFsc2VcclxuXHJcbiAgICAgdGhpcy5sb2FkSW1hZ2UoKTtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLlZpZXdUeXBlKVxyXG4gICAgICB0aGlzLm9wdGlvbnMuVmlld1R5cGUgPSB0aGlzLmdsb2JhbFNldHRpbmdzLlZpZXdUeXBlO1xyXG5cclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sID0gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm9wdGlvbnMuTmFtZV07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IFwiXCIpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5MYWJlbFZhbHVlID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKHRoaXMub3B0aW9ucy5MYWJlbEtleSk7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgVmFsaWRhdGlvbnMgPSB0aGlzLm9wdGlvbnMuQ3VzdG9tVmFsaWRhdGlvblxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgVmFsaWRhdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgVmFsaWRhdGlvbiA9IFZhbGlkYXRpb25zW2luZGV4XTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5KTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHRoaXMuUmVDYXB0Y2hhRm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlc0FzeW5jKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuSXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlY2FwdGNoYUNvbnRyb2xIb3N0Lm5nU3VibWl0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgdGhpcy5ncm91cC5tYXJrQWxsQXNUb3VjaGVkKClcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gdHJ1ZVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGxvYWRJbWFnZSgpIHtcclxuICAgIGxldCBzdHlsZTogQ2FwdGNoYVN0eWxlID0gbmV3IENhcHRjaGFTdHlsZSgpO1xyXG4gICAgc3R5bGUuQmFja2dyb3VuZENvbG9yUHJpbWFyeSA9IHRoaXMub3B0aW9ucy5CYWNrZ3JvdW5kQ29sb3JQcmltYXJ5O1xyXG4gICAgc3R5bGUuQmFja2dyb3VuZENvbG9yU2Vjb25kYXJ5ID0gdGhpcy5vcHRpb25zLkJhY2tncm91bmRDb2xvclNlY29uZGFyeTtcclxuICAgIHN0eWxlLlRleHRDb2xvclByaW1hcnk9IHRoaXMub3B0aW9ucy5UZXh0Q29sb3JQcmltYXJ5O1xyXG4gICAgc3R5bGUuVGV4dENvbG9yU2Vjb25kYXJ5ID0gdGhpcy5vcHRpb25zLlRleHRDb2xvclNlY29uZGFyeTtcclxuICAgIHN0eWxlLkZvbnRTaXplID0gdGhpcy5vcHRpb25zLkZvbnRTaXplO1xyXG4gICAgbGV0IHJlcXVlc3RPcHRpb25zTW9kZWwgPSBuZXcgUmVxdWVzdE9wdGlvbnNNb2RlbCgpXHJcbiAgICByZXF1ZXN0T3B0aW9uc01vZGVsLmRpc2FibGVCbG9ja1VJID0gdHJ1ZTtcclxuICAgIHJlcXVlc3RPcHRpb25zTW9kZWwuZGlzYWJsZVN1Y2Nlc3NOb3RpZmljYXRpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UucG9zdCh0aGlzLm9wdGlvbnMuQWN0aW9uVVJMLCBzdHlsZSwgbnVsbCwgbnVsbCwgcmVxdWVzdE9wdGlvbnNNb2RlbCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgbGV0IG1vZGVsID0gcmVzIGFzIGFueVxyXG4gICAgICB0aGlzLnJlY2FwdGNoYU1vZGVsLklEID0gbW9kZWwuaWQ7XHJcbiAgICAgIHRoaXMucmVjYXB0Y2hhTW9kZWwuRW5jcnlwdGVkVGV4dCA9IG1vZGVsLmVuY3J5cHRlZFRleHQ7XHJcbiAgICAgIHRoaXMucmVjYXB0Y2hhTW9kZWwuSW1hZ2VKcGVnID0gbW9kZWwuaW1hZ2VKcGVnO1xyXG4gICAgICB0aGlzLmltYWdlID0gJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJyArIHRoaXMucmVjYXB0Y2hhTW9kZWwuSW1hZ2VKcGVnO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2V0QXR0cmlidXRlRm9yQ29udHJvbCh0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICByZXNldEVycm9yID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UucmVtb3ZlR2xvYmFsRXJyb3IoKTtcclxuICB9XHJcblxyXG4gIHNob3dHbG9iYWxFcnJvcigpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2hvd0dsb2JhbEVycm9yKClcclxuICB9XHJcblxyXG4gIGdldEVycm9yVmFsaWRhdGlvbihFcnJvckxpc3QpIHtcclxuXHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25UZXh0Q2hhbmdlKHZhbHVlVGV4dCkge1xyXG4gICAgbGV0IHZhbHVlID0gdmFsdWVUZXh0LnRhcmdldC52YWx1ZTtcclxuICAgIHRoaXMucmVjYXB0Y2hhTW9kZWwuVGV4dCA9IHZhbHVlO1xyXG4gICAgdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLk5hbWUpLnNldFZhbHVlKHRoaXMucmVjYXB0Y2hhTW9kZWwpO1xyXG4gICAgdGhpcy5vcHRpb25zLlZhbHVlID0gdGhpcy5yZWNhcHRjaGFNb2RlbDtcclxuICAgIHRoaXMuT25DaGFuZ2UuZW1pdCh0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sLnZhbHVlKTtcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBSZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LlJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbih0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgdGhpcy5vcHRpb25zKVxyXG4gIH1cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIEFkZFJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuUmVDYXB0Y2hhRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIFJlbW92ZUN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVDdXN0b21WYWxpZGF0aW9uKHRoaXMuUmVDYXB0Y2hhRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCBDdXN0b21WYWxpZGF0aW9uKVxyXG4gIH1cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIEFkZEN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRDdXN0b21WYWxpZGF0aW9uKHRoaXMuUmVDYXB0Y2hhRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCBDdXN0b21WYWxpZGF0aW9uKVxyXG4gIH1cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIElzVmFsaWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LklzVmFsaWQodGhpcy5SZUNhcHRjaGFGb3JtQ29udHJvbClcclxuICB9XHJcbn1cclxuXHJcblxyXG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBiYnNmLWNvbnRyb2wgYmJzZi1yZWNhcHRjaGFcIiBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XHJcbiAgPGltZyBjbGFzcz1cImgtMTAwIHctMTAwXCIgW3NyY109XCJpbWFnZVwiIC8+XHJcbiAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb25cIiB0eXBlPVwiYnV0dG9uXCIgbmdiVG9vbHRpcD1cInt7VXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUmVsb2FkQ2FwdGNoYScpfX1cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImxvYWRJbWFnZSgpXCI+XHJcbiAgICA8aSBjbGFzcz1cImZhcyBmYS1yZWZyZXNoXCI+PC9pPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwiKG9wdGlvbnMuVmlld1R5cGU9PTEpPydiYnNmLXZlcnRpY2FsJzonYmJzZi1ob3Jpem9udGFsJ1wiPlxyXG4gICAgPCEtLWxhYmVsLS0+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCIhb3B0aW9ucy5IaWRlTGFiZWxcIiBjbGFzcz1cImJic2YtbGFiZWwge3tvcHRpb25zLkxhYmVsRXh0cmFDbGFzc2VzfX1cIj5cclxuICAgICAge3tvcHRpb25zLkxhYmVsVmFsdWV9fVxyXG4gICAgICA8IS0tQXN0ZXJpc2stLT5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIob3B0aW9ucy5TaG93QXN0ZXJpc2smJm9wdGlvbnMuSXNSZXF1aXJlZCl8fChvcHRpb25zLklzUmVxdWlyZWQpXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICA8L2xhYmVsPlxyXG4gICAgPCEtLWlucHV0LS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi1pbnB1dC1jb250YWluZXJcIj5cclxuICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHt7b3B0aW9ucy5FeHRyYUNsYXNzZXN9fVwiXHJcbiAgICAgIFtkaXJdPVwidGV4dERpclwiXHJcbiAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiB2YWx1ZT1cInt7b3B0aW9ucy5WYWx1ZS5UZXh0fX1cIlxyXG4gICAgICAgICAgICAgYXJpYS1pbnZhbGlkPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInt7b3B0aW9ucy5OYW1lfX1cIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJSZUNhcHRjaGFGb3JtQ29udHJvbC5pbnZhbGlkICYmIFJlQ2FwdGNoYUZvcm1Db250cm9sLnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e29wdGlvbnMuUGxhY2Vob2xkZXJ9fVwiIGlkPVwie3tvcHRpb25zLk5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cInt7b3B0aW9ucy5BdXRvQ29tcGxldGV9fVwiXHJcbiAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVGV4dENoYW5nZSgkZXZlbnQpXCIgW3JlYWRvbmx5XT1cIm9wdGlvbnMuSXNSZWFkb25seVwiIC8+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInN1YnRleHQtY29udGFpbmVyXCI+XHJcbiAgICA8IS0tIExhYmVsRGVzY3JpcHRpb24tLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLWNvbnRyb2wtZGVzY1wiICpuZ0lmPVwib3B0aW9ucy5MYWJlbERlc2NyaXB0aW9uIT1udWxsXCI+e3tvcHRpb25zLkxhYmVsRGVzY3JpcHRpb259fTwvZGl2PlxyXG4gICAgPCEtLSByZXF1aXJlZFRleHQtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLXZhbGlkYXRpb25cIlxyXG4gICAgW2Rpcl09XCJ0ZXh0RGlyXCJcclxuICAgICAgICAgKm5nSWY9XCIoUmVDYXB0Y2hhRm9ybUNvbnRyb2wuaW52YWxpZCAmJiBSZUNhcHRjaGFGb3JtQ29udHJvbC50b3VjaGVkKVwiPlxyXG4gICAgICB7e2dldEVycm9yVmFsaWRhdGlvbihSZUNhcHRjaGFGb3JtQ29udHJvbC5lcnJvcnN8a2V5dmFsdWUpfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCIoZ3JvdXAudmFsaWQmJmdyb3VwLmRpcnR5JiZncm91cC50b3VjaGVkICl8fChncm91cC51bnRvdWNoZWQmJmdyb3VwLmludmFsaWQmJmdyb3VwLmRpcnR5KSBcIj57e3Jlc2V0RXJyb3IoKX19PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { FormControl, Validators } from '@angular/forms';
3
+ import { RequestOptionsModel } from '@bnsights/bbsf-utilities';
4
+ import { RecaptchaModel } from '../../Shared/Models/Recaptcha';
5
+ import { CaptchaStyle } from '../../Shared/Models/CaptchaStyle';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../Shared/services/ControlUtility";
8
+ import * as i2 from "@bnsights/bbsf-utilities";
9
+ import * as i3 from "@angular/forms";
10
+ import * as i4 from "../../Shared/services/GlobalSettings.service";
11
+ import * as i5 from "@angular/common";
12
+ import * as i6 from "@ng-bootstrap/ng-bootstrap";
13
+ import * as i7 from "@angular/cdk/bidi";
14
+ import * as i8 from "ngx-intl-tel-input";
15
+ export class RecaptchaComponent {
16
+ constructor(controlUtility, requestHandlerService, recaptchaControlHost, UtilityService, controlValidationService, globalSettings) {
17
+ this.controlUtility = controlUtility;
18
+ this.requestHandlerService = requestHandlerService;
19
+ this.recaptchaControlHost = recaptchaControlHost;
20
+ this.UtilityService = UtilityService;
21
+ this.controlValidationService = controlValidationService;
22
+ this.globalSettings = globalSettings;
23
+ this.OnChange = new EventEmitter();
24
+ this.validationRules = [];
25
+ this.validationRulesAsync = [];
26
+ this.recaptchaModel = new RecaptchaModel();
27
+ this.resetError = () => {
28
+ this.controlValidationService.removeGlobalError();
29
+ };
30
+ //External Method
31
+ this.RemoveRequiredValidation = () => {
32
+ this.controlUtility.RemoveRequiredValidation(this.ReCaptchaFormControl, this.validationRules, this.options);
33
+ };
34
+ //External Method
35
+ this.AddRequiredValidation = () => {
36
+ this.controlUtility.AddRequiredValidation(this.ReCaptchaFormControl, this.validationRules, this.options);
37
+ };
38
+ //External Method
39
+ this.RemoveCustomValidation = (CustomValidation) => {
40
+ this.controlUtility.RemoveCustomValidation(this.ReCaptchaFormControl, this.validationRules, CustomValidation);
41
+ };
42
+ //External Method
43
+ this.AddCustomValidation = (CustomValidation) => {
44
+ this.controlUtility.AddCustomValidation(this.ReCaptchaFormControl, this.validationRules, CustomValidation);
45
+ };
46
+ //External Method
47
+ this.IsValid = () => {
48
+ this.controlUtility.IsValid(this.ReCaptchaFormControl);
49
+ };
50
+ }
51
+ ngOnInit() {
52
+ if (this.options.ForceDirection)
53
+ this.textDir = this.options.ForceDirection == 2 ? 'rtl' : 'ltr';
54
+ else
55
+ this.textDir = localStorage.getItem('language') == 'ar' ? 'rtl' : 'ltr';
56
+ this.controlValidationService.isCreatedBefor = false;
57
+ this.loadImage();
58
+ if (!this.options.ViewType)
59
+ this.options.ViewType = this.globalSettings.ViewType;
60
+ this.group.addControl(this.options.Name, new FormControl(''));
61
+ this.ReCaptchaFormControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
62
+ if (this.options.LabelKey != null && this.options.LabelKey != "")
63
+ this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
64
+ if (this.options.IsRequired) {
65
+ this.validationRules.push(Validators.required);
66
+ }
67
+ if (this.options.CustomValidation.length > 0) {
68
+ let Validations = this.options.CustomValidation;
69
+ for (let index = 0; index < Validations.length; index++) {
70
+ const Validation = Validations[index];
71
+ this.validationRules.push(Validation.functionBody);
72
+ }
73
+ }
74
+ this.ReCaptchaFormControl.setValidators(this.validationRules);
75
+ this.ReCaptchaFormControl.setAsyncValidators(this.validationRulesAsync);
76
+ if (this.options.IsDisabled) {
77
+ this.ReCaptchaFormControl.disable();
78
+ }
79
+ this.recaptchaControlHost.ngSubmit.subscribe((value) => {
80
+ this.group.markAllAsTouched();
81
+ this.markAllAsTouched = true;
82
+ });
83
+ }
84
+ loadImage() {
85
+ let style = new CaptchaStyle();
86
+ style.BackgroundColorPrimary = this.options.BackgroundColorPrimary;
87
+ style.BackgroundColorSecondary = this.options.BackgroundColorSecondary;
88
+ style.TextColorPrimary = this.options.TextColorPrimary;
89
+ style.TextColorSecondary = this.options.TextColorSecondary;
90
+ style.FontSize = this.options.FontSize;
91
+ let requestOptionsModel = new RequestOptionsModel();
92
+ requestOptionsModel.disableBlockUI = true;
93
+ requestOptionsModel.disableSuccessNotification = true;
94
+ this.requestHandlerService.post(this.options.ActionURL, style, null, null, requestOptionsModel).subscribe((res) => {
95
+ let model = res;
96
+ this.recaptchaModel.ID = model.id;
97
+ this.recaptchaModel.EncryptedText = model.encryptedText;
98
+ this.recaptchaModel.ImageJpeg = model.imageJpeg;
99
+ this.image = 'data:image/jpeg;base64,' + this.recaptchaModel.ImageJpeg;
100
+ });
101
+ }
102
+ ngAfterViewInit() {
103
+ this.controlUtility.setAttributeForControl(this.options);
104
+ }
105
+ showGlobalError() {
106
+ this.controlUtility.showGlobalError();
107
+ }
108
+ getErrorValidation(ErrorList) {
109
+ if (this.markAllAsTouched && this.group.invalid) {
110
+ this.showGlobalError();
111
+ this.markAllAsTouched = false;
112
+ }
113
+ return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
114
+ }
115
+ onTextChange(valueText) {
116
+ let value = valueText.target.value;
117
+ this.recaptchaModel.Text = value;
118
+ this.group.get(this.options.Name).setValue(this.recaptchaModel);
119
+ this.options.Value = this.recaptchaModel;
120
+ this.OnChange.emit(this.ReCaptchaFormControl.value);
121
+ }
122
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: RecaptchaComponent, deps: [{ token: i1.ControlUtility }, { token: i2.RequestHandlerService }, { token: i3.FormGroupDirective }, { token: i2.UtilityService }, { token: i2.ControlValidationService }, { token: i4.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component }); }
123
+ static { thiscmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: RecaptchaComponent, selector: "BBSF-Recaptcha", inputs: { group: "group", options: "options" }, outputs: { OnChange: "OnChange" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-recaptcha\" [formGroup]=\"group\">\r\n <img class=\"h-100 w-100\" [src]=\"image\" />\r\n <button class=\"btn btn-sm btn-icon\" type=\"button\" ngbTooltip=\"{{UtilityService.getResourceValue('ReloadCaptcha')}}\"\r\n (click)=\"loadImage()\">\r\n <i class=\"fas fa-refresh\"></i>\r\n </button>\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 <input class=\"form-control {{options.ExtraClasses}}\"\r\n [dir]=\"textDir\"\r\n aria-describedby=\"email-error\" value=\"{{options.Value.Text}}\"\r\n aria-invalid=\"true\" formControlName=\"{{options.Name}}\" type=\"text\"\r\n [class.is-invalid]=\"ReCaptchaFormControl.invalid && ReCaptchaFormControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" autocomplete=\"{{options.AutoComplete}}\"\r\n (change)=\"onTextChange($event)\" [readonly]=\"options.IsReadonly\" />\r\n\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\"\r\n [dir]=\"textDir\"\r\n *ngIf=\"(ReCaptchaFormControl.invalid && ReCaptchaFormControl.touched)\">\r\n {{getErrorValidation(ReCaptchaFormControl.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", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i7.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i8.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i5.KeyValuePipe, name: "keyvalue" }] }); }
124
+ }
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: RecaptchaComponent, decorators: [{
126
+ type: Component,
127
+ args: [{ selector: 'BBSF-Recaptcha', template: "<div class=\"form-group bbsf-control bbsf-recaptcha\" [formGroup]=\"group\">\r\n <img class=\"h-100 w-100\" [src]=\"image\" />\r\n <button class=\"btn btn-sm btn-icon\" type=\"button\" ngbTooltip=\"{{UtilityService.getResourceValue('ReloadCaptcha')}}\"\r\n (click)=\"loadImage()\">\r\n <i class=\"fas fa-refresh\"></i>\r\n </button>\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 <input class=\"form-control {{options.ExtraClasses}}\"\r\n [dir]=\"textDir\"\r\n aria-describedby=\"email-error\" value=\"{{options.Value.Text}}\"\r\n aria-invalid=\"true\" formControlName=\"{{options.Name}}\" type=\"text\"\r\n [class.is-invalid]=\"ReCaptchaFormControl.invalid && ReCaptchaFormControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" autocomplete=\"{{options.AutoComplete}}\"\r\n (change)=\"onTextChange($event)\" [readonly]=\"options.IsReadonly\" />\r\n\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\"\r\n [dir]=\"textDir\"\r\n *ngIf=\"(ReCaptchaFormControl.invalid && ReCaptchaFormControl.touched)\">\r\n {{getErrorValidation(ReCaptchaFormControl.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" }]
128
+ }], ctorParameters: () => [{ type: i1.ControlUtility }, { type: i2.RequestHandlerService }, { type: i3.FormGroupDirective }, { type: i2.UtilityService }, { type: i2.ControlValidationService }, { type: i4.GlobalSettings }], propDecorators: { group: [{
129
+ type: Input
130
+ }], options: [{
131
+ type: Input
132
+ }], OnChange: [{
133
+ type: Output
134
+ }] } });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjYXB0Y2hhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9SZWNhcHRjaGEvUmVjYXB0Y2hhLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9SZWNhcHRjaGEvUmVjYXB0Y2hhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFZLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQW9FLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0gsT0FBTyxFQUFtRCxtQkFBbUIsRUFBa0IsTUFBTSwwQkFBMEIsQ0FBQztBQUdoSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7O0FBTWhFLE1BQU0sT0FBTyxrQkFBa0I7SUFFN0IsWUFBb0IsY0FBOEIsRUFBVSxxQkFBNEMsRUFDL0Ysb0JBQXdDLEVBQVMsY0FBOEIsRUFDOUUsd0JBQWtELEVBQVUsY0FBOEI7UUFGaEYsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUMvRix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQW9CO1FBQVMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlFLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFJMUYsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFHeEMsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIseUJB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dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWxpZGF0aW9uU2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLCBSZXF1ZXN0T3B0aW9uc01vZGVsLCBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IEdsb2JhbFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0dsb2JhbFNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWNhcHRjaGFPcHRpb25zIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9SZWNhcHRjaGFPcHRpb25zJztcclxuaW1wb3J0IHsgUmVjYXB0Y2hhTW9kZWwgfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL1JlY2FwdGNoYSc7XHJcbmltcG9ydCB7IENhcHRjaGFTdHlsZSB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvQ2FwdGNoYVN0eWxlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnQkJTRi1SZWNhcHRjaGEnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9SZWNhcHRjaGEuY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVjYXB0Y2hhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBtYXJrQWxsQXNUb3VjaGVkOiBib29sZWFuO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udHJvbFV0aWxpdHk6IENvbnRyb2xVdGlsaXR5LCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIHJlY2FwdGNoYUNvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmUsIHB1YmxpYyBVdGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbnRyb2xWYWxpZGF0aW9uU2VydmljZTogQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLCBwcml2YXRlIGdsb2JhbFNldHRpbmdzOiBHbG9iYWxTZXR0aW5ncykge1xyXG4gIH1cclxuICBASW5wdXQoKSBncm91cDogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IFJlY2FwdGNoYU9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIE9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBSZUNhcHRjaGFGb3JtQ29udHJvbDogQWJzdHJhY3RDb250cm9sO1xyXG4gIHZhbGlkYXRpb25SdWxlcyA9IFtdO1xyXG4gIHZhbGlkYXRpb25SdWxlc0FzeW5jID0gW107XHJcbiAgaW1hZ2U6IHN0cmluZ1xyXG4gIHJlY2FwdGNoYU1vZGVsOiBSZWNhcHRjaGFNb2RlbCA9IG5ldyBSZWNhcHRjaGFNb2RlbCgpO1xyXG4gIHRleHREaXI7XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYodGhpcy5vcHRpb25zLkZvcmNlRGlyZWN0aW9uKVxyXG4gICAgdGhpcy50ZXh0RGlyPXRoaXMub3B0aW9ucy5Gb3JjZURpcmVjdGlvbj09Mj8ncnRsJzonbHRyJztcclxuICAgIGVsc2VcclxuICAgIHRoaXMudGV4dERpcj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKT09J2FyJz8ncnRsJzonbHRyJztcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLmlzQ3JlYXRlZEJlZm9yID0gZmFsc2VcclxuXHJcbiAgICAgdGhpcy5sb2FkSW1hZ2UoKTtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLlZpZXdUeXBlKVxyXG4gICAgICB0aGlzLm9wdGlvbnMuVmlld1R5cGUgPSB0aGlzLmdsb2JhbFNldHRpbmdzLlZpZXdUeXBlO1xyXG5cclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sID0gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm9wdGlvbnMuTmFtZV07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IFwiXCIpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5MYWJlbFZhbHVlID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKHRoaXMub3B0aW9ucy5MYWJlbEtleSk7XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgVmFsaWRhdGlvbnMgPSB0aGlzLm9wdGlvbnMuQ3VzdG9tVmFsaWRhdGlvblxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgVmFsaWRhdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgVmFsaWRhdGlvbiA9IFZhbGlkYXRpb25zW2luZGV4XTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5KTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHRoaXMuUmVDYXB0Y2hhRm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlc0FzeW5jKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuSXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlY2FwdGNoYUNvbnRyb2xIb3N0Lm5nU3VibWl0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgdGhpcy5ncm91cC5tYXJrQWxsQXNUb3VjaGVkKClcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gdHJ1ZVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGxvYWRJbWFnZSgpIHtcclxuICAgIGxldCBzdHlsZTogQ2FwdGNoYVN0eWxlID0gbmV3IENhcHRjaGFTdHlsZSgpO1xyXG4gICAgc3R5bGUuQmFja2dyb3VuZENvbG9yUHJpbWFyeSA9IHRoaXMub3B0aW9ucy5CYWNrZ3JvdW5kQ29sb3JQcmltYXJ5O1xyXG4gICAgc3R5bGUuQmFja2dyb3VuZENvbG9yU2Vjb25kYXJ5ID0gdGhpcy5vcHRpb25zLkJhY2tncm91bmRDb2xvclNlY29uZGFyeTtcclxuICAgIHN0eWxlLlRleHRDb2xvclByaW1hcnk9IHRoaXMub3B0aW9ucy5UZXh0Q29sb3JQcmltYXJ5O1xyXG4gICAgc3R5bGUuVGV4dENvbG9yU2Vjb25kYXJ5ID0gdGhpcy5vcHRpb25zLlRleHRDb2xvclNlY29uZGFyeTtcclxuICAgIHN0eWxlLkZvbnRTaXplID0gdGhpcy5vcHRpb25zLkZvbnRTaXplO1xyXG4gICAgbGV0IHJlcXVlc3RPcHRpb25zTW9kZWwgPSBuZXcgUmVxdWVzdE9wdGlvbnNNb2RlbCgpXHJcbiAgICByZXF1ZXN0T3B0aW9uc01vZGVsLmRpc2FibGVCbG9ja1VJID0gdHJ1ZTtcclxuICAgIHJlcXVlc3RPcHRpb25zTW9kZWwuZGlzYWJsZVN1Y2Nlc3NOb3RpZmljYXRpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UucG9zdCh0aGlzLm9wdGlvbnMuQWN0aW9uVVJMLCBzdHlsZSwgbnVsbCwgbnVsbCwgcmVxdWVzdE9wdGlvbnNNb2RlbCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgbGV0IG1vZGVsID0gcmVzIGFzIGFueVxyXG4gICAgICB0aGlzLnJlY2FwdGNoYU1vZGVsLklEID0gbW9kZWwuaWQ7XHJcbiAgICAgIHRoaXMucmVjYXB0Y2hhTW9kZWwuRW5jcnlwdGVkVGV4dCA9IG1vZGVsLmVuY3J5cHRlZFRleHQ7XHJcbiAgICAgIHRoaXMucmVjYXB0Y2hhTW9kZWwuSW1hZ2VKcGVnID0gbW9kZWwuaW1hZ2VKcGVnO1xyXG4gICAgICB0aGlzLmltYWdlID0gJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJyArIHRoaXMucmVjYXB0Y2hhTW9kZWwuSW1hZ2VKcGVnO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2V0QXR0cmlidXRlRm9yQ29udHJvbCh0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICByZXNldEVycm9yID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UucmVtb3ZlR2xvYmFsRXJyb3IoKTtcclxuICB9XHJcblxyXG4gIHNob3dHbG9iYWxFcnJvcigpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2hvd0dsb2JhbEVycm9yKClcclxuICB9XHJcblxyXG4gIGdldEVycm9yVmFsaWRhdGlvbihFcnJvckxpc3QpIHtcclxuXHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFV0aWxpdHkuZ2V0RXJyb3JWYWxpZGF0aW9uTWFzc2FnZShFcnJvckxpc3QsIHRoaXMuZ3JvdXAsIHRoaXMub3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25UZXh0Q2hhbmdlKHZhbHVlVGV4dCkge1xyXG4gICAgbGV0IHZhbHVlID0gdmFsdWVUZXh0LnRhcmdldC52YWx1ZTtcclxuICAgIHRoaXMucmVjYXB0Y2hhTW9kZWwuVGV4dCA9IHZhbHVlO1xyXG4gICAgdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLk5hbWUpLnNldFZhbHVlKHRoaXMucmVjYXB0Y2hhTW9kZWwpO1xyXG4gICAgdGhpcy5vcHRpb25zLlZhbHVlID0gdGhpcy5yZWNhcHRjaGFNb2RlbDtcclxuICAgIHRoaXMuT25DaGFuZ2UuZW1pdCh0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sLnZhbHVlKTtcclxuICB9XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBSZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LlJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbih0aGlzLlJlQ2FwdGNoYUZvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgdGhpcy5vcHRpb25zKVxyXG4gIH1cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIEFkZFJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuUmVDYXB0Y2hhRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIFJlbW92ZUN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVDdXN0b21WYWxpZGF0aW9uKHRoaXMuUmVDYXB0Y2hhRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCBDdXN0b21WYWxpZGF0aW9uKVxyXG4gIH1cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIEFkZEN1c3RvbVZhbGlkYXRpb24gPSAoQ3VzdG9tVmFsaWRhdGlvbikgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRDdXN0b21WYWxpZGF0aW9uKHRoaXMuUmVDYXB0Y2hhRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCBDdXN0b21WYWxpZGF0aW9uKVxyXG4gIH1cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIElzVmFsaWQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LklzVmFsaWQodGhpcy5SZUNhcHRjaGFGb3JtQ29udHJvbClcclxuICB9XHJcbn1cclxuXHJcblxyXG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBiYnNmLWNvbnRyb2wgYmJzZi1yZWNhcHRjaGFcIiBbZm9ybUdyb3VwXT1cImdyb3VwXCI+XHJcbiAgPGltZyBjbGFzcz1cImgtMTAwIHctMTAwXCIgW3NyY109XCJpbWFnZVwiIC8+XHJcbiAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb25cIiB0eXBlPVwiYnV0dG9uXCIgbmdiVG9vbHRpcD1cInt7VXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUmVsb2FkQ2FwdGNoYScpfX1cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImxvYWRJbWFnZSgpXCI+XHJcbiAgICA8aSBjbGFzcz1cImZhcyBmYS1yZWZyZXNoXCI+PC9pPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwiKG9wdGlvbnMuVmlld1R5cGU9PTEpPydiYnNmLXZlcnRpY2FsJzonYmJzZi1ob3Jpem9udGFsJ1wiPlxyXG4gICAgPCEtLWxhYmVsLS0+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCIhb3B0aW9ucy5IaWRlTGFiZWxcIiBjbGFzcz1cImJic2YtbGFiZWwge3tvcHRpb25zLkxhYmVsRXh0cmFDbGFzc2VzfX1cIj5cclxuICAgICAge3tvcHRpb25zLkxhYmVsVmFsdWV9fVxyXG4gICAgICA8IS0tQXN0ZXJpc2stLT5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIob3B0aW9ucy5TaG93QXN0ZXJpc2smJm9wdGlvbnMuSXNSZXF1aXJlZCl8fChvcHRpb25zLklzUmVxdWlyZWQpXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICA8L2xhYmVsPlxyXG4gICAgPCEtLWlucHV0LS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi1pbnB1dC1jb250YWluZXJcIj5cclxuICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHt7b3B0aW9ucy5FeHRyYUNsYXNzZXN9fVwiXHJcbiAgICAgIFtkaXJdPVwidGV4dERpclwiXHJcbiAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiB2YWx1ZT1cInt7b3B0aW9ucy5WYWx1ZS5UZXh0fX1cIlxyXG4gICAgICAgICAgICAgYXJpYS1pbnZhbGlkPVwidHJ1ZVwiIGZvcm1Db250cm9sTmFtZT1cInt7b3B0aW9ucy5OYW1lfX1cIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJSZUNhcHRjaGFGb3JtQ29udHJvbC5pbnZhbGlkICYmIFJlQ2FwdGNoYUZvcm1Db250cm9sLnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e29wdGlvbnMuUGxhY2Vob2xkZXJ9fVwiIGlkPVwie3tvcHRpb25zLk5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cInt7b3B0aW9ucy5BdXRvQ29tcGxldGV9fVwiXHJcbiAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVGV4dENoYW5nZSgkZXZlbnQpXCIgW3JlYWRvbmx5XT1cIm9wdGlvbnMuSXNSZWFkb25seVwiIC8+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInN1YnRleHQtY29udGFpbmVyXCI+XHJcbiAgICA8IS0tIExhYmVsRGVzY3JpcHRpb24tLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLWNvbnRyb2wtZGVzY1wiICpuZ0lmPVwib3B0aW9ucy5MYWJlbERlc2NyaXB0aW9uIT1udWxsXCI+e3tvcHRpb25zLkxhYmVsRGVzY3JpcHRpb259fTwvZGl2PlxyXG4gICAgPCEtLSByZXF1aXJlZFRleHQtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYnNmLXZhbGlkYXRpb25cIlxyXG4gICAgW2Rpcl09XCJ0ZXh0RGlyXCJcclxuICAgICAgICAgKm5nSWY9XCIoUmVDYXB0Y2hhRm9ybUNvbnRyb2wuaW52YWxpZCAmJiBSZUNhcHRjaGFGb3JtQ29udHJvbC50b3VjaGVkKVwiPlxyXG4gICAgICB7e2dldEVycm9yVmFsaWRhdGlvbihSZUNhcHRjaGFGb3JtQ29udHJvbC5lcnJvcnN8a2V5dmFsdWUpfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCIoZ3JvdXAudmFsaWQmJmdyb3VwLmRpcnR5JiZncm91cC50b3VjaGVkICl8fChncm91cC51bnRvdWNoZWQmJmdyb3VwLmludmFsaWQmJmdyb3VwLmRpcnR5KSBcIj57e3Jlc2V0RXJyb3IoKX19PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=