@aakash58/chatbot 1.1.20 → 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
@@ -1,112 +0,0 @@
1
- import { Directive, HostListener, Input, } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class DraggableDialogDirective {
4
- constructor(el, renderer) {
5
- this.el = el;
6
- this.renderer = renderer;
7
- this.isDragging = false;
8
- this.startX = 0;
9
- this.startY = 0;
10
- this.offsetX = 0;
11
- this.offsetY = 0;
12
- this.enableDrag = false;
13
- }
14
- ngOnInit() {
15
- this.updateDragState();
16
- }
17
- ngOnChanges(changes) {
18
- if (changes['enableDrag']) {
19
- this.updateDragState();
20
- }
21
- }
22
- updateDragState() {
23
- if (this.enableDrag) {
24
- if (this.dragHandleSelector) {
25
- this.dragHandle = this.el.nativeElement.querySelector(this.dragHandleSelector);
26
- }
27
- else {
28
- this.dragHandle = this.el.nativeElement; // fallback
29
- }
30
- if (this.dragHandle) {
31
- this.renderer.setStyle(this.dragHandle, 'cursor', 'move');
32
- }
33
- }
34
- else {
35
- if (this.dragHandle) {
36
- this.renderer.setStyle(this.dragHandle, 'cursor', 'default');
37
- }
38
- // We don't need to unset dragHandle, just ensure the cursor is reset and the mousedown check respects the flag?
39
- // Actually, the mousedown listener is always active. We should check enableDrag inside mousedown.
40
- }
41
- }
42
- onMouseDown(event) {
43
- if (!this.enableDrag)
44
- return;
45
- if (event.defaultPrevented)
46
- return; // Respect other handlers (like resize)
47
- if (!this.dragHandle)
48
- return;
49
- const target = event.target;
50
- // Strict check if handle is explicitly provided via selector, ensuring we only drag when clicking that specific handle
51
- if (this.dragHandleSelector &&
52
- target !== this.dragHandle &&
53
- !this.dragHandle.contains(target)) {
54
- return;
55
- }
56
- // If using the host element as the handle (no selector), allow dragging from children
57
- // BUT exclude specific interactive elements to ensure usability
58
- if (!this.dragHandleSelector) {
59
- // Check if target is a resize handle (has class or data-dir)
60
- if (target.hasAttribute('data-dir') || target.classList.contains('doohbot-resize-handle'))
61
- return;
62
- if (!this.dragHandle.contains(target))
63
- return;
64
- // Prevent dragging when interacting with controls
65
- const tagName = target.tagName;
66
- if (['BUTTON', 'INPUT', 'TEXTAREA', 'A', 'SELECT', 'MAT-ICON'].includes(tagName))
67
- return;
68
- // Optional: explicit opt-out class
69
- if (target.classList.contains('no-drag'))
70
- return;
71
- }
72
- this.isDragging = true;
73
- this.startX = event.clientX - this.offsetX;
74
- this.startY = event.clientY - this.offsetY;
75
- event.preventDefault();
76
- event.stopImmediatePropagation();
77
- }
78
- onMouseMove(event) {
79
- if (!this.isDragging)
80
- return;
81
- this.offsetX = event.clientX - this.startX;
82
- this.offsetY = event.clientY - this.startY;
83
- this.renderer.setStyle(this.el.nativeElement, 'transform', `translate(${this.offsetX}px, ${this.offsetY}px)`);
84
- }
85
- onMouseUp() {
86
- this.isDragging = false;
87
- }
88
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DraggableDialogDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
89
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: DraggableDialogDirective, isStandalone: true, selector: "[draggableDialog]", inputs: { dragHandleSelector: ["dragHandle", "dragHandleSelector"], enableDrag: "enableDrag" }, host: { listeners: { "mousedown": "onMouseDown($event)", "document:mousemove": "onMouseMove($event)", "document:mouseup": "onMouseUp()" } }, usesOnChanges: true, ngImport: i0 }); }
90
- }
91
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DraggableDialogDirective, decorators: [{
92
- type: Directive,
93
- args: [{
94
- selector: '[draggableDialog]',
95
- standalone: true,
96
- }]
97
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { dragHandleSelector: [{
98
- type: Input,
99
- args: ['dragHandle']
100
- }], enableDrag: [{
101
- type: Input
102
- }], onMouseDown: [{
103
- type: HostListener,
104
- args: ['mousedown', ['$event']]
105
- }], onMouseMove: [{
106
- type: HostListener,
107
- args: ['document:mousemove', ['$event']]
108
- }], onMouseUp: [{
109
- type: HostListener,
110
- args: ['document:mouseup', []]
111
- }] } });
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLWRpYWxvZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvY29yZS9kaXJlY3RpdmVzL2RyYWdnYWJsZS9kcmFnZ2FibGUtZGlhbG9nLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEdBS04sTUFBTSxlQUFlLENBQUM7O0FBTXZCLE1BQU0sT0FBTyx3QkFBd0I7SUFZbkMsWUFDVSxFQUFjLEVBQ2QsUUFBbUI7UUFEbkIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFickIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUNYLFlBQU8sR0FBRyxDQUFDLENBQUM7UUFDWixZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBR1gsZUFBVSxHQUFHLEtBQUssQ0FBQztJQU96QixDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDaEY7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVc7YUFDckQ7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzNEO1NBQ0Y7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDOUQ7WUFDRCxnSEFBZ0g7WUFDaEgsa0dBQWtHO1NBQ25HO0lBQ0gsQ0FBQztJQUdELFdBQVcsQ0FBQyxLQUFpQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBQzdCLElBQUksS0FBSyxDQUFDLGdCQUFnQjtZQUFFLE9BQU8sQ0FBQyx1Q0FBdUM7UUFFM0UsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUU3QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztRQUUzQyx1SEFBdUg7UUFDdkgsSUFDRSxJQUFJLENBQUMsa0JBQWtCO1lBQ3ZCLE1BQU0sS0FBSyxJQUFJLENBQUMsVUFBVTtZQUMxQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUNqQztZQUNBLE9BQU87U0FDUjtRQUVELHNGQUFzRjtRQUN0RixnRUFBZ0U7UUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM1Qiw2REFBNkQ7WUFDN0QsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDO2dCQUN2RixPQUFPO1lBRVQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFBRSxPQUFPO1lBRTlDLGtEQUFrRDtZQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQy9CLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQUUsT0FBTztZQUV6RixtQ0FBbUM7WUFDbkMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7Z0JBQUUsT0FBTztTQUNsRDtRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzNDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBRTNDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBR0QsV0FBVyxDQUFDLEtBQWlCO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUNyQixXQUFXLEVBQ1gsYUFBYSxJQUFJLENBQUMsT0FBTyxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FDbEQsQ0FBQztJQUNKLENBQUM7SUFHRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQzsrR0ExR1Usd0JBQXdCO21HQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBSnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3VHQVFzQixrQkFBa0I7c0JBQXRDLEtBQUs7dUJBQUMsWUFBWTtnQkFDVixVQUFVO3NCQUFsQixLQUFLO2dCQXVDTixXQUFXO3NCQURWLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTRDckMsV0FBVztzQkFEVixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWU5QyxTQUFTO3NCQURSLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tkcmFnZ2FibGVEaWFsb2ddJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJhZ2dhYmxlRGlhbG9nRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIHByaXZhdGUgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgc3RhcnRYID0gMDtcclxuICBwcml2YXRlIHN0YXJ0WSA9IDA7XHJcbiAgcHJpdmF0ZSBvZmZzZXRYID0gMDtcclxuICBwcml2YXRlIG9mZnNldFkgPSAwO1xyXG5cclxuICBASW5wdXQoJ2RyYWdIYW5kbGUnKSBkcmFnSGFuZGxlU2VsZWN0b3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBlbmFibGVEcmFnID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgZHJhZ0hhbmRsZTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy51cGRhdGVEcmFnU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWydlbmFibGVEcmFnJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVEcmFnU3RhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRHJhZ1N0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlRHJhZykge1xyXG4gICAgICBpZiAodGhpcy5kcmFnSGFuZGxlU2VsZWN0b3IpIHtcclxuICAgICAgICB0aGlzLmRyYWdIYW5kbGUgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmRyYWdIYW5kbGVTZWxlY3Rvcik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kcmFnSGFuZGxlID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50OyAvLyBmYWxsYmFja1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRyYWdIYW5kbGUpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZHJhZ0hhbmRsZSwgJ2N1cnNvcicsICdtb3ZlJyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmRyYWdIYW5kbGUpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZHJhZ0hhbmRsZSwgJ2N1cnNvcicsICdkZWZhdWx0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byB1bnNldCBkcmFnSGFuZGxlLCBqdXN0IGVuc3VyZSB0aGUgY3Vyc29yIGlzIHJlc2V0IGFuZCB0aGUgbW91c2Vkb3duIGNoZWNrIHJlc3BlY3RzIHRoZSBmbGFnP1xyXG4gICAgICAvLyBBY3R1YWxseSwgdGhlIG1vdXNlZG93biBsaXN0ZW5lciBpcyBhbHdheXMgYWN0aXZlLiBXZSBzaG91bGQgY2hlY2sgZW5hYmxlRHJhZyBpbnNpZGUgbW91c2Vkb3duLlxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcclxuICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmVuYWJsZURyYWcpIHJldHVybjtcclxuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47IC8vIFJlc3BlY3Qgb3RoZXIgaGFuZGxlcnMgKGxpa2UgcmVzaXplKVxyXG5cclxuICAgIGlmICghdGhpcy5kcmFnSGFuZGxlKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIC8vIFN0cmljdCBjaGVjayBpZiBoYW5kbGUgaXMgZXhwbGljaXRseSBwcm92aWRlZCB2aWEgc2VsZWN0b3IsIGVuc3VyaW5nIHdlIG9ubHkgZHJhZyB3aGVuIGNsaWNraW5nIHRoYXQgc3BlY2lmaWMgaGFuZGxlXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZHJhZ0hhbmRsZVNlbGVjdG9yICYmXHJcbiAgICAgIHRhcmdldCAhPT0gdGhpcy5kcmFnSGFuZGxlICYmXHJcbiAgICAgICF0aGlzLmRyYWdIYW5kbGUuY29udGFpbnModGFyZ2V0KVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB1c2luZyB0aGUgaG9zdCBlbGVtZW50IGFzIHRoZSBoYW5kbGUgKG5vIHNlbGVjdG9yKSwgYWxsb3cgZHJhZ2dpbmcgZnJvbSBjaGlsZHJlblxyXG4gICAgLy8gQlVUIGV4Y2x1ZGUgc3BlY2lmaWMgaW50ZXJhY3RpdmUgZWxlbWVudHMgdG8gZW5zdXJlIHVzYWJpbGl0eVxyXG4gICAgaWYgKCF0aGlzLmRyYWdIYW5kbGVTZWxlY3Rvcikge1xyXG4gICAgICAvLyBDaGVjayBpZiB0YXJnZXQgaXMgYSByZXNpemUgaGFuZGxlIChoYXMgY2xhc3Mgb3IgZGF0YS1kaXIpXHJcbiAgICAgIGlmICh0YXJnZXQuaGFzQXR0cmlidXRlKCdkYXRhLWRpcicpIHx8IHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rvb2hib3QtcmVzaXplLWhhbmRsZScpKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGlmICghdGhpcy5kcmFnSGFuZGxlLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybjtcclxuXHJcbiAgICAgIC8vIFByZXZlbnQgZHJhZ2dpbmcgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGNvbnRyb2xzXHJcbiAgICAgIGNvbnN0IHRhZ05hbWUgPSB0YXJnZXQudGFnTmFtZTtcclxuICAgICAgaWYgKFsnQlVUVE9OJywgJ0lOUFVUJywgJ1RFWFRBUkVBJywgJ0EnLCAnU0VMRUNUJywgJ01BVC1JQ09OJ10uaW5jbHVkZXModGFnTmFtZSkpIHJldHVybjtcclxuXHJcbiAgICAgIC8vIE9wdGlvbmFsOiBleHBsaWNpdCBvcHQtb3V0IGNsYXNzXHJcbiAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCduby1kcmFnJykpIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYIC0gdGhpcy5vZmZzZXRYO1xyXG4gICAgdGhpcy5zdGFydFkgPSBldmVudC5jbGllbnRZIC0gdGhpcy5vZmZzZXRZO1xyXG5cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlbW92ZScsIFsnJGV2ZW50J10pXHJcbiAgb25Nb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5vZmZzZXRYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuc3RhcnRYO1xyXG4gICAgdGhpcy5vZmZzZXRZID0gZXZlbnQuY2xpZW50WSAtIHRoaXMuc3RhcnRZO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXHJcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudCxcclxuICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgIGB0cmFuc2xhdGUoJHt0aGlzLm9mZnNldFh9cHgsICR7dGhpcy5vZmZzZXRZfXB4KWAsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFtdKVxyXG4gIG9uTW91c2VVcCgpIHtcclxuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,55 +0,0 @@
1
- import { Directive, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class FullscreenDirective {
4
- constructor(el, renderer) {
5
- this.el = el;
6
- this.renderer = renderer;
7
- this.isFullScreen = false;
8
- this.preFullscreenState = null;
9
- this.fullscreenTarget = '.chat-window';
10
- }
11
- toggle() {
12
- const targetEl = this.el.nativeElement.querySelector(this.fullscreenTarget);
13
- if (!targetEl)
14
- return;
15
- if (!this.isFullScreen) {
16
- this.preFullscreenState = {
17
- width: targetEl.style.width,
18
- height: targetEl.style.height,
19
- left: targetEl.style.left,
20
- top: targetEl.style.top,
21
- };
22
- targetEl.style.width = '';
23
- targetEl.style.height = '';
24
- targetEl.style.left = '';
25
- targetEl.style.top = '';
26
- targetEl.style.transform = '';
27
- this.isFullScreen = true;
28
- }
29
- else {
30
- this.isFullScreen = false;
31
- if (this.preFullscreenState) {
32
- targetEl.style.width = this.preFullscreenState.width;
33
- targetEl.style.height = this.preFullscreenState.height;
34
- targetEl.style.left = this.preFullscreenState.left;
35
- targetEl.style.top = this.preFullscreenState.top;
36
- targetEl.style.transform = ''; // Clear transform to allow CSS transitions/classes
37
- }
38
- }
39
- }
40
- getFullscreenState() {
41
- return this.isFullScreen;
42
- }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FullscreenDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
44
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: FullscreenDirective, isStandalone: true, selector: "[appFullscreen]", inputs: { fullscreenTarget: "fullscreenTarget" }, ngImport: i0 }); }
45
- }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FullscreenDirective, decorators: [{
47
- type: Directive,
48
- args: [{
49
- selector: '[appFullscreen]',
50
- standalone: true,
51
- }]
52
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { fullscreenTarget: [{
53
- type: Input
54
- }] } });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbHNjcmVlbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvY29yZS9kaXJlY3RpdmVzL2Z1bGxzY3JlZW4vZnVsbHNjcmVlbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7O0FBTXhFLE1BQU0sT0FBTyxtQkFBbUI7SUFXOUIsWUFDVSxFQUFjLEVBQ2QsUUFBbUI7UUFEbkIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFackIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsdUJBQWtCLEdBS2YsSUFBSSxDQUFDO1FBRVAscUJBQWdCLEdBQVcsY0FBYyxDQUFDO0lBSy9DLENBQUM7SUFFRSxNQUFNO1FBQ1gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUV0QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN0QixJQUFJLENBQUMsa0JBQWtCLEdBQUc7Z0JBQ3hCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUs7Z0JBQzNCLE1BQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQzdCLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUk7Z0JBQ3pCLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUc7YUFDeEIsQ0FBQztZQUVGLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUMxQixRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDM0IsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUN4QixRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFFOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDMUI7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBRTFCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUMzQixRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO2dCQUNyRCxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDO2dCQUN2RCxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO2dCQUNuRCxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDO2dCQUNqRCxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxtREFBbUQ7YUFDbkY7U0FDRjtJQUNILENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7K0dBbERVLG1CQUFtQjttR0FBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUovQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjt1R0FVVSxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2FwcEZ1bGxzY3JlZW5dJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnVsbHNjcmVlbkRpcmVjdGl2ZSB7XHJcbiAgcHJpdmF0ZSBpc0Z1bGxTY3JlZW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHByZUZ1bGxzY3JlZW5TdGF0ZToge1xyXG4gICAgd2lkdGg6IHN0cmluZztcclxuICAgIGhlaWdodDogc3RyaW5nO1xyXG4gICAgbGVmdDogc3RyaW5nO1xyXG4gICAgdG9wOiBzdHJpbmc7XHJcbiAgfSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBmdWxsc2NyZWVuVGFyZ2V0OiBzdHJpbmcgPSAnLmNoYXQtd2luZG93JztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICkgeyB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XHJcbiAgICBjb25zdCB0YXJnZXRFbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZnVsbHNjcmVlblRhcmdldCk7XHJcbiAgICBpZiAoIXRhcmdldEVsKSByZXR1cm47XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRnVsbFNjcmVlbikge1xyXG4gICAgICB0aGlzLnByZUZ1bGxzY3JlZW5TdGF0ZSA9IHtcclxuICAgICAgICB3aWR0aDogdGFyZ2V0RWwuc3R5bGUud2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiB0YXJnZXRFbC5zdHlsZS5oZWlnaHQsXHJcbiAgICAgICAgbGVmdDogdGFyZ2V0RWwuc3R5bGUubGVmdCxcclxuICAgICAgICB0b3A6IHRhcmdldEVsLnN0eWxlLnRvcCxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRhcmdldEVsLnN0eWxlLndpZHRoID0gJyc7XHJcbiAgICAgIHRhcmdldEVsLnN0eWxlLmhlaWdodCA9ICcnO1xyXG4gICAgICB0YXJnZXRFbC5zdHlsZS5sZWZ0ID0gJyc7XHJcbiAgICAgIHRhcmdldEVsLnN0eWxlLnRvcCA9ICcnO1xyXG4gICAgICB0YXJnZXRFbC5zdHlsZS50cmFuc2Zvcm0gPSAnJztcclxuXHJcbiAgICAgIHRoaXMuaXNGdWxsU2NyZWVuID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNGdWxsU2NyZWVuID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAodGhpcy5wcmVGdWxsc2NyZWVuU3RhdGUpIHtcclxuICAgICAgICB0YXJnZXRFbC5zdHlsZS53aWR0aCA9IHRoaXMucHJlRnVsbHNjcmVlblN0YXRlLndpZHRoO1xyXG4gICAgICAgIHRhcmdldEVsLnN0eWxlLmhlaWdodCA9IHRoaXMucHJlRnVsbHNjcmVlblN0YXRlLmhlaWdodDtcclxuICAgICAgICB0YXJnZXRFbC5zdHlsZS5sZWZ0ID0gdGhpcy5wcmVGdWxsc2NyZWVuU3RhdGUubGVmdDtcclxuICAgICAgICB0YXJnZXRFbC5zdHlsZS50b3AgPSB0aGlzLnByZUZ1bGxzY3JlZW5TdGF0ZS50b3A7XHJcbiAgICAgICAgdGFyZ2V0RWwuc3R5bGUudHJhbnNmb3JtID0gJyc7IC8vIENsZWFyIHRyYW5zZm9ybSB0byBhbGxvdyBDU1MgdHJhbnNpdGlvbnMvY2xhc3Nlc1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RnVsbHNjcmVlblN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNGdWxsU2NyZWVuO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,179 +0,0 @@
1
- // resizable-dialog.directive.ts
2
- import { Directive, HostListener, Input, } from '@angular/core';
3
- import * as i0 from "@angular/core";
4
- export class ResizableDialogDirective {
5
- constructor(el, renderer) {
6
- this.el = el;
7
- this.renderer = renderer;
8
- this.resizeHandles = [];
9
- this.activeHandle = null;
10
- this.startX = 0;
11
- this.startY = 0;
12
- this.startWidth = 0;
13
- this.startHeight = 0;
14
- this.startLeft = 0;
15
- this.startTop = 0;
16
- this.enableResize = false;
17
- // Define resize directions
18
- this.directions = ['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw'];
19
- }
20
- ngOnInit() {
21
- this.updateResizeState();
22
- }
23
- ngOnChanges(changes) {
24
- if (changes['enableResize']) {
25
- this.updateResizeState();
26
- }
27
- }
28
- updateResizeState() {
29
- if (this.enableResize) {
30
- if (this.resizeHandles.length === 0) {
31
- this.setStyle();
32
- this.createResizeHandles();
33
- }
34
- }
35
- else {
36
- this.removeResizeHandles();
37
- }
38
- }
39
- ngOnDestroy() {
40
- this.removeResizeHandles();
41
- }
42
- setStyle() {
43
- const element = this.el.nativeElement;
44
- this.renderer.setStyle(element, 'position', 'absolute');
45
- this.renderer.setStyle(element, 'overflow', 'hidden');
46
- this.renderer.setStyle(element, 'boxSizing', 'border-box');
47
- }
48
- createResizeHandles() {
49
- this.directions.forEach((dir) => {
50
- const handle = this.renderer.createElement('div');
51
- this.renderer.setAttribute(handle, 'data-dir', dir);
52
- this.renderer.addClass(handle, 'doohbot-resize-handle');
53
- this.renderer.setStyle(handle, 'position', 'absolute');
54
- this.renderer.setStyle(handle, 'background', 'transparent');
55
- this.renderer.setStyle(handle, 'zIndex', '2000'); // High z-index to sit above content
56
- this.renderer.setStyle(handle, 'userSelect', 'none');
57
- // Set size and position based on direction
58
- if (dir.includes('e') || dir.includes('w')) {
59
- this.renderer.setStyle(handle, 'width', '15px'); // Slightly larger hit area
60
- this.renderer.setStyle(handle, 'cursor', dir.includes('e') ? 'e-resize' : 'w-resize');
61
- this.renderer.setStyle(handle, 'top', '0');
62
- this.renderer.setStyle(handle, 'bottom', '0');
63
- this.renderer.setStyle(handle, 'right', dir.includes('e') ? '-5px' : null); // Extend slightly out
64
- this.renderer.setStyle(handle, 'left', dir.includes('w') ? '-5px' : null);
65
- }
66
- if (dir.includes('n') || dir.includes('s')) {
67
- this.renderer.setStyle(handle, 'height', '15px');
68
- this.renderer.setStyle(handle, 'cursor', dir.includes('s') ? 's-resize' : 'n-resize');
69
- this.renderer.setStyle(handle, 'left', '0');
70
- this.renderer.setStyle(handle, 'right', '0');
71
- this.renderer.setStyle(handle, 'bottom', dir.includes('s') ? '-5px' : null);
72
- this.renderer.setStyle(handle, 'top', dir.includes('n') ? '-5px' : null);
73
- }
74
- if (dir === 'ne' || dir === 'nw' || dir === 'se' || dir === 'sw') {
75
- this.renderer.setStyle(handle, 'width', '20px');
76
- this.renderer.setStyle(handle, 'height', '20px');
77
- this.renderer.setStyle(handle, 'borderRadius', '50%');
78
- this.renderer.setStyle(handle, 'cursor', `${dir}-resize`);
79
- this.renderer.setStyle(handle, 'top', dir.includes('n') ? '-10px' : null);
80
- this.renderer.setStyle(handle, 'bottom', dir.includes('s') ? '-10px' : null);
81
- this.renderer.setStyle(handle, 'left', dir.includes('w') ? '-10px' : null);
82
- this.renderer.setStyle(handle, 'right', dir.includes('e') ? '-10px' : null);
83
- }
84
- this.renderer.appendChild(this.el.nativeElement, handle);
85
- this.resizeHandles.push(handle);
86
- });
87
- }
88
- removeResizeHandles() {
89
- this.resizeHandles.forEach((handle) => {
90
- this.renderer.removeChild(this.el.nativeElement, handle);
91
- });
92
- this.resizeHandles = [];
93
- }
94
- onMouseDown(event) {
95
- if (!this.enableResize)
96
- return;
97
- if (event.defaultPrevented)
98
- return; // Respect other handlers
99
- const target = event.target;
100
- const dir = target.getAttribute('data-dir');
101
- if (!dir)
102
- return;
103
- event.preventDefault();
104
- event.stopImmediatePropagation();
105
- this.activeHandle = dir;
106
- const rect = this.el.nativeElement.getBoundingClientRect();
107
- this.startX = event.clientX;
108
- this.startY = event.clientY;
109
- this.startWidth = parseFloat(this.getComputedStyleValue('width'));
110
- this.startHeight = parseFloat(this.getComputedStyleValue('height'));
111
- this.startLeft = parseFloat(this.getComputedStyleValue('left'));
112
- this.startTop = parseFloat(this.getComputedStyleValue('top'));
113
- // Prevent text selection during resize
114
- document.body.classList.add('no-select');
115
- }
116
- onMouseMove(event) {
117
- if (!this.activeHandle)
118
- return;
119
- const dx = event.clientX - this.startX;
120
- const dy = event.clientY - this.startY;
121
- let newWidth = this.startWidth;
122
- let newHeight = this.startHeight;
123
- let newLeft = this.startLeft;
124
- let newTop = this.startTop;
125
- const minWidth = 150;
126
- const minHeight = 100;
127
- // Horizontal resize
128
- if (this.activeHandle.includes('e')) {
129
- newWidth = Math.max(this.startWidth + dx, minWidth);
130
- }
131
- if (this.activeHandle.includes('w')) {
132
- newWidth = Math.max(this.startWidth - dx, minWidth);
133
- newLeft = this.startLeft + (this.startWidth - newWidth);
134
- }
135
- // Vertical resize
136
- if (this.activeHandle.includes('s')) {
137
- newHeight = Math.max(this.startHeight + dy, minHeight);
138
- }
139
- if (this.activeHandle.includes('n')) {
140
- newHeight = Math.max(this.startHeight - dy, minHeight);
141
- newTop = this.startTop + (this.startHeight - newHeight);
142
- }
143
- // Apply changes
144
- this.renderer.setStyle(this.el.nativeElement, 'width', `${newWidth}px`);
145
- this.renderer.setStyle(this.el.nativeElement, 'height', `${newHeight}px`);
146
- this.renderer.setStyle(this.el.nativeElement, 'left', `${newLeft}px`);
147
- this.renderer.setStyle(this.el.nativeElement, 'top', `${newTop}px`);
148
- }
149
- onMouseUp() {
150
- if (this.activeHandle) {
151
- this.activeHandle = null;
152
- document.body.classList.remove('no-select');
153
- }
154
- }
155
- getComputedStyleValue(property) {
156
- return getComputedStyle(this.el.nativeElement).getPropertyValue(property) || '0';
157
- }
158
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ResizableDialogDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
159
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: ResizableDialogDirective, isStandalone: true, selector: "[resizableDialog]", inputs: { enableResize: "enableResize" }, host: { listeners: { "mousedown": "onMouseDown($event)", "document:mousemove": "onMouseMove($event)", "document:mouseup": "onMouseUp()" } }, usesOnChanges: true, ngImport: i0 }); }
160
- }
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ResizableDialogDirective, decorators: [{
162
- type: Directive,
163
- args: [{
164
- selector: '[resizableDialog]',
165
- standalone: true,
166
- }]
167
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { enableResize: [{
168
- type: Input
169
- }], onMouseDown: [{
170
- type: HostListener,
171
- args: ['mousedown', ['$event']]
172
- }], onMouseMove: [{
173
- type: HostListener,
174
- args: ['document:mousemove', ['$event']]
175
- }], onMouseUp: [{
176
- type: HostListener,
177
- args: ['document:mouseup']
178
- }] } });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWRpYWxvZy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvY29yZS9kaXJlY3RpdmVzL3Jlc2l6YWJsZS9yZXNpemFibGUtZGlhbG9nLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFDaEMsT0FBTyxFQUNMLFNBQVMsRUFLVCxZQUFZLEVBQ1osS0FBSyxHQUdOLE1BQU0sZUFBZSxDQUFDOztBQU12QixNQUFNLE9BQU8sd0JBQXdCO0lBZW5DLFlBQ1UsRUFBMkIsRUFDM0IsUUFBbUI7UUFEbkIsT0FBRSxHQUFGLEVBQUUsQ0FBeUI7UUFDM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWhCckIsa0JBQWEsR0FBa0IsRUFBRSxDQUFDO1FBQ2xDLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQUNuQyxXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUNYLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUNoQixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUVaLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRTlCLDJCQUEyQjtRQUNuQixlQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFLL0QsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFC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LEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0U7WUFDRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0RixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxRTtZQUNELElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtnQkFDaEUsSUFB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LENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFHRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM3QztJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxRQUFnQjtRQUM1QyxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ25GLENBQUM7K0dBbExVLHdCQUF3QjttR0FBeEIsd0JBQXdCOzs0RkFBeEIsd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjt1R0FXVSxZQUFZO3NCQUFwQixLQUFLO2dCQTZGTixXQUFXO3NCQURWLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTJCckMsV0FBVztzQkFEVixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXlDOUMsU0FBUztzQkFEUixZQUFZO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHJlc2l6YWJsZS1kaWFsb2cuZGlyZWN0aXZlLnRzXHJcbmltcG9ydCB7XHJcbiAgRGlyZWN0aXZlLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbcmVzaXphYmxlRGlhbG9nXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZURpYWxvZ0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIHByaXZhdGUgcmVzaXplSGFuZGxlczogSFRNTEVsZW1lbnRbXSA9IFtdO1xyXG4gIHByaXZhdGUgYWN0aXZlSGFuZGxlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHN0YXJ0WCA9IDA7XHJcbiAgcHJpdmF0ZSBzdGFydFkgPSAwO1xyXG4gIHByaXZhdGUgc3RhcnRXaWR0aCA9IDA7XHJcbiAgcHJpdmF0ZSBzdGFydEhlaWdodCA9IDA7XHJcbiAgcHJpdmF0ZSBzdGFydExlZnQgPSAwO1xyXG4gIHByaXZhdGUgc3RhcnRUb3AgPSAwO1xyXG5cclxuICBASW5wdXQoKSBlbmFibGVSZXNpemUgPSBmYWxzZTtcclxuXHJcbiAgLy8gRGVmaW5lIHJlc2l6ZSBkaXJlY3Rpb25zXHJcbiAgcHJpdmF0ZSBkaXJlY3Rpb25zID0gWyduJywgJ3MnLCAnZScsICd3JywgJ25lJywgJ253JywgJ3NlJywgJ3N3J107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudXBkYXRlUmVzaXplU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWydlbmFibGVSZXNpemUnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVJlc2l6ZVN0YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVJlc2l6ZVN0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlUmVzaXplKSB7XHJcbiAgICAgIGlmICh0aGlzLnJlc2l6ZUhhbmRsZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdHlsZSgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlUmVzaXplSGFuZGxlcygpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbW92ZVJlc2l6ZUhhbmRsZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5yZW1vdmVSZXNpemVIYW5kbGVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFN0eWxlKCkge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnQsICdvdmVyZmxvdycsICdoaWRkZW4nKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ2JveFNpemluZycsICdib3JkZXItYm94Jyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVJlc2l6ZUhhbmRsZXMoKSB7XHJcbiAgICB0aGlzLmRpcmVjdGlvbnMuZm9yRWFjaCgoZGlyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGhhbmRsZSA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGhhbmRsZSwgJ2RhdGEtZGlyJywgZGlyKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhoYW5kbGUsICdkb29oYm90LXJlc2l6ZS1oYW5kbGUnKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShoYW5kbGUsICdwb3NpdGlvbicsICdhYnNvbHV0ZScpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGhhbmRsZSwgJ2JhY2tncm91bmQnLCAndHJhbnNwYXJlbnQnKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShoYW5kbGUsICd6SW5kZXgnLCAnMjAwMCcpOyAvLyBIaWdoIHotaW5kZXggdG8gc2l0IGFib3ZlIGNvbnRlbnRcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShoYW5kbGUsICd1c2VyU2VsZWN0JywgJ25vbmUnKTtcclxuXHJcbiAgICAgIC8vIFNldCBzaXplIGFuZCBwb3NpdGlvbiBiYXNlZCBvbiBkaXJlY3Rpb25cclxuICAgICAgaWYgKGRpci5pbmNsdWRlcygnZScpIHx8IGRpci5pbmNsdWRlcygndycpKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShoYW5kbGUsICd3aWR0aCcsICcxNXB4Jyk7IC8vIFNsaWdodGx5IGxhcmdlciBoaXQgYXJlYVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaGFuZGxlLCAnY3Vyc29yJywgZGlyLmluY2x1ZGVzKCdlJykgPyAnZS1yZXNpemUnIDogJ3ctcmVzaXplJyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShoYW5kbGUsICd0b3AnLCAnMCcpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaGFuZGxlLCAnYm90dG9tJywgJzAnKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGhhbmRsZSwgJ3JpZ2h0JywgZGlyLmluY2x1ZGVzKCdlJykgPyAnLTVweCcgOiBudWxsKTsgLy8gRXh0ZW5kIHNsaWdodGx5IG91dFxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaGFuZGxlLCAnbGVmdCcsIGRpci5pbmNsdWRlcygndycpID8gJy01cHgnIDogbnVsbCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRpci5pbmNsdWRlcygnbicpIHx8IGRpci5pbmNsdWRlcygncycpKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShoYW5kbGUsICdoZWlnaHQnLCAnMTVweCcpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaGFuZGxlLCAnY3Vyc29yJywgZGlyLmluY2x1ZGVzKCdzJykgPyAncy1yZXNpemUnIDogJ24tcmVzaXplJyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShoYW5kbGUsICdsZWZ0JywgJzAnKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGhhbmRsZSwgJ3JpZ2h0JywgJzAnKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGhhbmRsZSwgJ2JvdHRvbScsIGRpci5pbmNsdWRlcygncycpID8gJy01cHgnIDogbnVsbCk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShoYW5kbGUsICd0b3AnLCBkaXIuaW5jbHVkZXMoJ24nKSA/ICctNXB4JyA6IG51bGwpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkaXIgPT09ICduZScgfHwgZGlyID09PSAnbncnIHx8IGRpciA9PT0gJ3NlJyB8fCBkaXIgPT09ICdzdycpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGhhbmRsZSwgJ3dpZHRoJywgJzIwcHgnKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGhhbmRsZSwgJ2hlaWdodCcsICcyMHB4Jyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShoYW5kbGUsICdib3JkZXJSYWRpdXMnLCAnNTAlJyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShoYW5kbGUsICdjdXJzb3InLCBgJHtkaXJ9LXJlc2l6ZWApO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaGFuZGxlLCAndG9wJywgZGlyLmluY2x1ZGVzKCduJykgPyAnLTEwcHgnIDogbnVsbCk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShoYW5kbGUsICdib3R0b20nLCBkaXIuaW5jbHVkZXMoJ3MnKSA/ICctMTBweCcgOiBudWxsKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGhhbmRsZSwgJ2xlZnQnLCBkaXIuaW5jbHVkZXMoJ3cnKSA/ICctMTBweCcgOiBudWxsKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGhhbmRsZSwgJ3JpZ2h0JywgZGlyLmluY2x1ZGVzKCdlJykgPyAnLTEwcHgnIDogbnVsbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCBoYW5kbGUpO1xyXG4gICAgICB0aGlzLnJlc2l6ZUhhbmRsZXMucHVzaChoYW5kbGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZVJlc2l6ZUhhbmRsZXMoKSB7XHJcbiAgICB0aGlzLnJlc2l6ZUhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlKSA9PiB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCBoYW5kbGUpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlc2l6ZUhhbmRsZXMgPSBbXTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25Nb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5lbmFibGVSZXNpemUpIHJldHVybjtcclxuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47IC8vIFJlc3BlY3Qgb3RoZXIgaGFuZGxlcnNcclxuXHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBkaXIgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWRpcicpO1xyXG4gICAgaWYgKCFkaXIpIHJldHVybjtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgdGhpcy5hY3RpdmVIYW5kbGUgPSBkaXI7XHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcclxuICAgIHRoaXMuc3RhcnRZID0gZXZlbnQuY2xpZW50WTtcclxuICAgIHRoaXMuc3RhcnRXaWR0aCA9IHBhcnNlRmxvYXQodGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoJ3dpZHRoJykpO1xyXG4gICAgdGhpcy5zdGFydEhlaWdodCA9IHBhcnNlRmxvYXQodGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoJ2hlaWdodCcpKTtcclxuICAgIHRoaXMuc3RhcnRMZWZ0ID0gcGFyc2VGbG9hdCh0aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgnbGVmdCcpKTtcclxuICAgIHRoaXMuc3RhcnRUb3AgPSBwYXJzZUZsb2F0KHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKCd0b3AnKSk7XHJcblxyXG4gICAgLy8gUHJldmVudCB0ZXh0IHNlbGVjdGlvbiBkdXJpbmcgcmVzaXplXHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ25vLXNlbGVjdCcpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcclxuICBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZUhhbmRsZSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGR4ID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuc3RhcnRYO1xyXG4gICAgY29uc3QgZHkgPSBldmVudC5jbGllbnRZIC0gdGhpcy5zdGFydFk7XHJcblxyXG4gICAgbGV0IG5ld1dpZHRoID0gdGhpcy5zdGFydFdpZHRoO1xyXG4gICAgbGV0IG5ld0hlaWdodCA9IHRoaXMuc3RhcnRIZWlnaHQ7XHJcbiAgICBsZXQgbmV3TGVmdCA9IHRoaXMuc3RhcnRMZWZ0O1xyXG4gICAgbGV0IG5ld1RvcCA9IHRoaXMuc3RhcnRUb3A7XHJcblxyXG4gICAgY29uc3QgbWluV2lkdGggPSAxNTA7XHJcbiAgICBjb25zdCBtaW5IZWlnaHQgPSAxMDA7XHJcblxyXG4gICAgLy8gSG9yaXpvbnRhbCByZXNpemVcclxuICAgIGlmICh0aGlzLmFjdGl2ZUhhbmRsZS5pbmNsdWRlcygnZScpKSB7XHJcbiAgICAgIG5ld1dpZHRoID0gTWF0aC5tYXgodGhpcy5zdGFydFdpZHRoICsgZHgsIG1pbldpZHRoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFjdGl2ZUhhbmRsZS5pbmNsdWRlcygndycpKSB7XHJcbiAgICAgIG5ld1dpZHRoID0gTWF0aC5tYXgodGhpcy5zdGFydFdpZHRoIC0gZHgsIG1pbldpZHRoKTtcclxuICAgICAgbmV3TGVmdCA9IHRoaXMuc3RhcnRMZWZ0ICsgKHRoaXMuc3RhcnRXaWR0aCAtIG5ld1dpZHRoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBWZXJ0aWNhbCByZXNpemVcclxuICAgIGlmICh0aGlzLmFjdGl2ZUhhbmRsZS5pbmNsdWRlcygncycpKSB7XHJcbiAgICAgIG5ld0hlaWdodCA9IE1hdGgubWF4KHRoaXMuc3RhcnRIZWlnaHQgKyBkeSwgbWluSGVpZ2h0KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFjdGl2ZUhhbmRsZS5pbmNsdWRlcygnbicpKSB7XHJcbiAgICAgIG5ld0hlaWdodCA9IE1hdGgubWF4KHRoaXMuc3RhcnRIZWlnaHQgLSBkeSwgbWluSGVpZ2h0KTtcclxuICAgICAgbmV3VG9wID0gdGhpcy5zdGFydFRvcCArICh0aGlzLnN0YXJ0SGVpZ2h0IC0gbmV3SGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBcHBseSBjaGFuZ2VzXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgYCR7bmV3V2lkdGh9cHhgKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnaGVpZ2h0JywgYCR7bmV3SGVpZ2h0fXB4YCk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ2xlZnQnLCBgJHtuZXdMZWZ0fXB4YCk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ3RvcCcsIGAke25ld1RvcH1weGApO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcpXHJcbiAgb25Nb3VzZVVwKCkge1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlSGFuZGxlKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlSGFuZGxlID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCduby1zZWxlY3QnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHByb3BlcnR5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KSB8fCAnMCc7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,15 +0,0 @@
1
- // export const environment = {
2
- // staging: false,
3
- // development: false,
4
- // production: true,
5
- // chatApiUrl: 'https://api.production.com',
6
- // apiKey: '',
7
- // };
8
- export const environment = {
9
- config: 'const/app-const.json',
10
- production: false,
11
- apiBaseUrl: '',
12
- loginEndpoint: '',
13
- apiSegment: 'api/v1/',
14
- };
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb29oYm90L3NyYy9saWIvY29yZS9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLG9CQUFvQjtBQUNwQix3QkFBd0I7QUFDeEIsc0JBQXNCO0FBQ3RCLDhDQUE4QztBQUM5QyxnQkFBZ0I7QUFDaEIsS0FBSztBQUNMLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN6QixNQUFNLEVBQUUsc0JBQXNCO0lBQzlCLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLFVBQVUsRUFBRSxFQUFFO0lBQ2QsYUFBYSxFQUFFLEVBQUU7SUFDakIsVUFBVSxFQUFFLFNBQVM7Q0FDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGV4cG9ydCBjb25zdCBlbnZpcm9ubWVudCA9IHtcclxuLy8gICBzdGFnaW5nOiBmYWxzZSxcclxuLy8gICBkZXZlbG9wbWVudDogZmFsc2UsXHJcbi8vICAgcHJvZHVjdGlvbjogdHJ1ZSxcclxuLy8gICBjaGF0QXBpVXJsOiAnaHR0cHM6Ly9hcGkucHJvZHVjdGlvbi5jb20nLFxyXG4vLyAgIGFwaUtleTogJycsXHJcbi8vIH07XHJcbmV4cG9ydCBjb25zdCBlbnZpcm9ubWVudCA9IHtcclxuICBjb25maWc6ICdjb25zdC9hcHAtY29uc3QuanNvbicsXHJcbiAgcHJvZHVjdGlvbjogZmFsc2UsXHJcbiAgYXBpQmFzZVVybDogJycsXHJcbiAgbG9naW5FbmRwb2ludDogJycsXHJcbiAgYXBpU2VnbWVudDogJ2FwaS92MS8nLFxyXG59O1xyXG4iXX0=
@@ -1,15 +0,0 @@
1
- // export const environment = {
2
- // staging: false,
3
- // development: false,
4
- // production: true,
5
- // chatApiUrl: 'https://api.production.com',
6
- // apiKey: '',
7
- // };
8
- export const environment = {
9
- config: 'const/app-const.prod.json',
10
- production: true,
11
- apiBaseUrl: '',
12
- loginEndpoint: '',
13
- apiSegment: 'api/v1/',
14
- };
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQucHJvZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2xpYi9jb3JlL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5wcm9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixvQkFBb0I7QUFDcEIsd0JBQXdCO0FBQ3hCLHNCQUFzQjtBQUN0Qiw4Q0FBOEM7QUFDOUMsZ0JBQWdCO0FBQ2hCLEtBQUs7QUFDTCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUc7SUFDekIsTUFBTSxFQUFFLDJCQUEyQjtJQUNuQyxVQUFVLEVBQUUsSUFBSTtJQUNoQixVQUFVLEVBQUUsRUFBRTtJQUNkLGFBQWEsRUFBRSxFQUFFO0lBQ2pCLFVBQVUsRUFBRSxTQUFTO0NBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBleHBvcnQgY29uc3QgZW52aXJvbm1lbnQgPSB7XHJcbi8vICAgc3RhZ2luZzogZmFsc2UsXHJcbi8vICAgZGV2ZWxvcG1lbnQ6IGZhbHNlLFxyXG4vLyAgIHByb2R1Y3Rpb246IHRydWUsXHJcbi8vICAgY2hhdEFwaVVybDogJ2h0dHBzOi8vYXBpLnByb2R1Y3Rpb24uY29tJyxcclxuLy8gICBhcGlLZXk6ICcnLFxyXG4vLyB9O1xyXG5leHBvcnQgY29uc3QgZW52aXJvbm1lbnQgPSB7XHJcbiAgY29uZmlnOiAnY29uc3QvYXBwLWNvbnN0LnByb2QuanNvbicsXHJcbiAgcHJvZHVjdGlvbjogdHJ1ZSxcclxuICBhcGlCYXNlVXJsOiAnJyxcclxuICBsb2dpbkVuZHBvaW50OiAnJyxcclxuICBhcGlTZWdtZW50OiAnYXBpL3YxLycsXHJcbn07XHJcbiJdfQ==
@@ -1,52 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class CryptoHelperService {
4
- constructor() {
5
- this.encoder = new TextEncoder();
6
- this.decoder = new TextDecoder();
7
- this.secretKey = ''; // Will be set by AuthService
8
- }
9
- setSecretKey(key) {
10
- this.secretKey = key;
11
- }
12
- async getKey() {
13
- const salt = this.encoder.encode('fixed_salt'); // Keep constant
14
- const baseKey = await crypto.subtle.importKey('raw', this.encoder.encode(this.secretKey), 'PBKDF2', false, ['deriveKey']);
15
- return crypto.subtle.deriveKey({
16
- name: 'PBKDF2',
17
- salt,
18
- iterations: 100000,
19
- hash: 'SHA-256',
20
- }, baseKey, { name: 'AES-GCM', length: 256 }, false, ['encrypt', 'decrypt']);
21
- }
22
- async encrypt(value) {
23
- if (!value)
24
- return null;
25
- const key = await this.getKey();
26
- const iv = crypto.getRandomValues(new Uint8Array(12));
27
- const encrypted = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, this.encoder.encode(value));
28
- const merged = new Uint8Array(iv.length + encrypted.byteLength);
29
- merged.set(iv, 0);
30
- merged.set(new Uint8Array(encrypted), iv.length);
31
- return btoa(String.fromCharCode(...merged));
32
- }
33
- async decrypt(value) {
34
- if (!value)
35
- return null;
36
- const raw = Uint8Array.from(atob(value), (c) => c.charCodeAt(0));
37
- const iv = raw.slice(0, 12);
38
- const data = raw.slice(12);
39
- const key = await this.getKey();
40
- const decrypted = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, data);
41
- return this.decoder.decode(decrypted);
42
- }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CryptoHelperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
44
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CryptoHelperService, providedIn: 'root' }); }
45
- }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CryptoHelperService, decorators: [{
47
- type: Injectable,
48
- args: [{
49
- providedIn: 'root',
50
- }]
51
- }] });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLWhlbHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9vaGJvdC9zcmMvbGliL2NvcmUvaGVscGVycy9jcnlwdG8taGVscGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLG1CQUFtQjtJQUhoQztRQUlVLFlBQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVCLFlBQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzVCLGNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyw2QkFBNkI7S0ErRHREO0lBN0RDLFlBQVksQ0FBQyxHQUFXO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxLQUFLLENBQUMsTUFBTTtRQUNsQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtRQUNoRSxNQUFNLE9BQU8sR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUMzQyxLQUFLLEVBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUNuQyxRQUFRLEVBQ1IsS0FBSyxFQUNMLENBQUMsV0FBVyxDQUFDLENBQ2QsQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQzVCO1lBQ0UsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJO1lBQ0osVUFBVSxFQUFFLE1BQU07WUFDbEIsSUFBSSxFQUFFLFNBQVM7U0FDaEIsRUFDRCxPQUFPLEVBQ1AsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFDaEMsS0FBSyxFQUNMLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXhCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV0RCxNQUFNLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUMzQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQ3ZCLEdBQUcsRUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FDM0IsQ0FBQztRQUVGLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQWE7UUFDekIsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUV4QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFM0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFaEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWxGLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQzsrR0FqRVUsbUJBQW1CO21IQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcnlwdG9IZWxwZXJTZXJ2aWNlIHtcclxuICBwcml2YXRlIGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcclxuICBwcml2YXRlIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuICBwcml2YXRlIHNlY3JldEtleSA9ICcnOyAvLyBXaWxsIGJlIHNldCBieSBBdXRoU2VydmljZVxyXG5cclxuICBzZXRTZWNyZXRLZXkoa2V5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VjcmV0S2V5ID0ga2V5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRLZXkoKSB7XHJcbiAgICBjb25zdCBzYWx0ID0gdGhpcy5lbmNvZGVyLmVuY29kZSgnZml4ZWRfc2FsdCcpOyAvLyBLZWVwIGNvbnN0YW50XHJcbiAgICBjb25zdCBiYXNlS2V5ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXHJcbiAgICAgICdyYXcnLFxyXG4gICAgICB0aGlzLmVuY29kZXIuZW5jb2RlKHRoaXMuc2VjcmV0S2V5KSxcclxuICAgICAgJ1BCS0RGMicsXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICBbJ2Rlcml2ZUtleSddLFxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gY3J5cHRvLnN1YnRsZS5kZXJpdmVLZXkoXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnUEJLREYyJyxcclxuICAgICAgICBzYWx0LFxyXG4gICAgICAgIGl0ZXJhdGlvbnM6IDEwMDAwMCxcclxuICAgICAgICBoYXNoOiAnU0hBLTI1NicsXHJcbiAgICAgIH0sXHJcbiAgICAgIGJhc2VLZXksXHJcbiAgICAgIHsgbmFtZTogJ0FFUy1HQ00nLCBsZW5ndGg6IDI1NiB9LFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgWydlbmNyeXB0JywgJ2RlY3J5cHQnXSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBlbmNyeXB0KHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMuZ2V0S2V5KCk7XHJcbiAgICBjb25zdCBpdiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTIpKTtcclxuXHJcbiAgICBjb25zdCBlbmNyeXB0ZWQgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmVuY3J5cHQoXHJcbiAgICAgIHsgbmFtZTogJ0FFUy1HQ00nLCBpdiB9LFxyXG4gICAgICBrZXksXHJcbiAgICAgIHRoaXMuZW5jb2Rlci5lbmNvZGUodmFsdWUpLFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBtZXJnZWQgPSBuZXcgVWludDhBcnJheShpdi5sZW5ndGggKyBlbmNyeXB0ZWQuYnl0ZUxlbmd0aCk7XHJcbiAgICBtZXJnZWQuc2V0KGl2LCAwKTtcclxuICAgIG1lcmdlZC5zZXQobmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGVkKSwgaXYubGVuZ3RoKTtcclxuXHJcbiAgICByZXR1cm4gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLm1lcmdlZCkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVjcnlwdCh2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBjb25zdCByYXcgPSBVaW50OEFycmF5LmZyb20oYXRvYih2YWx1ZSksIChjKSA9PiBjLmNoYXJDb2RlQXQoMCkpO1xyXG5cclxuICAgIGNvbnN0IGl2ID0gcmF3LnNsaWNlKDAsIDEyKTtcclxuICAgIGNvbnN0IGRhdGEgPSByYXcuc2xpY2UoMTIpO1xyXG5cclxuICAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMuZ2V0S2V5KCk7XHJcblxyXG4gICAgY29uc3QgZGVjcnlwdGVkID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kZWNyeXB0KHsgbmFtZTogJ0FFUy1HQ00nLCBpdiB9LCBrZXksIGRhdGEpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmRlY29kZXIuZGVjb2RlKGRlY3J5cHRlZCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,97 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { HttpEventType, HttpHeaders } from '@angular/common/http';
3
- import { Observable } from 'rxjs';
4
- import logger from '../utils/logger.service';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../auth/storage.service";
7
- import * as i2 from "@angular/common/http";
8
- export class HttpStreamService {
9
- constructor(ngZone, tokenStorage, http) {
10
- this.ngZone = ngZone;
11
- this.tokenStorage = tokenStorage;
12
- this.http = http;
13
- }
14
- /**
15
- * Creates a POST-based HTTP streaming connection using fetch()
16
- */
17
- createHttpStream(url, body, headers) {
18
- return new Observable((observer) => {
19
- // Note: Authorization header is added automatically by AuthInterceptor
20
- let requestHeaders = new HttpHeaders({
21
- 'content-type': 'application/json',
22
- accept: 'text/event-stream',
23
- 'cache-control': 'no-cache',
24
- });
25
- if (headers) {
26
- Object.keys(headers).forEach((key) => {
27
- requestHeaders = requestHeaders.set(key, headers[key]);
28
- });
29
- }
30
- const req = this.http.request('POST', url, {
31
- body,
32
- headers: requestHeaders,
33
- reportProgress: true,
34
- observe: 'events',
35
- responseType: 'text',
36
- });
37
- let lastLoaded = 0;
38
- const sub = req.subscribe({
39
- next: (event) => {
40
- if (event.type === HttpEventType.DownloadProgress) {
41
- // Process the new chunk of data
42
- const fullText = event.partialText;
43
- if (!fullText)
44
- return;
45
- const newText = fullText.slice(lastLoaded);
46
- lastLoaded = fullText.length;
47
- const lines = newText.split('\n');
48
- for (const line of lines) {
49
- if (line.trim() === '')
50
- continue;
51
- if (line.startsWith('data: ')) {
52
- const dataStr = line.substring(6).trim();
53
- if (dataStr === '[DONE]') {
54
- this.ngZone.run(() => observer.complete());
55
- return;
56
- }
57
- try {
58
- const parsed = JSON.parse(dataStr);
59
- this.ngZone.run(() => observer.next({
60
- content: parsed.content ?? parsed.message ?? '',
61
- type: parsed.type ?? 'chunk',
62
- id: parsed.response_id ?? '',
63
- created_at: parsed.created_at ?? '',
64
- sources: parsed.sources ?? [],
65
- error: parsed.error,
66
- }));
67
- }
68
- catch (e) {
69
- logger.warn('Failed to parse SSE data:', dataStr, e);
70
- }
71
- }
72
- }
73
- }
74
- else if (event.type === HttpEventType.Response) {
75
- this.ngZone.run(() => observer.complete());
76
- }
77
- },
78
- error: (err) => {
79
- this.ngZone.run(() => observer.error(err));
80
- },
81
- complete: () => {
82
- this.ngZone.run(() => observer.complete());
83
- },
84
- });
85
- return () => sub.unsubscribe();
86
- });
87
- }
88
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HttpStreamService, deps: [{ token: i0.NgZone }, { token: i1.StorageService }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
89
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HttpStreamService, providedIn: 'root' }); }
90
- }
91
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HttpStreamService, decorators: [{
92
- type: Injectable,
93
- args: [{
94
- providedIn: 'root',
95
- }]
96
- }], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.StorageService }, { type: i2.HttpClient }] });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zdHJlYW0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2xpYi9jb3JlL2h0dHAvaHR0cC1zdHJlYW0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdsQyxPQUFPLE1BQU0sTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUs3QyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQ1UsTUFBYyxFQUNkLFlBQTRCLEVBQzVCLElBQWdCO1FBRmhCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFDNUIsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUN2QixDQUFDO0lBRUo7O09BRUc7SUFDSCxnQkFBZ0IsQ0FDZCxHQUFXLEVBQ1gsSUFBUyxFQUNULE9BQWdDO1FBRWhDLE9BQU8sSUFBSSxVQUFVLENBQXFCLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDckQsdUVBQXVFO1lBQ3ZFLElBQUksY0FBYyxHQUFHLElBQUksV0FBVyxDQUFDO2dCQUNuQyxjQUFjLEVBQUUsa0JBQWtCO2dCQUNsQyxNQUFNLEVBQUUsbUJBQW1CO2dCQUMzQixlQUFlLEVBQUUsVUFBVTthQUM1QixDQUFDLENBQUM7WUFFSCxJQUFJLE9BQU8sRUFBRTtnQkFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNuQyxjQUFjLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7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QUcsRUFBRTtvQkFDYixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDN0MsQ0FBQzthQUNGLENBQUMsQ0FBQztZQUVILE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0E3RlUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXZlbnRUeXBlLCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL2F1dGgvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2hhdFN0cmVhbVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vYXBwL2NoYXQvbW9kZWwvY2hhdC1zdHJlYW0tcmVzcG9uc2UubW9kZWwnO1xyXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL3V0aWxzL2xvZ2dlci5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIdHRwU3RyZWFtU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSB0b2tlblN0b3JhZ2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIFBPU1QtYmFzZWQgSFRUUCBzdHJlYW1pbmcgY29ubmVjdGlvbiB1c2luZyBmZXRjaCgpXHJcbiAgICovXHJcbiAgY3JlYXRlSHR0cFN0cmVhbShcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgYm9keTogYW55LFxyXG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXHJcbiAgKTogT2JzZXJ2YWJsZTxDaGF0U3RyZWFtUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxDaGF0U3RyZWFtUmVzcG9uc2U+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAvLyBOb3RlOiBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBhZGRlZCBhdXRvbWF0aWNhbGx5IGJ5IEF1dGhJbnRlcmNlcHRvclxyXG4gICAgICBsZXQgcmVxdWVzdEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgYWNjZXB0OiAndGV4dC9ldmVudC1zdHJlYW0nLFxyXG4gICAgICAgICdjYWNoZS1jb250cm9sJzogJ25vLWNhY2hlJyxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoaGVhZGVycykge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGhlYWRlcnMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgcmVxdWVzdEhlYWRlcnMgPSByZXF1ZXN0SGVhZGVycy5zZXQoa2V5LCBoZWFkZXJzW2tleV0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCByZXEgPSB0aGlzLmh0dHAucmVxdWVzdCgnUE9TVCcsIHVybCwge1xyXG4gICAgICAgIGJvZHksXHJcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXHJcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgb2JzZXJ2ZTogJ2V2ZW50cycsXHJcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbGV0IGxhc3RMb2FkZWQgPSAwO1xyXG5cclxuICAgICAgY29uc3Qgc3ViID0gcmVxLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5Eb3dubG9hZFByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIG5ldyBjaHVuayBvZiBkYXRhXHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gKGV2ZW50IGFzIGFueSkucGFydGlhbFRleHQ7XHJcbiAgICAgICAgICAgIGlmICghZnVsbFRleHQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1RleHQgPSBmdWxsVGV4dC5zbGljZShsYXN0TG9hZGVkKTtcclxuICAgICAgICAgICAgbGFzdExvYWRlZCA9IGZ1bGxUZXh0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gbmV3VGV4dC5zcGxpdCgnXFxuJyk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcclxuICAgICAgICAgICAgICBpZiAobGluZS50cmltKCkgPT09ICcnKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnZGF0YTogJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFTdHIgPSBsaW5lLnN1YnN0cmluZyg2KS50cmltKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFTdHIgPT09ICdbRE9ORV0nKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoZGF0YVN0cik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29udGVudDogcGFyc2VkLmNvbnRlbnQgPz8gcGFyc2VkLm1lc3NhZ2UgPz8gJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBwYXJzZWQudHlwZSA/PyAnY2h1bmsnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcnNlZC5yZXNwb25zZV9pZCA/PyAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IHBhcnNlZC5jcmVhdGVkX2F0ID8/ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc291cmNlczogcGFyc2VkLnNvdXJjZXMgPz8gW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogcGFyc2VkLmVycm9yLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIHBhcnNlIFNTRSBkYXRhOicsIGRhdGFTdHIsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IG9ic2VydmVyLmNvbXBsZXRlKCkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuICgpID0+IHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==