@aakash58/chatbot 1.1.21 → 1.1.24
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.
- package/README.md +22 -298
- package/esm2022/aakash58-chatbot.mjs +5 -0
- package/esm2022/lib/app/chat/chat-ui-state.service.mjs +170 -0
- package/esm2022/lib/app/chat/chat.service.mjs +445 -0
- package/esm2022/lib/app/chat/components/chat-button/chat-button.component.mjs +50 -0
- package/esm2022/lib/app/chat/components/chat-footer/chat-footer.component.mjs +12 -0
- package/esm2022/lib/app/chat/components/chat-header/chat-header.component.mjs +66 -0
- package/esm2022/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.mjs +186 -0
- package/esm2022/lib/app/chat/components/chat-window/chat-window.component.mjs +312 -0
- package/esm2022/lib/app/chat/components/message-input/message-input.component.mjs +36 -0
- package/esm2022/lib/app/chat/components/message-list/message-list.component.mjs +115 -0
- package/esm2022/lib/app/chat/model/chat-history.model.mjs +2 -0
- package/esm2022/lib/app/chat/model/chat-request.model.mjs +2 -0
- package/esm2022/lib/app/chat/model/chat-response.model.mjs +2 -0
- package/esm2022/lib/app/chat/model/chat-session.model.mjs +2 -0
- package/esm2022/lib/app/chat/model/chat-stream-message.model.mjs +2 -0
- package/esm2022/lib/app/chat/model/chat-stream-response.model.mjs +2 -0
- package/esm2022/lib/app/chat/services/chat-api.service.mjs +61 -0
- package/esm2022/lib/app/chat/services/chat-audio.service.mjs +50 -0
- package/esm2022/lib/app/chat/services/chat-history.service.mjs +252 -0
- package/esm2022/lib/app/login/login-form.component.mjs +46 -0
- package/esm2022/lib/app/personalization/personalization-dialog.component.mjs +194 -0
- package/esm2022/lib/app/personalization/personalization.service.mjs +149 -0
- package/esm2022/lib/app/personalization/sections/account/account-section.component.mjs +122 -0
- package/esm2022/lib/app/personalization/sections/preferences/color-picker-dialog.component.mjs +86 -0
- package/esm2022/lib/app/personalization/sections/preferences/preferences-section.component.mjs +115 -0
- package/esm2022/lib/app/personalization/sections/profile/profile-section.component.mjs +29 -0
- package/esm2022/lib/app/personalization/sections/settings/setting-section.component.mjs +30 -0
- package/esm2022/lib/app/personalization/sections/terms/terms-section.component.mjs +12 -0
- package/esm2022/lib/constant/doohbot-constant.mjs +28 -0
- package/esm2022/lib/constant/html-entities.mjs +9 -0
- package/esm2022/lib/constant/utf8.mjs +10 -0
- package/esm2022/lib/core/app-const.mjs +61 -0
- package/esm2022/lib/core/auth/account-api.service.mjs +40 -0
- package/esm2022/lib/core/auth/auth.service.mjs +391 -0
- package/esm2022/lib/core/auth/models/auth-result.model.mjs +3 -0
- package/esm2022/lib/core/auth/models/federated-login-request.model.mjs +6 -0
- package/esm2022/lib/core/auth/models/login-request.model.mjs +6 -0
- package/esm2022/lib/core/auth/storage.service.mjs +110 -0
- package/esm2022/lib/core/directives/draggable/draggable-dialog.directive.mjs +112 -0
- package/esm2022/lib/core/directives/fullscreen/fullscreen.directive.mjs +55 -0
- package/esm2022/lib/core/directives/resizable/resizable-dialog.directive.mjs +179 -0
- package/esm2022/lib/core/environments/environment.mjs +15 -0
- package/esm2022/lib/core/environments/environment.prod.mjs +15 -0
- package/esm2022/lib/core/helpers/crypto-helper.service.mjs +52 -0
- package/esm2022/lib/core/http/http-stream.service.mjs +97 -0
- package/esm2022/lib/core/http/http.service.mjs +103 -0
- package/esm2022/lib/core/interceptors/auth.interceptor.mjs +96 -0
- package/esm2022/lib/core/interceptors/license.interceptor.mjs +44 -0
- package/esm2022/lib/core/models/api-config.model.mjs +18 -0
- package/esm2022/lib/core/models/api-request.model.mjs +2 -0
- package/esm2022/lib/core/models/api-response.model.mjs +8 -0
- package/esm2022/lib/core/models/doohbot-config.model.mjs +18 -0
- package/esm2022/lib/core/models/license.model.mjs +2 -0
- package/esm2022/lib/core/models/message.mjs +2 -0
- package/esm2022/lib/core/models/theme-config.model.mjs +2 -0
- package/esm2022/lib/core/services/core-config.service.mjs +52 -0
- package/esm2022/lib/core/services/license.service.mjs +145 -0
- package/esm2022/lib/core/services/markdown.service.mjs +64 -0
- package/esm2022/lib/core/services/theme.service.mjs +248 -0
- package/esm2022/lib/core/types/auth-mode.type.mjs +2 -0
- package/esm2022/lib/core/types/auth-status.type.mjs +5 -0
- package/esm2022/lib/core/types/chat-stream.type.mjs +2 -0
- package/esm2022/lib/core/types/message-role.type.mjs +2 -0
- package/esm2022/lib/core/types/prompt-mode.type.mjs +5 -0
- package/esm2022/lib/core/types/snackbar-error.type.mjs +5 -0
- package/esm2022/lib/core/types/tenant-resolution-strategy.type.mjs +2 -0
- package/esm2022/lib/core/utils/logger.service.mjs +42 -0
- package/esm2022/lib/doohbot-input.mjs +20 -0
- package/esm2022/lib/doohbot.component.mjs +444 -0
- package/esm2022/lib/predefined_messages.mjs +15 -0
- package/esm2022/lib/shared/chips/chips.component.mjs +28 -0
- package/esm2022/lib/shared/dialog/dialog.component.mjs +36 -0
- package/esm2022/lib/shared/dialog/dialog.service.mjs +64 -0
- package/esm2022/lib/shared/dialog/dialog.utils.mjs +85 -0
- package/esm2022/lib/shared/dropdown-menu/dropdown-menu.component.mjs +29 -0
- package/esm2022/lib/shared/input-dialog/input-dialog.component.mjs +38 -0
- package/esm2022/lib/shared/menu-item/menu-item.component.mjs +24 -0
- package/esm2022/lib/shared/pipes/simple-markdown.pipe.mjs +27 -0
- package/esm2022/lib/shared/snackbar/snackbar.component.mjs +43 -0
- package/esm2022/lib/shared/snackbar/snackbar.service.mjs +46 -0
- package/esm2022/lib/shared/snackbar/snackbar.utils.mjs +43 -0
- package/esm2022/public-api.mjs +37 -0
- package/fesm2022/aakash58-chatbot.mjs +5193 -0
- package/fesm2022/aakash58-chatbot.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/app/chat/chat-ui-state.service.d.ts +96 -0
- package/lib/app/chat/chat.service.d.ts +88 -0
- package/lib/app/chat/components/chat-button/chat-button.component.d.ts +16 -0
- package/lib/app/chat/components/chat-footer/chat-footer.component.d.ts +5 -0
- package/lib/app/chat/components/chat-header/chat-header.component.d.ts +24 -0
- package/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.d.ts +49 -0
- package/lib/app/chat/components/chat-window/chat-window.component.d.ts +107 -0
- package/lib/app/chat/components/message-input/message-input.component.d.ts +12 -0
- package/lib/app/chat/components/message-list/message-list.component.d.ts +40 -0
- package/lib/app/chat/model/chat-history.model.d.ts +51 -0
- package/lib/app/chat/model/chat-request.model.d.ts +10 -0
- package/lib/app/chat/model/chat-response.model.d.ts +9 -0
- package/lib/app/chat/model/chat-session.model.d.ts +12 -0
- package/{projects/doohbot/src/lib/app/chat/model/chat-stream-message.model.ts → lib/app/chat/model/chat-stream-message.model.d.ts} +5 -6
- package/lib/app/chat/model/chat-stream-response.model.d.ts +10 -0
- package/lib/app/chat/services/chat-api.service.d.ts +30 -0
- package/lib/app/chat/services/chat-audio.service.d.ts +19 -0
- package/lib/app/chat/services/chat-history.service.d.ts +53 -0
- package/lib/app/login/login-form.component.d.ts +20 -0
- package/lib/app/personalization/personalization-dialog.component.d.ts +53 -0
- package/lib/app/personalization/personalization.service.d.ts +66 -0
- package/lib/app/personalization/sections/account/account-section.component.d.ts +30 -0
- package/lib/app/personalization/sections/preferences/color-picker-dialog.component.d.ts +17 -0
- package/lib/app/personalization/sections/preferences/preferences-section.component.d.ts +27 -0
- package/lib/app/personalization/sections/profile/profile-section.component.d.ts +17 -0
- package/lib/app/personalization/sections/settings/setting-section.component.d.ts +10 -0
- package/lib/app/personalization/sections/terms/terms-section.component.d.ts +5 -0
- package/lib/constant/doohbot-constant.d.ts +12 -0
- package/lib/constant/html-entities.d.ts +8 -0
- package/lib/constant/utf8.d.ts +9 -0
- package/lib/core/app-const.d.ts +11 -0
- package/lib/core/auth/account-api.service.d.ts +20 -0
- package/lib/core/auth/auth.service.d.ts +90 -0
- package/lib/core/auth/models/auth-result.model.d.ts +4 -0
- package/lib/core/auth/models/federated-login-request.model.d.ts +5 -0
- package/lib/core/auth/models/login-request.model.d.ts +6 -0
- package/lib/core/auth/storage.service.d.ts +21 -0
- package/lib/core/directives/draggable/draggable-dialog.directive.d.ts +23 -0
- package/lib/core/directives/fullscreen/fullscreen.directive.d.ts +14 -0
- package/lib/core/directives/resizable/resizable-dialog.directive.d.ts +30 -0
- package/lib/core/environments/environment.d.ts +7 -0
- package/lib/core/environments/environment.prod.d.ts +7 -0
- package/lib/core/helpers/crypto-helper.service.d.ts +12 -0
- package/lib/core/http/http-stream.service.d.ts +18 -0
- package/lib/core/http/http.service.d.ts +20 -0
- package/lib/core/interceptors/auth.interceptor.d.ts +18 -0
- package/lib/core/interceptors/license.interceptor.d.ts +11 -0
- package/lib/core/models/api-config.model.d.ts +58 -0
- package/lib/core/models/api-request.model.d.ts +77 -0
- package/lib/core/models/api-response.model.d.ts +6 -0
- package/lib/core/models/doohbot-config.model.d.ts +81 -0
- package/{projects/doohbot/src/lib/core/models/license.model.ts → lib/core/models/license.model.d.ts} +23 -27
- package/lib/core/models/message.d.ts +16 -0
- package/lib/core/models/theme-config.model.d.ts +28 -0
- package/lib/core/services/core-config.service.d.ts +23 -0
- package/lib/core/services/license.service.d.ts +33 -0
- package/lib/core/services/markdown.service.d.ts +8 -0
- package/lib/core/services/theme.service.d.ts +40 -0
- package/{projects/doohbot/src/lib/core/types/auth-mode.type.ts → lib/core/types/auth-mode.type.d.ts} +4 -4
- package/{projects/doohbot/src/lib/core/types/auth-status.type.ts → lib/core/types/auth-status.type.d.ts} +4 -5
- package/{projects/doohbot/src/lib/core/types/chat-stream.type.ts → lib/core/types/chat-stream.type.d.ts} +4 -4
- package/{projects/doohbot/src/lib/core/types/message-role.type.ts → lib/core/types/message-role.type.d.ts} +4 -4
- package/{projects/doohbot/src/lib/core/types/prompt-mode.type.ts → lib/core/types/prompt-mode.type.d.ts} +4 -5
- package/{projects/doohbot/src/lib/core/types/snackbar-error.type.ts → lib/core/types/snackbar-error.type.d.ts} +4 -5
- package/{projects/doohbot/src/lib/core/types/tenant-resolution-strategy.type.ts → lib/core/types/tenant-resolution-strategy.type.d.ts} +4 -4
- package/lib/core/utils/logger.service.d.ts +11 -0
- package/lib/doohbot-input.d.ts +19 -0
- package/lib/doohbot.component.d.ts +108 -0
- package/lib/predefined_messages.d.ts +2 -0
- package/lib/shared/chips/chips.component.d.ts +10 -0
- package/lib/shared/dialog/dialog.component.d.ts +19 -0
- package/lib/shared/dialog/dialog.service.d.ts +29 -0
- package/lib/shared/dialog/dialog.utils.d.ts +41 -0
- package/lib/shared/dropdown-menu/dropdown-menu.component.d.ts +11 -0
- package/lib/shared/input-dialog/input-dialog.component.d.ts +20 -0
- package/lib/shared/menu-item/menu-item.component.d.ts +9 -0
- package/lib/shared/pipes/simple-markdown.pipe.d.ts +10 -0
- package/lib/shared/snackbar/snackbar.component.d.ts +14 -0
- package/lib/shared/snackbar/snackbar.service.d.ts +19 -0
- package/{projects/doohbot/src/lib/shared/snackbar/snackbar.utils.ts → lib/shared/snackbar/snackbar.utils.d.ts} +33 -49
- package/package.json +29 -75
- package/public-api.d.ts +11 -0
- package/.editorconfig +0 -17
- package/.vscode/extensions.json +0 -4
- package/.vscode/launch.json +0 -41
- package/.vscode/settings.json +0 -14
- package/.vscode/tasks.json +0 -60
- package/angular.json +0 -132
- package/docs/PUBLISHING_GUIDE.md +0 -104
- package/projects/app-doohbot/public/assets/const/app-const.json +0 -15
- package/projects/app-doohbot/public/assets/const/doohclick_license.json +0 -6
- package/projects/app-doohbot/public/favicon.ico +0 -0
- package/projects/app-doohbot/src/app/app.config.ts +0 -13
- package/projects/app-doohbot/src/app/app.html +0 -31
- package/projects/app-doohbot/src/app/app.routes.ts +0 -3
- package/projects/app-doohbot/src/app/app.scss +0 -279
- package/projects/app-doohbot/src/app/app.spec.ts +0 -23
- package/projects/app-doohbot/src/app/app.ts +0 -72
- package/projects/app-doohbot/src/index.html +0 -15
- package/projects/app-doohbot/src/main.ts +0 -6
- package/projects/app-doohbot/src/styles.scss +0 -15
- package/projects/app-doohbot/tsconfig.app.json +0 -15
- package/projects/app-doohbot/tsconfig.spec.json +0 -14
- package/projects/doohbot/README.md +0 -64
- package/projects/doohbot/docs/README.md +0 -140
- package/projects/doohbot/ng-package.json +0 -10
- package/projects/doohbot/package.json +0 -16
- package/projects/doohbot/src/lib/app/chat/chat-ui-state.service.ts +0 -194
- package/projects/doohbot/src/lib/app/chat/chat.service.ts +0 -547
- package/projects/doohbot/src/lib/app/chat/components/chat-button/chat-button.component.html +0 -27
- package/projects/doohbot/src/lib/app/chat/components/chat-button/chat-button.component.scss +0 -115
- package/projects/doohbot/src/lib/app/chat/components/chat-button/chat-button.component.ts +0 -35
- package/projects/doohbot/src/lib/app/chat/components/chat-footer/chat-footer.component.html +0 -3
- package/projects/doohbot/src/lib/app/chat/components/chat-footer/chat-footer.component.scss +0 -20
- package/projects/doohbot/src/lib/app/chat/components/chat-footer/chat-footer.component.ts +0 -12
- package/projects/doohbot/src/lib/app/chat/components/chat-header/chat-header.component.html +0 -34
- package/projects/doohbot/src/lib/app/chat/components/chat-header/chat-header.component.scss +0 -78
- package/projects/doohbot/src/lib/app/chat/components/chat-header/chat-header.component.ts +0 -52
- package/projects/doohbot/src/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.html +0 -77
- package/projects/doohbot/src/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.scss +0 -346
- package/projects/doohbot/src/lib/app/chat/components/chat-history-sidebar/chat-history-sidebar.component.ts +0 -188
- package/projects/doohbot/src/lib/app/chat/components/chat-window/chat-window.component.html +0 -146
- package/projects/doohbot/src/lib/app/chat/components/chat-window/chat-window.component.scss +0 -187
- package/projects/doohbot/src/lib/app/chat/components/chat-window/chat-window.component.ts +0 -256
- package/projects/doohbot/src/lib/app/chat/components/message-input/message-input.component.html +0 -17
- package/projects/doohbot/src/lib/app/chat/components/message-input/message-input.component.scss +0 -59
- package/projects/doohbot/src/lib/app/chat/components/message-input/message-input.component.ts +0 -28
- package/projects/doohbot/src/lib/app/chat/components/message-list/message-list.component.html +0 -138
- package/projects/doohbot/src/lib/app/chat/components/message-list/message-list.component.scss +0 -436
- package/projects/doohbot/src/lib/app/chat/components/message-list/message-list.component.ts +0 -106
- package/projects/doohbot/src/lib/app/chat/model/chat-history.model.ts +0 -57
- package/projects/doohbot/src/lib/app/chat/model/chat-request.model.ts +0 -17
- package/projects/doohbot/src/lib/app/chat/model/chat-response.model.ts +0 -9
- package/projects/doohbot/src/lib/app/chat/model/chat-session.model.ts +0 -14
- package/projects/doohbot/src/lib/app/chat/model/chat-stream-response.model.ts +0 -12
- package/projects/doohbot/src/lib/app/chat/services/chat-api.service.ts +0 -82
- package/projects/doohbot/src/lib/app/chat/services/chat-audio.service.ts +0 -44
- package/projects/doohbot/src/lib/app/chat/services/chat-history.service.ts +0 -303
- package/projects/doohbot/src/lib/app/login/login-form.component.html +0 -80
- package/projects/doohbot/src/lib/app/login/login-form.component.scss +0 -189
- package/projects/doohbot/src/lib/app/login/login-form.component.ts +0 -45
- package/projects/doohbot/src/lib/app/personalization/personalization-dialog.component.html +0 -81
- package/projects/doohbot/src/lib/app/personalization/personalization-dialog.component.scss +0 -179
- package/projects/doohbot/src/lib/app/personalization/personalization-dialog.component.ts +0 -217
- package/projects/doohbot/src/lib/app/personalization/personalization.service.ts +0 -197
- package/projects/doohbot/src/lib/app/personalization/sections/account/account-section.component.html +0 -111
- package/projects/doohbot/src/lib/app/personalization/sections/account/account-section.component.scss +0 -218
- package/projects/doohbot/src/lib/app/personalization/sections/account/account-section.component.ts +0 -121
- package/projects/doohbot/src/lib/app/personalization/sections/instructions/instructions-section.component.html +0 -46
- package/projects/doohbot/src/lib/app/personalization/sections/instructions/instructions-section.component.scss +0 -138
- package/projects/doohbot/src/lib/app/personalization/sections/instructions/instructions-section.component.ts +0 -28
- package/projects/doohbot/src/lib/app/personalization/sections/preferences/color-picker-dialog.component.ts +0 -92
- package/projects/doohbot/src/lib/app/personalization/sections/preferences/preferences-section.component.html +0 -198
- package/projects/doohbot/src/lib/app/personalization/sections/preferences/preferences-section.component.scss +0 -107
- package/projects/doohbot/src/lib/app/personalization/sections/preferences/preferences-section.component.ts +0 -103
- package/projects/doohbot/src/lib/app/personalization/sections/profile/profile-section.component.html +0 -46
- package/projects/doohbot/src/lib/app/personalization/sections/profile/profile-section.component.scss +0 -131
- package/projects/doohbot/src/lib/app/personalization/sections/profile/profile-section.component.ts +0 -23
- package/projects/doohbot/src/lib/app/personalization/sections/settings/setting-section.component.html +0 -33
- package/projects/doohbot/src/lib/app/personalization/sections/settings/setting-section.component.scss +0 -61
- package/projects/doohbot/src/lib/app/personalization/sections/settings/setting-section.component.ts +0 -20
- package/projects/doohbot/src/lib/app/personalization/sections/terms/terms-section.component.html +0 -30
- package/projects/doohbot/src/lib/app/personalization/sections/terms/terms-section.component.scss +0 -59
- package/projects/doohbot/src/lib/app/personalization/sections/terms/terms-section.component.ts +0 -12
- package/projects/doohbot/src/lib/constant/doohbot-constant.ts +0 -40
- package/projects/doohbot/src/lib/constant/html-entities.ts +0 -8
- package/projects/doohbot/src/lib/constant/utf8.ts +0 -9
- package/projects/doohbot/src/lib/core/app-const.ts +0 -63
- package/projects/doohbot/src/lib/core/auth/account-api.service.ts +0 -53
- package/projects/doohbot/src/lib/core/auth/auth.service.ts +0 -478
- package/projects/doohbot/src/lib/core/auth/models/auth-result.model.ts +0 -4
- package/projects/doohbot/src/lib/core/auth/models/federated-login-request.model.ts +0 -5
- package/projects/doohbot/src/lib/core/auth/models/login-request.model.ts +0 -6
- package/projects/doohbot/src/lib/core/auth/storage.service.ts +0 -113
- package/projects/doohbot/src/lib/core/directives/draggable/draggable-dialog.directive.ts +0 -123
- package/projects/doohbot/src/lib/core/directives/draggable/draggable-dialog.module.ts +0 -9
- package/projects/doohbot/src/lib/core/directives/fullscreen/fullscreen.directive.ts +0 -58
- package/projects/doohbot/src/lib/core/directives/fullscreen/fullscreen.module.ts +0 -9
- package/projects/doohbot/src/lib/core/directives/popout/popout.directive.ts +0 -169
- package/projects/doohbot/src/lib/core/directives/popout/popout.module.ts +0 -9
- package/projects/doohbot/src/lib/core/directives/resizable/resizable-dialog.directive.ts +0 -197
- package/projects/doohbot/src/lib/core/directives/resizable/resizable-dialog.module.ts +0 -9
- package/projects/doohbot/src/lib/core/enums/api-request-state.enum.ts +0 -9
- package/projects/doohbot/src/lib/core/environments/environment.prod.ts +0 -14
- package/projects/doohbot/src/lib/core/environments/environment.ts +0 -14
- package/projects/doohbot/src/lib/core/helpers/crypto-helper.service.ts +0 -72
- package/projects/doohbot/src/lib/core/http/http-stream.service.ts +0 -105
- package/projects/doohbot/src/lib/core/http/http.service.ts +0 -148
- package/projects/doohbot/src/lib/core/interceptors/auth.interceptor.ts +0 -118
- package/projects/doohbot/src/lib/core/interceptors/license.interceptor.ts +0 -50
- package/projects/doohbot/src/lib/core/models/api-config.model.ts +0 -82
- package/projects/doohbot/src/lib/core/models/api-request.model.ts +0 -92
- package/projects/doohbot/src/lib/core/models/api-response.model.ts +0 -13
- package/projects/doohbot/src/lib/core/models/doohbot-config.model.ts +0 -109
- package/projects/doohbot/src/lib/core/models/message.ts +0 -18
- package/projects/doohbot/src/lib/core/models/theme-config.model.ts +0 -48
- package/projects/doohbot/src/lib/core/services/core-config.service.ts +0 -53
- package/projects/doohbot/src/lib/core/services/doohbot-api.service.ts +0 -207
- package/projects/doohbot/src/lib/core/services/license.service.ts +0 -171
- package/projects/doohbot/src/lib/core/services/markdown.service.ts +0 -73
- package/projects/doohbot/src/lib/core/services/theme.service.ts +0 -305
- package/projects/doohbot/src/lib/core/utils/error-handler.util.ts +0 -31
- package/projects/doohbot/src/lib/core/utils/logger.service.ts +0 -45
- package/projects/doohbot/src/lib/doohbot-input.ts +0 -19
- package/projects/doohbot/src/lib/doohbot.component.html +0 -34
- package/projects/doohbot/src/lib/doohbot.component.scss +0 -17
- package/projects/doohbot/src/lib/doohbot.component.spec.ts +0 -31
- package/projects/doohbot/src/lib/doohbot.component.ts +0 -545
- package/projects/doohbot/src/lib/elements.ts +0 -25
- package/projects/doohbot/src/lib/predefined_messages.ts +0 -14
- package/projects/doohbot/src/lib/shared/chips/chips.component.html +0 -9
- package/projects/doohbot/src/lib/shared/chips/chips.component.scss +0 -29
- package/projects/doohbot/src/lib/shared/chips/chips.component.spec.ts +0 -22
- package/projects/doohbot/src/lib/shared/chips/chips.component.ts +0 -20
- package/projects/doohbot/src/lib/shared/dialog/dialog.component.html +0 -29
- package/projects/doohbot/src/lib/shared/dialog/dialog.component.scss +0 -100
- package/projects/doohbot/src/lib/shared/dialog/dialog.component.ts +0 -42
- package/projects/doohbot/src/lib/shared/dialog/dialog.service.ts +0 -62
- package/projects/doohbot/src/lib/shared/dialog/dialog.utils.ts +0 -102
- package/projects/doohbot/src/lib/shared/dropdown-menu/dropdown-menu.component.html +0 -30
- package/projects/doohbot/src/lib/shared/dropdown-menu/dropdown-menu.component.scss +0 -53
- package/projects/doohbot/src/lib/shared/dropdown-menu/dropdown-menu.component.spec.ts +0 -22
- package/projects/doohbot/src/lib/shared/dropdown-menu/dropdown-menu.component.ts +0 -35
- package/projects/doohbot/src/lib/shared/input-dialog/input-dialog.component.html +0 -16
- package/projects/doohbot/src/lib/shared/input-dialog/input-dialog.component.scss +0 -45
- package/projects/doohbot/src/lib/shared/input-dialog/input-dialog.component.ts +0 -46
- package/projects/doohbot/src/lib/shared/menu-item/menu-item.component.html +0 -5
- package/projects/doohbot/src/lib/shared/menu-item/menu-item.component.scss +0 -0
- package/projects/doohbot/src/lib/shared/menu-item/menu-item.component.spec.ts +0 -22
- package/projects/doohbot/src/lib/shared/menu-item/menu-item.component.ts +0 -20
- package/projects/doohbot/src/lib/shared/pipes/simple-markdown.pipe.ts +0 -19
- package/projects/doohbot/src/lib/shared/popout/popout.html +0 -1
- package/projects/doohbot/src/lib/shared/popout/popout.scss +0 -0
- package/projects/doohbot/src/lib/shared/popout/popout.spec.ts +0 -23
- package/projects/doohbot/src/lib/shared/popout/popout.ts +0 -11
- package/projects/doohbot/src/lib/shared/snackbar/snackbar.component.html +0 -7
- package/projects/doohbot/src/lib/shared/snackbar/snackbar.component.scss +0 -125
- package/projects/doohbot/src/lib/shared/snackbar/snackbar.component.spec.ts +0 -21
- package/projects/doohbot/src/lib/shared/snackbar/snackbar.component.ts +0 -44
- package/projects/doohbot/src/lib/shared/snackbar/snackbar.service.ts +0 -54
- package/projects/doohbot/src/lib/styles/_theme.scss +0 -132
- package/projects/doohbot/src/lib/styles/material-override.scss +0 -302
- package/projects/doohbot/src/lib/styles/utility.scss +0 -588
- package/projects/doohbot/src/public-api.ts +0 -42
- package/projects/doohbot/tsconfig.lib.json +0 -15
- package/projects/doohbot/tsconfig.lib.prod.json +0 -11
- package/projects/doohbot/tsconfig.spec.json +0 -10
- package/proxy.conf.json +0 -8
- package/publish.config.js +0 -25
- package/scripts/publishing/index.ts +0 -67
- package/scripts/publishing/pipeline/01-clean.ts +0 -11
- package/scripts/publishing/pipeline/02-validate-pre.ts +0 -8
- package/scripts/publishing/pipeline/03-build.ts +0 -7
- package/scripts/publishing/pipeline/04-validate-post.ts +0 -8
- package/scripts/publishing/pipeline/05-prepare-package.ts +0 -29
- package/scripts/publishing/pipeline/06-version.ts +0 -23
- package/scripts/publishing/pipeline/07-publish.ts +0 -14
- package/scripts/publishing/pipeline/08-cleanup.ts +0 -5
- package/scripts/publishing/types.ts +0 -36
- package/scripts/publishing/utils/command.ts +0 -15
- package/scripts/publishing/utils/config.ts +0 -17
- package/scripts/validate.ts +0 -166
- package/tsconfig.json +0 -45
- package/tsconfig.scripts.json +0 -15
- /package/{projects/doohbot/src → src}/assets/bot.mp3 +0 -0
package/README.md
CHANGED
|
@@ -1,16 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Doohbot
|
|
2
2
|
|
|
3
|
-
This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.3.
|
|
4
|
-
|
|
5
|
-
## Development server
|
|
6
|
-
|
|
7
|
-
To start a local development server, run:
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
ng serve
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Once the server is running, open your browser and navigate to `http://localhost:4200/`. The application will automatically reload whenever you modify any of the source files.
|
|
3
|
+
This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.3.0.
|
|
14
4
|
|
|
15
5
|
## Code scaffolding
|
|
16
6
|
|
|
@@ -28,313 +18,47 @@ ng generate --help
|
|
|
28
18
|
|
|
29
19
|
## Building
|
|
30
20
|
|
|
31
|
-
To build the
|
|
21
|
+
To build the library, run:
|
|
32
22
|
|
|
33
23
|
```bash
|
|
34
|
-
|
|
35
|
-
ng build
|
|
36
|
-
|
|
37
|
-
# Build the library (doohbot)
|
|
38
|
-
npm run build-lib
|
|
24
|
+
ng build doohbot
|
|
39
25
|
```
|
|
40
26
|
|
|
41
|
-
This will compile your project and
|
|
27
|
+
This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
|
|
42
28
|
|
|
43
|
-
|
|
29
|
+
### Publishing the Library
|
|
44
30
|
|
|
45
|
-
|
|
31
|
+
Once the project is built, you can publish your library by following these steps:
|
|
46
32
|
|
|
47
|
-
|
|
48
|
-
ng test
|
|
49
|
-
```
|
|
33
|
+
1. Navigate to the `dist` directory:
|
|
50
34
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
35
|
+
```bash
|
|
36
|
+
cd dist/doohbot
|
|
37
|
+
```
|
|
54
38
|
|
|
55
|
-
|
|
39
|
+
2. Run the `npm publish` command to publish your library to the npm registry:
|
|
40
|
+
```bash
|
|
41
|
+
npm publish
|
|
42
|
+
```
|
|
56
43
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
### 1. Validate the Package
|
|
60
|
-
|
|
61
|
-
Before publishing, always run validation to ensure the library follows peer dependency rules and doesn't contain platform-creation code.
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
npm run validate -- doohbot
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### 2. Publish (Dry Run)
|
|
44
|
+
## Running unit tests
|
|
68
45
|
|
|
69
|
-
|
|
46
|
+
To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
|
|
70
47
|
|
|
71
48
|
```bash
|
|
72
|
-
|
|
49
|
+
ng test
|
|
73
50
|
```
|
|
74
51
|
|
|
75
|
-
|
|
52
|
+
## Running end-to-end tests
|
|
76
53
|
|
|
77
|
-
|
|
54
|
+
For end-to-end (e2e) testing, run:
|
|
78
55
|
|
|
79
56
|
```bash
|
|
80
|
-
|
|
81
|
-
npm run publish -- doohbot
|
|
82
|
-
|
|
83
|
-
# Auto-increment version and publish
|
|
84
|
-
npm run publish -- doohbot --patch
|
|
85
|
-
npm run publish -- doohbot --minor
|
|
86
|
-
npm run publish -- doohbot --major
|
|
57
|
+
ng e2e
|
|
87
58
|
```
|
|
88
59
|
|
|
89
|
-
|
|
90
|
-
> Detailed instructions and troubleshooting can be found in the [Publishing Guide](file:///d:/doohbot-copy/doohbot-ui/docs/PUBLISHING_GUIDE.md).
|
|
60
|
+
Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
|
|
91
61
|
|
|
92
62
|
## Additional Resources
|
|
93
63
|
|
|
94
64
|
For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|
|
95
|
-
|
|
96
|
-
# DoohBot Project Analysis & Structure
|
|
97
|
-
|
|
98
|
-
## Overview
|
|
99
|
-
|
|
100
|
-
This project is an Angular workspace designed to build and maintain the `doohbot` conversational UI library. It follows a multi-project workspace structure, separating the core library logic from the wrapper/application layer.
|
|
101
|
-
|
|
102
|
-
## 📁 Project Structure
|
|
103
|
-
|
|
104
|
-
```text
|
|
105
|
-
root/
|
|
106
|
-
├── .vscode/ 🛠️ VS Code settings (launch, tasks)
|
|
107
|
-
├── projects/
|
|
108
|
-
│ ├── doohbot/ 📦 Core Chatbot UI Library
|
|
109
|
-
│ │ ├── src/
|
|
110
|
-
│ │ │ ├── lib/
|
|
111
|
-
│ │ │ │ ├── components/ 🎨 Feature Components
|
|
112
|
-
│ │ │ │ │ ├── chat-button/ ✨ Floating launcher button
|
|
113
|
-
│ │ │ │ │ ├── chat-history-sidebar/ ✨ Sidebar for past chats
|
|
114
|
-
│ │ │ │ │ ├── chat-window/ ✨ Main chat interface container
|
|
115
|
-
│ │ │ │ │ ├── message-input/ ✨ Input area & send logic
|
|
116
|
-
│ │ │ │ │ └── message-list/ ✨ Scrollable message stream
|
|
117
|
-
│ │ │ │ ├── core/ 🧠 Core Logic & Services
|
|
118
|
-
│ │ │ │ │ ├── helpers/
|
|
119
|
-
│ │ │ │ │ │ └── crypto-helper.service.ts
|
|
120
|
-
│ │ │ │ │ ├── interceptors/
|
|
121
|
-
│ │ │ │ │ │ └── auth.interceptor.ts ✨ Token injection
|
|
122
|
-
│ │ │ │ │ ├── models/ 📋 Interfaces & Types
|
|
123
|
-
│ │ │ │ │ │ ├── api-response.model.ts
|
|
124
|
-
│ │ │ │ │ │ ├── auth-result.model.ts
|
|
125
|
-
│ │ │ │ │ │ ├── login-request.model.ts
|
|
126
|
-
│ │ │ │ │ │ └── user-context.model.ts
|
|
127
|
-
│ │ │ │ │ ├── services/ ⚙️ Singleton Services
|
|
128
|
-
│ │ │ │ │ │ ├── account.service.ts
|
|
129
|
-
│ │ │ │ │ │ ├── auth.service.ts ✨ Authentication mgmt
|
|
130
|
-
│ │ │ │ │ │ ├── chat-facade.service.ts ✨ Main interaction API
|
|
131
|
-
│ │ │ │ │ │ ├── chat-history.service.ts
|
|
132
|
-
│ │ │ │ │ │ ├── chat-ui-state.service.ts ✨ UI visibility state
|
|
133
|
-
│ │ │ │ │ │ ├── doohbot-api.service.ts ✨ Backend API wrapper
|
|
134
|
-
│ │ │ │ │ │ ├── http.service.ts
|
|
135
|
-
│ │ │ │ │ │ ├── storage.service.ts
|
|
136
|
-
│ │ │ │ │ │ ├── tenant-context.service.ts
|
|
137
|
-
│ │ │ │ │ │ └── theme.service.ts ✨ Dynamic theming
|
|
138
|
-
│ │ │ │ │ └── app-const.ts
|
|
139
|
-
│ │ │ │ ├── directives/ 🎮 DOM Behaviors
|
|
140
|
-
│ │ │ │ │ ├── draggable/ ✨ Drag window logic
|
|
141
|
-
│ │ │ │ │ ├── fullscreen/ ✨ Fullscreen toggle
|
|
142
|
-
│ │ │ │ │ ├── popout/ ✨ Popout window logic
|
|
143
|
-
│ │ │ │ │ └── resizable/ ✨ Resize window logic
|
|
144
|
-
│ │ │ │ ├── shared/ 🧩 Reusable UI Elements
|
|
145
|
-
│ │ │ │ │ ├── chips/ ✨ Suggestion chips
|
|
146
|
-
│ │ │ │ │ ├── dialog/ ✨ Modal dialogs
|
|
147
|
-
│ │ │ │ │ ├── dropdown-menu/ ✨ Custom options menu
|
|
148
|
-
│ │ │ │ │ ├── menu-item/
|
|
149
|
-
│ │ │ │ │ ├── popout/ ✨ Popout wrapper component
|
|
150
|
-
│ │ │ │ │ └── snackbar/ ✨ Toast notifications
|
|
151
|
-
│ │ │ │ ├── styles/ 💅 Global Styles
|
|
152
|
-
│ │ │ │ │ ├── _theme.scss ✨ Theming mixins
|
|
153
|
-
│ │ │ │ │ ├── material-override.scss ✨ Material design tweaks
|
|
154
|
-
│ │ │ │ │ ├── utility.scss
|
|
155
|
-
│ │ │ │ │ └── variables.scss
|
|
156
|
-
│ │ │ │ ├── elements/ 🧱 Custom Elements Config
|
|
157
|
-
│ │ │ │ └── model/ 📋 Library-wide Models
|
|
158
|
-
│ │ │ │ └── doohbot-config.model.ts
|
|
159
|
-
│ │ │ └── public-api.ts ✨ Library Entry Point
|
|
160
|
-
│ └── doohbot-element/ 🔧 Wrapper Application
|
|
161
|
-
│ └── src/
|
|
162
|
-
├── dist/ 📂 Build Artifacts
|
|
163
|
-
├── docs/ 📚 Project Documentation
|
|
164
|
-
├── examples/ 💡 Usage Examples
|
|
165
|
-
├── angular.json ⚙️ Workspace Configuration
|
|
166
|
-
├── package.json 📦 Dependencies & Scripts
|
|
167
|
-
├── tsconfig.json ⚙️ TypeScript Config
|
|
168
|
-
└── README.md 📄 Documentation
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
# DoohBot Project Analysis & Structure
|
|
174
|
-
|
|
175
|
-
## Overview
|
|
176
|
-
|
|
177
|
-
This project is an Angular workspace designed to build and maintain the `doohbot` conversational UI library. It follows a multi-project workspace structure, separating the core library logic from the wrapper/application layer.
|
|
178
|
-
|
|
179
|
-
## Project Architecture
|
|
180
|
-
|
|
181
|
-
### Workspace Structure
|
|
182
|
-
|
|
183
|
-
The workspace root contains configuration files that manage the build, linting, and development environment for all projects within the repository.
|
|
184
|
-
|
|
185
|
-
#### Root Configuration Files
|
|
186
|
-
|
|
187
|
-
- **`angular.json`**: The workspace configuration file. Defines the projects (`doohbot`, `doohbot-element`), build architectures, file replacements, and default project settings.
|
|
188
|
-
- **`package.json`**: Lists npm dependencies (Angular, Material, etc.), build scripts, and package metadata.
|
|
189
|
-
- **`tsconfig.json`**: Base TypeScript configuration for the entire workspace.
|
|
190
|
-
- **`.editorconfig`**: Defines consistent coding styles (indentation, charset, etc.) for different IDEs.
|
|
191
|
-
- **`.gitignore`**: Specifies files and directories ignored by Git.
|
|
192
|
-
|
|
193
|
-
#### Root Directories
|
|
194
|
-
|
|
195
|
-
- **`projects/`**: The core directory containing the source code for the library and applications.
|
|
196
|
-
- **`doohbot/`**: The main Angular Library project.
|
|
197
|
-
- **`doohbot-element/`**: The wrapper application project.
|
|
198
|
-
- **`.vscode/`**: VS Code specific settings.
|
|
199
|
-
- `launch.json`: Debugging configurations.
|
|
200
|
-
- `tasks.json`: Task definitions (e.g., build commands).
|
|
201
|
-
- `extensions.json`: Recommended extensions for this workspace.
|
|
202
|
-
- **`dist/`**: The output directory where build artifacts (compiled code) are generated.
|
|
203
|
-
- **`docs/`**: Documentation files for the project.
|
|
204
|
-
- **`examples/`**: Contains example implementations or usage scenarios.
|
|
205
|
-
|
|
206
|
-
### 1. DoohBot Library (`projects/doohbot`)
|
|
207
|
-
|
|
208
|
-
This is the heart of the repository. It contains the reusable Angular components, services, and directives that make up the chat interface.
|
|
209
|
-
|
|
210
|
-
The following is a detailed breakdown of every file in the library:
|
|
211
|
-
|
|
212
|
-
#### Component Layer (`src/lib/components`)
|
|
213
|
-
|
|
214
|
-
High-level structural components that compose the chat application.
|
|
215
|
-
|
|
216
|
-
- **chat-window/**: The main container for the chat interface.
|
|
217
|
-
- `chat-window.component.ts`: Logic for window state (open/close, minimize), layout, and event handling.
|
|
218
|
-
- `chat-window.component.html`: Template structure for the chat window.
|
|
219
|
-
- `chat-window.component.scss`: Styles for the chat window container.
|
|
220
|
-
- **message-list/**: Renders the scrollable list of chat messages.
|
|
221
|
-
- `message-list.component.ts`: Handles rendering messages, auto-scrolling, and message grouping.
|
|
222
|
-
- `message-list.component.html`: Template loop for displaying messages.
|
|
223
|
-
- `message-list.component.scss`: Styles for the message container and bubbles.
|
|
224
|
-
- **message-input/**: The area where users type and send messages.
|
|
225
|
-
- `message-input.component.ts`: Logic for text input, auto-resizing textarea, and send actions.
|
|
226
|
-
- `message-input.component.html`: Template for the input field and send button.
|
|
227
|
-
- `message-input.component.scss`: Styles for the input area.
|
|
228
|
-
- `messaging.service.ts`: Local service for message input state or helper logic.
|
|
229
|
-
- **chat-history-sidebar/**: Sidebar displaying a list of previous chat sessions.
|
|
230
|
-
- `chat-history-sidebar.component.ts`: Logic for fetching and displaying history items.
|
|
231
|
-
- `chat-history-sidebar.component.html`: Template for the sidebar list.
|
|
232
|
-
- `chat-history-sidebar.component.scss`: Styles for the sidebar and history items.
|
|
233
|
-
- **chat-button/**: The floating action button (FAB) to toggle the chat.
|
|
234
|
-
- `chat-button.component.ts`: Logic for the floating launcher button.
|
|
235
|
-
- `chat-button.component.html`: Template for the button icon.
|
|
236
|
-
- `chat-button.component.scss`: Styles for positioning and animating the button.
|
|
237
|
-
|
|
238
|
-
#### Core Layer (`src/lib/core`)
|
|
239
|
-
|
|
240
|
-
Singleton services and core business logic.
|
|
241
|
-
|
|
242
|
-
- **services/**:
|
|
243
|
-
- `auth.service.ts`: Manages user authentication, login/logout, and token storage.
|
|
244
|
-
- `chat-facade.service.ts`: The primary API for components to interact with chat logic (Facade pattern).
|
|
245
|
-
- `chat-history.service.ts`: Handles API calls to fetch/store chat history.
|
|
246
|
-
- `chat-ui-state.service.ts`: Manages UI state (open, closed, loading) across components.
|
|
247
|
-
- `doohbot-api.service.ts`: Low-level wrapper for backend API endpoints.
|
|
248
|
-
- `http.service.ts`: Custom wrapper around HttpClient for standardized requests/error handling.
|
|
249
|
-
- `storage.service.ts`: Wrapper for LocalStorage/SessionStorage interactions.
|
|
250
|
-
- `tenant-context.service.ts`: Manages tenant-specific configuration and context.
|
|
251
|
-
- `theme.service.ts`: Dynamically applies themes by manipulating CSS variables.
|
|
252
|
-
- `account.service.ts`: logic related to user account management.
|
|
253
|
-
- **models/**:
|
|
254
|
-
- `api-response.model.ts`: Interface for standard API response structure.
|
|
255
|
-
- `auth-result.model.ts`: Interface for authentication results.
|
|
256
|
-
- `login-request.model.ts`: Interface for login payloads.
|
|
257
|
-
- `user-context.model.ts`: Interface for user session data.
|
|
258
|
-
- **interceptors/**:
|
|
259
|
-
- `auth.interceptor.ts`: HTTP interceptor to inject Auth tokens into requests.
|
|
260
|
-
- **helpers/**:
|
|
261
|
-
- `crypto-helper.service.ts`: Utilities for encryption/decryption (if used).
|
|
262
|
-
- **roots**:
|
|
263
|
-
- `app-const.ts`: Application-wide constants.
|
|
264
|
-
|
|
265
|
-
#### Shared Layer (`src/lib/shared`)
|
|
266
|
-
|
|
267
|
-
Reusable UI components used within the larger feature components.
|
|
268
|
-
|
|
269
|
-
- **chips/**:
|
|
270
|
-
- `chips.component.ts/html/scss`: Renders clickable suggestion chips.
|
|
271
|
-
- **dialog/**:
|
|
272
|
-
- `dialog.component.ts/html/scss`: A reusable modal/dialog component.
|
|
273
|
-
- `dialog.service.ts`: Service to dynamically open dialogs.
|
|
274
|
-
- **dropdown-menu/**:
|
|
275
|
-
- `dropdown-menu.component.ts/html/scss`: A custom dropdown menu UI.
|
|
276
|
-
- **menu-item/**:
|
|
277
|
-
- `menu-item.component.ts/html/scss`: Individual items within a menu.
|
|
278
|
-
- **snackbar/**:
|
|
279
|
-
- `snackbar.component.ts/html/scss`: Toast notification component.
|
|
280
|
-
- **popout/**:
|
|
281
|
-
- `popout.ts/html/scss`: Component wrapper for popped-out windows.
|
|
282
|
-
|
|
283
|
-
#### Directives (`src/lib/directives`)
|
|
284
|
-
|
|
285
|
-
Custom behaviors applied to DOM elements.
|
|
286
|
-
|
|
287
|
-
- **draggable/**:
|
|
288
|
-
- `draggable-dialog.directive.ts`: Makes the chat window draggable.
|
|
289
|
-
- `draggable-dialog.module.ts`: Module declaring the directive.
|
|
290
|
-
- **resizable/**:
|
|
291
|
-
- `resizable-dialog.directive.ts`: Allows resizing the chat window.
|
|
292
|
-
- `resizable-dialog.module.ts`: Module declaring the directive.
|
|
293
|
-
- **fullscreen/**:
|
|
294
|
-
- `fullscreen.directive.ts`: Toggles fullscreen mode for an element.
|
|
295
|
-
- `fullscreen.module.ts`: Module declaring the directive.
|
|
296
|
-
- **popout/**:
|
|
297
|
-
- `popout.directive.ts`: Handles the logic for detecting popout actions.
|
|
298
|
-
- `popout.module.ts`: Module declaring the directive.
|
|
299
|
-
|
|
300
|
-
#### Models (`src/lib/model`)
|
|
301
|
-
|
|
302
|
-
TypeScript interfaces and types.
|
|
303
|
-
|
|
304
|
-
- `doohbot-config.model.ts`: Configuration interface for the library.
|
|
305
|
-
- `api-config.model.ts`: Configuration for API endpoints.
|
|
306
|
-
- `chat-session.model.ts`: Model for a chat session.
|
|
307
|
-
- `message.ts`: Model for a single chat message.
|
|
308
|
-
- `doohbot.intents.ts`: Enum or types for chatbot intents.
|
|
309
|
-
- `theme-config.model.ts`: Interface for theming options.
|
|
310
|
-
- `token.ts`: Interface for auth tokens.
|
|
311
|
-
- `tenant-config.model.ts`: Interface for tenant settings.
|
|
312
|
-
|
|
313
|
-
#### Styles (`src/lib/styles`)
|
|
314
|
-
|
|
315
|
-
Global styles and variables.
|
|
316
|
-
|
|
317
|
-
- `variables.scss`: SCSS variables for colors, spacing, etc.
|
|
318
|
-
- `_theme.scss`: Mixins and logic for generating themes.
|
|
319
|
-
- `utility.scss`: General utility classes.
|
|
320
|
-
- `material-override.scss`: Overrides for Angular Material styles.
|
|
321
|
-
|
|
322
|
-
#### Elements (`src/lib/elements`)
|
|
323
|
-
|
|
324
|
-
- `elements.ts`: Logic/definitions for Custom Elements.
|
|
325
|
-
|
|
326
|
-
#### Inputs (`src/lib/inputs`)
|
|
327
|
-
|
|
328
|
-
- `doohbot-input.ts`: Input definitions or configurations.
|
|
329
|
-
|
|
330
|
-
#### Constants (`src/lib/constant`)
|
|
331
|
-
|
|
332
|
-
- `app-constants.ts`: Global application constants.
|
|
333
|
-
- `constant.ts`: General constants.
|
|
334
|
-
- `utf8.ts`: UTF8 encoding/decoding utilities or constants.
|
|
335
|
-
|
|
336
|
-
### 2. DoohBot Element (`projects/doohbot-element`)
|
|
337
|
-
|
|
338
|
-
This project serves as a wrapper to package the `doohbot` library as a standalone Web Component (Angular Element), enabling integration into non-Angular environments.
|
|
339
|
-
|
|
340
|
-
---
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWFrYXNoNTgtY2hhdGJvdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Rvb2hib3Qvc3JjL2Fha2FzaDU4LWNoYXRib3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { Injectable, signal, computed, effect } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* ChatUIStateService - Centralized UI state management
|
|
5
|
+
*
|
|
6
|
+
* Manages all UI-related state for the chat component including:
|
|
7
|
+
* - Chat window open/close state
|
|
8
|
+
* - History sidebar visibility
|
|
9
|
+
* - Unread message tracking
|
|
10
|
+
* - Fullscreen state
|
|
11
|
+
*
|
|
12
|
+
* This service uses Angular signals for reactive state management,
|
|
13
|
+
* allowing components to subscribe to state changes efficiently.
|
|
14
|
+
*/
|
|
15
|
+
export class ChatUIStateService {
|
|
16
|
+
constructor() {
|
|
17
|
+
//! ===================== UI STATE SIGNALS============================
|
|
18
|
+
/**
|
|
19
|
+
* Whether the chat window is currently open
|
|
20
|
+
*/
|
|
21
|
+
this.isChatOpen = signal(false);
|
|
22
|
+
/**
|
|
23
|
+
* Whether the history sidebar is currently open
|
|
24
|
+
*/
|
|
25
|
+
this.isHistorySidebarOpen = signal(false);
|
|
26
|
+
/**
|
|
27
|
+
* Whether the chat is in fullscreen mode
|
|
28
|
+
*/
|
|
29
|
+
this.isFullScreen = signal(false);
|
|
30
|
+
/**
|
|
31
|
+
* ID of the last message that was read by the user
|
|
32
|
+
*/
|
|
33
|
+
this.lastReadMessageId = signal(null);
|
|
34
|
+
/**
|
|
35
|
+
* Reference to current messages (injected from outside)
|
|
36
|
+
*/
|
|
37
|
+
this.messagesSignal = signal([]);
|
|
38
|
+
//! ===================== COMPUTED SIGNALS ======================
|
|
39
|
+
/**
|
|
40
|
+
* Computed number of unread bot messages
|
|
41
|
+
*/
|
|
42
|
+
this.unreadCount = computed(() => {
|
|
43
|
+
if (this.isChatOpen()) {
|
|
44
|
+
return 0; // No unread when chat is open
|
|
45
|
+
}
|
|
46
|
+
const messages = this.messagesSignal();
|
|
47
|
+
if (messages.length === 0)
|
|
48
|
+
return 0;
|
|
49
|
+
const lastReadId = this.lastReadMessageId();
|
|
50
|
+
let lastReadIndex = -1;
|
|
51
|
+
if (lastReadId !== null) {
|
|
52
|
+
lastReadIndex = messages.findIndex((msg) => msg.id === lastReadId);
|
|
53
|
+
}
|
|
54
|
+
// Count unread bot messages after last read position
|
|
55
|
+
const unreadBotMessages = messages
|
|
56
|
+
.slice(lastReadIndex + 1)
|
|
57
|
+
.filter((msg) => msg.sender === 'assistant');
|
|
58
|
+
return unreadBotMessages.length;
|
|
59
|
+
});
|
|
60
|
+
//! ===================== EFFECTS ========================
|
|
61
|
+
/**
|
|
62
|
+
* Effect to automatically mark messages as read when chat is opened
|
|
63
|
+
*/
|
|
64
|
+
this.markAsReadEffect = effect(() => {
|
|
65
|
+
const isOpen = this.isChatOpen();
|
|
66
|
+
const msgs = this.messagesSignal();
|
|
67
|
+
if (isOpen && msgs.length > 0) {
|
|
68
|
+
const lastMessage = msgs[msgs.length - 1];
|
|
69
|
+
if (lastMessage?.id) {
|
|
70
|
+
const currentLastRead = this.lastReadMessageId();
|
|
71
|
+
if (lastMessage.id !== currentLastRead) {
|
|
72
|
+
this.lastReadMessageId.set(lastMessage.id);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}, { allowSignalWrites: true });
|
|
77
|
+
}
|
|
78
|
+
//! =================== PUBLIC METHODS ===========================
|
|
79
|
+
/**
|
|
80
|
+
* Set the messages signal reference from an external source
|
|
81
|
+
* This allows the UI state service to track messages from MessageService
|
|
82
|
+
*/
|
|
83
|
+
setMessagesSignal(messagesSignal) {
|
|
84
|
+
this.messagesSignal = messagesSignal;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Toggle the chat window open/close state
|
|
88
|
+
*/
|
|
89
|
+
toggleChat() {
|
|
90
|
+
const currentlyOpen = this.isChatOpen();
|
|
91
|
+
this.isChatOpen.update((open) => !open);
|
|
92
|
+
// Mark messages as read when opening chat
|
|
93
|
+
if (!currentlyOpen) {
|
|
94
|
+
const messages = this.messagesSignal();
|
|
95
|
+
if (messages.length > 0) {
|
|
96
|
+
const lastMessage = messages[messages.length - 1];
|
|
97
|
+
this.lastReadMessageId.set(lastMessage.id ?? null);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Toggle the history sidebar open/close state
|
|
103
|
+
*/
|
|
104
|
+
toggleHistorySidebar() {
|
|
105
|
+
this.isHistorySidebarOpen.update((open) => !open);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Close the chat window
|
|
109
|
+
*/
|
|
110
|
+
closeChat() {
|
|
111
|
+
this.isChatOpen.set(false);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Open the chat window
|
|
115
|
+
*/
|
|
116
|
+
openChat() {
|
|
117
|
+
this.isChatOpen.set(true);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Close the history sidebar
|
|
121
|
+
*/
|
|
122
|
+
closeHistorySidebar() {
|
|
123
|
+
this.isHistorySidebarOpen.set(false);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Open the history sidebar
|
|
127
|
+
*/
|
|
128
|
+
openHistorySidebar() {
|
|
129
|
+
this.isHistorySidebarOpen.set(true);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Toggle fullscreen mode
|
|
133
|
+
*/
|
|
134
|
+
toggleFullscreen() {
|
|
135
|
+
this.isFullScreen.update((fs) => !fs);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Set fullscreen state
|
|
139
|
+
*/
|
|
140
|
+
setFullscreen(isFullscreen) {
|
|
141
|
+
this.isFullScreen.set(isFullscreen);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Manually mark messages as read up to a specific message ID
|
|
145
|
+
*/
|
|
146
|
+
markMessagesAsRead(messageId) {
|
|
147
|
+
this.lastReadMessageId.set(messageId);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Reset last read message ID
|
|
151
|
+
*/
|
|
152
|
+
resetLastRead() {
|
|
153
|
+
this.lastReadMessageId.set(null);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get the last read message ID
|
|
157
|
+
*/
|
|
158
|
+
getLastReadMessageId() {
|
|
159
|
+
return this.lastReadMessageId();
|
|
160
|
+
}
|
|
161
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatUIStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
162
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatUIStateService, providedIn: 'root' }); }
|
|
163
|
+
}
|
|
164
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatUIStateService, decorators: [{
|
|
165
|
+
type: Injectable,
|
|
166
|
+
args: [{
|
|
167
|
+
providedIn: 'root',
|
|
168
|
+
}]
|
|
169
|
+
}] });
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC11aS1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9vaGJvdC9zcmMvbGliL2FwcC9jaGF0L2NoYXQtdWktc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDOztBQUc3RTs7Ozs7Ozs7Ozs7R0FXRztBQUlILE1BQU0sT0FBTyxrQkFBa0I7SUFIL0I7UUFJRSxzRUFBc0U7UUFFdEU7O1dBRUc7UUFDSSxlQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxDOztXQUVHO1FBQ0kseUJBQW9CLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVDOztXQUVHO1FBQ0ksaUJBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEM7O1dBRUc7UUFDSyxzQkFBaUIsR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBRXhEOztXQUVHO1FBQ0ssbUJBQWMsR0FBc0IsTUFBTSxDQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLGlFQUFpRTtRQUVqRTs7V0FFRztRQUNJLGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRTtnQkFDckIsT0FBTyxDQUFDLENBQUMsQ0FBQyw4QkFBOEI7YUFDekM7WUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTyxDQUFDLENBQUM7WUFFcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDNUMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFdkIsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFO2dCQUN2QixhQUFhLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQzthQUNwRTtZQUVELHFEQUFxRDtZQUNyRCxNQUFNLGlCQUFpQixHQUFHLFFBQVE7aUJBQy9CLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO2lCQUN4QixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUM7WUFFL0MsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCwwREFBMEQ7UUFFMUQ7O1dBRUc7UUFDSSxxQkFBZ0IsR0FBRyxNQUFNLENBQzlCLEdBQUcsRUFBRTtZQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFbkMsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLFdBQVcsRUFBRSxFQUFFLEVBQUU7b0JBQ25CLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUNqRCxJQUFJLFdBQVcsQ0FBQyxFQUFFLEtBQUssZUFBZSxFQUFFO3dCQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDNUM7aUJBQ0Y7YUFDRjtRQUNILENBQUMsRUFDRCxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUM1QixDQUFDO0tBa0dIO0lBaEdDLGtFQUFrRTtJQUVsRTs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxjQUFpQztRQUNqRCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVO1FBQ1IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhDLDBDQUEwQztRQUMxQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2xCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN2QixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO2FBQ3BEO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNoQixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxZQUFxQjtRQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0IsQ0FBQyxTQUFpQjtRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2xDLENBQUM7K0dBOUtVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIGNvbXB1dGVkLCBlZmZlY3QsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvbWVzc2FnZSc7XHJcblxyXG4vKipcclxuICogQ2hhdFVJU3RhdGVTZXJ2aWNlIC0gQ2VudHJhbGl6ZWQgVUkgc3RhdGUgbWFuYWdlbWVudFxyXG4gKlxyXG4gKiBNYW5hZ2VzIGFsbCBVSS1yZWxhdGVkIHN0YXRlIGZvciB0aGUgY2hhdCBjb21wb25lbnQgaW5jbHVkaW5nOlxyXG4gKiAtIENoYXQgd2luZG93IG9wZW4vY2xvc2Ugc3RhdGVcclxuICogLSBIaXN0b3J5IHNpZGViYXIgdmlzaWJpbGl0eVxyXG4gKiAtIFVucmVhZCBtZXNzYWdlIHRyYWNraW5nXHJcbiAqIC0gRnVsbHNjcmVlbiBzdGF0ZVxyXG4gKlxyXG4gKiBUaGlzIHNlcnZpY2UgdXNlcyBBbmd1bGFyIHNpZ25hbHMgZm9yIHJlYWN0aXZlIHN0YXRlIG1hbmFnZW1lbnQsXHJcbiAqIGFsbG93aW5nIGNvbXBvbmVudHMgdG8gc3Vic2NyaWJlIHRvIHN0YXRlIGNoYW5nZXMgZWZmaWNpZW50bHkuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hhdFVJU3RhdGVTZXJ2aWNlIHtcclxuICAvLyEgPT09PT09PT09PT09PT09PT09PT09IFVJIFNUQVRFIFNJR05BTFM9PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIGNoYXQgd2luZG93IGlzIGN1cnJlbnRseSBvcGVuXHJcbiAgICovXHJcbiAgcHVibGljIGlzQ2hhdE9wZW4gPSBzaWduYWwoZmFsc2UpO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSBoaXN0b3J5IHNpZGViYXIgaXMgY3VycmVudGx5IG9wZW5cclxuICAgKi9cclxuICBwdWJsaWMgaXNIaXN0b3J5U2lkZWJhck9wZW4gPSBzaWduYWwoZmFsc2UpO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSBjaGF0IGlzIGluIGZ1bGxzY3JlZW4gbW9kZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBpc0Z1bGxTY3JlZW4gPSBzaWduYWwoZmFsc2UpO1xyXG5cclxuICAvKipcclxuICAgKiBJRCBvZiB0aGUgbGFzdCBtZXNzYWdlIHRoYXQgd2FzIHJlYWQgYnkgdGhlIHVzZXJcclxuICAgKi9cclxuICBwcml2YXRlIGxhc3RSZWFkTWVzc2FnZUlkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG5cclxuICAvKipcclxuICAgKiBSZWZlcmVuY2UgdG8gY3VycmVudCBtZXNzYWdlcyAoaW5qZWN0ZWQgZnJvbSBvdXRzaWRlKVxyXG4gICAqL1xyXG4gIHByaXZhdGUgbWVzc2FnZXNTaWduYWw6IFNpZ25hbDxNZXNzYWdlW10+ID0gc2lnbmFsPE1lc3NhZ2VbXT4oW10pO1xyXG5cclxuICAvLyEgPT09PT09PT09PT09PT09PT09PT09IENPTVBVVEVEIFNJR05BTFMgPT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvKipcclxuICAgKiBDb21wdXRlZCBudW1iZXIgb2YgdW5yZWFkIGJvdCBtZXNzYWdlc1xyXG4gICAqL1xyXG4gIHB1YmxpYyB1bnJlYWRDb3VudCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICh0aGlzLmlzQ2hhdE9wZW4oKSkge1xyXG4gICAgICByZXR1cm4gMDsgLy8gTm8gdW5yZWFkIHdoZW4gY2hhdCBpcyBvcGVuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VzU2lnbmFsKCk7XHJcbiAgICBpZiAobWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcclxuXHJcbiAgICBjb25zdCBsYXN0UmVhZElkID0gdGhpcy5sYXN0UmVhZE1lc3NhZ2VJZCgpO1xyXG4gICAgbGV0IGxhc3RSZWFkSW5kZXggPSAtMTtcclxuXHJcbiAgICBpZiAobGFzdFJlYWRJZCAhPT0gbnVsbCkge1xyXG4gICAgICBsYXN0UmVhZEluZGV4ID0gbWVzc2FnZXMuZmluZEluZGV4KChtc2cpID0+IG1zZy5pZCA9PT0gbGFzdFJlYWRJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ291bnQgdW5yZWFkIGJvdCBtZXNzYWdlcyBhZnRlciBsYXN0IHJlYWQgcG9zaXRpb25cclxuICAgIGNvbnN0IHVucmVhZEJvdE1lc3NhZ2VzID0gbWVzc2FnZXNcclxuICAgICAgLnNsaWNlKGxhc3RSZWFkSW5kZXggKyAxKVxyXG4gICAgICAuZmlsdGVyKChtc2cpID0+IG1zZy5zZW5kZXIgPT09ICdhc3Npc3RhbnQnKTtcclxuXHJcbiAgICByZXR1cm4gdW5yZWFkQm90TWVzc2FnZXMubGVuZ3RoO1xyXG4gIH0pO1xyXG5cclxuICAvLyEgPT09PT09PT09PT09PT09PT09PT09IEVGRkVDVFMgPT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8qKlxyXG4gICAqIEVmZmVjdCB0byBhdXRvbWF0aWNhbGx5IG1hcmsgbWVzc2FnZXMgYXMgcmVhZCB3aGVuIGNoYXQgaXMgb3BlbmVkXHJcbiAgICovXHJcbiAgcHVibGljIG1hcmtBc1JlYWRFZmZlY3QgPSBlZmZlY3QoXHJcbiAgICAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMuaXNDaGF0T3BlbigpO1xyXG4gICAgICBjb25zdCBtc2dzID0gdGhpcy5tZXNzYWdlc1NpZ25hbCgpO1xyXG5cclxuICAgICAgaWYgKGlzT3BlbiAmJiBtc2dzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1zZ3NbbXNncy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAobGFzdE1lc3NhZ2U/LmlkKSB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50TGFzdFJlYWQgPSB0aGlzLmxhc3RSZWFkTWVzc2FnZUlkKCk7XHJcbiAgICAgICAgICBpZiAobGFzdE1lc3NhZ2UuaWQgIT09IGN1cnJlbnRMYXN0UmVhZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RSZWFkTWVzc2FnZUlkLnNldChsYXN0TWVzc2FnZS5pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LCAvLyBUT0RPXHJcbiAgKTtcclxuXHJcbiAgLy8hID09PT09PT09PT09PT09PT09PT0gUFVCTElDIE1FVEhPRFMgPT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgbWVzc2FnZXMgc2lnbmFsIHJlZmVyZW5jZSBmcm9tIGFuIGV4dGVybmFsIHNvdXJjZVxyXG4gICAqIFRoaXMgYWxsb3dzIHRoZSBVSSBzdGF0ZSBzZXJ2aWNlIHRvIHRyYWNrIG1lc3NhZ2VzIGZyb20gTWVzc2FnZVNlcnZpY2VcclxuICAgKi9cclxuICBzZXRNZXNzYWdlc1NpZ25hbChtZXNzYWdlc1NpZ25hbDogU2lnbmFsPE1lc3NhZ2VbXT4pOiB2b2lkIHtcclxuICAgIHRoaXMubWVzc2FnZXNTaWduYWwgPSBtZXNzYWdlc1NpZ25hbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSB0aGUgY2hhdCB3aW5kb3cgb3Blbi9jbG9zZSBzdGF0ZVxyXG4gICAqL1xyXG4gIHRvZ2dsZUNoYXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjdXJyZW50bHlPcGVuID0gdGhpcy5pc0NoYXRPcGVuKCk7XHJcbiAgICB0aGlzLmlzQ2hhdE9wZW4udXBkYXRlKChvcGVuKSA9PiAhb3Blbik7XHJcblxyXG4gICAgLy8gTWFyayBtZXNzYWdlcyBhcyByZWFkIHdoZW4gb3BlbmluZyBjaGF0XHJcbiAgICBpZiAoIWN1cnJlbnRseU9wZW4pIHtcclxuICAgICAgY29uc3QgbWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VzU2lnbmFsKCk7XHJcbiAgICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICB0aGlzLmxhc3RSZWFkTWVzc2FnZUlkLnNldChsYXN0TWVzc2FnZS5pZCA/PyBudWxsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIHRoZSBoaXN0b3J5IHNpZGViYXIgb3Blbi9jbG9zZSBzdGF0ZVxyXG4gICAqL1xyXG4gIHRvZ2dsZUhpc3RvcnlTaWRlYmFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0hpc3RvcnlTaWRlYmFyT3Blbi51cGRhdGUoKG9wZW4pID0+ICFvcGVuKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIHRoZSBjaGF0IHdpbmRvd1xyXG4gICAqL1xyXG4gIGNsb3NlQ2hhdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNDaGF0T3Blbi5zZXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbiB0aGUgY2hhdCB3aW5kb3dcclxuICAgKi9cclxuICBvcGVuQ2hhdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNDaGF0T3Blbi5zZXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSB0aGUgaGlzdG9yeSBzaWRlYmFyXHJcbiAgICovXHJcbiAgY2xvc2VIaXN0b3J5U2lkZWJhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNIaXN0b3J5U2lkZWJhck9wZW4uc2V0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gdGhlIGhpc3Rvcnkgc2lkZWJhclxyXG4gICAqL1xyXG4gIG9wZW5IaXN0b3J5U2lkZWJhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNIaXN0b3J5U2lkZWJhck9wZW4uc2V0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIGZ1bGxzY3JlZW4gbW9kZVxyXG4gICAqL1xyXG4gIHRvZ2dsZUZ1bGxzY3JlZW4oKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRnVsbFNjcmVlbi51cGRhdGUoKGZzKSA9PiAhZnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGZ1bGxzY3JlZW4gc3RhdGVcclxuICAgKi9cclxuICBzZXRGdWxsc2NyZWVuKGlzRnVsbHNjcmVlbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pc0Z1bGxTY3JlZW4uc2V0KGlzRnVsbHNjcmVlbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYW51YWxseSBtYXJrIG1lc3NhZ2VzIGFzIHJlYWQgdXAgdG8gYSBzcGVjaWZpYyBtZXNzYWdlIElEXHJcbiAgICovXHJcbiAgbWFya01lc3NhZ2VzQXNSZWFkKG1lc3NhZ2VJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmxhc3RSZWFkTWVzc2FnZUlkLnNldChtZXNzYWdlSWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgbGFzdCByZWFkIG1lc3NhZ2UgSURcclxuICAgKi9cclxuICByZXNldExhc3RSZWFkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5sYXN0UmVhZE1lc3NhZ2VJZC5zZXQobnVsbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGxhc3QgcmVhZCBtZXNzYWdlIElEXHJcbiAgICovXHJcbiAgZ2V0TGFzdFJlYWRNZXNzYWdlSWQoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXN0UmVhZE1lc3NhZ2VJZCgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|