@aakash58/chatbot 1.1.19 → 1.1.21

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 (351) hide show
  1. package/.editorconfig +17 -0
  2. package/.vscode/extensions.json +4 -0
  3. package/.vscode/launch.json +41 -0
  4. package/.vscode/settings.json +14 -0
  5. package/.vscode/tasks.json +60 -0
  6. package/README.md +298 -22
  7. package/angular.json +132 -0
  8. package/docs/PUBLISHING_GUIDE.md +104 -0
  9. package/package.json +75 -29
  10. package/projects/app-doohbot/public/assets/const/app-const.json +15 -0
  11. package/projects/app-doohbot/public/assets/const/doohclick_license.json +6 -0
  12. package/projects/app-doohbot/public/favicon.ico +0 -0
  13. package/projects/app-doohbot/src/app/app.config.ts +13 -0
  14. package/projects/app-doohbot/src/app/app.html +31 -0
  15. package/projects/app-doohbot/src/app/app.routes.ts +3 -0
  16. package/projects/app-doohbot/src/app/app.scss +279 -0
  17. package/projects/app-doohbot/src/app/app.spec.ts +23 -0
  18. package/projects/app-doohbot/src/app/app.ts +72 -0
  19. package/projects/app-doohbot/src/index.html +15 -0
  20. package/projects/app-doohbot/src/main.ts +6 -0
  21. package/projects/app-doohbot/src/styles.scss +15 -0
  22. package/projects/app-doohbot/tsconfig.app.json +15 -0
  23. package/projects/app-doohbot/tsconfig.spec.json +14 -0
  24. package/projects/doohbot/README.md +64 -0
  25. package/projects/doohbot/docs/README.md +140 -0
  26. package/projects/doohbot/ng-package.json +10 -0
  27. package/projects/doohbot/package.json +16 -0
  28. package/projects/doohbot/src/lib/app/chat/chat-ui-state.service.ts +194 -0
  29. package/projects/doohbot/src/lib/app/chat/chat.service.ts +547 -0
  30. package/projects/doohbot/src/lib/app/chat/components/chat-button/chat-button.component.html +27 -0
  31. package/projects/doohbot/src/lib/app/chat/components/chat-button/chat-button.component.scss +115 -0
  32. package/projects/doohbot/src/lib/app/chat/components/chat-button/chat-button.component.ts +35 -0
  33. package/projects/doohbot/src/lib/app/chat/components/chat-footer/chat-footer.component.html +3 -0
  34. package/projects/doohbot/src/lib/app/chat/components/chat-footer/chat-footer.component.scss +20 -0
  35. package/projects/doohbot/src/lib/app/chat/components/chat-footer/chat-footer.component.ts +12 -0
  36. package/projects/doohbot/src/lib/app/chat/components/chat-header/chat-header.component.html +34 -0
  37. package/projects/doohbot/src/lib/app/chat/components/chat-header/chat-header.component.scss +78 -0
  38. package/projects/doohbot/src/lib/app/chat/components/chat-header/chat-header.component.ts +52 -0
  39. package/projects/doohbot/src/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.html +77 -0
  40. package/projects/doohbot/src/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.scss +346 -0
  41. package/projects/doohbot/src/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.ts +188 -0
  42. package/projects/doohbot/src/lib/app/chat/components/chat-window/chat-window.component.html +146 -0
  43. package/projects/doohbot/src/lib/app/chat/components/chat-window/chat-window.component.scss +187 -0
  44. package/projects/doohbot/src/lib/app/chat/components/chat-window/chat-window.component.ts +256 -0
  45. package/projects/doohbot/src/lib/app/chat/components/message-input/message-input.component.html +17 -0
  46. package/projects/doohbot/src/lib/app/chat/components/message-input/message-input.component.scss +59 -0
  47. package/projects/doohbot/src/lib/app/chat/components/message-input/message-input.component.ts +28 -0
  48. package/projects/doohbot/src/lib/app/chat/components/message-list/message-list.component.html +138 -0
  49. package/projects/doohbot/src/lib/app/chat/components/message-list/message-list.component.scss +436 -0
  50. package/projects/doohbot/src/lib/app/chat/components/message-list/message-list.component.ts +106 -0
  51. package/projects/doohbot/src/lib/app/chat/model/chat-history.model.ts +57 -0
  52. package/projects/doohbot/src/lib/app/chat/model/chat-request.model.ts +17 -0
  53. package/projects/doohbot/src/lib/app/chat/model/chat-response.model.ts +9 -0
  54. package/projects/doohbot/src/lib/app/chat/model/chat-session.model.ts +14 -0
  55. package/{lib/app/chat/model/chat-stream-message.model.d.ts → projects/doohbot/src/lib/app/chat/model/chat-stream-message.model.ts} +6 -5
  56. package/projects/doohbot/src/lib/app/chat/model/chat-stream-response.model.ts +12 -0
  57. package/projects/doohbot/src/lib/app/chat/services/chat-api.service.ts +82 -0
  58. package/projects/doohbot/src/lib/app/chat/services/chat-audio.service.ts +44 -0
  59. package/projects/doohbot/src/lib/app/chat/services/chat-history.service.ts +303 -0
  60. package/projects/doohbot/src/lib/app/login/login-form.component.html +80 -0
  61. package/projects/doohbot/src/lib/app/login/login-form.component.scss +189 -0
  62. package/projects/doohbot/src/lib/app/login/login-form.component.ts +45 -0
  63. package/projects/doohbot/src/lib/app/personalization/personalization-dialog.component.html +81 -0
  64. package/projects/doohbot/src/lib/app/personalization/personalization-dialog.component.scss +179 -0
  65. package/projects/doohbot/src/lib/app/personalization/personalization-dialog.component.ts +217 -0
  66. package/projects/doohbot/src/lib/app/personalization/personalization.service.ts +197 -0
  67. package/projects/doohbot/src/lib/app/personalization/sections/account/account-section.component.html +111 -0
  68. package/projects/doohbot/src/lib/app/personalization/sections/account/account-section.component.scss +218 -0
  69. package/projects/doohbot/src/lib/app/personalization/sections/account/account-section.component.ts +121 -0
  70. package/projects/doohbot/src/lib/app/personalization/sections/instructions/instructions-section.component.html +46 -0
  71. package/projects/doohbot/src/lib/app/personalization/sections/instructions/instructions-section.component.scss +138 -0
  72. package/projects/doohbot/src/lib/app/personalization/sections/instructions/instructions-section.component.ts +28 -0
  73. package/projects/doohbot/src/lib/app/personalization/sections/preferences/color-picker-dialog.component.ts +92 -0
  74. package/projects/doohbot/src/lib/app/personalization/sections/preferences/preferences-section.component.html +198 -0
  75. package/projects/doohbot/src/lib/app/personalization/sections/preferences/preferences-section.component.scss +107 -0
  76. package/projects/doohbot/src/lib/app/personalization/sections/preferences/preferences-section.component.ts +103 -0
  77. package/projects/doohbot/src/lib/app/personalization/sections/profile/profile-section.component.html +46 -0
  78. package/projects/doohbot/src/lib/app/personalization/sections/profile/profile-section.component.scss +131 -0
  79. package/projects/doohbot/src/lib/app/personalization/sections/profile/profile-section.component.ts +23 -0
  80. package/projects/doohbot/src/lib/app/personalization/sections/settings/setting-section.component.html +33 -0
  81. package/projects/doohbot/src/lib/app/personalization/sections/settings/setting-section.component.scss +61 -0
  82. package/projects/doohbot/src/lib/app/personalization/sections/settings/setting-section.component.ts +20 -0
  83. package/projects/doohbot/src/lib/app/personalization/sections/terms/terms-section.component.html +30 -0
  84. package/projects/doohbot/src/lib/app/personalization/sections/terms/terms-section.component.scss +59 -0
  85. package/projects/doohbot/src/lib/app/personalization/sections/terms/terms-section.component.ts +12 -0
  86. package/projects/doohbot/src/lib/constant/doohbot-constant.ts +40 -0
  87. package/projects/doohbot/src/lib/constant/html-entities.ts +8 -0
  88. package/projects/doohbot/src/lib/constant/utf8.ts +9 -0
  89. package/projects/doohbot/src/lib/core/app-const.ts +63 -0
  90. package/projects/doohbot/src/lib/core/auth/account-api.service.ts +53 -0
  91. package/projects/doohbot/src/lib/core/auth/auth.service.ts +478 -0
  92. package/projects/doohbot/src/lib/core/auth/models/auth-result.model.ts +4 -0
  93. package/projects/doohbot/src/lib/core/auth/models/federated-login-request.model.ts +5 -0
  94. package/projects/doohbot/src/lib/core/auth/models/login-request.model.ts +6 -0
  95. package/projects/doohbot/src/lib/core/auth/storage.service.ts +113 -0
  96. package/projects/doohbot/src/lib/core/directives/draggable/draggable-dialog.directive.ts +123 -0
  97. package/projects/doohbot/src/lib/core/directives/draggable/draggable-dialog.module.ts +9 -0
  98. package/projects/doohbot/src/lib/core/directives/fullscreen/fullscreen.directive.ts +58 -0
  99. package/projects/doohbot/src/lib/core/directives/fullscreen/fullscreen.module.ts +9 -0
  100. package/projects/doohbot/src/lib/core/directives/popout/popout.directive.ts +169 -0
  101. package/projects/doohbot/src/lib/core/directives/popout/popout.module.ts +9 -0
  102. package/projects/doohbot/src/lib/core/directives/resizable/resizable-dialog.directive.ts +197 -0
  103. package/projects/doohbot/src/lib/core/directives/resizable/resizable-dialog.module.ts +9 -0
  104. package/projects/doohbot/src/lib/core/enums/api-request-state.enum.ts +9 -0
  105. package/projects/doohbot/src/lib/core/environments/environment.prod.ts +14 -0
  106. package/projects/doohbot/src/lib/core/environments/environment.ts +14 -0
  107. package/projects/doohbot/src/lib/core/helpers/crypto-helper.service.ts +72 -0
  108. package/projects/doohbot/src/lib/core/http/http-stream.service.ts +105 -0
  109. package/projects/doohbot/src/lib/core/http/http.service.ts +148 -0
  110. package/projects/doohbot/src/lib/core/interceptors/auth.interceptor.ts +118 -0
  111. package/projects/doohbot/src/lib/core/interceptors/license.interceptor.ts +50 -0
  112. package/projects/doohbot/src/lib/core/models/api-config.model.ts +82 -0
  113. package/projects/doohbot/src/lib/core/models/api-request.model.ts +92 -0
  114. package/projects/doohbot/src/lib/core/models/api-response.model.ts +13 -0
  115. package/projects/doohbot/src/lib/core/models/doohbot-config.model.ts +109 -0
  116. package/{lib/core/models/license.model.d.ts → projects/doohbot/src/lib/core/models/license.model.ts} +27 -23
  117. package/projects/doohbot/src/lib/core/models/message.ts +18 -0
  118. package/projects/doohbot/src/lib/core/models/theme-config.model.ts +48 -0
  119. package/projects/doohbot/src/lib/core/services/core-config.service.ts +53 -0
  120. package/projects/doohbot/src/lib/core/services/doohbot-api.service.ts +207 -0
  121. package/projects/doohbot/src/lib/core/services/license.service.ts +171 -0
  122. package/projects/doohbot/src/lib/core/services/markdown.service.ts +73 -0
  123. package/projects/doohbot/src/lib/core/services/theme.service.ts +305 -0
  124. package/{lib/core/types/auth-mode.type.d.ts → projects/doohbot/src/lib/core/types/auth-mode.type.ts} +4 -4
  125. package/{lib/core/types/auth-status.type.d.ts → projects/doohbot/src/lib/core/types/auth-status.type.ts} +5 -4
  126. package/{lib/core/types/chat-stream.type.d.ts → projects/doohbot/src/lib/core/types/chat-stream.type.ts} +4 -4
  127. package/{lib/core/types/message-role.type.d.ts → projects/doohbot/src/lib/core/types/message-role.type.ts} +4 -4
  128. package/{lib/core/types/prompt-mode.type.d.ts → projects/doohbot/src/lib/core/types/prompt-mode.type.ts} +5 -4
  129. package/{lib/core/types/snackbar-error.type.d.ts → projects/doohbot/src/lib/core/types/snackbar-error.type.ts} +5 -4
  130. package/{lib/core/types/tenant-resolution-strategy.type.d.ts → projects/doohbot/src/lib/core/types/tenant-resolution-strategy.type.ts} +4 -4
  131. package/projects/doohbot/src/lib/core/utils/error-handler.util.ts +31 -0
  132. package/projects/doohbot/src/lib/core/utils/logger.service.ts +45 -0
  133. package/projects/doohbot/src/lib/doohbot-input.ts +19 -0
  134. package/projects/doohbot/src/lib/doohbot.component.html +34 -0
  135. package/projects/doohbot/src/lib/doohbot.component.scss +17 -0
  136. package/projects/doohbot/src/lib/doohbot.component.spec.ts +31 -0
  137. package/projects/doohbot/src/lib/doohbot.component.ts +545 -0
  138. package/projects/doohbot/src/lib/elements.ts +25 -0
  139. package/projects/doohbot/src/lib/predefined_messages.ts +14 -0
  140. package/projects/doohbot/src/lib/shared/chips/chips.component.html +9 -0
  141. package/projects/doohbot/src/lib/shared/chips/chips.component.scss +29 -0
  142. package/projects/doohbot/src/lib/shared/chips/chips.component.spec.ts +22 -0
  143. package/projects/doohbot/src/lib/shared/chips/chips.component.ts +20 -0
  144. package/projects/doohbot/src/lib/shared/dialog/dialog.component.html +29 -0
  145. package/projects/doohbot/src/lib/shared/dialog/dialog.component.scss +100 -0
  146. package/projects/doohbot/src/lib/shared/dialog/dialog.component.ts +42 -0
  147. package/projects/doohbot/src/lib/shared/dialog/dialog.service.ts +62 -0
  148. package/projects/doohbot/src/lib/shared/dialog/dialog.utils.ts +102 -0
  149. package/projects/doohbot/src/lib/shared/dropdown-menu/dropdown-menu.component.html +30 -0
  150. package/projects/doohbot/src/lib/shared/dropdown-menu/dropdown-menu.component.scss +53 -0
  151. package/projects/doohbot/src/lib/shared/dropdown-menu/dropdown-menu.component.spec.ts +22 -0
  152. package/projects/doohbot/src/lib/shared/dropdown-menu/dropdown-menu.component.ts +35 -0
  153. package/projects/doohbot/src/lib/shared/input-dialog/input-dialog.component.html +16 -0
  154. package/projects/doohbot/src/lib/shared/input-dialog/input-dialog.component.scss +45 -0
  155. package/projects/doohbot/src/lib/shared/input-dialog/input-dialog.component.ts +46 -0
  156. package/projects/doohbot/src/lib/shared/menu-item/menu-item.component.html +5 -0
  157. package/projects/doohbot/src/lib/shared/menu-item/menu-item.component.scss +0 -0
  158. package/projects/doohbot/src/lib/shared/menu-item/menu-item.component.spec.ts +22 -0
  159. package/projects/doohbot/src/lib/shared/menu-item/menu-item.component.ts +20 -0
  160. package/projects/doohbot/src/lib/shared/pipes/simple-markdown.pipe.ts +19 -0
  161. package/projects/doohbot/src/lib/shared/popout/popout.html +1 -0
  162. package/projects/doohbot/src/lib/shared/popout/popout.scss +0 -0
  163. package/projects/doohbot/src/lib/shared/popout/popout.spec.ts +23 -0
  164. package/projects/doohbot/src/lib/shared/popout/popout.ts +11 -0
  165. package/projects/doohbot/src/lib/shared/snackbar/snackbar.component.html +7 -0
  166. package/projects/doohbot/src/lib/shared/snackbar/snackbar.component.scss +125 -0
  167. package/projects/doohbot/src/lib/shared/snackbar/snackbar.component.spec.ts +21 -0
  168. package/projects/doohbot/src/lib/shared/snackbar/snackbar.component.ts +44 -0
  169. package/projects/doohbot/src/lib/shared/snackbar/snackbar.service.ts +54 -0
  170. package/{lib/shared/snackbar/snackbar.utils.d.ts → projects/doohbot/src/lib/shared/snackbar/snackbar.utils.ts} +49 -33
  171. package/projects/doohbot/src/lib/styles/_theme.scss +132 -0
  172. package/projects/doohbot/src/lib/styles/material-override.scss +302 -0
  173. package/projects/doohbot/src/lib/styles/utility.scss +588 -0
  174. package/projects/doohbot/src/public-api.ts +42 -0
  175. package/projects/doohbot/tsconfig.lib.json +15 -0
  176. package/projects/doohbot/tsconfig.lib.prod.json +11 -0
  177. package/projects/doohbot/tsconfig.spec.json +10 -0
  178. package/proxy.conf.json +8 -0
  179. package/publish.config.js +25 -0
  180. package/scripts/publishing/index.ts +67 -0
  181. package/scripts/publishing/pipeline/01-clean.ts +11 -0
  182. package/scripts/publishing/pipeline/02-validate-pre.ts +8 -0
  183. package/scripts/publishing/pipeline/03-build.ts +7 -0
  184. package/scripts/publishing/pipeline/04-validate-post.ts +8 -0
  185. package/scripts/publishing/pipeline/05-prepare-package.ts +29 -0
  186. package/scripts/publishing/pipeline/06-version.ts +23 -0
  187. package/scripts/publishing/pipeline/07-publish.ts +14 -0
  188. package/scripts/publishing/pipeline/08-cleanup.ts +5 -0
  189. package/scripts/publishing/types.ts +36 -0
  190. package/scripts/publishing/utils/command.ts +15 -0
  191. package/scripts/publishing/utils/config.ts +17 -0
  192. package/scripts/validate.ts +166 -0
  193. package/tsconfig.json +45 -0
  194. package/tsconfig.scripts.json +15 -0
  195. package/esm2022/aakash58-chatbot.mjs +0 -5
  196. package/esm2022/lib/app/chat/chat-ui-state.service.mjs +0 -170
  197. package/esm2022/lib/app/chat/chat.service.mjs +0 -445
  198. package/esm2022/lib/app/chat/components/chat-button/chat-button.component.mjs +0 -50
  199. package/esm2022/lib/app/chat/components/chat-footer/chat-footer.component.mjs +0 -12
  200. package/esm2022/lib/app/chat/components/chat-header/chat-header.component.mjs +0 -66
  201. package/esm2022/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.mjs +0 -186
  202. package/esm2022/lib/app/chat/components/chat-window/chat-window.component.mjs +0 -312
  203. package/esm2022/lib/app/chat/components/message-input/message-input.component.mjs +0 -36
  204. package/esm2022/lib/app/chat/components/message-list/message-list.component.mjs +0 -115
  205. package/esm2022/lib/app/chat/model/chat-history.model.mjs +0 -2
  206. package/esm2022/lib/app/chat/model/chat-request.model.mjs +0 -2
  207. package/esm2022/lib/app/chat/model/chat-response.model.mjs +0 -2
  208. package/esm2022/lib/app/chat/model/chat-session.model.mjs +0 -2
  209. package/esm2022/lib/app/chat/model/chat-stream-message.model.mjs +0 -2
  210. package/esm2022/lib/app/chat/model/chat-stream-response.model.mjs +0 -2
  211. package/esm2022/lib/app/chat/services/chat-api.service.mjs +0 -61
  212. package/esm2022/lib/app/chat/services/chat-audio.service.mjs +0 -50
  213. package/esm2022/lib/app/chat/services/chat-history.service.mjs +0 -252
  214. package/esm2022/lib/app/login/login-form.component.mjs +0 -46
  215. package/esm2022/lib/app/personalization/personalization-dialog.component.mjs +0 -194
  216. package/esm2022/lib/app/personalization/personalization.service.mjs +0 -149
  217. package/esm2022/lib/app/personalization/sections/account/account-section.component.mjs +0 -122
  218. package/esm2022/lib/app/personalization/sections/preferences/color-picker-dialog.component.mjs +0 -86
  219. package/esm2022/lib/app/personalization/sections/preferences/preferences-section.component.mjs +0 -115
  220. package/esm2022/lib/app/personalization/sections/profile/profile-section.component.mjs +0 -29
  221. package/esm2022/lib/app/personalization/sections/settings/setting-section.component.mjs +0 -30
  222. package/esm2022/lib/app/personalization/sections/terms/terms-section.component.mjs +0 -12
  223. package/esm2022/lib/constant/doohbot-constant.mjs +0 -28
  224. package/esm2022/lib/constant/html-entities.mjs +0 -9
  225. package/esm2022/lib/constant/utf8.mjs +0 -10
  226. package/esm2022/lib/core/app-const.mjs +0 -61
  227. package/esm2022/lib/core/auth/account-api.service.mjs +0 -40
  228. package/esm2022/lib/core/auth/auth.service.mjs +0 -391
  229. package/esm2022/lib/core/auth/models/auth-result.model.mjs +0 -3
  230. package/esm2022/lib/core/auth/models/federated-login-request.model.mjs +0 -6
  231. package/esm2022/lib/core/auth/models/login-request.model.mjs +0 -6
  232. package/esm2022/lib/core/auth/storage.service.mjs +0 -110
  233. package/esm2022/lib/core/directives/draggable/draggable-dialog.directive.mjs +0 -112
  234. package/esm2022/lib/core/directives/fullscreen/fullscreen.directive.mjs +0 -55
  235. package/esm2022/lib/core/directives/resizable/resizable-dialog.directive.mjs +0 -179
  236. package/esm2022/lib/core/environments/environment.mjs +0 -15
  237. package/esm2022/lib/core/environments/environment.prod.mjs +0 -15
  238. package/esm2022/lib/core/helpers/crypto-helper.service.mjs +0 -52
  239. package/esm2022/lib/core/http/http-stream.service.mjs +0 -97
  240. package/esm2022/lib/core/http/http.service.mjs +0 -103
  241. package/esm2022/lib/core/interceptors/auth.interceptor.mjs +0 -96
  242. package/esm2022/lib/core/interceptors/license.interceptor.mjs +0 -44
  243. package/esm2022/lib/core/models/api-config.model.mjs +0 -18
  244. package/esm2022/lib/core/models/api-request.model.mjs +0 -2
  245. package/esm2022/lib/core/models/api-response.model.mjs +0 -8
  246. package/esm2022/lib/core/models/doohbot-config.model.mjs +0 -18
  247. package/esm2022/lib/core/models/license.model.mjs +0 -2
  248. package/esm2022/lib/core/models/message.mjs +0 -2
  249. package/esm2022/lib/core/models/theme-config.model.mjs +0 -2
  250. package/esm2022/lib/core/services/core-config.service.mjs +0 -52
  251. package/esm2022/lib/core/services/license.service.mjs +0 -145
  252. package/esm2022/lib/core/services/markdown.service.mjs +0 -64
  253. package/esm2022/lib/core/services/theme.service.mjs +0 -248
  254. package/esm2022/lib/core/types/auth-mode.type.mjs +0 -2
  255. package/esm2022/lib/core/types/auth-status.type.mjs +0 -5
  256. package/esm2022/lib/core/types/chat-stream.type.mjs +0 -2
  257. package/esm2022/lib/core/types/message-role.type.mjs +0 -2
  258. package/esm2022/lib/core/types/prompt-mode.type.mjs +0 -5
  259. package/esm2022/lib/core/types/snackbar-error.type.mjs +0 -5
  260. package/esm2022/lib/core/types/tenant-resolution-strategy.type.mjs +0 -2
  261. package/esm2022/lib/core/utils/logger.service.mjs +0 -42
  262. package/esm2022/lib/doohbot-input.mjs +0 -20
  263. package/esm2022/lib/doohbot.component.mjs +0 -444
  264. package/esm2022/lib/predefined_messages.mjs +0 -15
  265. package/esm2022/lib/shared/chips/chips.component.mjs +0 -28
  266. package/esm2022/lib/shared/dialog/dialog.component.mjs +0 -36
  267. package/esm2022/lib/shared/dialog/dialog.service.mjs +0 -64
  268. package/esm2022/lib/shared/dialog/dialog.utils.mjs +0 -85
  269. package/esm2022/lib/shared/dropdown-menu/dropdown-menu.component.mjs +0 -29
  270. package/esm2022/lib/shared/input-dialog/input-dialog.component.mjs +0 -38
  271. package/esm2022/lib/shared/menu-item/menu-item.component.mjs +0 -24
  272. package/esm2022/lib/shared/pipes/simple-markdown.pipe.mjs +0 -27
  273. package/esm2022/lib/shared/snackbar/snackbar.component.mjs +0 -43
  274. package/esm2022/lib/shared/snackbar/snackbar.service.mjs +0 -46
  275. package/esm2022/lib/shared/snackbar/snackbar.utils.mjs +0 -43
  276. package/esm2022/public-api.mjs +0 -37
  277. package/fesm2022/aakash58-chatbot.mjs +0 -5193
  278. package/fesm2022/aakash58-chatbot.mjs.map +0 -1
  279. package/index.d.ts +0 -5
  280. package/lib/app/chat/chat-ui-state.service.d.ts +0 -96
  281. package/lib/app/chat/chat.service.d.ts +0 -88
  282. package/lib/app/chat/components/chat-button/chat-button.component.d.ts +0 -16
  283. package/lib/app/chat/components/chat-footer/chat-footer.component.d.ts +0 -5
  284. package/lib/app/chat/components/chat-header/chat-header.component.d.ts +0 -24
  285. package/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.d.ts +0 -49
  286. package/lib/app/chat/components/chat-window/chat-window.component.d.ts +0 -107
  287. package/lib/app/chat/components/message-input/message-input.component.d.ts +0 -12
  288. package/lib/app/chat/components/message-list/message-list.component.d.ts +0 -40
  289. package/lib/app/chat/model/chat-history.model.d.ts +0 -51
  290. package/lib/app/chat/model/chat-request.model.d.ts +0 -10
  291. package/lib/app/chat/model/chat-response.model.d.ts +0 -9
  292. package/lib/app/chat/model/chat-session.model.d.ts +0 -12
  293. package/lib/app/chat/model/chat-stream-response.model.d.ts +0 -10
  294. package/lib/app/chat/services/chat-api.service.d.ts +0 -30
  295. package/lib/app/chat/services/chat-audio.service.d.ts +0 -19
  296. package/lib/app/chat/services/chat-history.service.d.ts +0 -53
  297. package/lib/app/login/login-form.component.d.ts +0 -20
  298. package/lib/app/personalization/personalization-dialog.component.d.ts +0 -53
  299. package/lib/app/personalization/personalization.service.d.ts +0 -66
  300. package/lib/app/personalization/sections/account/account-section.component.d.ts +0 -30
  301. package/lib/app/personalization/sections/preferences/color-picker-dialog.component.d.ts +0 -17
  302. package/lib/app/personalization/sections/preferences/preferences-section.component.d.ts +0 -27
  303. package/lib/app/personalization/sections/profile/profile-section.component.d.ts +0 -17
  304. package/lib/app/personalization/sections/settings/setting-section.component.d.ts +0 -10
  305. package/lib/app/personalization/sections/terms/terms-section.component.d.ts +0 -5
  306. package/lib/constant/doohbot-constant.d.ts +0 -12
  307. package/lib/constant/html-entities.d.ts +0 -8
  308. package/lib/constant/utf8.d.ts +0 -9
  309. package/lib/core/app-const.d.ts +0 -11
  310. package/lib/core/auth/account-api.service.d.ts +0 -20
  311. package/lib/core/auth/auth.service.d.ts +0 -90
  312. package/lib/core/auth/models/auth-result.model.d.ts +0 -4
  313. package/lib/core/auth/models/federated-login-request.model.d.ts +0 -5
  314. package/lib/core/auth/models/login-request.model.d.ts +0 -6
  315. package/lib/core/auth/storage.service.d.ts +0 -21
  316. package/lib/core/directives/draggable/draggable-dialog.directive.d.ts +0 -23
  317. package/lib/core/directives/fullscreen/fullscreen.directive.d.ts +0 -14
  318. package/lib/core/directives/resizable/resizable-dialog.directive.d.ts +0 -30
  319. package/lib/core/environments/environment.d.ts +0 -7
  320. package/lib/core/environments/environment.prod.d.ts +0 -7
  321. package/lib/core/helpers/crypto-helper.service.d.ts +0 -12
  322. package/lib/core/http/http-stream.service.d.ts +0 -18
  323. package/lib/core/http/http.service.d.ts +0 -20
  324. package/lib/core/interceptors/auth.interceptor.d.ts +0 -18
  325. package/lib/core/interceptors/license.interceptor.d.ts +0 -11
  326. package/lib/core/models/api-config.model.d.ts +0 -58
  327. package/lib/core/models/api-request.model.d.ts +0 -77
  328. package/lib/core/models/api-response.model.d.ts +0 -6
  329. package/lib/core/models/doohbot-config.model.d.ts +0 -81
  330. package/lib/core/models/message.d.ts +0 -16
  331. package/lib/core/models/theme-config.model.d.ts +0 -28
  332. package/lib/core/services/core-config.service.d.ts +0 -23
  333. package/lib/core/services/license.service.d.ts +0 -33
  334. package/lib/core/services/markdown.service.d.ts +0 -8
  335. package/lib/core/services/theme.service.d.ts +0 -40
  336. package/lib/core/utils/logger.service.d.ts +0 -11
  337. package/lib/doohbot-input.d.ts +0 -19
  338. package/lib/doohbot.component.d.ts +0 -108
  339. package/lib/predefined_messages.d.ts +0 -2
  340. package/lib/shared/chips/chips.component.d.ts +0 -10
  341. package/lib/shared/dialog/dialog.component.d.ts +0 -19
  342. package/lib/shared/dialog/dialog.service.d.ts +0 -29
  343. package/lib/shared/dialog/dialog.utils.d.ts +0 -41
  344. package/lib/shared/dropdown-menu/dropdown-menu.component.d.ts +0 -11
  345. package/lib/shared/input-dialog/input-dialog.component.d.ts +0 -20
  346. package/lib/shared/menu-item/menu-item.component.d.ts +0 -9
  347. package/lib/shared/pipes/simple-markdown.pipe.d.ts +0 -10
  348. package/lib/shared/snackbar/snackbar.component.d.ts +0 -14
  349. package/lib/shared/snackbar/snackbar.service.d.ts +0 -19
  350. package/public-api.d.ts +0 -11
  351. /package/{src → projects/doohbot/src}/assets/bot.mp3 +0 -0
@@ -0,0 +1,82 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { ChatHistoryData, ChatHistoryRequest, ChatMessage } from '../model/chat-history.model';
4
+ import { HttpStreamService } from '../../../core/http/http-stream.service';
5
+ import { HttpService } from '../../../core/http/http.service';
6
+ import { ApiResponse } from '../../../core/models/api-response.model';
7
+ import logger from '../../../core/utils/logger.service';
8
+ import { ChatRequest } from '../model/chat-request.model';
9
+ import { ChatResponse } from '../model/chat-response.model';
10
+ import { ChatStreamResponse } from '../model/chat-stream-response.model';
11
+
12
+ @Injectable({
13
+ providedIn: 'root',
14
+ })
15
+ export class ChatApiService {
16
+ get apiUrl(): string {
17
+ return this.http.apiUrl;
18
+ }
19
+
20
+ constructor(
21
+ private http: HttpService,
22
+ private httpStreamService: HttpStreamService,
23
+ ) {
24
+ logger.log('ChatApiService: Initialized');
25
+ }
26
+
27
+ /**
28
+ * Send chat message and get full response
29
+ */
30
+ sendMessage(request?: ChatRequest, showLoader = false): Observable<ApiResponse<ChatResponse>> {
31
+ return this.http.post('chats/ask', request, showLoader);
32
+ }
33
+
34
+ /**
35
+ * Send chat message and get streaming response
36
+ */
37
+ sendMessageStream(request: ChatRequest): Observable<ChatStreamResponse> {
38
+ return this.httpStreamService.createHttpStream(`${this.apiUrl}chats/stream`, request);
39
+ }
40
+
41
+ getChatHistory(
42
+ request: ChatHistoryRequest,
43
+ showLoader = false,
44
+ ): Observable<ApiResponse<ChatHistoryData>> {
45
+ return this.http.post('chats/sessions', request, showLoader);
46
+ }
47
+
48
+ getChatSession(
49
+ chatSessionId: string,
50
+ showLoader = false,
51
+ ): Observable<ApiResponse<ChatMessage[]>> {
52
+ return this.http.get(`chats/sessions/${chatSessionId}`, undefined, showLoader);
53
+ }
54
+
55
+ // deleteChatSession(chatSessionId: string, showLoader = false): Observable<ApiResponse<void>> {
56
+ // return this.http.delete(`chats/sessions/${chatSessionId}`, undefined, showLoader);
57
+ // }
58
+
59
+ // deleteChatSession(chatSessionId: string, showLoader = false): Observable<ApiResponse<void>> {
60
+ // return this.clearChatHistory(
61
+ // { chat_session_ids: [chatSessionId], delete_all: false },
62
+ // showLoader,
63
+ // );
64
+ // }
65
+
66
+ deleteChatSession(chatSessionId: string, showLoader = false): Observable<ApiResponse<void>> {
67
+ const body = { chat_session_ids: [chatSessionId], delete_all: false };
68
+ return this.http.delete('chats/sessions', body, showLoader);
69
+ }
70
+
71
+ updateChatTitle(
72
+ chatSessionId: string,
73
+ title: string,
74
+ showLoader = false,
75
+ ): Observable<ApiResponse<void>> {
76
+ return this.http.patch(`chats/sessions/${chatSessionId}/title`, { title }, showLoader);
77
+ }
78
+
79
+ clearChatHistory(request?: object, showLoader = false): Observable<ApiResponse<void>> {
80
+ return this.http.delete('chats/sessions', request, showLoader);
81
+ }
82
+ }
@@ -0,0 +1,44 @@
1
+ import { Injectable } from '@angular/core';
2
+ import logger from '../../../core/utils/logger.service';
3
+
4
+ @Injectable({
5
+ providedIn: 'root',
6
+ })
7
+ export class ChatAudioService {
8
+ private audioUnlocked = false;
9
+
10
+ constructor() { }
11
+
12
+ /**
13
+ * Unlock audio playback (required for autoplay in browsers)
14
+ */
15
+ public unlockAudio(): void {
16
+ if (this.audioUnlocked) return;
17
+ const audio = new Audio();
18
+ audio.volume = 1.0;
19
+ audio
20
+ .play()
21
+ .then(() => (this.audioUnlocked = true))
22
+ .catch(() => { });
23
+ }
24
+
25
+ /**
26
+ * Play bot message sound
27
+ */
28
+ public playBotSound(): void {
29
+ if (!this.audioUnlocked) return;
30
+ try {
31
+ const audio = new Audio('assets/bot.mp3');
32
+ audio.play();
33
+ } catch (error) {
34
+ logger.error('Error playing bot sound:', error);
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Check if audio is unlocked
40
+ */
41
+ public isAudioUnlocked(): boolean {
42
+ return this.audioUnlocked;
43
+ }
44
+ }
@@ -0,0 +1,303 @@
1
+ import { Injectable, inject, signal } from '@angular/core';
2
+ import { Observable, of, catchError, map } from 'rxjs';
3
+ import { ChatApiService } from './chat-api.service';
4
+ import { ChatSession } from '../model/chat-session.model';
5
+ import { Message } from '../../../core/models/message';
6
+ import { SnackbarUtils } from '../../../shared/snackbar/snackbar.utils';
7
+ import logger from '../../../core/utils/logger.service';
8
+ import { ChatSessionResponse, ChatMessage } from '../model/chat-history.model';
9
+
10
+ @Injectable({
11
+ providedIn: 'root',
12
+ })
13
+ export class ChatHistoryService {
14
+ private chatApiService = inject(ChatApiService);
15
+
16
+ // History State Signals
17
+ public sessions = signal<ChatSession[]>([]);
18
+ public isLoading = signal<boolean>(false);
19
+ public isLoadingMore = signal<boolean>(false);
20
+ public hasMore = signal<boolean>(true);
21
+ public historyOffset = signal<number>(0);
22
+ public isCacheValid = signal<boolean>(false);
23
+ public processingSessionId = signal<string | null>(null);
24
+
25
+ /**
26
+ * Map API session response to ChatSession model
27
+ */
28
+ public mapSessionResponseToSession(
29
+ sessionResponse: ChatSessionResponse,
30
+ userId: string,
31
+ ): ChatSession {
32
+ // Use last_message_at or created_at or current time
33
+ const timestamp = sessionResponse.last_message_at
34
+ ? new Date(sessionResponse.last_message_at)
35
+ : sessionResponse.created_at
36
+ ? new Date(sessionResponse.created_at)
37
+ : new Date();
38
+
39
+ logger.log('Mapping session response:', sessionResponse);
40
+
41
+ // Map messages from the session if they exist
42
+ let messages: Message[] = [];
43
+ if (sessionResponse.messages && Array.isArray(sessionResponse.messages)) {
44
+ messages = sessionResponse.messages.map((msg: ChatMessage) => ({
45
+ id: msg.message_id || '',
46
+ sender: msg.role,
47
+ text: msg.content,
48
+ completed: true,
49
+ isHistory: true,
50
+ timestamp: new Date(msg.created_at),
51
+ }));
52
+ }
53
+
54
+ // Use response_id as primary ID, fallback to chat_session_id
55
+ const sessionId = sessionResponse.response_id || sessionResponse.chat_session_id || '';
56
+
57
+ return {
58
+ id: sessionId,
59
+ timestamp: timestamp,
60
+ title: sessionResponse.title || 'Previous Conversation',
61
+ userId: userId,
62
+ messages: messages,
63
+ };
64
+ }
65
+
66
+ /**
67
+ * Load all chat sessions for a specific user
68
+ */
69
+ loadSessions(userId: string, forceRefresh: boolean = false): void {
70
+ logger.log('loadSessions called', { userId, forceRefresh });
71
+
72
+ if (this.isCacheValid() && !forceRefresh && this.sessions().length > 0) {
73
+ logger.log('Cache is valid and sessions already loaded. Skipping API call.');
74
+ return;
75
+ }
76
+
77
+ this.isLoading.set(true);
78
+ this.historyOffset.set(0);
79
+ logger.log('Fetching chat history from API...');
80
+
81
+ this.chatApiService
82
+ .getChatHistory({ limit: 50, offset: 0 })
83
+ .pipe(
84
+ map((response) => {
85
+ logger.log('Chat history response received', response);
86
+
87
+ if (response && response.success && response.data && response.data.sessions) {
88
+ const remoteSessions = response.data.sessions.map((session: ChatSessionResponse) =>
89
+ this.mapSessionResponseToSession(session, userId),
90
+ );
91
+ const hasMore =
92
+ response.data.offset + response.data.sessions.length < response.data.total;
93
+
94
+ logger.log(`Mapped ${remoteSessions.length} sessions. Has more: ${hasMore}`);
95
+ return { sessions: remoteSessions, hasMore };
96
+ }
97
+
98
+ logger.warn('No sessions found in response');
99
+ return { sessions: [], hasMore: false };
100
+ }),
101
+ catchError((err) => {
102
+ SnackbarUtils.error('Failed to load history');
103
+ logger.error('ChatHistoryService: Failed to load history:', err);
104
+ return of({ sessions: [], hasMore: false });
105
+ }),
106
+ )
107
+ .subscribe({
108
+ next: (result) => {
109
+ this.sessions.set(result.sessions);
110
+ this.hasMore.set(result.hasMore);
111
+ this.historyOffset.set(result.sessions.length);
112
+ this.isCacheValid.set(true);
113
+ this.isLoading.set(false);
114
+
115
+ logger.log(`Loaded ${result.sessions.length} sessions. Cache valid: true`);
116
+ },
117
+ error: () => {
118
+ this.isLoading.set(false);
119
+ logger.error('loadSessions: Unexpected error in subscription');
120
+ },
121
+ });
122
+ }
123
+
124
+ /**
125
+ * Load more sessions for infinite scroll
126
+ */
127
+ loadMoreSessions(userId: string): void {
128
+ if (!this.hasMore() || this.isLoadingMore()) return;
129
+
130
+ const currentOffset = this.historyOffset();
131
+ this.isLoadingMore.set(true);
132
+
133
+ this.chatApiService
134
+ .getChatHistory({ limit: 50, offset: currentOffset })
135
+ .pipe(
136
+ map((response) => {
137
+ if (response && response.success && response.data && response.data.sessions) {
138
+ const remoteSessions = response.data.sessions.map((session: ChatSessionResponse) =>
139
+ this.mapSessionResponseToSession(session, userId),
140
+ );
141
+ const hasMore =
142
+ response.data.offset + response.data.sessions.length < response.data.total;
143
+ return { sessions: remoteSessions, hasMore };
144
+ }
145
+ return { sessions: [], hasMore: false };
146
+ }),
147
+ catchError((err) => {
148
+ SnackbarUtils.error('Failed to load more history');
149
+ logger.error('ChatHistoryService: Failed to load more history:', err);
150
+ return of({ sessions: [], hasMore: false });
151
+ }),
152
+ )
153
+ .subscribe({
154
+ next: (result) => {
155
+ const updatedSessions = [...this.sessions(), ...result.sessions];
156
+ this.sessions.set(updatedSessions);
157
+ this.hasMore.set(result.hasMore);
158
+ this.historyOffset.set(currentOffset + result.sessions.length);
159
+ this.isLoadingMore.set(false);
160
+ },
161
+ error: () => this.isLoadingMore.set(false),
162
+ });
163
+ }
164
+
165
+ /**
166
+ * Load messages for a specific session
167
+ */
168
+ loadSessionMessages(sessionId: string): Observable<Message[]> {
169
+ return this.chatApiService.getChatSession(sessionId).pipe(
170
+ map((response) => {
171
+ if (response.success && response.data) {
172
+ // Sort messages by created_at timestamp to ensure chronological order (user, assistant, user, assistant...)
173
+ function sortMessages(messages: any[]) {
174
+ const users = messages.filter((m) => m.role === 'user');
175
+ const assistants = messages.filter((m) => m.role === 'assistant');
176
+
177
+ const result = [];
178
+ const maxLength = Math.max(users.length, assistants.length);
179
+
180
+ for (let i = 0; i < maxLength; i++) {
181
+ if (users[i]) result.push(users[i]);
182
+ if (assistants[i]) result.push(assistants[i]);
183
+ }
184
+
185
+ return result;
186
+ }
187
+
188
+ const sortedData = sortMessages(response.data);
189
+
190
+ return sortedData.map((msg: ChatMessage) => ({
191
+ id: msg.message_id || '',
192
+ sender: msg.role,
193
+ text: msg.content,
194
+ completed: true,
195
+ isHistory: true,
196
+ timestamp: new Date(msg.created_at),
197
+ }));
198
+ }
199
+ return [];
200
+ }),
201
+ catchError((err) => {
202
+ logger.error('ChatHistoryService: Failed to load messages:', err);
203
+ SnackbarUtils.error('Failed to load messages');
204
+ return of([]);
205
+ }),
206
+ );
207
+ }
208
+
209
+ /**
210
+ * Delete a specific session
211
+ */
212
+ deleteSession(sessionId: string, userId: string): Observable<void> {
213
+ this.processingSessionId.set(sessionId);
214
+ return this.chatApiService.deleteChatSession(sessionId).pipe(
215
+ map((response) => {
216
+ if (response && response.success) {
217
+ this.sessions.update((prev) => prev.filter((s) => s.id !== sessionId));
218
+ SnackbarUtils.success('Conversation deleted successfully');
219
+ }
220
+ }),
221
+ catchError((err) => {
222
+ SnackbarUtils.error('Failed to delete conversation');
223
+ logger.error('ChatHistoryService: Failed to delete session', err);
224
+ throw err;
225
+ }),
226
+ map(() => {
227
+ this.processingSessionId.set(null);
228
+ }),
229
+ );
230
+ }
231
+
232
+ /**
233
+ * Delete all history
234
+ */
235
+ deleteAllHistory(userId: string): Observable<void> {
236
+ this.isLoading.set(true);
237
+ return this.chatApiService.clearChatHistory({ delete_all: true }).pipe(
238
+ map((response) => {
239
+ if (response && response.success) {
240
+ this.sessions.set([]);
241
+ this.isCacheValid.set(false);
242
+ SnackbarUtils.success('Chat history cleared');
243
+ }
244
+ }),
245
+ catchError((err) => {
246
+ SnackbarUtils.error('Failed to clear history');
247
+ logger.error('ChatHistoryService: Failed to clear history', err);
248
+ throw err;
249
+ }),
250
+ map(() => {
251
+ this.isLoading.set(false);
252
+ }),
253
+ );
254
+ }
255
+
256
+ /**
257
+ * Update session title
258
+ */
259
+ updateSessionTitle(sessionId: string, newTitle: string, userId: string): Observable<boolean> {
260
+ this.processingSessionId.set(sessionId);
261
+ return this.chatApiService.updateChatTitle(sessionId, newTitle).pipe(
262
+ map((response) => {
263
+ const success = !!(response && response.success);
264
+ if (success) {
265
+ this.sessions.update((prev) =>
266
+ prev.map((s) => (s.id === sessionId ? { ...s, title: newTitle } : s)),
267
+ );
268
+ }
269
+ this.processingSessionId.set(null);
270
+ SnackbarUtils.success('Title updated successfully');
271
+ return success;
272
+ }),
273
+ catchError((err) => {
274
+ SnackbarUtils.error('Failed to update title');
275
+ logger.error('ChatHistoryService: Failed to update title', err);
276
+ this.processingSessionId.set(null);
277
+ return of(false);
278
+ }),
279
+ );
280
+ }
281
+
282
+ /**
283
+ * Invalidate cache
284
+ */
285
+ invalidateCache(): void {
286
+ this.isCacheValid.set(false);
287
+ this.historyOffset.set(0);
288
+ this.hasMore.set(true);
289
+ }
290
+
291
+ /**
292
+ * Clear all history state
293
+ */
294
+ clearState(): void {
295
+ this.sessions.set([]);
296
+ this.isLoading.set(false);
297
+ this.isLoadingMore.set(false);
298
+ this.hasMore.set(true);
299
+ this.historyOffset.set(0);
300
+ this.isCacheValid.set(false);
301
+ this.processingSessionId.set(null);
302
+ }
303
+ }
@@ -0,0 +1,80 @@
1
+ <form
2
+ class="login-form-container"
3
+ (ngSubmit)="onLoginSubmit()"
4
+ autocomplete="on"
5
+ #loginForm="ngForm"
6
+ >
7
+ <h3 class="login-title">Login to Doohbot</h3>
8
+
9
+ <div class="login-fields">
10
+ <!-- Username Field -->
11
+ <div class="input-group">
12
+ <label class="input-label">Username</label>
13
+ <input
14
+ type="text"
15
+ name="username"
16
+ [(ngModel)]="loginUsername"
17
+ #username="ngModel"
18
+ placeholder="Enter your username"
19
+ class="login-input"
20
+ required
21
+ autocomplete="username"
22
+ />
23
+ @if (username.invalid && (username.dirty || username.touched)) {
24
+ <span class="error-text"> Username is required </span>
25
+ }
26
+ </div>
27
+
28
+ <!-- Password Field -->
29
+ <div class="input-group">
30
+ <label class="input-label">Password</label>
31
+ <div class="password-wrapper">
32
+ <input
33
+ [type]="showPassword ? 'text' : 'password'"
34
+ name="password"
35
+ [(ngModel)]="loginPassword"
36
+ #password="ngModel"
37
+ placeholder="Enter your password"
38
+ class="login-input password-input"
39
+ required
40
+ autocomplete="current-password"
41
+ />
42
+
43
+ <button
44
+ type="button"
45
+ class="password-toggle-btn"
46
+ (click)="togglePasswordVisibility()"
47
+ tabindex="-1"
48
+ >
49
+ <mat-icon>
50
+ {{ showPassword ? 'visibility' : 'visibility_off' }}
51
+ </mat-icon>
52
+ </button>
53
+ </div>
54
+ @if (password.invalid && (password.dirty || password.touched)) {
55
+ <span class="error-text"> Password is required </span>
56
+ }
57
+ </div>
58
+
59
+ <!-- Remember Me -->
60
+ <div class="remember-me-container">
61
+ <label class="remember-me-label">
62
+ <input
63
+ type="checkbox"
64
+ name="rememberMe"
65
+ [(ngModel)]="rememberMe"
66
+ class="remember-me-checkbox"
67
+ />
68
+ <span class="remember-me-text">Remember me</span>
69
+ </label>
70
+ </div>
71
+ </div>
72
+
73
+ <div class="login-actions">
74
+ <button type="button" (click)="onCancel()" class="auth-btn secondary">Cancel</button>
75
+
76
+ <button type="submit" class="auth-btn primary" [disabled]="loginForm.invalid || isLoggingIn">
77
+ {{ isLoggingIn ? 'Logging in...' : 'Login' }}
78
+ </button>
79
+ </div>
80
+ </form>
@@ -0,0 +1,189 @@
1
+ .login-form-container {
2
+ padding: 30px;
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: 20px;
6
+ height: 100%;
7
+ justify-content: center;
8
+ align-items: center;
9
+ margin: 0 auto; // Center horizontally
10
+ box-sizing: border-box; // Include padding/border in width/height
11
+ max-width: 400px; // Set a maximum width
12
+ width: 100%; // Full width up to max-width
13
+ animation: fadeIn 0.3s ease-in-out;
14
+
15
+ .login-title {
16
+ text-align: center;
17
+ margin: 0 0 10px 0;
18
+ font-size: 1.5em;
19
+ color: var(--text-color);
20
+ font-family: var(--font-family);
21
+ font-weight: 600;
22
+ }
23
+
24
+ .login-fields {
25
+ display: flex;
26
+ flex-direction: column;
27
+ gap: 15px;
28
+ width: 100%;
29
+
30
+ .login-input {
31
+ padding: 10px 12px;
32
+ border-radius: 8px;
33
+ border: 1px solid var(--border-color);
34
+ font-size: 0.9em;
35
+ background: var(--background-color);
36
+ color: var(--text-color);
37
+ width: 100%; // Full width
38
+ box-sizing: border-box; // Ensure padding doesn’t increase total width
39
+
40
+ &:focus {
41
+ outline: none;
42
+ background-color: var(--background-color);
43
+ border-color: var(--primary-color);
44
+ }
45
+ }
46
+
47
+ .password-wrapper {
48
+ position: relative;
49
+ display: flex;
50
+ align-items: center;
51
+
52
+ .login-input {
53
+ width: 100%;
54
+ padding-right: 40px; // Space for toggle icon
55
+ box-sizing: border-box; // Ensure padding doesn’t increase total width
56
+ }
57
+
58
+ .password-toggle-btn {
59
+ position: absolute;
60
+ right: 8px;
61
+ background: transparent;
62
+ border: none;
63
+ cursor: pointer;
64
+ display: flex;
65
+ align-items: center;
66
+ justify-content: center;
67
+ padding: 4px;
68
+ color: var(--text-color);
69
+ opacity: 0.6;
70
+ transition: opacity 0.2s;
71
+
72
+ &:hover {
73
+ opacity: 1;
74
+ }
75
+
76
+ mat-icon {
77
+ font-size: 20px;
78
+ width: 20px;
79
+ height: 20px;
80
+ }
81
+ }
82
+ }
83
+
84
+ .remember-me-container {
85
+ display: flex;
86
+ align-items: center;
87
+ margin-top: -5px;
88
+ user-select: none;
89
+
90
+ .remember-me-label {
91
+ display: flex;
92
+ align-items: center;
93
+ gap: 8px;
94
+ cursor: pointer;
95
+ padding: 4px 0;
96
+ }
97
+
98
+ .remember-me-checkbox {
99
+ width: 14px;
100
+ height: 14px;
101
+ cursor: pointer;
102
+ accent-color: var(--primary-color);
103
+ margin: 0;
104
+ }
105
+
106
+ .remember-me-text {
107
+ font-size: 0.8em;
108
+ color: var(--text-color);
109
+ font-family: var(--font-family);
110
+ font-weight: 300;
111
+ }
112
+ }
113
+ }
114
+
115
+ .login-actions {
116
+ display: flex;
117
+ justify-content: center;
118
+ gap: 10px;
119
+ margin-top: 10px;
120
+ }
121
+
122
+ .input-group {
123
+ display: flex;
124
+ flex-direction: column;
125
+ gap: 6px; // space between label and input
126
+ text-align: left;
127
+ width: 100%;
128
+ }
129
+
130
+ .input-label {
131
+ font-size: 0.85em;
132
+ color: var(--text-color);
133
+ font-family: var(--font-family);
134
+ font-weight: 500;
135
+ margin-left: 2px;
136
+ }
137
+
138
+ .error-text {
139
+ font-size: 0.6em;
140
+ color: var(--red);
141
+ margin-top: 2px;
142
+ margin-left: 2px;
143
+ font-family: var(--font-family);
144
+ }
145
+ }
146
+
147
+ .auth-btn {
148
+ padding: 8px 18px;
149
+ border-radius: 20px;
150
+ cursor: pointer;
151
+ font-size: 0.9em;
152
+ font-weight: 500;
153
+ transition: all 0.2s ease;
154
+
155
+ &.primary {
156
+ background: var(--primary-color);
157
+ color: var(--white);
158
+ border: 1px solid var(--primary-color);
159
+
160
+ &:hover {
161
+ opacity: 0.9;
162
+ }
163
+
164
+ &:disabled {
165
+ opacity: 0.5;
166
+ cursor: not-allowed;
167
+ }
168
+ }
169
+
170
+ &.secondary {
171
+ background: transparent;
172
+ color: var(--text-alt-color);
173
+ border: 1px solid var(--primary-color);
174
+
175
+ &:hover {
176
+ opacity: 0.9;
177
+ }
178
+ }
179
+ }
180
+
181
+ @keyframes fadeIn {
182
+ from {
183
+ opacity: 0;
184
+ }
185
+
186
+ to {
187
+ opacity: 1;
188
+ }
189
+ }