verben-authentication-ui 1.0.3 → 1.0.4

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 (434) hide show
  1. package/esm2022/lib/components/auth-callback/auth-callback.component.mjs +57 -0
  2. package/esm2022/lib/components/auth-callback/auth-callback.module.mjs +18 -0
  3. package/esm2022/lib/components/button/button.component.mjs +46 -0
  4. package/esm2022/lib/components/button/button.module.mjs +20 -0
  5. package/esm2022/lib/components/forgot-password/ForgotPasswordData.mjs +2 -0
  6. package/esm2022/lib/components/forgot-password/forgot-password.component.mjs +89 -0
  7. package/esm2022/lib/components/forgot-password/forgot-password.module.mjs +34 -0
  8. package/esm2022/lib/components/mail/mail.component.mjs +69 -0
  9. package/esm2022/lib/components/mail/mail.module.mjs +21 -0
  10. package/esm2022/lib/components/mail-validation/mail-validation.component.mjs +108 -0
  11. package/esm2022/lib/components/mail-validation/mail-validation.module.mjs +34 -0
  12. package/esm2022/lib/components/o-auth/o-auth.component.mjs +107 -0
  13. package/esm2022/lib/components/o-auth/o-auth.module.mjs +19 -0
  14. package/esm2022/lib/components/otp-input/otp-input.component.mjs +86 -0
  15. package/esm2022/lib/components/otp-input/otp-input.module.mjs +23 -0
  16. package/esm2022/lib/components/reset-password/ResetPasswordData.mjs +2 -0
  17. package/esm2022/lib/components/reset-password/reset-password.component.mjs +108 -0
  18. package/esm2022/lib/components/reset-password/reset-password.module.mjs +34 -0
  19. package/esm2022/lib/components/role-control/ChildrenType.mjs +6 -0
  20. package/esm2022/lib/components/role-control/MappedRole.mjs +2 -0
  21. package/esm2022/lib/components/role-control/MappedRoleAction.mjs +2 -0
  22. package/esm2022/lib/components/role-control/MappedRoleContext.mjs +2 -0
  23. package/esm2022/lib/components/role-control/UIActions.mjs +7 -0
  24. package/esm2022/lib/components/role-control/UIs.mjs +40 -0
  25. package/esm2022/lib/components/role-control/base-table-style.mjs +53 -0
  26. package/esm2022/lib/components/role-control/role-control.component.mjs +1556 -0
  27. package/esm2022/lib/components/role-control/role-control.module.mjs +18 -0
  28. package/esm2022/lib/components/role-control/role-control.service.mjs +54 -0
  29. package/esm2022/lib/components/sign-in/sign-in.component.mjs +318 -0
  30. package/esm2022/lib/components/sign-in/sign-in.module.mjs +24 -0
  31. package/esm2022/lib/components/sign-up/sign-up.component.mjs +229 -0
  32. package/esm2022/lib/components/sign-up/sign-up.module.mjs +24 -0
  33. package/esm2022/lib/components/sso/base-table-style.mjs +53 -0
  34. package/esm2022/lib/components/sso/helper.mjs +16 -0
  35. package/esm2022/lib/components/sso/sso-form/sso-form.component.mjs +74 -0
  36. package/esm2022/lib/components/sso/sso.columns.mjs +29 -0
  37. package/esm2022/lib/components/sso/sso.component.mjs +236 -0
  38. package/esm2022/lib/components/sso/sso.module.mjs +63 -0
  39. package/esm2022/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.mjs +209 -0
  40. package/esm2022/lib/components/two-factor-auth-otp/two-factor-auth-otp.module.mjs +22 -0
  41. package/esm2022/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.mjs +90 -0
  42. package/esm2022/lib/components/two-factor-auth-setup/two-factor-auth-setup.module.mjs +19 -0
  43. package/esm2022/lib/components/user-management/base-table-style.mjs +53 -0
  44. package/esm2022/lib/components/user-management/services/user-management.service.mjs +88 -0
  45. package/esm2022/lib/components/user-management/user-management-form/use-management-form.component.mjs +71 -0
  46. package/esm2022/lib/components/user-management/user-management.columns.mjs +47 -0
  47. package/esm2022/lib/components/user-management/user-management.component.mjs +475 -0
  48. package/esm2022/lib/components/user-management/user-management.module.mjs +79 -0
  49. package/esm2022/lib/components/user-management/user-status-badge/user-status-badge.component.mjs +26 -0
  50. package/esm2022/lib/components/user-request/user-request.component.mjs +320 -0
  51. package/esm2022/lib/components/user-request/user-request.module.mjs +38 -0
  52. package/esm2022/lib/components/user-request-approval/access-request.columns.mjs +29 -0
  53. package/esm2022/lib/components/user-request-approval/base-table-style.mjs +53 -0
  54. package/esm2022/lib/components/user-request-approval/facades/user-access-request.facade.mjs +260 -0
  55. package/esm2022/lib/components/user-request-approval/helper.mjs +56 -0
  56. package/esm2022/lib/components/user-request-approval/services/user-access-request.service.mjs +93 -0
  57. package/esm2022/lib/components/user-request-approval/states/user-access-request.state.mjs +92 -0
  58. package/esm2022/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.mjs +26 -0
  59. package/esm2022/lib/components/user-request-approval/user-request-approval.component.mjs +270 -0
  60. package/esm2022/lib/components/user-request-approval/user-request-approval.module.mjs +80 -0
  61. package/esm2022/lib/components/user-request-approval/user-request-form/use-request-form.component.mjs +86 -0
  62. package/esm2022/lib/models/ApplicationRoleAction.mjs +2 -0
  63. package/esm2022/lib/models/ApplicationRoleContext.mjs +2 -0
  64. package/esm2022/lib/models/ErrorResponse.mjs +11 -0
  65. package/esm2022/lib/models/OAuthParam.mjs +2 -0
  66. package/esm2022/lib/models/OAuthType.mjs +9 -0
  67. package/esm2022/lib/models/PagedResult.mjs +2 -0
  68. package/esm2022/lib/models/PasswordRequestParam.mjs +2 -0
  69. package/esm2022/lib/models/PermissionConfig.mjs +2 -0
  70. package/esm2022/lib/models/ResponseKeyValue.mjs +2 -0
  71. package/esm2022/lib/models/Role.mjs +2 -0
  72. package/esm2022/lib/models/RoleAction.mjs +2 -0
  73. package/esm2022/lib/models/RoleContext.mjs +2 -0
  74. package/esm2022/lib/models/SearchDynamicWrapper.mjs +2 -0
  75. package/esm2022/lib/models/SearchOperator.mjs +6 -0
  76. package/esm2022/lib/models/SearchPropertySign.mjs +11 -0
  77. package/esm2022/lib/models/SearchPropertyValue.mjs +2 -0
  78. package/esm2022/lib/models/SearchPropertyValueType.mjs +11 -0
  79. package/esm2022/lib/models/SortDirection.mjs +7 -0
  80. package/esm2022/lib/models/Tag.mjs +2 -0
  81. package/esm2022/lib/models/TenantConfig.mjs +2 -0
  82. package/esm2022/lib/models/UserRequest.mjs +2 -0
  83. package/esm2022/lib/models/auth-mechanism.mjs +8 -0
  84. package/esm2022/lib/models/base.mjs +2 -0
  85. package/esm2022/lib/models/conditions.mjs +13 -0
  86. package/esm2022/lib/models/log-in.mjs +2 -0
  87. package/esm2022/lib/models/mainUser.mjs +2 -0
  88. package/esm2022/lib/models/oauth-resp.mjs +2 -0
  89. package/esm2022/lib/models/oauth-response.mjs +2 -0
  90. package/esm2022/lib/models/object-state.mjs +8 -0
  91. package/esm2022/lib/models/otpValue.mjs +2 -0
  92. package/esm2022/lib/models/paged.mjs +2 -0
  93. package/esm2022/lib/models/query-params.mjs +2 -0
  94. package/esm2022/lib/models/request-status.mjs +5 -0
  95. package/esm2022/lib/models/resend-otp-data.mjs +2 -0
  96. package/esm2022/lib/models/sign-up.mjs +2 -0
  97. package/esm2022/lib/models/single-sign-on.mjs +2 -0
  98. package/esm2022/lib/models/status.mjs +6 -0
  99. package/esm2022/lib/models/user-access-request-status.mjs +7 -0
  100. package/esm2022/lib/models/user-access-request.mjs +2 -0
  101. package/esm2022/lib/models/user.mjs +2 -0
  102. package/esm2022/lib/pipes/async-label.pipe.mjs +25 -0
  103. package/esm2022/lib/services/authorization.service.mjs +26 -0
  104. package/esm2022/lib/services/encryption.service.mjs +52 -0
  105. package/esm2022/lib/services/environment.service.mjs +26 -0
  106. package/esm2022/lib/services/http-web-request.service.mjs +85 -0
  107. package/esm2022/lib/services/label.service.mjs +134 -0
  108. package/esm2022/lib/services/util.service.mjs +55 -0
  109. package/esm2022/lib/shared/shared.module.mjs +84 -0
  110. package/esm2022/public-api.mjs +48 -0
  111. package/esm2022/verben-authentication-ui.mjs +5 -0
  112. package/fesm2022/verben-authentication-ui.mjs +6491 -0
  113. package/fesm2022/verben-authentication-ui.mjs.map +1 -0
  114. package/index.d.ts +5 -0
  115. package/lib/components/auth-callback/auth-callback.component.d.ts +17 -0
  116. package/lib/components/auth-callback/auth-callback.module.d.ts +8 -0
  117. package/lib/components/button/button.component.d.ts +17 -0
  118. package/lib/components/button/button.module.d.ts +10 -0
  119. package/{src/lib/components/forgot-password/ForgotPasswordData.ts → lib/components/forgot-password/ForgotPasswordData.d.ts} +1 -1
  120. package/lib/components/forgot-password/forgot-password.component.d.ts +29 -0
  121. package/lib/components/forgot-password/forgot-password.module.d.ts +10 -0
  122. package/lib/components/mail/mail.component.d.ts +32 -0
  123. package/lib/components/mail/mail.module.d.ts +11 -0
  124. package/lib/components/mail-validation/mail-validation.component.d.ts +42 -0
  125. package/lib/components/mail-validation/mail-validation.module.d.ts +10 -0
  126. package/lib/components/o-auth/o-auth.component.d.ts +30 -0
  127. package/lib/components/o-auth/o-auth.module.d.ts +9 -0
  128. package/lib/components/otp-input/otp-input.component.d.ts +21 -0
  129. package/lib/components/otp-input/otp-input.module.d.ts +13 -0
  130. package/lib/components/reset-password/ResetPasswordData.d.ts +5 -0
  131. package/lib/components/reset-password/reset-password.component.d.ts +30 -0
  132. package/lib/components/reset-password/reset-password.module.d.ts +10 -0
  133. package/lib/components/role-control/ChildrenType.d.ts +4 -0
  134. package/{src/lib/components/role-control/MappedRole.ts → lib/components/role-control/MappedRole.d.ts} +2 -3
  135. package/{src/lib/components/role-control/MappedRoleAction.ts → lib/components/role-control/MappedRoleAction.d.ts} +1 -2
  136. package/{src/lib/components/role-control/MappedRoleContext.ts → lib/components/role-control/MappedRoleContext.d.ts} +3 -4
  137. package/lib/components/role-control/UIActions.d.ts +5 -0
  138. package/lib/components/role-control/UIs.d.ts +38 -0
  139. package/lib/components/role-control/base-table-style.d.ts +1 -0
  140. package/lib/components/role-control/role-control.component.d.ts +123 -0
  141. package/lib/components/role-control/role-control.module.d.ts +8 -0
  142. package/lib/components/role-control/role-control.service.d.ts +9 -0
  143. package/lib/components/sign-in/sign-in.component.d.ts +95 -0
  144. package/lib/components/sign-in/sign-in.module.d.ts +13 -0
  145. package/lib/components/sign-up/sign-up.component.d.ts +68 -0
  146. package/lib/components/sign-up/sign-up.module.d.ts +13 -0
  147. package/lib/components/sso/base-table-style.d.ts +1 -0
  148. package/lib/components/sso/helper.d.ts +2 -0
  149. package/lib/components/sso/sso-form/sso-form.component.d.ts +21 -0
  150. package/lib/components/sso/sso.columns.d.ts +3 -0
  151. package/lib/components/sso/sso.component.d.ts +54 -0
  152. package/lib/components/sso/sso.module.d.ts +11 -0
  153. package/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.d.ts +67 -0
  154. package/lib/components/two-factor-auth-otp/two-factor-auth-otp.module.d.ts +12 -0
  155. package/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.d.ts +39 -0
  156. package/lib/components/two-factor-auth-setup/two-factor-auth-setup.module.d.ts +9 -0
  157. package/lib/components/user-management/base-table-style.d.ts +1 -0
  158. package/lib/components/user-management/services/user-management.service.d.ts +44 -0
  159. package/lib/components/user-management/user-management-form/use-management-form.component.d.ts +22 -0
  160. package/lib/components/user-management/user-management.columns.d.ts +3 -0
  161. package/lib/components/user-management/user-management.component.d.ts +123 -0
  162. package/lib/components/user-management/user-management.module.d.ts +14 -0
  163. package/lib/components/user-management/user-status-badge/user-status-badge.component.d.ts +12 -0
  164. package/lib/components/user-request/user-request.component.d.ts +80 -0
  165. package/lib/components/user-request/user-request.module.d.ts +11 -0
  166. package/lib/components/user-request-approval/access-request.columns.d.ts +3 -0
  167. package/lib/components/user-request-approval/base-table-style.d.ts +1 -0
  168. package/lib/components/user-request-approval/facades/user-access-request.facade.d.ts +39 -0
  169. package/lib/components/user-request-approval/helper.d.ts +7 -0
  170. package/lib/components/user-request-approval/services/user-access-request.service.d.ts +65 -0
  171. package/lib/components/user-request-approval/states/user-access-request.state.d.ts +35 -0
  172. package/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.d.ts +12 -0
  173. package/lib/components/user-request-approval/user-request-approval.component.d.ts +69 -0
  174. package/lib/components/user-request-approval/user-request-approval.module.d.ts +12 -0
  175. package/lib/components/user-request-approval/user-request-form/use-request-form.component.d.ts +25 -0
  176. package/lib/models/ApplicationRoleAction.d.ts +9 -0
  177. package/{src/lib/models/ApplicationRoleContext copy.ts → lib/models/ApplicationRoleContext.d.ts} +5 -6
  178. package/lib/models/ErrorResponse.d.ts +6 -0
  179. package/lib/models/OAuthParam.d.ts +9 -0
  180. package/lib/models/OAuthType.d.ts +7 -0
  181. package/lib/models/PagedResult.d.ts +9 -0
  182. package/lib/models/PasswordRequestParam.d.ts +5 -0
  183. package/{src/lib/models/PermissionConfig.ts → lib/models/PermissionConfig.d.ts} +3 -4
  184. package/lib/models/ResponseKeyValue.d.ts +5 -0
  185. package/{src/lib/models/Role.ts → lib/models/Role.d.ts} +5 -6
  186. package/lib/models/RoleAction.d.ts +10 -0
  187. package/lib/models/RoleContext.d.ts +10 -0
  188. package/{src/lib/models/SearchDynamicWrapper.ts → lib/models/SearchDynamicWrapper.d.ts} +2 -3
  189. package/lib/models/SearchOperator.d.ts +4 -0
  190. package/lib/models/SearchPropertySign.d.ts +9 -0
  191. package/{src/lib/models/SearchPropertyValue.ts → lib/models/SearchPropertyValue.d.ts} +6 -7
  192. package/lib/models/SearchPropertyValueType.d.ts +9 -0
  193. package/lib/models/SortDirection.d.ts +5 -0
  194. package/{src/lib/models/Tag.ts → lib/models/Tag.d.ts} +3 -4
  195. package/lib/models/TenantConfig.d.ts +18 -0
  196. package/lib/models/UserRequest.d.ts +32 -0
  197. package/lib/models/auth-mechanism.d.ts +14 -0
  198. package/lib/models/base.d.ts +12 -0
  199. package/lib/models/conditions.d.ts +11 -0
  200. package/lib/models/log-in.d.ts +8 -0
  201. package/{src/lib/models/mainUser.ts → lib/models/mainUser.d.ts} +2 -3
  202. package/lib/models/oauth-resp.d.ts +6 -0
  203. package/{src/lib/models/oauth-response.ts → lib/models/oauth-response.d.ts} +1 -1
  204. package/lib/models/object-state.d.ts +6 -0
  205. package/{src/lib/models/otpValue.ts → lib/models/otpValue.d.ts} +2 -4
  206. package/lib/models/paged.d.ts +9 -0
  207. package/lib/models/query-params.d.ts +8 -0
  208. package/lib/models/request-status.d.ts +3 -0
  209. package/lib/models/resend-otp-data.d.ts +8 -0
  210. package/lib/models/sign-up.d.ts +9 -0
  211. package/lib/models/single-sign-on.d.ts +7 -0
  212. package/lib/models/status.d.ts +4 -0
  213. package/lib/models/user-access-request-status.d.ts +5 -0
  214. package/{src/lib/models/user-access-request.ts → lib/models/user-access-request.d.ts} +4 -5
  215. package/lib/models/user.d.ts +18 -0
  216. package/lib/pipes/async-label.pipe.d.ts +11 -0
  217. package/lib/services/authorization.service.d.ts +14 -0
  218. package/lib/services/encryption.service.d.ts +13 -0
  219. package/lib/services/environment.service.d.ts +22 -0
  220. package/lib/services/http-web-request.service.d.ts +23 -0
  221. package/lib/services/label.service.d.ts +15 -0
  222. package/lib/services/util.service.d.ts +11 -0
  223. package/lib/shared/shared.module.d.ts +10 -0
  224. package/package.json +15 -10
  225. package/{src/public-api.ts → public-api.d.ts} +0 -24
  226. package/ng-package.json +0 -8
  227. package/src/lib/base/base-data.component.ts +0 -86
  228. package/src/lib/base/base-data.facade.ts +0 -157
  229. package/src/lib/base/base-data.service.ts +0 -49
  230. package/src/lib/base/base-data.state.ts +0 -94
  231. package/src/lib/base/models.ts +0 -14
  232. package/src/lib/components/auth-callback/auth-callback.component.css +0 -30
  233. package/src/lib/components/auth-callback/auth-callback.component.html +0 -6
  234. package/src/lib/components/auth-callback/auth-callback.component.spec.ts +0 -23
  235. package/src/lib/components/auth-callback/auth-callback.component.ts +0 -56
  236. package/src/lib/components/auth-callback/auth-callback.module.ts +0 -10
  237. package/src/lib/components/button/button.component.css +0 -3
  238. package/src/lib/components/button/button.component.html +0 -13
  239. package/src/lib/components/button/button.component.spec.ts +0 -23
  240. package/src/lib/components/button/button.component.ts +0 -24
  241. package/src/lib/components/button/button.module.ts +0 -11
  242. package/src/lib/components/forgot-password/forgot-password.component.css +0 -46
  243. package/src/lib/components/forgot-password/forgot-password.component.html +0 -19
  244. package/src/lib/components/forgot-password/forgot-password.component.spec.ts +0 -23
  245. package/src/lib/components/forgot-password/forgot-password.component.ts +0 -88
  246. package/src/lib/components/forgot-password/forgot-password.module.ts +0 -18
  247. package/src/lib/components/mail/mail.component.css +0 -0
  248. package/src/lib/components/mail/mail.component.html +0 -11
  249. package/src/lib/components/mail/mail.component.spec.ts +0 -23
  250. package/src/lib/components/mail/mail.component.ts +0 -47
  251. package/src/lib/components/mail/mail.module.ts +0 -13
  252. package/src/lib/components/mail-validation/mail-validation.component.css +0 -59
  253. package/src/lib/components/mail-validation/mail-validation.component.html +0 -37
  254. package/src/lib/components/mail-validation/mail-validation.component.spec.ts +0 -23
  255. package/src/lib/components/mail-validation/mail-validation.component.ts +0 -66
  256. package/src/lib/components/mail-validation/mail-validation.module.ts +0 -18
  257. package/src/lib/components/o-auth/o-auth.component.css +0 -26
  258. package/src/lib/components/o-auth/o-auth.component.html +0 -26
  259. package/src/lib/components/o-auth/o-auth.component.spec.ts +0 -23
  260. package/src/lib/components/o-auth/o-auth.component.ts +0 -115
  261. package/src/lib/components/o-auth/o-auth.module.ts +0 -11
  262. package/src/lib/components/otp-input/otp-input.component.css +0 -19
  263. package/src/lib/components/otp-input/otp-input.component.html +0 -15
  264. package/src/lib/components/otp-input/otp-input.component.spec.ts +0 -23
  265. package/src/lib/components/otp-input/otp-input.component.ts +0 -88
  266. package/src/lib/components/otp-input/otp-input.module.ts +0 -15
  267. package/src/lib/components/reset-password/ResetPasswordData.ts +0 -5
  268. package/src/lib/components/reset-password/reset-password.component.css +0 -29
  269. package/src/lib/components/reset-password/reset-password.component.html +0 -24
  270. package/src/lib/components/reset-password/reset-password.component.spec.ts +0 -23
  271. package/src/lib/components/reset-password/reset-password.component.ts +0 -108
  272. package/src/lib/components/reset-password/reset-password.module.ts +0 -18
  273. package/src/lib/components/role-control/ChildrenType.ts +0 -4
  274. package/src/lib/components/role-control/UIActions.ts +0 -5
  275. package/src/lib/components/role-control/UIs.ts +0 -38
  276. package/src/lib/components/role-control/base-table-style.ts +0 -52
  277. package/src/lib/components/role-control/role-control.component.css +0 -55
  278. package/src/lib/components/role-control/role-control.component.html +0 -571
  279. package/src/lib/components/role-control/role-control.component.spec.ts +0 -23
  280. package/src/lib/components/role-control/role-control.component.ts +0 -1817
  281. package/src/lib/components/role-control/role-control.module.ts +0 -10
  282. package/src/lib/components/role-control/role-control.service.spec.ts +0 -16
  283. package/src/lib/components/role-control/role-control.service.ts +0 -53
  284. package/src/lib/components/sign-in/sign-in.component.css +0 -21
  285. package/src/lib/components/sign-in/sign-in.component.html +0 -83
  286. package/src/lib/components/sign-in/sign-in.component.spec.ts +0 -23
  287. package/src/lib/components/sign-in/sign-in.component.ts +0 -267
  288. package/src/lib/components/sign-in/sign-in.module.ts +0 -17
  289. package/src/lib/components/sign-up/sign-up.component.css +0 -36
  290. package/src/lib/components/sign-up/sign-up.component.html +0 -132
  291. package/src/lib/components/sign-up/sign-up.component.spec.ts +0 -23
  292. package/src/lib/components/sign-up/sign-up.component.ts +0 -180
  293. package/src/lib/components/sign-up/sign-up.module.ts +0 -15
  294. package/src/lib/components/sso/base-table-style.ts +0 -52
  295. package/src/lib/components/sso/helper.ts +0 -17
  296. package/src/lib/components/sso/sso-form/sso-form.component.css +0 -13
  297. package/src/lib/components/sso/sso-form/sso-form.component.html +0 -109
  298. package/src/lib/components/sso/sso-form/sso-form.component.spec.ts +0 -23
  299. package/src/lib/components/sso/sso-form/sso-form.component.ts +0 -70
  300. package/src/lib/components/sso/sso.columns.ts +0 -32
  301. package/src/lib/components/sso/sso.component.css +0 -47
  302. package/src/lib/components/sso/sso.component.html +0 -208
  303. package/src/lib/components/sso/sso.component.spec.ts +0 -23
  304. package/src/lib/components/sso/sso.component.ts +0 -261
  305. package/src/lib/components/sso/sso.module.ts +0 -40
  306. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.css +0 -8
  307. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.html +0 -30
  308. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.spec.ts +0 -23
  309. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.ts +0 -155
  310. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.module.ts +0 -15
  311. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.css +0 -17
  312. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.html +0 -45
  313. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.spec.ts +0 -23
  314. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.ts +0 -57
  315. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.module.ts +0 -11
  316. package/src/lib/components/user-management/base-table-style.ts +0 -52
  317. package/src/lib/components/user-management/facades/user-management.facades.ts +0 -133
  318. package/src/lib/components/user-management/helper.ts +0 -38
  319. package/src/lib/components/user-management/index.ts +0 -4
  320. package/src/lib/components/user-management/services/user-management.service.spec.ts +0 -16
  321. package/src/lib/components/user-management/services/user-management.service.ts +0 -111
  322. package/src/lib/components/user-management/states/user-management.state.ts +0 -65
  323. package/src/lib/components/user-management/user-management-form/use-management-form.component.ts +0 -73
  324. package/src/lib/components/user-management/user-management-form/user-management-form.component.css +0 -0
  325. package/src/lib/components/user-management/user-management-form/user-management-form.component.html +0 -80
  326. package/src/lib/components/user-management/user-management-form/user-management-form.component.spec.ts +0 -23
  327. package/src/lib/components/user-management/user-management.columns.ts +0 -51
  328. package/src/lib/components/user-management/user-management.component.css +0 -31
  329. package/src/lib/components/user-management/user-management.component.html +0 -319
  330. package/src/lib/components/user-management/user-management.component.spec.ts +0 -23
  331. package/src/lib/components/user-management/user-management.component.ts +0 -604
  332. package/src/lib/components/user-management/user-management.module.ts +0 -56
  333. package/src/lib/components/user-management/user-status-badge/user-status-badge.component.css +0 -0
  334. package/src/lib/components/user-management/user-status-badge/user-status-badge.component.html +0 -8
  335. package/src/lib/components/user-management/user-status-badge/user-status-badge.component.spec.ts +0 -22
  336. package/src/lib/components/user-management/user-status-badge/user-status-badge.component.ts +0 -22
  337. package/src/lib/components/user-request/user-request.component.css +0 -91
  338. package/src/lib/components/user-request/user-request.component.html +0 -137
  339. package/src/lib/components/user-request/user-request.component.spec.ts +0 -23
  340. package/src/lib/components/user-request/user-request.component.ts +0 -306
  341. package/src/lib/components/user-request/user-request.module.ts +0 -20
  342. package/src/lib/components/user-request-approval/access-request.columns.ts +0 -31
  343. package/src/lib/components/user-request-approval/base-table-style.ts +0 -52
  344. package/src/lib/components/user-request-approval/facades/user-access-request.facade.ts +0 -324
  345. package/src/lib/components/user-request-approval/helper.ts +0 -61
  346. package/src/lib/components/user-request-approval/services/user-access-request.service.spec.ts +0 -16
  347. package/src/lib/components/user-request-approval/services/user-access-request.service.ts +0 -122
  348. package/src/lib/components/user-request-approval/states/user-access-request.state.ts +0 -109
  349. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.css +0 -0
  350. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.html +0 -8
  351. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.spec.ts +0 -23
  352. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.ts +0 -22
  353. package/src/lib/components/user-request-approval/user-request-approval.component.css +0 -6
  354. package/src/lib/components/user-request-approval/user-request-approval.component.html +0 -269
  355. package/src/lib/components/user-request-approval/user-request-approval.component.spec.ts +0 -23
  356. package/src/lib/components/user-request-approval/user-request-approval.component.ts +0 -326
  357. package/src/lib/components/user-request-approval/user-request-approval.module.ts +0 -54
  358. package/src/lib/components/user-request-approval/user-request-form/use-request-form.component.ts +0 -98
  359. package/src/lib/components/user-request-approval/user-request-form/user-request-form.component.css +0 -0
  360. package/src/lib/components/user-request-approval/user-request-form/user-request-form.component.html +0 -94
  361. package/src/lib/components/user-request-approval/user-request-form/user-request-form.component.spec.ts +0 -23
  362. package/src/lib/components/user-request-process/user-request-process.component.css +0 -0
  363. package/src/lib/components/user-request-process/user-request-process.component.html +0 -1
  364. package/src/lib/components/user-request-process/user-request-process.component.spec.ts +0 -23
  365. package/src/lib/components/user-request-process/user-request-process.component.ts +0 -12
  366. package/src/lib/components/user-request-process/user-request-process.module.ts +0 -12
  367. package/src/lib/models/ApplicationRoleAction.ts +0 -10
  368. package/src/lib/models/ApplicationRoleContext.ts +0 -10
  369. package/src/lib/models/ErrorResponse.ts +0 -7
  370. package/src/lib/models/FilterTypes.ts +0 -8
  371. package/src/lib/models/MailConfig.ts +0 -13
  372. package/src/lib/models/MessageConfig.ts +0 -5
  373. package/src/lib/models/MessageMedium.ts +0 -4
  374. package/src/lib/models/OAuthParam.ts +0 -10
  375. package/src/lib/models/OAuthType.ts +0 -7
  376. package/src/lib/models/PagedResult.ts +0 -9
  377. package/src/lib/models/PasswordRequestParam.ts +0 -5
  378. package/src/lib/models/PeriodMode.ts +0 -10
  379. package/src/lib/models/ReportSchedule.ts +0 -23
  380. package/src/lib/models/ReportType.ts +0 -5
  381. package/src/lib/models/ResponseKeyValue.ts +0 -5
  382. package/src/lib/models/RoleAction.ts +0 -11
  383. package/src/lib/models/RoleContext.ts +0 -11
  384. package/src/lib/models/SMSConfig.ts +0 -11
  385. package/src/lib/models/SearchOperator.ts +0 -4
  386. package/src/lib/models/SearchPropertySign.ts +0 -9
  387. package/src/lib/models/SearchPropertyValueType.ts +0 -9
  388. package/src/lib/models/SortDirection.ts +0 -5
  389. package/src/lib/models/TaskNotification.ts +0 -14
  390. package/src/lib/models/TaskNotificationMessageType.ts +0 -4
  391. package/src/lib/models/TaskNotificationType.ts +0 -4
  392. package/src/lib/models/Tenant.ts +0 -22
  393. package/src/lib/models/TenantConfig.ts +0 -19
  394. package/src/lib/models/UserRequest.ts +0 -38
  395. package/src/lib/models/auth-mechanism.ts +0 -15
  396. package/src/lib/models/base.ts +0 -13
  397. package/src/lib/models/conditions.ts +0 -11
  398. package/src/lib/models/log-in.ts +0 -8
  399. package/src/lib/models/oauth-resp.ts +0 -6
  400. package/src/lib/models/object-state.ts +0 -6
  401. package/src/lib/models/paged.ts +0 -9
  402. package/src/lib/models/query-params.ts +0 -9
  403. package/src/lib/models/request-status.ts +0 -4
  404. package/src/lib/models/resend-otp-data.ts +0 -8
  405. package/src/lib/models/resource.ts +0 -27
  406. package/src/lib/models/sign-up.ts +0 -11
  407. package/src/lib/models/single-sign-on.ts +0 -9
  408. package/src/lib/models/status.ts +0 -5
  409. package/src/lib/models/user-access-request-status.ts +0 -5
  410. package/src/lib/models/user-object-state.ts +0 -6
  411. package/src/lib/models/user.ts +0 -19
  412. package/src/lib/pipes/async-label.pipe.spec.ts +0 -8
  413. package/src/lib/pipes/async-label.pipe.ts +0 -20
  414. package/src/lib/services/authorization.service.spec.ts +0 -16
  415. package/src/lib/services/authorization.service.ts +0 -24
  416. package/src/lib/services/encryption.service.ts +0 -57
  417. package/src/lib/services/environment.service.spec.ts +0 -16
  418. package/src/lib/services/environment.service.ts +0 -30
  419. package/src/lib/services/http-web-request.service.spec.ts +0 -16
  420. package/src/lib/services/http-web-request.service.ts +0 -114
  421. package/src/lib/services/label.service.spec.ts +0 -16
  422. package/src/lib/services/label.service.ts +0 -177
  423. package/src/lib/services/util.service.spec.ts +0 -16
  424. package/src/lib/services/util.service.ts +0 -49
  425. package/src/lib/shared/shared.module.ts +0 -55
  426. package/src/styles.css +0 -96
  427. package/src/theme/tailwind-setup.css +0 -3
  428. package/src/theme/tailwind.css +0 -1030
  429. package/src/utils/components/base-data-view.component.ts +0 -131
  430. package/src/utils/models/DataViewConfig.ts +0 -19
  431. package/tailwind.config.js +0 -20
  432. package/tsconfig.lib.json +0 -15
  433. package/tsconfig.lib.prod.json +0 -11
  434. package/tsconfig.spec.json +0 -15
@@ -0,0 +1,475 @@
1
+ import { Component, Input, signal, ViewChild } from '@angular/core';
2
+ import { columns } from './user-management.columns';
3
+ import { SearchPropertySign } from '../../models/SearchPropertySign';
4
+ import { baseStyle } from './base-table-style';
5
+ import { DataFilterType, ConditionalOptions, } from 'verben-ng-ui';
6
+ import { ObjectState } from '../../models/object-state';
7
+ import { ErrorResponse } from '../../models/ErrorResponse';
8
+ import { UserManagementFormComponent } from './user-management-form/use-management-form.component';
9
+ import { Subject } from 'rxjs';
10
+ import { ConditionOptions } from '../../models/conditions';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/router";
13
+ import * as i2 from "./services/user-management.service";
14
+ import * as i3 from "../user-request-approval/services/user-access-request.service";
15
+ import * as i4 from "../../services/http-web-request.service";
16
+ import * as i5 from "../../services/util.service";
17
+ import * as i6 from "../../services/environment.service";
18
+ import * as i7 from "@angular/common";
19
+ import * as i8 from "verben-ng-ui";
20
+ import * as i9 from "./user-management-form/use-management-form.component";
21
+ import * as i10 from "./user-status-badge/user-status-badge.component";
22
+ var DateFilterTypes;
23
+ (function (DateFilterTypes) {
24
+ DateFilterTypes["Before"] = "LT";
25
+ DateFilterTypes["On"] = "EQ";
26
+ DateFilterTypes["After"] = "GT";
27
+ })(DateFilterTypes || (DateFilterTypes = {}));
28
+ export class UserManagementComponent {
29
+ route;
30
+ userManagementService;
31
+ userRole;
32
+ server;
33
+ utilService;
34
+ envSvc;
35
+ cardDataView;
36
+ dataView;
37
+ childComponent;
38
+ currentSearchTerm = '';
39
+ filteredColumns = columns;
40
+ skip = 0;
41
+ users = [];
42
+ searchTerm$ = new Subject();
43
+ searchDebounceTime = 500;
44
+ pageSize = 1;
45
+ pageState = null;
46
+ errorMessage = '';
47
+ appliedFilters = false;
48
+ isLoading = false;
49
+ hasMore = true;
50
+ limit = 20;
51
+ sortParam = 'name';
52
+ sortOrder = 'asc';
53
+ Roles = [];
54
+ Tags = signal([]);
55
+ dataFit = {
56
+ PageSize: 1,
57
+ Skip: 0,
58
+ Total: 0,
59
+ Result: [],
60
+ LastItem: [''],
61
+ IsLoadingResults: false
62
+ };
63
+ currentFilters = [];
64
+ currentSorts = [];
65
+ role = '';
66
+ cardContextHistory = [];
67
+ param;
68
+ constructor(route, userManagementService, userRole, server, utilService, envSvc) {
69
+ this.route = route;
70
+ this.userManagementService = userManagementService;
71
+ this.userRole = userRole;
72
+ this.server = server;
73
+ this.utilService = utilService;
74
+ this.envSvc = envSvc;
75
+ }
76
+ async ngOnInit() {
77
+ this.getRoles();
78
+ this.getTags();
79
+ this.route.paramMap.subscribe(params => {
80
+ this.role = params.get('role') || ''; // Default to an empty string if no role
81
+ this.fetchUsers();
82
+ });
83
+ }
84
+ cardData = [];
85
+ data = [];
86
+ async fetchUsers(sortValue = 'CreatedAt', order = 'asc') {
87
+ this.isLoading = true;
88
+ this.utilService.sendBI(true);
89
+ try {
90
+ const res = await this.userManagementService.getRealUsers(this.role, this.skip, this.limit, this.sortParam, this.sortOrder);
91
+ this.utilService.sendBI(false);
92
+ if (res instanceof ErrorResponse) {
93
+ // Handle error response
94
+ console.error('Error fetching logs:', res);
95
+ }
96
+ else {
97
+ const response = res;
98
+ this.dataFit = response;
99
+ this.users = [...this.users, ...response.Result];
100
+ this.cardData = this.formatCardData(this.users);
101
+ this.skip += this.pageSize;
102
+ this.hasMore = this.skip < response.Total;
103
+ }
104
+ }
105
+ catch (error) {
106
+ console.error('Error:', error);
107
+ }
108
+ finally {
109
+ this.isLoading = false;
110
+ }
111
+ }
112
+ async getRoles() {
113
+ this.utilService.sendBI(true);
114
+ try {
115
+ const res = await this.userRole.getRoles();
116
+ this.utilService.sendBI(false);
117
+ if (res instanceof ErrorResponse) {
118
+ console.error('Error fetching roles:', res);
119
+ return undefined;
120
+ }
121
+ const response = res;
122
+ this.Roles = response.Result;
123
+ }
124
+ catch (error) {
125
+ console.error('Error fetching roles:', error);
126
+ return undefined;
127
+ }
128
+ }
129
+ async getTags() {
130
+ this.utilService.sendBI(true);
131
+ try {
132
+ const res = await this.userRole.getTags();
133
+ this.utilService.sendBI(false);
134
+ if (res instanceof ErrorResponse) {
135
+ console.error('Error fetching roles:', res);
136
+ return undefined;
137
+ }
138
+ const response = res;
139
+ this.Tags.set(response.Result);
140
+ }
141
+ catch (error) {
142
+ console.error('Error fetching roles:', error);
143
+ return undefined;
144
+ }
145
+ }
146
+ handleRoleId(value) {
147
+ const matchedRole = this.Roles.filter((role) => role.Name === value);
148
+ return matchedRole[0]?.Code;
149
+ }
150
+ /**
151
+ * Format users into CardData for the UI library
152
+ * @param users Array of users to format
153
+ * @returns Array of CardData
154
+ */
155
+ formatCardData(users) {
156
+ return users.map(user => ({
157
+ selected: false, // Default selection state
158
+ title: `${user.FirstName} ${user.LastName}`, // Display user's name as title
159
+ data: { ...user }, // Pass the entire user object
160
+ body: [
161
+ { title: 'Name', value: `${user.FirstName} ${user.LastName}` },
162
+ { title: 'E-Mail Address', value: user.MailAddress },
163
+ { title: 'Phone Number', value: user.PhoneNumber || 'N/A' },
164
+ ],
165
+ children: [], // Add child data if necessary
166
+ }));
167
+ }
168
+ columns = columns;
169
+ styles = baseStyle;
170
+ selectedParent;
171
+ basicOption;
172
+ selectedOption = [];
173
+ selectedOptionTwo = [];
174
+ selectedOptionThree;
175
+ missingObject;
176
+ // clearLogs(sortValue: string = 'CreatedAt', order: string = 'asc') {
177
+ // this.User = []; // Clear the logs array
178
+ // this.skip = 0; // Reset the skip value
179
+ // this.hasMore = true; // Reset the flag to allow fetching more logs
180
+ // this.appliedFilters = false;
181
+ // this.fetchUsers();
182
+ // }
183
+ // Grid view properties
184
+ isGridView = true;
185
+ currentData;
186
+ selectedColumnCount = 0;
187
+ selectedFilterTableCount = 0;
188
+ isOPen = true;
189
+ selectedSortCount = 0;
190
+ showFilter = false;
191
+ searchTerm = '';
192
+ showColumn = false;
193
+ showSort = false;
194
+ selectedAll = false;
195
+ visibleColumns = columns.map((col) => ({
196
+ checked: false,
197
+ name: typeof col.header === 'string' ? col.header : col.id,
198
+ type: DataFilterType.Bool,
199
+ }));
200
+ filterArray = [
201
+ { name: 'FirstName', type: DataFilterType.String, checked: false },
202
+ { name: 'LastName', type: DataFilterType.String, checked: false },
203
+ { name: 'MailAddress', type: DataFilterType.String, checked: false },
204
+ { name: 'Status', type: DataFilterType.String, checked: false },
205
+ { name: 'PhoneNumber', type: DataFilterType.String, checked: false },
206
+ { name: 'CreatedAt', type: DataFilterType.Date, checked: false },
207
+ { name: 'Role', type: DataFilterType.String, checked: false },
208
+ ];
209
+ sortOptions = [
210
+ { name: 'Name', type: DataFilterType.String, checked: false },
211
+ { name: 'MailAddress', type: DataFilterType.String, checked: false },
212
+ { name: 'PhoneNumber', type: DataFilterType.String, checked: false },
213
+ { name: 'CreatedAt', type: DataFilterType.Date, checked: false },
214
+ ];
215
+ testParents = [
216
+ { Id: '1', Name: 'Manager' },
217
+ { Id: '2', Name: 'Administrator' },
218
+ { Id: '3', Name: 'Jelom' },
219
+ ];
220
+ getParentLabel(context) {
221
+ console.log({ MissingObj: this.missingObject });
222
+ return this.missingObject.Name;
223
+ }
224
+ onSave() {
225
+ if (this.childComponent.form.valid) {
226
+ // const userData: User = this.childComponent.form.value;
227
+ // console.log('Payload:', [userData]); // Log the payload to check its structure
228
+ this.utilService.sendBI(true);
229
+ this.userManagementService.saveUsers([{
230
+ ...this.currentData?.data,
231
+ ...this.childComponent.form.value,
232
+ DataState: this.currentData?.data.DataState === ObjectState.Unchanged ? ObjectState.Changed : this.currentData?.data.DataState,
233
+ }]).then((result) => {
234
+ if (result instanceof ErrorResponse) {
235
+ }
236
+ else {
237
+ this.utilService.showSuccess("User saved successfully");
238
+ }
239
+ }, (error) => {
240
+ console.error('Unexpected error saving user:', error);
241
+ }).finally(() => {
242
+ this.utilService.sendBI(false);
243
+ });
244
+ console.log(this.childComponent.form.value);
245
+ }
246
+ else {
247
+ console.error('Form is invalid');
248
+ }
249
+ }
250
+ onDelete() {
251
+ console.log('Child form delete triggered');
252
+ // Perform delete logic here
253
+ }
254
+ onDropdownChange(event) {
255
+ // console.log({
256
+ // 'Test Parent Value': this.selectedParent,
257
+ // ...
258
+ // });
259
+ }
260
+ onSelectionChange(selectedRows) {
261
+ console.log('Selection changed:', selectedRows);
262
+ // Handle the selection change
263
+ }
264
+ handleExport(exportedData) {
265
+ console.log('Exported data:', exportedData);
266
+ this.downloadCSV(exportedData);
267
+ }
268
+ downloadCSV(data) {
269
+ const headers = Object.keys(data[0]);
270
+ const csvContent = [
271
+ headers.join(','),
272
+ ...data.map((row) => headers.map((header) => row[header]).join(',')),
273
+ ].join('\n');
274
+ const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
275
+ const link = document.createElement('a');
276
+ if (link.download !== undefined) {
277
+ const url = URL.createObjectURL(blob);
278
+ link.setAttribute('href', url);
279
+ link.setAttribute('download', 'export.csv');
280
+ link.style.visibility = 'hidden';
281
+ document.body.appendChild(link);
282
+ link.click();
283
+ document.body.removeChild(link);
284
+ }
285
+ }
286
+ getCardDataByMailAddress(mailAddress) {
287
+ console.log('cardData array:', this.cardData);
288
+ console.log(mailAddress);
289
+ return this.cardData.find(({ data }) => data?.MailAddress === mailAddress);
290
+ }
291
+ openDetailView(mailAddress) {
292
+ const cardItem = this.getCardDataByMailAddress(mailAddress);
293
+ console.log(cardItem);
294
+ if (cardItem && this.cardDataView) {
295
+ this.dataView.toggleView();
296
+ // First reset all selections
297
+ this.cardData.forEach((item) => {
298
+ item.selected = false;
299
+ if (item.children) {
300
+ item.children.forEach((child) => (child.selected = false));
301
+ }
302
+ });
303
+ // Set the selected item
304
+ cardItem.selected = true;
305
+ this.currentData = this.cardDataView.onItemClick(cardItem);
306
+ // Force change detection if needed
307
+ // this.changeDetectorRef.detectChanges();
308
+ }
309
+ }
310
+ reset() {
311
+ this.skip = 0;
312
+ this.pageSize = 20;
313
+ }
314
+ clearData() {
315
+ this.currentData = {};
316
+ }
317
+ loadMore() {
318
+ if (this.hasMore) {
319
+ this.fetchUsers();
320
+ }
321
+ }
322
+ onColumnChange(event) {
323
+ this.showColumn = event;
324
+ }
325
+ onSortChange(event) {
326
+ this.showSort = event;
327
+ console.log(event);
328
+ }
329
+ onColumnsUpdated(updatedColumns) {
330
+ this.onColumnChange(false);
331
+ this.selectedColumnCount = updatedColumns.length;
332
+ if (updatedColumns) {
333
+ // Filter columns to include only visible ones
334
+ this.filteredColumns = this.columns.filter((col) => this.visibleColumns.find((filter) => filter.name === col.header && filter.checked));
335
+ // Reorder columns based on the order in visibleColumns
336
+ const visibleColumnOrder = this.visibleColumns
337
+ .filter((filter) => filter.checked)
338
+ .map((filter) => filter.name);
339
+ this.columns.sort((a, b) => {
340
+ const indexA = visibleColumnOrder.indexOf(a.header);
341
+ const indexB = visibleColumnOrder.indexOf(b.header);
342
+ return indexA - indexB;
343
+ });
344
+ }
345
+ }
346
+ async postSearch(payload) {
347
+ this.utilService.sendBI(true);
348
+ const res = await this.server.post(`User/SearchUsers/0/10/CreatedAt/asc`, payload);
349
+ this.utilService.sendBI(false);
350
+ if (res instanceof ErrorResponse) {
351
+ this.appliedFilters = false;
352
+ return;
353
+ }
354
+ else {
355
+ this.appliedFilters = true;
356
+ const response = res;
357
+ this.dataFit = response;
358
+ this.users = response.Result;
359
+ this.cardData = this.formatCardData(this.users);
360
+ }
361
+ }
362
+ onFilterApplied(appliedFilter) {
363
+ this.showFilter = false;
364
+ if (Array.isArray(appliedFilter)) {
365
+ this.selectedFilterTableCount = appliedFilter.length;
366
+ console.log(appliedFilter);
367
+ const queryParams = appliedFilter
368
+ .filter((filter) => filter.checked)
369
+ .map((filter) => ({
370
+ PropertyName: filter.name,
371
+ EntityValue: filter.name === 'Role' ? this.handleRoleId(filter.value) : filter.value,
372
+ Type: filter.type,
373
+ Operator: 'And',
374
+ Sign: this.getCondition(filter.condition),
375
+ }));
376
+ this.postSearch(queryParams);
377
+ }
378
+ }
379
+ getCondition(value) {
380
+ switch (value) {
381
+ case ConditionalOptions.On:
382
+ return ConditionOptions.On;
383
+ case ConditionalOptions.After:
384
+ return ConditionOptions.After;
385
+ case ConditionalOptions.Before:
386
+ return ConditionOptions.Before;
387
+ case ConditionalOptions.NotEqual:
388
+ return ConditionOptions.NotEqual;
389
+ default:
390
+ return undefined; // Explicitly return undefined for invalid cases
391
+ }
392
+ }
393
+ onSortUpdated(updatedSorts) {
394
+ this.currentSorts = updatedSorts;
395
+ }
396
+ async onSearch(event) {
397
+ this.searchTerm = event.value;
398
+ this.reset();
399
+ if (!this.searchTerm) {
400
+ this.clearLogs('CreatedAt', 'asc');
401
+ return;
402
+ }
403
+ this.isLoading = true;
404
+ this.utilService.sendBI(true);
405
+ try {
406
+ const res = await this.server.get(`User/GetUserWithParam/${this.searchTerm}/${this.skip}/${this.pageSize}/CreatedAt/asc`);
407
+ this.utilService.sendBI(false);
408
+ if (res instanceof ErrorResponse) {
409
+ console.error('Error during search:', res);
410
+ this.appliedFilters = false;
411
+ }
412
+ else {
413
+ const response = res;
414
+ this.dataFit = response;
415
+ this.users = response.Result;
416
+ this.cardData = this.formatCardData(this.users);
417
+ }
418
+ }
419
+ catch (error) {
420
+ console.error('Search error:', error);
421
+ this.appliedFilters = false;
422
+ }
423
+ finally {
424
+ this.isLoading = false;
425
+ }
426
+ }
427
+ clearLogs(sortValue = 'CreatedAt', order = 'asc') {
428
+ this.users = []; // Clear the logs array
429
+ this.skip = 0; // Reset the skip value
430
+ this.hasMore = true; // Reset the flag to allow fetching more logs
431
+ this.appliedFilters = false;
432
+ this.fetchUsers(sortValue, order);
433
+ }
434
+ onViewChange(isGridView) { }
435
+ onStateChange(event) {
436
+ console.log(`State changed for ${event.key}:`, event.value);
437
+ if (event.key === 'create') {
438
+ console.log('peace is a boy');
439
+ // const newUser = this.newItem()
440
+ // if ( newUser && this.cardDataView) {
441
+ // this.dataView.toggleView();
442
+ // // First reset all selections
443
+ // this.cardData.forEach((item) => {
444
+ // item.selected = false;
445
+ // if (item.children) {
446
+ // item.children.forEach((child) => (child.selected = false));
447
+ // }
448
+ // });
449
+ // this.currentData = this.cardDataView.onItemClick(newUser);
450
+ // // Force change detection if needed
451
+ // // this.changeDetectorRef.detectChanges();
452
+ // }
453
+ }
454
+ }
455
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.UserManagementService }, { token: i3.UserAccessRequestService }, { token: i4.HttpWebRequestService }, { token: i5.UtilService }, { token: i6.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
456
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserManagementComponent, selector: "lib-user-management", inputs: { searchDebounceTime: "searchDebounceTime", pageSize: "pageSize" }, viewQueries: [{ propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }, { propertyName: "childComponent", first: true, predicate: UserManagementFormComponent, descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n \n isToggle:true\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n (onSearchChange)=\"onSearch($event)\"\n [searchValue]=\"searchTerm\"\n \n [searchValue]=\"searchTerm\"\n [selectedSortCount]=\"0\"\n [showFilterChild]=\"showFilter\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n [isTableView]=\"false\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n [data]=\"users\"\n [columns]=\"filteredColumns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value let-deleteRow >\n <div class=\"flex gap-6\">\n <verben-svg\n (click)=\"openDetailView(value)\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n <ng-template #header>\n <strong>Actions</strong>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"status\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-deleteRow=\"deleteRow\"\n let-value=\"value\"\n >\n <lib-user-status-badge\n [status]=\"value\"\n ></lib-user-status-badge>\n </ng-template>\n </ng-container>\n\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"MailAddress\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n mg=\"0px\"\n class=\"gap-1\"\n >\n <verben-left-card-data-view class=\"m-0 gap-2\" >\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData\"\n\n >\n <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" class=\"flex\">\n <verben-svg\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"vlcd.showChildren(item)\"\n [ngClass]=\"vlcd.showToggle(item) ? 'visible' : 'invisible'\"\n class=\"items-center flex cursor-pointer\"\n [icon]=\"item.isChildrenExpanded ? 'minus' : 'plus'\"\n />\n <div\n (click)=\"currentData = vdcv.onItemClick(item)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\"\n >\n <div\n class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"flex-1 flex items-end gap-y-2 gap-x-4 p-4\">\n <div class=\"flex-1 space-y-2\">\n <span\n class=\"font-semibold text-[#404040] flex-1 truncate\"\n >{{ item.title }}</span\n >\n\n <p class=\"flex items-center my-1\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Phone Number:</label\n >\n <span id=\"phone\" class=\"text-sm truncate\">{{\n item.data.PhoneNumber\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-1\">\n <p class=\"grid\">\n <label\n for=\"role\"\n class=\"text-[10px] font-light text-[#404040]\"\n >Role</label\n >\n <span id=\"role\" class=\"text-sm font-medium\">{{\n item.data?.Role?.Name\n }}</span>\n </p>\n\n <lib-user-status-badge\n [status]=\"item.data.Status\"\n ></lib-user-status-badge>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <div class=\" bg-secondary-100 py-2 flex flex-col gap-20 px-2\">\n <lib-user-request-form\n [roles]=\"Roles\"\n [tags]=\"Tags()\"\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n ></lib-user-request-form>\n <div class=\"flex justify-end bottom-8 left-0 right-0 p-3\">\n <!-- <verbena-button text=\"Delete\" bgColor=\"#999999\" textColor=\"white\"\n border=\"1px solid #999999\" (click)=\"onDelete()\"></verbena-button> -->\n <div class=\"flex gap-3\">\n <verbena-button (click)=\"vdv.toggleView()\" text=\"Switch To Table\"\n styleType=\"ylw-outline\"></verbena-button>\n <verbena-button text=\"Save\" bgColor=\"#FFE681\" (click)=\"onSave()\" textColor=\"#404040\"\n border=\"1px solid #FFE681\">\n <!-- (click)=\"\" -->\n </verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div\n [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-end': true,\n }\"\n >\n <!-- <verbena-button\n *ngIf=\"!vdcv.hasCurrentItem()\"\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n <div\n class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n (filtersApplied)=\"onFilterApplied($event)\"\n \n ></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n \n </div>\n\n <div *ngIf=\"vdv.isTableView\" class=\"w-full flex gap-2 justify-end\">\n <!-- <div class=\"message-log-button-container flex justify-between\">\n <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button>\n </div> -->\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n</div>\n\n\n", styles: ["*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}:before,:after{--tw-content: \"\"}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-8{bottom:2rem}.left-0{left:0}.right-0{right:0}.float-right{float:right}.m-0{margin:0}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-0{margin-bottom:0}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-\\[100\\%\\]{height:100%}.h-\\[max-content\\]{height:-moz-max-content;height:max-content}.h-full{height:100%}.w-3{width:.75rem}.w-full{width:100%}.flex-1{flex:1 1 0%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-20{gap:5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-7>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.75rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.break-all{word-break:break-all}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-br-none{border-bottom-right-radius:0}.rounded-tr-none{border-top-right-radius:0}.border,.border-\\[1px\\]{border-width:1px}.border-primary{--tw-border-opacity: 1;border-color:rgb(212 160 7 / var(--tw-border-opacity, 1))}.border-secondary-200{border-color:#d7dbe6}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(212 160 7 / var(--tw-bg-opacity, 1))}.bg-secondary{--tw-bg-opacity: 1;background-color:rgb(232 234 241 / var(--tw-bg-opacity, 1))}.bg-secondary-100{--tw-bg-opacity: 1;background-color:rgb(245 246 249 / var(--tw-bg-opacity, 1))}.bg-secondary-200{background-color:#d7dbe6}.p-3{padding:.75rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pr-1{padding-right:.25rem}.\\!text-\\[10px\\]{font-size:10px!important}.text-\\[10px\\]{font-size:10px}.text-\\[12px\\]{font-size:12px}.text-\\[22px\\]{font-size:22px}.text-\\[24px\\]{font-size:24px}.text-\\[2rem\\]{font-size:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.lowercase{text-transform:lowercase}.leading-6{line-height:1.5rem}.leading-\\[12\\.1px\\]{line-height:12.1px}.leading-\\[16\\.6px\\]{line-height:16.6px}.leading-\\[19\\.5px\\]{line-height:19.5px}.leading-\\[29\\.05px\\]{line-height:29.05px}.leading-\\[33px\\]{line-height:33px}.leading-\\[48px\\]{line-height:48px}.text-\\[\\#333\\]{--tw-text-opacity: 1;color:rgb(51 51 51 / var(--tw-text-opacity, 1))}.text-\\[\\#3479E9\\]{--tw-text-opacity: 1;color:rgb(52 121 233 / var(--tw-text-opacity, 1))}.text-\\[\\#404040\\]{--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.text-\\[black\\]{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-muted{color:#0009}.underline{text-decoration-line:underline}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.master-only-contanier{margin-top:0!important}.scroll-no::-webkit-scrollbar{width:4px}.scroll-no::-webkit-scrollbar-thumb{background:gray}.justify-pp{justify-content:start!important;margin-top:0!important}.toolbar{margin:0!important}@media screen and (max-width: 1024px){.scroll-no{padding:5px}}.view-links{color:#3479e9;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i8.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i8.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i8.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "extendCustomClass", "exportCustomClass", "selectCustomClass", "importCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "importTemplate", "columnTemplate", "extendTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showImportChild", "showExportChild", "showExtendChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i8.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "onItemClick", "onCardChildClick"], outputs: ["loadMoreClick"] }, { kind: "component", type: i8.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i8.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i8.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i8.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i8.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions", "resetSortData"] }, { kind: "component", type: i8.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated", "resetFilter"] }, { kind: "component", type: i8.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied", "resetSortData"] }, { kind: "component", type: i8.DataExportComponent, selector: "lib-data-export", inputs: ["columns", "data"], outputs: ["exportDataEvent"] }, { kind: "component", type: i8.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i9.UserManagementFormComponent, selector: "lib-user-request-form", inputs: ["currentData", "roles", "tags"], outputs: ["switchView", "onFormSave"] }, { kind: "component", type: i10.UserStatusBadgeComponent, selector: "lib-user-status-badge", inputs: ["status"] }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
457
+ }
458
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementComponent, decorators: [{
459
+ type: Component,
460
+ args: [{ selector: 'lib-user-management', template: "<div class=\"flex flex-col gap-4 message-log-container\">\n <verben-data-view\n #vdv\n [viewState]=\"{\n isSearch: true,\n isColumn: true,\n isFilter: true,\n isSort: true,\n isExport: true,\n isSelect: true,\n \n isToggle:true\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n (onSearchChange)=\"onSearch($event)\"\n [searchValue]=\"searchTerm\"\n \n [searchValue]=\"searchTerm\"\n [selectedSortCount]=\"0\"\n [showFilterChild]=\"showFilter\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n [isTableView]=\"false\"\n >\n <div class=\"mt-2\" table-content>\n <lib-data-table\n [data]=\"users\"\n [columns]=\"filteredColumns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value let-deleteRow >\n <div class=\"flex gap-6\">\n <verben-svg\n (click)=\"openDetailView(value)\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n <ng-template #header>\n <strong>Actions</strong>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"status\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-deleteRow=\"deleteRow\"\n let-value=\"value\"\n >\n <lib-user-status-badge\n [status]=\"value\"\n ></lib-user-status-badge>\n </ng-template>\n </ng-container>\n\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"MailAddress\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n mg=\"0px\"\n class=\"gap-1\"\n >\n <verben-left-card-data-view class=\"m-0 gap-2\" >\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData\"\n\n >\n <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" class=\"flex\">\n <verben-svg\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"vlcd.showChildren(item)\"\n [ngClass]=\"vlcd.showToggle(item) ? 'visible' : 'invisible'\"\n class=\"items-center flex cursor-pointer\"\n [icon]=\"item.isChildrenExpanded ? 'minus' : 'plus'\"\n />\n <div\n (click)=\"currentData = vdcv.onItemClick(item)\"\n class=\"flex cursor-pointer w-full bg-secondary rounded-xl\"\n >\n <div\n class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"flex-1 flex items-end gap-y-2 gap-x-4 p-4\">\n <div class=\"flex-1 space-y-2\">\n <span\n class=\"font-semibold text-[#404040] flex-1 truncate\"\n >{{ item.title }}</span\n >\n\n <p class=\"flex items-center my-1\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Phone Number:</label\n >\n <span id=\"phone\" class=\"text-sm truncate\">{{\n item.data.PhoneNumber\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-1\">\n <p class=\"grid\">\n <label\n for=\"role\"\n class=\"text-[10px] font-light text-[#404040]\"\n >Role</label\n >\n <span id=\"role\" class=\"text-sm font-medium\">{{\n item.data?.Role?.Name\n }}</span>\n </p>\n\n <lib-user-status-badge\n [status]=\"item.data.Status\"\n ></lib-user-status-badge>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n\n <verben-right-card-data-view>\n <ng-template #parent>\n <div class=\" bg-secondary-100 py-2 flex flex-col gap-20 px-2\">\n <lib-user-request-form\n [roles]=\"Roles\"\n [tags]=\"Tags()\"\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n ></lib-user-request-form>\n <div class=\"flex justify-end bottom-8 left-0 right-0 p-3\">\n <!-- <verbena-button text=\"Delete\" bgColor=\"#999999\" textColor=\"white\"\n border=\"1px solid #999999\" (click)=\"onDelete()\"></verbena-button> -->\n <div class=\"flex gap-3\">\n <verbena-button (click)=\"vdv.toggleView()\" text=\"Switch To Table\"\n styleType=\"ylw-outline\"></verbena-button>\n <verbena-button text=\"Save\" bgColor=\"#FFE681\" (click)=\"onSave()\" textColor=\"#404040\"\n border=\"1px solid #FFE681\">\n <!-- (click)=\"\" -->\n </verbena-button>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"w-full\">\n <div\n [ngClass]=\"{\n 'flex gap-2 items-center': true,\n 'justify-end': true,\n }\"\n >\n <!-- <verbena-button\n *ngIf=\"!vdcv.hasCurrentItem()\"\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button> -->\n <div\n class=\"flex {{\n vdcv.hasCurrentItem() ? 'flex-1' : ''\n }} justify-end items-center gap-5\"\n >\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column\n (columnsUpdated)=\"onColumnsUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"\n ></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"420px\"\n textColor=\"black\"\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"\n (filtersApplied)=\"onFilterApplied($event)\"\n \n ></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table\n (selectedOptions)=\"onSortUpdated($event)\"\n [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\"\n boxShadow=\"2px 2px 2px 0px silver\"\n bgColor=\"white\"\n width=\"400px\"\n textColor=\"black\"\n\n pd=\"1rem\"\n primaryColor=\"#FFE681\"\n secondaryColor=\"#3479E9\"\n tertiaryColor=\"#404040\"\n [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"\n ></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n \n </div>\n\n <div *ngIf=\"vdv.isTableView\" class=\"w-full flex gap-2 justify-end\">\n <!-- <div class=\"message-log-button-container flex justify-between\">\n <verbena-button\n [fontWeight]=\"'bold'\"\n [bgColor]=\"'#8E8D87'\"\n [borderRadius]=\"'4px'\"\n [textColor]=\"'#fff'\"\n [pd]=\"'9.79px 37.28px'\"\n [text]=\"'Delete'\"\n >\n </verbena-button>\n </div> -->\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button\n (click)=\"loadMore()\"\n class=\"load-more view-links text-[#3479E9] underline\"\n >\n Load more\n </button>\n </div>\n </div>\n</div>\n\n\n", styles: ["*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}:before,:after{--tw-content: \"\"}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.visible{visibility:visible}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-8{bottom:2rem}.left-0{left:0}.right-0{right:0}.float-right{float:right}.m-0{margin:0}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-0{margin-bottom:0}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-\\[100\\%\\]{height:100%}.h-\\[max-content\\]{height:-moz-max-content;height:max-content}.h-full{height:100%}.w-3{width:.75rem}.w-full{width:100%}.flex-1{flex:1 1 0%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-20{gap:5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-7>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.75rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.break-all{word-break:break-all}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.rounded-br-none{border-bottom-right-radius:0}.rounded-tr-none{border-top-right-radius:0}.border,.border-\\[1px\\]{border-width:1px}.border-primary{--tw-border-opacity: 1;border-color:rgb(212 160 7 / var(--tw-border-opacity, 1))}.border-secondary-200{border-color:#d7dbe6}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(212 160 7 / var(--tw-bg-opacity, 1))}.bg-secondary{--tw-bg-opacity: 1;background-color:rgb(232 234 241 / var(--tw-bg-opacity, 1))}.bg-secondary-100{--tw-bg-opacity: 1;background-color:rgb(245 246 249 / var(--tw-bg-opacity, 1))}.bg-secondary-200{background-color:#d7dbe6}.p-3{padding:.75rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pr-1{padding-right:.25rem}.\\!text-\\[10px\\]{font-size:10px!important}.text-\\[10px\\]{font-size:10px}.text-\\[12px\\]{font-size:12px}.text-\\[22px\\]{font-size:22px}.text-\\[24px\\]{font-size:24px}.text-\\[2rem\\]{font-size:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.lowercase{text-transform:lowercase}.leading-6{line-height:1.5rem}.leading-\\[12\\.1px\\]{line-height:12.1px}.leading-\\[16\\.6px\\]{line-height:16.6px}.leading-\\[19\\.5px\\]{line-height:19.5px}.leading-\\[29\\.05px\\]{line-height:29.05px}.leading-\\[33px\\]{line-height:33px}.leading-\\[48px\\]{line-height:48px}.text-\\[\\#333\\]{--tw-text-opacity: 1;color:rgb(51 51 51 / var(--tw-text-opacity, 1))}.text-\\[\\#3479E9\\]{--tw-text-opacity: 1;color:rgb(52 121 233 / var(--tw-text-opacity, 1))}.text-\\[\\#404040\\]{--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.text-\\[black\\]{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-muted{color:#0009}.underline{text-decoration-line:underline}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.master-only-contanier{margin-top:0!important}.scroll-no::-webkit-scrollbar{width:4px}.scroll-no::-webkit-scrollbar-thumb{background:gray}.justify-pp{justify-content:start!important;margin-top:0!important}.toolbar{margin:0!important}@media screen and (max-width: 1024px){.scroll-no{padding:5px}}.view-links{color:#3479e9;cursor:pointer}\n"] }]
461
+ }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.UserManagementService }, { type: i3.UserAccessRequestService }, { type: i4.HttpWebRequestService }, { type: i5.UtilService }, { type: i6.EnvironmentService }], propDecorators: { cardDataView: [{
462
+ type: ViewChild,
463
+ args: ['vdcv']
464
+ }], dataView: [{
465
+ type: ViewChild,
466
+ args: ['vdv']
467
+ }], childComponent: [{
468
+ type: ViewChild,
469
+ args: [UserManagementFormComponent]
470
+ }], searchDebounceTime: [{
471
+ type: Input
472
+ }], pageSize: [{
473
+ type: Input
474
+ }] } });
475
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tYW5hZ2VtZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvdXNlci1tYW5hZ2VtZW50L3VzZXItbWFuYWdlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL3VzZXItbWFuYWdlbWVudC91c2VyLW1hbmFnZW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXBELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUkvQyxPQUFPLEVBRUwsY0FBYyxFQUtkLGtCQUFrQixHQUduQixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxPQUFPLEVBQWlDLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7QUFPM0QsSUFBSyxlQUlKO0FBSkQsV0FBSyxlQUFlO0lBQ2xCLGdDQUE4QixDQUFBO0lBQzlCLDRCQUEwQixDQUFBO0lBQzFCLCtC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QUExQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBzaWduYWwsIFZpZXdDaGlsZCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvbHVtbnMgfSBmcm9tICcuL3VzZXItbWFuYWdlbWVudC5jb2x1bW5zJztcblxuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlTaWduIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1NlYXJjaFByb3BlcnR5U2lnbic7XG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3V0aWwuc2VydmljZSc7XG5pbXBvcnQgeyBQYWdlZFJlc3VsdCB9IGZyb20gJy4uLy4uL21vZGVscy9QYWdlZFJlc3VsdCc7XG5pbXBvcnQgeyBiYXNlU3R5bGUgfSBmcm9tICcuL2Jhc2UtdGFibGUtc3R5bGUnO1xuaW1wb3J0IHsgSHR0cFdlYlJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC13ZWItcmVxdWVzdC5zZXJ2aWNlJztcblxuXG5pbXBvcnQge1xuICBDYXJkRGF0YSxcbiAgRGF0YUZpbHRlclR5cGUsXG4gIElEYXRhRmlsdGVyLFxuICBEcm9wZG93bkxvYWRFdmVudCxcbiAgRHJvcGRvd25DaGFuZ2VFdmVudCxcbiAgQ29sdW1uRGVmaW5pdGlvbixcbiAgQ29uZGl0aW9uYWxPcHRpb25zLFxuICBDYXJkRGF0YVZpZXdDb21wb25lbnQsXG4gIERhdGFWaWV3Q29tcG9uZW50LFxufSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgVXNlckFjY2Vzc1JlcXVlc3RTdGF0dXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci1hY2Nlc3MtcmVxdWVzdC1zdGF0dXMnO1xuaW1wb3J0IHsgT2JqZWN0U3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvb2JqZWN0LXN0YXRlJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Vudmlyb25tZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlck1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLW1hbmFnZW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXInO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9FcnJvclJlc3BvbnNlJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VtZW50Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LWZvcm0vdXNlLW1hbmFnZW1lbnQtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmRpdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29uZGl0aW9ucyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBVc2VyQWNjZXNzUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuLi91c2VyLXJlcXVlc3QtYXBwcm92YWwvc2VydmljZXMvdXNlci1hY2Nlc3MtcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFJvbGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvUm9sZSc7XG5pbXBvcnQgeyBUYWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvVGFnJztcblxuXG5lbnVtIERhdGVGaWx0ZXJUeXBlcyB7XG4gIEJlZm9yZSA9IFNlYXJjaFByb3BlcnR5U2lnbi5MVCxcbiAgT24gPSBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gIEFmdGVyID0gU2VhcmNoUHJvcGVydHlTaWduLkdULFxufVxuXG5cbmludGVyZmFjZSBUZXN0UGFyZW50T2JqZWN0IHtcbiAgSWQ6IHN0cmluZztcbiAgTmFtZTogc3RyaW5nO1xufVxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi11c2VyLW1hbmFnZW1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1tYW5hZ2VtZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3VzZXItbWFuYWdlbWVudC5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZW1lbnRDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCd2ZGN2JykgY2FyZERhdGFWaWV3ITogQ2FyZERhdGFWaWV3Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCd2ZHYnKSBkYXRhVmlldyE6IERhdGFWaWV3Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKFVzZXJNYW5hZ2VtZW50Rm9ybUNvbXBvbmVudCkgY2hpbGRDb21wb25lbnQhOiBVc2VyTWFuYWdlbWVudEZvcm1Db21wb25lbnQ7XG4gIHByaXZhdGUgY3VycmVudFNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuXG5cbiAgZmlsdGVyZWRDb2x1bW5zOiBDb2x1bW5EZWZpbml0aW9uPFVzZXI+W10gPWNvbHVtbnNcbiAgc2tpcDogbnVtYmVyID0gMDtcbiAgdXNlcnM6VXNlcltdPVtdXG4gIHNlYXJjaFRlcm0kID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBASW5wdXQoKSBzZWFyY2hEZWJvdW5jZVRpbWU6IG51bWJlciA9IDUwMDtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDE7XG4gIHBhZ2VTdGF0ZTogUGFnZWRSZXN1bHQ8VXNlcj4gfCBudWxsID0gbnVsbDtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgYXBwbGllZEZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGhhc01vcmU6IGJvb2xlYW4gPSB0cnVlO1xuICBsaW1pdDogbnVtYmVyID0gMjA7XG4gIHNvcnRQYXJhbTogc3RyaW5nID0gJ25hbWUnO1xuICBzb3J0T3JkZXI6IHN0cmluZyA9ICdhc2MnO1xuIFJvbGVzOlJvbGVbXT1bXVxuIFRhZ3M6IFdyaXRhYmxlU2lnbmFsPFRhZ1tdPiA9IHNpZ25hbChbXSk7XG4gIGRhdGFGaXQ6IFBhZ2VkUmVzdWx0PFVzZXI+ID0ge1xuICAgIFBhZ2VTaXplOiAxLFxuICAgIFNraXA6IDAsXG4gICAgVG90YWw6IDAsXG4gICAgUmVzdWx0OiBbXSxcbiAgICBMYXN0SXRlbTogWycnXSxcbiAgICBJc0xvYWRpbmdSZXN1bHRzOiBmYWxzZVxuICB9O1xuXG4gIFxuXG4gIGN1cnJlbnRGaWx0ZXJzOiBJRGF0YUZpbHRlcltdID0gW107XG4gIGN1cnJlbnRTb3J0czogSURhdGFGaWx0ZXJbXSA9IFtdO1xuXG5cblxuICByb2xlOiBzdHJpbmcgPSAnJztcblxuICBjYXJkQ29udGV4dEhpc3Rvcnk6IENhcmREYXRhW10gPSBbXTtcbiAgcGFyYW06IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSB1c2VyTWFuYWdlbWVudFNlcnZpY2U6IFVzZXJNYW5hZ2VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJSb2xlOiBVc2VyQWNjZXNzUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXJ2ZXI6IEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZSxcbiAgICBwcml2YXRlIGVudlN2YzogRW52aXJvbm1lbnRTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcblxuICB0aGlzLmdldFJvbGVzKClcbiAgdGhpcy5nZXRUYWdzKCk7XG4gICAgdGhpcy5yb3V0ZS5wYXJhbU1hcC5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIHRoaXMucm9sZSA9IHBhcmFtcy5nZXQoJ3JvbGUnKSB8fCAnJzsgIC8vIERlZmF1bHQgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIG5vIHJvbGVcbiAgICAgIHRoaXMuZmV0Y2hVc2VycygpO1xuICAgIH0pO1xuICAgIFxuXG4gICAgICAgICBcbiAgfVxuXG4gIFxuICBjYXJkRGF0YTogQ2FyZERhdGFbXSA9IFtdO1xuXG4gIGRhdGE6IGFueVtdID0gW107IFxuXG4gIFxuXG5cblxuXG4gIGFzeW5jIGZldGNoVXNlcnMoc29ydFZhbHVlOiBzdHJpbmcgPSAnQ3JlYXRlZEF0Jywgb3JkZXI6IHN0cmluZyA9ICdhc2MnKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMudXNlck1hbmFnZW1lbnRTZXJ2aWNlLmdldFJlYWxVc2Vycyh0aGlzLnJvbGUsIHRoaXMuc2tpcCx0aGlzLmxpbWl0LCB0aGlzLnNvcnRQYXJhbSwgdGhpcy5zb3J0T3JkZXIpXG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG5cbiAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgIC8vIEhhbmRsZSBlcnJvciByZXNwb25zZVxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBsb2dzOicsIHJlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxVc2VyPjtcbiAgICAgICAgdGhpcy5kYXRhRml0ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMudXNlcnMgPSBbLi4udGhpcy51c2VycywgLi4ucmVzcG9uc2UuUmVzdWx0XTtcbiAgICAgICAgdGhpcy5jYXJkRGF0YSA9IHRoaXMuZm9ybWF0Q2FyZERhdGEodGhpcy51c2Vycyk7XG4gICAgICAgIHRoaXMuc2tpcCArPSB0aGlzLnBhZ2VTaXplO1xuICAgICAgICB0aGlzLmhhc01vcmUgPSB0aGlzLnNraXAgPCByZXNwb25zZS5Ub3RhbDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG5cbiAgYXN5bmMgZ2V0Um9sZXMoKSB7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnVzZXJSb2xlLmdldFJvbGVzKCk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gIFxuICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcm9sZXM6JywgcmVzKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gXG4gIFxuICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Um9sZT47XG4gICAgICB0aGlzLlJvbGVzID0gcmVzcG9uc2UuUmVzdWx0O1xuICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcm9sZXM6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRUYWdzKCkge1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy51c2VyUm9sZS5nZXRUYWdzKCk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gIFxuICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcm9sZXM6JywgcmVzKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gXG4gICAgICBjb25zdCByZXNwb25zZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxUYWc+O1xuICAgICAgdGhpcy5UYWdzLnNldChyZXNwb25zZS5SZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyByb2xlczonLCBlcnJvcik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBcbmhhbmRsZVJvbGVJZCh2YWx1ZTpzdHJpbmcpe1xuICBjb25zdCBtYXRjaGVkUm9sZSA9IHRoaXMuUm9sZXMuZmlsdGVyKChyb2xlKSA9PiByb2xlLk5hbWUgPT09IHZhbHVlKTtcbiAgcmV0dXJuIG1hdGNoZWRSb2xlWzBdPy5Db2RlO1xufVxuICAvKipcbiAgICogRm9ybWF0IHVzZXJzIGludG8gQ2FyZERhdGEgZm9yIHRoZSBVSSBsaWJyYXJ5XG4gICAqIEBwYXJhbSB1c2VycyBBcnJheSBvZiB1c2VycyB0byBmb3JtYXRcbiAgICogQHJldHVybnMgQXJyYXkgb2YgQ2FyZERhdGFcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0Q2FyZERhdGEodXNlcnM6IFVzZXJbXSk6IENhcmREYXRhW10ge1xuICAgIHJldHVybiB1c2Vycy5tYXAodXNlciA9PiAoe1xuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLCAvLyBEZWZhdWx0IHNlbGVjdGlvbiBzdGF0ZVxuICAgICAgdGl0bGU6IGAke3VzZXIuRmlyc3ROYW1lfSAke3VzZXIuTGFzdE5hbWV9YCwgLy8gRGlzcGxheSB1c2VyJ3MgbmFtZSBhcyB0aXRsZVxuICAgICAgZGF0YTogeyAuLi51c2VyIH0sIC8vIFBhc3MgdGhlIGVudGlyZSB1c2VyIG9iamVjdFxuICAgICAgYm9keTogW1xuICAgICAgICB7IHRpdGxlOiAnTmFtZScsIHZhbHVlOiBgJHt1c2VyLkZpcnN0TmFtZX0gJHt1c2VyLkxhc3ROYW1lfWAgfSxcbiAgICAgICAgeyB0aXRsZTogJ0UtTWFpbCBBZGRyZXNzJywgdmFsdWU6IHVzZXIuTWFpbEFkZHJlc3MgfSxcbiAgICAgICAgeyB0aXRsZTogJ1Bob25lIE51bWJlcicsIHZhbHVlOiB1c2VyLlBob25lTnVtYmVyIHx8ICdOL0EnIH0sXG4gICAgICBdLFxuICAgICAgY2hpbGRyZW46IFtdLCAvLyBBZGQgY2hpbGQgZGF0YSBpZiBuZWNlc3NhcnlcbiAgICB9KSk7XG4gIH1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgXG5cblxuXG4gIGNvbHVtbnMgPSBjb2x1bW5zO1xuICBzdHlsZXMgPSBiYXNlU3R5bGU7XG5cbiAgc2VsZWN0ZWRQYXJlbnQ/OiBzdHJpbmc7XG4gIGJhc2ljT3B0aW9uPzogc3RyaW5nO1xuICBzZWxlY3RlZE9wdGlvbjogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRPcHRpb25Ud286IHN0cmluZ1tdID0gW107XG4gIHNlbGVjdGVkT3B0aW9uVGhyZWU/OiBzdHJpbmc7XG4gIG1pc3NpbmdPYmplY3Q6IGFueTtcblxuXG5cbiAgLy8gY2xlYXJMb2dzKHNvcnRWYWx1ZTogc3RyaW5nID0gJ0NyZWF0ZWRBdCcsIG9yZGVyOiBzdHJpbmcgPSAnYXNjJykge1xuICAvLyAgIHRoaXMuVXNlciA9IFtdOyAvLyBDbGVhciB0aGUgbG9ncyBhcnJheVxuICAvLyAgIHRoaXMuc2tpcCA9IDA7IC8vIFJlc2V0IHRoZSBza2lwIHZhbHVlXG4gIC8vICAgdGhpcy5oYXNNb3JlID0gdHJ1ZTsgLy8gUmVzZXQgdGhlIGZsYWcgdG8gYWxsb3cgZmV0Y2hpbmcgbW9yZSBsb2dzXG4gIC8vICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IGZhbHNlO1xuICAvLyAgIHRoaXMuZmV0Y2hVc2VycygpO1xuICAvLyB9XG5cblxuIFxuXG4gIC8vIEdyaWQgdmlldyBwcm9wZXJ0aWVzXG4gIGlzR3JpZFZpZXc6IGJvb2xlYW4gPSB0cnVlO1xuICBjdXJyZW50RGF0YSE6IENhcmREYXRhO1xuICBzZWxlY3RlZENvbHVtbkNvdW50OiBudW1iZXIgPSAwO1xuICBzZWxlY3RlZEZpbHRlclRhYmxlQ291bnQ6IG51bWJlciA9IDA7XG4gIGlzT1BlbjogYm9vbGVhbiA9IHRydWU7XG4gIHNlbGVjdGVkU29ydENvdW50OiBudW1iZXIgPSAwO1xuICBzaG93RmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuICBzaG93Q29sdW1uOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dTb3J0OiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkQWxsOiBib29sZWFuID0gZmFsc2U7XG4gIHZpc2libGVDb2x1bW5zOiBJRGF0YUZpbHRlcltdID0gY29sdW1ucy5tYXAoKGNvbCkgPT4gKHtcbiAgICBjaGVja2VkOiBmYWxzZSxcbiAgICBuYW1lOiB0eXBlb2YgY29sLmhlYWRlciA9PT0gJ3N0cmluZycgPyBjb2wuaGVhZGVyIDogY29sLmlkLFxuICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkJvb2wsXG4gIH0pKTtcblxuICBmaWx0ZXJBcnJheTogSURhdGFGaWx0ZXJbXSA9IFtcbiAgICB7IG5hbWU6ICdGaXJzdE5hbWUnLCB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsIGNoZWNrZWQ6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiAnTGFzdE5hbWUnLCB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsIGNoZWNrZWQ6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiAnTWFpbEFkZHJlc3MnLCB0eXBlOiBEYXRhRmlsdGVyVHlwZS5TdHJpbmcsIGNoZWNrZWQ6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiAnU3RhdHVzJywgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLCBjaGVja2VkOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogJ1Bob25lTnVtYmVyJywgdHlwZTogRGF0YUZpbHRlclR5cGUuU3RyaW5nLCBjaGVja2VkOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogJ0NyZWF0ZWRBdCcsIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsIGNoZWNrZWQ6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiAnUm9sZScsIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZywgY2hlY2tlZDogZmFsc2UgfSxcbiAgXTtcblxuXG5cbiAgc29ydE9wdGlvbnM6IElEYXRhRmlsdGVyW10gPSBbXG4gICAgeyBuYW1lOiAnTmFtZScsIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZywgY2hlY2tlZDogZmFsc2UgfSxcbiAgICB7IG5hbWU6ICdNYWlsQWRkcmVzcycsIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZywgY2hlY2tlZDogZmFsc2UgfSxcbiAgICB7IG5hbWU6ICdQaG9uZU51bWJlcicsIHR5cGU6IERhdGFGaWx0ZXJUeXBlLlN0cmluZywgY2hlY2tlZDogZmFsc2UgfSxcbiAgICB7IG5hbWU6ICdDcmVhdGVkQXQnLCB0eXBlOiBEYXRhRmlsdGVyVHlwZS5EYXRlLCBjaGVja2VkOiBmYWxzZSB9LFxuICBdO1xuXG4gIHRlc3RQYXJlbnRzOiBUZXN0UGFyZW50T2JqZWN0W10gPSBbXG4gICAgeyBJZDogJzEnLCBOYW1lOiAnTWFuYWdlcicgfSxcbiAgICB7IElkOiAnMicsIE5hbWU6ICdBZG1pbmlzdHJhdG9yJyB9LFxuICAgIHsgSWQ6ICczJywgTmFtZTogJ0plbG9tJyB9LFxuICBdO1xuXG4gIGdldFBhcmVudExhYmVsKGNvbnRleHQ6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc29sZS5sb2coeyBNaXNzaW5nT2JqOiB0aGlzLm1pc3NpbmdPYmplY3QgfSk7XG4gICAgcmV0dXJuIHRoaXMubWlzc2luZ09iamVjdC5OYW1lO1xuICB9XG5cbiAgb25TYXZlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoaWxkQ29tcG9uZW50LmZvcm0udmFsaWQpIHtcbiAgICAgIC8vIGNvbnN0IHVzZXJEYXRhOiBVc2VyID0gdGhpcy5jaGlsZENvbXBvbmVudC5mb3JtLnZhbHVlO1xuICAgICAgLy8gY29uc29sZS5sb2coJ1BheWxvYWQ6JywgW3VzZXJEYXRhXSk7IC8vIExvZyB0aGUgcGF5bG9hZCB0byBjaGVjayBpdHMgc3RydWN0dXJlXG4gIFxuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgICB0aGlzLnVzZXJNYW5hZ2VtZW50U2VydmljZS5zYXZlVXNlcnMoW3tcbiAgICAgICAgLi4udGhpcy5jdXJyZW50RGF0YT8uZGF0YSxcbiAgICAgICAgLi4udGhpcy5jaGlsZENvbXBvbmVudC5mb3JtLnZhbHVlLFxuICAgICAgICBEYXRhU3RhdGU6IHRoaXMuY3VycmVudERhdGE/LmRhdGEuRGF0YVN0YXRlID09PSBPYmplY3RTdGF0ZS5VbmNoYW5nZWQgPyBPYmplY3RTdGF0ZS5DaGFuZ2VkIDogdGhpcy5jdXJyZW50RGF0YT8uZGF0YS5EYXRhU3RhdGUsXG4gICAgICB9XSkudGhlbihcbiAgICAgICAgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoXCJVc2VyIHNhdmVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3Igc2F2aW5nIHVzZXI6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hpbGRDb21wb25lbnQuZm9ybS52YWx1ZSk7XG4gICAgICBcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignRm9ybSBpcyBpbnZhbGlkJyk7XG4gICAgfVxuICB9XG5cbiAgb25EZWxldGUoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0NoaWxkIGZvcm0gZGVsZXRlIHRyaWdnZXJlZCcpO1xuICAgIC8vIFBlcmZvcm0gZGVsZXRlIGxvZ2ljIGhlcmVcbiAgfVxuICBvbkRyb3Bkb3duQ2hhbmdlKGV2ZW50OiBEcm9wZG93bkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gY29uc29sZS5sb2coe1xuICAgIC8vICAgJ1Rlc3QgUGFyZW50IFZhbHVlJzogdGhpcy5zZWxlY3RlZFBhcmVudCxcbiAgICAvLyAgIC4uLlxuICAgIC8vIH0pO1xuICB9XG5cbiAgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0ZWRSb3dzOiBVc2VyW10pIHtcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0aW9uIGNoYW5nZWQ6Jywgc2VsZWN0ZWRSb3dzKTtcbiAgICAvLyBIYW5kbGUgdGhlIHNlbGVjdGlvbiBjaGFuZ2VcbiAgfVxuXG4gIGhhbmRsZUV4cG9ydChleHBvcnRlZERhdGE6IFBhcnRpYWw8YW55PltdKSB7XG4gICAgY29uc29sZS5sb2coJ0V4cG9ydGVkIGRhdGE6JywgZXhwb3J0ZWREYXRhKTtcbiAgICB0aGlzLmRvd25sb2FkQ1NWKGV4cG9ydGVkRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGRvd25sb2FkQ1NWKGRhdGE6IFBhcnRpYWw8YW55PltdKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IE9iamVjdC5rZXlzKGRhdGFbMF0pO1xuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBbXG4gICAgICBoZWFkZXJzLmpvaW4oJywnKSxcbiAgICAgIC4uLmRhdGEubWFwKChyb3cpID0+IGhlYWRlcnMubWFwKChoZWFkZXIpID0+IHJvd1toZWFkZXJdKS5qb2luKCcsJykpLFxuICAgIF0uam9pbignXFxuJyk7XG5cbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NzdkNvbnRlbnRdLCB7IHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBpZiAobGluay5kb3dubG9hZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgJ2V4cG9ydC5jc3YnKTtcbiAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgfVxuICB9XG5cblxuICBnZXRDYXJkRGF0YUJ5TWFpbEFkZHJlc3MobWFpbEFkZHJlc3M6IHN0cmluZyk6IENhcmREYXRhIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zb2xlLmxvZygnY2FyZERhdGEgYXJyYXk6JywgdGhpcy5jYXJkRGF0YSk7XG4gICAgY29uc29sZS5sb2cobWFpbEFkZHJlc3MpO1xuXG4gICAgcmV0dXJuIHRoaXMuY2FyZERhdGEuZmluZCgoeyBkYXRhIH0pID0+IGRhdGE/Lk1haWxBZGRyZXNzID09PSBtYWlsQWRkcmVzcyk7XG4gIH1cblxuICBvcGVuRGV0YWlsVmlldyhtYWlsQWRkcmVzczogc3RyaW5nKSB7XG4gICAgY29uc3QgY2FyZEl0ZW0gPSB0aGlzLmdldENhcmREYXRhQnlNYWlsQWRkcmVzcyhtYWlsQWRkcmVzcyk7XG4gICAgY29uc29sZS5sb2coY2FyZEl0ZW0pO1xuXG4gICAgaWYgKGNhcmRJdGVtICYmIHRoaXMuY2FyZERhdGFWaWV3KSB7XG4gICAgICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICAgIC8vIEZpcnN0IHJlc2V0IGFsbCBzZWxlY3Rpb25zXG4gICAgICB0aGlzLmNhcmREYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IChjaGlsZC5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBTZXQgdGhlIHNlbGVjdGVkIGl0ZW1cbiAgICAgIGNhcmRJdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY3VycmVudERhdGEgPSB0aGlzLmNhcmREYXRhVmlldy5vbkl0ZW1DbGljayhjYXJkSXRlbSk7XG5cbiAgICAgIC8vIEZvcmNlIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgICAvLyB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuXG5cblxuICBcblxuXG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5za2lwID0gMDtcbiAgICB0aGlzLnBhZ2VTaXplID0gMjA7XG4gIH1cblxuXG4gIGNsZWFyRGF0YSgpIHtcbiAgICB0aGlzLmN1cnJlbnREYXRhID0ge30gYXMgQ2FyZERhdGE7XG4gIH1cblxuICBcbiAgbG9hZE1vcmUoKSB7XG4gICAgaWYgKHRoaXMuaGFzTW9yZSkge1xuICAgICAgdGhpcy5mZXRjaFVzZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgb25Db2x1bW5DaGFuZ2UoZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNob3dDb2x1bW4gPSBldmVudDtcbiAgfVxuXG4gIG9uU29ydENoYW5nZShldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMuc2hvd1NvcnQgPSBldmVudDtcbiAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gIH1cblxuICBvbkNvbHVtbnNVcGRhdGVkKHVwZGF0ZWRDb2x1bW5zOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgdGhpcy5vbkNvbHVtbkNoYW5nZShmYWxzZSk7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbkNvdW50ID0gdXBkYXRlZENvbHVtbnMubGVuZ3RoO1xuXG4gICAgaWYgKHVwZGF0ZWRDb2x1bW5zKSB7XG4gICAgICAvLyBGaWx0ZXIgY29sdW1ucyB0byBpbmNsdWRlIG9ubHkgdmlzaWJsZSBvbmVzXG4gICAgICB0aGlzLmZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbCkgPT5cbiAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucy5maW5kKFxuICAgICAgICAgIChmaWx0ZXIpID0+IGZpbHRlci5uYW1lID09PSBjb2wuaGVhZGVyICYmIGZpbHRlci5jaGVja2VkXG4gICAgICAgIClcbiAgICAgICk7XG4gIFxuICAgICAgLy8gUmVvcmRlciBjb2x1bW5zIGJhc2VkIG9uIHRoZSBvcmRlciBpbiB2aXNpYmxlQ29sdW1uc1xuICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbk9yZGVyID0gdGhpcy52aXNpYmxlQ29sdW1uc1xuICAgICAgICAuZmlsdGVyKChmaWx0ZXIpID0+IGZpbHRlci5jaGVja2VkKVxuICAgICAgICAubWFwKChmaWx0ZXIpID0+IGZpbHRlci5uYW1lKTtcbiAgXG4gICAgICB0aGlzLmNvbHVtbnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBpbmRleEEgPSB2aXNpYmxlQ29sdW1uT3JkZXIuaW5kZXhPZihhLmhlYWRlciBhcyBzdHJpbmcpO1xuICAgICAgICBjb25zdCBpbmRleEIgPSB2aXNpYmxlQ29sdW1uT3JkZXIuaW5kZXhPZihiLmhlYWRlciBhcyBzdHJpbmcpO1xuICAgICAgICByZXR1cm4gaW5kZXhBIC0gaW5kZXhCO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcG9zdFNlYXJjaChwYXlsb2FkOiBhbnkpIHtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgYFVzZXIvU2VhcmNoVXNlcnMvMC8xMC9DcmVhdGVkQXQvYXNjYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwbGllZEZpbHRlcnMgPSB0cnVlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSByZXMgYXMgUGFnZWRSZXN1bHQ8VXNlcj47XG4gICAgICB0aGlzLmRhdGFGaXQgPSByZXNwb25zZTtcbiAgICAgIHRoaXMudXNlcnMgPSByZXNwb25zZS5SZXN1bHQ7XG4gICAgICB0aGlzLmNhcmREYXRhID0gdGhpcy5mb3JtYXRDYXJkRGF0YSh0aGlzLnVzZXJzKSAgICAgIDtcbiAgICB9XG4gIH1cblxuXG4gIFxuICBvbkZpbHRlckFwcGxpZWQoYXBwbGllZEZpbHRlcjogSURhdGFGaWx0ZXJbXSkge1xuICAgIHRoaXMuc2hvd0ZpbHRlciA9IGZhbHNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFwcGxpZWRGaWx0ZXIpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyVGFibGVDb3VudCA9IGFwcGxpZWRGaWx0ZXIubGVuZ3RoO1xuICAgICAgY29uc29sZS5sb2coYXBwbGllZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gYXBwbGllZEZpbHRlclxuICAgICAgICAuZmlsdGVyKChmaWx0ZXIpID0+IGZpbHRlci5jaGVja2VkKVxuICAgICAgICAubWFwKChmaWx0ZXIpID0+ICh7XG4gICAgICAgICAgUHJvcGVydHlOYW1lOiBmaWx0ZXIubmFtZSxcbiAgICAgICAgICBFbnRpdHlWYWx1ZTogZmlsdGVyLm5hbWU9PT0nUm9sZSc/dGhpcy5oYW5kbGVSb2xlSWQoZmlsdGVyLnZhbHVlKTpmaWx0ZXIudmFsdWUsXG4gICAgICAgICAgVHlwZTogZmlsdGVyLnR5cGUsXG4gICAgICAgICAgT3BlcmF0b3I6ICdBbmQnLFxuICAgICAgICAgIFNpZ246IHRoaXMuZ2V0Q29uZGl0aW9uKGZpbHRlci5jb25kaXRpb24pLFxuICAgICAgICB9KSk7XG5cbiAgICAgIHRoaXMucG9zdFNlYXJjaChxdWVyeVBhcmFtcyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29uZGl0aW9uKHZhbHVlOiBhbnkpOiBDb25kaXRpb25PcHRpb25zIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICBjYXNlIENvbmRpdGlvbmFsT3B0aW9ucy5PbjpcbiAgICAgICAgcmV0dXJuIENvbmRpdGlvbk9wdGlvbnMuT247XG4gICAgICBjYXNlIENvbmRpdGlvbmFsT3B0aW9ucy5BZnRlcjpcbiAgICAgICAgcmV0dXJuIENvbmRpdGlvbk9wdGlvbnMuQWZ0ZXI7XG4gICAgICBjYXNlIENvbmRpdGlvbmFsT3B0aW9ucy5CZWZvcmU6XG4gICAgICAgIHJldHVybiBDb25kaXRpb25PcHRpb25zLkJlZm9yZTtcbiAgICAgIGNhc2UgQ29uZGl0aW9uYWxPcHRpb25zLk5vdEVxdWFsOlxuICAgICAgICByZXR1cm4gQ29uZGl0aW9uT3B0aW9ucy5Ob3RFcXVhbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIEV4cGxpY2l0bHkgcmV0dXJuIHVuZGVmaW5lZCBmb3IgaW52YWxpZCBjYXNlc1xuICAgIH1cbiAgfVxuICBcbiAgb25Tb3J0VXBkYXRlZCh1cGRhdGVkU29ydHM6IElEYXRhRmlsdGVyW10pOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRTb3J0cyA9IHVwZGF0ZWRTb3J0cztcbiAgICBcbiAgfVxuXG4gIGFzeW5jIG9uU2VhcmNoKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSBldmVudC52YWx1ZTtcbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgaWYgKCF0aGlzLnNlYXJjaFRlcm0pIHtcbiAgICAgIHRoaXMuY2xlYXJMb2dzKCdDcmVhdGVkQXQnLCAnYXNjJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgICAgYFVzZXIvR2V0VXNlcldpdGhQYXJhbS8ke3RoaXMuc2VhcmNoVGVybX0vJHt0aGlzLnNraXB9LyR7dGhpcy5wYWdlU2l6ZX0vQ3JlYXRlZEF0L2FzY2BcbiAgICAgICk7XG5cbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcblxuICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHNlYXJjaDonLCByZXMpO1xuICAgICAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxVc2VyPjtcbiAgICAgICAgdGhpcy5kYXRhRml0ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMudXNlcnMgPSByZXNwb25zZS5SZXN1bHQ7XG4gICAgICAgIHRoaXMuY2FyZERhdGEgPSB0aGlzLmZvcm1hdENhcmREYXRhKHRoaXMudXNlcnMpO1xuXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1NlYXJjaCBlcnJvcjonLCBlcnJvcik7XG4gICAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzID0gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJMb2dzKHNvcnRWYWx1ZTogc3RyaW5nID0gJ0NyZWF0ZWRBdCcsIG9yZGVyOiBzdHJpbmcgPSAnYXNjJykge1xuICAgIHRoaXMudXNlcnM9IFtdOyAvLyBDbGVhciB0aGUgbG9ncyBhcnJheVxuICAgIHRoaXMuc2tpcCA9IDA7IC8vIFJlc2V0IHRoZSBza2lwIHZhbHVlXG4gICAgdGhpcy5oYXNNb3JlID0gdHJ1ZTsgLy8gUmVzZXQgdGhlIGZsYWcgdG8gYWxsb3cgZmV0Y2hpbmcgbW9yZSBsb2dzXG4gICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IGZhbHNlO1xuICAgIHRoaXMuZmV0Y2hVc2Vycyhzb3J0VmFsdWUsIG9yZGVyKTtcbiAgfVxuXG5cbiAgICBcblxuICBvblZpZXdDaGFuZ2UoaXNHcmlkVmlldzogYm9vbGVhbik6IHZvaWQge31cblxuICBvblN0YXRlQ2hhbmdlKGV2ZW50OiB7IGtleTogc3RyaW5nOyB2YWx1ZTogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coYFN0YXRlIGNoYW5nZWQgZm9yICR7ZXZlbnQua2V5fTpgLCBldmVudC52YWx1ZSk7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdwZWFjZSBpcyBhIGJveScpO1xuXG4gICAgICBcblxuICAgICAgLy8gY29uc3QgbmV3VXNlciA9IHRoaXMubmV3SXRlbSgpXG5cbiAgICAgIC8vIGlmICggbmV3VXNlciAmJiB0aGlzLmNhcmREYXRhVmlldykge1xuICAgICAgLy8gICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICAgIC8vICAgLy8gRmlyc3QgcmVzZXQgYWxsIHNlbGVjdGlvbnNcbiAgICAgIC8vICAgdGhpcy5jYXJkRGF0YS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAvLyAgICAgaXRlbS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgLy8gICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAvLyAgICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiAoY2hpbGQuc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgICAgLy8gICAgIH1cbiAgICAgIC8vICAgfSk7XG5cbiAgICAgIC8vICAgdGhpcy5jdXJyZW50RGF0YSA9IHRoaXMuY2FyZERhdGFWaWV3Lm9uSXRlbUNsaWNrKG5ld1VzZXIpO1xuXG4gICAgICAvLyAgIC8vIEZvcmNlIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgICAvLyAgIC8vIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgLy8gfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTQgbWVzc2FnZS1sb2ctY29udGFpbmVyXCI+XG4gIDx2ZXJiZW4tZGF0YS12aWV3XG4gICAgI3ZkdlxuICAgIFt2aWV3U3RhdGVdPVwie1xuICAgICAgaXNTZWFyY2g6IHRydWUsXG4gICAgICBpc0NvbHVtbjogdHJ1ZSxcbiAgICAgIGlzRmlsdGVyOiB0cnVlLFxuICAgICAgaXNTb3J0OiB0cnVlLFxuICAgICAgaXNFeHBvcnQ6IHRydWUsXG4gICAgICBpc1NlbGVjdDogdHJ1ZSxcbiAgICAgXG4gICAgICBpc1RvZ2dsZTp0cnVlXG4gICAgfVwiXG4gICAgW2J1dHRvbkNsYXNzXT1cIidteS1jdXN0b20tYnV0dG9uLWNsYXNzJ1wiXG4gICAgW2ljb25DbGFzc109XCInbXktaWNvbi1jbGFzcydcIlxuICAgIFthY3RpdmVJY29uQ2xhc3NdPVwiJ215LWFjdGl2ZS1pY29uLWNsYXNzJ1wiXG4gICAgW3NlbGVjdGVkQ29sdW1uQ291bnRdPVwiMFwiXG4gICAgKG9uU2VhcmNoQ2hhbmdlKT1cIm9uU2VhcmNoKCRldmVudClcIlxuICAgIFtzZWFyY2hWYWx1ZV09XCJzZWFyY2hUZXJtXCJcbiAgXG4gICAgW3NlYXJjaFZhbHVlXT1cInNlYXJjaFRlcm1cIlxuICAgIFtzZWxlY3RlZFNvcnRDb3VudF09XCIwXCJcbiAgICBbc2hvd0ZpbHRlckNoaWxkXT1cInNob3dGaWx0ZXJcIlxuICAgIFtzZWxlY3RlZEZpbHRlclRhYmxlQ291bnRdPVwiMFwiXG4gICAgKHZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlKCRldmVudClcIlxuICAgIChzdGF0ZUNoYW5nZSk9XCJvblN0YXRlQ2hhbmdlKCRldmVudClcIlxuICAgIFtpc1RhYmxlVmlld109XCJmYWxzZVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwibXQtMlwiIHRhYmxlLWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtdGFibGVcbiAgICAgICAgW2RhdGFdPVwidXNlcnNcIlxuICAgICAgICBbY29sdW1uc109XCJmaWx0ZXJlZENvbHVtbnNcIlxuICAgICAgICBbc3R5bGVDb25maWddPVwic3R5bGVzXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwic2VsZWN0XCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtaXNTZWxlY3RlZD1cImlzU2VsZWN0ZWRcIiBsZXQtdG9nZ2xlUm93U2VsZWN0aW9uPVwidG9nZ2xlUm93U2VsZWN0aW9uXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzU2VsZWN0ZWRcIiAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbigpXCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNoZWFkZXIgbGV0LWFsbFJvd3NTZWxlY3RlZD1cImFsbFJvd3NTZWxlY3RlZFwiIGxldC1zb21lUm93c1NlbGVjdGVkPVwic29tZVJvd3NTZWxlY3RlZFwiXG4gICAgICAgICAgbGV0LXRvZ2dsZUFsbFJvd3M9XCJ0b2dnbGVBbGxSb3dzXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImFsbFJvd3NTZWxlY3RlZCgpXCIgW2luZGV0ZXJtaW5hdGVdPVwic29tZVJvd3NTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsUm93cygpXCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImNyZWF0ZWRBdFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB8IGRhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJhY3Rpb25zXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZSBsZXQtZGVsZXRlUm93ID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC02XCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5EZXRhaWxWaWV3KHZhbHVlKVwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImVkaXRcIlxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgICBpY29uPVwiZGVsZXRlXCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSb3coKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyPlxuICAgICAgICAgICAgPHN0cm9uZz5BY3Rpb25zPC9zdHJvbmc+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwic3RhdHVzXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgI2NlbGxcbiAgICAgICAgICBsZXQtaXNFZGl0aW5nPVwiaXNFZGl0aW5nXCJcbiAgICAgICAgICBsZXQtdG9nZ2xlUm93RWRpdD1cInRvZ2dsZVJvd0VkaXRcIlxuICAgICAgICAgIGxldC1kZWxldGVSb3c9XCJkZWxldGVSb3dcIlxuICAgICAgICAgIGxldC12YWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPGxpYi11c2VyLXN0YXR1cy1iYWRnZVxuICAgICAgICAgICAgW3N0YXR1c109XCJ2YWx1ZVwiXG4gICAgICAgICAgPjwvbGliLXVzZXItc3RhdHVzLWJhZGdlPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8L2xpYi1kYXRhLXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2FyZC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlld1xuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMnB4XCJcbiAgICAgICAgKGxvYWRNb3JlQ2xpY2spPVwibG9hZE1vcmUoKVwiXG4gICAgICAgICN2ZGN2XG4gICAgICAgIGRhdGFJZD1cIk1haWxBZGRyZXNzXCJcbiAgICAgICAgYm9yZGVyPVwiNXB4XCJcbiAgICAgICAgW2NhcmREYXRhTGlzdF09XCJjYXJkRGF0YVwiXG4gICAgICAgIHJiZ0NvbG9yPVwiI2Y1ZjZmOVwiXG4gICAgICAgIG1nPVwiMHB4XCJcbiAgICAgICAgY2xhc3M9XCJnYXAtMVwiXG4gICAgICA+XG4gICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldyBjbGFzcz1cIm0tMCBnYXAtMlwiID5cbiAgICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhXG4gICAgICAgICAgICAjdmxjZFxuICAgICAgICAgICAgW3BhcmVudF09XCJ2ZGN2XCJcbiAgICAgICAgICAgIGRhdGFJZD1cIk1haWxBZGRyZXNzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmctc2Vjb25kYXJ5LTEwMCByb3VuZGVkLXhsIGJvcmRlci1wcmltYXJ5IGJvcmRlci1bMXB4XVwiXG4gICAgICAgICAgICBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhXCJcblxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FyZCBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiY3VycmVudERhdGEgPSB2ZGN2Lm9uSXRlbUNsaWNrKGl0ZW0pXCIgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2bGNkLnNob3dDaGlsZHJlbihpdGVtKVwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ2bGNkLnNob3dUb2dnbGUoaXRlbSkgPyAndmlzaWJsZScgOiAnaW52aXNpYmxlJ1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW1zLWNlbnRlciBmbGV4ICBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZCA/ICdtaW51cycgOiAncGx1cydcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3VycmVudERhdGEgPSB2ZGN2Lm9uSXRlbUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggY3Vyc29yLXBvaW50ZXIgdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPyAnYmctcHJpbWFyeScgOiAnYmctc2Vjb25kYXJ5LTIwMCdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgZmxleCBpdGVtcy1lbmQgZ2FwLXktMiBnYXAteC00IHAtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIHNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1bIzQwNDA0MF0gZmxleC0xIHRydW5jYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyBpdGVtLnRpdGxlIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBteS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGhvbmVcIiBjbGFzcz1cInRleHQtWzEwcHhdIGZvbnQtbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+UGhvbmUgTnVtYmVyOjwvbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwicGhvbmVcIiBjbGFzcz1cInRleHQtc20gdHJ1bmNhdGVcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGEuUGhvbmVOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ2FwLXktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInJvbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtWzEwcHhdIGZvbnQtbGlnaHQgdGV4dC1bIzQwNDA0MF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+Um9sZTwvbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwicm9sZVwiIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0YT8uUm9sZT8uTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGxpYi11c2VyLXN0YXR1cy1iYWRnZVxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJpdGVtLmRhdGEuU3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9saWItdXNlci1zdGF0dXMtYmFkZ2U+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YT5cbiAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldz5cblxuICAgICAgICA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGFyZW50PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCIgYmctc2Vjb25kYXJ5LTEwMCBweS0yIGZsZXggZmxleC1jb2wgZ2FwLTIwIHB4LTJcIj5cbiAgICAgICAgICAgIDxsaWItdXNlci1yZXF1ZXN0LWZvcm1cbiAgICAgICAgICAgIFtyb2xlc109XCJSb2xlc1wiXG4gICAgICAgICAgICBbdGFnc109XCJUYWdzKClcIlxuICAgICAgICAgICAgW2N1cnJlbnREYXRhXT1cImN1cnJlbnREYXRhXCJcbiAgICAgICAgICAgIChzd2l0Y2hWaWV3KT1cInZkdi50b2dnbGVWaWV3KClcIlxuICAgICAgICAgICAgPjwvbGliLXVzZXItcmVxdWVzdC1mb3JtPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgYm90dG9tLTggbGVmdC0wIHJpZ2h0LTAgcC0zXCI+XG4gICAgICAgICAgICAgIDwhLS0gPHZlcmJlbmEtYnV0dG9uIHRleHQ9XCJEZWxldGVcIiBiZ0NvbG9yPVwiIzk5OTk5OVwiIHRleHRDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICBib3JkZXI9XCIxcHggc29saWQgIzk5OTk5OVwiIChjbGljayk9XCJvbkRlbGV0ZSgpXCI+PC92ZXJiZW5hLWJ1dHRvbj4gLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIChjbGljayk9XCJ2ZHYudG9nZ2xlVmlldygpXCIgdGV4dD1cIlN3aXRjaCBUbyBUYWJsZVwiXG4gICAgICAgICAgICAgICAgICBzdHlsZVR5cGU9XCJ5bHctb3V0bGluZVwiPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uICB0ZXh0PVwiU2F2ZVwiIGJnQ29sb3I9XCIjRkZFNjgxXCIgKGNsaWNrKT1cIm9uU2F2ZSgpXCIgdGV4dENvbG9yPVwiIzQwNDA0MFwiXG4gICAgICAgICAgICAgICAgICBib3JkZXI9XCIxcHggc29saWQgI0ZGRTY4MVwiPlxuICAgICAgICAgICAgICAgICAgPCEtLSAoY2xpY2spPVwiXCIgLS0+XG4gICAgICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cblxuICAgICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3RlciBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2ZsZXggZ2FwLTIgaXRlbXMtY2VudGVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgJ2p1c3RpZnktZW5kJzogdHJ1ZSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXZkY3YuaGFzQ3VycmVudEl0ZW0oKVwiXG4gICAgICAgICAgICAgIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiXG4gICAgICAgICAgICAgIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiXG4gICAgICAgICAgICAgIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIlxuICAgICAgICAgICAgICBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgICAgICAgIFtwZF09XCInOS43OXB4IDM3LjI4cHgnXCJcbiAgICAgICAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj4gLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCB7e1xuICAgICAgICAgICAgICAgIHZkY3YuaGFzQ3VycmVudEl0ZW0oKSA/ICdmbGV4LTEnIDogJydcbiAgICAgICAgICAgICAgfX0ganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiXG4gICAgICAgICAgICAgICAgPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZE1vcmUoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rcyB0ZXh0LVsjMzQ3OUU5XSB1bmRlcmxpbmVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgTG9hZCBtb3JlXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3Rlcj5cbiAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY29sdW1uLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXZpc2libGUtY29sdW1uXG4gICAgICAgIChjb2x1bW5zVXBkYXRlZCk9XCJvbkNvbHVtbnNVcGRhdGVkKCRldmVudClcIlxuICAgICAgICBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICAgIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIlxuICAgICAgICBiZ0NvbG9yPVwid2hpdGVcIlxuICAgICAgICB3aWR0aD1cIjQwMHB4XCJcbiAgICAgICAgdGV4dENvbG9yPVwiYmxhY2tcIlxuICAgICAgICBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCJcbiAgICAgICAgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCJcbiAgICAgICAgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbnNcIlxuICAgICAgICBbZGlzcGxheWVkQ29sdW1uc109XCI1XCJcbiAgICAgID48L3ZlcmJlbi12aXNpYmxlLWNvbHVtbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGZpbHRlci1jb250ZW50PlxuICAgICAgPHZlcmJlbi10YWJsZS1maWx0ZXJcbiAgICAgICAgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgICBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCJcbiAgICAgICAgYmdDb2xvcj1cIndoaXRlXCJcbiAgICAgICAgd2lkdGg9XCI0MjBweFwiXG4gICAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgICAgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiXG4gICAgICAgIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiXG4gICAgICAgIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCJcbiAgICAgICAgW2ZpbHRlck9wdGlvbnNdPVwiZmlsdGVyQXJyYXlcIlxuICAgICAgICBbbWF4RmlsdGVyTGVuZ3RoXT1cIjNcIlxuICAgICAgICAoZmlsdGVyc0FwcGxpZWQpPVwib25GaWx0ZXJBcHBsaWVkKCRldmVudClcIlxuICAgIFxuICAgICAgPjwvdmVyYmVuLXRhYmxlLWZpbHRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHNvcnQtY29udGVudD5cbiAgICAgIDx2ZXJiZW4tc29ydC10YWJsZVxuICAgICAgICAoc2VsZWN0ZWRPcHRpb25zKT1cIm9uU29ydFVwZGF0ZWQoJGV2ZW50KVwiXG4gICAgICAgIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiXG4gICAgICAgIGJnQ29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgIHdpZHRoPVwiNDAwcHhcIlxuICAgICAgICB0ZXh0Q29sb3I9XCJibGFja1wiXG5cbiAgICAgICAgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiXG4gICAgICAgIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiXG4gICAgICAgIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCJcbiAgICAgICAgW2VuYWJsZURyYWdBbmREcm9wXT1cInRydWVcIlxuICAgICAgICBbc29ydE9wdGlvbnNdPVwic29ydE9wdGlvbnNcIlxuICAgICAgPjwvdmVyYmVuLXNvcnQtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBleHBvcnQtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS1leHBvcnQgIChleHBvcnREYXRhRXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIj5cbiAgICAgIDwvbGliLWRhdGEtZXhwb3J0PlxuICAgIDwvZGl2PlxuICA8L3ZlcmJlbi1kYXRhLXZpZXc+XG4gICAgPGRpdiAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKCkgJiYgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDBcIlxuICAgIGNsYXNzPVwibWVzc2FnZS1sb2ctYnV0dG9uLWNvbnRhaW5lciBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgXG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJ2ZHYuaXNUYWJsZVZpZXdcIiBjbGFzcz1cInctZnVsbCBmbGV4IGdhcC0yIGp1c3RpZnktZW5kXCI+XG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwibWVzc2FnZS1sb2ctYnV0dG9uLWNvbnRhaW5lciBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiXG4gICAgICAgIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiXG4gICAgICAgIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIlxuICAgICAgICBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgIFtwZF09XCInOS43OXB4IDM3LjI4cHgnXCJcbiAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIlxuICAgICAgPlxuICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICA8L2Rpdj4gLS0+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCI+e3sgY2FyZERhdGEubGVuZ3RoIH19IHJlY29yZHMgbG9hZGVkPC9zcGFuPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwibG9hZE1vcmUoKVwiXG4gICAgICAgIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3MgdGV4dC1bIzM0NzlFOV0gdW5kZXJsaW5lXCJcbiAgICAgID5cbiAgICAgICAgTG9hZCBtb3JlXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuXG4iXX0=