verben-authentication-ui 0.3.1 → 0.3.3

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 (288) hide show
  1. package/ng-package.json +8 -0
  2. package/package.json +8 -14
  3. package/src/lib/components/button/button.component.css +3 -0
  4. package/src/lib/components/button/button.component.html +13 -0
  5. package/src/lib/components/button/button.component.spec.ts +23 -0
  6. package/src/lib/components/button/button.component.ts +24 -0
  7. package/src/lib/components/button/button.module.ts +11 -0
  8. package/{lib/components/forgot-password/ForgotPasswordData.d.ts → src/lib/components/forgot-password/ForgotPasswordData.ts} +1 -1
  9. package/src/lib/components/forgot-password/forgot-password.component.css +29 -0
  10. package/src/lib/components/forgot-password/forgot-password.component.html +13 -0
  11. package/src/lib/components/forgot-password/forgot-password.component.spec.ts +23 -0
  12. package/src/lib/components/forgot-password/forgot-password.component.ts +86 -0
  13. package/src/lib/components/forgot-password/forgot-password.module.ts +18 -0
  14. package/src/lib/components/mail/mail.component.css +0 -0
  15. package/src/lib/components/mail/mail.component.html +11 -0
  16. package/src/lib/components/mail/mail.component.spec.ts +23 -0
  17. package/src/lib/components/mail/mail.component.ts +47 -0
  18. package/src/lib/components/mail/mail.module.ts +13 -0
  19. package/src/lib/components/mail-validation/mail-validation.component.css +59 -0
  20. package/src/lib/components/mail-validation/mail-validation.component.html +37 -0
  21. package/src/lib/components/mail-validation/mail-validation.component.spec.ts +23 -0
  22. package/src/lib/components/mail-validation/mail-validation.component.ts +66 -0
  23. package/src/lib/components/mail-validation/mail-validation.module.ts +18 -0
  24. package/src/lib/components/o-auth/o-auth.component.css +21 -0
  25. package/src/lib/components/o-auth/o-auth.component.html +60 -0
  26. package/src/lib/components/o-auth/o-auth.component.spec.ts +23 -0
  27. package/src/lib/components/o-auth/o-auth.component.ts +43 -0
  28. package/src/lib/components/o-auth/o-auth.module.ts +11 -0
  29. package/src/lib/components/otp-input/otp-input.component.css +19 -0
  30. package/src/lib/components/otp-input/otp-input.component.html +14 -0
  31. package/src/lib/components/otp-input/otp-input.component.spec.ts +23 -0
  32. package/src/lib/components/otp-input/otp-input.component.ts +73 -0
  33. package/src/lib/components/otp-input/otp-input.module.ts +15 -0
  34. package/src/lib/components/reset-password/ResetPasswordData.ts +5 -0
  35. package/src/lib/components/reset-password/reset-password.component.css +29 -0
  36. package/src/lib/components/reset-password/reset-password.component.html +22 -0
  37. package/src/lib/components/reset-password/reset-password.component.spec.ts +23 -0
  38. package/src/lib/components/reset-password/reset-password.component.ts +108 -0
  39. package/src/lib/components/reset-password/reset-password.module.ts +18 -0
  40. package/src/lib/components/sign-in/sign-in.component.css +21 -0
  41. package/src/lib/components/sign-in/sign-in.component.html +84 -0
  42. package/src/lib/components/sign-in/sign-in.component.spec.ts +23 -0
  43. package/src/lib/components/sign-in/sign-in.component.ts +184 -0
  44. package/src/lib/components/sign-in/sign-in.module.ts +17 -0
  45. package/src/lib/components/sign-up/sign-up.component.css +36 -0
  46. package/src/lib/components/sign-up/sign-up.component.html +132 -0
  47. package/src/lib/components/sign-up/sign-up.component.spec.ts +23 -0
  48. package/src/lib/components/sign-up/sign-up.component.ts +176 -0
  49. package/src/lib/components/sign-up/sign-up.module.ts +15 -0
  50. package/src/lib/components/sso/base-table-style.ts +52 -0
  51. package/src/lib/components/sso/helper.ts +15 -0
  52. package/src/lib/components/sso/sso-form/sso-form.component.css +13 -0
  53. package/src/lib/components/sso/sso-form/sso-form.component.html +109 -0
  54. package/src/lib/components/sso/sso-form/sso-form.component.spec.ts +23 -0
  55. package/src/lib/components/sso/sso-form/sso-form.component.ts +70 -0
  56. package/src/lib/components/sso/sso.columns.ts +32 -0
  57. package/src/lib/components/sso/sso.component.css +47 -0
  58. package/src/lib/components/sso/sso.component.html +208 -0
  59. package/src/lib/components/sso/sso.component.spec.ts +23 -0
  60. package/src/lib/components/sso/sso.component.ts +261 -0
  61. package/src/lib/components/sso/sso.module.ts +40 -0
  62. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.css +8 -0
  63. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.html +30 -0
  64. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.spec.ts +23 -0
  65. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.ts +183 -0
  66. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.module.ts +15 -0
  67. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.css +17 -0
  68. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.html +45 -0
  69. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.spec.ts +23 -0
  70. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.ts +57 -0
  71. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.module.ts +11 -0
  72. package/src/lib/components/user-management/base-table-style.ts +52 -0
  73. package/src/lib/components/user-management/helper.ts +29 -0
  74. package/src/lib/components/user-management/index.ts +4 -0
  75. package/src/lib/components/user-management/useer-management.module.ts +48 -0
  76. package/src/lib/components/user-management/user-management-form/use-management-form.component.ts +61 -0
  77. package/src/lib/components/user-management/user-management-form/user-management-form.component.css +0 -0
  78. package/src/lib/components/user-management/user-management-form/user-management-form.component.html +91 -0
  79. package/src/lib/components/user-management/user-management-form/user-management-form.component.spec.ts +23 -0
  80. package/src/lib/components/user-management/user-management.columns.ts +45 -0
  81. package/src/lib/components/user-management/user-management.component.css +26 -0
  82. package/src/lib/components/user-management/user-management.component.html +275 -0
  83. package/src/lib/components/user-management/user-management.component.spec.ts +23 -0
  84. package/src/lib/components/user-management/user-management.component.ts +380 -0
  85. package/src/lib/components/user-management/user-management.service.ts +42 -0
  86. package/src/lib/components/user-request/user-request.component.css +91 -0
  87. package/src/lib/components/user-request/user-request.component.html +165 -0
  88. package/src/lib/components/user-request/user-request.component.spec.ts +23 -0
  89. package/src/lib/components/user-request/user-request.component.ts +167 -0
  90. package/src/lib/components/user-request/user-request.module.ts +18 -0
  91. package/src/lib/components/user-request-approval/access-request.columns.ts +26 -0
  92. package/src/lib/components/user-request-approval/base-table-style.ts +52 -0
  93. package/src/lib/components/user-request-approval/facades/user-access-request.facade.ts +152 -0
  94. package/src/lib/components/user-request-approval/helper.ts +39 -0
  95. package/src/lib/components/user-request-approval/services/user-access-request.service.spec.ts +16 -0
  96. package/src/lib/components/user-request-approval/services/user-access-request.service.ts +87 -0
  97. package/src/lib/components/user-request-approval/states/user-access-request.state.ts +65 -0
  98. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.css +0 -0
  99. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.html +7 -0
  100. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.spec.ts +23 -0
  101. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.ts +22 -0
  102. package/src/lib/components/user-request-approval/user-request-approval.component.css +1 -0
  103. package/src/lib/components/user-request-approval/user-request-approval.component.html +218 -0
  104. package/src/lib/components/user-request-approval/user-request-approval.component.spec.ts +23 -0
  105. package/src/lib/components/user-request-approval/user-request-approval.component.ts +301 -0
  106. package/src/lib/components/user-request-approval/user-request-approval.module.ts +52 -0
  107. package/src/lib/components/user-request-approval/user-request-approval.service.spec.ts +16 -0
  108. package/src/lib/components/user-request-approval/user-request-approval.service.ts +58 -0
  109. package/src/lib/components/user-request-approval/user-request-form/use-request-form.component.ts +66 -0
  110. package/src/lib/components/user-request-approval/user-request-form/user-request-form.component.css +0 -0
  111. package/src/lib/components/user-request-approval/user-request-form/user-request-form.component.html +97 -0
  112. package/src/lib/components/user-request-approval/user-request-form/user-request-form.component.spec.ts +23 -0
  113. package/src/lib/models/ErrorResponse.ts +7 -0
  114. package/src/lib/models/PasswordRequestParam.ts +5 -0
  115. package/src/lib/models/ResponseKeyValue.ts +5 -0
  116. package/src/lib/models/UserRequest.ts +28 -0
  117. package/src/lib/models/auth-mechanism.ts +14 -0
  118. package/src/lib/models/base.ts +11 -0
  119. package/src/lib/models/log-in.ts +7 -0
  120. package/{lib/models/mainUser.d.ts → src/lib/models/mainUser.ts} +3 -2
  121. package/src/lib/models/object-state.ts +6 -0
  122. package/{lib/models/otpValue.d.ts → src/lib/models/otpValue.ts} +3 -1
  123. package/src/lib/models/paged.ts +9 -0
  124. package/src/lib/models/query-params.ts +7 -0
  125. package/src/lib/models/request-status.ts +4 -0
  126. package/src/lib/models/resend-otp-data.ts +8 -0
  127. package/src/lib/models/resource.ts +27 -0
  128. package/src/lib/models/sign-up.ts +11 -0
  129. package/src/lib/models/single-sign-on.ts +9 -0
  130. package/src/lib/models/status.ts +5 -0
  131. package/src/lib/models/user-access-request-status.ts +5 -0
  132. package/{lib/models/user-access-request.d.ts → src/lib/models/user-access-request.ts} +4 -3
  133. package/src/lib/models/user.ts +24 -0
  134. package/src/lib/services/environment.service.spec.ts +16 -0
  135. package/src/lib/services/environment.service.ts +23 -0
  136. package/src/lib/services/http-web-request.service.spec.ts +16 -0
  137. package/src/lib/services/http-web-request.service.ts +101 -0
  138. package/src/lib/services/util.service.spec.ts +16 -0
  139. package/src/lib/services/util.service.ts +28 -0
  140. package/{public-api.d.ts → src/public-api.ts} +21 -0
  141. package/src/styles.css +96 -0
  142. package/src/theme/tailwind-setup.css +3 -0
  143. package/src/theme/tailwind.css +980 -0
  144. package/tailwind.config.js +20 -0
  145. package/tsconfig.lib.json +15 -0
  146. package/tsconfig.lib.prod.json +11 -0
  147. package/tsconfig.spec.json +15 -0
  148. package/esm2022/lib/components/button/button.component.mjs +0 -46
  149. package/esm2022/lib/components/button/button.module.mjs +0 -20
  150. package/esm2022/lib/components/forgot-password/ForgotPasswordData.mjs +0 -2
  151. package/esm2022/lib/components/forgot-password/forgot-password.component.mjs +0 -86
  152. package/esm2022/lib/components/forgot-password/forgot-password.module.mjs +0 -34
  153. package/esm2022/lib/components/mail/mail.component.mjs +0 -69
  154. package/esm2022/lib/components/mail/mail.module.mjs +0 -21
  155. package/esm2022/lib/components/mail-validation/mail-validation.component.mjs +0 -108
  156. package/esm2022/lib/components/mail-validation/mail-validation.module.mjs +0 -34
  157. package/esm2022/lib/components/o-auth/o-auth.component.mjs +0 -25
  158. package/esm2022/lib/components/o-auth/o-auth.module.mjs +0 -19
  159. package/esm2022/lib/components/otp-input/otp-input.component.mjs +0 -75
  160. package/esm2022/lib/components/otp-input/otp-input.module.mjs +0 -23
  161. package/esm2022/lib/components/reset-password/ResetPasswordData.mjs +0 -2
  162. package/esm2022/lib/components/reset-password/reset-password.component.mjs +0 -107
  163. package/esm2022/lib/components/reset-password/reset-password.module.mjs +0 -34
  164. package/esm2022/lib/components/sign-in/sign-in.component.mjs +0 -214
  165. package/esm2022/lib/components/sign-in/sign-in.module.mjs +0 -24
  166. package/esm2022/lib/components/sign-up/sign-up.component.mjs +0 -223
  167. package/esm2022/lib/components/sign-up/sign-up.module.mjs +0 -24
  168. package/esm2022/lib/components/sso/base-table-style.mjs +0 -53
  169. package/esm2022/lib/components/sso/helper.mjs +0 -14
  170. package/esm2022/lib/components/sso/sso-form/sso-form.component.mjs +0 -74
  171. package/esm2022/lib/components/sso/sso.columns.mjs +0 -29
  172. package/esm2022/lib/components/sso/sso.component.mjs +0 -197
  173. package/esm2022/lib/components/sso/sso.module.mjs +0 -63
  174. package/esm2022/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.mjs +0 -201
  175. package/esm2022/lib/components/two-factor-auth-otp/two-factor-auth-otp.module.mjs +0 -22
  176. package/esm2022/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.mjs +0 -90
  177. package/esm2022/lib/components/two-factor-auth-setup/two-factor-auth-setup.module.mjs +0 -19
  178. package/esm2022/lib/components/user-management/base-table-style.mjs +0 -53
  179. package/esm2022/lib/components/user-management/helper.mjs +0 -26
  180. package/esm2022/lib/components/user-management/useer-management.module.mjs +0 -68
  181. package/esm2022/lib/components/user-management/user-management-form/use-management-form.component.mjs +0 -57
  182. package/esm2022/lib/components/user-management/user-management.columns.mjs +0 -43
  183. package/esm2022/lib/components/user-management/user-management.component.mjs +0 -323
  184. package/esm2022/lib/components/user-request/user-request.component.mjs +0 -180
  185. package/esm2022/lib/components/user-request/user-request.module.mjs +0 -34
  186. package/esm2022/lib/components/user-request-approval/access-request.columns.mjs +0 -24
  187. package/esm2022/lib/components/user-request-approval/base-table-style.mjs +0 -53
  188. package/esm2022/lib/components/user-request-approval/facades/user-access-request.facade.mjs +0 -128
  189. package/esm2022/lib/components/user-request-approval/helper.mjs +0 -35
  190. package/esm2022/lib/components/user-request-approval/services/user-access-request.service.mjs +0 -72
  191. package/esm2022/lib/components/user-request-approval/states/user-access-request.state.mjs +0 -59
  192. package/esm2022/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.mjs +0 -26
  193. package/esm2022/lib/components/user-request-approval/user-request-approval.component.mjs +0 -251
  194. package/esm2022/lib/components/user-request-approval/user-request-approval.module.mjs +0 -77
  195. package/esm2022/lib/components/user-request-approval/user-request-approval.service.mjs +0 -32
  196. package/esm2022/lib/components/user-request-approval/user-request-form/use-request-form.component.mjs +0 -64
  197. package/esm2022/lib/models/ErrorResponse.mjs +0 -11
  198. package/esm2022/lib/models/PasswordRequestParam.mjs +0 -2
  199. package/esm2022/lib/models/ResponseKeyValue.mjs +0 -2
  200. package/esm2022/lib/models/UserRequest.mjs +0 -2
  201. package/esm2022/lib/models/base.mjs +0 -2
  202. package/esm2022/lib/models/log-in.mjs +0 -2
  203. package/esm2022/lib/models/mainUser.mjs +0 -2
  204. package/esm2022/lib/models/object-state.mjs +0 -8
  205. package/esm2022/lib/models/otpValue.mjs +0 -2
  206. package/esm2022/lib/models/paged.mjs +0 -2
  207. package/esm2022/lib/models/query-params.mjs +0 -2
  208. package/esm2022/lib/models/request-status.mjs +0 -5
  209. package/esm2022/lib/models/sign-up.mjs +0 -2
  210. package/esm2022/lib/models/single-sign-on.mjs +0 -2
  211. package/esm2022/lib/models/status.mjs +0 -6
  212. package/esm2022/lib/models/user-access-request-status.mjs +0 -7
  213. package/esm2022/lib/models/user-access-request.mjs +0 -2
  214. package/esm2022/lib/models/user.mjs +0 -2
  215. package/esm2022/lib/services/environment.service.mjs +0 -26
  216. package/esm2022/lib/services/http-web-request.service.mjs +0 -83
  217. package/esm2022/lib/services/util.service.mjs +0 -32
  218. package/esm2022/public-api.mjs +0 -43
  219. package/esm2022/verben-authentication-ui.mjs +0 -5
  220. package/fesm2022/verben-authentication-ui.mjs +0 -3481
  221. package/fesm2022/verben-authentication-ui.mjs.map +0 -1
  222. package/index.d.ts +0 -5
  223. package/lib/components/button/button.component.d.ts +0 -17
  224. package/lib/components/button/button.module.d.ts +0 -10
  225. package/lib/components/forgot-password/forgot-password.component.d.ts +0 -28
  226. package/lib/components/forgot-password/forgot-password.module.d.ts +0 -10
  227. package/lib/components/mail/mail.component.d.ts +0 -32
  228. package/lib/components/mail/mail.module.d.ts +0 -11
  229. package/lib/components/mail-validation/mail-validation.component.d.ts +0 -42
  230. package/lib/components/mail-validation/mail-validation.module.d.ts +0 -10
  231. package/lib/components/o-auth/o-auth.component.d.ts +0 -10
  232. package/lib/components/o-auth/o-auth.module.d.ts +0 -9
  233. package/lib/components/otp-input/otp-input.component.d.ts +0 -20
  234. package/lib/components/otp-input/otp-input.module.d.ts +0 -13
  235. package/lib/components/reset-password/ResetPasswordData.d.ts +0 -5
  236. package/lib/components/reset-password/reset-password.component.d.ts +0 -30
  237. package/lib/components/reset-password/reset-password.module.d.ts +0 -10
  238. package/lib/components/sign-in/sign-in.component.d.ts +0 -77
  239. package/lib/components/sign-in/sign-in.module.d.ts +0 -13
  240. package/lib/components/sign-up/sign-up.component.d.ts +0 -66
  241. package/lib/components/sign-up/sign-up.module.d.ts +0 -13
  242. package/lib/components/sso/base-table-style.d.ts +0 -1
  243. package/lib/components/sso/helper.d.ts +0 -2
  244. package/lib/components/sso/sso-form/sso-form.component.d.ts +0 -21
  245. package/lib/components/sso/sso.columns.d.ts +0 -3
  246. package/lib/components/sso/sso.component.d.ts +0 -50
  247. package/lib/components/sso/sso.module.d.ts +0 -11
  248. package/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.d.ts +0 -65
  249. package/lib/components/two-factor-auth-otp/two-factor-auth-otp.module.d.ts +0 -12
  250. package/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.d.ts +0 -39
  251. package/lib/components/two-factor-auth-setup/two-factor-auth-setup.module.d.ts +0 -9
  252. package/lib/components/user-management/base-table-style.d.ts +0 -1
  253. package/lib/components/user-management/helper.d.ts +0 -2
  254. package/lib/components/user-management/useer-management.module.d.ts +0 -11
  255. package/lib/components/user-management/user-management-form/use-management-form.component.d.ts +0 -20
  256. package/lib/components/user-management/user-management.columns.d.ts +0 -3
  257. package/lib/components/user-management/user-management.component.d.ts +0 -60
  258. package/lib/components/user-request/user-request.component.d.ts +0 -56
  259. package/lib/components/user-request/user-request.module.d.ts +0 -10
  260. package/lib/components/user-request-approval/access-request.columns.d.ts +0 -3
  261. package/lib/components/user-request-approval/base-table-style.d.ts +0 -1
  262. package/lib/components/user-request-approval/facades/user-access-request.facade.d.ts +0 -23
  263. package/lib/components/user-request-approval/helper.d.ts +0 -6
  264. package/lib/components/user-request-approval/services/user-access-request.service.d.ts +0 -50
  265. package/lib/components/user-request-approval/states/user-access-request.state.d.ts +0 -21
  266. package/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.d.ts +0 -12
  267. package/lib/components/user-request-approval/user-request-approval.component.d.ts +0 -59
  268. package/lib/components/user-request-approval/user-request-approval.module.d.ts +0 -12
  269. package/lib/components/user-request-approval/user-request-approval.service.d.ts +0 -18
  270. package/lib/components/user-request-approval/user-request-form/use-request-form.component.d.ts +0 -21
  271. package/lib/models/ErrorResponse.d.ts +0 -6
  272. package/lib/models/PasswordRequestParam.d.ts +0 -5
  273. package/lib/models/ResponseKeyValue.d.ts +0 -5
  274. package/lib/models/UserRequest.d.ts +0 -24
  275. package/lib/models/base.d.ts +0 -10
  276. package/lib/models/log-in.d.ts +0 -7
  277. package/lib/models/object-state.d.ts +0 -6
  278. package/lib/models/paged.d.ts +0 -9
  279. package/lib/models/query-params.d.ts +0 -7
  280. package/lib/models/request-status.d.ts +0 -3
  281. package/lib/models/sign-up.d.ts +0 -9
  282. package/lib/models/single-sign-on.d.ts +0 -7
  283. package/lib/models/status.d.ts +0 -4
  284. package/lib/models/user-access-request-status.d.ts +0 -5
  285. package/lib/models/user.d.ts +0 -23
  286. package/lib/services/environment.service.d.ts +0 -16
  287. package/lib/services/http-web-request.service.d.ts +0 -23
  288. package/lib/services/util.service.d.ts +0 -8
@@ -1,3481 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { InjectionToken, Injectable, Inject, Optional, EventEmitter, Component, Input, Output, NgModule, ViewChild, signal, computed } from '@angular/core';
3
- import * as i1$1 from '@angular/forms';
4
- import { FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
5
- import * as i1 from '@angular/common/http';
6
- import * as i2 from 'verben-ng-ui';
7
- import { UTIL_SERVICE, VerbenaInputModule, VerbenaButtonModule, SvgModule, DataFilterType, DataViewModule, TableFilterModule, SortTableModule, DataExportModule, VisibleColumnModule, CardDataViewModule, VerbenaTextareaModule, DataTableModule, CardModule, VerbenaBadgeModule, DropDownModule } from 'verben-ng-ui';
8
- import * as i1$2 from '@angular/common';
9
- import { CommonModule } from '@angular/common';
10
- import * as i6 from '@angular/router';
11
- import { RouterLink } from '@angular/router';
12
- import { BehaviorSubject, lastValueFrom } from 'rxjs';
13
-
14
- class ErrorResponse {
15
- ErrorMsg;
16
- StatusCode;
17
- FullLog;
18
- constructor(ErrorMsg, StatusCode, FullLog) {
19
- this.ErrorMsg = ErrorMsg;
20
- this.StatusCode = StatusCode;
21
- this.FullLog = FullLog;
22
- }
23
- }
24
-
25
- // In your library's services/environment.service.ts
26
- // import { ENVIRONMENT } from '../models/ENVIRONMENT_TOKEN';
27
- const ENVIRONMENT = new InjectionToken('environment');
28
- class EnvironmentService {
29
- env;
30
- constructor(env) {
31
- this.env = env;
32
- }
33
- get environment() {
34
- return this.env;
35
- }
36
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnvironmentService, deps: [{ token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Injectable });
37
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnvironmentService, providedIn: 'root' });
38
- }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EnvironmentService, decorators: [{
40
- type: Injectable,
41
- args: [{
42
- providedIn: 'root',
43
- }]
44
- }], ctorParameters: () => [{ type: undefined, decorators: [{
45
- type: Inject,
46
- args: [ENVIRONMENT]
47
- }] }] });
48
-
49
- class HttpWebRequestService {
50
- http;
51
- envSvc;
52
- notificationService;
53
- isProd;
54
- constructor(http, envSvc, notificationService) {
55
- this.http = http;
56
- this.envSvc = envSvc;
57
- this.notificationService = notificationService;
58
- this.isProd = this.envSvc.environment.production;
59
- }
60
- buildHeaders(apiKey = this.envSvc.environment.APIKey) {
61
- return {
62
- 'Content-Type': 'application/json',
63
- 'APIKey': apiKey,
64
- };
65
- }
66
- buildUrl(url, baseUrl) {
67
- return `${baseUrl}/${url}`;
68
- }
69
- handleError(err) {
70
- const msg = err.error?.ErrorMsg ||
71
- err.error?.errors?.values?.toString() ||
72
- `${err.status} ${err.statusText}`;
73
- this.notificationService.error(msg, { timeout: 3000 });
74
- return new ErrorResponse(msg);
75
- }
76
- request(method, url, body, baseUrl = this.envSvc.environment.AuthenticationAPI, apiKey) {
77
- const options = {
78
- headers: this.buildHeaders(apiKey),
79
- };
80
- const requestUrl = this.buildUrl(url, baseUrl);
81
- switch (method) {
82
- case 'GET':
83
- return new Promise((resolve) => this.http.get(requestUrl, options).subscribe({
84
- next: resolve,
85
- error: (err) => resolve(this.handleError(err)),
86
- }));
87
- case 'POST':
88
- return new Promise((resolve) => this.http.post(requestUrl, body, options).subscribe({
89
- next: resolve,
90
- error: (err) => resolve(this.handleError(err)),
91
- }));
92
- case 'PUT':
93
- return this.http.put(requestUrl, body, options);
94
- case 'DELETE':
95
- return this.http.delete(requestUrl, options);
96
- }
97
- }
98
- get(url, baseUrl, apiKey) {
99
- return this.request('GET', url, undefined, baseUrl, apiKey);
100
- }
101
- post(url, body, baseUrl, apiKey) {
102
- return this.request('POST', url, JSON.stringify(body), baseUrl, apiKey);
103
- }
104
- postFile(url, formData, baseUrl) {
105
- return new Promise((resolve) => this.http.post(this.buildUrl(url, baseUrl || this.envSvc.environment.AuthenticationAPI), formData).subscribe({
106
- next: resolve,
107
- error: (err) => resolve(this.handleError(err)),
108
- }));
109
- }
110
- put(url, body, baseUrl) {
111
- return this.request('PUT', url, body, baseUrl);
112
- }
113
- delete(url, baseUrl) {
114
- return this.request('DELETE', url, undefined, baseUrl);
115
- }
116
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HttpWebRequestService, deps: [{ token: i1.HttpClient }, { token: EnvironmentService }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Injectable });
117
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HttpWebRequestService, providedIn: 'root' });
118
- }
119
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HttpWebRequestService, decorators: [{
120
- type: Injectable,
121
- args: [{
122
- providedIn: 'root',
123
- }]
124
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: EnvironmentService }, { type: i2.NotificationService }] });
125
-
126
- class UtilService {
127
- parentUtilService;
128
- constructor(parentUtilService) {
129
- this.parentUtilService = parentUtilService;
130
- }
131
- sendBI(state) {
132
- console.log({ Service: this.parentUtilService });
133
- if (this.parentUtilService && this.parentUtilService.sendBI) {
134
- this.parentUtilService.sendBI(state);
135
- }
136
- else {
137
- console.warn('Util Service is not provided');
138
- }
139
- }
140
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UtilService, deps: [{ token: UTIL_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
141
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UtilService, providedIn: 'root' });
142
- }
143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UtilService, decorators: [{
144
- type: Injectable,
145
- args: [{
146
- providedIn: 'root',
147
- }]
148
- }], ctorParameters: () => [{ type: undefined, decorators: [{
149
- type: Optional
150
- }, {
151
- type: Inject,
152
- args: [UTIL_SERVICE]
153
- }] }] });
154
-
155
- class ResetPasswordComponent {
156
- fb;
157
- server;
158
- utilService;
159
- title = 'Reset Password';
160
- subTitle = 'Create a New Password';
161
- buttonCaption = 'Submit';
162
- buttonTextColor;
163
- buttonBackgroundColor;
164
- showOldPassword = false;
165
- token;
166
- onSubmit = new EventEmitter();
167
- onSubmitEnd = new EventEmitter();
168
- resetPasswordForm;
169
- constructor(fb, server, utilService) {
170
- this.fb = fb;
171
- this.server = server;
172
- this.utilService = utilService;
173
- this.resetPasswordForm = this.fb.group({
174
- OldPassword: new FormControl(null, this.oldPasswordValidator.bind(this)),
175
- Password: new FormControl(null, Validators.required),
176
- ConfirmPassword: new FormControl(null, [
177
- Validators.required,
178
- this.confirmPasswordValidator.bind(this),
179
- ]),
180
- });
181
- }
182
- checkForm() {
183
- return this.resetPasswordForm.valid;
184
- }
185
- oldPasswordValidator(control) {
186
- if (this.showOldPassword && control.value == null) {
187
- return { customValidation: true };
188
- }
189
- return null;
190
- }
191
- confirmPasswordValidator(control) {
192
- if (this.resetPasswordForm &&
193
- this.resetPasswordForm.controls['Password'] &&
194
- this.resetPasswordForm.controls['Password'].value !== control.value) {
195
- return { customValidation: true };
196
- }
197
- return null;
198
- }
199
- async submit() {
200
- if (!this.checkForm()) {
201
- return;
202
- }
203
- var data = {
204
- OldPassword: this.showOldPassword
205
- ? this.resetPasswordForm.controls['OldPassword'].value
206
- : undefined,
207
- Password: this.resetPasswordForm.controls['Password'].value,
208
- ConfirmPassword: this.resetPasswordForm.controls['ConfirmPassword'].value,
209
- };
210
- this.onSubmit.emit(data);
211
- var passwordRequest = {
212
- NewPassword: data.Password,
213
- OldPassword: data.OldPassword,
214
- Token: this.token,
215
- };
216
- this.utilService.sendBI(true);
217
- const res = await this.server.post(`User/CompleteChangePasswordRequest`, passwordRequest);
218
- this.utilService.sendBI(false);
219
- if (res instanceof ErrorResponse) {
220
- this.onSubmitEnd.emit(res);
221
- }
222
- else {
223
- var result = res;
224
- this.onSubmitEnd.emit(result);
225
- }
226
- }
227
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResetPasswordComponent, deps: [{ token: i1$1.FormBuilder }, { token: HttpWebRequestService }, { token: UtilService }], target: i0.ɵɵFactoryTarget.Component });
228
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResetPasswordComponent, selector: "verben-reset-password", inputs: { title: "title", subTitle: "subTitle", buttonCaption: "buttonCaption", buttonTextColor: "buttonTextColor", buttonBackgroundColor: "buttonBackgroundColor", showOldPassword: "showOldPassword", token: "token" }, outputs: { onSubmit: "onSubmit", onSubmitEnd: "onSubmitEnd" }, ngImport: i0, template: "<div [formGroup]=\"this.resetPasswordForm\" class=\"reset-password-container flex flex-col\">\n <div class=\"reset-password-header flex flex-col\">\n <div class=\"reset-password-title\">{{title}}</div>\n <div class=\"reset-password-subtitle\">{{subTitle}}</div>\n </div>\n <div *ngIf=\"showOldPassword\" class=\"form-field flex flex-col\">\n <div class=\"form-field-caption\">Old Password</div>\n <verbena-input bgColor=\"white\" borderRadius=\"12px\" formControlName=\"OldPassword\" type=\"password\"></verbena-input>\n </div>\n <div class=\"form-field flex flex-col\">\n <div class=\"form-field-caption\">New Password</div>\n <verbena-input bgColor=\"white\" borderRadius=\"12px\" formControlName=\"Password\" type=\"password\"></verbena-input>\n </div>\n <div class=\"form-field flex flex-col\">\n <div class=\"form-field-caption\">Confirm Password</div>\n <verbena-input bgColor=\"white\" borderRadius=\"12px\" formControlName=\"ConfirmPassword\"\n type=\"password\"></verbena-input>\n </div>\n <verbena-button fontWeight=\"700\" (click)=\"submit()\" [text]=\"buttonCaption\" width=\"100%\" [textColor]=\"buttonTextColor\"\n [bgColor]=\"buttonBackgroundColor\" borderRadius=\"25px\" [disable]=\"!this.checkForm()\"></verbena-button>\n\n</div>\n", styles: ["*{font-family:sans-serif;font-size:16px}.flex{display:flex}.flex-col{flex-direction:column}.font-bold{font-weight:700}.justify-center{justify-content:center}.justify-end{justify-content:end}.align-items-center{align-items:center}.grid{display:grid}.verben-error-message{font-size:.8rem;color:red}.verben-input{border:1px solid #cbd5e1;outline:none;border-radius:5px;color:#334155;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s,outline-color .2s}.verben-input::placeholder{color:#64748b}.verben-input:hover{border:1px solid #697e97}.verben-input.disabled{opacity:1;background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));pointer-events:none;color:#64748b}.verben-input:disabled{opacity:1;background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));pointer-events:none;color:#64748b}.verben-input.focused{border-color:#3b82f6;outline:none}.verben-input:focus{border-color:#3b82f6;outline:none}.verben-input.ng-invalid{border-color:red}.verben-button{padding:8px 15px;border-radius:4px;border:none;text-align:center}.verben-button.primary{background-color:#ffe681}.verben-button.secondary{background-color:#d9d9d940}.reset-password-container{gap:25px;padding:50px;border:1px solid rgba(102,102,102,.5);box-shadow:4px 4px 4px #00000040;border-radius:24px}.reset-password-title{font-size:30px;font-weight:700}.reset-password-subtitle{font-size:14px;font-weight:500;color:#666}.form-field{gap:5px}.form-field-caption{color:#666}\n"], dependencies: [{ kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i2.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
229
- }
230
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResetPasswordComponent, decorators: [{
231
- type: Component,
232
- args: [{ selector: 'verben-reset-password', template: "<div [formGroup]=\"this.resetPasswordForm\" class=\"reset-password-container flex flex-col\">\n <div class=\"reset-password-header flex flex-col\">\n <div class=\"reset-password-title\">{{title}}</div>\n <div class=\"reset-password-subtitle\">{{subTitle}}</div>\n </div>\n <div *ngIf=\"showOldPassword\" class=\"form-field flex flex-col\">\n <div class=\"form-field-caption\">Old Password</div>\n <verbena-input bgColor=\"white\" borderRadius=\"12px\" formControlName=\"OldPassword\" type=\"password\"></verbena-input>\n </div>\n <div class=\"form-field flex flex-col\">\n <div class=\"form-field-caption\">New Password</div>\n <verbena-input bgColor=\"white\" borderRadius=\"12px\" formControlName=\"Password\" type=\"password\"></verbena-input>\n </div>\n <div class=\"form-field flex flex-col\">\n <div class=\"form-field-caption\">Confirm Password</div>\n <verbena-input bgColor=\"white\" borderRadius=\"12px\" formControlName=\"ConfirmPassword\"\n type=\"password\"></verbena-input>\n </div>\n <verbena-button fontWeight=\"700\" (click)=\"submit()\" [text]=\"buttonCaption\" width=\"100%\" [textColor]=\"buttonTextColor\"\n [bgColor]=\"buttonBackgroundColor\" borderRadius=\"25px\" [disable]=\"!this.checkForm()\"></verbena-button>\n\n</div>\n", styles: ["*{font-family:sans-serif;font-size:16px}.flex{display:flex}.flex-col{flex-direction:column}.font-bold{font-weight:700}.justify-center{justify-content:center}.justify-end{justify-content:end}.align-items-center{align-items:center}.grid{display:grid}.verben-error-message{font-size:.8rem;color:red}.verben-input{border:1px solid #cbd5e1;outline:none;border-radius:5px;color:#334155;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s,outline-color .2s}.verben-input::placeholder{color:#64748b}.verben-input:hover{border:1px solid #697e97}.verben-input.disabled{opacity:1;background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));pointer-events:none;color:#64748b}.verben-input:disabled{opacity:1;background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));pointer-events:none;color:#64748b}.verben-input.focused{border-color:#3b82f6;outline:none}.verben-input:focus{border-color:#3b82f6;outline:none}.verben-input.ng-invalid{border-color:red}.verben-button{padding:8px 15px;border-radius:4px;border:none;text-align:center}.verben-button.primary{background-color:#ffe681}.verben-button.secondary{background-color:#d9d9d940}.reset-password-container{gap:25px;padding:50px;border:1px solid rgba(102,102,102,.5);box-shadow:4px 4px 4px #00000040;border-radius:24px}.reset-password-title{font-size:30px;font-weight:700}.reset-password-subtitle{font-size:14px;font-weight:500;color:#666}.form-field{gap:5px}.form-field-caption{color:#666}\n"] }]
233
- }], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: HttpWebRequestService }, { type: UtilService }], propDecorators: { title: [{
234
- type: Input
235
- }], subTitle: [{
236
- type: Input
237
- }], buttonCaption: [{
238
- type: Input
239
- }], buttonTextColor: [{
240
- type: Input
241
- }], buttonBackgroundColor: [{
242
- type: Input
243
- }], showOldPassword: [{
244
- type: Input
245
- }], token: [{
246
- type: Input
247
- }], onSubmit: [{
248
- type: Output
249
- }], onSubmitEnd: [{
250
- type: Output
251
- }] } });
252
-
253
- class ResetPasswordModule {
254
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResetPasswordModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
255
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: ResetPasswordModule, declarations: [ResetPasswordComponent], imports: [FormsModule,
256
- ReactiveFormsModule,
257
- VerbenaInputModule,
258
- VerbenaButtonModule,
259
- CommonModule], exports: [ResetPasswordComponent] });
260
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResetPasswordModule, imports: [FormsModule,
261
- ReactiveFormsModule,
262
- VerbenaInputModule,
263
- VerbenaButtonModule,
264
- CommonModule] });
265
- }
266
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResetPasswordModule, decorators: [{
267
- type: NgModule,
268
- args: [{
269
- declarations: [ResetPasswordComponent],
270
- imports: [
271
- FormsModule,
272
- ReactiveFormsModule,
273
- VerbenaInputModule,
274
- VerbenaButtonModule,
275
- CommonModule,
276
- ],
277
- exports: [ResetPasswordComponent],
278
- }]
279
- }] });
280
-
281
- var ObjectState;
282
- (function (ObjectState) {
283
- ObjectState["New"] = "New";
284
- ObjectState["Changed"] = "Changed";
285
- ObjectState["Unchanged"] = "Unchanged";
286
- ObjectState["Removed"] = "Removed";
287
- })(ObjectState || (ObjectState = {}));
288
-
289
- var Status;
290
- (function (Status) {
291
- Status["InActive"] = "InActive";
292
- Status["Active"] = "Active";
293
- })(Status || (Status = {}));
294
-
295
- var RequestStatus;
296
- (function (RequestStatus) {
297
- RequestStatus["Pending"] = "Pending";
298
- })(RequestStatus || (RequestStatus = {}));
299
-
300
- class UserRequestComponent {
301
- fb;
302
- server;
303
- utilService;
304
- width = '500px';
305
- headingTitle = 'Request an account';
306
- headingClass = 'font-medium text-[2rem] leading-[48px] text-[#333]';
307
- customClass = '';
308
- bgColor = '#fff';
309
- boxShadow = '4px 4px 4px rgba(0, 0, 0, 0.25)';
310
- border = '1px solid #66666680';
311
- borderRadius = '24px';
312
- textColor = '#333';
313
- height = 'auto';
314
- pd = '32px 48px';
315
- // Button Inputs
316
- text = 'Send Request';
317
- color = 'black';
318
- btnBorder = '1px solid #FFE681';
319
- btnBorderRadius = '40px';
320
- btnBgColor = '#FFE681';
321
- btnWidth = '100%';
322
- btnPd = '10px 20px';
323
- termsLink = '';
324
- privacyLink = '';
325
- routerLink = '';
326
- formSubmit = new EventEmitter();
327
- googleClick = new EventEmitter();
328
- appleClick = new EventEmitter();
329
- onSubmitResponseEnd = new EventEmitter();
330
- userRequestForm;
331
- constructor(fb, server, utilService) {
332
- this.fb = fb;
333
- this.server = server;
334
- this.utilService = utilService;
335
- this.userRequestForm = this.fb.group({
336
- FirstName: [null, [Validators.required]],
337
- LastName: [null, [Validators.required]],
338
- Email: [null, [Validators.required, Validators.email]],
339
- Password: [null, [Validators.required, Validators.minLength(8)]],
340
- ConfirmPassword: [null, [Validators.required]],
341
- }, { validators: this.passwordMatchValidator });
342
- }
343
- passwordMatchValidator(control) {
344
- const password = control.get('Password')?.value;
345
- const confirmPassword = control.get('ConfirmPassword')?.value;
346
- return password === confirmPassword ? null : { passwordMismatch: true };
347
- }
348
- get passwordMismatchError() {
349
- return this.userRequestForm.hasError('passwordMismatch');
350
- }
351
- get styles() {
352
- return {
353
- 'background-color': this.bgColor,
354
- 'box-shadow': this.boxShadow,
355
- border: this.border,
356
- 'border-radius': this.borderRadius,
357
- color: this.textColor,
358
- 'max-width': this.width,
359
- height: this.height,
360
- padding: this.pd,
361
- };
362
- }
363
- checkForm() {
364
- return this.userRequestForm.valid;
365
- }
366
- handleGoogleAuth() {
367
- this.googleClick.emit();
368
- }
369
- handleAppleAuth() {
370
- this.appleClick.emit();
371
- }
372
- async submitForm() {
373
- if (!this.checkForm()) {
374
- return;
375
- }
376
- const payload = [{
377
- Code: '',
378
- FirstName: this.userRequestForm.controls['FirstName'].value,
379
- LastName: this.userRequestForm.controls['LastName'].value,
380
- MailAddress: this.userRequestForm.controls['Email'].value,
381
- Password: this.userRequestForm.controls['Password'].value,
382
- PhoneNumber: '',
383
- OtherName: '',
384
- Role: [],
385
- Tags: [],
386
- Status: Status.Active,
387
- RequestStatus: RequestStatus.Pending,
388
- UpdatedAt: new Date(),
389
- CreatedAt: new Date(),
390
- Id: '',
391
- DataState: ObjectState.New,
392
- TenantId: '',
393
- ServiceName: '',
394
- ActionBy: '',
395
- Comment: ''
396
- }];
397
- this.formSubmit.emit(payload);
398
- this.utilService.sendBI(true);
399
- const res = await this.server.post(`User/SaveUserAccessRequests
400
- `, payload);
401
- this.utilService.sendBI(false);
402
- if (res instanceof ErrorResponse) {
403
- this.onSubmitResponseEnd.emit(res);
404
- }
405
- else {
406
- var result = res;
407
- this.onSubmitResponseEnd.emit(result);
408
- }
409
- }
410
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRequestComponent, deps: [{ token: i1$1.FormBuilder }, { token: HttpWebRequestService }, { token: UtilService }], target: i0.ɵɵFactoryTarget.Component });
411
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserRequestComponent, selector: "lib-user-request", inputs: { width: "width", headingTitle: "headingTitle", headingClass: "headingClass", customClass: "customClass", bgColor: "bgColor", boxShadow: "boxShadow", border: "border", borderRadius: "borderRadius", textColor: "textColor", height: "height", pd: "pd", text: "text", color: "color", btnBorder: "btnBorder", btnBorderRadius: "btnBorderRadius", btnBgColor: "btnBgColor", btnWidth: "btnWidth", btnPd: "btnPd", termsLink: "termsLink", privacyLink: "privacyLink", routerLink: "routerLink" }, outputs: { formSubmit: "formSubmit", googleClick: "googleClick", appleClick: "appleClick", onSubmitResponseEnd: "onSubmitResponseEnd" }, ngImport: i0, template: "<section [ngStyle]=\"styles\" class=\"{{ customClass }}\">\n <h2 class=\"{{ headingClass }}\">\n {{ headingTitle }}\n </h2>\n\n <form\n [formGroup]=\"userRequestForm\"\n (ngSubmit)=\"submitForm()\"\n class=\"flex flex-col gap-5 mt-3\"\n >\n <verbena-input\n [label]=\"'First Name'\"\n [labelColor]=\"'#666'\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'text'\"\n formControlName=\"FirstName\"\n [showBorder]=\"true\"\n [bgColor]=\"'white'\"\n [border]=\"'1px solid #66666659'\"\n [borderRadius]=\"'12px'\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <verbena-input\n [label]=\"'Last Name'\"\n [labelColor]=\"'#666'\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'text'\"\n formControlName=\"LastName\"\n [showBorder]=\"true\"\n [bgColor]=\"'white'\"\n [border]=\"'1px solid #66666659'\"\n [borderRadius]=\"'12px'\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <verbena-input\n [label]=\"'E-mail Address'\"\n [labelColor]=\"'#666'\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'email'\"\n formControlName=\"Email\"\n [showBorder]=\"true\"\n [bgColor]=\"'white'\"\n [border]=\"'1px solid #66666659'\"\n [borderRadius]=\"'12px'\"\n [showErrorMessage]=\"true\"\n [customErrorMessages]=\"{\n required: 'Email address is required',\n email: 'Email address must be valid'\n }\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n\n <verbena-input\n [label]=\"'Password'\"\n [labelColor]=\"'#666'\"\n [placeHolder]=\"''\"\n formControlName=\"Password\"\n [required]=\"true\"\n [type]=\"'password'\"\n [showBorder]=\"true\"\n [bgColor]=\"'white'\"\n [border]=\"'1px solid #66666659'\"\n [borderRadius]=\"'12px'\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n\n <verbena-input\n [label]=\"'Confirm Password'\"\n [labelColor]=\"'#666'\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'password'\"\n formControlName=\"ConfirmPassword\"\n [showBorder]=\"true\"\n [bgColor]=\"'white'\"\n [minLength]=\"userRequestForm.controls['Password'].value?.length\"\n [border]=\"'1px solid #66666659'\"\n [borderRadius]=\"'12px'\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [customErrorMessages]=\"{\n minLength:'Confirm Password must match password',\n required: 'Confirm Password is required and must match password',\n password: 'Password does not match',\n }\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n\n <verbena-button\n [class]=\"'mt-6'\"\n [disable]=\"!this.checkForm()\"\n [text]=\"text\"\n [bgColor]=\"btnBgColor\"\n [textColor]=\"color\"\n [buttonClass]=\"'cursor-not-allowed'\"\n [border]=\"btnBorder\"\n [borderRadius]=\"btnBorderRadius\"\n [pd]=\"btnPd\"\n (click)=\"submitForm()\"\n [ngClass]=\"{\n 'cursor-not-allowed':!checkForm()\n }\"\n [width]=\"btnWidth\"\n buttonClass=\"font-medium text-[22px] leading-[33px]\"\n ></verbena-button>\n <div class=\"flex justify-center items-center OR\">\n <span></span>\n OR\n <span></span>\n </div>\n\n <verbena-button\n svg=\"google-logo\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n (click)=\"handleGoogleAuth()\"\n text=\"Continue with Google\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333]\"\n ></verbena-button>\n\n <verbena-button\n svg=\"apple-logo\"\n (click)=\"handleAppleAuth()\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with Apple\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n ></verbena-button>\n </form>\n</section>\n", styles: [".flex{display:flex}.items-center{align-items:center}.overflow-hidden{overflow:hidden}.justify-center{justify-content:center}.h-full{height:100%}.text-center{text-align:center}.underline{text-decoration:underline}.gap-5{gap:20px}.mt-4{margin-top:1rem}.space-y-4>:not([hidden])~:not([hidden]){margin-top:1rem}.gap-1>:not([hidden])~:not([hidden]){gap:.25rem}.pt-3{padding-top:.75rem}.mt-5{margin-top:1.25rem}.border{border-width:1px}.rounded-xl{border-radius:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.flex-col{flex-direction:column}.object-cover{object-fit:cover}.w-full{width:100%}.cursor-not-allowed{cursor:not-allowed!important}.accent{accent-color:#000}.OR{color:#666;gap:6px}.OR span{width:150px;border-top:2px solid #6666663d;display:block}\n"], dependencies: [{ kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i2.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
412
- }
413
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRequestComponent, decorators: [{
414
- type: Component,
415
- args: [{ selector: 'lib-user-request', template: "<section [ngStyle]=\"styles\" class=\"{{ customClass }}\">\n <h2 class=\"{{ headingClass }}\">\n {{ headingTitle }}\n </h2>\n\n <form\n [formGroup]=\"userRequestForm\"\n (ngSubmit)=\"submitForm()\"\n class=\"flex flex-col gap-5 mt-3\"\n >\n <verbena-input\n [label]=\"'First Name'\"\n [labelColor]=\"'#666'\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'text'\"\n formControlName=\"FirstName\"\n [showBorder]=\"true\"\n [bgColor]=\"'white'\"\n [border]=\"'1px solid #66666659'\"\n [borderRadius]=\"'12px'\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <verbena-input\n [label]=\"'Last Name'\"\n [labelColor]=\"'#666'\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'text'\"\n formControlName=\"LastName\"\n [showBorder]=\"true\"\n [bgColor]=\"'white'\"\n [border]=\"'1px solid #66666659'\"\n [borderRadius]=\"'12px'\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <verbena-input\n [label]=\"'E-mail Address'\"\n [labelColor]=\"'#666'\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'email'\"\n formControlName=\"Email\"\n [showBorder]=\"true\"\n [bgColor]=\"'white'\"\n [border]=\"'1px solid #66666659'\"\n [borderRadius]=\"'12px'\"\n [showErrorMessage]=\"true\"\n [customErrorMessages]=\"{\n required: 'Email address is required',\n email: 'Email address must be valid'\n }\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n\n <verbena-input\n [label]=\"'Password'\"\n [labelColor]=\"'#666'\"\n [placeHolder]=\"''\"\n formControlName=\"Password\"\n [required]=\"true\"\n [type]=\"'password'\"\n [showBorder]=\"true\"\n [bgColor]=\"'white'\"\n [border]=\"'1px solid #66666659'\"\n [borderRadius]=\"'12px'\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n\n <verbena-input\n [label]=\"'Confirm Password'\"\n [labelColor]=\"'#666'\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'password'\"\n formControlName=\"ConfirmPassword\"\n [showBorder]=\"true\"\n [bgColor]=\"'white'\"\n [minLength]=\"userRequestForm.controls['Password'].value?.length\"\n [border]=\"'1px solid #66666659'\"\n [borderRadius]=\"'12px'\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [customErrorMessages]=\"{\n minLength:'Confirm Password must match password',\n required: 'Confirm Password is required and must match password',\n password: 'Password does not match',\n }\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n\n <verbena-button\n [class]=\"'mt-6'\"\n [disable]=\"!this.checkForm()\"\n [text]=\"text\"\n [bgColor]=\"btnBgColor\"\n [textColor]=\"color\"\n [buttonClass]=\"'cursor-not-allowed'\"\n [border]=\"btnBorder\"\n [borderRadius]=\"btnBorderRadius\"\n [pd]=\"btnPd\"\n (click)=\"submitForm()\"\n [ngClass]=\"{\n 'cursor-not-allowed':!checkForm()\n }\"\n [width]=\"btnWidth\"\n buttonClass=\"font-medium text-[22px] leading-[33px]\"\n ></verbena-button>\n <div class=\"flex justify-center items-center OR\">\n <span></span>\n OR\n <span></span>\n </div>\n\n <verbena-button\n svg=\"google-logo\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n (click)=\"handleGoogleAuth()\"\n text=\"Continue with Google\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333]\"\n ></verbena-button>\n\n <verbena-button\n svg=\"apple-logo\"\n (click)=\"handleAppleAuth()\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with Apple\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n ></verbena-button>\n </form>\n</section>\n", styles: [".flex{display:flex}.items-center{align-items:center}.overflow-hidden{overflow:hidden}.justify-center{justify-content:center}.h-full{height:100%}.text-center{text-align:center}.underline{text-decoration:underline}.gap-5{gap:20px}.mt-4{margin-top:1rem}.space-y-4>:not([hidden])~:not([hidden]){margin-top:1rem}.gap-1>:not([hidden])~:not([hidden]){gap:.25rem}.pt-3{padding-top:.75rem}.mt-5{margin-top:1.25rem}.border{border-width:1px}.rounded-xl{border-radius:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.flex-col{flex-direction:column}.object-cover{object-fit:cover}.w-full{width:100%}.cursor-not-allowed{cursor:not-allowed!important}.accent{accent-color:#000}.OR{color:#666;gap:6px}.OR span{width:150px;border-top:2px solid #6666663d;display:block}\n"] }]
416
- }], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: HttpWebRequestService }, { type: UtilService }], propDecorators: { width: [{
417
- type: Input
418
- }], headingTitle: [{
419
- type: Input
420
- }], headingClass: [{
421
- type: Input
422
- }], customClass: [{
423
- type: Input
424
- }], bgColor: [{
425
- type: Input
426
- }], boxShadow: [{
427
- type: Input
428
- }], border: [{
429
- type: Input
430
- }], borderRadius: [{
431
- type: Input
432
- }], textColor: [{
433
- type: Input
434
- }], height: [{
435
- type: Input
436
- }], pd: [{
437
- type: Input
438
- }], text: [{
439
- type: Input
440
- }], color: [{
441
- type: Input
442
- }], btnBorder: [{
443
- type: Input
444
- }], btnBorderRadius: [{
445
- type: Input
446
- }], btnBgColor: [{
447
- type: Input
448
- }], btnWidth: [{
449
- type: Input
450
- }], btnPd: [{
451
- type: Input
452
- }], termsLink: [{
453
- type: Input
454
- }], privacyLink: [{
455
- type: Input
456
- }], routerLink: [{
457
- type: Input
458
- }], formSubmit: [{
459
- type: Output
460
- }], googleClick: [{
461
- type: Output
462
- }], appleClick: [{
463
- type: Output
464
- }], onSubmitResponseEnd: [{
465
- type: Output
466
- }] } });
467
-
468
- class UserRequestModule {
469
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRequestModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
470
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UserRequestModule, declarations: [UserRequestComponent], imports: [FormsModule,
471
- ReactiveFormsModule,
472
- VerbenaInputModule,
473
- VerbenaButtonModule,
474
- CommonModule], exports: [UserRequestComponent] });
475
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRequestModule, imports: [FormsModule,
476
- ReactiveFormsModule,
477
- VerbenaInputModule,
478
- VerbenaButtonModule,
479
- CommonModule] });
480
- }
481
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRequestModule, decorators: [{
482
- type: NgModule,
483
- args: [{
484
- declarations: [UserRequestComponent],
485
- imports: [
486
- FormsModule,
487
- ReactiveFormsModule,
488
- VerbenaInputModule,
489
- VerbenaButtonModule,
490
- CommonModule,
491
- ],
492
- exports: [UserRequestComponent],
493
- }]
494
- }] });
495
-
496
- class MailValidationComponent {
497
- customClass = '';
498
- bgColor = '#fff';
499
- boxShadow = '4px 4px 4px rgba(0, 0, 0, 0.25)';
500
- border = '1px solid #66666680';
501
- borderRadius = '24px';
502
- textColor = '#666666';
503
- height = 'auto';
504
- pd = '32px 48px';
505
- width = '600px';
506
- text = 'Login';
507
- textAlign = 'center';
508
- color = 'black';
509
- textSize = '32px';
510
- btnBorder = '1px solid #FFE681';
511
- btnBorderRadius = "40px";
512
- btnBgColor = '#FFE681';
513
- btnWidth = '100%';
514
- btnPd = '7px 10px';
515
- resendOtp = new EventEmitter();
516
- proceedToNextStep = new EventEmitter();
517
- login = new EventEmitter();
518
- currentStep = 'linkSent';
519
- handleResendOtp() {
520
- this.resendOtp.emit();
521
- }
522
- goToNextStep() {
523
- switch (this.currentStep) {
524
- case 'linkSent':
525
- this.currentStep = 'verified';
526
- this.proceedToNextStep.emit(this.currentStep);
527
- break;
528
- case 'verified':
529
- this.currentStep = 'accessGranted';
530
- this.proceedToNextStep.emit(this.currentStep);
531
- break;
532
- }
533
- }
534
- get styles() {
535
- return {
536
- 'background-color': this.bgColor,
537
- 'box-shadow': this.boxShadow,
538
- 'border': this.border,
539
- 'border-radius': this.borderRadius,
540
- 'color': this.textColor,
541
- 'max-width': this.width,
542
- 'margin': '0 auto',
543
- 'height': this.height,
544
- 'padding': this.pd,
545
- };
546
- }
547
- handleLogin() {
548
- this.login.emit();
549
- }
550
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MailValidationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
551
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MailValidationComponent, selector: "lib-mail-validation", inputs: { customClass: "customClass", bgColor: "bgColor", boxShadow: "boxShadow", border: "border", borderRadius: "borderRadius", textColor: "textColor", height: "height", pd: "pd", width: "width", text: "text", textAlign: "textAlign", color: "color", textSize: "textSize", btnBorder: "btnBorder", btnBorderRadius: "btnBorderRadius", btnBgColor: "btnBgColor", btnWidth: "btnWidth", btnPd: "btnPd" }, outputs: { resendOtp: "resendOtp", proceedToNextStep: "proceedToNextStep", login: "login" }, ngImport: i0, template: "<section [ngStyle]=\"styles\" class=\"{{ customClass }}\">\n <div *ngIf=\"currentStep === 'linkSent'\">\n <p [style.color]=\"textColor\" [style.font-size]=\"textSize\">\n Follow the link sent to your e-mail to verify your e-mail address\n </p>\n <p class=\"mt-4\" (click)=\"handleResendOtp()\">\n Didn't get a link? <a href=\"#\" class=\"underline resend\">Resend</a>\n </p>\n </div>\n\n <div *ngIf=\"currentStep === 'verified'\">\n <p [style.color]=\"textColor\" [style.font-size]=\"textSize\">\n Your e-mail has been verified! You will be notified when your access has\n been authorized\n </p>\n </div>\n\n <div *ngIf=\"currentStep === 'accessGranted'\">\n <p [style.color]=\"textColor\" [style.font-size]=\"textSize\">\n Your e-mail has been verified!\n </p>\n <div class=\"mt-4\">\n <verbena-button\n [text]=\"text\"\n [bgColor]=\"btnBgColor\"\n [textColor]=\"color\"\n [border]=\"btnBorder\"\n [borderRadius]=\"btnBorderRadius\"\n [pd]=\"btnPd\"\n (click)=\"handleLogin()\"\n [width]=\"btnWidth\"\n textSize=\"'22px'\"\n buttonClass=\"font-medium text-[22px] leading-[33px]\"\n ></verbena-button>\n </div>\n </div>\n</section>\n", styles: [".flex{display:flex}.overflow-hidden{overflow:hidden}.h-full{height:100%}.underline{text-decoration:underline}.mt-4{margin-top:1rem}.resend{color:#00f}.space-y-4>:not([hidden])~:not([hidden]){margin-top:1rem}.gap-1>:not([hidden])~:not([hidden]){gap:.25rem}.pt-3{padding-top:.75rem}.mt-5{margin-top:1.25rem}.border{border-width:1px}.rounded-xl{border-radius:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.flex-col{flex-direction:column}.w-full{width:100%}\n"], dependencies: [{ kind: "component", type: i2.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
552
- }
553
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MailValidationComponent, decorators: [{
554
- type: Component,
555
- args: [{ selector: 'lib-mail-validation', template: "<section [ngStyle]=\"styles\" class=\"{{ customClass }}\">\n <div *ngIf=\"currentStep === 'linkSent'\">\n <p [style.color]=\"textColor\" [style.font-size]=\"textSize\">\n Follow the link sent to your e-mail to verify your e-mail address\n </p>\n <p class=\"mt-4\" (click)=\"handleResendOtp()\">\n Didn't get a link? <a href=\"#\" class=\"underline resend\">Resend</a>\n </p>\n </div>\n\n <div *ngIf=\"currentStep === 'verified'\">\n <p [style.color]=\"textColor\" [style.font-size]=\"textSize\">\n Your e-mail has been verified! You will be notified when your access has\n been authorized\n </p>\n </div>\n\n <div *ngIf=\"currentStep === 'accessGranted'\">\n <p [style.color]=\"textColor\" [style.font-size]=\"textSize\">\n Your e-mail has been verified!\n </p>\n <div class=\"mt-4\">\n <verbena-button\n [text]=\"text\"\n [bgColor]=\"btnBgColor\"\n [textColor]=\"color\"\n [border]=\"btnBorder\"\n [borderRadius]=\"btnBorderRadius\"\n [pd]=\"btnPd\"\n (click)=\"handleLogin()\"\n [width]=\"btnWidth\"\n textSize=\"'22px'\"\n buttonClass=\"font-medium text-[22px] leading-[33px]\"\n ></verbena-button>\n </div>\n </div>\n</section>\n", styles: [".flex{display:flex}.overflow-hidden{overflow:hidden}.h-full{height:100%}.underline{text-decoration:underline}.mt-4{margin-top:1rem}.resend{color:#00f}.space-y-4>:not([hidden])~:not([hidden]){margin-top:1rem}.gap-1>:not([hidden])~:not([hidden]){gap:.25rem}.pt-3{padding-top:.75rem}.mt-5{margin-top:1.25rem}.border{border-width:1px}.rounded-xl{border-radius:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.flex-col{flex-direction:column}.w-full{width:100%}\n"] }]
556
- }], propDecorators: { customClass: [{
557
- type: Input
558
- }], bgColor: [{
559
- type: Input
560
- }], boxShadow: [{
561
- type: Input
562
- }], border: [{
563
- type: Input
564
- }], borderRadius: [{
565
- type: Input
566
- }], textColor: [{
567
- type: Input
568
- }], height: [{
569
- type: Input
570
- }], pd: [{
571
- type: Input
572
- }], width: [{
573
- type: Input
574
- }], text: [{
575
- type: Input
576
- }], textAlign: [{
577
- type: Input
578
- }], color: [{
579
- type: Input
580
- }], textSize: [{
581
- type: Input
582
- }], btnBorder: [{
583
- type: Input
584
- }], btnBorderRadius: [{
585
- type: Input
586
- }], btnBgColor: [{
587
- type: Input
588
- }], btnWidth: [{
589
- type: Input
590
- }], btnPd: [{
591
- type: Input
592
- }], resendOtp: [{
593
- type: Output
594
- }], proceedToNextStep: [{
595
- type: Output
596
- }], login: [{
597
- type: Output
598
- }] } });
599
-
600
- class MailValidationModule {
601
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MailValidationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
602
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: MailValidationModule, declarations: [MailValidationComponent], imports: [FormsModule,
603
- ReactiveFormsModule,
604
- VerbenaInputModule,
605
- VerbenaButtonModule,
606
- CommonModule], exports: [MailValidationComponent] });
607
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MailValidationModule, imports: [FormsModule,
608
- ReactiveFormsModule,
609
- VerbenaInputModule,
610
- VerbenaButtonModule,
611
- CommonModule] });
612
- }
613
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MailValidationModule, decorators: [{
614
- type: NgModule,
615
- args: [{
616
- declarations: [MailValidationComponent],
617
- imports: [
618
- FormsModule,
619
- ReactiveFormsModule,
620
- VerbenaInputModule,
621
- VerbenaButtonModule,
622
- CommonModule,
623
- ],
624
- exports: [MailValidationComponent],
625
- }]
626
- }] });
627
-
628
- class ButtonComponent {
629
- text = '';
630
- color = 'black';
631
- border = '1px solid #FFE681';
632
- borderRadius = "40px";
633
- bgColor = '#FFE681';
634
- width = '100%';
635
- pd = '10px 20px';
636
- buttonClass = '';
637
- disabled = false;
638
- buttonClick = new EventEmitter();
639
- handleClick() {
640
- this.buttonClick.emit();
641
- }
642
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
643
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ButtonComponent, selector: "lib-button", inputs: { text: "text", color: "color", border: "border", borderRadius: "borderRadius", bgColor: "bgColor", width: "width", pd: "pd", buttonClass: "buttonClass", disabled: "disabled" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<verbena-button\n[text]=\"text\"\n[bgColor]=\"bgColor\"\n[textColor]=\"color\"\n[border]=\"border\"\n[borderRadius]=\"borderRadius\"\n[pd]=\"pd\"\n[width]=\"width\"\n[disable]=\"disabled\"\n[ngStyle]=\"{'cursor': disabled ? 'not-allowed' : 'pointer' }\"\nbuttonClass=\"font-medium text-[22px] leading-[33px] {{buttonClass}}\"\n(click)=\"handleClick()\"\n></verbena-button>\n", styles: [".disable-btn{cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }] });
644
- }
645
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ButtonComponent, decorators: [{
646
- type: Component,
647
- args: [{ selector: 'lib-button', template: "<verbena-button\n[text]=\"text\"\n[bgColor]=\"bgColor\"\n[textColor]=\"color\"\n[border]=\"border\"\n[borderRadius]=\"borderRadius\"\n[pd]=\"pd\"\n[width]=\"width\"\n[disable]=\"disabled\"\n[ngStyle]=\"{'cursor': disabled ? 'not-allowed' : 'pointer' }\"\nbuttonClass=\"font-medium text-[22px] leading-[33px] {{buttonClass}}\"\n(click)=\"handleClick()\"\n></verbena-button>\n", styles: [".disable-btn{cursor:not-allowed}\n"] }]
648
- }], propDecorators: { text: [{
649
- type: Input
650
- }], color: [{
651
- type: Input
652
- }], border: [{
653
- type: Input
654
- }], borderRadius: [{
655
- type: Input
656
- }], bgColor: [{
657
- type: Input
658
- }], width: [{
659
- type: Input
660
- }], pd: [{
661
- type: Input
662
- }], buttonClass: [{
663
- type: Input
664
- }], disabled: [{
665
- type: Input
666
- }], buttonClick: [{
667
- type: Output
668
- }] } });
669
-
670
- class OAuthComponent {
671
- googleClick = new EventEmitter();
672
- appleClick = new EventEmitter();
673
- oAuthWithGoogle() {
674
- this.googleClick.emit();
675
- }
676
- ;
677
- oAuthWithApple() {
678
- this.appleClick.emit();
679
- }
680
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OAuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
681
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OAuthComponent, selector: "verben-o-auth", outputs: { googleClick: "googleClick", appleClick: "appleClick" }, ngImport: i0, template: "<section class=\"oauthWrapper\"> \n <div class=\"OrFlexWrapper\">\n <hr/>\n <span>OR</span>\n <hr/>\n </div>\n <verbena-button\n svg=\"google-logo\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with Google\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333]\"\n (click)=\"oAuthWithGoogle()\"\n ></verbena-button>\n \n <verbena-button\n svg=\"apple-logo\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with Apple\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n (click)=\"oAuthWithApple()\"\n ></verbena-button>\n</section>\n", styles: ["hr{height:1px;margin:0;border:1px solid #66666640;flex:1}.OR{margin:0 2px;color:#666}.oauthWrapper{display:flex;flex-direction:column;gap:12px}.OrFlexWrapper{display:flex;align-items:center;gap:8px}\n"], dependencies: [{ kind: "component", type: i2.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }] });
682
- }
683
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OAuthComponent, decorators: [{
684
- type: Component,
685
- args: [{ selector: 'verben-o-auth', template: "<section class=\"oauthWrapper\"> \n <div class=\"OrFlexWrapper\">\n <hr/>\n <span>OR</span>\n <hr/>\n </div>\n <verbena-button\n svg=\"google-logo\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with Google\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333]\"\n (click)=\"oAuthWithGoogle()\"\n ></verbena-button>\n \n <verbena-button\n svg=\"apple-logo\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with Apple\"\n bgColor=\"white\"\n textColor=\"black\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mt-2\"\n (click)=\"oAuthWithApple()\"\n ></verbena-button>\n</section>\n", styles: ["hr{height:1px;margin:0;border:1px solid #66666640;flex:1}.OR{margin:0 2px;color:#666}.oauthWrapper{display:flex;flex-direction:column;gap:12px}.OrFlexWrapper{display:flex;align-items:center;gap:8px}\n"] }]
686
- }], propDecorators: { googleClick: [{
687
- type: Output
688
- }], appleClick: [{
689
- type: Output
690
- }] } });
691
-
692
- class SignUpComponent {
693
- fb;
694
- server;
695
- utilService;
696
- headlingText = 'Create an account';
697
- width = '';
698
- maxWidth = '';
699
- margin = '';
700
- pd = '';
701
- customClass = '';
702
- headlingClass = '';
703
- bgColor = '#fff';
704
- boxShadow = '4px 4px 4px rgba(0, 0, 0, 0.25)';
705
- border = '1px solid #66666680';
706
- borderRadius = '24px';
707
- height = 'auto';
708
- textColor = '#333';
709
- disabled = false;
710
- // button styles
711
- btnClass = '';
712
- btnBgColor = '#FFE681';
713
- btnColor = '';
714
- btnBorder = '';
715
- btnBorderRadius = '24px';
716
- btnPd = '';
717
- btnText = 'Create account';
718
- //inputStyles
719
- inputLabelColor = '';
720
- inputBgColor = 'transparent';
721
- inputBorder = '1px solid #66666659';
722
- inputBorderRadius = '12px';
723
- // links
724
- termsLink = '';
725
- privacyLink = '';
726
- routerLink = '';
727
- formSubmit = new EventEmitter();
728
- onSubmitEnd = new EventEmitter();
729
- googleClick = new EventEmitter();
730
- appleClick = new EventEmitter();
731
- signUpForm;
732
- constructor(fb, server, utilService) {
733
- this.fb = fb;
734
- this.server = server;
735
- this.utilService = utilService;
736
- this.signUpForm = this.fb.group({
737
- Firstname: new FormControl(null, Validators.required),
738
- Lastname: new FormControl(null, Validators.required),
739
- Email: new FormControl(null, [
740
- Validators.required,
741
- Validators.email,
742
- ]),
743
- Password: new FormControl(null, [
744
- Validators.required,
745
- Validators.minLength(8),
746
- ]),
747
- Confirmpassword: new FormControl(null, [
748
- Validators.required,
749
- Validators.minLength(8),
750
- ]),
751
- Terms: new FormControl(false, [Validators.requiredTrue]),
752
- }, { validators: this.passwordMatchValidator });
753
- }
754
- passwordMatchValidator = (group) => {
755
- const password = group.get('Password')?.value;
756
- const confirmPassword = group.get('Confirmpassword')?.value;
757
- return password === confirmPassword ? null : { passwordMismatch: true };
758
- };
759
- checkForm() {
760
- return this.signUpForm.valid;
761
- }
762
- async submit() {
763
- if (!this.checkForm()) {
764
- return;
765
- }
766
- const data = {
767
- Firstname: this.signUpForm.controls['Firstname'].value,
768
- Lastname: this.signUpForm.controls['Lastname'].value,
769
- Email: this.signUpForm.controls['Email'].value,
770
- Password: this.signUpForm.controls['Password'].value,
771
- Terms: this.signUpForm.controls['Terms'].value,
772
- Id: '61f7e48f0c651345677b7775',
773
- CreatedAt: new Date(),
774
- UpdatedAt: new Date(),
775
- DataState: ObjectState.New,
776
- id: '61f7e48f0c651345677b7775',
777
- Tenant: 'James'
778
- };
779
- const payload = [
780
- {
781
- ...data,
782
- "Code": "123 ",
783
- "ServiceName": "Test 1",
784
- "MailAddress": data.Email,
785
- "OtherName": "James",
786
- "Status": "Inactive",
787
- "PhoneNumber": "07012345678",
788
- "TenantId": '61f7e48f0c651345677b7775',
789
- "Role": ['tester'],
790
- "Tags": [
791
- {
792
- "Name": "checker",
793
- "IsOptional": true
794
- }
795
- ],
796
- }
797
- ];
798
- this.formSubmit.emit(data);
799
- this.utilService.sendBI(true);
800
- const res = await this.server.post(`User/SaveUsers`, payload);
801
- this.utilService.sendBI(false);
802
- if (res instanceof ErrorResponse) {
803
- this.onSubmitEnd.emit(res);
804
- }
805
- else {
806
- var result = res;
807
- this.onSubmitEnd.emit(result);
808
- }
809
- }
810
- handleGoogleAuth() {
811
- this.googleClick.emit();
812
- }
813
- handleAppleAuth() {
814
- this.appleClick.emit();
815
- }
816
- get styles() {
817
- return {
818
- 'background-color': this.bgColor,
819
- 'box-shadow': this.boxShadow,
820
- 'border': this.border,
821
- 'border-radius': this.borderRadius,
822
- 'color': this.textColor,
823
- 'width': this.width,
824
- 'max-width': this.maxWidth,
825
- 'margin': this.margin,
826
- 'height': this.height,
827
- 'padding': this.pd
828
- };
829
- }
830
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignUpComponent, deps: [{ token: i1$1.FormBuilder }, { token: HttpWebRequestService }, { token: UtilService }], target: i0.ɵɵFactoryTarget.Component });
831
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SignUpComponent, selector: "verben-sign-up", inputs: { headlingText: "headlingText", width: "width", maxWidth: "maxWidth", margin: "margin", pd: "pd", customClass: "customClass", headlingClass: "headlingClass", bgColor: "bgColor", boxShadow: "boxShadow", border: "border", borderRadius: "borderRadius", height: "height", textColor: "textColor", disabled: "disabled", btnClass: "btnClass", btnBgColor: "btnBgColor", btnColor: "btnColor", btnBorder: "btnBorder", btnBorderRadius: "btnBorderRadius", btnPd: "btnPd", btnText: "btnText", inputLabelColor: "inputLabelColor", inputBgColor: "inputBgColor", inputBorder: "inputBorder", inputBorderRadius: "inputBorderRadius", termsLink: "termsLink", privacyLink: "privacyLink", routerLink: "routerLink" }, outputs: { formSubmit: "formSubmit", onSubmitEnd: "onSubmitEnd", googleClick: "googleClick", appleClick: "appleClick" }, ngImport: i0, template: "<section [ngStyle]=\"styles\" class=\"{{ customClass }}\">\n <h2 class=\"{{headlingClass}}\">\n {{headlingText}}\n </h2>\n <form [formGroup]=\"signUpForm\" (ngSubmit)=\"submit()\" class=\"flexWrapper\">\n <verbena-input\n [label]=\"'First name'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'text'\"\n formControlName=\"Firstname\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n [customErrorMessages]=\"{required:'First name is required'}\"\n ></verbena-input>\n <verbena-input\n [label]=\"'Last name'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'text'\"\n formControlName=\"Lastname\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n [customErrorMessages]=\"{required:'Last name is required'}\"\n ></verbena-input>\n <verbena-input\n [label]=\"'Email'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'email'\"\n formControlName=\"Email\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <verbena-input\n [label]=\"'Password'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'password'\"\n formControlName=\"Password\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n [passwordToggle]=\"true\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <div> \n <verbena-input\n [label]=\"'Confirm Password'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'password'\"\n formControlName=\"Confirmpassword\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"false\"\n [errorBorderColor]=\"'red'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <span *ngIf=\"signUpForm.hasError('passwordMismatch') && signUpForm.get('Confirmpassword')?.dirty\"> \n <small class=\"error-text\">Passwords do not match.</small>\n </span>\n </div>\n <div> \n <div class=\"checkBoxWrapper\">\n <input type=\"checkbox\" id=\"terms\" formControlName=\"Terms\" class=\"checBoxInput\" />\n <label for=\"terms\" \n class=\"break-all font-normal leading-6\"\n >By creating an account, I agree to our <a [attr.href]=\"termsLink\">Terms of use</a> and\n <a [attr.href]=\"privacyLink\">Privacy Policy</a></label\n >\n </div>\n <p *ngIf=\"signUpForm.controls['Terms'].invalid && signUpForm.controls['Terms'].touched\">\n <small class=\"error-text\">Please agree to the terms of use and privacy policy.</small>\n </p>\n </div>\n <lib-button \n [buttonClass]=\"btnClass\"\n [color]=\"btnColor\"\n [border]=\"btnBorder\"\n [borderRadius]=\"btnBorderRadius\"\n [bgColor]=\"btnBgColor\"\n [pd]=\"btnPd\"\n [text]=\"btnText\" \n type=\"submit\"\n [disabled]=\"!this.checkForm()\"\n [ngStyle]=\"{'margin-top':'10px'}\"\n ></lib-button>\n <verben-o-auth \n (googleClick)=\"handleGoogleAuth()\"\n (appleClick)=\"handleAppleAuth()\"\n ></verben-o-auth>\n <p>\n Already have an account?\n <a [routerLink]=\"routerLink\" class=\"\">Log in</a>\n </p>\n </form>\n </section>\n \n", styles: ["a{text-decoration:underline;cursor:pointer}input[type=checkbox]:checked{accent-color:#111}.flexWrapper{display:flex;flex-direction:column;gap:10px}.checkBoxWrapper{display:flex;align-items:start;gap:2px}.checBoxInput{margin-top:6px}.bigcheckboxWrapper{margin-top:.5rem;margin-bottom:1.5rem}.error-text{color:red}.disable-btn{cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "component", type: i2.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ButtonComponent, selector: "lib-button", inputs: ["text", "color", "border", "borderRadius", "bgColor", "width", "pd", "buttonClass", "disabled"], outputs: ["buttonClick"] }, { kind: "component", type: OAuthComponent, selector: "verben-o-auth", outputs: ["googleClick", "appleClick"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
832
- }
833
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignUpComponent, decorators: [{
834
- type: Component,
835
- args: [{ selector: 'verben-sign-up', template: "<section [ngStyle]=\"styles\" class=\"{{ customClass }}\">\n <h2 class=\"{{headlingClass}}\">\n {{headlingText}}\n </h2>\n <form [formGroup]=\"signUpForm\" (ngSubmit)=\"submit()\" class=\"flexWrapper\">\n <verbena-input\n [label]=\"'First name'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'text'\"\n formControlName=\"Firstname\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n [customErrorMessages]=\"{required:'First name is required'}\"\n ></verbena-input>\n <verbena-input\n [label]=\"'Last name'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'text'\"\n formControlName=\"Lastname\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n [customErrorMessages]=\"{required:'Last name is required'}\"\n ></verbena-input>\n <verbena-input\n [label]=\"'Email'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'email'\"\n formControlName=\"Email\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <verbena-input\n [label]=\"'Password'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'password'\"\n formControlName=\"Password\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n [passwordToggle]=\"true\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <div> \n <verbena-input\n [label]=\"'Confirm Password'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'password'\"\n formControlName=\"Confirmpassword\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"false\"\n [errorBorderColor]=\"'red'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <span *ngIf=\"signUpForm.hasError('passwordMismatch') && signUpForm.get('Confirmpassword')?.dirty\"> \n <small class=\"error-text\">Passwords do not match.</small>\n </span>\n </div>\n <div> \n <div class=\"checkBoxWrapper\">\n <input type=\"checkbox\" id=\"terms\" formControlName=\"Terms\" class=\"checBoxInput\" />\n <label for=\"terms\" \n class=\"break-all font-normal leading-6\"\n >By creating an account, I agree to our <a [attr.href]=\"termsLink\">Terms of use</a> and\n <a [attr.href]=\"privacyLink\">Privacy Policy</a></label\n >\n </div>\n <p *ngIf=\"signUpForm.controls['Terms'].invalid && signUpForm.controls['Terms'].touched\">\n <small class=\"error-text\">Please agree to the terms of use and privacy policy.</small>\n </p>\n </div>\n <lib-button \n [buttonClass]=\"btnClass\"\n [color]=\"btnColor\"\n [border]=\"btnBorder\"\n [borderRadius]=\"btnBorderRadius\"\n [bgColor]=\"btnBgColor\"\n [pd]=\"btnPd\"\n [text]=\"btnText\" \n type=\"submit\"\n [disabled]=\"!this.checkForm()\"\n [ngStyle]=\"{'margin-top':'10px'}\"\n ></lib-button>\n <verben-o-auth \n (googleClick)=\"handleGoogleAuth()\"\n (appleClick)=\"handleAppleAuth()\"\n ></verben-o-auth>\n <p>\n Already have an account?\n <a [routerLink]=\"routerLink\" class=\"\">Log in</a>\n </p>\n </form>\n </section>\n \n", styles: ["a{text-decoration:underline;cursor:pointer}input[type=checkbox]:checked{accent-color:#111}.flexWrapper{display:flex;flex-direction:column;gap:10px}.checkBoxWrapper{display:flex;align-items:start;gap:2px}.checBoxInput{margin-top:6px}.bigcheckboxWrapper{margin-top:.5rem;margin-bottom:1.5rem}.error-text{color:red}.disable-btn{cursor:not-allowed}\n"] }]
836
- }], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: HttpWebRequestService }, { type: UtilService }], propDecorators: { headlingText: [{
837
- type: Input
838
- }], width: [{
839
- type: Input
840
- }], maxWidth: [{
841
- type: Input
842
- }], margin: [{
843
- type: Input
844
- }], pd: [{
845
- type: Input
846
- }], customClass: [{
847
- type: Input
848
- }], headlingClass: [{
849
- type: Input
850
- }], bgColor: [{
851
- type: Input
852
- }], boxShadow: [{
853
- type: Input
854
- }], border: [{
855
- type: Input
856
- }], borderRadius: [{
857
- type: Input
858
- }], height: [{
859
- type: Input
860
- }], textColor: [{
861
- type: Input
862
- }], disabled: [{
863
- type: Input
864
- }], btnClass: [{
865
- type: Input
866
- }], btnBgColor: [{
867
- type: Input
868
- }], btnColor: [{
869
- type: Input
870
- }], btnBorder: [{
871
- type: Input
872
- }], btnBorderRadius: [{
873
- type: Input
874
- }], btnPd: [{
875
- type: Input
876
- }], btnText: [{
877
- type: Input
878
- }], inputLabelColor: [{
879
- type: Input
880
- }], inputBgColor: [{
881
- type: Input
882
- }], inputBorder: [{
883
- type: Input
884
- }], inputBorderRadius: [{
885
- type: Input
886
- }], termsLink: [{
887
- type: Input
888
- }], privacyLink: [{
889
- type: Input
890
- }], routerLink: [{
891
- type: Input
892
- }], formSubmit: [{
893
- type: Output
894
- }], onSubmitEnd: [{
895
- type: Output
896
- }], googleClick: [{
897
- type: Output
898
- }], appleClick: [{
899
- type: Output
900
- }] } });
901
-
902
- class OAuthModule {
903
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
904
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: OAuthModule, declarations: [OAuthComponent], imports: [CommonModule, VerbenaInputModule, VerbenaButtonModule], exports: [OAuthComponent] });
905
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OAuthModule, imports: [CommonModule, VerbenaInputModule, VerbenaButtonModule] });
906
- }
907
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OAuthModule, decorators: [{
908
- type: NgModule,
909
- args: [{
910
- declarations: [OAuthComponent],
911
- imports: [CommonModule, VerbenaInputModule, VerbenaButtonModule],
912
- exports: [OAuthComponent]
913
- }]
914
- }] });
915
-
916
- class ButtonModule {
917
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
918
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: ButtonModule, declarations: [ButtonComponent], imports: [CommonModule, VerbenaButtonModule, FormsModule], exports: [ButtonComponent] });
919
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ButtonModule, imports: [CommonModule, VerbenaButtonModule, FormsModule] });
920
- }
921
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ButtonModule, decorators: [{
922
- type: NgModule,
923
- args: [{
924
- declarations: [ButtonComponent],
925
- imports: [CommonModule, VerbenaButtonModule, FormsModule],
926
- exports: [ButtonComponent]
927
- }]
928
- }] });
929
-
930
- class SignUpModule {
931
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignUpModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
932
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: SignUpModule, declarations: [SignUpComponent], imports: [CommonModule, FormsModule, VerbenaInputModule, RouterLink, ButtonModule, OAuthModule, ReactiveFormsModule], exports: [SignUpComponent] });
933
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignUpModule, imports: [CommonModule, FormsModule, VerbenaInputModule, ButtonModule, OAuthModule, ReactiveFormsModule] });
934
- }
935
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignUpModule, decorators: [{
936
- type: NgModule,
937
- args: [{
938
- declarations: [SignUpComponent],
939
- imports: [CommonModule, FormsModule, VerbenaInputModule, RouterLink, ButtonModule, OAuthModule, ReactiveFormsModule],
940
- exports: [SignUpComponent]
941
- }]
942
- }] });
943
-
944
- class SignInComponent {
945
- fb;
946
- server;
947
- utilService;
948
- envSvc;
949
- headlingText = 'Sign in';
950
- width = '';
951
- maxWidth = '';
952
- margin = '';
953
- pd = '';
954
- customClass = '';
955
- headlingClass = '';
956
- bgColor = '#fff';
957
- boxShadow = '4px 4px 4px rgba(0, 0, 0, 0.25)';
958
- border = '1px solid #66666680';
959
- borderRadius = '24px';
960
- textColor = '#333';
961
- height = 'auto';
962
- forgetPasswordClass = '';
963
- requestAccessClass = '';
964
- createAccountClass = '';
965
- createAccountLinkClass = '';
966
- // links
967
- forgetPasswordLink = '';
968
- createAccountLink = '';
969
- requestAccessLink = '';
970
- // button styles
971
- btnClass = '';
972
- btnBgColor = '#FFE681';
973
- btnColor = '';
974
- btnBorder = '';
975
- btnBorderRadius = '24px';
976
- btnPd = '';
977
- btnText = 'Log in';
978
- //inputStyles
979
- inputLabelColor = '';
980
- inputBgColor = 'transparent';
981
- inputBorder = '1px solid #66666659';
982
- inputBorderRadius = '12px';
983
- termsErrorText = 'Please agree to the terms of use and privacy policy.';
984
- formSubmit = new EventEmitter();
985
- onSubmitEnd = new EventEmitter();
986
- googleClick = new EventEmitter();
987
- appleClick = new EventEmitter();
988
- tenantDetails = null;
989
- AuthMechanisms = null;
990
- loginForm;
991
- apiKey;
992
- secret;
993
- constructor(fb, server, utilService, envSvc) {
994
- this.fb = fb;
995
- this.server = server;
996
- this.utilService = utilService;
997
- this.envSvc = envSvc;
998
- this.loginForm = this.fb.group({
999
- Email: new FormControl(null, [
1000
- Validators.required,
1001
- Validators.email,
1002
- ]),
1003
- Password: new FormControl(null, [
1004
- Validators.required,
1005
- Validators.minLength(5),
1006
- ]),
1007
- });
1008
- this.apiKey = this.envSvc.environment.APIKey;
1009
- this.secret = this.envSvc.environment.Secret;
1010
- }
1011
- ngOnInit() {
1012
- this.getTenantConfig();
1013
- }
1014
- async getTenantConfig() {
1015
- const res = await this.server.get(`Tenant/GetTenantConfigByKey/${this.apiKey}`);
1016
- this.tenantDetails = res;
1017
- this.AuthMechanisms = this.tenantDetails?.AuthMechanisms;
1018
- }
1019
- checkForm() {
1020
- return this.loginForm.valid;
1021
- }
1022
- async submit() {
1023
- if (!this.checkForm()) {
1024
- return;
1025
- }
1026
- const data = {
1027
- MailAddress: this.loginForm.controls['Email'].value,
1028
- Password: this.loginForm.controls['Password'].value,
1029
- LoginType: this.tenantDetails?.AuthMechanism,
1030
- APIKey: this.apiKey,
1031
- Secrete: '$White360$'
1032
- };
1033
- this.formSubmit.emit(data);
1034
- this.utilService.sendBI(true);
1035
- const res = await this.server.post(`Authentication/Login`, data);
1036
- this.utilService.sendBI(false);
1037
- if (res instanceof ErrorResponse) {
1038
- this.onSubmitEnd.emit(res);
1039
- }
1040
- else {
1041
- var result = res;
1042
- this.onSubmitEnd.emit(result);
1043
- }
1044
- }
1045
- handleGoogleAuth() {
1046
- this.googleClick.emit();
1047
- }
1048
- handleAppleAuth() {
1049
- this.appleClick.emit();
1050
- }
1051
- get styles() {
1052
- return {
1053
- 'background-color': this.bgColor,
1054
- 'box-shadow': this.boxShadow,
1055
- 'border': this.border,
1056
- 'border-radius': this.borderRadius,
1057
- 'color': this.textColor,
1058
- 'width': this.width,
1059
- 'max-width': this.maxWidth,
1060
- 'margin': this.margin,
1061
- 'height': this.height,
1062
- 'padding': this.pd
1063
- };
1064
- }
1065
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignInComponent, deps: [{ token: i1$1.FormBuilder }, { token: HttpWebRequestService }, { token: UtilService }, { token: EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
1066
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SignInComponent, selector: "verben-sign-in", inputs: { headlingText: "headlingText", width: "width", maxWidth: "maxWidth", margin: "margin", pd: "pd", customClass: "customClass", headlingClass: "headlingClass", bgColor: "bgColor", boxShadow: "boxShadow", border: "border", borderRadius: "borderRadius", textColor: "textColor", height: "height", forgetPasswordClass: "forgetPasswordClass", requestAccessClass: "requestAccessClass", createAccountClass: "createAccountClass", createAccountLinkClass: "createAccountLinkClass", forgetPasswordLink: "forgetPasswordLink", createAccountLink: "createAccountLink", requestAccessLink: "requestAccessLink", btnClass: "btnClass", btnBgColor: "btnBgColor", btnColor: "btnColor", btnBorder: "btnBorder", btnBorderRadius: "btnBorderRadius", btnPd: "btnPd", btnText: "btnText", inputLabelColor: "inputLabelColor", inputBgColor: "inputBgColor", inputBorder: "inputBorder", inputBorderRadius: "inputBorderRadius", termsErrorText: "termsErrorText" }, outputs: { formSubmit: "formSubmit", onSubmitEnd: "onSubmitEnd", googleClick: "googleClick", appleClick: "appleClick" }, ngImport: i0, template: "<section\n[ngStyle]=\"styles\"\nclass=\"{{ customClass }}\"\n>\n <h2 class=\"{{headlingClass}}\">{{headlingText}}</h2>\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"submit()\" class=\"flexWrapper\"> \n <verbena-input\n [label]=\"'Email'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'email'\"\n formControlName=\"Email\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <div> \n <verbena-input\n [label]=\"'Password'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'password'\"\n formControlName=\"Password\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n [passwordToggle]=\"true\"\n [customErrorMessages]=\"{\n password:'length must be 5 characters'\n }\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <div class=\"pwdWrapper\"> \n <p clas=\"mb-0\"> <a [routerLink]=\"forgetPasswordLink\" class=\"{{forgetPasswordClass}}\">Forgot password</a></p>\n </div>\n </div>\n <div> \n <lib-button \n [buttonClass]=\"btnClass\"\n [color]=\"btnColor\"\n [border]=\"btnBorder\"\n [borderRadius]=\"btnBorderRadius\"\n [bgColor]=\"btnBgColor\"\n [pd]=\"btnPd\"\n [text]=\"btnText\" \n type=\"submit\" \n [disabled]=\"!this.checkForm()\"\n ></lib-button>\n <p *ngIf=\"requestAccessLink\">\n <a [routerLink]=\"requestAccessLink\" class=\"{{requestAccessClass}}\">Click here to request user access</a>\n </p>\n <div> \n <div *ngIf=\"this.AuthMechanisms !== null && this.AuthMechanisms.length\"> \n <verben-o-auth \n (googleClick)=\"handleGoogleAuth()\"\n (appleClick)=\"handleAppleAuth()\"\n ></verben-o-auth>\n </div>\n <p class=\"{{createAccountClass}}\" *ngIf=\"createAccountLink\">\n Don't have an account?\n <a [routerLink]=\"createAccountLink\" class=\"{{createAccountLinkClass}}\">Create an account</a>\n </p>\n </div>\n </div>\n </form>\n </section>\n ", styles: ["a{text-decoration:underline}.flexWrapper{display:flex;flex-direction:column;gap:20px;margin-top:12px}.pwdWrapper{display:flex;justify-content:flex-end;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "component", type: i2.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: OAuthComponent, selector: "verben-o-auth", outputs: ["googleClick", "appleClick"] }, { kind: "component", type: ButtonComponent, selector: "lib-button", inputs: ["text", "color", "border", "borderRadius", "bgColor", "width", "pd", "buttonClass", "disabled"], outputs: ["buttonClick"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
1067
- }
1068
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignInComponent, decorators: [{
1069
- type: Component,
1070
- args: [{ selector: 'verben-sign-in', template: "<section\n[ngStyle]=\"styles\"\nclass=\"{{ customClass }}\"\n>\n <h2 class=\"{{headlingClass}}\">{{headlingText}}</h2>\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"submit()\" class=\"flexWrapper\"> \n <verbena-input\n [label]=\"'Email'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'email'\"\n formControlName=\"Email\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <div> \n <verbena-input\n [label]=\"'Password'\"\n [labelColor]=\"inputLabelColor\"\n [placeHolder]=\"''\"\n [required]=\"true\"\n [type]=\"'password'\"\n formControlName=\"Password\"\n [showBorder]=\"true\"\n [bgColor]=\"inputBgColor\"\n [border]=\"inputBorder\"\n [borderRadius]=\"inputBorderRadius\"\n [showErrorMessage]=\"true\"\n [errorMessageColor]=\"'red'\"\n [errorBorderColor]=\"'red'\"\n [errorPosition]=\"'bottom'\"\n [passwordToggle]=\"true\"\n [customErrorMessages]=\"{\n password:'length must be 5 characters'\n }\"\n class=\"outline-none focus-none\"\n ></verbena-input>\n <div class=\"pwdWrapper\"> \n <p clas=\"mb-0\"> <a [routerLink]=\"forgetPasswordLink\" class=\"{{forgetPasswordClass}}\">Forgot password</a></p>\n </div>\n </div>\n <div> \n <lib-button \n [buttonClass]=\"btnClass\"\n [color]=\"btnColor\"\n [border]=\"btnBorder\"\n [borderRadius]=\"btnBorderRadius\"\n [bgColor]=\"btnBgColor\"\n [pd]=\"btnPd\"\n [text]=\"btnText\" \n type=\"submit\" \n [disabled]=\"!this.checkForm()\"\n ></lib-button>\n <p *ngIf=\"requestAccessLink\">\n <a [routerLink]=\"requestAccessLink\" class=\"{{requestAccessClass}}\">Click here to request user access</a>\n </p>\n <div> \n <div *ngIf=\"this.AuthMechanisms !== null && this.AuthMechanisms.length\"> \n <verben-o-auth \n (googleClick)=\"handleGoogleAuth()\"\n (appleClick)=\"handleAppleAuth()\"\n ></verben-o-auth>\n </div>\n <p class=\"{{createAccountClass}}\" *ngIf=\"createAccountLink\">\n Don't have an account?\n <a [routerLink]=\"createAccountLink\" class=\"{{createAccountLinkClass}}\">Create an account</a>\n </p>\n </div>\n </div>\n </form>\n </section>\n ", styles: ["a{text-decoration:underline}.flexWrapper{display:flex;flex-direction:column;gap:20px;margin-top:12px}.pwdWrapper{display:flex;justify-content:flex-end;cursor:pointer}\n"] }]
1071
- }], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: HttpWebRequestService }, { type: UtilService }, { type: EnvironmentService }], propDecorators: { headlingText: [{
1072
- type: Input
1073
- }], width: [{
1074
- type: Input
1075
- }], maxWidth: [{
1076
- type: Input
1077
- }], margin: [{
1078
- type: Input
1079
- }], pd: [{
1080
- type: Input
1081
- }], customClass: [{
1082
- type: Input
1083
- }], headlingClass: [{
1084
- type: Input
1085
- }], bgColor: [{
1086
- type: Input
1087
- }], boxShadow: [{
1088
- type: Input
1089
- }], border: [{
1090
- type: Input
1091
- }], borderRadius: [{
1092
- type: Input
1093
- }], textColor: [{
1094
- type: Input
1095
- }], height: [{
1096
- type: Input
1097
- }], forgetPasswordClass: [{
1098
- type: Input
1099
- }], requestAccessClass: [{
1100
- type: Input
1101
- }], createAccountClass: [{
1102
- type: Input
1103
- }], createAccountLinkClass: [{
1104
- type: Input
1105
- }], forgetPasswordLink: [{
1106
- type: Input
1107
- }], createAccountLink: [{
1108
- type: Input
1109
- }], requestAccessLink: [{
1110
- type: Input
1111
- }], btnClass: [{
1112
- type: Input
1113
- }], btnBgColor: [{
1114
- type: Input
1115
- }], btnColor: [{
1116
- type: Input
1117
- }], btnBorder: [{
1118
- type: Input
1119
- }], btnBorderRadius: [{
1120
- type: Input
1121
- }], btnPd: [{
1122
- type: Input
1123
- }], btnText: [{
1124
- type: Input
1125
- }], inputLabelColor: [{
1126
- type: Input
1127
- }], inputBgColor: [{
1128
- type: Input
1129
- }], inputBorder: [{
1130
- type: Input
1131
- }], inputBorderRadius: [{
1132
- type: Input
1133
- }], termsErrorText: [{
1134
- type: Input
1135
- }], formSubmit: [{
1136
- type: Output
1137
- }], onSubmitEnd: [{
1138
- type: Output
1139
- }], googleClick: [{
1140
- type: Output
1141
- }], appleClick: [{
1142
- type: Output
1143
- }] } });
1144
-
1145
- class SignInModule {
1146
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignInModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1147
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: SignInModule, declarations: [SignInComponent], imports: [CommonModule, FormsModule, VerbenaInputModule, VerbenaButtonModule, RouterLink, OAuthModule, ButtonModule, ReactiveFormsModule], exports: [SignInComponent] });
1148
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignInModule, imports: [CommonModule, FormsModule, VerbenaInputModule, VerbenaButtonModule, OAuthModule, ButtonModule, ReactiveFormsModule] });
1149
- }
1150
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SignInModule, decorators: [{
1151
- type: NgModule,
1152
- args: [{
1153
- declarations: [SignInComponent],
1154
- imports: [CommonModule, FormsModule, VerbenaInputModule, VerbenaButtonModule, RouterLink, OAuthModule, ButtonModule, ReactiveFormsModule],
1155
- exports: [SignInComponent]
1156
- }]
1157
- }] });
1158
-
1159
- class OtpInputComponent {
1160
- fb;
1161
- length = 6;
1162
- otpClass = '';
1163
- otpChange = new EventEmitter();
1164
- otpForm;
1165
- constructor(fb) {
1166
- this.fb = fb;
1167
- }
1168
- ngOnInit() {
1169
- this.otpForm = this.fb.group({
1170
- otpArray: this.fb.array(Array(this.length).fill('').map(() => new FormControl('')))
1171
- });
1172
- this.otpArray.valueChanges.subscribe(() => {
1173
- this.emitOtp();
1174
- });
1175
- }
1176
- get otpArray() {
1177
- return this.otpForm.get('otpArray');
1178
- }
1179
- handleInput(event, index) {
1180
- const value = event.target.value;
1181
- // /\d/.test(value)
1182
- if (value.length > 0) {
1183
- this.otpArray.at(index).setValue(value);
1184
- if (index < this.length - 1) {
1185
- this.focusNextInput(index);
1186
- }
1187
- }
1188
- else {
1189
- this.otpArray.at(index).setValue('');
1190
- }
1191
- }
1192
- handleKeydown(event, index) {
1193
- if (event.key === 'Backspace') {
1194
- const currentValue = this.otpArray.at(index).value;
1195
- if (currentValue) {
1196
- this.otpArray.at(index).setValue('');
1197
- }
1198
- else if (index > 0) {
1199
- this.focusPreviousInput(index);
1200
- }
1201
- }
1202
- }
1203
- focusNextInput(index) {
1204
- const nextInput = document.getElementById(`otp-input-${index + 1}`);
1205
- nextInput?.focus();
1206
- }
1207
- focusPreviousInput(index) {
1208
- const prevInput = document.getElementById(`otp-input-${index - 1}`);
1209
- prevInput?.focus();
1210
- }
1211
- emitOtp() {
1212
- const otp = this.otpArray.value.join('');
1213
- this.otpChange.emit(otp);
1214
- }
1215
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OtpInputComponent, deps: [{ token: i1$1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
1216
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OtpInputComponent, selector: "verben-otp-input", inputs: { length: "length", otpClass: "otpClass" }, outputs: { otpChange: "otpChange" }, ngImport: i0, template: "<form [formGroup]=\"otpForm\" >\n <div formArrayName=\"otpArray\" class=\"otp-container\">\n <input\n *ngFor=\"let control of otpArray.controls; let i = index\"\n [id]=\"'otp-input-' + i\"\n class=\"otp-input {{otpClass}}\"\n maxlength=\"1\"\n (input)=\"handleInput($event, i)\"\n (keydown)=\"handleKeydown($event, i)\"\n [formControlName]=\"i\"\n type=\"text\"\n />\n </div>\n</form>\n", styles: [".otp-container{display:flex;gap:15px}.otp-input{width:50px;height:46px;text-align:center;font-size:1.5rem;border:1px solid #66666658;border-radius:12px}.otp-input:focus{border-color:#ffe681;outline:none}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }] });
1217
- }
1218
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OtpInputComponent, decorators: [{
1219
- type: Component,
1220
- args: [{ selector: 'verben-otp-input', template: "<form [formGroup]=\"otpForm\" >\n <div formArrayName=\"otpArray\" class=\"otp-container\">\n <input\n *ngFor=\"let control of otpArray.controls; let i = index\"\n [id]=\"'otp-input-' + i\"\n class=\"otp-input {{otpClass}}\"\n maxlength=\"1\"\n (input)=\"handleInput($event, i)\"\n (keydown)=\"handleKeydown($event, i)\"\n [formControlName]=\"i\"\n type=\"text\"\n />\n </div>\n</form>\n", styles: [".otp-container{display:flex;gap:15px}.otp-input{width:50px;height:46px;text-align:center;font-size:1.5rem;border:1px solid #66666658;border-radius:12px}.otp-input:focus{border-color:#ffe681;outline:none}\n"] }]
1221
- }], ctorParameters: () => [{ type: i1$1.FormBuilder }], propDecorators: { length: [{
1222
- type: Input
1223
- }], otpClass: [{
1224
- type: Input
1225
- }], otpChange: [{
1226
- type: Output
1227
- }] } });
1228
-
1229
- class TwoFactorAuthOtpComponent {
1230
- fb;
1231
- server;
1232
- utilService;
1233
- customClass = '';
1234
- headlingClass = '';
1235
- headlingText = 'Two Factor Authentication';
1236
- paragraphClass = '';
1237
- resendClass = '';
1238
- width = '';
1239
- maxWidth = '';
1240
- margin = '';
1241
- pd = '';
1242
- bgColor = '#fff';
1243
- boxShadow = '4px 4px 4px rgba(0, 0, 0, 0.25)';
1244
- border = '1px solid #66666680';
1245
- borderRadius = '24px';
1246
- textColor = '#333';
1247
- height = 'auto';
1248
- length = 6;
1249
- otpClass = '';
1250
- User = {
1251
- Code: '024',
1252
- TenantId: '53b1c579bdf3de74f76bdac9',
1253
- Id: '53b1c579bdf3de74f76bdac9',
1254
- ServiceName: 'chinedu',
1255
- MailAddress: 'nwaekwuchinedu@gmail.com',
1256
- PhoneNumber: '070',
1257
- FirstName: 'nwaekwu',
1258
- LastName: 'chinedu',
1259
- OtherName: 'chinedu',
1260
- Role: [],
1261
- Tags: [
1262
- {
1263
- Name: "tester",
1264
- IsOptional: true
1265
- }
1266
- ],
1267
- Password: 'Default',
1268
- Status: 'Active',
1269
- CreatedAt: new Date(),
1270
- UpdatedAt: new Date(),
1271
- DataState: ObjectState.New
1272
- };
1273
- OtpData = {
1274
- User: this.User,
1275
- Token: '',
1276
- ValidateUrl: '',
1277
- Secret: '',
1278
- OTP: '',
1279
- Info: ''
1280
- };
1281
- btnClass = '';
1282
- btnBgColor = '#FFE681';
1283
- btnColor = '';
1284
- btnBorder = '';
1285
- btnBorderRadius = '24px';
1286
- btnPd = '';
1287
- btnText = 'Submit';
1288
- otpValue = '';
1289
- otpForm;
1290
- buttonClick = new EventEmitter();
1291
- otpChange = new EventEmitter();
1292
- onSubmitEnd = new EventEmitter();
1293
- resend = new EventEmitter();
1294
- constructor(fb, server, utilService) {
1295
- this.fb = fb;
1296
- this.server = server;
1297
- this.utilService = utilService;
1298
- }
1299
- ngOnInit() {
1300
- this.otpForm = this.fb.group({
1301
- otpValue: ['', [Validators.required, Validators.minLength(6)]]
1302
- });
1303
- }
1304
- onOtpChange(value) {
1305
- this.otpValue = value;
1306
- this.otpForm.get('otpValue')?.setValue(value);
1307
- this.otpChange.emit(this.otpValue);
1308
- }
1309
- async submitData() {
1310
- const data = {
1311
- User: {
1312
- ...this.User
1313
- },
1314
- Token: this.OtpData.Token,
1315
- ValidateUrl: this.OtpData.ValidateUrl,
1316
- Secret: this.OtpData.Secret,
1317
- OTP: this.OtpData.OTP,
1318
- Info: this.OtpData.Info,
1319
- };
1320
- if (this.otpForm.valid) {
1321
- // this.buttonClick.emit(this.otpForm.get('otpValue')?.value);
1322
- this.utilService.sendBI(true);
1323
- const res = await this.server.post(`Authentication/Validate`, data);
1324
- this.utilService.sendBI(false);
1325
- if (res instanceof ErrorResponse) {
1326
- this.onSubmitEnd.emit(res);
1327
- }
1328
- else {
1329
- var result = res;
1330
- this.onSubmitEnd.emit(result);
1331
- }
1332
- }
1333
- }
1334
- resendOtp() {
1335
- this.resend.emit();
1336
- }
1337
- get styles() {
1338
- return {
1339
- 'background-color': this.bgColor,
1340
- 'box-shadow': this.boxShadow,
1341
- 'border': this.border,
1342
- 'border-radius': this.borderRadius,
1343
- 'color': this.textColor,
1344
- 'width': this.width,
1345
- 'max-width': this.maxWidth,
1346
- 'margin': this.margin,
1347
- 'height': this.height,
1348
- 'padding': this.pd
1349
- };
1350
- }
1351
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoFactorAuthOtpComponent, deps: [{ token: i1$1.FormBuilder }, { token: HttpWebRequestService }, { token: UtilService }], target: i0.ɵɵFactoryTarget.Component });
1352
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TwoFactorAuthOtpComponent, selector: "verben-auth-otp", inputs: { customClass: "customClass", headlingClass: "headlingClass", headlingText: "headlingText", paragraphClass: "paragraphClass", resendClass: "resendClass", width: "width", maxWidth: "maxWidth", margin: "margin", pd: "pd", bgColor: "bgColor", boxShadow: "boxShadow", border: "border", borderRadius: "borderRadius", textColor: "textColor", height: "height", length: "length", otpClass: "otpClass", User: "User", OtpData: "OtpData", btnClass: "btnClass", btnBgColor: "btnBgColor", btnColor: "btnColor", btnBorder: "btnBorder", btnBorderRadius: "btnBorderRadius", btnPd: "btnPd", btnText: "btnText" }, outputs: { buttonClick: "buttonClick", otpChange: "otpChange", onSubmitEnd: "onSubmitEnd", resend: "resend" }, ngImport: i0, template: "<section\n[ngStyle]=\"styles\"\nclass=\"{{ customClass }}\"\n>\n <h3 class=\"{{headlingClass}}\">{{headlingText}}</h3>\n <div class=\"otpWrapper\"> \n <p class=\"{{paragraphClass}}\">Enter the {{length}} digit code sent to you</p>\n <verben-otp-input \n [length]=\"length\" \n (otpChange)=\"onOtpChange($event)\"\n [otpClass]=\"otpClass\"\n ></verben-otp-input>\n </div>\n <lib-button \n [buttonClass]=\"btnClass\"\n [color]=\"btnColor\"\n [border]=\"btnBorder\"\n [borderRadius]=\"btnBorderRadius\"\n [bgColor]=\"btnBgColor\"\n [pd]=\"btnPd\"\n [text]=\"btnText\" \n (buttonClick)=\"submitData()\"\n [disabled]=\"!otpForm.valid\"\n ></lib-button>\n <p class=\"resendWrapper\">\n Didn\u2019t get a code?\n <a class=\"{{resendClass}}\" (click)=\"resendOtp()\">Resend</a>\n </p>\n \n</section>", styles: [".otpWrapper{margin-bottom:20px;margin-top:15px}.resendWrapper{margin-top:10px;margin-bottom:0!important}\n"], dependencies: [{ kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ButtonComponent, selector: "lib-button", inputs: ["text", "color", "border", "borderRadius", "bgColor", "width", "pd", "buttonClass", "disabled"], outputs: ["buttonClick"] }, { kind: "component", type: OtpInputComponent, selector: "verben-otp-input", inputs: ["length", "otpClass"], outputs: ["otpChange"] }] });
1353
- }
1354
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoFactorAuthOtpComponent, decorators: [{
1355
- type: Component,
1356
- args: [{ selector: 'verben-auth-otp', template: "<section\n[ngStyle]=\"styles\"\nclass=\"{{ customClass }}\"\n>\n <h3 class=\"{{headlingClass}}\">{{headlingText}}</h3>\n <div class=\"otpWrapper\"> \n <p class=\"{{paragraphClass}}\">Enter the {{length}} digit code sent to you</p>\n <verben-otp-input \n [length]=\"length\" \n (otpChange)=\"onOtpChange($event)\"\n [otpClass]=\"otpClass\"\n ></verben-otp-input>\n </div>\n <lib-button \n [buttonClass]=\"btnClass\"\n [color]=\"btnColor\"\n [border]=\"btnBorder\"\n [borderRadius]=\"btnBorderRadius\"\n [bgColor]=\"btnBgColor\"\n [pd]=\"btnPd\"\n [text]=\"btnText\" \n (buttonClick)=\"submitData()\"\n [disabled]=\"!otpForm.valid\"\n ></lib-button>\n <p class=\"resendWrapper\">\n Didn\u2019t get a code?\n <a class=\"{{resendClass}}\" (click)=\"resendOtp()\">Resend</a>\n </p>\n \n</section>", styles: [".otpWrapper{margin-bottom:20px;margin-top:15px}.resendWrapper{margin-top:10px;margin-bottom:0!important}\n"] }]
1357
- }], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: HttpWebRequestService }, { type: UtilService }], propDecorators: { customClass: [{
1358
- type: Input
1359
- }], headlingClass: [{
1360
- type: Input
1361
- }], headlingText: [{
1362
- type: Input
1363
- }], paragraphClass: [{
1364
- type: Input
1365
- }], resendClass: [{
1366
- type: Input
1367
- }], width: [{
1368
- type: Input
1369
- }], maxWidth: [{
1370
- type: Input
1371
- }], margin: [{
1372
- type: Input
1373
- }], pd: [{
1374
- type: Input
1375
- }], bgColor: [{
1376
- type: Input
1377
- }], boxShadow: [{
1378
- type: Input
1379
- }], border: [{
1380
- type: Input
1381
- }], borderRadius: [{
1382
- type: Input
1383
- }], textColor: [{
1384
- type: Input
1385
- }], height: [{
1386
- type: Input
1387
- }], length: [{
1388
- type: Input
1389
- }], otpClass: [{
1390
- type: Input
1391
- }], User: [{
1392
- type: Input
1393
- }], OtpData: [{
1394
- type: Input
1395
- }], btnClass: [{
1396
- type: Input
1397
- }], btnBgColor: [{
1398
- type: Input
1399
- }], btnColor: [{
1400
- type: Input
1401
- }], btnBorder: [{
1402
- type: Input
1403
- }], btnBorderRadius: [{
1404
- type: Input
1405
- }], btnPd: [{
1406
- type: Input
1407
- }], btnText: [{
1408
- type: Input
1409
- }], buttonClick: [{
1410
- type: Output
1411
- }], otpChange: [{
1412
- type: Output
1413
- }], onSubmitEnd: [{
1414
- type: Output
1415
- }], resend: [{
1416
- type: Output
1417
- }] } });
1418
-
1419
- class OtpInputModule {
1420
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OtpInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1421
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: OtpInputModule, declarations: [OtpInputComponent], imports: [CommonModule, FormsModule, VerbenaInputModule, RouterLink, ButtonModule, OAuthModule, ReactiveFormsModule], exports: [OtpInputComponent] });
1422
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OtpInputModule, imports: [CommonModule, FormsModule, VerbenaInputModule, ButtonModule, OAuthModule, ReactiveFormsModule] });
1423
- }
1424
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OtpInputModule, decorators: [{
1425
- type: NgModule,
1426
- args: [{
1427
- declarations: [OtpInputComponent],
1428
- imports: [CommonModule, FormsModule, VerbenaInputModule, RouterLink, ButtonModule, OAuthModule, ReactiveFormsModule],
1429
- exports: [OtpInputComponent]
1430
- }]
1431
- }] });
1432
-
1433
- class TwoFactorAuthOtpModule {
1434
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoFactorAuthOtpModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1435
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TwoFactorAuthOtpModule, declarations: [TwoFactorAuthOtpComponent], imports: [CommonModule, ButtonModule, OtpInputModule, RouterLink, ReactiveFormsModule], exports: [TwoFactorAuthOtpComponent] });
1436
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoFactorAuthOtpModule, imports: [CommonModule, ButtonModule, OtpInputModule, ReactiveFormsModule] });
1437
- }
1438
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoFactorAuthOtpModule, decorators: [{
1439
- type: NgModule,
1440
- args: [{
1441
- declarations: [TwoFactorAuthOtpComponent],
1442
- imports: [CommonModule, ButtonModule, OtpInputModule, RouterLink, ReactiveFormsModule],
1443
- exports: [TwoFactorAuthOtpComponent]
1444
- }]
1445
- }] });
1446
-
1447
- class TwoFactorAuthSetupComponent {
1448
- customClass = '';
1449
- headlingClass = '';
1450
- headlingText = 'Set Up Two Factor Authentication';
1451
- paragraphClass = '';
1452
- buttonClass = '';
1453
- width = '';
1454
- maxWidth = '';
1455
- margin = '';
1456
- pd = '';
1457
- bgColor = '#fff';
1458
- boxShadow = '4px 4px 4px rgba(0, 0, 0, 0.25)';
1459
- border = '1px solid #66666680';
1460
- borderRadius = '24px';
1461
- textColor = '#333';
1462
- height = '';
1463
- smsClick = new EventEmitter();
1464
- mailClick = new EventEmitter();
1465
- skipClick = new EventEmitter();
1466
- continueWithSMS() {
1467
- this.smsClick.emit();
1468
- }
1469
- continueWithMail() {
1470
- this.mailClick.emit();
1471
- }
1472
- handleSkip() {
1473
- this.skipClick.emit();
1474
- }
1475
- get styles() {
1476
- return {
1477
- 'background-color': this.bgColor,
1478
- 'box-shadow': this.boxShadow,
1479
- 'border': this.border,
1480
- 'border-radius': this.borderRadius,
1481
- 'color': this.textColor,
1482
- 'width': this.width,
1483
- 'max-width': this.maxWidth,
1484
- 'margin': this.margin,
1485
- 'height': this.height,
1486
- 'padding': this.pd
1487
- };
1488
- }
1489
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoFactorAuthSetupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1490
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TwoFactorAuthSetupComponent, selector: "verben-two-factor-auth-setup", inputs: { customClass: "customClass", headlingClass: "headlingClass", headlingText: "headlingText", paragraphClass: "paragraphClass", buttonClass: "buttonClass", width: "width", maxWidth: "maxWidth", margin: "margin", pd: "pd", bgColor: "bgColor", boxShadow: "boxShadow", border: "border", borderRadius: "borderRadius", textColor: "textColor", height: "height" }, outputs: { smsClick: "smsClick", mailClick: "mailClick", skipClick: "skipClick" }, ngImport: i0, template: "<section\n[ngStyle]=\"styles\"\nclass=\"{{ customClass }}\"\n>\n <h3 class=\"{{headlingClass}}\">{{headlingText}}</h3>\n <div class=\"setUpBtnWrapper\">\n <verbena-button\n svg=\"2fa-mail\"\n [svgHeight]=\"16\"\n [svgWidth]=\"20\"\n text=\"Continue with Mail\"\n bgColor=\"white\"\n textColor=\"#333333\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mb-2\"\n (click)=\"continueWithMail()\"\n ></verbena-button>\n <verbena-button\n svg=\"2fa-sms\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with SMS\"\n bgColor=\"white\"\n textColor=\"#333333\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n (click)=\"continueWithSMS()\"\n ></verbena-button>\n <!-- <div class=\"iconWrapper\" (click)=\"handleSkip()\"> \n <p class=\"{{paragraphClass}}\">Skip for now</p>\n <verben-svg \n icon=\"skip-forward\"\n [height]=\"24\"\n [width]=\"24\"\n />\n </div> -->\n</div>\n</section>", styles: [".setUpBtnWrapper{display:flex;flex-direction:column;gap:12px;margin-top:40px}.iconWrapper{display:flex;cursor:pointer;align-items:center;justify-content:end;gap:12px;margin-bottom:50px}.custom-button{font-weight:500}\n"], dependencies: [{ kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }] });
1491
- }
1492
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoFactorAuthSetupComponent, decorators: [{
1493
- type: Component,
1494
- args: [{ selector: 'verben-two-factor-auth-setup', template: "<section\n[ngStyle]=\"styles\"\nclass=\"{{ customClass }}\"\n>\n <h3 class=\"{{headlingClass}}\">{{headlingText}}</h3>\n <div class=\"setUpBtnWrapper\">\n <verbena-button\n svg=\"2fa-mail\"\n [svgHeight]=\"16\"\n [svgWidth]=\"20\"\n text=\"Continue with Mail\"\n bgColor=\"white\"\n textColor=\"#333333\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n buttonClass=\"font-normal text-[24px] leading-[29.05px] text-[#333] mb-2\"\n (click)=\"continueWithMail()\"\n ></verbena-button>\n <verbena-button\n svg=\"2fa-sms\"\n [svgHeight]=\"24\"\n [svgWidth]=\"24\"\n text=\"Continue with SMS\"\n bgColor=\"white\"\n textColor=\"#333333\"\n border=\"1px solid #333\"\n borderRadius=\"40px\"\n pd=\"10px 20px\"\n width=\"100%\"\n svgPosition=\"left\"\n (click)=\"continueWithSMS()\"\n ></verbena-button>\n <!-- <div class=\"iconWrapper\" (click)=\"handleSkip()\"> \n <p class=\"{{paragraphClass}}\">Skip for now</p>\n <verben-svg \n icon=\"skip-forward\"\n [height]=\"24\"\n [width]=\"24\"\n />\n </div> -->\n</div>\n</section>", styles: [".setUpBtnWrapper{display:flex;flex-direction:column;gap:12px;margin-top:40px}.iconWrapper{display:flex;cursor:pointer;align-items:center;justify-content:end;gap:12px;margin-bottom:50px}.custom-button{font-weight:500}\n"] }]
1495
- }], propDecorators: { customClass: [{
1496
- type: Input
1497
- }], headlingClass: [{
1498
- type: Input
1499
- }], headlingText: [{
1500
- type: Input
1501
- }], paragraphClass: [{
1502
- type: Input
1503
- }], buttonClass: [{
1504
- type: Input
1505
- }], width: [{
1506
- type: Input
1507
- }], maxWidth: [{
1508
- type: Input
1509
- }], margin: [{
1510
- type: Input
1511
- }], pd: [{
1512
- type: Input
1513
- }], bgColor: [{
1514
- type: Input
1515
- }], boxShadow: [{
1516
- type: Input
1517
- }], border: [{
1518
- type: Input
1519
- }], borderRadius: [{
1520
- type: Input
1521
- }], textColor: [{
1522
- type: Input
1523
- }], height: [{
1524
- type: Input
1525
- }], smsClick: [{
1526
- type: Output
1527
- }], mailClick: [{
1528
- type: Output
1529
- }], skipClick: [{
1530
- type: Output
1531
- }] } });
1532
-
1533
- class TwoFactorAuthSetupModule {
1534
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoFactorAuthSetupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1535
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TwoFactorAuthSetupModule, declarations: [TwoFactorAuthSetupComponent], imports: [CommonModule, VerbenaButtonModule, SvgModule], exports: [TwoFactorAuthSetupComponent] });
1536
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoFactorAuthSetupModule, imports: [CommonModule, VerbenaButtonModule, SvgModule] });
1537
- }
1538
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TwoFactorAuthSetupModule, decorators: [{
1539
- type: NgModule,
1540
- args: [{
1541
- declarations: [TwoFactorAuthSetupComponent],
1542
- imports: [CommonModule, VerbenaButtonModule, SvgModule],
1543
- exports: [TwoFactorAuthSetupComponent]
1544
- }]
1545
- }] });
1546
-
1547
- class MailComponent {
1548
- customClass = '';
1549
- headlingClass = '';
1550
- width = '';
1551
- maxWidth = '';
1552
- margin = '';
1553
- pd = '';
1554
- bgColor = '#fff';
1555
- boxShadow = '4px 4px 4px rgba(0, 0, 0, 0.25)';
1556
- border = '1px solid #66666680';
1557
- borderRadius = '24px';
1558
- textColor = '#333';
1559
- height = 'auto';
1560
- buttonClick = new EventEmitter();
1561
- goToLogin() {
1562
- this.buttonClick.emit();
1563
- }
1564
- get styles() {
1565
- return {
1566
- 'background-color': this.bgColor,
1567
- 'box-shadow': this.boxShadow,
1568
- 'border': this.border,
1569
- 'border-radius': this.borderRadius,
1570
- 'color': this.textColor,
1571
- 'width': this.width,
1572
- 'max-width': this.maxWidth,
1573
- 'margin': this.margin,
1574
- 'height': this.height,
1575
- 'padding': this.pd
1576
- };
1577
- }
1578
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1579
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MailComponent, selector: "verben-mail-message", inputs: { customClass: "customClass", headlingClass: "headlingClass", width: "width", maxWidth: "maxWidth", margin: "margin", pd: "pd", bgColor: "bgColor", boxShadow: "boxShadow", border: "border", borderRadius: "borderRadius", textColor: "textColor", height: "height" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<section\n[ngStyle]=\"styles\"\nclass=\"{{ customClass }}\"\n>\n <h3 class=\"{{headlingClass}}\">Your e-mail has been verified!</h3>\n <lib-button \n text=\"Login\" \n buttonClass=\"\"\n (click)=\"goToLogin()\"\n ></lib-button> \n</section>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ButtonComponent, selector: "lib-button", inputs: ["text", "color", "border", "borderRadius", "bgColor", "width", "pd", "buttonClass", "disabled"], outputs: ["buttonClick"] }] });
1580
- }
1581
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MailComponent, decorators: [{
1582
- type: Component,
1583
- args: [{ selector: 'verben-mail-message', template: "<section\n[ngStyle]=\"styles\"\nclass=\"{{ customClass }}\"\n>\n <h3 class=\"{{headlingClass}}\">Your e-mail has been verified!</h3>\n <lib-button \n text=\"Login\" \n buttonClass=\"\"\n (click)=\"goToLogin()\"\n ></lib-button> \n</section>\n" }]
1584
- }], propDecorators: { customClass: [{
1585
- type: Input
1586
- }], headlingClass: [{
1587
- type: Input
1588
- }], width: [{
1589
- type: Input
1590
- }], maxWidth: [{
1591
- type: Input
1592
- }], margin: [{
1593
- type: Input
1594
- }], pd: [{
1595
- type: Input
1596
- }], bgColor: [{
1597
- type: Input
1598
- }], boxShadow: [{
1599
- type: Input
1600
- }], border: [{
1601
- type: Input
1602
- }], borderRadius: [{
1603
- type: Input
1604
- }], textColor: [{
1605
- type: Input
1606
- }], height: [{
1607
- type: Input
1608
- }], buttonClick: [{
1609
- type: Output
1610
- }] } });
1611
-
1612
- class MailModule {
1613
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MailModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1614
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: MailModule, declarations: [MailComponent], imports: [CommonModule, FormsModule, RouterLink, ButtonModule], exports: [MailComponent] });
1615
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MailModule, imports: [CommonModule, FormsModule, ButtonModule] });
1616
- }
1617
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MailModule, decorators: [{
1618
- type: NgModule,
1619
- args: [{
1620
- declarations: [MailComponent],
1621
- imports: [CommonModule, FormsModule, RouterLink, ButtonModule],
1622
- exports: [MailComponent]
1623
- }]
1624
- }] });
1625
-
1626
- class ForgotPasswordComponent {
1627
- fb;
1628
- server;
1629
- utilService;
1630
- title = 'Forgot Password';
1631
- subTitle = 'Enter the e-mail you used during registration';
1632
- buttonCaption = 'Submit';
1633
- buttonTextColor;
1634
- buttonBackgroundColor;
1635
- onSubmit = new EventEmitter();
1636
- onSubmitEnd = new EventEmitter();
1637
- forgotPasswordForm;
1638
- constructor(fb, server, utilService) {
1639
- this.fb = fb;
1640
- this.server = server;
1641
- this.utilService = utilService;
1642
- this.forgotPasswordForm = this.fb.group({
1643
- Email: new FormControl(null, [
1644
- Validators.required,
1645
- this.emailValidator.bind(this),
1646
- ]),
1647
- });
1648
- }
1649
- isValidEmail(mail) {
1650
- const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
1651
- return emailPattern.test(mail);
1652
- }
1653
- emailValidator(control) {
1654
- const value = control.value;
1655
- if (this.isValidEmail(value) == false) {
1656
- return { customValidation: true };
1657
- }
1658
- return null;
1659
- }
1660
- checkForm() {
1661
- return this.forgotPasswordForm.valid;
1662
- }
1663
- async submit() {
1664
- if (!this.checkForm()) {
1665
- return;
1666
- }
1667
- var data = {
1668
- Email: this.forgotPasswordForm.controls['Email'].value,
1669
- };
1670
- this.onSubmit.emit(data);
1671
- this.utilService.sendBI(true);
1672
- const res = await this.server.get(`User/PasswordChangeRequest/${data.Email}`);
1673
- this.utilService.sendBI(false);
1674
- if (res instanceof ErrorResponse) {
1675
- this.onSubmitEnd.emit(res);
1676
- }
1677
- else {
1678
- var result = res;
1679
- this.onSubmitEnd.emit(result);
1680
- }
1681
- }
1682
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ForgotPasswordComponent, deps: [{ token: i1$1.FormBuilder }, { token: HttpWebRequestService }, { token: UtilService }], target: i0.ɵɵFactoryTarget.Component });
1683
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ForgotPasswordComponent, selector: "verben-forgot-password", inputs: { title: "title", subTitle: "subTitle", buttonCaption: "buttonCaption", buttonTextColor: "buttonTextColor", buttonBackgroundColor: "buttonBackgroundColor" }, outputs: { onSubmit: "onSubmit", onSubmitEnd: "onSubmitEnd" }, ngImport: i0, template: "<div [formGroup]=\"this.forgotPasswordForm\" class=\"reset-password-container flex flex-col\">\n <div class=\"reset-password-header flex flex-col\">\n <div class=\"reset-password-title\">{{title}}</div>\n <div class=\"reset-password-subtitle\">{{subTitle}}</div>\n </div>\n <div class=\"form-field flex flex-col\">\n <div class=\"form-field-caption\">Email</div>\n <verbena-input bgColor=\"white\" borderRadius=\"12px\" formControlName=\"Email\" type=\"email\"></verbena-input>\n </div>\n <verbena-button fontWeight=\"700\" (click)=\"submit()\" [text]=\"buttonCaption\" width=\"100%\" [textColor]=\"buttonTextColor\"\n [bgColor]=\"buttonBackgroundColor\" borderRadius=\"25px\" [disable]=\"!this.checkForm()\"></verbena-button>\n\n</div>\n", styles: ["*{font-family:sans-serif;font-size:16px}.flex{display:flex}.flex-col{flex-direction:column}.font-bold{font-weight:700}.justify-center{justify-content:center}.justify-end{justify-content:end}.align-items-center{align-items:center}.grid{display:grid}.verben-error-message{font-size:.8rem;color:red}.verben-input{border:1px solid #cbd5e1;outline:none;border-radius:5px;color:#334155;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s,outline-color .2s}.verben-input::placeholder{color:#64748b}.verben-input:hover{border:1px solid #697e97}.verben-input.disabled{opacity:1;background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));pointer-events:none;color:#64748b}.verben-input:disabled{opacity:1;background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));pointer-events:none;color:#64748b}.verben-input.focused{border-color:#3b82f6;outline:none}.verben-input:focus{border-color:#3b82f6;outline:none}.verben-input.ng-invalid{border-color:red}.verben-button{padding:8px 15px;border-radius:4px;border:none;text-align:center}.verben-button.primary{background-color:#ffe681}.verben-button.secondary{background-color:#d9d9d940}.reset-password-container{gap:25px;padding:50px;border:1px solid rgba(102,102,102,.5);box-shadow:4px 4px 4px #00000040;border-radius:24px}.reset-password-title{font-size:30px;font-weight:700}.reset-password-subtitle{font-size:14px;font-weight:500;color:#666}.form-field{gap:5px}.form-field-caption{color:#666}\n"], dependencies: [{ kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i2.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }] });
1684
- }
1685
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ForgotPasswordComponent, decorators: [{
1686
- type: Component,
1687
- args: [{ selector: 'verben-forgot-password', template: "<div [formGroup]=\"this.forgotPasswordForm\" class=\"reset-password-container flex flex-col\">\n <div class=\"reset-password-header flex flex-col\">\n <div class=\"reset-password-title\">{{title}}</div>\n <div class=\"reset-password-subtitle\">{{subTitle}}</div>\n </div>\n <div class=\"form-field flex flex-col\">\n <div class=\"form-field-caption\">Email</div>\n <verbena-input bgColor=\"white\" borderRadius=\"12px\" formControlName=\"Email\" type=\"email\"></verbena-input>\n </div>\n <verbena-button fontWeight=\"700\" (click)=\"submit()\" [text]=\"buttonCaption\" width=\"100%\" [textColor]=\"buttonTextColor\"\n [bgColor]=\"buttonBackgroundColor\" borderRadius=\"25px\" [disable]=\"!this.checkForm()\"></verbena-button>\n\n</div>\n", styles: ["*{font-family:sans-serif;font-size:16px}.flex{display:flex}.flex-col{flex-direction:column}.font-bold{font-weight:700}.justify-center{justify-content:center}.justify-end{justify-content:end}.align-items-center{align-items:center}.grid{display:grid}.verben-error-message{font-size:.8rem;color:red}.verben-input{border:1px solid #cbd5e1;outline:none;border-radius:5px;color:#334155;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s,outline-color .2s}.verben-input::placeholder{color:#64748b}.verben-input:hover{border:1px solid #697e97}.verben-input.disabled{opacity:1;background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));pointer-events:none;color:#64748b}.verben-input:disabled{opacity:1;background-color:light-dark(rgba(239,239,239,.3),rgba(59,59,59,.3));pointer-events:none;color:#64748b}.verben-input.focused{border-color:#3b82f6;outline:none}.verben-input:focus{border-color:#3b82f6;outline:none}.verben-input.ng-invalid{border-color:red}.verben-button{padding:8px 15px;border-radius:4px;border:none;text-align:center}.verben-button.primary{background-color:#ffe681}.verben-button.secondary{background-color:#d9d9d940}.reset-password-container{gap:25px;padding:50px;border:1px solid rgba(102,102,102,.5);box-shadow:4px 4px 4px #00000040;border-radius:24px}.reset-password-title{font-size:30px;font-weight:700}.reset-password-subtitle{font-size:14px;font-weight:500;color:#666}.form-field{gap:5px}.form-field-caption{color:#666}\n"] }]
1688
- }], ctorParameters: () => [{ type: i1$1.FormBuilder }, { type: HttpWebRequestService }, { type: UtilService }], propDecorators: { title: [{
1689
- type: Input
1690
- }], subTitle: [{
1691
- type: Input
1692
- }], buttonCaption: [{
1693
- type: Input
1694
- }], buttonTextColor: [{
1695
- type: Input
1696
- }], buttonBackgroundColor: [{
1697
- type: Input
1698
- }], onSubmit: [{
1699
- type: Output
1700
- }], onSubmitEnd: [{
1701
- type: Output
1702
- }] } });
1703
-
1704
- class ForgotPasswordModule {
1705
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ForgotPasswordModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1706
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: ForgotPasswordModule, declarations: [ForgotPasswordComponent], imports: [FormsModule,
1707
- ReactiveFormsModule,
1708
- VerbenaInputModule,
1709
- VerbenaButtonModule,
1710
- CommonModule], exports: [ForgotPasswordComponent] });
1711
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ForgotPasswordModule, imports: [FormsModule,
1712
- ReactiveFormsModule,
1713
- VerbenaInputModule,
1714
- VerbenaButtonModule,
1715
- CommonModule] });
1716
- }
1717
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ForgotPasswordModule, decorators: [{
1718
- type: NgModule,
1719
- args: [{
1720
- declarations: [ForgotPasswordComponent],
1721
- imports: [
1722
- FormsModule,
1723
- ReactiveFormsModule,
1724
- VerbenaInputModule,
1725
- VerbenaButtonModule,
1726
- CommonModule,
1727
- ],
1728
- exports: [ForgotPasswordComponent],
1729
- }]
1730
- }] });
1731
-
1732
- const columns$2 = [
1733
- {
1734
- id: 'createdAt',
1735
- header: 'Created',
1736
- accessorKey: 'CreatedAt',
1737
- },
1738
- {
1739
- id: 'name',
1740
- header: 'Name',
1741
- accessorKey: 'Name',
1742
- },
1743
- {
1744
- id: 'description',
1745
- header: 'Description',
1746
- accessorKey: 'Description',
1747
- },
1748
- {
1749
- id: 'link',
1750
- header: 'Link',
1751
- accessorKey: 'Link',
1752
- },
1753
- {
1754
- id: 'logo',
1755
- header: 'Logo',
1756
- accessorKey: 'Logo',
1757
- },
1758
- { id: 'actions', header: 'Actions', accessorKey: 'Name' },
1759
- ];
1760
-
1761
- const mockData$2 = new Array(10).fill(1).map((id, i) => ({
1762
- Name: `Name ${id + i}`,
1763
- Id: id,
1764
- id: id.toString(),
1765
- Description: `Sign in option ${id + i}`,
1766
- Logo: `./assets/images/test-logo.png`,
1767
- Link: `Link ${id + i}`,
1768
- CreatedAt: new Date(),
1769
- UpdatedAt: new Date(),
1770
- DataState: ObjectState.New,
1771
- Tenant: `Tenant ${id + i}`,
1772
- }));
1773
-
1774
- const baseStyle$2 = {
1775
- width: '100%',
1776
- fontFamily: '"Fraunces", serif',
1777
- fontSize: '125%',
1778
- whiteSpace: 'nowrap',
1779
- margin: '0',
1780
- border: '1px solid #D4A007',
1781
- borderRadius: '16px',
1782
- borderCollapse: 'separate',
1783
- borderSpacing: '0',
1784
- tableLayout: 'fixed',
1785
- overflow: 'hidden',
1786
- rows: {
1787
- even: {
1788
- backgroundColor: '#FDFDFD',
1789
- },
1790
- odd: {
1791
- backgroundColor: '#F1F4FB',
1792
- },
1793
- height: '68px',
1794
- },
1795
- cells: {
1796
- padding: '0.5rem 1rem',
1797
- },
1798
- header: {
1799
- stickyTop: true,
1800
- zIndex: 2,
1801
- backgroundColor: '#EFF2FB',
1802
- fontWeight: 'bold',
1803
- textAlign: 'left',
1804
- padding: '12px 16px',
1805
- height: '40px',
1806
- },
1807
- footer: {
1808
- stickyBottom: true,
1809
- zIndex: 2,
1810
- padding: '3px',
1811
- },
1812
- // body: {
1813
- // background: '#fff',
1814
- // padding: '4px 5px',
1815
- // textAlign: 'center',
1816
- // },
1817
- // firstColumn: {
1818
- // stickyLeft: true,
1819
- // zIndex: 1,
1820
- // },
1821
- lastColumn: {
1822
- stickyRight: true,
1823
- zIndex: 1,
1824
- },
1825
- };
1826
-
1827
- class SsoFormComponent {
1828
- fb;
1829
- isUploading = false;
1830
- uploadedFileName = null;
1831
- fileUploadError = null;
1832
- currentData = null;
1833
- switchView = new EventEmitter();
1834
- form;
1835
- constructor(fb) {
1836
- this.fb = fb;
1837
- this.form = this.fb.group({
1838
- Description: [''],
1839
- Name: [''],
1840
- Link: [''],
1841
- Logo: [''],
1842
- });
1843
- }
1844
- ngOnInit() { }
1845
- onSave() {
1846
- if (this.form.valid) {
1847
- // Emit save event with form value
1848
- console.log('Form saved:', this.form.value);
1849
- }
1850
- }
1851
- onDelete() {
1852
- // Emit delete event
1853
- console.log('Delete requested');
1854
- }
1855
- onFileSelected(event) {
1856
- const input = event.target;
1857
- if (input.files && input.files.length > 0) {
1858
- const file = input.files[0];
1859
- this.fileUploadError = null;
1860
- if (!file) {
1861
- this.isUploading = true;
1862
- }
1863
- if (file.size > 5000000) {
1864
- this.fileUploadError = 'File size exceeds 5MB limit.';
1865
- this.uploadedFileName = null;
1866
- this.isUploading = false; // Reset isUploading state
1867
- }
1868
- else {
1869
- this.uploadedFileName = file.name;
1870
- }
1871
- }
1872
- else {
1873
- this.isUploading = false;
1874
- }
1875
- }
1876
- removeFile() {
1877
- this.uploadedFileName = null;
1878
- this.fileUploadError = null;
1879
- const fileInput = document.getElementById('attachment');
1880
- if (fileInput) {
1881
- fileInput.value = '';
1882
- }
1883
- }
1884
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SsoFormComponent, deps: [{ token: i1$1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
1885
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SsoFormComponent, selector: "lib-sso-form", inputs: { currentData: "currentData" }, outputs: { switchView: "switchView" }, ngImport: i0, template: "<form\n [formGroup]=\"form\"\n class=\"flex flex-col px-3 pb-3 rounded-xl h-full w-full relative\"\n>\n <verbena-input\n name=\"Name\"\n label=\"Name:\"\n formControlName=\"Name\"\n [(ngModel)]=\"currentData?.data.Name\"\n />\n <verbena-input\n label=\"Description:\"\n name=\"Description\"\n formControlName=\"Description\"\n [(ngModel)]=\"currentData?.data.Description\"\n />\n <verbena-input\n label=\"Link:\"\n name=\"Link\"\n formControlName=\"Link\"\n [(ngModel)]=\"currentData?.data.Link\"\n/>\n<span class=\"block my-2 \">Logo</span>\n<label [style.background-color]=\"'#f9f9f9'\" class=\"border cursor-pointer border-secondary-200 rounded-md w-full px-4 py-2 flex justify-between\">\n <span *ngIf=\"!uploadedFileName\">{{isUploading?\"uploading...\":\"Upload a photo\"}}</span>\n <span *ngIf=\"fileUploadError\" class=\"error\">{{ fileUploadError }}</span>\n <div *ngIf=\"uploadedFileName\" class=\"flex items-center text-sm gap-2 border border-primary rounded-lg px-3 \">\n <span>{{ uploadedFileName }}</span>\n <button\n [style.color]=\"'black'\"\n type=\"button\"\n (click)=\"removeFile()\"\n >\n &#x2715;\n </button>\n </div>\n <input\n id=\"logo\"\n[type]=\"'file'\"\n label=\"Logo:\"\n name=\"Logo\"\n accept=\"image/png\"\n formControlName=\"Logo\"\n (change)=\"onFileSelected($event)\"\n formControlName=\"Logo\"\n/>\n<span class=\"flex gap-2\">\n<span class=\"bg-primary flex icon-container rounded-md justify-center items-center\">\n <img src=\"./assets/icons/cam.png\" class=\"icon-width\"/>\n</span>\n<span class=\"bg-primary flex icon-container rounded-md justify-center items-center\">\n <img src=\"./assets/icons/file.png\" class=\"icon-width2\"/>\n</span>\n</span>\n</label>\n\n <!-- buttons -->\n <div\n class=\"flex justify-between bottom-8 left-0 right-0 px-3 pb-2 absolute\"\n style=\"\n display: flex;\n justify-content: space-between;\n position: absolute;\n padding: 8px 12px;\n right: 0;\n left: 0;\n bottom: 32;\n \"\n >\n <!-- <verbena-button\n text=\"Delete\"\n class=\"bg-secondary-200 text-[black]\"\n (click)=\"onDelete()\"\n />\n <verbena-button\n text=\"Save\"\n class=\"bg-primary text-[black]\"\n (click)=\"onSave()\"\n />\n\n <verbena-button\n text=\"Secondary Button\"\n styleType=\"secondary\"\n ></verbena-button> -->\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n [bgColor]=\"'#999999'\"\n [textColor]=\"'#404040'\"\n borderRadius=\"10px\"\n ></verbena-button>\n <verbena-button\n (click)=\"switchView.emit()\"\n text=\"Switch To Table\"\n styleType=\"ylw-outline\"\n ></verbena-button>\n <verbena-button\n text=\"Save\"\n bgColor=\"#28a745\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n [bgColor]=\"'#FFE681'\"\n width=\"114px\"\n height=\"39px\"\n ></verbena-button>\n </div>\n</form>\n", styles: ["#logo{display:none}.icon-width{width:20px}.icon-width2{width:15px}.icon-container{width:30px;height:30px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i2.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }] });
1886
- }
1887
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SsoFormComponent, decorators: [{
1888
- type: Component,
1889
- args: [{ selector: 'lib-sso-form', template: "<form\n [formGroup]=\"form\"\n class=\"flex flex-col px-3 pb-3 rounded-xl h-full w-full relative\"\n>\n <verbena-input\n name=\"Name\"\n label=\"Name:\"\n formControlName=\"Name\"\n [(ngModel)]=\"currentData?.data.Name\"\n />\n <verbena-input\n label=\"Description:\"\n name=\"Description\"\n formControlName=\"Description\"\n [(ngModel)]=\"currentData?.data.Description\"\n />\n <verbena-input\n label=\"Link:\"\n name=\"Link\"\n formControlName=\"Link\"\n [(ngModel)]=\"currentData?.data.Link\"\n/>\n<span class=\"block my-2 \">Logo</span>\n<label [style.background-color]=\"'#f9f9f9'\" class=\"border cursor-pointer border-secondary-200 rounded-md w-full px-4 py-2 flex justify-between\">\n <span *ngIf=\"!uploadedFileName\">{{isUploading?\"uploading...\":\"Upload a photo\"}}</span>\n <span *ngIf=\"fileUploadError\" class=\"error\">{{ fileUploadError }}</span>\n <div *ngIf=\"uploadedFileName\" class=\"flex items-center text-sm gap-2 border border-primary rounded-lg px-3 \">\n <span>{{ uploadedFileName }}</span>\n <button\n [style.color]=\"'black'\"\n type=\"button\"\n (click)=\"removeFile()\"\n >\n &#x2715;\n </button>\n </div>\n <input\n id=\"logo\"\n[type]=\"'file'\"\n label=\"Logo:\"\n name=\"Logo\"\n accept=\"image/png\"\n formControlName=\"Logo\"\n (change)=\"onFileSelected($event)\"\n formControlName=\"Logo\"\n/>\n<span class=\"flex gap-2\">\n<span class=\"bg-primary flex icon-container rounded-md justify-center items-center\">\n <img src=\"./assets/icons/cam.png\" class=\"icon-width\"/>\n</span>\n<span class=\"bg-primary flex icon-container rounded-md justify-center items-center\">\n <img src=\"./assets/icons/file.png\" class=\"icon-width2\"/>\n</span>\n</span>\n</label>\n\n <!-- buttons -->\n <div\n class=\"flex justify-between bottom-8 left-0 right-0 px-3 pb-2 absolute\"\n style=\"\n display: flex;\n justify-content: space-between;\n position: absolute;\n padding: 8px 12px;\n right: 0;\n left: 0;\n bottom: 32;\n \"\n >\n <!-- <verbena-button\n text=\"Delete\"\n class=\"bg-secondary-200 text-[black]\"\n (click)=\"onDelete()\"\n />\n <verbena-button\n text=\"Save\"\n class=\"bg-primary text-[black]\"\n (click)=\"onSave()\"\n />\n\n <verbena-button\n text=\"Secondary Button\"\n styleType=\"secondary\"\n ></verbena-button> -->\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n [bgColor]=\"'#999999'\"\n [textColor]=\"'#404040'\"\n borderRadius=\"10px\"\n ></verbena-button>\n <verbena-button\n (click)=\"switchView.emit()\"\n text=\"Switch To Table\"\n styleType=\"ylw-outline\"\n ></verbena-button>\n <verbena-button\n text=\"Save\"\n bgColor=\"#28a745\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n [bgColor]=\"'#FFE681'\"\n width=\"114px\"\n height=\"39px\"\n ></verbena-button>\n </div>\n</form>\n", styles: ["#logo{display:none}.icon-width{width:20px}.icon-width2{width:15px}.icon-container{width:30px;height:30px}\n"] }]
1890
- }], ctorParameters: () => [{ type: i1$1.FormBuilder }], propDecorators: { currentData: [{
1891
- type: Input
1892
- }], switchView: [{
1893
- type: Output
1894
- }] } });
1895
-
1896
- class SsoComponent {
1897
- cardDataView;
1898
- dataView;
1899
- columns = columns$2;
1900
- data = mockData$2;
1901
- styles = baseStyle$2;
1902
- currentData = null;
1903
- isGridView = true;
1904
- selected = null;
1905
- cardData = mockData$2.map(({ Name, Description, Link, Logo }) => ({
1906
- selected: false,
1907
- title: Name,
1908
- data: { Name, Description, Link, Logo },
1909
- body: [
1910
- { title: 'Description', value: Description ?? '' },
1911
- ],
1912
- children: [],
1913
- }));
1914
- openDetailView(name) {
1915
- const cardItem = this.getCardDataByMailAddress(name);
1916
- if (cardItem && this.cardDataView) {
1917
- this.dataView.toggleView();
1918
- this.cardData.forEach((item) => {
1919
- item.selected = false;
1920
- if (item.children) {
1921
- item.children.forEach((child) => (child.selected = false));
1922
- }
1923
- });
1924
- cardItem.selected = true;
1925
- this.currentData = this.cardDataView.onItemClick(cardItem);
1926
- }
1927
- }
1928
- getCardDataByMailAddress(name) {
1929
- return this.cardData.find(({ data }) => data.Name === name);
1930
- }
1931
- onViewChange(isGridView) {
1932
- isGridView = isGridView;
1933
- if (this.currentData) {
1934
- this.cardDataView?.clearData();
1935
- this.currentData = null;
1936
- }
1937
- if (this.selected) {
1938
- this.cardDataView.onItemClick(this.selected);
1939
- }
1940
- }
1941
- openFormView(index) {
1942
- const item = this.cardData[index];
1943
- console.log('ITEM = ', item);
1944
- }
1945
- handleExport(exportedData) {
1946
- console.log('Exported data:', exportedData);
1947
- this.downloadCSV(exportedData);
1948
- }
1949
- /**
1950
- *
1951
- * @param data Simple csv export for testing
1952
- */
1953
- downloadCSV(data) {
1954
- const headers = Object.keys(data[0]);
1955
- const csvContent = [
1956
- headers.join(','),
1957
- ...data.map((row) => headers.map((header) => row[header]).join(',')),
1958
- ].join('\n');
1959
- const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
1960
- const link = document.createElement('a');
1961
- if (link.download !== undefined) {
1962
- const url = URL.createObjectURL(blob);
1963
- link.setAttribute('href', url);
1964
- link.setAttribute('download', 'export.csv');
1965
- link.style.visibility = 'hidden';
1966
- document.body.appendChild(link);
1967
- link.click();
1968
- document.body.removeChild(link);
1969
- }
1970
- }
1971
- onSelectionChange(selectedRows) {
1972
- console.log('Selection changed:', selectedRows);
1973
- // Handle the selection change
1974
- }
1975
- /**
1976
- * Copied over from card view doc until I understand usage
1977
- */
1978
- selectedColumnCount = 0;
1979
- selectedFilterTableCount = 0;
1980
- isOPen = true;
1981
- selectedSortCount = 0;
1982
- showColumn = false;
1983
- showSort = false;
1984
- selectedAll = false;
1985
- visibleColumns = columns$2.map((col) => ({
1986
- checked: false,
1987
- name: typeof col.header === 'string' ? col.header : col.id,
1988
- type: DataFilterType.Bool,
1989
- }));
1990
- filterArray = [
1991
- {
1992
- name: 'Name',
1993
- type: DataFilterType.String,
1994
- checked: false,
1995
- },
1996
- {
1997
- name: 'Description',
1998
- type: DataFilterType.String,
1999
- checked: false,
2000
- },
2001
- {
2002
- name: 'Logo',
2003
- type: DataFilterType.String,
2004
- checked: false,
2005
- },
2006
- {
2007
- name: 'Link',
2008
- type: DataFilterType.String,
2009
- checked: false,
2010
- },
2011
- {
2012
- name: 'CreatedAt',
2013
- type: DataFilterType.Date,
2014
- checked: false,
2015
- },
2016
- ];
2017
- sortOptions = [
2018
- {
2019
- name: 'Name',
2020
- type: DataFilterType.String,
2021
- checked: false,
2022
- },
2023
- {
2024
- name: 'Description',
2025
- type: DataFilterType.String,
2026
- checked: false,
2027
- },
2028
- {
2029
- name: 'Link',
2030
- type: DataFilterType.String,
2031
- checked: false,
2032
- },
2033
- {
2034
- name: 'Logo',
2035
- type: DataFilterType.String,
2036
- checked: false,
2037
- },
2038
- {
2039
- name: 'CreatedAt',
2040
- type: DataFilterType.Date,
2041
- checked: false,
2042
- },
2043
- ];
2044
- clearData() {
2045
- this.currentData = {};
2046
- }
2047
- loadMore() {
2048
- this.cardData = this.cardData.concat(this.cardData);
2049
- }
2050
- onColumnChange(event) {
2051
- this.showColumn = event;
2052
- }
2053
- onSortChange(event) {
2054
- this.showSort = event;
2055
- console.log(event);
2056
- }
2057
- onColumnsUpdated(updatedColumns) {
2058
- this.onColumnChange(false);
2059
- console.log(updatedColumns);
2060
- this.selectedColumnCount = updatedColumns.length;
2061
- }
2062
- onSortUpdated(updatedSorts) {
2063
- this.onSortChange(false);
2064
- this.selectedSortCount = updatedSorts.length;
2065
- console.log(updatedSorts);
2066
- }
2067
- onStateChange(event) {
2068
- console.log(`State changed for ${event.key}:`, event.value);
2069
- }
2070
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SsoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2071
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SsoComponent, selector: "lib-sso", viewQueries: [{ propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }], ngImport: i0, template: "<div class=\"space-y-8\">\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 isToggle:true\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n [cardIcon]=\"'list-view'\"\n [tableIcon]=\"'table-view'\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div table-content>\n <lib-data-table\n [data]=\"data\"\n [columns]=\"columns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"logo\">\n <ng-template #cell let-value>\n <img class=\"logo-width\" [src]=\"value\"/>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value let-deleteRow let-rowIndex>\n <div class=\"flex space-x-8\" style=\"display: flex; gap: 24px\">\n <verben-svg\n (click)=\"openDetailView(value)\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n class=\"cursor-pointer\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\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 </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"Link\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n >\n <verben-left-card-data-view class=\"\">\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"Link\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData\"\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 pr-1 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 flex-col py-2 px-4 w-full\">\n <div class=\"flex\">\n <span class=\"font-bold text-sm\">{{ item.data.Name }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"flex items-center justify-between gap-2\">\n <div>\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black text-xs font-semibold\">{{ item.data.Description }}</span>\n </div>\n <img class=\"logo-width\" [alt]=\"ciItem.title\" [src]=\"item.data.Logo\"/>\n </div>\n }\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 <lib-sso-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n ></lib-sso-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"float-right\">\n <div class=\"flex gap-2 mt-1\">\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more\">Load more</button>\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 ></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 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 [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n</div>\n", styles: [".flex{display:flex}.w-full{width:100%}.bg-secondary-200{background-color:#e8eaf1}.flex-col{flex-direction:column}.items-center{align-items:center}.bg-primary{background-color:#d4a007}.border-primary{border:1px solid #d4a007}.rounded-lg{border-radius:20px}.w-3{width:6px}.rounded-tr-none{border-top-right-radius:0}.rounded-br-none{border-bottom-right-radius:0}.bg-secondary-100{background-color:#8080800e}.bg-secondary{background-color:#e8eaf1}.p-2{padding:6px}.logo-width{width:70px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "exportCustomClass", "selectCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "columnTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "showColumnChild", "showSortChild", "showFilterChild", "showExportChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i2.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied"] }, { kind: "component", type: i2.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"] }, { kind: "component", type: i2.DataExportComponent, selector: "lib-data-export", inputs: ["data"], outputs: ["exportDataEvent"] }, { kind: "component", type: i2.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"] }, { kind: "component", type: i2.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: i2.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i2.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i2.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i2.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i2.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "size"] }, { kind: "component", type: i2.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i2.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: SsoFormComponent, selector: "lib-sso-form", inputs: ["currentData"], outputs: ["switchView"] }, { kind: "pipe", type: i1$2.DatePipe, name: "date" }] });
2072
- }
2073
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SsoComponent, decorators: [{
2074
- type: Component,
2075
- args: [{ selector: 'lib-sso', template: "<div class=\"space-y-8\">\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 isToggle:true\n }\"\n [buttonClass]=\"'my-custom-button-class'\"\n [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\"\n [selectedColumnCount]=\"0\"\n [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n [cardIcon]=\"'list-view'\"\n [tableIcon]=\"'table-view'\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div table-content>\n <lib-data-table\n [data]=\"data\"\n [columns]=\"columns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"logo\">\n <ng-template #cell let-value>\n <img class=\"logo-width\" [src]=\"value\"/>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-value let-deleteRow let-rowIndex>\n <div class=\"flex space-x-8\" style=\"display: flex; gap: 24px\">\n <verben-svg\n (click)=\"openDetailView(value)\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n class=\"cursor-pointer\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\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 </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view\n borderRadius=\"12px\"\n (loadMoreClick)=\"loadMore()\"\n #vdcv\n dataId=\"Link\"\n border=\"5px\"\n [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\"\n >\n <verben-left-card-data-view class=\"\">\n <verben-left-card-data\n #vlcd\n [parent]=\"vdcv\"\n dataId=\"Link\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\"\n [cardDataList]=\"cardData\"\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 pr-1 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 flex-col py-2 px-4 w-full\">\n <div class=\"flex\">\n <span class=\"font-bold text-sm\">{{ item.data.Name }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"flex items-center justify-between gap-2\">\n <div>\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black text-xs font-semibold\">{{ item.data.Description }}</span>\n </div>\n <img class=\"logo-width\" [alt]=\"ciItem.title\" [src]=\"item.data.Logo\"/>\n </div>\n }\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 <lib-sso-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n ></lib-sso-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"float-right\">\n <div class=\"flex gap-2 mt-1\">\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more\">Load more</button>\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 ></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 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 [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n</div>\n", styles: [".flex{display:flex}.w-full{width:100%}.bg-secondary-200{background-color:#e8eaf1}.flex-col{flex-direction:column}.items-center{align-items:center}.bg-primary{background-color:#d4a007}.border-primary{border:1px solid #d4a007}.rounded-lg{border-radius:20px}.w-3{width:6px}.rounded-tr-none{border-top-right-radius:0}.rounded-br-none{border-bottom-right-radius:0}.bg-secondary-100{background-color:#8080800e}.bg-secondary{background-color:#e8eaf1}.p-2{padding:6px}.logo-width{width:70px}\n"] }]
2076
- }], propDecorators: { cardDataView: [{
2077
- type: ViewChild,
2078
- args: ['vdcv']
2079
- }], dataView: [{
2080
- type: ViewChild,
2081
- args: ['vdv']
2082
- }] } });
2083
-
2084
- class SsoModule {
2085
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SsoModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2086
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: SsoModule, declarations: [SsoComponent, SsoFormComponent], imports: [CommonModule,
2087
- FormsModule,
2088
- ReactiveFormsModule,
2089
- DataViewModule,
2090
- TableFilterModule,
2091
- SortTableModule,
2092
- DataExportModule,
2093
- VisibleColumnModule,
2094
- VerbenaButtonModule,
2095
- CardDataViewModule,
2096
- VerbenaInputModule,
2097
- SvgModule,
2098
- VerbenaTextareaModule,
2099
- DataTableModule], exports: [SsoComponent] });
2100
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SsoModule, imports: [CommonModule,
2101
- FormsModule,
2102
- ReactiveFormsModule,
2103
- DataViewModule,
2104
- TableFilterModule,
2105
- SortTableModule,
2106
- DataExportModule,
2107
- VisibleColumnModule,
2108
- VerbenaButtonModule,
2109
- CardDataViewModule,
2110
- VerbenaInputModule,
2111
- SvgModule,
2112
- VerbenaTextareaModule,
2113
- DataTableModule] });
2114
- }
2115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SsoModule, decorators: [{
2116
- type: NgModule,
2117
- args: [{
2118
- declarations: [SsoComponent, SsoFormComponent],
2119
- imports: [
2120
- CommonModule,
2121
- FormsModule,
2122
- ReactiveFormsModule,
2123
- DataViewModule,
2124
- TableFilterModule,
2125
- SortTableModule,
2126
- DataExportModule,
2127
- VisibleColumnModule,
2128
- VerbenaButtonModule,
2129
- CardDataViewModule,
2130
- VerbenaInputModule,
2131
- SvgModule,
2132
- VerbenaTextareaModule,
2133
- DataTableModule,
2134
- ],
2135
- exports: [SsoComponent],
2136
- }]
2137
- }] });
2138
-
2139
- const columns$1 = [
2140
- {
2141
- id: 'createdAt',
2142
- header: 'Created',
2143
- accessorKey: 'CreatedAt',
2144
- },
2145
- {
2146
- id: 'user',
2147
- header: 'Name',
2148
- accessorFn: (row) => `${row.FirstName} ${row.LastName}`,
2149
- },
2150
- {
2151
- id: 'mail',
2152
- header: 'E-Mail',
2153
- accessorKey: 'MailAddress',
2154
- },
2155
- {
2156
- id: 'phone',
2157
- header: 'Phone Number',
2158
- accessorKey: 'PhoneNumber',
2159
- },
2160
- { id: 'actions', header: 'Actions', accessorKey: 'MailAddress' },
2161
- ];
2162
-
2163
- const baseStyle$1 = {
2164
- width: '100%',
2165
- fontFamily: '"Fraunces", serif',
2166
- fontSize: '125%',
2167
- whiteSpace: 'nowrap',
2168
- margin: '0',
2169
- border: '1px solid #D4A007',
2170
- borderRadius: '16px',
2171
- borderCollapse: 'separate',
2172
- borderSpacing: '0',
2173
- tableLayout: 'fixed',
2174
- overflow: 'hidden',
2175
- rows: {
2176
- even: {
2177
- backgroundColor: '#FDFDFD',
2178
- },
2179
- odd: {
2180
- backgroundColor: '#F1F4FB',
2181
- },
2182
- height: '68px',
2183
- },
2184
- cells: {
2185
- padding: '0.5rem 1rem',
2186
- },
2187
- header: {
2188
- // stickyTop: true,
2189
- // zIndex: 2,
2190
- backgroundColor: '#EFF2FB',
2191
- fontWeight: 'bold',
2192
- textAlign: 'left',
2193
- padding: '12px 16px',
2194
- height: '40px',
2195
- },
2196
- footer: {
2197
- // stickyBottom: true,
2198
- // zIndex: 2,
2199
- padding: '3px',
2200
- },
2201
- // body: {
2202
- // background: '#fff',
2203
- // padding: '4px 5px',
2204
- // textAlign: 'center',
2205
- // },
2206
- // firstColumn: {
2207
- // stickyLeft: true,
2208
- // zIndex: 1,
2209
- // },
2210
- lastColumn: {
2211
- // stickyRight: true,
2212
- // zIndex: 1,
2213
- },
2214
- };
2215
-
2216
- class UserAccessRequestService {
2217
- httpService;
2218
- BASE_URL = 'User';
2219
- constructor(httpService) {
2220
- this.httpService = httpService;
2221
- }
2222
- /**
2223
- * Get user access requests with pagination and sorting
2224
- * @param skip Number of records to skip
2225
- * @param limit Number of records to take
2226
- * @param sortParam Sort parameter
2227
- * @param sortOrder Sort order ('asc' or 'desc')
2228
- * @returns Promise containing the user access requests
2229
- */
2230
- getUserAccessRequests(skip, limit, sortParam, sortOrder) {
2231
- const url = `${this.BASE_URL}/GetUserAccessRequests/${skip}/${limit}/${sortParam}/${sortOrder}`;
2232
- return this.httpService.get(url);
2233
- }
2234
- /**
2235
- * Get user access requests with additional parameter, pagination and sorting
2236
- * @param param Search parameter
2237
- * @param skip Number of records to skip
2238
- * @param limit Number of records to take
2239
- * @param sortParam Sort parameter
2240
- * @param sortOrder Sort order ('asc' or 'desc')
2241
- * @returns Promise containing the filtered user access requests
2242
- */
2243
- getUserAccessRequestWithParam(param, skip, limit, sortParam, sortOrder) {
2244
- const url = `${this.BASE_URL}/GetUserAccessRequestWithParam/${param}/${skip}/${limit}/${sortParam}/${sortOrder}`;
2245
- return this.httpService.get(url);
2246
- }
2247
- /**
2248
- * Save multiple user access requests
2249
- * @param requests Array of user access requests to save
2250
- * @returns Promise containing the save operation result
2251
- */
2252
- saveUserAccessRequests(requests) {
2253
- const url = `${this.BASE_URL}/SaveUserAccessRequests`;
2254
- return this.httpService.post(url, requests);
2255
- }
2256
- /**
2257
- * Approve or reject multiple user access requests
2258
- * @param requests Array of user access requests to save
2259
- * @param isApproval True for approval, false for decline
2260
- * @returns Promise containing the save operation result
2261
- */
2262
- processUserAccessRequests(requests, isApproval) {
2263
- const url = `${this.BASE_URL}/UserAccessRequestAction/${isApproval}`;
2264
- return this.httpService.post(url, requests);
2265
- }
2266
- /**
2267
- * Delete multiple user access requests
2268
- * @param requestIds Array of request IDs to delete
2269
- * @returns Observable containing the delete operation result
2270
- */
2271
- deleteUserAccessRequests(requestIds) {
2272
- const url = `${this.BASE_URL}/DeleteUserAccessRequests`;
2273
- return this.httpService.delete(`${url}?data=${requestIds.join(',')}`);
2274
- }
2275
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserAccessRequestService, deps: [{ token: HttpWebRequestService }], target: i0.ɵɵFactoryTarget.Injectable });
2276
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserAccessRequestService, providedIn: 'root' });
2277
- }
2278
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserAccessRequestService, decorators: [{
2279
- type: Injectable,
2280
- args: [{
2281
- providedIn: 'root',
2282
- }]
2283
- }], ctorParameters: () => [{ type: HttpWebRequestService }] });
2284
-
2285
- class UserAccessRequestState {
2286
- updating$ = new BehaviorSubject(false);
2287
- requests$ = new BehaviorSubject([]);
2288
- queryParams$ = new BehaviorSubject({
2289
- skip: 0,
2290
- limit: 10,
2291
- sortParam: 'CreatedAt',
2292
- sortOrder: 'asc',
2293
- });
2294
- isUpdating$() {
2295
- return this.updating$.asObservable();
2296
- }
2297
- setUpdating(isUpdating) {
2298
- this.updating$.next(isUpdating);
2299
- }
2300
- getRequests$() {
2301
- return this.requests$.asObservable();
2302
- }
2303
- setRequests(requests) {
2304
- this.requests$.next(requests);
2305
- }
2306
- getQueryParams$() {
2307
- return this.queryParams$.asObservable();
2308
- }
2309
- getQueryParamsValue() {
2310
- return this.queryParams$.getValue();
2311
- }
2312
- updateQueryParams(params) {
2313
- this.queryParams$.next({ ...this.queryParams$.getValue(), ...params });
2314
- }
2315
- addRequest(request) {
2316
- const currentValue = this.requests$.getValue();
2317
- this.requests$.next([...currentValue, request]);
2318
- }
2319
- updateRequest(updatedRequest) {
2320
- const requests = this.requests$.getValue();
2321
- const index = requests.findIndex((r) => r.Id === updatedRequest.Id);
2322
- if (index !== -1) {
2323
- requests[index] = updatedRequest;
2324
- this.requests$.next([...requests]);
2325
- }
2326
- }
2327
- removeRequest(requestId) {
2328
- const currentValue = this.requests$.getValue();
2329
- this.requests$.next(currentValue.filter((r) => r.Id !== requestId));
2330
- }
2331
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserAccessRequestState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2332
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserAccessRequestState, providedIn: 'root' });
2333
- }
2334
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserAccessRequestState, decorators: [{
2335
- type: Injectable,
2336
- args: [{
2337
- providedIn: 'root',
2338
- }]
2339
- }] });
2340
-
2341
- class UserAccessRequestFacade {
2342
- userAccessRequestService;
2343
- userAccessRequestState;
2344
- constructor(userAccessRequestService, userAccessRequestState) {
2345
- this.userAccessRequestService = userAccessRequestService;
2346
- this.userAccessRequestState = userAccessRequestState;
2347
- }
2348
- isUpdating$() {
2349
- return this.userAccessRequestState.isUpdating$();
2350
- }
2351
- getRequests$() {
2352
- return this.userAccessRequestState.getRequests$();
2353
- }
2354
- getQueryParams$() {
2355
- return this.userAccessRequestState.getQueryParams$();
2356
- }
2357
- async loadRequests() {
2358
- try {
2359
- this.userAccessRequestState.setUpdating(true);
2360
- const params = this.userAccessRequestState.getQueryParamsValue();
2361
- const requests = await this.userAccessRequestService.getUserAccessRequests(params.skip, params.limit, params.sortParam || 'createdDate', params.sortOrder);
2362
- this.userAccessRequestState.setRequests(requests.Result);
2363
- }
2364
- catch (error) {
2365
- console.error('Failed to load requests:', error);
2366
- throw error;
2367
- }
2368
- finally {
2369
- this.userAccessRequestState.setUpdating(false);
2370
- }
2371
- }
2372
- async loadRequestsWithParam(param) {
2373
- try {
2374
- this.userAccessRequestState.setUpdating(true);
2375
- const params = this.userAccessRequestState.getQueryParamsValue();
2376
- const requests = await this.userAccessRequestService.getUserAccessRequestWithParam(param, params.skip, params.limit, params.sortParam || 'createdDate', params.sortOrder);
2377
- this.userAccessRequestState.setRequests(requests.Result);
2378
- }
2379
- catch (error) {
2380
- console.error('Failed to load requests with param:', error);
2381
- throw error;
2382
- }
2383
- finally {
2384
- this.userAccessRequestState.setUpdating(false);
2385
- }
2386
- }
2387
- updateQueryParams(params) {
2388
- this.userAccessRequestState.updateQueryParams(params);
2389
- this.loadRequests();
2390
- }
2391
- async addRequest(request) {
2392
- try {
2393
- this.userAccessRequestState.setUpdating(true);
2394
- const newRequest = { ...request };
2395
- this.userAccessRequestState.addRequest(newRequest);
2396
- await this.userAccessRequestService.saveUserAccessRequests([newRequest]);
2397
- await this.loadRequests(); // Reload to get server-side changes
2398
- }
2399
- catch (error) {
2400
- console.error('Failed to add request:', error);
2401
- this.userAccessRequestState.removeRequest(request.Id);
2402
- throw error;
2403
- }
2404
- finally {
2405
- this.userAccessRequestState.setUpdating(false);
2406
- }
2407
- }
2408
- async updateRequest(request) {
2409
- try {
2410
- this.userAccessRequestState.setUpdating(true);
2411
- await this.userAccessRequestService.saveUserAccessRequests([request]);
2412
- this.userAccessRequestState.updateRequest(request);
2413
- }
2414
- catch (error) {
2415
- console.error('Failed to update request:', error);
2416
- throw error;
2417
- }
2418
- finally {
2419
- this.userAccessRequestState.setUpdating(false);
2420
- }
2421
- }
2422
- async deleteRequest(requestId) {
2423
- try {
2424
- this.userAccessRequestState.setUpdating(true);
2425
- await lastValueFrom(this.userAccessRequestService.deleteUserAccessRequests([requestId]));
2426
- this.userAccessRequestState.removeRequest(requestId);
2427
- }
2428
- catch (error) {
2429
- console.error('Failed to delete request:', error);
2430
- throw error;
2431
- }
2432
- finally {
2433
- this.userAccessRequestState.setUpdating(false);
2434
- }
2435
- }
2436
- async approveRequest(request) {
2437
- try {
2438
- this.userAccessRequestState.setUpdating(true);
2439
- const response = await this.userAccessRequestService.processUserAccessRequests([request], true);
2440
- // console.log(response);
2441
- const data = response?.[0];
2442
- if (data) {
2443
- this.userAccessRequestState.updateRequest(data);
2444
- }
2445
- }
2446
- catch (error) {
2447
- console.error('Failed to update request:', error);
2448
- throw error;
2449
- }
2450
- finally {
2451
- this.userAccessRequestState.setUpdating(false);
2452
- }
2453
- }
2454
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserAccessRequestFacade, deps: [{ token: UserAccessRequestService }, { token: UserAccessRequestState }], target: i0.ɵɵFactoryTarget.Injectable });
2455
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserAccessRequestFacade, providedIn: 'root' });
2456
- }
2457
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserAccessRequestFacade, decorators: [{
2458
- type: Injectable,
2459
- args: [{
2460
- providedIn: 'root',
2461
- }]
2462
- }], ctorParameters: () => [{ type: UserAccessRequestService }, { type: UserAccessRequestState }] });
2463
-
2464
- class UserRequestFormComponent {
2465
- fb;
2466
- set currentData(value) {
2467
- if (value?.data) {
2468
- this.form.patchValue({
2469
- MailAddress: value.data.MailAddress || '',
2470
- FirstName: value.data.FirstName || '',
2471
- LastName: value.data.LastName || '',
2472
- OtherName: value.data.OtherName || '',
2473
- PhoneNumber: value.data.PhoneNumber || '',
2474
- });
2475
- }
2476
- else {
2477
- this.form.reset();
2478
- }
2479
- }
2480
- switchView = new EventEmitter();
2481
- onApproval = new EventEmitter();
2482
- form;
2483
- roles = [
2484
- { id: 'admin', name: 'Admin' },
2485
- { id: 'manager', name: 'Manager' },
2486
- { id: 'staff', name: 'Staff' },
2487
- ];
2488
- constructor(fb) {
2489
- this.fb = fb;
2490
- this.form = this.fb.group({
2491
- MailAddress: ['', { readonly: true }],
2492
- FirstName: ['', { readonly: true }],
2493
- LastName: ['', { readonly: true }],
2494
- OtherName: ['', { readonly: true }],
2495
- PhoneNumber: ['', { readonly: true }],
2496
- RoleId: [''],
2497
- });
2498
- }
2499
- ngOnInit() { }
2500
- onSave() {
2501
- if (this.form.valid) {
2502
- // Emit save event with form value
2503
- console.log('Form saved:', this.form.value);
2504
- }
2505
- }
2506
- onDelete() {
2507
- // Emit delete event
2508
- console.log('Delete requested');
2509
- }
2510
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRequestFormComponent, deps: [{ token: i1$1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
2511
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserRequestFormComponent, selector: "lib-user-request-form", inputs: { currentData: "currentData" }, outputs: { switchView: "switchView", onApproval: "onApproval" }, ngImport: i0, template: "<form\n [formGroup]=\"form\"\n class=\"flex flex-col px-3 pb-3 rounded-xl h-full w-full relative space-y-4\"\n>\n <verbena-input\n name=\"MailAddress\"\n label=\"Mail Address:\"\n formControlName=\"MailAddress\"\n />\n <verbena-input\n label=\"First Name:\"\n name=\"FirstName\"\n type=\"text\"\n formControlName=\"FirstName\"\n />\n <verbena-input\n label=\"Last Name:\"\n name=\"LastName\"\n type=\"text\"\n formControlName=\"LastName\"\n />\n <verbena-input\n label=\"OtherName:\"\n name=\"OtherName\"\n type=\"text\"\n formControlName=\"OtherName\"\n />\n <verbena-input\n label=\"Phone Number:\"\n name=\"PhoneNumber\"\n type=\"tel\"\n formControlName=\"PhoneNumber\"\n />\n\n <div class=\"space-y-1\">\n <label for=\"role\">Role</label>\n\n <verben-drop-down\n label=\"Role\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"\"\n [(options)]=\"roles\"\n id=\"role\"\n optionLabel=\"name\"\n optionValue=\"id\"\n formControlName=\"RoleId\"\n class=\"form-control\"\n >\n </verben-drop-down>\n </div>\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0 px-3 pb-2\">\n <!-- <verbena-button\n text=\"Delete\"\n class=\"bg-secondary-200 text-[black]\"\n (click)=\"onDelete()\"\n />\n <verbena-button\n text=\"Save\"\n class=\"bg-primary text-[black]\"\n (click)=\"onSave()\"\n />\n\n <verbena-button\n text=\"Secondary Button\"\n styleType=\"secondary\"\n ></verbena-button> -->\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Reject\"\n styleType=\"danger\"\n borderRadius=\"10px\"\n ></verbena-button>\n <verbena-button\n (click)=\"switchView.emit()\"\n text=\"Switch To Table\"\n styleType=\"ylw-outline\"\n ></verbena-button>\n <verbena-button\n (click)=\"onApproval.emit(form.get('MailAddress')?.value)\"\n text=\"Approve\"\n bgColor=\"#28a745\"\n textColor=\"white\"\n border=\"1px solid #28a745\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n ></verbena-button>\n </div>\n</form>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i2.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i2.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }] });
2512
- }
2513
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRequestFormComponent, decorators: [{
2514
- type: Component,
2515
- args: [{ selector: 'lib-user-request-form', template: "<form\n [formGroup]=\"form\"\n class=\"flex flex-col px-3 pb-3 rounded-xl h-full w-full relative space-y-4\"\n>\n <verbena-input\n name=\"MailAddress\"\n label=\"Mail Address:\"\n formControlName=\"MailAddress\"\n />\n <verbena-input\n label=\"First Name:\"\n name=\"FirstName\"\n type=\"text\"\n formControlName=\"FirstName\"\n />\n <verbena-input\n label=\"Last Name:\"\n name=\"LastName\"\n type=\"text\"\n formControlName=\"LastName\"\n />\n <verbena-input\n label=\"OtherName:\"\n name=\"OtherName\"\n type=\"text\"\n formControlName=\"OtherName\"\n />\n <verbena-input\n label=\"Phone Number:\"\n name=\"PhoneNumber\"\n type=\"tel\"\n formControlName=\"PhoneNumber\"\n />\n\n <div class=\"space-y-1\">\n <label for=\"role\">Role</label>\n\n <verben-drop-down\n label=\"Role\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"\"\n [(options)]=\"roles\"\n id=\"role\"\n optionLabel=\"name\"\n optionValue=\"id\"\n formControlName=\"RoleId\"\n class=\"form-control\"\n >\n </verben-drop-down>\n </div>\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0 px-3 pb-2\">\n <!-- <verbena-button\n text=\"Delete\"\n class=\"bg-secondary-200 text-[black]\"\n (click)=\"onDelete()\"\n />\n <verbena-button\n text=\"Save\"\n class=\"bg-primary text-[black]\"\n (click)=\"onSave()\"\n />\n\n <verbena-button\n text=\"Secondary Button\"\n styleType=\"secondary\"\n ></verbena-button> -->\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Reject\"\n styleType=\"danger\"\n borderRadius=\"10px\"\n ></verbena-button>\n <verbena-button\n (click)=\"switchView.emit()\"\n text=\"Switch To Table\"\n styleType=\"ylw-outline\"\n ></verbena-button>\n <verbena-button\n (click)=\"onApproval.emit(form.get('MailAddress')?.value)\"\n text=\"Approve\"\n bgColor=\"#28a745\"\n textColor=\"white\"\n border=\"1px solid #28a745\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n ></verbena-button>\n </div>\n</form>\n" }]
2516
- }], ctorParameters: () => [{ type: i1$1.FormBuilder }], propDecorators: { currentData: [{
2517
- type: Input
2518
- }], switchView: [{
2519
- type: Output
2520
- }], onApproval: [{
2521
- type: Output
2522
- }] } });
2523
-
2524
- var UserAccessRequestStatus;
2525
- (function (UserAccessRequestStatus) {
2526
- UserAccessRequestStatus["Pending"] = "Pending";
2527
- UserAccessRequestStatus["Approved"] = "Approved";
2528
- UserAccessRequestStatus["Declined"] = "Declined";
2529
- })(UserAccessRequestStatus || (UserAccessRequestStatus = {}));
2530
-
2531
- class UserAccessRequestStatusBadgeComponent {
2532
- status = UserAccessRequestStatus.Pending;
2533
- badgeConfig() {
2534
- switch (this.status) {
2535
- case UserAccessRequestStatus.Approved:
2536
- return { bgColor: '#CAE1CC', textColor: '#4ABB54', label: 'Approved' };
2537
- case UserAccessRequestStatus.Declined:
2538
- return { bgColor: '#FFDFDF', textColor: '#EB5757', label: 'Rejected' };
2539
- default:
2540
- return { bgColor: '#827C7C', textColor: '#C3C3C3', label: 'Pending' };
2541
- }
2542
- }
2543
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserAccessRequestStatusBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2544
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserAccessRequestStatusBadgeComponent, selector: "lib-user-access-request-status-badge", inputs: { status: "status" }, ngImport: i0, template: "<verbena-badge\n borderRadius=\"9px\"\n [bgColor]=\"badgeConfig().bgColor\"\n [textColor]=\"badgeConfig().textColor\"\n fontSize=\"12px\"\n [text]=\"badgeConfig().label\"\n></verbena-badge>\n", styles: [""], dependencies: [{ kind: "component", type: i2.VerbenaBadgeComponent, selector: "verbena-badge", inputs: ["text", "bgColor", "textColor", "borderRadius", "pd", "fontSize", "width", "height"] }] });
2545
- }
2546
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserAccessRequestStatusBadgeComponent, decorators: [{
2547
- type: Component,
2548
- args: [{ selector: 'lib-user-access-request-status-badge', template: "<verbena-badge\n borderRadius=\"9px\"\n [bgColor]=\"badgeConfig().bgColor\"\n [textColor]=\"badgeConfig().textColor\"\n fontSize=\"12px\"\n [text]=\"badgeConfig().label\"\n></verbena-badge>\n" }]
2549
- }], propDecorators: { status: [{
2550
- type: Input
2551
- }] } });
2552
-
2553
- class UserRequestApprovalComponent {
2554
- cdr;
2555
- userAccessRequestFacade;
2556
- cardDataView;
2557
- dataView;
2558
- columns = columns$1;
2559
- // visibleColumnDef: WritableSignal<ColumnDefinition<UserAccessRequest>[]> =
2560
- // signal(columns);
2561
- visibleColumnDef = this.columns;
2562
- data = signal([]);
2563
- styles = baseStyle$1;
2564
- currentData = null;
2565
- isGridView = true;
2566
- selected = null;
2567
- cardData = computed(() => this.data()?.map(({ FirstName, LastName, MailAddress, PhoneNumber, RoleID, RequestStatus, }) => ({
2568
- selected: false,
2569
- title: `${FirstName} ${LastName}`,
2570
- data: {
2571
- FirstName,
2572
- LastName,
2573
- MailAddress,
2574
- PhoneNumber,
2575
- RoleID,
2576
- RequestStatus,
2577
- },
2578
- body: [
2579
- { title: 'Name', value: `${FirstName} ${LastName}` },
2580
- { title: 'E-Mail Address', value: MailAddress },
2581
- { title: 'Phone Number', value: PhoneNumber ?? '' },
2582
- ],
2583
- children: [],
2584
- })));
2585
- constructor(cdr,
2586
- // private service: UserRequestApprovalService,
2587
- userAccessRequestFacade) {
2588
- this.cdr = cdr;
2589
- this.userAccessRequestFacade = userAccessRequestFacade;
2590
- }
2591
- async ngOnInit() {
2592
- // this.data = this.service.getMockUserRequests();
2593
- this.userAccessRequestFacade.getRequests$().subscribe((data) => {
2594
- this.data.set(data);
2595
- });
2596
- try {
2597
- await this.userAccessRequestFacade.loadRequests();
2598
- }
2599
- catch (error) {
2600
- // Handle error
2601
- }
2602
- }
2603
- // To search with parameter:
2604
- async searchRequests(param) {
2605
- try {
2606
- await this.userAccessRequestFacade.loadRequestsWithParam(param);
2607
- }
2608
- catch (error) {
2609
- // Handle error
2610
- }
2611
- }
2612
- async onApprove(mailAddress) {
2613
- const data = this.data().find(({ MailAddress }) => MailAddress === mailAddress);
2614
- if (data) {
2615
- await this.userAccessRequestFacade.approveRequest(data);
2616
- }
2617
- }
2618
- openDetailView(mailAddress) {
2619
- const cardItem = this.getCardDataByMailAddress(mailAddress);
2620
- if (cardItem && this.cardDataView) {
2621
- this.dataView.toggleView();
2622
- // First reset all selections
2623
- this.cardData().forEach((item) => {
2624
- item.selected = false;
2625
- if (item.children) {
2626
- item.children.forEach((child) => (child.selected = false));
2627
- }
2628
- });
2629
- // Set the selected item
2630
- cardItem.selected = true;
2631
- this.currentData = this.cardDataView.onItemClick(cardItem);
2632
- // Force change detection if needed
2633
- // this.changeDetectorRef.detectChanges();
2634
- }
2635
- }
2636
- getCardDataByMailAddress(mailAddress) {
2637
- return this.cardData().find(({ data }) => data.MailAddress === mailAddress);
2638
- }
2639
- onViewChange(isGridView) {
2640
- this.isGridView = isGridView;
2641
- // Reset selection when switching views
2642
- if (this.currentData) {
2643
- this.cardDataView?.clearData();
2644
- this.currentData = null;
2645
- }
2646
- console.log('SELECTED', this.selected);
2647
- if (this.selected) {
2648
- this.cardDataView.onItemClick(this.selected);
2649
- }
2650
- }
2651
- openFormView(index) {
2652
- const item = this.cardData()[index];
2653
- console.log('ITEM = ', item);
2654
- }
2655
- handleExport(exportedData) {
2656
- console.log('Exported data:', exportedData);
2657
- this.downloadCSV(exportedData);
2658
- }
2659
- /**
2660
- *
2661
- * @param data Simple csv export for testing
2662
- */
2663
- downloadCSV(data) {
2664
- const headers = Object.keys(data[0]);
2665
- const csvContent = [
2666
- headers.join(','),
2667
- ...data.map((row) => headers.map((header) => row[header]).join(',')),
2668
- ].join('\n');
2669
- const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
2670
- const link = document.createElement('a');
2671
- if (link.download !== undefined) {
2672
- const url = URL.createObjectURL(blob);
2673
- link.setAttribute('href', url);
2674
- link.setAttribute('download', 'export.csv');
2675
- link.style.visibility = 'hidden';
2676
- document.body.appendChild(link);
2677
- link.click();
2678
- document.body.removeChild(link);
2679
- }
2680
- }
2681
- onSelectionChange(selectedRows) {
2682
- console.log('Selection changed:', selectedRows);
2683
- // Handle the selection change
2684
- }
2685
- /**
2686
- * Copied over from card view doc until I understand usage
2687
- */
2688
- selectedColumnCount = 0;
2689
- selectedFilterTableCount = 0;
2690
- isOPen = true;
2691
- selectedSortCount = 0;
2692
- showColumn = false;
2693
- showSort = false;
2694
- selectedAll = false;
2695
- visibleColumns = columns$1.map((col) => ({
2696
- checked: true,
2697
- name: typeof col.header === 'string' ? col.header : col.id,
2698
- type: DataFilterType.Bool,
2699
- }));
2700
- filterArray = [
2701
- {
2702
- name: 'Name',
2703
- type: DataFilterType.String,
2704
- checked: false,
2705
- },
2706
- {
2707
- name: 'MailAddress',
2708
- type: DataFilterType.String,
2709
- checked: false,
2710
- },
2711
- {
2712
- name: 'PhoneNumber',
2713
- type: DataFilterType.String,
2714
- checked: false,
2715
- },
2716
- {
2717
- name: 'CreatedAt',
2718
- type: DataFilterType.Date,
2719
- checked: false,
2720
- },
2721
- ];
2722
- sortOptions = [
2723
- {
2724
- name: 'Name',
2725
- type: DataFilterType.String,
2726
- checked: false,
2727
- },
2728
- {
2729
- name: 'MailAddress',
2730
- type: DataFilterType.String,
2731
- checked: false,
2732
- },
2733
- {
2734
- name: 'PhoneNumber',
2735
- type: DataFilterType.String,
2736
- checked: false,
2737
- },
2738
- {
2739
- name: 'CreatedAt',
2740
- type: DataFilterType.Date,
2741
- checked: false,
2742
- },
2743
- ];
2744
- clearData() {
2745
- this.currentData = {};
2746
- }
2747
- loadMore() {
2748
- // this.cardData = this.cardData.concat(this.cardData);
2749
- }
2750
- onColumnChange(event) {
2751
- this.showColumn = event;
2752
- }
2753
- onSortChange(event) {
2754
- this.showSort = event;
2755
- console.log(event);
2756
- }
2757
- onColumnsUpdated(updatedColumns) {
2758
- console.log(updatedColumns);
2759
- const updatedColumnDef = [];
2760
- updatedColumns.forEach((col) => {
2761
- const matchingCol = this.columns.find((column) => column.header === col.name || column.id === col.name);
2762
- if (matchingCol) {
2763
- updatedColumnDef.push(matchingCol);
2764
- }
2765
- });
2766
- console.log(updatedColumnDef);
2767
- this.visibleColumnDef = [...updatedColumnDef];
2768
- this.cdr.markForCheck();
2769
- this.onColumnChange(false);
2770
- this.selectedColumnCount = updatedColumns.length;
2771
- }
2772
- onSortUpdated(updatedSorts) {
2773
- this.onSortChange(false);
2774
- this.selectedSortCount = updatedSorts.length;
2775
- console.log(updatedSorts);
2776
- }
2777
- onStateChange(event) {
2778
- console.log(`State changed for ${event.key}:`, event.value);
2779
- }
2780
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRequestApprovalComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: UserAccessRequestFacade }], target: i0.ɵɵFactoryTarget.Component });
2781
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserRequestApprovalComponent, selector: "lib-user-request-approval", viewQueries: [{ propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }], ngImport: i0, template: "<div class=\"space-y-8\">\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 isCreate: false,\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 [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div table-content>\n <lib-data-table\n [data]=\"data()\"\n [columns]=\"visibleColumnDef\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\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 <!-- <button (click)=\"openDetailView(value)\">Open</button>\n <button (click)=\"selected = cardData[rowIndex]; vdv.toggleView()\">\n Switch\n </button> -->\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 </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=\"20px\"\n >\n <verben-left-card-data-view class=\"space-y-7\">\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 <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" class=\"flex\">\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 flex-col py-2 px-4 w-full\">\n <div class=\"flex items-center gap-4 justify-between\">\n <div class=\"grid gap-y-2\">\n <span class=\"font-semibold text-[#404040]\">{{\n item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Phone Number:</label\n >\n <span id=\"phone\" class=\"text-sm\">{{\n item.data.PhoneNumber\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <p class=\"grid\">\n <label for=\"role\" class=\"text-[10px] font-light\"\n >Role</label\n >\n <span id=\"role\" class=\"text-sm\">Manager</span>\n </p>\n\n <lib-user-access-request-status-badge\n [status]=\"item.data.RequestStatus\"\n ></lib-user-access-request-status-badge>\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\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 <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n (onApproval)=\"onApprove($event)\"\n ></lib-user-request-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"float-right\">\n <div class=\"flex gap-2\">\n <span class=\"paginator-text\"\n >{{ data().length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more\">Load more</button>\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 ></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 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 [data]=\"data()\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n</div>\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-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}.mt-\\[8px\\]{margin-top:8px}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-full{height:100%}.w-2{width:.5rem}.w-3{width:.75rem}.w-full{width:100%}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.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-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))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.rounded-\\[9px\\]{border-radius:9px}.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-\\[\\#CAE1CC\\]{--tw-bg-opacity: 1;background-color:rgb(202 225 204 / var(--tw-bg-opacity, 1))}.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}.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-\\[6px\\]{padding-top:6px;padding-bottom:6px}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-\\[13px\\]{padding-left:13px}.pr-1{padding-right:.25rem}.pr-\\[3px\\]{padding-right:3px}.text-center{text-align:center}.text-\\[10px\\]{font-size:10px}.text-\\[13px\\]{font-size:13px}.text-\\[16px\\]{font-size:16px}.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}.leading-6{line-height:1.5rem}.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-\\[\\#404040\\]{--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.text-\\[\\#4ABB54\\]{--tw-text-opacity: 1;color:rgb(74 187 84 / 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)}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i2.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i2.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "size"] }, { kind: "component", type: i2.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "exportCustomClass", "selectCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "columnTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "showColumnChild", "showSortChild", "showFilterChild", "showExportChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i2.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: i2.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i2.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i2.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i2.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i2.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"] }, { kind: "component", type: i2.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"] }, { kind: "component", type: i2.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied"] }, { kind: "component", type: i2.DataExportComponent, selector: "lib-data-export", inputs: ["data"], outputs: ["exportDataEvent"] }, { kind: "component", type: UserRequestFormComponent, selector: "lib-user-request-form", inputs: ["currentData"], outputs: ["switchView", "onApproval"] }, { kind: "component", type: UserAccessRequestStatusBadgeComponent, selector: "lib-user-access-request-status-badge", inputs: ["status"] }, { kind: "pipe", type: i1$2.DatePipe, name: "date" }] });
2782
- }
2783
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRequestApprovalComponent, decorators: [{
2784
- type: Component,
2785
- args: [{ selector: 'lib-user-request-approval', template: "<div class=\"space-y-8\">\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 isCreate: false,\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 [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div table-content>\n <lib-data-table\n [data]=\"data()\"\n [columns]=\"visibleColumnDef\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\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 <!-- <button (click)=\"openDetailView(value)\">Open</button>\n <button (click)=\"selected = cardData[rowIndex]; vdv.toggleView()\">\n Switch\n </button> -->\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 </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=\"20px\"\n >\n <verben-left-card-data-view class=\"space-y-7\">\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 <ng-template #card let-item>\n <div (click)=\"currentData = vdcv.onItemClick(item)\" class=\"flex\">\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 flex-col py-2 px-4 w-full\">\n <div class=\"flex items-center gap-4 justify-between\">\n <div class=\"grid gap-y-2\">\n <span class=\"font-semibold text-[#404040]\">{{\n item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Phone Number:</label\n >\n <span id=\"phone\" class=\"text-sm\">{{\n item.data.PhoneNumber\n }}</span>\n </p>\n </div>\n\n <div class=\"grid gap-y-2\">\n <p class=\"grid\">\n <label for=\"role\" class=\"text-[10px] font-light\"\n >Role</label\n >\n <span id=\"role\" class=\"text-sm\">Manager</span>\n </p>\n\n <lib-user-access-request-status-badge\n [status]=\"item.data.RequestStatus\"\n ></lib-user-access-request-status-badge>\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\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 <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n (onApproval)=\"onApprove($event)\"\n ></lib-user-request-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"float-right\">\n <div class=\"flex gap-2\">\n <span class=\"paginator-text\"\n >{{ data().length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more\">Load more</button>\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 ></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 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 [data]=\"data()\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n</div>\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-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}.mt-\\[8px\\]{margin-top:8px}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-full{height:100%}.w-2{width:.5rem}.w-3{width:.75rem}.w-full{width:100%}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.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-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))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.rounded-\\[9px\\]{border-radius:9px}.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-\\[\\#CAE1CC\\]{--tw-bg-opacity: 1;background-color:rgb(202 225 204 / var(--tw-bg-opacity, 1))}.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}.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-\\[6px\\]{padding-top:6px;padding-bottom:6px}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-\\[13px\\]{padding-left:13px}.pr-1{padding-right:.25rem}.pr-\\[3px\\]{padding-right:3px}.text-center{text-align:center}.text-\\[10px\\]{font-size:10px}.text-\\[13px\\]{font-size:13px}.text-\\[16px\\]{font-size:16px}.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}.leading-6{line-height:1.5rem}.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-\\[\\#404040\\]{--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.text-\\[\\#4ABB54\\]{--tw-text-opacity: 1;color:rgb(74 187 84 / 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)}\n"] }]
2786
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: UserAccessRequestFacade }], propDecorators: { cardDataView: [{
2787
- type: ViewChild,
2788
- args: ['vdcv']
2789
- }], dataView: [{
2790
- type: ViewChild,
2791
- args: ['vdv']
2792
- }] } });
2793
-
2794
- const roles = [
2795
- { id: 'admin', name: 'Admin' },
2796
- { id: 'manager', name: 'Manager' },
2797
- { id: 'staff', name: 'Staff' },
2798
- ];
2799
- const mockData$1 = new Array(10)
2800
- .fill(1)
2801
- .map((id, i) => ({
2802
- FirstName: `First ${id + i}`,
2803
- LastName: `Last ${id + i}`,
2804
- OtherName: `Other ${id + i}`,
2805
- Id: id + i,
2806
- id: (id + i).toString(),
2807
- MailAddress: `user${id + i}@mail.com`,
2808
- PhoneNumber: `+23480000000${id + i}`,
2809
- RequestStatus: randomEnum$1(UserAccessRequestStatus),
2810
- RoleID: roles[Math.floor(Math.random() * roles.length)].id,
2811
- Password: '1234567',
2812
- ExpireOn: new Date(),
2813
- IsSeeded: false,
2814
- OTPExpireOn: new Date(),
2815
- Tenants: [],
2816
- CreatedAt: new Date(),
2817
- UpdatedAt: new Date(),
2818
- DataState: ObjectState.New,
2819
- Tenant: `Tenant${id + i}`,
2820
- }));
2821
- function randomEnum$1(anEnum) {
2822
- const enumValues = Object.values(anEnum);
2823
- const randomIndex = Math.floor(Math.random() * enumValues.length);
2824
- return enumValues[randomIndex];
2825
- }
2826
-
2827
- const SERVICE_CONFIG = new InjectionToken('ServiceConfig');
2828
- class UserRequestApprovalService {
2829
- // protected readonly baseUrl: string;
2830
- resourceEndpoint;
2831
- roles = [
2832
- { id: 'admin', name: 'Admin' },
2833
- { id: 'manager', name: 'Manager' },
2834
- { id: 'staff', name: 'Staff' },
2835
- ];
2836
- constructor() {
2837
- // this.baseUrl = environment.serviceUrl;
2838
- // this.resourceEndpoint = config.resourceEndpoint;
2839
- this.resourceEndpoint = '';
2840
- }
2841
- getMockUserRequests() {
2842
- return mockData$1;
2843
- }
2844
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRequestApprovalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2845
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRequestApprovalService });
2846
- }
2847
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserRequestApprovalService, decorators: [{
2848
- type: Injectable
2849
- }], ctorParameters: () => [] });
2850
- function randomEnum(anEnum) {
2851
- const enumValues = Object.values(anEnum);
2852
- const randomIndex = Math.floor(Math.random() * enumValues.length);
2853
- return enumValues[randomIndex];
2854
- }
2855
-
2856
- class LibUserRequestApprovalModule {
2857
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUserRequestApprovalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2858
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: LibUserRequestApprovalModule, declarations: [UserRequestApprovalComponent,
2859
- UserRequestFormComponent,
2860
- UserAccessRequestStatusBadgeComponent], imports: [CommonModule,
2861
- DataTableModule,
2862
- CardModule,
2863
- SvgModule,
2864
- DataViewModule,
2865
- CardDataViewModule,
2866
- SortTableModule,
2867
- VisibleColumnModule,
2868
- TableFilterModule,
2869
- DataExportModule,
2870
- FormsModule,
2871
- ReactiveFormsModule,
2872
- VerbenaInputModule,
2873
- VerbenaButtonModule,
2874
- VerbenaBadgeModule,
2875
- DropDownModule], exports: [UserRequestApprovalComponent] });
2876
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUserRequestApprovalModule, providers: [UserRequestApprovalService], imports: [CommonModule,
2877
- DataTableModule,
2878
- CardModule,
2879
- SvgModule,
2880
- DataViewModule,
2881
- CardDataViewModule,
2882
- SortTableModule,
2883
- VisibleColumnModule,
2884
- TableFilterModule,
2885
- DataExportModule,
2886
- FormsModule,
2887
- ReactiveFormsModule,
2888
- VerbenaInputModule,
2889
- VerbenaButtonModule,
2890
- VerbenaBadgeModule,
2891
- DropDownModule] });
2892
- }
2893
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUserRequestApprovalModule, decorators: [{
2894
- type: NgModule,
2895
- args: [{
2896
- declarations: [
2897
- UserRequestApprovalComponent,
2898
- UserRequestFormComponent,
2899
- UserAccessRequestStatusBadgeComponent,
2900
- ],
2901
- imports: [
2902
- CommonModule,
2903
- DataTableModule,
2904
- CardModule,
2905
- SvgModule,
2906
- DataViewModule,
2907
- CardDataViewModule,
2908
- SortTableModule,
2909
- VisibleColumnModule,
2910
- TableFilterModule,
2911
- DataExportModule,
2912
- FormsModule,
2913
- ReactiveFormsModule,
2914
- VerbenaInputModule,
2915
- VerbenaButtonModule,
2916
- VerbenaBadgeModule,
2917
- DropDownModule,
2918
- ],
2919
- providers: [UserRequestApprovalService],
2920
- exports: [UserRequestApprovalComponent],
2921
- }]
2922
- }] });
2923
-
2924
- const columns = [
2925
- {
2926
- id: 'createdAt',
2927
- header: 'CREATED',
2928
- accessorKey: 'CreatedAt',
2929
- },
2930
- {
2931
- id: 'user',
2932
- header: 'NAME',
2933
- accessorFn: (row) => `${row.FirstName} ${row.LastName}`,
2934
- },
2935
- {
2936
- id: 'mail',
2937
- header: 'E-Mail',
2938
- accessorKey: 'MailAddress',
2939
- },
2940
- {
2941
- id: 'phone',
2942
- header: 'PHONE NUMBER',
2943
- accessorKey: 'PhoneNumber',
2944
- },
2945
- {
2946
- id: 'address',
2947
- header: 'ADDRESS',
2948
- accessorKey: 'Address',
2949
- },
2950
- {
2951
- id: 'role',
2952
- header: 'ROLE',
2953
- accessorKey: 'Role',
2954
- },
2955
- {
2956
- id: 'status',
2957
- header: 'STATUS',
2958
- accessorKey: 'Status',
2959
- },
2960
- {
2961
- id: 'actions',
2962
- header: 'ACTIONS',
2963
- accessorKey: 'MailAddress',
2964
- },
2965
- ];
2966
-
2967
- const mockData = new Array(10)
2968
- .fill(1)
2969
- .map((id, i) => ({
2970
- FirstName: `First ${id + i}`,
2971
- LastName: `Last ${id + i}`,
2972
- OtherName: `Other ${id + i}`,
2973
- Id: id + i,
2974
- id: (id + i).toString(),
2975
- MailAddress: `user${id + i}@mail.com`,
2976
- PhoneNumber: `+23480000000${id + i}`,
2977
- RequestStatus: UserAccessRequestStatus.Pending,
2978
- Address: `AAA Block`,
2979
- Password: '1234567',
2980
- ExpireOn: new Date(),
2981
- IsSeeded: false,
2982
- OTPExpireOn: new Date(),
2983
- Tenants: [],
2984
- Role: ['Manager'],
2985
- CreatedAt: new Date(),
2986
- UpdatedAt: new Date(),
2987
- DataState: ObjectState.New,
2988
- Tenant: `Tenant${id + i}`,
2989
- }));
2990
-
2991
- const baseStyle = {
2992
- width: "100%",
2993
- fontFamily: '"Fraunces", serif',
2994
- fontSize: '80%',
2995
- whiteSpace: 'nowrap',
2996
- margin: '0',
2997
- border: '1px solid #D4A007',
2998
- borderRadius: '16px',
2999
- borderCollapse: 'separate',
3000
- borderSpacing: '0',
3001
- tableLayout: 'fixed',
3002
- overflow: 'hidden',
3003
- rows: {
3004
- even: {
3005
- backgroundColor: '#FDFDFD',
3006
- },
3007
- odd: {
3008
- backgroundColor: '#F1F4FB',
3009
- },
3010
- height: '68px',
3011
- },
3012
- cells: {
3013
- padding: '0.5rem 1rem',
3014
- },
3015
- header: {
3016
- stickyTop: true,
3017
- zIndex: 2,
3018
- backgroundColor: '#EFF2FB',
3019
- fontWeight: 'bold',
3020
- textAlign: 'left',
3021
- padding: '12px 16px',
3022
- height: '40px',
3023
- },
3024
- footer: {
3025
- stickyBottom: true,
3026
- zIndex: 2,
3027
- padding: '3px',
3028
- },
3029
- // body: {
3030
- // background: '#fff',
3031
- // padding: '4px 5px',
3032
- // textAlign: 'center',
3033
- // },
3034
- firstColumn: {
3035
- stickyLeft: true,
3036
- zIndex: 1,
3037
- },
3038
- lastColumn: {
3039
- stickyRight: true,
3040
- zIndex: 1,
3041
- },
3042
- };
3043
-
3044
- class UserManagementFormComponent {
3045
- fb;
3046
- set currentData(value) {
3047
- if (value?.data) {
3048
- this.form.patchValue({
3049
- MailAddress: value.data.MailAddress || '',
3050
- Name: value.data.Name || '',
3051
- PhoneNumber: value.data.PhoneNumber || '',
3052
- });
3053
- }
3054
- else {
3055
- this.form.reset();
3056
- }
3057
- }
3058
- switchView = new EventEmitter();
3059
- form;
3060
- roles = [
3061
- { id: 'admin', name: 'Admin' },
3062
- { id: 'manager', name: 'Manager' },
3063
- { id: 'staff', name: 'Staff' },
3064
- ];
3065
- constructor(fb) {
3066
- this.fb = fb;
3067
- this.form = this.fb.group({
3068
- MailAddress: ['', { readonly: true }],
3069
- Name: ['', { readonly: true }],
3070
- PhoneNumber: ['', { readonly: true }],
3071
- RoleId: [''],
3072
- });
3073
- }
3074
- ngOnInit() { }
3075
- onSave() {
3076
- if (this.form.valid) {
3077
- // Emit save event with form value
3078
- console.log('Form saved:', this.form.value);
3079
- }
3080
- }
3081
- onDelete() {
3082
- // Emit delete event
3083
- console.log('Delete requested');
3084
- }
3085
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementFormComponent, deps: [{ token: i1$1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
3086
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserManagementFormComponent, selector: "lib-user-request-form", inputs: { currentData: "currentData" }, outputs: { switchView: "switchView" }, ngImport: i0, template: "<form\n [formGroup]=\"form\"\n class=\"flex flex-col px-3 pb-3 rounded-xl h-full w-full relative space-y-4\"\n>\n <verbena-input\n name=\"MailAddress\"\n label=\"Mail Address:\"\n [type]=\"'email'\"\n formControlName=\"MailAddress\"\n />\n <verbena-input label=\"Name:\" name=\"Name\" type=\"text\" formControlName=\"Name\" />\n <verbena-input\n label=\"Phone Number:\"\n name=\"PhoneNumber\"\n type=\"tel\"\n formControlName=\"PhoneNumber\"\n />\n\n <div class=\"space-y-1\">\n <label for=\"role\">Role</label>\n\n <verben-drop-down\n label=\"Role\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"\"\n [(options)]=\"roles\"\n id=\"role\"\n optionLabel=\"name\"\n optionValue=\"id\"\n formControlName=\"RoleId\"\n class=\"form-control\"\n >\n </verben-drop-down>\n </div>\n\n <!-- buttons -->\n <div\n class=\"flex justify-between bottom-8 left-0 right-0 px-3 pb-2 absolute\"\n style=\"\n display: flex;\n justify-content: space-between;\n position: absolute;\n padding: 8px 12px;\n right: 0;\n left: 0;\n bottom: 32;\n \"\n >\n <!-- <verbena-button\n text=\"Delete\"\n class=\"bg-secondary-200 text-[black]\"\n (click)=\"onDelete()\"\n />\n <verbena-button\n text=\"Save\"\n class=\"bg-primary text-[black]\"\n (click)=\"onSave()\"\n />\n\n <verbena-button\n text=\"Secondary Button\"\n styleType=\"secondary\"\n ></verbena-button> -->\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Reject\"\n styleType=\"danger\"\n borderRadius=\"10px\"\n ></verbena-button>\n <verbena-button\n (click)=\"switchView.emit()\"\n text=\"Switch To Table\"\n styleType=\"ylw-outline\"\n ></verbena-button>\n <verbena-button\n text=\"Approve\"\n bgColor=\"#28a745\"\n textColor=\"white\"\n border=\"1px solid #28a745\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n ></verbena-button>\n </div>\n</form>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i2.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i2.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }] });
3087
- }
3088
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementFormComponent, decorators: [{
3089
- type: Component,
3090
- args: [{ selector: 'lib-user-request-form', template: "<form\n [formGroup]=\"form\"\n class=\"flex flex-col px-3 pb-3 rounded-xl h-full w-full relative space-y-4\"\n>\n <verbena-input\n name=\"MailAddress\"\n label=\"Mail Address:\"\n [type]=\"'email'\"\n formControlName=\"MailAddress\"\n />\n <verbena-input label=\"Name:\" name=\"Name\" type=\"text\" formControlName=\"Name\" />\n <verbena-input\n label=\"Phone Number:\"\n name=\"PhoneNumber\"\n type=\"tel\"\n formControlName=\"PhoneNumber\"\n />\n\n <div class=\"space-y-1\">\n <label for=\"role\">Role</label>\n\n <verben-drop-down\n label=\"Role\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"false\"\n [filter]=\"true\"\n [showClear]=\"true\"\n placeholder=\"\"\n [(options)]=\"roles\"\n id=\"role\"\n optionLabel=\"name\"\n optionValue=\"id\"\n formControlName=\"RoleId\"\n class=\"form-control\"\n >\n </verben-drop-down>\n </div>\n\n <!-- buttons -->\n <div\n class=\"flex justify-between bottom-8 left-0 right-0 px-3 pb-2 absolute\"\n style=\"\n display: flex;\n justify-content: space-between;\n position: absolute;\n padding: 8px 12px;\n right: 0;\n left: 0;\n bottom: 32;\n \"\n >\n <!-- <verbena-button\n text=\"Delete\"\n class=\"bg-secondary-200 text-[black]\"\n (click)=\"onDelete()\"\n />\n <verbena-button\n text=\"Save\"\n class=\"bg-primary text-[black]\"\n (click)=\"onSave()\"\n />\n\n <verbena-button\n text=\"Secondary Button\"\n styleType=\"secondary\"\n ></verbena-button> -->\n <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Reject\"\n styleType=\"danger\"\n borderRadius=\"10px\"\n ></verbena-button>\n <verbena-button\n (click)=\"switchView.emit()\"\n text=\"Switch To Table\"\n styleType=\"ylw-outline\"\n ></verbena-button>\n <verbena-button\n text=\"Approve\"\n bgColor=\"#28a745\"\n textColor=\"white\"\n border=\"1px solid #28a745\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n ></verbena-button>\n </div>\n</form>\n" }]
3091
- }], ctorParameters: () => [{ type: i1$1.FormBuilder }], propDecorators: { currentData: [{
3092
- type: Input
3093
- }], switchView: [{
3094
- type: Output
3095
- }] } });
3096
-
3097
- class UserManagementComponent {
3098
- cardDataView;
3099
- dataView;
3100
- columns = columns;
3101
- data = mockData;
3102
- styles = baseStyle;
3103
- selectedParent;
3104
- basicOption;
3105
- selectedOption = [];
3106
- selectedOptionTwo = [];
3107
- selectedOptionThree;
3108
- missingObject;
3109
- generateNewUserAccessRequest() {
3110
- const newId = this.data.length + 1; // Incremental ID based on current data length
3111
- return {
3112
- FirstName: `First ${newId}`,
3113
- LastName: `Last ${newId}`,
3114
- OtherName: `Other ${newId}`,
3115
- Id: `${newId}`,
3116
- id: newId,
3117
- MailAddress: ` `,
3118
- PhoneNumber: ``,
3119
- RequestStatus: UserAccessRequestStatus.Pending,
3120
- Address: ` `,
3121
- Password: ' ',
3122
- ExpireOn: new Date(),
3123
- IsSeeded: false,
3124
- OTPExpireOn: new Date(),
3125
- Tenants: [`Tenant${newId}`],
3126
- Role: ['User'],
3127
- CreatedAt: new Date(),
3128
- UpdatedAt: new Date(),
3129
- DataState: ObjectState.New,
3130
- Tenant: `Tenant${newId}`
3131
- };
3132
- }
3133
- // Function to add a new user to mockData
3134
- addNewUserToMockData() {
3135
- const newUser = this.generateNewUserAccessRequest();
3136
- this.data.push(newUser); // Adds the new user to the data array
3137
- // Optionally, update cardData with the new user entry for card display
3138
- const fullName = `${newUser.FirstName} ${newUser.LastName}`;
3139
- const newCardData = {
3140
- selected: false,
3141
- title: fullName,
3142
- data: {
3143
- Name: fullName,
3144
- MailAddress: newUser.MailAddress,
3145
- PhoneNumber: newUser.PhoneNumber,
3146
- RoleID: newUser.Role,
3147
- Status: newUser.Status,
3148
- },
3149
- body: [
3150
- { title: 'Name', value: fullName },
3151
- { title: 'E-Mail Address', value: newUser.MailAddress },
3152
- { title: 'Phone Number', value: newUser.PhoneNumber ?? '' },
3153
- ],
3154
- children: [],
3155
- };
3156
- this.cardData.push(newCardData); // Update cardData array with the new user
3157
- return newUser;
3158
- }
3159
- // Grid view properties
3160
- isGridView = true;
3161
- currentData;
3162
- selectedColumnCount = 0;
3163
- selectedFilterTableCount = 0;
3164
- isOPen = true;
3165
- selectedSortCount = 0;
3166
- showColumn = false;
3167
- showSort = false;
3168
- selectedAll = false;
3169
- visibleColumns = columns.map((col) => ({
3170
- checked: false,
3171
- name: typeof col.header === 'string' ? col.header : col.id,
3172
- type: DataFilterType.Bool,
3173
- }));
3174
- filterArray = [
3175
- { name: 'Name', type: DataFilterType.String, checked: false },
3176
- { name: 'MailAddress', type: DataFilterType.String, checked: false },
3177
- { name: 'PhoneNumber', type: DataFilterType.String, checked: false },
3178
- { name: 'CreatedAt', type: DataFilterType.Date, checked: false },
3179
- ];
3180
- sortOptions = [
3181
- { name: 'Name', type: DataFilterType.String, checked: false },
3182
- { name: 'MailAddress', type: DataFilterType.String, checked: false },
3183
- { name: 'PhoneNumber', type: DataFilterType.String, checked: false },
3184
- { name: 'CreatedAt', type: DataFilterType.Date, checked: false },
3185
- ];
3186
- testParents = [
3187
- { Id: '1', Name: 'Manager' },
3188
- { Id: '2', Name: 'Administrator' },
3189
- { Id: '3', Name: 'Jelom' },
3190
- ];
3191
- cardData = mockData.map(({ FirstName, LastName, MailAddress, PhoneNumber, RoleID, Status }) => ({
3192
- selected: false,
3193
- title: `${FirstName} ${LastName}`,
3194
- data: {
3195
- FirstName,
3196
- LastName,
3197
- MailAddress,
3198
- PhoneNumber,
3199
- RoleID,
3200
- Status,
3201
- },
3202
- body: [
3203
- { title: 'Name', value: `${FirstName} ${LastName}` },
3204
- { title: 'E-Mail Address', value: MailAddress },
3205
- { title: 'Phone Number', value: PhoneNumber ?? '' },
3206
- ],
3207
- children: [],
3208
- }));
3209
- ngOnInit() {
3210
- this.selectedParent = '1';
3211
- this.selectedOption = ['Opt 1'];
3212
- this.selectedOptionTwo = ['1'];
3213
- this.selectedOptionThree = '1';
3214
- }
3215
- getParentLabel(context) {
3216
- console.log({ MissingObj: this.missingObject });
3217
- return this.missingObject.Name;
3218
- }
3219
- async loadMoreParents(event) {
3220
- console.log({ ParentLoadEvent: JSON.parse(JSON.stringify(event)) });
3221
- return await new Promise((resolve) => setTimeout(() => resolve([
3222
- { Id: '1', Name: 'Jimly' },
3223
- { Id: '2', Name: 'Jecil' },
3224
- { Id: '3', Name: 'Jelom' },
3225
- { Id: '4', Name: 'Jemima' },
3226
- { Id: '5', Name: 'Akintunde' },
3227
- ]), 3000));
3228
- }
3229
- onDropdownChange(event) {
3230
- // console.log({
3231
- // 'Test Parent Value': this.selectedParent,
3232
- // ...
3233
- // });
3234
- }
3235
- onSelectionChange(selectedRows) {
3236
- console.log('Selection changed:', selectedRows);
3237
- // Handle the selection change
3238
- }
3239
- handleExport(exportedData) {
3240
- console.log('Exported data:', exportedData);
3241
- this.downloadCSV(exportedData);
3242
- }
3243
- downloadCSV(data) {
3244
- const headers = Object.keys(data[0]);
3245
- const csvContent = [
3246
- headers.join(','),
3247
- ...data.map((row) => headers.map((header) => row[header]).join(',')),
3248
- ].join('\n');
3249
- const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
3250
- const link = document.createElement('a');
3251
- if (link.download !== undefined) {
3252
- const url = URL.createObjectURL(blob);
3253
- link.setAttribute('href', url);
3254
- link.setAttribute('download', 'export.csv');
3255
- link.style.visibility = 'hidden';
3256
- document.body.appendChild(link);
3257
- link.click();
3258
- document.body.removeChild(link);
3259
- }
3260
- }
3261
- // applyFilters() {
3262
- // this.filteredData = this.data.filter((item) => {
3263
- // return this.filterArray.every((filter) => {
3264
- // if (filter.checked) {
3265
- // switch (filter.type) {
3266
- // case DataFilterType.String:
3267
- // return item[filter.name].toLowerCase().includes(filter.name.toLowerCase());
3268
- // case DataFilterType.Date:
3269
- // return new Date(item[filter.name]) >= new Date(filter.name);
3270
- // default:
3271
- // return true;
3272
- // }
3273
- // }
3274
- // return true;
3275
- // });
3276
- // });
3277
- // }
3278
- getCardDataByMailAddress(mailAddress) {
3279
- console.log('cardData array:', this.cardData);
3280
- console.log(mailAddress);
3281
- return this.cardData.find(({ data }) => data?.MailAddress === mailAddress);
3282
- }
3283
- openDetailView(mailAddress) {
3284
- const cardItem = this.getCardDataByMailAddress(mailAddress);
3285
- console.log(cardItem);
3286
- if (cardItem && this.cardDataView) {
3287
- this.dataView.toggleView();
3288
- // First reset all selections
3289
- this.cardData.forEach((item) => {
3290
- item.selected = false;
3291
- if (item.children) {
3292
- item.children.forEach((child) => (child.selected = false));
3293
- }
3294
- });
3295
- // Set the selected item
3296
- cardItem.selected = true;
3297
- this.currentData = this.cardDataView.onItemClick(cardItem);
3298
- // Force change detection if needed
3299
- // this.changeDetectorRef.detectChanges();
3300
- }
3301
- }
3302
- newItem() {
3303
- const newData = this.addNewUserToMockData();
3304
- const newCardData = {
3305
- selected: true,
3306
- title: `${newData.FirstName} ${newData.LastName}`,
3307
- data: {
3308
- ...newData,
3309
- },
3310
- body: [
3311
- { title: 'Name', value: `${newData.FirstName} ${newData.LastName}` },
3312
- { title: 'E-Mail Address', value: newData.MailAddress },
3313
- { title: 'Phone Number', value: newData.PhoneNumber ?? '' },
3314
- ],
3315
- children: [],
3316
- };
3317
- if (this.dataView.isTableView) {
3318
- this.dataView.toggleView();
3319
- }
3320
- // First reset all selections
3321
- this.cardData.forEach((item) => {
3322
- item.selected = false;
3323
- if (item.children) {
3324
- item.children.forEach((child) => (child.selected = false));
3325
- }
3326
- });
3327
- // this.cardData = [newCardData].concat(this.cardData);
3328
- // this.cardDataView.onItemClick(newCardData)
3329
- this.cardData = [newCardData, ...this.cardData];
3330
- this.currentData = this.cardDataView.onItemClick(newCardData);
3331
- }
3332
- // toggleChildView(action: string) {
3333
- // if (action === 'create') {
3334
- // const newCard: CardData = {
3335
- // selected: false,
3336
- // title: 'New Card', // Default title, change as needed
3337
- // data: { Name: '', MailAddress: '', PhoneNumber: '' },
3338
- // body: [
3339
- // { title: 'Name', value: '' },
3340
- // { title: 'E-Mail Address', value: '' },
3341
- // { title: 'Phone Number', value: '' }
3342
- // ],
3343
- // children: []
3344
- // };
3345
- // this.cardData.push(newCard);
3346
- // }
3347
- // }
3348
- clearData() {
3349
- this.currentData = {};
3350
- }
3351
- loadMore() {
3352
- this.cardData = this.cardData.concat(this.cardData);
3353
- }
3354
- onColumnChange(event) {
3355
- this.showColumn = event;
3356
- }
3357
- onSortChange(event) {
3358
- this.showSort = event;
3359
- console.log(event);
3360
- }
3361
- onColumnsUpdated(updatedColumns) {
3362
- this.onColumnChange(false);
3363
- this.selectedColumnCount = updatedColumns.length;
3364
- }
3365
- onSortUpdated(updatedSorts) {
3366
- this.onSortChange(false);
3367
- this.selectedSortCount = updatedSorts.length;
3368
- console.log(updatedSorts);
3369
- }
3370
- onViewChange(isGridView) {
3371
- console.log('View changed to:', isGridView ? 'Grid View' : 'List View');
3372
- }
3373
- onStateChange(event) {
3374
- console.log(`State changed for ${event.key}:`, event.value);
3375
- if (event.key === 'create') {
3376
- console.log('peace is a boy');
3377
- this.newItem();
3378
- // const newUser = this.newItem()
3379
- // if ( newUser && this.cardDataView) {
3380
- // this.dataView.toggleView();
3381
- // // First reset all selections
3382
- // this.cardData.forEach((item) => {
3383
- // item.selected = false;
3384
- // if (item.children) {
3385
- // item.children.forEach((child) => (child.selected = false));
3386
- // }
3387
- // });
3388
- // this.currentData = this.cardDataView.onItemClick(newUser);
3389
- // // Force change detection if needed
3390
- // // this.changeDetectorRef.detectChanges();
3391
- // }
3392
- }
3393
- }
3394
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3395
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserManagementComponent, selector: "lib-user-management", viewQueries: [{ propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }], ngImport: i0, template: "<div class=\"space-y-1 h-full\">\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 isCreate: true,\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 [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div table-content>\n <lib-data-table\n [data]=\"data\"\n [columns]=\"columns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\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 <verbena-badge\n borderRadius=\"20px\"\n width=\"121px\"\n text=\"{{value}}\"\n bgColor=\"#D6F3E6\"\n textColor=\"#2DB76F\"\n pd=\"5px 15px\"\n fontSize=\"16px\"\n >\n\n\n </verbena-badge>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"role\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-deleteRow=\"deleteRow\"\n let-value=\"value\"\n let-updateValue=\"updateValue\"\n >\n <!-- <verben-drop-down [minChar]=\"3\" [required]=\"true\" placeholder=\"Select Parent\"\n [asyncLabel]=\"this.getParentLabel.bind(this)\" invalidMessage=\"No value was provided\"\n width=\"120px\"\n (onChange)=\"onDropdownChange($event)\" [(ngModel)]=\"selectedParent\" optionLabel=\"Name\" optionValue=\"Id\"\n [options]=\"testParents\"></verben-drop-down> -->\n\n <verben-drop-down\n placeholder=\"Select Value\"\n width=\"120px\"\n (ngModelChange)=\"onDropdownChange($event)\"\n [options]=\"testParents\"\n optionLabel=\"Name\"\n optionValue=\"Name\"\n [ngModel]=\"value\"\n ></verben-drop-down>\n </ng-template>\n </ng-container>\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 scroll-no border-primary border-[1px] gap-1 h-full justify-pp m-0 overflow-y-auto overflow-hidden\"\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 bg-secondary rounded-xl overflow-hidden w-full\"\n >\n <div\n class=\"w-2 rounded-xl rounded-tr-none rounded-br-none overflow-hidden\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"flex flex-col py-[6px] pr-[3px] \">\n <div class=\"flex items-center gap-4\">\n <div class=\"pl-[13px]\">\n <span class=\"font-semibold text-[16px] text-[#404040]\">{{\n item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Phone Number:</label\n >\n <span id=\"phone\" class=\"text-[13px] font-medium truncate text-wrap\">{{\n item.data.PhoneNumber\n }}</span>\n </p>\n </div>\n\n <div class=\" \">\n <p class=\"grid\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Role</label\n >\n <span id=\"phone\" class=\"text-sm font-medium\"\n >Manager</span\n >\n <span class=\" bg-[#CAE1CC] text-center text-[#4ABB54] text-[13px] mt-[8px] rounded-[9px]\">\n {{item.data.Status}}\n </span>\n </p>\n <!-- <lib-user-access-request-status-badge\n [status]=\"item.data.Status\"\n ></lib-user-access-request-status-badge> -->\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\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 <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n ></lib-user-request-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"float-right\">\n <div class=\"flex gap-2\">\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more\">Load more</button>\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 ></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 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 [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n</div>\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-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}.mt-\\[8px\\]{margin-top:8px}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-full{height:100%}.w-2{width:.5rem}.w-3{width:.75rem}.w-full{width:100%}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.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-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))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.rounded-\\[9px\\]{border-radius:9px}.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-\\[\\#CAE1CC\\]{--tw-bg-opacity: 1;background-color:rgb(202 225 204 / var(--tw-bg-opacity, 1))}.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}.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-\\[6px\\]{padding-top:6px;padding-bottom:6px}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-\\[13px\\]{padding-left:13px}.pr-1{padding-right:.25rem}.pr-\\[3px\\]{padding-right:3px}.text-center{text-align:center}.text-\\[10px\\]{font-size:10px}.text-\\[13px\\]{font-size:13px}.text-\\[16px\\]{font-size:16px}.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}.leading-6{line-height:1.5rem}.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-\\[\\#404040\\]{--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.text-\\[\\#4ABB54\\]{--tw-text-opacity: 1;color:rgb(74 187 84 / 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}}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i2.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i2.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "size"] }, { kind: "component", type: i2.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "exportCustomClass", "selectCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "columnTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "showColumnChild", "showSortChild", "showFilterChild", "showExportChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i2.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: i2.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i2.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i2.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i2.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i2.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"] }, { kind: "component", type: i2.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"] }, { kind: "component", type: i2.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied"] }, { kind: "component", type: i2.DataExportComponent, selector: "lib-data-export", inputs: ["data"], outputs: ["exportDataEvent"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.VerbenaBadgeComponent, selector: "verbena-badge", inputs: ["text", "bgColor", "textColor", "borderRadius", "pd", "fontSize", "width", "height"] }, { kind: "component", type: i2.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: UserManagementFormComponent, selector: "lib-user-request-form", inputs: ["currentData"], outputs: ["switchView"] }, { kind: "pipe", type: i1$2.DatePipe, name: "date" }] });
3396
- }
3397
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserManagementComponent, decorators: [{
3398
- type: Component,
3399
- args: [{ selector: 'lib-user-management', template: "<div class=\"space-y-1 h-full\">\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 isCreate: true,\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 [selectedSortCount]=\"0\"\n [selectedFilterTableCount]=\"0\"\n (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\"\n >\n <div table-content>\n <lib-data-table\n [data]=\"data\"\n [columns]=\"columns\"\n [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\"\n >\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 <verbena-badge\n borderRadius=\"20px\"\n width=\"121px\"\n text=\"{{value}}\"\n bgColor=\"#D6F3E6\"\n textColor=\"#2DB76F\"\n pd=\"5px 15px\"\n fontSize=\"16px\"\n >\n\n\n </verbena-badge>\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"role\">\n <ng-template\n #cell\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-deleteRow=\"deleteRow\"\n let-value=\"value\"\n let-updateValue=\"updateValue\"\n >\n <!-- <verben-drop-down [minChar]=\"3\" [required]=\"true\" placeholder=\"Select Parent\"\n [asyncLabel]=\"this.getParentLabel.bind(this)\" invalidMessage=\"No value was provided\"\n width=\"120px\"\n (onChange)=\"onDropdownChange($event)\" [(ngModel)]=\"selectedParent\" optionLabel=\"Name\" optionValue=\"Id\"\n [options]=\"testParents\"></verben-drop-down> -->\n\n <verben-drop-down\n placeholder=\"Select Value\"\n width=\"120px\"\n (ngModelChange)=\"onDropdownChange($event)\"\n [options]=\"testParents\"\n optionLabel=\"Name\"\n optionValue=\"Name\"\n [ngModel]=\"value\"\n ></verben-drop-down>\n </ng-template>\n </ng-container>\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 scroll-no border-primary border-[1px] gap-1 h-full justify-pp m-0 overflow-y-auto overflow-hidden\"\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 bg-secondary rounded-xl overflow-hidden w-full\"\n >\n <div\n class=\"w-2 rounded-xl rounded-tr-none rounded-br-none overflow-hidden\"\n [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"\n ></div>\n <div class=\"flex flex-col py-[6px] pr-[3px] \">\n <div class=\"flex items-center gap-4\">\n <div class=\"pl-[13px]\">\n <span class=\"font-semibold text-[16px] text-[#404040]\">{{\n item.title\n }}</span>\n <p class=\"flex items-center\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Phone Number:</label\n >\n <span id=\"phone\" class=\"text-[13px] font-medium truncate text-wrap\">{{\n item.data.PhoneNumber\n }}</span>\n </p>\n </div>\n\n <div class=\" \">\n <p class=\"grid\">\n <label for=\"phone\" class=\"text-[10px] font-light\"\n >Role</label\n >\n <span id=\"phone\" class=\"text-sm font-medium\"\n >Manager</span\n >\n <span class=\" bg-[#CAE1CC] text-center text-[#4ABB54] text-[13px] mt-[8px] rounded-[9px]\">\n {{item.data.Status}}\n </span>\n </p>\n <!-- <lib-user-access-request-status-badge\n [status]=\"item.data.Status\"\n ></lib-user-access-request-status-badge> -->\n </div>\n </div>\n\n <!-- <div class=\"flex\">\n <span class=\"font-normal text-sm\">{{ item.title }}</span>\n </div>\n @for (ciItem of item.body; track ciItem.value) {\n <div class=\"\">\n <span class=\"text-muted font-light text-xs\"\n >{{ ciItem.title }}:</span\n >\n <span class=\"text-black\">{{ ciItem.value }}</span>\n </div>\n } -->\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 <lib-user-request-form\n [currentData]=\"currentData\"\n (switchView)=\"vdv.toggleView()\"\n ></lib-user-request-form>\n </ng-template>\n </verben-right-card-data-view>\n\n <verben-card-data-view-footer class=\"float-right\">\n <div class=\"flex gap-2\">\n <span class=\"paginator-text\"\n >{{ cardData.length }} records loaded</span\n >\n <button (click)=\"loadMore()\" class=\"load-more\">Load more</button>\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 ></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 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 [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n</div>\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-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}.mt-\\[8px\\]{margin-top:8px}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-full{height:100%}.w-2{width:.5rem}.w-3{width:.75rem}.w-full{width:100%}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.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-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))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.rounded-\\[9px\\]{border-radius:9px}.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-\\[\\#CAE1CC\\]{--tw-bg-opacity: 1;background-color:rgb(202 225 204 / var(--tw-bg-opacity, 1))}.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}.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-\\[6px\\]{padding-top:6px;padding-bottom:6px}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-\\[13px\\]{padding-left:13px}.pr-1{padding-right:.25rem}.pr-\\[3px\\]{padding-right:3px}.text-center{text-align:center}.text-\\[10px\\]{font-size:10px}.text-\\[13px\\]{font-size:13px}.text-\\[16px\\]{font-size:16px}.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}.leading-6{line-height:1.5rem}.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-\\[\\#404040\\]{--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1))}.text-\\[\\#4ABB54\\]{--tw-text-opacity: 1;color:rgb(74 187 84 / 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}}\n"] }]
3400
- }], propDecorators: { cardDataView: [{
3401
- type: ViewChild,
3402
- args: ['vdcv']
3403
- }], dataView: [{
3404
- type: ViewChild,
3405
- args: ['vdv']
3406
- }] } });
3407
-
3408
- class LibUserManagementModule {
3409
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUserManagementModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3410
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: LibUserManagementModule, declarations: [UserManagementComponent, UserManagementFormComponent], imports: [CommonModule,
3411
- DataTableModule,
3412
- CardModule,
3413
- SvgModule,
3414
- DataViewModule,
3415
- CardDataViewModule,
3416
- SortTableModule,
3417
- VisibleColumnModule,
3418
- TableFilterModule,
3419
- DataExportModule,
3420
- FormsModule,
3421
- ReactiveFormsModule,
3422
- VerbenaInputModule,
3423
- VerbenaButtonModule,
3424
- VerbenaBadgeModule,
3425
- DropDownModule], exports: [UserManagementComponent] });
3426
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUserManagementModule, imports: [CommonModule,
3427
- DataTableModule,
3428
- CardModule,
3429
- SvgModule,
3430
- DataViewModule,
3431
- CardDataViewModule,
3432
- SortTableModule,
3433
- VisibleColumnModule,
3434
- TableFilterModule,
3435
- DataExportModule,
3436
- FormsModule,
3437
- ReactiveFormsModule,
3438
- VerbenaInputModule,
3439
- VerbenaButtonModule,
3440
- VerbenaBadgeModule,
3441
- DropDownModule] });
3442
- }
3443
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibUserManagementModule, decorators: [{
3444
- type: NgModule,
3445
- args: [{
3446
- declarations: [UserManagementComponent, UserManagementFormComponent],
3447
- imports: [
3448
- CommonModule,
3449
- DataTableModule,
3450
- CardModule,
3451
- SvgModule,
3452
- DataViewModule,
3453
- CardDataViewModule,
3454
- SortTableModule,
3455
- VisibleColumnModule,
3456
- TableFilterModule,
3457
- DataExportModule,
3458
- FormsModule,
3459
- ReactiveFormsModule,
3460
- VerbenaInputModule,
3461
- VerbenaButtonModule,
3462
- VerbenaBadgeModule,
3463
- DropDownModule
3464
- ],
3465
- exports: [UserManagementComponent],
3466
- }]
3467
- }] });
3468
-
3469
- /*
3470
- * Public API Surface of verben-ng-ui
3471
- */
3472
- // export * from './lib/verben-ng-ui.service';
3473
- // export * from './lib/verben-ng-ui.component';
3474
- // Exporting modules
3475
-
3476
- /**
3477
- * Generated bundle index. Do not edit.
3478
- */
3479
-
3480
- export { ENVIRONMENT, EnvironmentService, ForgotPasswordComponent, ForgotPasswordModule, LibUserManagementModule, LibUserRequestApprovalModule, MailComponent, MailModule, MailValidationComponent, MailValidationModule, ResetPasswordComponent, ResetPasswordModule, SERVICE_CONFIG, SignInComponent, SignInModule, SignUpComponent, SignUpModule, SsoComponent, SsoModule, TwoFactorAuthOtpComponent, TwoFactorAuthOtpModule, TwoFactorAuthSetupComponent, TwoFactorAuthSetupModule, UserManagementComponent, UserRequestApprovalComponent, UserRequestApprovalService, UserRequestComponent, UserRequestModule };
3481
- //# sourceMappingURL=verben-authentication-ui.mjs.map