@sunbird-cb/utils 1.0.18 → 1.0.19-ang-13-16

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 (327) hide show
  1. package/bundles/sunbird-cb-utils.umd.js +2395 -3477
  2. package/bundles/sunbird-cb-utils.umd.js.map +1 -1
  3. package/esm2015/lib/components/image-crop/image-crop.component.js +38 -67
  4. package/esm2015/lib/components/image-crop/image-crop.module.js +52 -21
  5. package/esm2015/lib/constants/features.enum.js +555 -555
  6. package/esm2015/lib/constants/instances.enum.js +5 -5
  7. package/esm2015/lib/constants/misc.constants.js +2 -1
  8. package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +34 -34
  9. package/esm2015/lib/directives/class-change-on-scroll/class-change-on-scroll.module.js +17 -10
  10. package/esm2015/lib/directives/default-thumbnail/default-thumbnail.directive.js +20 -18
  11. package/esm2015/lib/directives/default-thumbnail/default-thumbnail.module.js +17 -10
  12. package/esm2015/lib/directives/image-responsive/image-responsive.directive.js +18 -24
  13. package/esm2015/lib/directives/image-responsive/image-responsive.module.js +17 -10
  14. package/esm2015/lib/directives/in-view-port/in-view-port.directive.js +17 -23
  15. package/esm2015/lib/directives/in-view-port/in-view-port.module.js +17 -10
  16. package/esm2015/lib/directives/navigation/navigation.directive.js +22 -18
  17. package/esm2015/lib/directives/navigation/navigation.module.js +17 -10
  18. package/esm2015/lib/directives/permission/permission.directive.js +10 -7
  19. package/esm2015/lib/directives/permission/permission.module.js +17 -10
  20. package/esm2015/lib/helpers/functions/getStringifiedQueryParams.js +4 -4
  21. package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +33 -32
  22. package/esm2015/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +29 -14
  23. package/esm2015/lib/helpers/logout/logout.component.js +18 -27
  24. package/esm2015/lib/helpers/logout/logout.module.js +25 -13
  25. package/esm2015/lib/models/contentRating.model.js +2 -12
  26. package/esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.js +13 -8
  27. package/esm2015/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.js +10 -12
  28. package/esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.module.js +17 -10
  29. package/esm2015/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.js +10 -6
  30. package/esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.module.js +17 -10
  31. package/esm2015/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.js +10 -17
  32. package/esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.js +17 -10
  33. package/esm2015/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +10 -6
  34. package/esm2015/lib/pipes/pipe-filter/pipe-filter.module.js +17 -10
  35. package/esm2015/lib/pipes/pipe-filter/pipe-filter.pipe.js +12 -8
  36. package/esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.module.js +17 -10
  37. package/esm2015/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.js +14 -10
  38. package/esm2015/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.js +17 -10
  39. package/esm2015/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.js +10 -6
  40. package/esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.module.js +17 -10
  41. package/esm2015/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.js +10 -6
  42. package/esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.module.js +17 -10
  43. package/esm2015/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.js +13 -9
  44. package/esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.module.js +17 -10
  45. package/esm2015/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.js +10 -12
  46. package/esm2015/lib/pipes/pipe-order-by/pipe-order-by.module.js +17 -10
  47. package/esm2015/lib/pipes/pipe-order-by/pipe-order-by.pipe.js +10 -9
  48. package/esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.module.js +17 -10
  49. package/esm2015/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.js +10 -6
  50. package/esm2015/lib/pipes/pipe-relative-time/pipe-relative-time.module.js +17 -10
  51. package/esm2015/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.js +10 -6
  52. package/esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.js +17 -10
  53. package/esm2015/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.js +11 -13
  54. package/esm2015/lib/resolvers/explore-detail.resolver.js +19 -32
  55. package/esm2015/lib/resolvers/marketing-offering.resolve.js +14 -19
  56. package/esm2015/lib/resolvers/page.constant.js +1 -1
  57. package/esm2015/lib/resolvers/page.model.js +2 -47
  58. package/esm2015/lib/resolvers/page.resolver.js +22 -30
  59. package/esm2015/lib/resolvers/resolver.model.js +2 -6
  60. package/esm2015/lib/services/auth-keycloak.service.js +14 -202
  61. package/esm2015/lib/services/auth-microsoft.service.js +16 -28
  62. package/esm2015/lib/services/card-content.model.js +1 -22
  63. package/esm2015/lib/services/configurations.model.js +2 -498
  64. package/esm2015/lib/services/configurations.service.js +9 -55
  65. package/esm2015/lib/services/content-strip-multiple.model.js +2 -75
  66. package/esm2015/lib/services/event.model.js +1 -109
  67. package/esm2015/lib/services/event.service.js +14 -27
  68. package/esm2015/lib/services/logger.service.js +12 -22
  69. package/esm2015/lib/services/ms-office.model.js +2 -8
  70. package/esm2015/lib/services/subapplication-respond.service.js +15 -170
  71. package/esm2015/lib/services/telemetry.service.js +58 -73
  72. package/esm2015/lib/services/user-preference.model.js +2 -38
  73. package/esm2015/lib/services/user-preference.service.js +18 -26
  74. package/esm2015/lib/services/utility.service.js +17 -40
  75. package/esm2015/lib/services/value.service.js +12 -18
  76. package/esm2015/lib/services/widget-content.model.js +1 -236
  77. package/esm2015/lib/services/widget-content.service.js +22 -32
  78. package/esm2015/lib/services/widget-resolver.model.js +2 -57
  79. package/esm2015/lib/services/widget-search.model.js +2 -126
  80. package/esm2015/public-api.js +74 -68
  81. package/esm2015/sunbird-cb-utils.js +2 -8
  82. package/fesm2015/sunbird-cb-utils.js +1845 -3142
  83. package/fesm2015/sunbird-cb-utils.js.map +1 -1
  84. package/lib/components/image-crop/image-crop.component.d.ts +4 -0
  85. package/lib/components/image-crop/image-crop.component.d.ts.map +1 -0
  86. package/lib/components/image-crop/image-crop.module.d.ts +15 -0
  87. package/lib/components/image-crop/image-crop.module.d.ts.map +1 -0
  88. package/lib/constants/features.enum.d.ts +1 -0
  89. package/lib/constants/features.enum.d.ts.map +1 -0
  90. package/lib/constants/instances.enum.d.ts +1 -0
  91. package/lib/constants/instances.enum.d.ts.map +1 -0
  92. package/lib/constants/misc.constants.d.ts +1 -0
  93. package/lib/constants/misc.constants.d.ts.map +1 -0
  94. package/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.d.ts +7 -3
  95. package/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.d.ts.map +1 -0
  96. package/lib/directives/class-change-on-scroll/class-change-on-scroll.module.d.ts +7 -0
  97. package/lib/directives/class-change-on-scroll/class-change-on-scroll.module.d.ts.map +1 -0
  98. package/lib/directives/default-thumbnail/default-thumbnail.directive.d.ts +4 -0
  99. package/lib/directives/default-thumbnail/default-thumbnail.directive.d.ts.map +1 -0
  100. package/lib/directives/default-thumbnail/default-thumbnail.module.d.ts +7 -0
  101. package/lib/directives/default-thumbnail/default-thumbnail.module.d.ts.map +1 -0
  102. package/lib/directives/image-responsive/image-responsive.directive.d.ts +4 -0
  103. package/lib/directives/image-responsive/image-responsive.directive.d.ts.map +1 -0
  104. package/lib/directives/image-responsive/image-responsive.module.d.ts +7 -0
  105. package/lib/directives/image-responsive/image-responsive.module.d.ts.map +1 -0
  106. package/lib/directives/in-view-port/in-view-port.directive.d.ts +4 -0
  107. package/lib/directives/in-view-port/in-view-port.directive.d.ts.map +1 -0
  108. package/lib/directives/in-view-port/in-view-port.module.d.ts +7 -0
  109. package/lib/directives/in-view-port/in-view-port.module.d.ts.map +1 -0
  110. package/lib/directives/navigation/navigation.directive.d.ts +4 -0
  111. package/lib/directives/navigation/navigation.directive.d.ts.map +1 -0
  112. package/lib/directives/navigation/navigation.module.d.ts +7 -0
  113. package/lib/directives/navigation/navigation.module.d.ts.map +1 -0
  114. package/lib/directives/permission/permission.directive.d.ts +4 -0
  115. package/lib/directives/permission/permission.directive.d.ts.map +1 -0
  116. package/lib/directives/permission/permission.module.d.ts +7 -0
  117. package/lib/directives/permission/permission.module.d.ts.map +1 -0
  118. package/lib/helpers/functions/getStringifiedQueryParams.d.ts +1 -0
  119. package/lib/helpers/functions/getStringifiedQueryParams.d.ts.map +1 -0
  120. package/lib/helpers/horizontal-scroller/horizontal-scroller.component.d.ts +4 -0
  121. package/lib/helpers/horizontal-scroller/horizontal-scroller.component.d.ts.map +1 -0
  122. package/lib/helpers/horizontal-scroller/horizontal-scroller.module.d.ts +10 -0
  123. package/lib/helpers/horizontal-scroller/horizontal-scroller.module.d.ts.map +1 -0
  124. package/lib/helpers/logout/logout.component.d.ts +6 -2
  125. package/lib/helpers/logout/logout.component.d.ts.map +1 -0
  126. package/lib/helpers/logout/logout.module.d.ts +9 -0
  127. package/lib/helpers/logout/logout.module.d.ts.map +1 -0
  128. package/lib/models/contentRating.model.d.ts +1 -0
  129. package/lib/models/contentRating.model.d.ts.map +1 -0
  130. package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.d.ts +7 -0
  131. package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.d.ts.map +1 -0
  132. package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.d.ts +4 -0
  133. package/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.d.ts.map +1 -0
  134. package/lib/pipes/pipe-count-transform/pipe-count-transform.module.d.ts +7 -0
  135. package/lib/pipes/pipe-count-transform/pipe-count-transform.module.d.ts.map +1 -0
  136. package/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.d.ts +4 -0
  137. package/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.d.ts.map +1 -0
  138. package/lib/pipes/pipe-date-concat/pipe-date-concat.module.d.ts +7 -0
  139. package/lib/pipes/pipe-date-concat/pipe-date-concat.module.d.ts.map +1 -0
  140. package/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.d.ts +4 -0
  141. package/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.d.ts.map +1 -0
  142. package/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.d.ts +7 -0
  143. package/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.d.ts.map +1 -0
  144. package/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.d.ts +4 -0
  145. package/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.d.ts.map +1 -0
  146. package/lib/pipes/pipe-filter/pipe-filter.module.d.ts +7 -0
  147. package/lib/pipes/pipe-filter/pipe-filter.module.d.ts.map +1 -0
  148. package/lib/pipes/pipe-filter/pipe-filter.pipe.d.ts +4 -0
  149. package/lib/pipes/pipe-filter/pipe-filter.pipe.d.ts.map +1 -0
  150. package/lib/pipes/pipe-filter-search/pipe-filter-search.module.d.ts +7 -0
  151. package/lib/pipes/pipe-filter-search/pipe-filter-search.module.d.ts.map +1 -0
  152. package/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.d.ts +4 -0
  153. package/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.d.ts.map +1 -0
  154. package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.d.ts +7 -0
  155. package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.d.ts.map +1 -0
  156. package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.d.ts +4 -0
  157. package/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.d.ts.map +1 -0
  158. package/lib/pipes/pipe-limit-to/pipe-limit-to.module.d.ts +7 -0
  159. package/lib/pipes/pipe-limit-to/pipe-limit-to.module.d.ts.map +1 -0
  160. package/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.d.ts +4 -0
  161. package/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.d.ts.map +1 -0
  162. package/lib/pipes/pipe-list-filter/pipe-list-filter.module.d.ts +7 -0
  163. package/lib/pipes/pipe-list-filter/pipe-list-filter.module.d.ts.map +1 -0
  164. package/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.d.ts +4 -0
  165. package/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.d.ts.map +1 -0
  166. package/lib/pipes/pipe-name-transform/pipe-name-transform.module.d.ts +7 -0
  167. package/lib/pipes/pipe-name-transform/pipe-name-transform.module.d.ts.map +1 -0
  168. package/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.d.ts +4 -0
  169. package/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.d.ts.map +1 -0
  170. package/lib/pipes/pipe-order-by/pipe-order-by.module.d.ts +7 -0
  171. package/lib/pipes/pipe-order-by/pipe-order-by.module.d.ts.map +1 -0
  172. package/lib/pipes/pipe-order-by/pipe-order-by.pipe.d.ts +8 -4
  173. package/lib/pipes/pipe-order-by/pipe-order-by.pipe.d.ts.map +1 -0
  174. package/lib/pipes/pipe-partial-content/pipe-partial-content.module.d.ts +7 -0
  175. package/lib/pipes/pipe-partial-content/pipe-partial-content.module.d.ts.map +1 -0
  176. package/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.d.ts +4 -0
  177. package/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.d.ts.map +1 -0
  178. package/lib/pipes/pipe-relative-time/pipe-relative-time.module.d.ts +7 -0
  179. package/lib/pipes/pipe-relative-time/pipe-relative-time.module.d.ts.map +1 -0
  180. package/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.d.ts +4 -0
  181. package/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.d.ts.map +1 -0
  182. package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.d.ts +7 -0
  183. package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.d.ts.map +1 -0
  184. package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.d.ts +4 -0
  185. package/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.d.ts.map +1 -0
  186. package/lib/resolvers/explore-detail.resolver.d.ts +4 -0
  187. package/lib/resolvers/explore-detail.resolver.d.ts.map +1 -0
  188. package/lib/resolvers/marketing-offering.resolve.d.ts +4 -0
  189. package/lib/resolvers/marketing-offering.resolve.d.ts.map +1 -0
  190. package/lib/resolvers/page.constant.d.ts +1 -0
  191. package/lib/resolvers/page.constant.d.ts.map +1 -0
  192. package/lib/resolvers/page.model.d.ts +2 -1
  193. package/lib/resolvers/page.model.d.ts.map +1 -0
  194. package/lib/resolvers/page.resolver.d.ts +4 -0
  195. package/lib/resolvers/page.resolver.d.ts.map +1 -0
  196. package/lib/resolvers/resolver.model.d.ts +1 -0
  197. package/lib/resolvers/resolver.model.d.ts.map +1 -0
  198. package/lib/services/auth-keycloak.service.d.ts +7 -23
  199. package/lib/services/auth-keycloak.service.d.ts.map +1 -0
  200. package/lib/services/auth-microsoft.service.d.ts +6 -2
  201. package/lib/services/auth-microsoft.service.d.ts.map +1 -0
  202. package/lib/services/card-content.model.d.ts +1 -0
  203. package/lib/services/card-content.model.d.ts.map +1 -0
  204. package/lib/services/configurations.model.d.ts +34 -23
  205. package/lib/services/configurations.model.d.ts.map +1 -0
  206. package/lib/services/configurations.service.d.ts +5 -0
  207. package/lib/services/configurations.service.d.ts.map +1 -0
  208. package/lib/services/content-strip-multiple.model.d.ts +8 -6
  209. package/lib/services/content-strip-multiple.model.d.ts.map +1 -0
  210. package/lib/services/event.model.d.ts +2 -1
  211. package/lib/services/event.model.d.ts.map +1 -0
  212. package/lib/services/event.service.d.ts +4 -0
  213. package/lib/services/event.service.d.ts.map +1 -0
  214. package/lib/services/logger.service.d.ts +8 -4
  215. package/lib/services/logger.service.d.ts.map +1 -0
  216. package/lib/services/ms-office.model.d.ts +1 -0
  217. package/lib/services/ms-office.model.d.ts.map +1 -0
  218. package/lib/services/subapplication-respond.service.d.ts +5 -10
  219. package/lib/services/subapplication-respond.service.d.ts.map +1 -0
  220. package/lib/services/telemetry.service.d.ts +6 -2
  221. package/lib/services/telemetry.service.d.ts.map +1 -0
  222. package/lib/services/user-preference.model.d.ts +1 -0
  223. package/lib/services/user-preference.model.d.ts.map +1 -0
  224. package/lib/services/user-preference.service.d.ts +4 -0
  225. package/lib/services/user-preference.service.d.ts.map +1 -0
  226. package/lib/services/utility.service.d.ts +11 -7
  227. package/lib/services/utility.service.d.ts.map +1 -0
  228. package/lib/services/value.service.d.ts +4 -0
  229. package/lib/services/value.service.d.ts.map +1 -0
  230. package/lib/services/widget-content.model.d.ts +21 -19
  231. package/lib/services/widget-content.model.d.ts.map +1 -0
  232. package/lib/services/widget-content.service.d.ts +4 -0
  233. package/lib/services/widget-content.service.d.ts.map +1 -0
  234. package/lib/services/widget-resolver.model.d.ts +1 -0
  235. package/lib/services/widget-resolver.model.d.ts.map +1 -0
  236. package/lib/services/widget-search.model.d.ts +1 -0
  237. package/lib/services/widget-search.model.d.ts.map +1 -0
  238. package/package.json +14 -19
  239. package/public-api.d.ts +7 -0
  240. package/public-api.d.ts.map +1 -0
  241. package/sunbird-cb-utils-1.0.19-ang-13-16.tgz +0 -0
  242. package/sunbird-cb-utils.d.ts +2 -6
  243. package/sunbird-cb-utils.d.ts.map +1 -0
  244. package/bundles/sunbird-cb-utils.umd.min.js +0 -16
  245. package/bundles/sunbird-cb-utils.umd.min.js.map +0 -1
  246. package/esm5/lib/components/image-crop/image-crop.component.js +0 -200
  247. package/esm5/lib/components/image-crop/image-crop.module.js +0 -31
  248. package/esm5/lib/constants/features.enum.js +0 -555
  249. package/esm5/lib/constants/instances.enum.js +0 -5
  250. package/esm5/lib/constants/misc.constants.js +0 -1
  251. package/esm5/lib/directives/class-change-on-scroll/class-change-on-scroll.directive.js +0 -105
  252. package/esm5/lib/directives/class-change-on-scroll/class-change-on-scroll.module.js +0 -19
  253. package/esm5/lib/directives/default-thumbnail/default-thumbnail.directive.js +0 -40
  254. package/esm5/lib/directives/default-thumbnail/default-thumbnail.module.js +0 -19
  255. package/esm5/lib/directives/image-responsive/image-responsive.directive.js +0 -95
  256. package/esm5/lib/directives/image-responsive/image-responsive.module.js +0 -19
  257. package/esm5/lib/directives/in-view-port/in-view-port.directive.js +0 -73
  258. package/esm5/lib/directives/in-view-port/in-view-port.module.js +0 -19
  259. package/esm5/lib/directives/navigation/navigation.directive.js +0 -41
  260. package/esm5/lib/directives/navigation/navigation.module.js +0 -19
  261. package/esm5/lib/directives/permission/permission.directive.js +0 -14
  262. package/esm5/lib/directives/permission/permission.module.js +0 -19
  263. package/esm5/lib/helpers/functions/getStringifiedQueryParams.js +0 -9
  264. package/esm5/lib/helpers/horizontal-scroller/horizontal-scroller.component.js +0 -103
  265. package/esm5/lib/helpers/horizontal-scroller/horizontal-scroller.module.js +0 -23
  266. package/esm5/lib/helpers/logout/logout.component.js +0 -63
  267. package/esm5/lib/helpers/logout/logout.module.js +0 -22
  268. package/esm5/lib/models/contentRating.model.js +0 -12
  269. package/esm5/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.module.js +0 -17
  270. package/esm5/lib/pipes/pipe-concise-date-range/pipe-concise-date-range.pipe.js +0 -63
  271. package/esm5/lib/pipes/pipe-count-transform/pipe-count-transform.module.js +0 -19
  272. package/esm5/lib/pipes/pipe-count-transform/pipe-count-transform.pipe.js +0 -37
  273. package/esm5/lib/pipes/pipe-date-concat/pipe-date-concat.module.js +0 -19
  274. package/esm5/lib/pipes/pipe-date-concat/pipe-date-concat.pipe.js +0 -45
  275. package/esm5/lib/pipes/pipe-duration-transform/pipe-duration-transform.module.js +0 -19
  276. package/esm5/lib/pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +0 -64
  277. package/esm5/lib/pipes/pipe-filter/pipe-filter.module.js +0 -19
  278. package/esm5/lib/pipes/pipe-filter/pipe-filter.pipe.js +0 -20
  279. package/esm5/lib/pipes/pipe-filter-search/pipe-filter-search.module.js +0 -19
  280. package/esm5/lib/pipes/pipe-filter-search/pipe-filter-search.pipe.js +0 -38
  281. package/esm5/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.module.js +0 -19
  282. package/esm5/lib/pipes/pipe-html-tag-removal/pipe-html-tag-removal.pipe.js +0 -16
  283. package/esm5/lib/pipes/pipe-limit-to/pipe-limit-to.module.js +0 -19
  284. package/esm5/lib/pipes/pipe-limit-to/pipe-limit-to.pipe.js +0 -30
  285. package/esm5/lib/pipes/pipe-list-filter/pipe-list-filter.module.js +0 -19
  286. package/esm5/lib/pipes/pipe-list-filter/pipe-list-filter.pipe.js +0 -21
  287. package/esm5/lib/pipes/pipe-name-transform/pipe-name-transform.module.js +0 -19
  288. package/esm5/lib/pipes/pipe-name-transform/pipe-name-transform.pipe.js +0 -35
  289. package/esm5/lib/pipes/pipe-order-by/pipe-order-by.module.js +0 -19
  290. package/esm5/lib/pipes/pipe-order-by/pipe-order-by.pipe.js +0 -18
  291. package/esm5/lib/pipes/pipe-partial-content/pipe-partial-content.module.js +0 -19
  292. package/esm5/lib/pipes/pipe-partial-content/pipe-partial-content.pipe.js +0 -34
  293. package/esm5/lib/pipes/pipe-relative-time/pipe-relative-time.module.js +0 -19
  294. package/esm5/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.js +0 -21
  295. package/esm5/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.module.js +0 -19
  296. package/esm5/lib/pipes/pipe-safe-sanitizer/pipe-safe-sanitizer.pipe.js +0 -38
  297. package/esm5/lib/resolvers/explore-detail.resolver.js +0 -93
  298. package/esm5/lib/resolvers/marketing-offering.resolve.js +0 -43
  299. package/esm5/lib/resolvers/page.constant.js +0 -4
  300. package/esm5/lib/resolvers/page.model.js +0 -47
  301. package/esm5/lib/resolvers/page.resolver.js +0 -98
  302. package/esm5/lib/resolvers/resolver.model.js +0 -6
  303. package/esm5/lib/services/auth-keycloak.service.js +0 -316
  304. package/esm5/lib/services/auth-microsoft.service.js +0 -251
  305. package/esm5/lib/services/card-content.model.js +0 -32
  306. package/esm5/lib/services/configurations.model.js +0 -498
  307. package/esm5/lib/services/configurations.service.js +0 -113
  308. package/esm5/lib/services/content-strip-multiple.model.js +0 -75
  309. package/esm5/lib/services/event.model.js +0 -229
  310. package/esm5/lib/services/event.service.js +0 -216
  311. package/esm5/lib/services/logger.service.js +0 -73
  312. package/esm5/lib/services/ms-office.model.js +0 -8
  313. package/esm5/lib/services/subapplication-respond.service.js +0 -230
  314. package/esm5/lib/services/telemetry.service.js +0 -484
  315. package/esm5/lib/services/user-preference.model.js +0 -38
  316. package/esm5/lib/services/user-preference.service.js +0 -109
  317. package/esm5/lib/services/utility.service.js +0 -178
  318. package/esm5/lib/services/value.service.js +0 -33
  319. package/esm5/lib/services/widget-content.model.js +0 -342
  320. package/esm5/lib/services/widget-content.service.js +0 -214
  321. package/esm5/lib/services/widget-resolver.model.js +0 -57
  322. package/esm5/lib/services/widget-search.model.js +0 -126
  323. package/esm5/public-api.js +0 -68
  324. package/esm5/sunbird-cb-utils.js +0 -8
  325. package/fesm5/sunbird-cb-utils.js +0 -5594
  326. package/fesm5/sunbird-cb-utils.js.map +0 -1
  327. package/sunbird-cb-utils.metadata.json +0 -1
@@ -1,16 +1,16 @@
1
1
  import { Component, EventEmitter, Inject, Output } from '@angular/core';
2
- import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
3
- import { MatSnackBar } from '@angular/material/snack-bar';
4
- import { ConfigurationsService } from '../../services/configurations.service';
5
- import { ValueService } from '../../services/value.service';
6
- export function IDialogueDta() { }
7
- if (false) {
8
- IDialogueDta.prototype.isRoundCrop;
9
- IDialogueDta.prototype.imageFile;
10
- IDialogueDta.prototype.height;
11
- IDialogueDta.prototype.width;
12
- IDialogueDta.prototype.imageFileName;
13
- }
2
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/dialog";
5
+ import * as i2 from "../../services/configurations.service";
6
+ import * as i3 from "@angular/material/snack-bar";
7
+ import * as i4 from "../../services/value.service";
8
+ import * as i5 from "@angular/material/icon";
9
+ import * as i6 from "@angular/material/button";
10
+ import * as i7 from "ngx-image-cropper";
11
+ import * as i8 from "@angular/material/slider";
12
+ import * as i9 from "@angular/material/card";
13
+ import * as i10 from "@angular/common";
14
14
  export class ImageCropComponent {
15
15
  constructor(dialogRef, configSvc, snackBar, valueSvc, data) {
16
16
  this.dialogRef = dialogRef;
@@ -51,7 +51,7 @@ export class ImageCropComponent {
51
51
  }
52
52
  ngOnInit() {
53
53
  this.thumbnailSizeDetection();
54
- this.valueSvc.isXSmall$.subscribe(((isXSmall) => {
54
+ this.valueSvc.isXSmall$.subscribe((isXSmall) => {
55
55
  this.isXSmall = isXSmall;
56
56
  if (this.isXSmall) {
57
57
  this.dialogRef.updateSize('90%');
@@ -59,7 +59,7 @@ export class ImageCropComponent {
59
59
  else {
60
60
  this.dialogRef.updateSize('70%');
61
61
  }
62
- }));
62
+ });
63
63
  }
64
64
  changeToDefaultImg($event) {
65
65
  $event.target.src = this.configSvc.instanceConfig ?
@@ -82,10 +82,10 @@ export class ImageCropComponent {
82
82
  thumbnailSizeDetection() {
83
83
  const fr = new FileReader();
84
84
  fr.readAsDataURL(this.imageFile);
85
- fr.onload = (() => {
85
+ fr.onload = () => {
86
86
  const img = new Image();
87
- img.src = ((fr.result));
88
- img.onload = (() => {
87
+ img.src = fr.result;
88
+ img.onload = () => {
89
89
  this.width = img.width;
90
90
  this.height = img.height;
91
91
  if (!this.isRoundCrop) {
@@ -97,8 +97,8 @@ export class ImageCropComponent {
97
97
  this.isNotOfRequiredSize = true;
98
98
  }
99
99
  }
100
- });
101
- });
100
+ };
101
+ };
102
102
  }
103
103
  base64ImageToBlob(str) {
104
104
  const pos = str.indexOf(';base64,');
@@ -119,7 +119,7 @@ export class ImageCropComponent {
119
119
  flipAfterRotate() {
120
120
  const flippedH = this.transform.flipH;
121
121
  const flippedV = this.transform.flipV;
122
- this.transform = Object.assign({}, this.transform, { flipH: flippedV, flipV: flippedH });
122
+ this.transform = Object.assign(Object.assign({}, this.transform), { flipH: flippedV, flipV: flippedH });
123
123
  }
124
124
  rotateLeft() {
125
125
  this.canvasRotation = this.canvasRotation - 1;
@@ -130,11 +130,11 @@ export class ImageCropComponent {
130
130
  this.flipAfterRotate();
131
131
  }
132
132
  flipHorizontal() {
133
- this.transform = Object.assign({}, this.transform, { flipH: !this.transform.flipH });
133
+ this.transform = Object.assign(Object.assign({}, this.transform), { flipH: !this.transform.flipH });
134
134
  }
135
135
  zoom(event) {
136
136
  this.resetValue = false;
137
- this.transform = Object.assign({}, this.transform, { scale: event.value });
137
+ this.transform = Object.assign(Object.assign({}, this.transform), { scale: event.value });
138
138
  }
139
139
  croppingImage() {
140
140
  this.dialogRef.close(this.cropimageFile);
@@ -148,48 +148,19 @@ export class ImageCropComponent {
148
148
  this.dialogRef.close();
149
149
  }
150
150
  }
151
- ImageCropComponent.decorators = [
152
- { type: Component, args: [{
153
- selector: 'ws-utils-image-crop',
154
- template: "<ng-container *ngIf=\"isNotOfRequiredSize\">\r\n <mat-dialog-content>\r\n <div class=\"flex pl-4\">\r\n <mat-icon class=\"ws-mat-warn-text largeicon padding-remove-left\">warning</mat-icon>\r\n <h2 class=\"text-xl\" i18n>This image will appear stretched as it is not in proper dimension. Do you want to\r\n continue?</h2>\r\n </div>\r\n <div class=\"text-sm pl-4\">\r\n <div i18n class=\"pb-2\">Note:</div>\r\n <div i18n class=\"pb-2\">Required dimensions : 265 * 150</div>\r\n <div class=\"flex flex-wrap items-baseline\">\r\n <div>Current dimensions:</div>\r\n <div class=\"pl-1\">{{ width }} * {{ height }} px</div>\r\n </div>\r\n </div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions class=\"flex flex-end\">\r\n <div class=\"flex flex-end\">\r\n <button mat-raised-button autofocus type=\"button\" (click)=\" close()\">\r\n <span i18n>No</span>\r\n </button>\r\n <button mat-raised-button type=\"button\" class=\"text-white ws-mat-primary-background text-white\"\r\n (click)=\" continueToImageCrop()\">\r\n <span class=\"text-white\" i18n>Yes</span>\r\n </button>\r\n </div>\r\n </mat-dialog-actions>\r\n</ng-container>\r\n<ng-container *ngIf=\"isRoundCrop\">\r\n <!-- For Profile image - start -->\r\n <div class=\"flex flex-between\">\r\n <mat-icon class=\" ws-mat-primary-text margin-bottom-xxs\">crop</mat-icon>\r\n <p mat-dialog-title class=\"text-3xl font-weight-bold ws-mat-primary-text\" i18n>Profile Photo</p>\r\n <mat-icon class=\"float-right flex-end cursor-pointer\" (click)=\"close()\" i18n>close</mat-icon>\r\n\r\n </div>\r\n <mat-dialog-content class=\"p-0 overflow-hidden \" *ngIf=\"isRoundCrop\">\r\n <div class=\"flex flex-between\">\r\n <div class=\"profile-slides\">\r\n <image-cropper #imageCropper class=\"image-cropper-profile\" [imageFile]=\"imageFile\" [maintainAspectRatio]=\"true\"\r\n [aspectRatio]=\"250 / 250\" [resizeToWidth]=\"100\" [roundCropper]=\"isRoundCrop\" [resizeToHeight]=\"120\"\r\n [cropperMinWidth]=\"500\" [format]=\"'jpeg'\" [transform]=\"transform\" [canvasRotation]=\"canvasRotation\"\r\n (imageCropped)=\"imageCropped($event)\">\r\n </image-cropper>\r\n </div>\r\n </div>\r\n <ul class=\"toolbar cf\">\r\n <li><button mat-raised-button class=\"mat-button\" (click)=\"rotateLeft()\">\r\n <mat-icon class=\"text-white large-icon ws-mat-primary-text\">rotate_left</mat-icon>\r\n <span class=\"button-text\" i18n>Rotate Left</span>\r\n </button>\r\n </li>\r\n <li><button mat-raised-button class=\"mat-button\" (click)=\"rotateRight()\">\r\n <mat-icon class=\"text-white medium-icon ws-mat-primary-text\">rotate_right</mat-icon>\r\n <span class=\"button-text\" i18n>Rotate Right</span>\r\n </button></li>\r\n <li><button mat-raised-button class=\"mat-button\" (click)=\"flipHorizontal()\">\r\n <mat-icon class=\"text-white medium-icon ws-mat-primary-text\">flip</mat-icon>\r\n <span class=\"button-text\" i18n>Flip Horizontal</span>\r\n </button></li>\r\n <li><a href=\"#\"><i class=\"icon-cloud\"></i></a></li>\r\n </ul>\r\n </mat-dialog-content>\r\n</ng-container> <!-- For Profile image - end -->\r\n<ng-container>\r\n <ng-container *ngIf=\"!isNotOfRequiredSize && !isRoundCrop \">\r\n <div class=\"flex flex-between\">\r\n <mat-icon class=\" ws-mat-primary-text margin-bottom-xxs\">crop</mat-icon>\r\n <p mat-dialog-title class=\"text-3xl title-margin font-weight-bold ws-mat-primary-text\" i18n>Edit Image</p>\r\n <mat-icon class=\"float-right flex-end cursor-pointer\" (click)=\"close()\" i18n>\r\n close</mat-icon>\r\n </div>\r\n <mat-dialog-content *ngIf=\"!isRoundCrop\">\r\n <div class=\"flex flex-between\">\r\n <div class=\"Slides\">\r\n <image-cropper #imageCropper class=\"image-cropper padding-remove\" [imageFile]=\"imageFile\"\r\n [maintainAspectRatio]=\"true\" [aspectRatio]=\"opWidth / opHeight\" [resizeToWidth]=\"opWidth\"\r\n [roundCropper]=\"isRoundCrop\" [resizeToHeight]=\"opHeight\" [cropperMinWidth]=\"opWidth\" [format]=\"'jpeg'\"\r\n [transform]=\"transform\" [canvasRotation]=\"canvasRotation\" (imageCropped)=\"imageCropped($event)\">\r\n </image-cropper>\r\n <div class=\"flex flex-between\">\r\n <span class=\"my-3\" i18n>Zoom</span>\r\n <mat-slider class=\"w-full mx-3\" color=\"primary\" (input)=\"zoom($event)\" min=\"1\" max=\"2.5\" step=\"0.1\">\r\n </mat-slider>\r\n </div>\r\n <div class=\"edit-feature-window \" *ngIf=\"!isXSmall\">\r\n <div class=\"flex flex-between\">\r\n <button mat-raised-button class=\"mat-button\" (click)=\"rotateLeft()\">\r\n <mat-icon class=\"text-white large-icon ws-mat-primary-text\">rotate_left</mat-icon>\r\n <span class=\"button-text\" i18n>Rotate Left</span>\r\n </button>\r\n <button mat-raised-button class=\"mat-button\" (click)=\"rotateRight()\">\r\n <mat-icon class=\"text-white medium-icon ws-mat-primary-text\">rotate_right</mat-icon>\r\n <span class=\"button-text\" i18n>Rotate Right</span>\r\n </button>\r\n <button mat-raised-button class=\"mat-button\" (click)=\"flipHorizontal()\">\r\n <mat-icon class=\"text-white medium-icon ws-mat-primary-text\">flip</mat-icon>\r\n <span class=\"button-text\" i18n>Flip Horizontal</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <mat-card class=\"ws-mat-primary-border-top-bolder mat-elevation-z6 margin-bottom-l button-text\"\r\n *ngIf=\"isThumbnail\">\r\n <img [src]=\"imageFileBase64\" height=\"auto\" width=\"100%\" (error)=\"changeToDefaultImg($event)\" />\r\n <div class=\"flex flex-middle justify-center margin-bottom-s padding-top-s\">\r\n <mat-icon class=\"ws-mat-primary-text padding-right-s\">image</mat-icon>\r\n <b class=\"mat-title margin-remove ws-mat-primary-text\" i18n>Preview</b>\r\n </div>\r\n </mat-card>\r\n </div>\r\n <div class=\"edit-feature-window heightwidth\">\r\n <!-- <div class=\"flex flex-middle margin-left-l margin-bottom-s padding-top-s\">\r\n <mat-icon class=\"ws-mat-primary-text padding-right-s\">swap_horiz</mat-icon>\r\n <b class=\"mat-body margin-remove \" i18n>Cropped dimensions: {{ opWidth }} * {{ opHeight }} px</b>\r\n </div> -->\r\n <div class=\"flex flex-middle margin-left-l margin-bottom-s padding-top-s\">\r\n <mat-icon class=\"ws-mat-primary-text padding-right-s\">swap_horiz</mat-icon>\r\n <b class=\"mat-body margin-remove \">\r\n <span i18n>Cropped Width: </span>\r\n <span>{{ croppedWidth }}</span>\r\n <span i18n>px</span>\r\n </b>\r\n </div>\r\n <div class=\"flex flex-middle margin-left-l margin-bottom-s padding-top-s\">\r\n <mat-icon class=\"ws-mat-primary-text padding-right-s\">swap_vert</mat-icon>\r\n <b class=\"mat-body margin-remove \">\r\n <span i18n>Cropped Height: </span>\r\n <span>{{ croppedHeight }}</span>\r\n <span i18n>px</span>\r\n </b>\r\n </div>\r\n </div>\r\n </mat-dialog-content>\r\n </ng-container>\r\n <mat-dialog-actions align=\"end\" *ngIf=\"!isNotOfRequiredSize \">\r\n <div class=\"flex flex-end margin-bottom-s\">\r\n <!-- <button mat-raised-button type=\"button\" (click)=\" reset()\">\r\n <span i18n>Reset</span>\r\n </button> -->\r\n <button mat-raised-button type=\"button\" class=\"text-white ws-mat-primary-background text-white\"\r\n (click)=\" croppingImage()\">\r\n <span class=\"text-white\" i18n>Apply</span>\r\n </button>\r\n </div>\r\n </mat-dialog-actions>\r\n</ng-container>\r\n",
155
- styles: [".image-cropper{max-height:55vh}::ng-deep image-cropper .overlay{background-color:transparent!important}.Slides{display:block;height:auto;width:50%;position:relative;margin-left:auto;margin-right:auto;padding:0 1.25em}.cursor{cursor:pointer}.edit-feature-window{background:0 0;justify-content:center}mat-toolbar{background-color:#fff!important;z-index:1!important}mat-dialog-content{padding:1.25em!important}.heightwidth{display:flex}@media only screen and (max-width:1030px){.Slides{padding:0;width:100%}mat-dialog-content{padding:.25em .5em!important}.heightwidth{display:block}.mat-button{min-width:auto;padding:0 14px}.button-text{display:none}}.largeicon{font-size:2em;padding:.13em .5em}.tooltip{background:#b71c1c}.dimension-icon{position:relative;top:.35em;padding:0 0 0 .3em}.image-cropper-profile{max-height:55vh}.profile-slides{box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.23);display:block;height:auto;width:50%;position:relative;margin-left:auto;margin-right:auto}@media only screen and (max-width:1030px){.profile-slides{padding:0;width:100%}}.toolbar{left:50%;margin:1em 0 0 -10em;position:absolute;width:auto;border-radius:4px}.cf:after,.cf:before{content:\"\";display:table}.cf:after{clear:both}.toolbar li{float:left;list-style:none}.toolbar a{border-left:0 solid rgba(79,123,170,.4);border-right:1px solid rgba(255,255,255,.3)}.toolbar li:first-child a{border-left:none;border-radius:4px 0 0 4px}.toolbar li:last-child a{border-right:none;border-radius:0 4px 4px 0}"]
156
- }] }
157
- ];
158
- ImageCropComponent.ctorParameters = () => [
159
- { type: MatDialogRef },
160
- { type: ConfigurationsService },
161
- { type: MatSnackBar },
162
- { type: ValueService },
163
- { type: undefined, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
164
- ];
165
- ImageCropComponent.propDecorators = {
166
- data: [{ type: Output }]
167
- };
168
- if (false) {
169
- ImageCropComponent.prototype.data;
170
- ImageCropComponent.prototype.isRoundCrop;
171
- ImageCropComponent.prototype.isNotOfRequiredSize;
172
- ImageCropComponent.prototype.imageFile;
173
- ImageCropComponent.prototype.cropimageFile;
174
- ImageCropComponent.prototype.imageFileBase64;
175
- ImageCropComponent.prototype.width;
176
- ImageCropComponent.prototype.height;
177
- ImageCropComponent.prototype.opHeight;
178
- ImageCropComponent.prototype.opWidth;
179
- ImageCropComponent.prototype.imageDimensions;
180
- ImageCropComponent.prototype.croppedHeight;
181
- ImageCropComponent.prototype.croppedWidth;
182
- ImageCropComponent.prototype.cropperReadyToStart;
183
- ImageCropComponent.prototype.fileName;
184
- ImageCropComponent.prototype.canvasRotation;
185
- ImageCropComponent.prototype.transform;
186
- ImageCropComponent.prototype.resetValue;
187
- ImageCropComponent.prototype.element;
188
- ImageCropComponent.prototype.isXSmall;
189
- ImageCropComponent.prototype.isThumbnail;
190
- ImageCropComponent.prototype.dialogRef;
191
- ImageCropComponent.prototype.configSvc;
192
- ImageCropComponent.prototype.snackBar;
193
- ImageCropComponent.prototype.valueSvc;
194
- }
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY3JvcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1jYi91dGlscy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2ltYWdlLWNyb3AvaW1hZ2UtY3JvcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUd6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFDM0Qsa0NBTUM7O0lBTEMsbUNBQXFCO0lBQ3JCLGlDQUFnQjtJQUNoQiw4QkFBZTtJQUNmLDZCQUFjO0lBQ2QscUNBQXFCOztBQU92QixNQUFNLE9BQU8sa0JBQWtCO0lBd0I3QixZQUNVLFNBQTJDLEVBQzNDLFNBQWdDLEVBQ2hDLFFBQXFCLEVBQ3JCLFFBQXNCLEVBQ0wsSUFBa0I7UUFKbkMsY0FBUyxHQUFULFNBQVMsQ0FBa0M7UUFDM0MsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFDaEMsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFjO1FBMUJ0QixTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQTtRQUN6QyxnQkFBVyxHQUFHLEtBQUssQ0FBQTtRQUNuQix3QkFBbUIsR0FBRyxLQUFLLENBQUE7UUFHM0Isb0JBQWUsR0FBUSxFQUFFLENBQUE7UUFDekIsVUFBSyxHQUFRLEVBQUUsQ0FBQTtRQUNmLFdBQU0sR0FBUSxFQUFFLENBQUE7UUFHaEIsb0JBQWUsR0FBUSxFQUFFLENBQUE7UUFDekIsa0JB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NkI7SUFDN0Isc0NBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZydcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInXHJcblxyXG5pbXBvcnQgeyBJbWFnZUNyb3BwZWRFdmVudCwgSW1hZ2VUcmFuc2Zvcm0gfSBmcm9tICduZ3gtaW1hZ2UtY3JvcHBlcidcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlndXJhdGlvbnMuc2VydmljZSdcclxuaW1wb3J0IHsgVmFsdWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsdWUuc2VydmljZSdcclxuZXhwb3J0IGludGVyZmFjZSBJRGlhbG9ndWVEdGEge1xyXG4gIGlzUm91bmRDcm9wOiBib29sZWFuLFxyXG4gIGltYWdlRmlsZTogRmlsZSxcclxuICBoZWlnaHQ6IG51bWJlcixcclxuICB3aWR0aDogbnVtYmVyLFxyXG4gIGltYWdlRmlsZU5hbWU6IHN0cmluZ1xyXG59XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnd3MtdXRpbHMtaW1hZ2UtY3JvcCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ltYWdlLWNyb3AuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ltYWdlLWNyb3AuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEltYWdlQ3JvcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy8gbmVlZCB0byBzZXQgZm9yIGNyZWF0b3IgTG9nb1xyXG4gIEBPdXRwdXQoKSBkYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpXHJcbiAgaXNSb3VuZENyb3AgPSBmYWxzZVxyXG4gIGlzTm90T2ZSZXF1aXJlZFNpemUgPSBmYWxzZVxyXG4gIGltYWdlRmlsZSE6IEZpbGVcclxuICBjcm9waW1hZ2VGaWxlITogRmlsZVxyXG4gIGltYWdlRmlsZUJhc2U2NDogYW55ID0gJydcclxuICB3aWR0aDogYW55ID0gJydcclxuICBoZWlnaHQ6IGFueSA9ICcnXHJcbiAgb3BIZWlnaHQ6IGFueVxyXG4gIG9wV2lkdGg6IGFueVxyXG4gIGltYWdlRGltZW5zaW9uczogYW55ID0gJydcclxuICBjcm9wcGVkSGVpZ2h0OiBhbnkgPSAnJ1xyXG4gIGNyb3BwZWRXaWR0aDogYW55ID0gJydcclxuICBjcm9wcGVyUmVhZHlUb1N0YXJ0OiBhbnkgPSBmYWxzZVxyXG4gIGZpbGVOYW1lID0gJydcclxuICBjYW52YXNSb3RhdGlvbiA9IDBcclxuICB0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtID0ge31cclxuICByZXNldFZhbHVlID0gZmFsc2VcclxuICBlbGVtZW50OiBhbnlcclxuICBpc1hTbWFsbCA9IGZhbHNlXHJcbiAgaXNUaHVtYm5haWwgPSB0cnVlXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxJbWFnZUNyb3BDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxyXG4gICAgcHJpdmF0ZSB2YWx1ZVN2YzogVmFsdWVTZXJ2aWNlLFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIGRhdGE6IElEaWFsb2d1ZUR0YVxyXG4gICkge1xyXG4gICAgdGhpcy5pc1JvdW5kQ3JvcCA9IGRhdGEuaXNSb3VuZENyb3BcclxuICAgIGlmIChkYXRhLmltYWdlRmlsZSkge1xyXG4gICAgICB0aGlzLmltYWdlRmlsZSA9IGRhdGEuaW1hZ2VGaWxlXHJcbiAgICB9XHJcbiAgICBpZiAoZGF0YS5pbWFnZUZpbGVOYW1lKSB7XHJcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBkYXRhLmltYWdlRmlsZU5hbWVcclxuICAgIH1cclxuICAgIGlmICghZGF0YS5pc1JvdW5kQ3JvcCkge1xyXG4gICAgICBpZiAoZGF0YS5oZWlnaHQpIHtcclxuICAgICAgICB0aGlzLm9wSGVpZ2h0ID0gZGF0YS5oZWlnaHRcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGF0YS53aWR0aCkge1xyXG4gICAgICAgIHRoaXMub3BXaWR0aCA9IGRhdGEud2lkdGhcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy50aHVtYm5haWxTaXplRGV0ZWN0aW9uKClcclxuICAgIHRoaXMudmFsdWVTdmMuaXNYU21hbGwkLnN1YnNjcmliZSgoaXNYU21hbGw6IGJvb2xlYW4pID0+IHtcclxuICAgICAgdGhpcy5pc1hTbWFsbCA9IGlzWFNtYWxsXHJcbiAgICAgIGlmICh0aGlzLmlzWFNtYWxsKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYudXBkYXRlU2l6ZSgnOTAlJylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi51cGRhdGVTaXplKCc3MCUnKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIC8vIGRpc3BsYXlzIHRoZSBkZWZhdWx0IGltYWdlXHJcbiAgY2hhbmdlVG9EZWZhdWx0SW1nKCRldmVudDogYW55KSB7XHJcbiAgICAkZXZlbnQudGFyZ2V0LnNyYyA9IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnID9cclxuICAgICAgdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWcubG9nb3MuZGVmYXVsdENvbnRlbnQgOiAnJ1xyXG4gIH1cclxuXHJcbiAgLy8gaW1hZ2UgY3JvcHBpbmcgZXZlbnRcclxuICBpbWFnZUNyb3BwZWQoZXZlbnQ6IEltYWdlQ3JvcHBlZEV2ZW50KSB7XHJcblxyXG4gICAgdGhpcy5pbWFnZUZpbGVCYXNlNjQgPSBldmVudC5iYXNlNjQgLy8gc3RvcmUgdGhlIGNyb3BwZWQgaW1hZ2UgYXMgYSBiYXNlNjQgdmFsdWVcclxuICAgIHRoaXMuY3JvcGltYWdlRmlsZSA9IHRoaXMuYmFzZTY0SW1hZ2VUb0Jsb2IodGhpcy5pbWFnZUZpbGVCYXNlNjQpIC8vIGNvbnZlcnQgdGhlIGNyb3BwZWQgaW1hZ2UgYXMgYSBmaWxlXHJcbiAgICB0aGlzLmNyb3BwZWRIZWlnaHQgPSBldmVudC5oZWlnaHRcclxuICAgIHRoaXMuY3JvcHBlZFdpZHRoID0gZXZlbnQud2lkdGhcclxuXHJcbiAgfVxyXG5cclxuICBvcGVuU25hY2tCYXIobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4obWVzc2FnZSwgJ1gnLCB7XHJcbiAgICAgIGR1cmF0aW9uOiAyMDAwLFxyXG4gICAgfSlcclxuICB9XHJcbiAgY29udGludWVUb0ltYWdlQ3JvcCgpIHtcclxuICAgIHRoaXMuaXNOb3RPZlJlcXVpcmVkU2l6ZSA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICAvLyBjaGVja3MgaWYgdGhlIGltYWdlIGlzIG9mIHRoZSBjb3JyZWN0IGRpbWVuc2lvbnNcclxuICB0aHVtYm5haWxTaXplRGV0ZWN0aW9uKCkge1xyXG4gICAgY29uc3QgZnIgPSBuZXcgRmlsZVJlYWRlcigpXHJcbiAgICBmci5yZWFkQXNEYXRhVVJMKHRoaXMuaW1hZ2VGaWxlKVxyXG4gICAgZnIub25sb2FkID0gKCkgPT4geyAvLyB3aGVuIGZpbGUgaGFzIGxvYWRlZFxyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICBpbWcuc3JjID0gZnIucmVzdWx0IGFzIHN0cmluZ1xyXG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSBpbWcud2lkdGhcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGltZy5oZWlnaHRcclxuICAgICAgICBpZiAoIXRoaXMuaXNSb3VuZENyb3ApIHtcclxuICAgICAgICAgIGlmICgodGhpcy5oZWlnaHQgPT09IHRoaXMub3BIZWlnaHQpICYmICh0aGlzLndpZHRoID09PSB0aGlzLm9wV2lkdGgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblNuYWNrQmFyKCdJbWFnZSBpcyBvZiB0aGUgcmVxdWlyZWQgZGltZW5zaW9ucyBvZiB0aGUgdGh1bWJuYWlsLCBjcm9waW5nIGlzIG5vdCBhdmFpbGFibGUhJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoKHRoaXMuaGVpZ2h0IDwgdGhpcy5vcEhlaWdodCkgfHwgKHRoaXMud2lkdGggPCB0aGlzLm9wV2lkdGgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNOb3RPZlJlcXVpcmVkU2l6ZSA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgYmFzZTY0SW1hZ2VUb0Jsb2Ioc3RyOiBzdHJpbmcpOiBGaWxlIHtcclxuICAgIC8vIGV4dHJhY3QgY29udGVudCB0eXBlIGFuZCBiYXNlNjQgcGF5bG9hZCBmcm9tIG9yaWdpbmFsIHN0cmluZ1xyXG5cclxuICAgIGNvbnN0IHBvcyA9IHN0ci5pbmRleE9mKCc7YmFzZTY0LCcpXHJcbiAgICAvLyB2YXIgdHlwZSA9IHN0ci5zdWJzdHJpbmcoNSwgcG9zKTtcclxuICAgIGNvbnN0IGI2NCA9IHN0ci5zdWJzdHIocG9zICsgOClcclxuICAgIC8vIGRlY29kZSBiYXNlNjRcclxuICAgIGNvbnN0IGltYWdlQ29udGVudCA9IGF0b2IoYjY0KVxyXG4gICAgLy8gY3JlYXRlIGFuIEFycmF5QnVmZmVyIGFuZCBhIHZpZXcgKGFzIHVuc2lnbmVkIDgtYml0KVxyXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGltYWdlQ29udGVudC5sZW5ndGgpXHJcbiAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKVxyXG4gICAgLy8gZmlsbCB0aGUgdmlldywgdXNpbmcgdGhlIGRlY29kZWQgYmFzZTY0XHJcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IGltYWdlQ29udGVudC5sZW5ndGg7IG4gPSBuICsgMSkge1xyXG4gICAgICB2aWV3W25dID0gaW1hZ2VDb250ZW50LmNoYXJDb2RlQXQobilcclxuICAgIH1cclxuICAgIC8vIGNvbnZlcnQgQXJyYXlCdWZmZXIgdG8gQmxvYlxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt2aWV3XSwgeyB0eXBlOiAnaW1hZ2UvcG5nJyB9KVxyXG4gICAgY29uc3QgYjogYW55ID0gYmxvYlxyXG4gICAgLy8gQ2FzdCB0byBhIEZpbGUoKSB0eXBlXHJcbiAgICBiLmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpXHJcbiAgICBiLm5hbWUgPSB0aGlzLmZpbGVOYW1lXHJcbiAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCB0aGlzLmZpbGVOYW1lLCB7IHR5cGU6ICdpbWFnZS9qcGVnJyB9KVxyXG4gICAgcmV0dXJuIGZpbGVcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZsaXBBZnRlclJvdGF0ZSgpIHtcclxuICAgIGNvbnN0IGZsaXBwZWRIID0gdGhpcy50cmFuc2Zvcm0uZmxpcEhcclxuICAgIGNvbnN0IGZsaXBwZWRWID0gdGhpcy50cmFuc2Zvcm0uZmxpcFZcclxuICAgIHRoaXMudHJhbnNmb3JtID0ge1xyXG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcclxuICAgICAgZmxpcEg6IGZsaXBwZWRWLFxyXG4gICAgICBmbGlwVjogZmxpcHBlZEgsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByb3RhdGVMZWZ0KCkge1xyXG4gICAgdGhpcy5jYW52YXNSb3RhdGlvbiA9IHRoaXMuY2FudmFzUm90YXRpb24gLSAxXHJcbiAgICB0aGlzLmZsaXBBZnRlclJvdGF0ZSgpXHJcbiAgfVxyXG5cclxuICByb3RhdGVSaWdodCgpIHtcclxuICAgIHRoaXMuY2FudmFzUm90YXRpb24gPSB0aGlzLmNhbnZhc1JvdGF0aW9uICsgMVxyXG4gICAgdGhpcy5mbGlwQWZ0ZXJSb3RhdGUoKVxyXG4gIH1cclxuXHJcbiAgZmxpcEhvcml6b250YWwoKSB7XHJcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcclxuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXHJcbiAgICAgIGZsaXBIOiAhdGhpcy50cmFuc2Zvcm0uZmxpcEgsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB6b29tKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmVzZXRWYWx1ZSA9IGZhbHNlXHJcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcclxuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXHJcbiAgICAgIHNjYWxlOiBldmVudC52YWx1ZSxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNhbGxzIHdoZW4gYXBwbHkgYnV0dG9uIGlzIGNsaWNrZWQsYW5kIHJldHVybnMgdGhlIGNyb3BwZWQgaW1hZ2VcclxuICBjcm9wcGluZ0ltYWdlKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5jcm9waW1hZ2VGaWxlKVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLnJlc2V0VmFsdWUgPSB0cnVlXHJcbiAgICB0aGlzLmNhbnZhc1JvdGF0aW9uID0gMFxyXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7fVxyXG4gIH1cclxuICAvLyBjbG9zZXMgdGhlIGRpYWxvZyBib3hcclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
151
+ ImageCropComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImageCropComponent, deps: [{ token: i1.MatDialogRef }, { token: i2.ConfigurationsService }, { token: i3.MatSnackBar }, { token: i4.ValueService }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
152
+ ImageCropComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ImageCropComponent, selector: "ws-utils-image-crop", outputs: { data: "data" }, ngImport: i0, template: "<ng-container *ngIf=\"isNotOfRequiredSize\">\r\n <mat-dialog-content>\r\n <div class=\"flex pl-4\">\r\n <mat-icon class=\"ws-mat-warn-text largeicon padding-remove-left\">warning</mat-icon>\r\n <h2 class=\"text-xl\" i18n>This image will appear stretched as it is not in proper dimension. Do you want to\r\n continue?</h2>\r\n </div>\r\n <div class=\"text-sm pl-4\">\r\n <div i18n class=\"pb-2\">Note:</div>\r\n <div i18n class=\"pb-2\">Required dimensions : 265 * 150</div>\r\n <div class=\"flex flex-wrap items-baseline\">\r\n <div>Current dimensions:</div>\r\n <div class=\"pl-1\">{{ width }} * {{ height }} px</div>\r\n </div>\r\n </div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions class=\"flex flex-end\">\r\n <div class=\"flex flex-end\">\r\n <button mat-raised-button autofocus type=\"button\" (click)=\" close()\">\r\n <span i18n>No</span>\r\n </button>\r\n <button mat-raised-button type=\"button\" class=\"text-white ws-mat-primary-background text-white\"\r\n (click)=\" continueToImageCrop()\">\r\n <span class=\"text-white\" i18n>Yes</span>\r\n </button>\r\n </div>\r\n </mat-dialog-actions>\r\n</ng-container>\r\n<ng-container *ngIf=\"isRoundCrop\">\r\n <!-- For Profile image - start -->\r\n <div class=\"flex flex-between\">\r\n <mat-icon class=\" ws-mat-primary-text margin-bottom-xxs\">crop</mat-icon>\r\n <p mat-dialog-title class=\"text-3xl font-weight-bold ws-mat-primary-text\" i18n>Profile Photo</p>\r\n <mat-icon class=\"float-right flex-end cursor-pointer\" (click)=\"close()\" i18n>close</mat-icon>\r\n\r\n </div>\r\n <mat-dialog-content class=\"p-0 overflow-hidden \" *ngIf=\"isRoundCrop\">\r\n <div class=\"flex flex-between\">\r\n <div class=\"profile-slides\">\r\n <image-cropper #imageCropper class=\"image-cropper-profile\" [imageFile]=\"imageFile\" [maintainAspectRatio]=\"true\"\r\n [aspectRatio]=\"250 / 250\" [resizeToWidth]=\"100\" [roundCropper]=\"isRoundCrop\" [resizeToHeight]=\"120\"\r\n [cropperMinWidth]=\"500\" [format]=\"'jpeg'\" [transform]=\"transform\" [canvasRotation]=\"canvasRotation\"\r\n (imageCropped)=\"imageCropped($event)\">\r\n </image-cropper>\r\n </div>\r\n </div>\r\n <ul class=\"toolbar cf\">\r\n <li><button mat-raised-button class=\"mat-button\" (click)=\"rotateLeft()\">\r\n <mat-icon class=\"text-white large-icon ws-mat-primary-text\">rotate_left</mat-icon>\r\n <span class=\"button-text\" i18n>Rotate Left</span>\r\n </button>\r\n </li>\r\n <li><button mat-raised-button class=\"mat-button\" (click)=\"rotateRight()\">\r\n <mat-icon class=\"text-white medium-icon ws-mat-primary-text\">rotate_right</mat-icon>\r\n <span class=\"button-text\" i18n>Rotate Right</span>\r\n </button></li>\r\n <li><button mat-raised-button class=\"mat-button\" (click)=\"flipHorizontal()\">\r\n <mat-icon class=\"text-white medium-icon ws-mat-primary-text\">flip</mat-icon>\r\n <span class=\"button-text\" i18n>Flip Horizontal</span>\r\n </button></li>\r\n <li><a href=\"#\"><i class=\"icon-cloud\"></i></a></li>\r\n </ul>\r\n </mat-dialog-content>\r\n</ng-container> <!-- For Profile image - end -->\r\n<ng-container>\r\n <ng-container *ngIf=\"!isNotOfRequiredSize && !isRoundCrop \">\r\n <div class=\"flex flex-between\">\r\n <mat-icon class=\" ws-mat-primary-text margin-bottom-xxs\">crop</mat-icon>\r\n <p mat-dialog-title class=\"text-3xl title-margin font-weight-bold ws-mat-primary-text\" i18n>Edit Image</p>\r\n <mat-icon class=\"float-right flex-end cursor-pointer\" (click)=\"close()\" i18n>\r\n close</mat-icon>\r\n </div>\r\n <mat-dialog-content *ngIf=\"!isRoundCrop\">\r\n <div class=\"flex flex-between\">\r\n <div class=\"Slides\">\r\n <image-cropper #imageCropper class=\"image-cropper padding-remove\" [imageFile]=\"imageFile\"\r\n [maintainAspectRatio]=\"true\" [aspectRatio]=\"opWidth / opHeight\" [resizeToWidth]=\"opWidth\"\r\n [roundCropper]=\"isRoundCrop\" [resizeToHeight]=\"opHeight\" [cropperMinWidth]=\"opWidth\" [format]=\"'jpeg'\"\r\n [transform]=\"transform\" [canvasRotation]=\"canvasRotation\" (imageCropped)=\"imageCropped($event)\">\r\n </image-cropper>\r\n <div class=\"flex flex-between\">\r\n <span class=\"my-3\" i18n>Zoom</span>\r\n <mat-slider class=\"w-full mx-3\" color=\"primary\" (input)=\"zoom($event)\" min=\"1\" max=\"2.5\" step=\"0.1\">\r\n </mat-slider>\r\n </div>\r\n <div class=\"edit-feature-window \" *ngIf=\"!isXSmall\">\r\n <div class=\"flex flex-between\">\r\n <button mat-raised-button class=\"mat-button\" (click)=\"rotateLeft()\">\r\n <mat-icon class=\"text-white large-icon ws-mat-primary-text\">rotate_left</mat-icon>\r\n <span class=\"button-text\" i18n>Rotate Left</span>\r\n </button>\r\n <button mat-raised-button class=\"mat-button\" (click)=\"rotateRight()\">\r\n <mat-icon class=\"text-white medium-icon ws-mat-primary-text\">rotate_right</mat-icon>\r\n <span class=\"button-text\" i18n>Rotate Right</span>\r\n </button>\r\n <button mat-raised-button class=\"mat-button\" (click)=\"flipHorizontal()\">\r\n <mat-icon class=\"text-white medium-icon ws-mat-primary-text\">flip</mat-icon>\r\n <span class=\"button-text\" i18n>Flip Horizontal</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <mat-card class=\"ws-mat-primary-border-top-bolder mat-elevation-z6 margin-bottom-l button-text\"\r\n *ngIf=\"isThumbnail\">\r\n <img [src]=\"imageFileBase64\" height=\"auto\" width=\"100%\" (error)=\"changeToDefaultImg($event)\" />\r\n <div class=\"flex flex-middle justify-center margin-bottom-s padding-top-s\">\r\n <mat-icon class=\"ws-mat-primary-text padding-right-s\">image</mat-icon>\r\n <b class=\"mat-title margin-remove ws-mat-primary-text\" i18n>Preview</b>\r\n </div>\r\n </mat-card>\r\n </div>\r\n <div class=\"edit-feature-window heightwidth\">\r\n <!-- <div class=\"flex flex-middle margin-left-l margin-bottom-s padding-top-s\">\r\n <mat-icon class=\"ws-mat-primary-text padding-right-s\">swap_horiz</mat-icon>\r\n <b class=\"mat-body margin-remove \" i18n>Cropped dimensions: {{ opWidth }} * {{ opHeight }} px</b>\r\n </div> -->\r\n <div class=\"flex flex-middle margin-left-l margin-bottom-s padding-top-s\">\r\n <mat-icon class=\"ws-mat-primary-text padding-right-s\">swap_horiz</mat-icon>\r\n <b class=\"mat-body margin-remove \">\r\n <span i18n>Cropped Width: </span>\r\n <span>{{ croppedWidth }}</span>\r\n <span i18n>px</span>\r\n </b>\r\n </div>\r\n <div class=\"flex flex-middle margin-left-l margin-bottom-s padding-top-s\">\r\n <mat-icon class=\"ws-mat-primary-text padding-right-s\">swap_vert</mat-icon>\r\n <b class=\"mat-body margin-remove \">\r\n <span i18n>Cropped Height: </span>\r\n <span>{{ croppedHeight }}</span>\r\n <span i18n>px</span>\r\n </b>\r\n </div>\r\n </div>\r\n </mat-dialog-content>\r\n </ng-container>\r\n <mat-dialog-actions align=\"end\" *ngIf=\"!isNotOfRequiredSize \">\r\n <div class=\"flex flex-end margin-bottom-s\">\r\n <!-- <button mat-raised-button type=\"button\" (click)=\" reset()\">\r\n <span i18n>Reset</span>\r\n </button> -->\r\n <button mat-raised-button type=\"button\" class=\"text-white ws-mat-primary-background text-white\"\r\n (click)=\" croppingImage()\">\r\n <span class=\"text-white\" i18n>Apply</span>\r\n </button>\r\n </div>\r\n </mat-dialog-actions>\r\n</ng-container>\r\n", styles: [".image-cropper{max-height:55vh}::ng-deep image-cropper .overlay{background-color:transparent!important}.Slides{display:block;height:auto;width:50%;position:relative;margin-left:auto;margin-right:auto;padding:0 1.25em}@media only screen and (max-width: 1030px){.Slides{padding:0;width:100%}}.cursor{cursor:pointer}.edit-feature-window{background:transparent;justify-content:center}mat-toolbar{background-color:#fff!important;z-index:1!important}mat-dialog-content{padding:1.25em!important}@media only screen and (max-width: 1030px){mat-dialog-content{padding:.25em .5em!important}}.heightwidth{display:flex}@media only screen and (max-width: 1030px){.heightwidth{display:block}}@media only screen and (max-width: 1030px){.mat-button{min-width:auto;padding:0 14px}}.largeicon{font-size:2em;padding:.13em .5em}.tooltip{background:#b71c1c}.dimension-icon{position:relative;top:.35em;padding:0 0 0 .3em}@media only screen and (max-width: 1030px){.button-text{display:none}}.image-cropper-profile{max-height:55vh}.profile-slides{box-shadow:0 10px 20px #00000030,0 6px 6px #0000003b;display:block;height:auto;width:50%;position:relative;margin-left:auto;margin-right:auto}@media only screen and (max-width: 1030px){.profile-slides{padding:0;width:100%}}.toolbar{left:50%;margin:1em 0 0 -10em;position:absolute;width:auto;border-radius:4px}.cf:before,.cf:after{content:\"\";display:table}.cf:after{clear:both}.toolbar li{float:left;list-style:none}.toolbar a{border-left:0px solid rgba(79,123,170,.4);border-right:1px solid rgba(255,255,255,.3)}.toolbar li:first-child a{border-left:none;border-radius:4px 0 0 4px}.toolbar li:last-child a{border-right:none;border-radius:0 4px 4px 0}\n"], components: [{ type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7.ImageCropperComponent, selector: "image-cropper", inputs: ["format", "transform", "maintainAspectRatio", "aspectRatio", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "autoCrop", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "cropper", "alignImage", "disabled", "imageChangedEvent", "imageURL", "imageBase64", "imageFile"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed"] }, { type: i8.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "vertical", "displayWith", "valueText"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }, { type: i9.MatCard, selector: "mat-card", exportAs: ["matCard"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }] });
153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImageCropComponent, decorators: [{
154
+ type: Component,
155
+ args: [{
156
+ selector: 'ws-utils-image-crop',
157
+ templateUrl: './image-crop.component.html',
158
+ styleUrls: ['./image-crop.component.scss'],
159
+ }]
160
+ }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: i2.ConfigurationsService }, { type: i3.MatSnackBar }, { type: i4.ValueService }, { type: undefined, decorators: [{
161
+ type: Inject,
162
+ args: [MAT_DIALOG_DATA]
163
+ }] }]; }, propDecorators: { data: [{
164
+ type: Output
165
+ }] } });
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY3JvcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdXRpbHMvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlLWNyb3AvaW1hZ2UtY3JvcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdXRpbHMvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlLWNyb3AvaW1hZ2UtY3JvcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQy9FLE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7Ozs7Ozs7Ozs7OztBQWtCeEUsTUFBTSxPQUFPLGtCQUFrQjtJQXdCN0IsWUFDVSxTQUEyQyxFQUMzQyxTQUFnQyxFQUNoQyxRQUFxQixFQUNyQixRQUFzQixFQUNMLElBQWtCO1FBSm5DLGNBQVMsR0FBVCxTQUFTLENBQWtDO1FBQzNDLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBQ2hDLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQTFCdEIsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUE7UUFDekMsZ0JBQVcsR0FBRyxLQUFLLENBQUE7UUFDbkIsd0JBQW1CLEdBQUcsS0FBSyxDQUFBO1FBRzNCLG9CQUFlLEdBQVEsRUFBRSxDQUFBO1FBQ3pCLFVBQUssR0FBUSxFQUFFLENBQUE7UUFDZixXQUFNLEdBQVEsRUFBRSxDQUFBO1FBR2hCLG9CQUFlLEdBQVEsRUFBRSxDQUFBO1FBQ3pCLGtCQUFhLEdBQVEsRUFBRSxDQUFBO1FBQ3ZCLGlCQUFZLEdBQVEsRUFBRSxDQUFBO1FBQ3RCLHdCQUFtQixHQUFRLEtBQUssQ0FB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Q2pCLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUM3QixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFVO1FBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7UUFDdkIsSUFBSSxDQUFDLFNBQVMsbUNBQ1QsSUFBSSxDQUFDLFNBQVMsS0FDakIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEdBQ25CLENBQUE7SUFDSCxDQUFDO0lBR0QsYUFBYTtRQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUMxQyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO0lBQ3JCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUN4QixDQUFDOztnSEExTFUsa0JBQWtCLDBJQTZCbkIsZUFBZTtvR0E3QmQsa0JBQWtCLHNGQ25CL0IsZzlQQW1KQTs0RkRoSWEsa0JBQWtCO2tCQUw5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFdBQVcsRUFBRSw2QkFBNkI7b0JBQzFDLFNBQVMsRUFBRSxDQUFDLDZCQUE2QixDQUFDO2lCQUMzQzs7MEJBOEJJLE1BQU07MkJBQUMsZUFBZTs0Q0EzQmYsSUFBSTtzQkFBYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZydcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInXHJcblxyXG5pbXBvcnQgeyBJbWFnZUNyb3BwZWRFdmVudCwgSW1hZ2VUcmFuc2Zvcm0gfSBmcm9tICduZ3gtaW1hZ2UtY3JvcHBlcidcclxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlndXJhdGlvbnMuc2VydmljZSdcclxuaW1wb3J0IHsgVmFsdWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmFsdWUuc2VydmljZSdcclxuZXhwb3J0IGludGVyZmFjZSBJRGlhbG9ndWVEdGEge1xyXG4gIGlzUm91bmRDcm9wOiBib29sZWFuLFxyXG4gIGltYWdlRmlsZTogRmlsZSxcclxuICBoZWlnaHQ6IG51bWJlcixcclxuICB3aWR0aDogbnVtYmVyLFxyXG4gIGltYWdlRmlsZU5hbWU6IHN0cmluZ1xyXG59XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnd3MtdXRpbHMtaW1hZ2UtY3JvcCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ltYWdlLWNyb3AuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ltYWdlLWNyb3AuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEltYWdlQ3JvcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy8gbmVlZCB0byBzZXQgZm9yIGNyZWF0b3IgTG9nb1xyXG4gIEBPdXRwdXQoKSBkYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpXHJcbiAgaXNSb3VuZENyb3AgPSBmYWxzZVxyXG4gIGlzTm90T2ZSZXF1aXJlZFNpemUgPSBmYWxzZVxyXG4gIGltYWdlRmlsZSE6IEZpbGVcclxuICBjcm9waW1hZ2VGaWxlITogRmlsZVxyXG4gIGltYWdlRmlsZUJhc2U2NDogYW55ID0gJydcclxuICB3aWR0aDogYW55ID0gJydcclxuICBoZWlnaHQ6IGFueSA9ICcnXHJcbiAgb3BIZWlnaHQ6IGFueVxyXG4gIG9wV2lkdGg6IGFueVxyXG4gIGltYWdlRGltZW5zaW9uczogYW55ID0gJydcclxuICBjcm9wcGVkSGVpZ2h0OiBhbnkgPSAnJ1xyXG4gIGNyb3BwZWRXaWR0aDogYW55ID0gJydcclxuICBjcm9wcGVyUmVhZHlUb1N0YXJ0OiBhbnkgPSBmYWxzZVxyXG4gIGZpbGVOYW1lID0gJydcclxuICBjYW52YXNSb3RhdGlvbiA9IDBcclxuICB0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtID0ge31cclxuICByZXNldFZhbHVlID0gZmFsc2VcclxuICBlbGVtZW50OiBhbnlcclxuICBpc1hTbWFsbCA9IGZhbHNlXHJcbiAgaXNUaHVtYm5haWwgPSB0cnVlXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxJbWFnZUNyb3BDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxyXG4gICAgcHJpdmF0ZSB2YWx1ZVN2YzogVmFsdWVTZXJ2aWNlLFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIGRhdGE6IElEaWFsb2d1ZUR0YVxyXG4gICkge1xyXG4gICAgdGhpcy5pc1JvdW5kQ3JvcCA9IGRhdGEuaXNSb3VuZENyb3BcclxuICAgIGlmIChkYXRhLmltYWdlRmlsZSkge1xyXG4gICAgICB0aGlzLmltYWdlRmlsZSA9IGRhdGEuaW1hZ2VGaWxlXHJcbiAgICB9XHJcbiAgICBpZiAoZGF0YS5pbWFnZUZpbGVOYW1lKSB7XHJcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBkYXRhLmltYWdlRmlsZU5hbWVcclxuICAgIH1cclxuICAgIGlmICghZGF0YS5pc1JvdW5kQ3JvcCkge1xyXG4gICAgICBpZiAoZGF0YS5oZWlnaHQpIHtcclxuICAgICAgICB0aGlzLm9wSGVpZ2h0ID0gZGF0YS5oZWlnaHRcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGF0YS53aWR0aCkge1xyXG4gICAgICAgIHRoaXMub3BXaWR0aCA9IGRhdGEud2lkdGhcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy50aHVtYm5haWxTaXplRGV0ZWN0aW9uKClcclxuICAgIHRoaXMudmFsdWVTdmMuaXNYU21hbGwkLnN1YnNjcmliZSgoaXNYU21hbGw6IGJvb2xlYW4pID0+IHtcclxuICAgICAgdGhpcy5pc1hTbWFsbCA9IGlzWFNtYWxsXHJcbiAgICAgIGlmICh0aGlzLmlzWFNtYWxsKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYudXBkYXRlU2l6ZSgnOTAlJylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi51cGRhdGVTaXplKCc3MCUnKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIC8vIGRpc3BsYXlzIHRoZSBkZWZhdWx0IGltYWdlXHJcbiAgY2hhbmdlVG9EZWZhdWx0SW1nKCRldmVudDogYW55KSB7XHJcbiAgICAkZXZlbnQudGFyZ2V0LnNyYyA9IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnID9cclxuICAgICAgdGhpcy5jb25maWdTdmMuaW5zdGFuY2VDb25maWcubG9nb3MuZGVmYXVsdENvbnRlbnQgOiAnJ1xyXG4gIH1cclxuXHJcbiAgLy8gaW1hZ2UgY3JvcHBpbmcgZXZlbnRcclxuICBpbWFnZUNyb3BwZWQoZXZlbnQ6IEltYWdlQ3JvcHBlZEV2ZW50KSB7XHJcblxyXG4gICAgdGhpcy5pbWFnZUZpbGVCYXNlNjQgPSBldmVudC5iYXNlNjQgLy8gc3RvcmUgdGhlIGNyb3BwZWQgaW1hZ2UgYXMgYSBiYXNlNjQgdmFsdWVcclxuICAgIHRoaXMuY3JvcGltYWdlRmlsZSA9IHRoaXMuYmFzZTY0SW1hZ2VUb0Jsb2IodGhpcy5pbWFnZUZpbGVCYXNlNjQpIC8vIGNvbnZlcnQgdGhlIGNyb3BwZWQgaW1hZ2UgYXMgYSBmaWxlXHJcbiAgICB0aGlzLmNyb3BwZWRIZWlnaHQgPSBldmVudC5oZWlnaHRcclxuICAgIHRoaXMuY3JvcHBlZFdpZHRoID0gZXZlbnQud2lkdGhcclxuXHJcbiAgfVxyXG5cclxuICBvcGVuU25hY2tCYXIobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4obWVzc2FnZSwgJ1gnLCB7XHJcbiAgICAgIGR1cmF0aW9uOiAyMDAwLFxyXG4gICAgfSlcclxuICB9XHJcbiAgY29udGludWVUb0ltYWdlQ3JvcCgpIHtcclxuICAgIHRoaXMuaXNOb3RPZlJlcXVpcmVkU2l6ZSA9IGZhbHNlXHJcbiAgfVxyXG5cclxuICAvLyBjaGVja3MgaWYgdGhlIGltYWdlIGlzIG9mIHRoZSBjb3JyZWN0IGRpbWVuc2lvbnNcclxuICB0aHVtYm5haWxTaXplRGV0ZWN0aW9uKCkge1xyXG4gICAgY29uc3QgZnIgPSBuZXcgRmlsZVJlYWRlcigpXHJcbiAgICBmci5yZWFkQXNEYXRhVVJMKHRoaXMuaW1hZ2VGaWxlKVxyXG4gICAgZnIub25sb2FkID0gKCkgPT4geyAvLyB3aGVuIGZpbGUgaGFzIGxvYWRlZFxyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKVxyXG4gICAgICBpbWcuc3JjID0gZnIucmVzdWx0IGFzIHN0cmluZ1xyXG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSBpbWcud2lkdGhcclxuICAgICAgICB0aGlzLmhlaWdodCA9IGltZy5oZWlnaHRcclxuICAgICAgICBpZiAoIXRoaXMuaXNSb3VuZENyb3ApIHtcclxuICAgICAgICAgIGlmICgodGhpcy5oZWlnaHQgPT09IHRoaXMub3BIZWlnaHQpICYmICh0aGlzLndpZHRoID09PSB0aGlzLm9wV2lkdGgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblNuYWNrQmFyKCdJbWFnZSBpcyBvZiB0aGUgcmVxdWlyZWQgZGltZW5zaW9ucyBvZiB0aGUgdGh1bWJuYWlsLCBjcm9waW5nIGlzIG5vdCBhdmFpbGFibGUhJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoKHRoaXMuaGVpZ2h0IDwgdGhpcy5vcEhlaWdodCkgfHwgKHRoaXMud2lkdGggPCB0aGlzLm9wV2lkdGgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNOb3RPZlJlcXVpcmVkU2l6ZSA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgYmFzZTY0SW1hZ2VUb0Jsb2Ioc3RyOiBzdHJpbmcpOiBGaWxlIHtcclxuICAgIC8vIGV4dHJhY3QgY29udGVudCB0eXBlIGFuZCBiYXNlNjQgcGF5bG9hZCBmcm9tIG9yaWdpbmFsIHN0cmluZ1xyXG5cclxuICAgIGNvbnN0IHBvcyA9IHN0ci5pbmRleE9mKCc7YmFzZTY0LCcpXHJcbiAgICAvLyB2YXIgdHlwZSA9IHN0ci5zdWJzdHJpbmcoNSwgcG9zKTtcclxuICAgIGNvbnN0IGI2NCA9IHN0ci5zdWJzdHIocG9zICsgOClcclxuICAgIC8vIGRlY29kZSBiYXNlNjRcclxuICAgIGNvbnN0IGltYWdlQ29udGVudCA9IGF0b2IoYjY0KVxyXG4gICAgLy8gY3JlYXRlIGFuIEFycmF5QnVmZmVyIGFuZCBhIHZpZXcgKGFzIHVuc2lnbmVkIDgtYml0KVxyXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGltYWdlQ29udGVudC5sZW5ndGgpXHJcbiAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKVxyXG4gICAgLy8gZmlsbCB0aGUgdmlldywgdXNpbmcgdGhlIGRlY29kZWQgYmFzZTY0XHJcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IGltYWdlQ29udGVudC5sZW5ndGg7IG4gPSBuICsgMSkge1xyXG4gICAgICB2aWV3W25dID0gaW1hZ2VDb250ZW50LmNoYXJDb2RlQXQobilcclxuICAgIH1cclxuICAgIC8vIGNvbnZlcnQgQXJyYXlCdWZmZXIgdG8gQmxvYlxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt2aWV3XSwgeyB0eXBlOiAnaW1hZ2UvcG5nJyB9KVxyXG4gICAgY29uc3QgYjogYW55ID0gYmxvYlxyXG4gICAgLy8gQ2FzdCB0byBhIEZpbGUoKSB0eXBlXHJcbiAgICBiLmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpXHJcbiAgICBiLm5hbWUgPSB0aGlzLmZpbGVOYW1lXHJcbiAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCB0aGlzLmZpbGVOYW1lLCB7IHR5cGU6ICdpbWFnZS9qcGVnJyB9KVxyXG4gICAgcmV0dXJuIGZpbGVcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZsaXBBZnRlclJvdGF0ZSgpIHtcclxuICAgIGNvbnN0IGZsaXBwZWRIID0gdGhpcy50cmFuc2Zvcm0uZmxpcEhcclxuICAgIGNvbnN0IGZsaXBwZWRWID0gdGhpcy50cmFuc2Zvcm0uZmxpcFZcclxuICAgIHRoaXMudHJhbnNmb3JtID0ge1xyXG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcclxuICAgICAgZmxpcEg6IGZsaXBwZWRWLFxyXG4gICAgICBmbGlwVjogZmxpcHBlZEgsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByb3RhdGVMZWZ0KCkge1xyXG4gICAgdGhpcy5jYW52YXNSb3RhdGlvbiA9IHRoaXMuY2FudmFzUm90YXRpb24gLSAxXHJcbiAgICB0aGlzLmZsaXBBZnRlclJvdGF0ZSgpXHJcbiAgfVxyXG5cclxuICByb3RhdGVSaWdodCgpIHtcclxuICAgIHRoaXMuY2FudmFzUm90YXRpb24gPSB0aGlzLmNhbnZhc1JvdGF0aW9uICsgMVxyXG4gICAgdGhpcy5mbGlwQWZ0ZXJSb3RhdGUoKVxyXG4gIH1cclxuXHJcbiAgZmxpcEhvcml6b250YWwoKSB7XHJcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcclxuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXHJcbiAgICAgIGZsaXBIOiAhdGhpcy50cmFuc2Zvcm0uZmxpcEgsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB6b29tKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmVzZXRWYWx1ZSA9IGZhbHNlXHJcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcclxuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXHJcbiAgICAgIHNjYWxlOiBldmVudC52YWx1ZSxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGNhbGxzIHdoZW4gYXBwbHkgYnV0dG9uIGlzIGNsaWNrZWQsYW5kIHJldHVybnMgdGhlIGNyb3BwZWQgaW1hZ2VcclxuICBjcm9wcGluZ0ltYWdlKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5jcm9waW1hZ2VGaWxlKVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLnJlc2V0VmFsdWUgPSB0cnVlXHJcbiAgICB0aGlzLmNhbnZhc1JvdGF0aW9uID0gMFxyXG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7fVxyXG4gIH1cclxuICAvLyBjbG9zZXMgdGhlIGRpYWxvZyBib3hcclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKClcclxuICB9XHJcblxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJpc05vdE9mUmVxdWlyZWRTaXplXCI+XHJcbiAgPG1hdC1kaWFsb2ctY29udGVudD5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IHBsLTRcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwid3MtbWF0LXdhcm4tdGV4dCBsYXJnZWljb24gcGFkZGluZy1yZW1vdmUtbGVmdFwiPndhcm5pbmc8L21hdC1pY29uPlxyXG4gICAgICA8aDIgY2xhc3M9XCJ0ZXh0LXhsXCIgaTE4bj5UaGlzIGltYWdlIHdpbGwgYXBwZWFyIHN0cmV0Y2hlZCBhcyBpdCBpcyBub3QgaW4gcHJvcGVyIGRpbWVuc2lvbi4gRG8geW91IHdhbnQgdG9cclxuICAgICAgICBjb250aW51ZT88L2gyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSBwbC00XCI+XHJcbiAgICAgIDxkaXYgaTE4biBjbGFzcz1cInBiLTJcIj5Ob3RlOjwvZGl2PlxyXG4gICAgICA8ZGl2IGkxOG4gY2xhc3M9XCJwYi0yXCI+UmVxdWlyZWQgZGltZW5zaW9ucyA6IDI2NSAqIDE1MDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtYmFzZWxpbmVcIj5cclxuICAgICAgICA8ZGl2PkN1cnJlbnQgZGltZW5zaW9uczo8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGwtMVwiPnt7IHdpZHRoIH19ICoge3sgaGVpZ2h0IH19IHB4PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgPG1hdC1kaWFsb2ctYWN0aW9ucyBjbGFzcz1cImZsZXggZmxleC1lbmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtZW5kXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gYXV0b2ZvY3VzIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiIGNsb3NlKClcIj5cclxuICAgICAgICA8c3BhbiBpMThuPk5vPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ0ZXh0LXdoaXRlIHdzLW1hdC1wcmltYXJ5LWJhY2tncm91bmQgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIiBjb250aW51ZVRvSW1hZ2VDcm9wKClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtd2hpdGVcIiBpMThuPlllczwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuPC9uZy1jb250YWluZXI+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc1JvdW5kQ3JvcFwiPlxyXG4gIDwhLS0gRm9yIFByb2ZpbGUgaW1hZ2UgLSBzdGFydCAtLT5cclxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWJldHdlZW5cIj5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cIiB3cy1tYXQtcHJpbWFyeS10ZXh0IG1hcmdpbi1ib3R0b20teHhzXCI+Y3JvcDwvbWF0LWljb24+XHJcbiAgICA8cCBtYXQtZGlhbG9nLXRpdGxlIGNsYXNzPVwidGV4dC0zeGwgZm9udC13ZWlnaHQtYm9sZCB3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bj5Qcm9maWxlIFBob3RvPC9wPlxyXG4gICAgPG1hdC1pY29uIGNsYXNzPVwiZmxvYXQtcmlnaHQgZmxleC1lbmQgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiY2xvc2UoKVwiIGkxOG4+Y2xvc2U8L21hdC1pY29uPlxyXG5cclxuICA8L2Rpdj5cclxuICA8bWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwicC0wIG92ZXJmbG93LWhpZGRlbiBcIiAqbmdJZj1cImlzUm91bmRDcm9wXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWJldHdlZW5cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUtc2xpZGVzXCI+XHJcbiAgICAgICAgPGltYWdlLWNyb3BwZXIgI2ltYWdlQ3JvcHBlciBjbGFzcz1cImltYWdlLWNyb3BwZXItcHJvZmlsZVwiIFtpbWFnZUZpbGVdPVwiaW1hZ2VGaWxlXCIgW21haW50YWluQXNwZWN0UmF0aW9dPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbYXNwZWN0UmF0aW9dPVwiMjUwIC8gMjUwXCIgW3Jlc2l6ZVRvV2lkdGhdPVwiMTAwXCIgW3JvdW5kQ3JvcHBlcl09XCJpc1JvdW5kQ3JvcFwiIFtyZXNpemVUb0hlaWdodF09XCIxMjBcIlxyXG4gICAgICAgICAgW2Nyb3BwZXJNaW5XaWR0aF09XCI1MDBcIiBbZm9ybWF0XT1cIidqcGVnJ1wiIFt0cmFuc2Zvcm1dPVwidHJhbnNmb3JtXCIgW2NhbnZhc1JvdGF0aW9uXT1cImNhbnZhc1JvdGF0aW9uXCJcclxuICAgICAgICAgIChpbWFnZUNyb3BwZWQpPVwiaW1hZ2VDcm9wcGVkKCRldmVudClcIj5cclxuICAgICAgICA8L2ltYWdlLWNyb3BwZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8dWwgY2xhc3M9XCJ0b29sYmFyIGNmXCI+XHJcbiAgICAgIDxsaT48YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwibWF0LWJ1dHRvblwiIChjbGljayk9XCJyb3RhdGVMZWZ0KClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRleHQtd2hpdGUgbGFyZ2UtaWNvbiB3cy1tYXQtcHJpbWFyeS10ZXh0XCI+cm90YXRlX2xlZnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tdGV4dFwiIGkxOG4+Um90YXRlIExlZnQ8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbGk+XHJcbiAgICAgIDxsaT48YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwibWF0LWJ1dHRvblwiIChjbGljayk9XCJyb3RhdGVSaWdodCgpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ0ZXh0LXdoaXRlIG1lZGl1bS1pY29uIHdzLW1hdC1wcmltYXJ5LXRleHRcIj5yb3RhdGVfcmlnaHQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tdGV4dFwiIGkxOG4+Um90YXRlIFJpZ2h0PC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPjwvbGk+XHJcbiAgICAgIDxsaT48YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwibWF0LWJ1dHRvblwiIChjbGljayk9XCJmbGlwSG9yaXpvbnRhbCgpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ0ZXh0LXdoaXRlIG1lZGl1bS1pY29uIHdzLW1hdC1wcmltYXJ5LXRleHRcIj5mbGlwPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLXRleHRcIiBpMThuPkZsaXAgSG9yaXpvbnRhbDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj48L2xpPlxyXG4gICAgICA8bGk+PGEgaHJlZj1cIiNcIj48aSBjbGFzcz1cImljb24tY2xvdWRcIj48L2k+PC9hPjwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG48L25nLWNvbnRhaW5lcj4gPCEtLSBGb3IgUHJvZmlsZSBpbWFnZSAtIGVuZCAtLT5cclxuPG5nLWNvbnRhaW5lcj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTm90T2ZSZXF1aXJlZFNpemUgJiYgIWlzUm91bmRDcm9wIFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1iZXR3ZWVuXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIiB3cy1tYXQtcHJpbWFyeS10ZXh0IG1hcmdpbi1ib3R0b20teHhzXCI+Y3JvcDwvbWF0LWljb24+XHJcbiAgICAgIDxwIG1hdC1kaWFsb2ctdGl0bGUgY2xhc3M9XCJ0ZXh0LTN4bCB0aXRsZS1tYXJnaW4gZm9udC13ZWlnaHQtYm9sZCB3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bj5FZGl0IEltYWdlPC9wPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJmbG9hdC1yaWdodCBmbGV4LWVuZCBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJjbG9zZSgpXCIgaTE4bj5cclxuICAgICAgICBjbG9zZTwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQgKm5nSWY9XCIhaXNSb3VuZENyb3BcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIlNsaWRlc1wiPlxyXG4gICAgICAgICAgPGltYWdlLWNyb3BwZXIgI2ltYWdlQ3JvcHBlciBjbGFzcz1cImltYWdlLWNyb3BwZXIgcGFkZGluZy1yZW1vdmVcIiBbaW1hZ2VGaWxlXT1cImltYWdlRmlsZVwiXHJcbiAgICAgICAgICAgIFttYWludGFpbkFzcGVjdFJhdGlvXT1cInRydWVcIiBbYXNwZWN0UmF0aW9dPVwib3BXaWR0aCAvIG9wSGVpZ2h0XCIgW3Jlc2l6ZVRvV2lkdGhdPVwib3BXaWR0aFwiXHJcbiAgICAgICAgICAgIFtyb3VuZENyb3BwZXJdPVwiaXNSb3VuZENyb3BcIiBbcmVzaXplVG9IZWlnaHRdPVwib3BIZWlnaHRcIiBbY3JvcHBlck1pbldpZHRoXT1cIm9wV2lkdGhcIiBbZm9ybWF0XT1cIidqcGVnJ1wiXHJcbiAgICAgICAgICAgIFt0cmFuc2Zvcm1dPVwidHJhbnNmb3JtXCIgW2NhbnZhc1JvdGF0aW9uXT1cImNhbnZhc1JvdGF0aW9uXCIgKGltYWdlQ3JvcHBlZCk9XCJpbWFnZUNyb3BwZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPC9pbWFnZS1jcm9wcGVyPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXktM1wiIGkxOG4+Wm9vbTwvc3Bhbj5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZXIgY2xhc3M9XCJ3LWZ1bGwgbXgtM1wiIGNvbG9yPVwicHJpbWFyeVwiIChpbnB1dCk9XCJ6b29tKCRldmVudClcIiBtaW49XCIxXCIgbWF4PVwiMi41XCIgc3RlcD1cIjAuMVwiPlxyXG4gICAgICAgICAgICA8L21hdC1zbGlkZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0LWZlYXR1cmUtd2luZG93IFwiICpuZ0lmPVwiIWlzWFNtYWxsXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJtYXQtYnV0dG9uXCIgKGNsaWNrKT1cInJvdGF0ZUxlZnQoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwidGV4dC13aGl0ZSBsYXJnZS1pY29uIHdzLW1hdC1wcmltYXJ5LXRleHRcIj5yb3RhdGVfbGVmdDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi10ZXh0XCIgaTE4bj5Sb3RhdGUgTGVmdDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwibWF0LWJ1dHRvblwiIChjbGljayk9XCJyb3RhdGVSaWdodCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ0ZXh0LXdoaXRlIG1lZGl1bS1pY29uIHdzLW1hdC1wcmltYXJ5LXRleHRcIj5yb3RhdGVfcmlnaHQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tdGV4dFwiIGkxOG4+Um90YXRlIFJpZ2h0PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJtYXQtYnV0dG9uXCIgKGNsaWNrKT1cImZsaXBIb3Jpem9udGFsKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInRleHQtd2hpdGUgbWVkaXVtLWljb24gd3MtbWF0LXByaW1hcnktdGV4dFwiPmZsaXA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tdGV4dFwiIGkxOG4+RmxpcCBIb3Jpem9udGFsPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LWJvcmRlci10b3AtYm9sZGVyIG1hdC1lbGV2YXRpb24tejYgbWFyZ2luLWJvdHRvbS1sIGJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICpuZ0lmPVwiaXNUaHVtYm5haWxcIj5cclxuICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUZpbGVCYXNlNjRcIiBoZWlnaHQ9XCJhdXRvXCIgd2lkdGg9XCIxMDAlXCIgKGVycm9yKT1cImNoYW5nZVRvRGVmYXVsdEltZygkZXZlbnQpXCIgLz5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbWlkZGxlIGp1c3RpZnktY2VudGVyIG1hcmdpbi1ib3R0b20tcyBwYWRkaW5nLXRvcC1zXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHQgcGFkZGluZy1yaWdodC1zXCI+aW1hZ2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8YiBjbGFzcz1cIm1hdC10aXRsZSBtYXJnaW4tcmVtb3ZlIHdzLW1hdC1wcmltYXJ5LXRleHRcIiBpMThuPlByZXZpZXc8L2I+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L21hdC1jYXJkPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImVkaXQtZmVhdHVyZS13aW5kb3cgaGVpZ2h0d2lkdGhcIj5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbWlkZGxlIG1hcmdpbi1sZWZ0LWwgbWFyZ2luLWJvdHRvbS1zIHBhZGRpbmctdG9wLXNcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHQgcGFkZGluZy1yaWdodC1zXCI+c3dhcF9ob3JpejwvbWF0LWljb24+XHJcbiAgICAgICAgICA8YiBjbGFzcz1cIm1hdC1ib2R5IG1hcmdpbi1yZW1vdmUgXCIgaTE4bj5Dcm9wcGVkIGRpbWVuc2lvbnM6IHt7IG9wV2lkdGggfX0gKiB7eyBvcEhlaWdodCB9fSBweDwvYj5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1taWRkbGUgbWFyZ2luLWxlZnQtbCBtYXJnaW4tYm90dG9tLXMgcGFkZGluZy10b3Atc1wiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dCBwYWRkaW5nLXJpZ2h0LXNcIj5zd2FwX2hvcml6PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxiIGNsYXNzPVwibWF0LWJvZHkgbWFyZ2luLXJlbW92ZSBcIj5cclxuICAgICAgICAgICAgPHNwYW4gaTE4bj5Dcm9wcGVkIFdpZHRoOiA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGNyb3BwZWRXaWR0aCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gaTE4bj5weDwvc3Bhbj5cclxuICAgICAgICAgIDwvYj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LW1pZGRsZSBtYXJnaW4tbGVmdC1sIG1hcmdpbi1ib3R0b20tcyBwYWRkaW5nLXRvcC1zXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0IHBhZGRpbmctcmlnaHQtc1wiPnN3YXBfdmVydDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8YiBjbGFzcz1cIm1hdC1ib2R5IG1hcmdpbi1yZW1vdmUgXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGkxOG4+Q3JvcHBlZCBIZWlnaHQ6IDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgY3JvcHBlZEhlaWdodCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gaTE4bj5weDwvc3Bhbj5cclxuICAgICAgICAgIDwvYj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCIgKm5nSWY9XCIhaXNOb3RPZlJlcXVpcmVkU2l6ZSBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtZW5kIG1hcmdpbi1ib3R0b20tc1wiPlxyXG4gICAgICA8IS0tICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiIHJlc2V0KClcIj5cclxuICAgICAgICA8c3BhbiBpMThuPlJlc2V0PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidGV4dC13aGl0ZSB3cy1tYXQtcHJpbWFyeS1iYWNrZ3JvdW5kIHRleHQtd2hpdGVcIlxyXG4gICAgICAgIChjbGljayk9XCIgY3JvcHBpbmdJbWFnZSgpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXdoaXRlXCIgaTE4bj5BcHBseTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
@@ -1,27 +1,58 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { NgModule } from '@angular/core';
3
- import { MatButtonModule, MatCardModule, MatDialogModule, MatIconModule, MatToolbarModule, MatTooltipModule, MatSliderModule, } from '@angular/material';
3
+ import { MatButtonModule } from '@angular/material/button';
4
+ import { MatCardModule } from '@angular/material/card';
5
+ import { MatDialogModule } from '@angular/material/dialog';
6
+ import { MatIconModule } from '@angular/material/icon';
7
+ import { MatSliderModule } from '@angular/material/slider';
8
+ import { MatToolbarModule } from '@angular/material/toolbar';
9
+ import { MatTooltipModule } from '@angular/material/tooltip';
4
10
  import { ImageCropperModule } from 'ngx-image-cropper';
5
11
  import { ImageCropComponent } from './image-crop.component';
12
+ import * as i0 from "@angular/core";
6
13
  export class ImageCropModule {
7
14
  }
8
- ImageCropModule.decorators = [
9
- { type: NgModule, args: [{
10
- declarations: [ImageCropComponent],
11
- imports: [
12
- CommonModule,
13
- ImageCropperModule,
14
- MatIconModule,
15
- MatButtonModule,
16
- MatDialogModule,
17
- MatToolbarModule,
18
- MatDialogModule,
19
- MatCardModule,
20
- MatTooltipModule,
21
- MatSliderModule,
22
- ],
23
- exports: [ImageCropComponent],
24
- entryComponents: [ImageCropComponent],
25
- },] }
26
- ];
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY3JvcC5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac3VuYmlyZC1jYi91dGlscy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2ltYWdlLWNyb3AvaW1hZ2UtY3JvcC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsZUFBZSxFQUNmLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGVBQWUsR0FDaEIsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQW1CM0QsTUFBTSxPQUFPLGVBQWU7OztZQWpCM0IsUUFBUSxTQUFDO2dCQUNSLFlBQVksRUFBRSxDQUFDLGtCQUFrQixDQUFDO2dCQUNsQyxPQUFPLEVBQUU7b0JBQ1AsWUFBWTtvQkFDWixrQkFBa0I7b0JBQ2xCLGFBQWE7b0JBQ2IsZUFBZTtvQkFDZixlQUFlO29CQUNmLGdCQUFnQjtvQkFDaEIsZUFBZTtvQkFDZixhQUFhO29CQUNiLGdCQUFnQjtvQkFDaEIsZUFBZTtpQkFDaEI7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUM7Z0JBQzdCLGVBQWUsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2FBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7XHJcbiAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gIE1hdENhcmRNb2R1bGUsXHJcbiAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gIE1hdEljb25Nb2R1bGUsXHJcbiAgTWF0VG9vbGJhck1vZHVsZSxcclxuICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gIE1hdFNsaWRlck1vZHVsZSxcclxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCdcclxuaW1wb3J0IHsgSW1hZ2VDcm9wcGVyTW9kdWxlIH0gZnJvbSAnbmd4LWltYWdlLWNyb3BwZXInXHJcbmltcG9ydCB7IEltYWdlQ3JvcENvbXBvbmVudCB9IGZyb20gJy4vaW1hZ2UtY3JvcC5jb21wb25lbnQnXHJcbi8vIEBkeW5hbWljXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbSW1hZ2VDcm9wQ29tcG9uZW50XSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBJbWFnZUNyb3BwZXJNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgTWF0VG9vbGJhck1vZHVsZSxcclxuICAgIE1hdERpYWxvZ01vZHVsZSxcclxuICAgIE1hdENhcmRNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0U2xpZGVyTW9kdWxlLFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW0ltYWdlQ3JvcENvbXBvbmVudF0sXHJcbiAgZW50cnlDb21wb25lbnRzOiBbSW1hZ2VDcm9wQ29tcG9uZW50XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEltYWdlQ3JvcE1vZHVsZSB7IH1cclxuIl19
15
+ ImageCropModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImageCropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
16
+ ImageCropModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImageCropModule, declarations: [ImageCropComponent], imports: [CommonModule,
17
+ ImageCropperModule,
18
+ MatIconModule,
19
+ MatButtonModule,
20
+ MatDialogModule,
21
+ MatToolbarModule,
22
+ MatDialogModule,
23
+ MatCardModule,
24
+ MatTooltipModule,
25
+ MatSliderModule], exports: [ImageCropComponent] });
26
+ ImageCropModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImageCropModule, imports: [[
27
+ CommonModule,
28
+ ImageCropperModule,
29
+ MatIconModule,
30
+ MatButtonModule,
31
+ MatDialogModule,
32
+ MatToolbarModule,
33
+ MatDialogModule,
34
+ MatCardModule,
35
+ MatTooltipModule,
36
+ MatSliderModule,
37
+ ]] });
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ImageCropModule, decorators: [{
39
+ type: NgModule,
40
+ args: [{
41
+ declarations: [ImageCropComponent],
42
+ imports: [
43
+ CommonModule,
44
+ ImageCropperModule,
45
+ MatIconModule,
46
+ MatButtonModule,
47
+ MatDialogModule,
48
+ MatToolbarModule,
49
+ MatDialogModule,
50
+ MatCardModule,
51
+ MatTooltipModule,
52
+ MatSliderModule,
53
+ ],
54
+ exports: [ImageCropComponent],
55
+ entryComponents: [ImageCropComponent],
56
+ }]
57
+ }] });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY3JvcC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdXRpbHMvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlLWNyb3AvaW1hZ2UtY3JvcC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTs7QUFtQjNELE1BQU0sT0FBTyxlQUFlOzs2R0FBZixlQUFlOzhHQUFmLGVBQWUsaUJBaEJYLGtCQUFrQixhQUUvQixZQUFZO1FBQ1osa0JBQWtCO1FBQ2xCLGFBQWE7UUFDYixlQUFlO1FBQ2YsZUFBZTtRQUNmLGdCQUFnQjtRQUNoQixlQUFlO1FBQ2YsYUFBYTtRQUNiLGdCQUFnQjtRQUNoQixlQUFlLGFBRVAsa0JBQWtCOzhHQUdqQixlQUFlLFlBZmpCO1lBQ1AsWUFBWTtZQUNaLGtCQUFrQjtZQUNsQixhQUFhO1lBQ2IsZUFBZTtZQUNmLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsZUFBZTtZQUNmLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsZUFBZTtTQUNoQjs0RkFJVSxlQUFlO2tCQWpCM0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDbEMsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDO29CQUM3QixlQUFlLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJ1xuaW1wb3J0IHsgTWF0Q2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnXG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbidcbmltcG9ydCB7IE1hdFNsaWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlcidcbmltcG9ydCB7IE1hdFRvb2xiYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sYmFyJ1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnXHJcbmltcG9ydCB7IEltYWdlQ3JvcHBlck1vZHVsZSB9IGZyb20gJ25neC1pbWFnZS1jcm9wcGVyJ1xyXG5pbXBvcnQgeyBJbWFnZUNyb3BDb21wb25lbnQgfSBmcm9tICcuL2ltYWdlLWNyb3AuY29tcG9uZW50J1xyXG4vLyBAZHluYW1pY1xyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW0ltYWdlQ3JvcENvbXBvbmVudF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgSW1hZ2VDcm9wcGVyTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdERpYWxvZ01vZHVsZSxcclxuICAgIE1hdFRvb2xiYXJNb2R1bGUsXHJcbiAgICBNYXREaWFsb2dNb2R1bGUsXHJcbiAgICBNYXRDYXJkTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIE1hdFNsaWRlck1vZHVsZSxcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtJbWFnZUNyb3BDb21wb25lbnRdLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW0ltYWdlQ3JvcENvbXBvbmVudF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbWFnZUNyb3BNb2R1bGUgeyB9XHJcbiJdfQ==