@aakash58/chatbot 1.0.84 → 1.0.86
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/fesm2022/aakash58-chatbot.mjs +633 -561
- package/fesm2022/aakash58-chatbot.mjs.map +1 -1
- package/index.d.ts +52 -11
- package/package.json +2 -2
- package/aakash58-chatbot-1.0.84.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aakash58-chatbot.mjs","sources":["../../../projects/doohbot/src/lib/constant/constant.ts","../../../projects/doohbot/src/lib/inputs/doohbot-input.ts","../../../projects/doohbot/src/lib/helpers/predefined_messages.ts","../../../projects/doohbot/src/lib/components/chat-button/chat-button.component.ts","../../../projects/doohbot/src/lib/components/chat-button/chat-button.component.html","../../../projects/doohbot/src/lib/shared/chips/chips.component.ts","../../../projects/doohbot/src/lib/shared/chips/chips.component.html","../../../projects/doohbot/src/lib/components/message-list/message-list.component.ts","../../../projects/doohbot/src/lib/components/message-list/message-list.component.html","../../../projects/doohbot/src/lib/components/message-input/message-input.component.ts","../../../projects/doohbot/src/lib/components/message-input/message-input.component.html","../../../projects/doohbot/src/lib/shared/snackbar/snackbar.component.ts","../../../projects/doohbot/src/lib/shared/snackbar/snackbar.component.html","../../../projects/doohbot/src/lib/directives/draggable/draggable-dialog.directive.ts","../../../projects/doohbot/src/lib/directives/resizable/resizable-dialog.directive.ts","../../../projects/doohbot/src/lib/core/services/theme.service.ts","../../../projects/doohbot/src/lib/shared/dialog/dialog.component.ts","../../../projects/doohbot/src/lib/shared/dialog/dialog.component.html","../../../projects/doohbot/src/lib/shared/dialog/dialog.service.ts","../../../projects/doohbot/src/lib/components/chat-history-sidebar/chat-history-sidebar.component.ts","../../../projects/doohbot/src/lib/components/chat-history-sidebar/chat-history-sidebar.component.html","../../../projects/doohbot/src/lib/shared/menu-item/menu-item.component.ts","../../../projects/doohbot/src/lib/shared/menu-item/menu-item.component.html","../../../projects/doohbot/src/lib/shared/dropdown-menu/dropdown-menu.component.ts","../../../projects/doohbot/src/lib/shared/dropdown-menu/dropdown-menu.component.html","../../../projects/doohbot/src/lib/directives/popout/popout.directive.ts","../../../projects/doohbot/src/lib/components/chat-window/chat-window.component.ts","../../../projects/doohbot/src/lib/components/chat-window/chat-window.component.html","../../../projects/doohbot/src/lib/directives/fullscreen/fullscreen.directive.ts","../../../projects/doohbot/src/lib/core/environments/environment.ts","../../../projects/doohbot/src/lib/core/app-const.ts","../../../projects/doohbot/src/lib/model/doohbot.intents.ts","../../../projects/doohbot/src/lib/model/api-config.model.ts","../../../projects/doohbot/src/lib/core/services/tenant-context.service.ts","../../../projects/doohbot/src/lib/core/services/doohbot-api.service.ts","../../../projects/doohbot/src/lib/core/services/chat-history.service.ts","../../../projects/doohbot/src/lib/components/message-input/messaging.service.ts","../../../projects/doohbot/src/lib/core/services/http.service.ts","../../../projects/doohbot/src/lib/core/services/account.service.ts","../../../projects/doohbot/src/lib/core/helpers/crypto-helper.service.ts","../../../projects/doohbot/src/lib/core/services/auth.service.ts","../../../projects/doohbot/src/lib/core/services/chat-facade.service.ts","../../../projects/doohbot/src/lib/core/services/chat-ui-state.service.ts","../../../projects/doohbot/src/lib/constant/utf8.ts","../../../projects/doohbot/src/lib/doohbot.component.ts","../../../projects/doohbot/src/lib/doohbot.component.html","../../../projects/doohbot/src/lib/model/token.ts","../../../projects/doohbot/src/public-api.ts","../../../projects/doohbot/src/aakash58-chatbot.ts"],"sourcesContent":["export const appConst = {\r\n //LIVE ASSETS\r\n // APP_LOGO: 'https://iili.io/f3qSQJn.md.png',\r\n // USER_AVATAR: 'https://iili.io/KpEYoCP.png',\r\n // BOT_AVATAR: 'https://iili.io/KpER0Ge.png',\r\n\r\n // ==================\r\n\r\n //png ASSETS\r\n // APP_LOGO: 'assets/logo.svg',\r\n // APP_TEXT_LOGO: 'assets/title.svg',\r\n // APP_HEADER_LOGO: 'assets/header_logo.svg',\r\n // USER_AVATAR: 'assets/profile.png',\r\n // BOT_AVATAR: 'assets/bot.png',\r\n\r\n // ==================\r\n\r\n // base64_ASSETS\r\n APP_LOGO:\r\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEzMCIgdmlld0JveD0iMCAwIDEzMCAxMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8yMzY3XzE1OTgpIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAxXzIzNjdfMTU5OCkiPgo8cGF0aCBkPSJNNiA2SDEyNFYxMjRINlY2WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzIzNjdfMTU5OCkiLz4KPGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjBfZF8yMzY3XzE1OTgpIj4KPHBhdGggZD0iTTkxLjQ3MTcgMzguNTAyOUM3Ny43OTcgNTMuMzc4NCA3Ny44NTYyIDc2LjI2NzYgOTEuNjA3NCA5MS4wNzIzTDkyLjgwNDcgOTIuMzYxM0w5Mi43NzM0IDkyLjMzMkw5Mi44MDk2IDkyLjM2OTFMMzEuMTQzNiAxNTMuMzEyTDE0LjIzOTMgMTM2LjIwN0wxMy4zNDM4IDEzNy4wOTNMLTcgMTE2LjUwN0wtNi4zMTkzNCAxMTUuODMzTC0yMy45MDE0IDk4LjA0MkwzNy41MDY4IDM3LjM1NDVMMzcuNjE0MyAzNy40NjI5TDM3LjUwODggMzcuMzQ5NkwzOC44MDQ3IDM4LjU0MUM1My42Nzg4IDUyLjIxNjUgNzYuNTY4NSA1Mi4xNTYxIDkxLjM3MyAzOC40MDUzTDkyLjY2MzEgMzcuMjA3TDkxLjQ3MTcgMzguNTAyOVoiIGZpbGw9IiNFRUVFRUUiLz4KPC9nPgo8cGF0aCBkPSJNNC41NjQ5NCAxMjYuNDE4TDM5LjMzNTkgOTIuMDU0OEM1NC4xODkyIDc3LjM3NTYgNzguMTMwMSA3Ny41MTY4IDkyLjgwOTIgOTIuMzcwMVY5Mi4zNzAxTDMxLjE0MzkgMTUzLjMxMkw0LjU2NDk0IDEyNi40MThaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMjM2N18xNTk4KSIvPgo8cGF0aCBkPSJNLTIzLjkwMTQgOTguMDQyTDM3LjUwNjQgMzcuMzU0NEM1Mi41NTc5IDUyLjU4NDUgNTIuNDEzMSA3Ny4xMzI2IDM3LjE4MyA5Mi4xODQxTDMuMzUxNzkgMTI1LjYxOUwtMjMuOTAxNCA5OC4wNDJaIiBmaWxsPSJ1cmwoI3BhaW50Ml9saW5lYXJfMjM2N18xNTk4KSIvPgo8L2c+CjwvZz4KPGRlZnM+CjxmaWx0ZXIgaWQ9ImZpbHRlcjBfZF8yMzY3XzE1OTgiIHg9Ii0yNy45MDE0IiB5PSIzNy4yMDciIHdpZHRoPSIxMjQuNzExIiBoZWlnaHQ9IjEyNC4xMDQiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4yNSAwIi8+CjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0iZWZmZWN0MV9kcm9wU2hhZG93XzIzNjdfMTU5OCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd18yMzY3XzE1OTgiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yMzY3XzE1OTgiIHgxPSI2LjAwMjYzIiB5MT0iNiIgeDI9IjEyMy45OTciIHkyPSIxMjQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzI4MDBGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwOERBQ0YiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDFfbGluZWFyXzIzNjdfMTU5OCIgeDE9Ijc5Ljk2OTMiIHkxPSI3OS4zNzc5IiB4Mj0iNzYuMjk3NCIgeTI9IjE0Mi44MTkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzI4MDBGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwOERBQ0YiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyXzIzNjdfMTU5OCIgeDE9IjUwLjkzMjkiIHkxPSI1MC45NDAzIiB4Mj0iNDcuMTg1MiIgeTI9IjExNS4zNjQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzI4MDBGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwOERBQ0YiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMzY3XzE1OTgiPgo8cmVjdCB3aWR0aD0iMTE4IiBoZWlnaHQ9IjExOCIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYgNikiLz4KPC9jbGlwUGF0aD4KPGNsaXBQYXRoIGlkPSJjbGlwMV8yMzY3XzE1OTgiPgo8cGF0aCBkPSJNNiA2SDk0QzExMC41NjkgNiAxMjQgMTkuNDMxNSAxMjQgMzZWOTRDMTI0IDExMC41NjkgMTEwLjU2OSAxMjQgOTQgMTI0SDZWNloiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==',\r\n APP_TEXT_LOGO:\r\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDc3IiBoZWlnaHQ9Ijk0IiB2aWV3Qm94PSIwIDAgNDc3IDk0IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNDUzLjkzMiA4Ny4wMjZDNDUyLjI0OSA4Ny4wMjYgNDUxLjI4NyA4Ni40MjUgNDUwLjA4NSA4NS4yMjI5TDQ0My43MTQgNzkuODEzNkM0NDIuNTEyIDc4LjYxMTUgNDQxLjkxMSA3Ny4yODkyIDQ0MS45MTEgNzUuNDg2MVY0MC44NjYySDQzMy42MTdWMzIuNDUxNkw0NDkuMTI0IDE1LjAyMTVINDUzLjIxMVYzMS4yNDk2SDQ3MC42NDFWNDAuODY2Mkg0NTMuMjExVjc2LjY4ODJINDcxLjAwMlY4Ny4wMjZINDUzLjkzMloiIGZpbGw9IiMyODAwRkYiLz4KPHBhdGggZD0iTTM3NS44MTkgODcuMDE4N0MzNzQuNjE3IDg3LjAxODcgMzczLjA1NCA4Ni42NTggMzcxLjQ5MiA4NS4wOTUzTDM2Ni4yMDIgNzkuODA2MkMzNjUuMTIgNzguNjA0MSAzNjQuNjQgNzcuMDQxNCAzNjQuNjQgNzUuNTk4OVY0Mi42NjE5QzM2NC42NCA0MC45NzkgMzY1LjI0MSAzOS41MzY1IDM2Ni4yMDIgMzguNDU0N0wzNzEuNDkyIDMzLjE2NTVDMzcyLjkzNCAzMS43MjMgMzc0LjQ5NyAzMS4yNDIyIDM3NS44MTkgMzEuMjQyMkg0MTAuNjhDNDEyLjM2MyAzMS4yNDIyIDQxMy42ODUgMzEuODQzMiA0MTQuODg3IDMzLjA0NTNMNDIwLjI5NiAzOC4zMzQ0QzQyMS42MTkgMzkuNjU2NyA0MjIuMSA0MC45NzkgNDIyLjEgNDIuNjYxOVY3NS41OTg5QzQyMi4xIDc3LjI4MTggNDIxLjYxOSA3OC42MDQxIDQyMC4yOTYgNzkuOTI2NEw0MTQuODg3IDg1LjIxNTVDNDEzLjY4NSA4Ni40MTc2IDQxMi4zNjMgODcuMDE4NyA0MTAuNjggODcuMDE4N0gzNzUuODE5Wk0zNzUuOTM5IDc2LjgwMUg0MTAuOFY0MS40NTk5SDM3NS45MzlWNzYuODAxWiIgZmlsbD0iIzI4MDBGRiIvPgo8cGF0aCBkPSJNMzQ5LjY0NCAzOC40NTYxQzM1MC44NDYgMzkuNzc4NCAzNTEuNDQ3IDQxLjEwMDcgMzUxLjQ0NyA0Mi43ODM2Vjc1LjYwMDRDMzUxLjQ0NyA3Ny4yODMzIDM1MC44NDYgNzguNjA1NiAzNDkuNjQ0IDc5LjkyNzlMMzQ0LjIzNCA4NS4yMTdDMzQzLjAzMiA4Ni41MzkzIDM0MS40NyA4Ny4wMjAxIDMzOS45MDcgODcuMDIwMUgzMTQuOTAzQzMxMi42MTkgODcuMDIwMSAzMTEuMjk3IDg2LjQxOTEgMzA5LjQ5NCA4NC40OTU4TDMwNi4xMjggODAuODg5NVY4Ny4wMjAxSDI5NC45NDlWNkgzMDYuMTI4VjM3LjM3NDNMMzA5LjQ5NCAzMy44ODgyQzMxMS40MTcgMzEuODQ0NyAzMTIuNjE5IDMxLjM2MzkgMzE0LjkwMyAzMS4zNjM5SDMzOS45MDdDMzQxLjU5IDMxLjM2MzkgMzQzLjAzMiAzMS44NDQ3IDM0NC4yMzQgMzMuMDQ2OEwzNDkuNjQ0IDM4LjQ1NjFaTTM0MC4xNDcgNzYuODAyNVY0MS40NjEzSDMwNi4xMjhWNzYuODAyNUgzNDAuMTQ3WiIgZmlsbD0iIzI4MDBGRiIvPgo8cGF0aCBkPSJNMjc2LjUxMiAzOC40NTYxQzI3Ny43MTQgMzkuNzc4NCAyNzguMzE1IDQxLjEwMDcgMjc4LjMxNSA0Mi43ODM2Vjg3LjAyMDFIMjY3LjAxNlY0MS40NjEzSDIzMi44NzZWODcuMDIwMUgyMjEuNjk3VjZIMjMyLjg3NlYzNy40OTQ1TDIzNi4zNjIgMzMuODg4MkMyMzguNDA2IDMxLjg0NDcgMjM5LjQ4OCAzMS4zNjM5IDI0MS43NzIgMzEuMzYzOUgyNjYuNzc1QzI2OC40NTggMzEuMzYzOSAyNjkuOTAxIDMxLjg0NDcgMjcxLjEwMyAzMy4wNDY4TDI3Ni41MTIgMzguNDU2MVoiIGZpbGw9IiMyODAwRkYiLz4KPHBhdGggZD0iTTE2MC4wNTUgODcuMDE4N0MxNTguODUzIDg3LjAxODcgMTU3LjI5IDg2LjY1OCAxNTUuNzI3IDg1LjA5NTNMMTUwLjQzOCA3OS44MDYyQzE0OS4zNTYgNzguNjA0MSAxNDguODc1IDc3LjA0MTQgMTQ4Ljg3NSA3NS41OTg5VjQyLjY2MTlDMTQ4Ljg3NSA0MC45NzkgMTQ5LjQ3NyAzOS41MzY1IDE1MC40MzggMzguNDU0N0wxNTUuNzI3IDMzLjE2NTVDMTU3LjE3IDMxLjcyMyAxNTguNzMzIDMxLjI0MjIgMTYwLjA1NSAzMS4yNDIySDE5NC45MTZDMTk2LjU5OCAzMS4yNDIyIDE5Ny45MjEgMzEuODQzMiAxOTkuMTIzIDMzLjA0NTNMMjA0LjUzMiAzOC4zMzQ0QzIwNS44NTUgMzkuNjU2NyAyMDYuMzM1IDQwLjk3OSAyMDYuMzM1IDQyLjY2MTlWNzUuNTk4OUMyMDYuMzM1IDc3LjI4MTggMjA1Ljg1NSA3OC42MDQxIDIwNC41MzIgNzkuOTI2NEwxOTkuMTIzIDg1LjIxNTVDMTk3LjkyMSA4Ni40MTc2IDE5Ni41OTggODcuMDE4NyAxOTQuOTE2IDg3LjAxODdIMTYwLjA1NVpNMTYwLjE3NSA3Ni44MDFIMTk1LjAzNlY0MS40NTk5SDE2MC4xNzVWNzYuODAxWiIgZmlsbD0iIzI4MDBGRiIvPgo8cGF0aCBkPSJNODguOTE0OCA4Ny4wMTg3Qzg3LjcxMjcgODcuMDE4NyA4Ni4xNSA4Ni42NTggODQuNTg3MyA4NS4wOTUzTDc5LjI5ODEgNzkuODA2MkM3OC4yMTYyIDc4LjYwNDEgNzcuNzM1NCA3Ny4wNDE0IDc3LjczNTQgNzUuNTk4OVY0Mi42NjE5Qzc3LjczNTQgNDAuOTc5IDc4LjMzNjQgMzkuNTM2NSA3OS4yOTgxIDM4LjQ1NDdMODQuNTg3MyAzMy4xNjU1Qzg2LjAyOTggMzEuNzIzIDg3LjU5MjUgMzEuMjQyMiA4OC45MTQ4IDMxLjI0MjJIMTIzLjc3NUMxMjUuNDU4IDMxLjI0MjIgMTI2Ljc4MSAzMS44NDMyIDEyNy45ODMgMzMuMDQ1M0wxMzMuMzkyIDM4LjMzNDRDMTM0LjcxNCAzOS42NTY3IDEzNS4xOTUgNDAuOTc5IDEzNS4xOTUgNDIuNjYxOVY3NS41OTg5QzEzNS4xOTUgNzcuMjgxOCAxMzQuNzE0IDc4LjYwNDEgMTMzLjM5MiA3OS45MjY0TDEyNy45ODMgODUuMjE1NUMxMjYuNzgxIDg2LjQxNzYgMTI1LjQ1OCA4Ny4wMTg3IDEyMy43NzUgODcuMDE4N0g4OC45MTQ4Wk04OS4wMzUgNzYuODAxSDEyMy44OTZWNDEuNDU5OUg4OS4wMzVWNzYuODAxWiIgZmlsbD0iIzI4MDBGRiIvPgo8cGF0aCBkPSJNNTEuMTk4NiA2SDYyLjM3OFY4Ny4wMjAxSDUxLjE5ODZWODAuODg5NUw0Ny44MzI3IDg0LjQ5NThDNDYuMDI5NiA4Ni40MTkxIDQ0LjcwNzMgODcuMDIwMSA0Mi40MjMzIDg3LjAyMDFIMTcuNDE5OUMxNS44NTcxIDg3LjAyMDEgMTQuMjk0NCA4Ni41MzkzIDEzLjA5MjMgODUuMjE3TDcuODAzMTQgNzkuOTI3OUM2LjQ4MDg0IDc4LjYwNTYgNiA3Ny4yODMzIDYgNzUuNjAwNFY0Mi43ODM2QzYgNDEuMTAwNyA2LjQ4MDg0IDM5Ljc3ODQgNy44MDMxNCAzOC40NTYxTDEzLjA5MjMgMzMuMDQ2OEMxNC4yOTQ0IDMxLjg0NDcgMTUuNzM2OSAzMS4zNjM5IDE3LjQxOTkgMzEuMzYzOUg0Mi40MjMzQzQ0LjcwNzMgMzEuMzYzOSA0NS45MDk0IDMxLjg0NDcgNDcuODMyNyAzMy44ODgyTDUxLjE5ODYgMzcuMzc0M1Y2Wk0xNy4xNzk0IDc2LjgwMjVINTEuMTk4NlY0MS40NjEzSDE3LjE3OTRWNzYuODAyNVoiIGZpbGw9IiMyODAwRkYiLz4KPHBhdGggZD0iTTIxLjgzMyA1OC4xNTYySDI3LjQyMTNWNjMuNzQ0NUgyMS44MzNWNTguMTU2MloiIGZpbGw9IiMyODAwRkYiLz4KPHBhdGggZD0iTTMxLjE0NiA1OC4xNTYySDM2LjczNDNWNjMuNzQ0NUgzMS4xNDZWNTguMTU2MloiIGZpbGw9IiMyODAwRkYiLz4KPHBhdGggZD0iTTQwLjQ1ODUgNTguMTU2Mkg0Ni4wNDY4VjYzLjc0NDVINDAuNDU4NVY1OC4xNTYyWiIgZmlsbD0iIzI4MDBGRiIvPgo8ZWxsaXBzZSBjeD0iMzg3LjA4MiIgY3k9IjU5LjI1NTIiIHJ4PSIzLjg5NDg3IiByeT0iMy44OTQ4NSIgZmlsbD0iIzI4MDBGRiIvPgo8ZWxsaXBzZSBjeD0iNDAwLjcxMyIgY3k9IjU5LjI1NTIiIHJ4PSIzLjg5NDg3IiByeT0iMy44OTQ4NSIgZmlsbD0iIzI4MDBGRiIvPgo8ZWxsaXBzZSBjeD0iMzkzLjE5MiIgY3k9IjkuOTE4MjgiIHJ4PSIzLjcwNTQxIiByeT0iMy43MDUzOSIgZmlsbD0iIzI4MDBGRiIvPgo8cGF0aCBkPSJNMzgwLjIyNCAyOS4zNjkxQzM4MC4yMjQgMjguMTAyNCAzODEuNTUxIDI3LjAzMjQgMzgzLjkxMyAyNi4xMzY2QzM4Ni4yNzUgMjUuMjQwOSAzODkuNDc5IDI0LjczNzcgMzkyLjgxOSAyNC43Mzc3QzM5Ni4xNiAyNC43Mzc3IDM5OS4zNjMgMjUuMjQwOSA0MDEuNzI1IDI2LjEzNjZDNDA0LjA4OCAyNy4wMzI0IDQwNS4yMzQgMjguMTAyNCA0MDUuMjM0IDI5LjM2OTFIMzkyLjcyOUgzODAuMjI0WiIgZmlsbD0iIzI4MDBGRiIvPgo8cmVjdCB4PSIzOTEuMzQiIHk9IjEwLjg0MzgiIHdpZHRoPSIzLjcwNTQxIiBoZWlnaHQ9IjE1Ljc0NzkiIGZpbGw9IiMyODAwRkYiLz4KPC9zdmc+Cg==',\r\n APP_HEADER_LOGO:\r\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjI2IiBoZWlnaHQ9IjEzMCIgdmlld0JveD0iMCAwIDYyNiAxMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8yMzY3XzE1OTcpIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAxXzIzNjdfMTU5NykiPgo8cGF0aCBkPSJNNiA2SDEyNFYxMjRINlY2WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzIzNjdfMTU5NykiLz4KPGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjBfZF8yMzY3XzE1OTcpIj4KPHBhdGggZD0iTTkxLjQ3MTcgMzguNTAyOUM3Ny43OTcgNTMuMzc4NCA3Ny44NTYyIDc2LjI2NzYgOTEuNjA3NCA5MS4wNzIzTDkyLjgwNDcgOTIuMzYxM0w5Mi43NzM0IDkyLjMzMkw5Mi44MDk2IDkyLjM2OTFMMzEuMTQzNiAxNTMuMzEyTDE0LjIzOTMgMTM2LjIwN0wxMy4zNDM4IDEzNy4wOTNMLTcgMTE2LjUwN0wtNi4zMTkzNCAxMTUuODMzTC0yMy45MDE0IDk4LjA0MkwzNy41MDY4IDM3LjM1NDVMMzcuNjE0MyAzNy40NjI5TDM3LjUwODggMzcuMzQ5NkwzOC44MDQ3IDM4LjU0MUM1My42Nzg4IDUyLjIxNjUgNzYuNTY4NSA1Mi4xNTYxIDkxLjM3MyAzOC40MDUzTDkyLjY2MzEgMzcuMjA3TDkxLjQ3MTcgMzguNTAyOVoiIGZpbGw9IiNFRUVFRUUiLz4KPC9nPgo8cGF0aCBkPSJNNC41NjQ5NCAxMjYuNDE4TDM5LjMzNTkgOTIuMDU0OEM1NC4xODkyIDc3LjM3NTYgNzguMTMwMSA3Ny41MTY4IDkyLjgwOTIgOTIuMzcwMVY5Mi4zNzAxTDMxLjE0MzkgMTUzLjMxMkw0LjU2NDk0IDEyNi40MThaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMjM2N18xNTk3KSIvPgo8cGF0aCBkPSJNLTIzLjkwMTQgOTguMDQyTDM3LjUwNjQgMzcuMzU0NEM1Mi41NTc5IDUyLjU4NDUgNTIuNDEzMSA3Ny4xMzI2IDM3LjE4MyA5Mi4xODQxTDMuMzUxNzkgMTI1LjYxOUwtMjMuOTAxNCA5OC4wNDJaIiBmaWxsPSJ1cmwoI3BhaW50Ml9saW5lYXJfMjM2N18xNTk3KSIvPgo8L2c+CjwvZz4KPHBhdGggZD0iTTYwMi4yMTEgNTcuMjVINjE5LjY0MVY2Ni44NjYySDYwMi4yMTFWMTAyLjY4OEg2MjAuMDAyVjExMy4wMjZINjAyLjkzMkM2MDEuMjQ5IDExMy4wMjYgNjAwLjI4NyAxMTIuNDI1IDU5OS4wODUgMTExLjIyM0w1OTIuNzE0IDEwNS44MTNDNTkxLjUxMiAxMDQuNjEyIDU5MC45MTEgMTAzLjI4OSA1OTAuOTExIDEwMS40ODZWNjYuODY2Mkg1ODIuNjE3VjU4LjQ1MTJMNTk4LjEyNCA0MS4wMjE1SDYwMi4yMTFWNTcuMjVaTTIxMS4zNzggMTEzLjAyMUgyMDAuMTk4VjEwNi44OUwxOTYuODMzIDExMC40OTZDMTk1LjAzIDExMi40MTkgMTkzLjcwNyAxMTMuMDIxIDE5MS40MjMgMTEzLjAyMUgxNjYuNDJDMTY0Ljg1NyAxMTMuMDIxIDE2My4yOTUgMTEyLjUzOSAxNjIuMDkzIDExMS4yMTdMMTU2LjgwMyAxMDUuOTI4QzE1NS40ODEgMTA0LjYwNiAxNTUgMTAzLjI4MyAxNTUgMTAxLjYwMVY2OC43ODMyQzE1NSA2Ny4xMDA2IDE1NS40ODEgNjUuNzc4MiAxNTYuODAzIDY0LjQ1NjFMMTYyLjA5MyA1OS4wNDY5QzE2My4yOTUgNTcuODQ0OSAxNjQuNzM3IDU3LjM2NDMgMTY2LjQyIDU3LjM2NDNIMTkxLjQyM0MxOTMuNzA3IDU3LjM2NDMgMTk0LjkxIDU3Ljg0NTEgMTk2LjgzMyA1OS44ODg3TDIwMC4xOTggNjMuMzc0VjMySDIxMS4zNzhWMTEzLjAyMVpNMzgxLjg3NiA2My40OTQxTDM4NS4zNjIgNTkuODg4N0MzODcuNDA2IDU3Ljg0NTIgMzg4LjQ4OCA1Ny4zNjQzIDM5MC43NzEgNTcuMzY0M0g0MTUuNzc1QzQxNy40NTggNTcuMzY0MyA0MTguOTAxIDU3Ljg0NDkgNDIwLjEwMyA1OS4wNDY5TDQyNS41MTIgNjQuNDU2MUM0MjYuNzE0IDY1Ljc3ODIgNDI3LjMxNSA2Ny4xMDA1IDQyNy4zMTUgNjguNzgzMlYxMTMuMDIxSDQxNi4wMTZWNjcuNDYwOUgzODEuODc2VjExMy4wMjFIMzcwLjY5N1YzMkgzODEuODc2VjYzLjQ5NDFaTTQ1NS4xMjggNjMuMzc0TDQ1OC40OTQgNTkuODg4N0M0NjAuNDE3IDU3Ljg0NTIgNDYxLjYxOSA1Ny4zNjQzIDQ2My45MDMgNTcuMzY0M0g0ODguOTA3QzQ5MC41OSA1Ny4zNjQzIDQ5Mi4wMzIgNTcuODQ0OSA0OTMuMjM0IDU5LjA0NjlMNDk4LjY0NCA2NC40NTYxQzQ5OS44NDYgNjUuNzc4MiA1MDAuNDQ3IDY3LjEwMDUgNTAwLjQ0NyA2OC43ODMyVjEwMS42MDFDNTAwLjQ0NyAxMDMuMjgzIDQ5OS44NDYgMTA0LjYwNiA0OTguNjQ0IDEwNS45MjhMNDkzLjIzNCAxMTEuMjE3QzQ5Mi4wMzIgMTEyLjUzOSA0OTAuNDcgMTEzLjAyIDQ4OC45MDcgMTEzLjAyMUg0NjMuOTAzQzQ2MS42MiAxMTMuMDIgNDYwLjI5NyAxMTIuNDE5IDQ1OC40OTQgMTEwLjQ5Nkw0NTUuMTI4IDEwNi44OVYxMTMuMDIxSDQ0My45NDlWMzJINDU1LjEyOFY2My4zNzRaTTI3Mi43NzUgNTcuMjQyMkMyNzQuNDU4IDU3LjI0MjIgMjc1Ljc4IDU3Ljg0MzEgMjc2Ljk4MiA1OS4wNDQ5TDI4Mi4zOTMgNjQuMzM0QzI4My43MTUgNjUuNjU2MyAyODQuMTk1IDY2Ljk3OTIgMjg0LjE5NSA2OC42NjIxVjEwMS41OTlDMjg0LjE5NSAxMDMuMjgyIDI4My43MTUgMTA0LjYwNCAyODIuMzkzIDEwNS45MjdMMjc2Ljk4MiAxMTEuMjE2QzI3NS43OCAxMTIuNDE4IDI3NC40NTggMTEzLjAxOSAyNzIuNzc1IDExMy4wMTlIMjM3LjkxNUMyMzYuNzEzIDExMy4wMTkgMjM1LjE1IDExMi42NTggMjMzLjU4NyAxMTEuMDk2TDIyOC4yOTggMTA1LjgwN0MyMjcuMjE2IDEwNC42MDUgMjI2LjczNSAxMDMuMDQxIDIyNi43MzUgMTAxLjU5OVY2OC42NjIxQzIyNi43MzUgNjYuOTc5NCAyMjcuMzM2IDY1LjUzNjkgMjI4LjI5OCA2NC40NTUxTDIzMy41ODcgNTkuMTY1QzIzNS4wMjkgNTcuNzIyNiAyMzYuNTkzIDU3LjI0MjIgMjM3LjkxNSA1Ny4yNDIySDI3Mi43NzVaTTM0My45MTYgNTcuMjQyMkMzNDUuNTk5IDU3LjI0MjMgMzQ2LjkyMSA1Ny44NDMgMzQ4LjEyMyA1OS4wNDQ5TDM1My41MzIgNjQuMzM0QzM1NC44NTUgNjUuNjU2MyAzNTUuMzM1IDY2Ljk3OTIgMzU1LjMzNSA2OC42NjIxVjEwMS41OTlDMzU1LjMzNSAxMDMuMjgyIDM1NC44NTUgMTA0LjYwNCAzNTMuNTMyIDEwNS45MjdMMzQ4LjEyMyAxMTEuMjE2QzM0Ni45MjEgMTEyLjQxOCAzNDUuNTk5IDExMy4wMTggMzQzLjkxNiAxMTMuMDE5SDMwOS4wNTVDMzA3Ljg1MyAxMTMuMDE5IDMwNi4yOSAxMTIuNjU4IDMwNC43MjggMTExLjA5NkwyOTkuNDM4IDEwNS44MDdDMjk4LjM1NyAxMDQuNjA1IDI5Ny44NzYgMTAzLjA0MSAyOTcuODc2IDEwMS41OTlWNjguNjYyMUMyOTcuODc2IDY2Ljk3OTMgMjk4LjQ3NyA2NS41MzY5IDI5OS40MzggNjQuNDU1MUwzMDQuNzI4IDU5LjE2NUMzMDYuMTcgNTcuNzIyOSAzMDcuNzMzIDU3LjI0MjIgMzA5LjA1NSA1Ny4yNDIySDM0My45MTZaTTU1OS42OCA1Ny4yNDIyQzU2MS4zNjIgNTcuMjQyMiA1NjIuNjg1IDU3Ljg0MzEgNTYzLjg4NyA1OS4wNDQ5TDU2OS4yOTcgNjQuMzM0QzU3MC42MTkgNjUuNjU2MyA1NzEuMSA2Ni45NzkyIDU3MS4xIDY4LjY2MjFWMTAxLjU5OUM1NzEuMSAxMDMuMjgyIDU3MC42MTkgMTA0LjYwNCA1NjkuMjk3IDEwNS45MjdMNTYzLjg4NyAxMTEuMjE2QzU2Mi42ODUgMTEyLjQxOCA1NjEuMzYyIDExMy4wMTkgNTU5LjY4IDExMy4wMTlINTI0LjgxOUM1MjMuNjE3IDExMy4wMTkgNTIyLjA1NCAxMTIuNjU4IDUyMC40OTEgMTExLjA5Nkw1MTUuMjAyIDEwNS44MDdDNTE0LjEyIDEwNC42MDUgNTEzLjY0IDEwMy4wNDEgNTEzLjY0IDEwMS41OTlWNjguNjYyMUM1MTMuNjQgNjYuOTc5NCA1MTQuMjQxIDY1LjUzNjkgNTE1LjIwMiA2NC40NTUxTDUyMC40OTEgNTkuMTY1QzUyMS45MzQgNTcuNzIyNiA1MjMuNDk3IDU3LjI0MjIgNTI0LjgxOSA1Ny4yNDIySDU1OS42OFpNMTY2LjE4IDEwMi44MDNIMjAwLjE5OFY2Ny40NjA5SDE2Ni4xOFYxMDIuODAzWk00NTUuMTI4IDEwMi44MDNINDg5LjE0N1Y2Ny40NjA5SDQ1NS4xMjhWMTAyLjgwM1pNMjM4LjAzNSAxMDIuODAxSDI3Mi44OTZWNjcuNDZIMjM4LjAzNVYxMDIuODAxWk0zMDkuMTc1IDEwMi44MDFIMzQ0LjAzNlY2Ny40NkgzMDkuMTc1VjEwMi44MDFaTTUyNC45MzkgMTAyLjgwMUg1NTkuOFY2Ny40Nkg1MjQuOTM5VjEwMi44MDFaTTE3Ni40MjEgODkuNzQ0MUgxNzAuODMzVjg0LjE1NjJIMTc2LjQyMVY4OS43NDQxWk0xODUuNzM0IDg5Ljc0NDFIMTgwLjE0NlY4NC4xNTYySDE4NS43MzRWODkuNzQ0MVpNMTk1LjA0NyA4OS43NDQxSDE4OS40NTlWODQuMTU2MkgxOTUuMDQ3Vjg5Ljc0NDFaTTUzNi4wODIgODEuMzYwNEM1MzguMjMzIDgxLjM2MDQgNTM5Ljk3OCA4My4xMDQ4IDUzOS45NzggODUuMjU1OUM1MzkuOTc3IDg3LjQwNjggNTM4LjIzMyA4OS4xNTA0IDUzNi4wODIgODkuMTUwNEM1MzMuOTMxIDg5LjE1MDIgNTMyLjE4OCA4Ny40MDY3IDUzMi4xODggODUuMjU1OUM1MzIuMTg4IDgzLjEwNDkgNTMzLjkzMSA4MS4zNjA1IDUzNi4wODIgODEuMzYwNFpNNTQ5LjcxMyA4MS4zNjA0QzU1MS44NjQgODEuMzYwNCA1NTMuNjA3IDgzLjEwNDggNTUzLjYwNyA4NS4yNTU5QzU1My42MDcgODcuNDA2OCA1NTEuODY0IDg5LjE1MDQgNTQ5LjcxMyA4OS4xNTA0QzU0Ny41NjIgODkuMTUwNCA1NDUuODE5IDg3LjQwNjggNTQ1LjgxOCA4NS4yNTU5QzU0NS44MTggODMuMTA0OCA1NDcuNTYyIDgxLjM2MDQgNTQ5LjcxMyA4MS4zNjA0Wk01NDIuMTkyIDMyLjIxMjlDNTQ0LjIzOSAzMi4yMTI5IDU0NS44OTcgMzMuODcxNyA1NDUuODk3IDM1LjkxOEM1NDUuODk3IDM3LjI4OTIgNTQ1LjE1MiAzOC40ODUyIDU0NC4wNDUgMzkuMTI2VjUwLjgxNDVDNTQ2LjU1OSA1MC45ODU2IDU0OC44OTUgNTEuNDQyNSA1NTAuNzI2IDUyLjEzNjdDNTUzLjA4NyA1My4wMzI0IDU1NC4yMzQgNTQuMTAyNiA1NTQuMjM0IDU1LjM2OTFINTI5LjIyNEM1MjkuMjI0IDU0LjEwMjYgNTMwLjU1MSA1My4wMzI0IDUzMi45MTMgNTIuMTM2N0M1MzQuOTI0IDUxLjM3NDMgNTM3LjU0NCA1MC44OTc4IDU0MC4zNCA1MC43NzI1VjM5LjEyN0M1MzkuMjMyIDM4LjQ4NjIgNTM4LjQ4NyAzNy4yODk0IDUzOC40ODcgMzUuOTE4QzUzOC40ODcgMzMuODcxNyA1NDAuMTQ2IDMyLjIxMjkgNTQyLjE5MiAzMi4yMTI5WiIgZmlsbD0iIzI4MDBGRiIvPgo8ZGVmcz4KPGZpbHRlciBpZD0iZmlsdGVyMF9kXzIzNjdfMTU5NyIgeD0iLTI3LjkwMTQiIHk9IjM3LjIwNyIgd2lkdGg9IjEyNC43MTEiIGhlaWdodD0iMTI0LjEwNCIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVDb2xvck1hdHJpeCBpbj0iU291cmNlQWxwaGEiIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIgcmVzdWx0PSJoYXJkQWxwaGEiLz4KPGZlT2Zmc2V0IGR5PSI0Ii8+CjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIiLz4KPGZlQ29tcG9zaXRlIGluMj0iaGFyZEFscGhhIiBvcGVyYXRvcj0ib3V0Ii8+CjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjI1IDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfMjM2N18xNTk3Ii8+CjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iZWZmZWN0MV9kcm9wU2hhZG93XzIzNjdfMTU5NyIgcmVzdWx0PSJzaGFwZSIvPgo8L2ZpbHRlcj4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzIzNjdfMTU5NyIgeDE9IjYuMDAyNjMiIHkxPSI2IiB4Mj0iMTIzLjk5NyIgeTI9IjEyNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMjgwMEZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzA4REFDRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXJfMjM2N18xNTk3IiB4MT0iNzkuOTY5MyIgeTE9Ijc5LjM3NzkiIHgyPSI3Ni4yOTc0IiB5Mj0iMTQyLjgxOSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMjgwMEZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzA4REFDRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50Ml9saW5lYXJfMjM2N18xNTk3IiB4MT0iNTAuOTMyOSIgeTE9IjUwLjk0MDMiIHgyPSI0Ny4xODUyIiB5Mj0iMTE1LjM2NCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMjgwMEZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzA4REFDRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzIzNjdfMTU5NyI+CjxyZWN0IHdpZHRoPSIxMTgiIGhlaWdodD0iMTE4IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNiA2KSIvPgo8L2NsaXBQYXRoPgo8Y2xpcFBhdGggaWQ9ImNsaXAxXzIzNjdfMTU5NyI+CjxwYXRoIGQ9Ik02IDZIOTRDMTEwLjU2OSA2IDEyNCAxOS40MzE1IDEyNCAzNlY5NEMxMjQgMTEwLjU2OSAxMTAuNTY5IDEyNCA5NCAxMjRINlY2WiIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K',\r\n USER_AVATAR:\r\n 'data:image/png;base64,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',\r\n BOT_AVATAR:\r\n 'data:image/png;base64,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',\r\n};\r\n","import { appConst } from '../constant/constant';\r\nimport { DOOHBOT_API_URL } from './../model/token';\r\n\r\nexport class DoohbotInput {\r\n username = '';\r\n password = '';\r\n authToken?: string;\r\n\r\n DOOHBOT_API_URL?: string;\r\n skipAuthentication?: boolean;\r\n\r\n // inputs\r\n userAvatarUrl: string = appConst.USER_AVATAR;\r\n\r\n // Application Constants Text\r\n readonly appTitle? = 'DoohBot';\r\n readonly appSubtitle? = 'Welcome to DoohBot';\r\n readonly welcomeDesc? =\r\n 'We provide a powerful live chat platform to help businesses connect with their customers, offer support, and increase sales through real-time conversations.';\r\n readonly chatIcon? = 'chat';\r\n readonly sendIcon? = 'send';\r\n readonly closeIcon? = 'close';\r\n readonly clear? = 'clear_all';\r\n readonly minimizeIcon? = 'remove';\r\n readonly moreIcon? = 'more_vert';\r\n readonly fullscreenIcon? = 'fullscreen';\r\n readonly fullscreenExitIcon? = 'fullscreen_exit';\r\n readonly hintText? = 'Please Enter Here';\r\n readonly errorMessage? = 'The message you submitted was too long.';\r\n\r\n // Application Constants Images\r\n readonly appLogoUrl? = appConst.APP_LOGO;\r\n readonly appTextLogoUrl? = appConst.APP_TEXT_LOGO;\r\n readonly appHeaderLogoUrl? = appConst.APP_HEADER_LOGO;\r\n readonly botAvatarUrl? = appConst.BOT_AVATAR;\r\n}\r\n","export const PredefinedMessages = ['Hello!', 'I need help', 'Contact support', 'News and Updates'];\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-chat-button',\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule],\r\n templateUrl: './chat-button.component.html',\r\n styleUrls: ['./chat-button.component.scss'],\r\n})\r\nexport class ChatButtonComponent {\r\n @Input() buttonStyle: 'fab' | 'sidebar' | 'sidebar-top' | 'sidebar-bottom' = 'fab';\r\n @Input() isChatOpen: boolean = false;\r\n @Input() unreadCount: number = 0;\r\n @Input() chatIcon: string = 'chat';\r\n @Input() appTitle: string = 'Chat';\r\n @Input() appLogoUrl: string = '';\r\n @Input() appTextLogoUrl: string = '';\r\n\r\n @Output() toggle = new EventEmitter<void>();\r\n\r\n get isSidebar(): boolean {\r\n return this.buttonStyle.startsWith('sidebar');\r\n }\r\n\r\n get sidebarPosition(): 'top' | 'center' | 'bottom' {\r\n if (!this.isSidebar) return 'center';\r\n if (this.buttonStyle === 'sidebar') return 'center';\r\n return this.buttonStyle.split('-')[1] as 'top' | 'center' | 'bottom';\r\n }\r\n\r\n onToggle() {\r\n this.toggle.emit();\r\n }\r\n}\r\n","<!-- fab -->\r\n<button class=\"chat-fab\" (click)=\"onToggle()\" *ngIf=\"buttonStyle === 'fab' && !isChatOpen\">\r\n <!-- <mat-icon>{{ chatIcon }}</mat-icon> -->\r\n <img style=\"width: 30px; height: 30px\" [src]=\"appLogoUrl\" />\r\n <!-- <div class=\"chat-logo\"></div> -->\r\n <span class=\"alert-badge\" *ngIf=\"unreadCount > 0\">\r\n {{ unreadCount > 9 ? '9+' : unreadCount }}\r\n </span>\r\n</button>\r\n\r\n<!-- sidebar button -->\r\n<button\r\n class=\"chat-sidebar\"\r\n (click)=\"onToggle()\"\r\n *ngIf=\"isSidebar && !isChatOpen\"\r\n [ngClass]=\"sidebarPosition\"\r\n>\r\n <!-- <h2 style=\"transform: rotate(-90deg); font-size: 16px\">{{ appTitle }}</h2> -->\r\n <img style=\"transform: rotate(-90deg); width: 100px; height: 45px\" [src]=\"appTextLogoUrl\" />\r\n\r\n <span class=\"alert-badge\" *ngIf=\"unreadCount > 0\">\r\n {{ unreadCount > 9 ? '9+' : unreadCount }}\r\n </span>\r\n</button>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-chips',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './chips.component.html',\r\n styleUrls: ['./chips.component.scss'],\r\n})\r\nexport class Chips {\r\n @Input() messages: string[] = []; // messages array\r\n @Input() disabled = false;\r\n @Output() chipClick = new EventEmitter<string>(); // emit clicked chip\r\n\r\n onChipClick(msg: string) {\r\n if (this.disabled) return;\r\n this.chipClick.emit(msg);\r\n }\r\n}\r\n","@if (messages.length > 0) {\r\n <div class=\"predefined-chips\">\r\n @for (msg of messages; track msg) {\r\n <button class=\"chip\" (click)=\"onChipClick(msg)\">\r\n {{ msg }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n TrackByFunction,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Chips } from '../../shared/chips/chips.component';\r\nimport { Message } from '../../model/message';\r\n\r\n@Component({\r\n selector: 'app-message-list',\r\n standalone: true,\r\n imports: [CommonModule, Chips],\r\n templateUrl: './message-list.component.html',\r\n styleUrls: ['./message-list.component.scss'],\r\n})\r\nexport class MessageListComponent implements AfterViewInit, OnDestroy {\r\n @Input() messages: Message[] = [];\r\n @Input() isBotTyping: boolean = false;\r\n @Input() appLogoUrl: string = '';\r\n @Input() appSubtitle: string = '';\r\n @Input() welcomeDesc: string = '';\r\n @Input() predefinedMessages: string[] = [];\r\n @Input() botAvatarUrl: string = '';\r\n @Input() userAvatarUrl: string = '';\r\n @Input() userName: string = '';\r\n @Input() isAuthenticated: boolean = false;\r\n @Input() trackByMessageId: TrackByFunction<Message> = (index, item) => item.id ?? index;\r\n\r\n @Output() suggestionClick = new EventEmitter<string>();\r\n\r\n @ViewChild('chatMessages') private chatMessagesContainer!: ElementRef;\r\n private mutationObserver!: MutationObserver;\r\n\r\n appEmoji = {\r\n waveHand: '\\u{1F44B}',\r\n };\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.chatMessagesContainer) return;\r\n\r\n this.mutationObserver = new MutationObserver(() => this.scrollToBottom());\r\n\r\n this.mutationObserver.observe(this.chatMessagesContainer.nativeElement, {\r\n childList: true,\r\n subtree: true,\r\n });\r\n\r\n this.scrollToBottom();\r\n }\r\n\r\n private scrollToBottom(): void {\r\n if (!this.chatMessagesContainer) {\r\n return;\r\n }\r\n const container = this.chatMessagesContainer.nativeElement;\r\n container.scrollTo({\r\n top: container.scrollHeight,\r\n behavior: 'smooth',\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.mutationObserver) {\r\n this.mutationObserver.disconnect();\r\n }\r\n }\r\n\r\n onPredefinedClick(text: string) {\r\n this.suggestionClick.emit(text);\r\n }\r\n}\r\n","<div #chatMessages class=\"chat-messages\">\r\n <!-- Welcome Screen -->\r\n <div class=\"welcome-screen\" *ngIf=\"messages.length === 0 && !isBotTyping\">\r\n <img [src]=\"appLogoUrl\" alt=\"Welcome\" class=\"welcome-image\" style=\"border-radius: 0px\" />\r\n\r\n <!-- Only show greeting if authenticated -->\r\n <h2 class=\"welcome-greeting\" *ngIf=\"userName && isAuthenticated\">\r\n Hi, {{ userName }}!\r\n <!-- <span class=\"emoji\">👋</span> -->\r\n <span class=\"emoji\">{{ appEmoji.waveHand }}</span>\r\n </h2>\r\n\r\n <h3>{{ appSubtitle }}</h3>\r\n <p>{{ welcomeDesc }}</p>\r\n\r\n <!-- Predefined messages chips: Only show when authenticated -->\r\n <app-chips\r\n *ngIf=\"isAuthenticated\"\r\n [messages]=\"predefinedMessages\"\r\n [disabled]=\"isBotTyping\"\r\n (chipClick)=\"onPredefinedClick($event)\"\r\n ></app-chips>\r\n </div>\r\n\r\n <!-- Chat Messages -->\r\n <div\r\n *ngFor=\"let message of messages; trackBy: trackByMessageId\"\r\n class=\"message-wrapper\"\r\n [class.user]=\"message.sender === 'user'\"\r\n [class.bot]=\"message.sender === 'bot'\"\r\n >\r\n <!-- Bot Avatar -->\r\n <img\r\n *ngIf=\"message.sender === 'bot'\"\r\n class=\"bot-avatar\"\r\n [src]=\"botAvatarUrl\"\r\n alt=\"Bot Avatar\"\r\n />\r\n\r\n <!-- Message Bubble -->\r\n <div\r\n class=\"message\"\r\n [class.user]=\"message.sender === 'user'\"\r\n [class.bot]=\"message.sender === 'bot'\"\r\n >\r\n {{ message.text }}\r\n <!-- Show time below message -->\r\n <div *ngIf=\"message.sender === 'bot'\" class=\"message-time\">\r\n {{ message.timestamp | date: 'shortTime' }}\r\n </div>\r\n </div>\r\n\r\n <!-- User Avatar -->\r\n <div class=\"user-avatar-container\" *ngIf=\"message.sender === 'user'\">\r\n <img class=\"user-avatar\" [src]=\"userAvatarUrl\" alt=\"User Avatar\" />\r\n <!-- <span class=\"user-name\" *ngIf=\"userName\">{{ userName }}</span> -->\r\n </div>\r\n </div>\r\n\r\n <!-- Typing Indicator -->\r\n <div class=\"message-wrapper bot\" *ngIf=\"isBotTyping\">\r\n <img class=\"bot-avatar\" [src]=\"botAvatarUrl\" alt=\"Bot Avatar\" />\r\n <div class=\"message bot\">\r\n <div class=\"typing-indicator\">\r\n <span></span>\r\n <span></span>\r\n <span></span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-message-input',\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule],\r\n templateUrl: './message-input.component.html',\r\n styleUrls: ['./message-input.component.scss'],\r\n})\r\nexport class MessageInputComponent {\r\n @Input() isBotTyping: boolean = false;\r\n @Input() hintText: string = 'Type a message...';\r\n @Input() sendIcon: string = 'send';\r\n\r\n @Output() send = new EventEmitter<string>();\r\n\r\n onSend(text: string) {\r\n if (text.trim()) {\r\n this.send.emit(text);\r\n }\r\n }\r\n}\r\n","<!-- Chat Input -->\r\n<div class=\"chat-input\">\r\n <div class=\"input-wrapper\">\r\n <input #messageInput type=\"text\" [disabled]=\"isBotTyping\"\r\n (keydown.enter)=\"onSend(messageInput.value); messageInput.value = ''\" [placeholder]=\"hintText\" />\r\n\r\n <button [disabled]=\"isBotTyping\" (click)=\"onSend(messageInput.value); messageInput.value = ''\">\r\n <mat-icon>{{ sendIcon }}</mat-icon>\r\n </button>\r\n </div>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-snackbar',\r\n templateUrl: './snackbar.component.html',\r\n styleUrls: ['./snackbar.component.scss'],\r\n standalone: true,\r\n imports: [MatIconModule],\r\n})\r\nexport class SnackBar implements OnInit, OnDestroy {\r\n @Input() message: string | null = null;\r\n @Input() autoDismiss: boolean = true;\r\n @Input() dismissDelay: number = 5000;\r\n @Input() show: boolean = false;\r\n\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n public timeoutId: number | null = null;\r\n\r\n ngOnInit() {\r\n if (this.autoDismiss) {\r\n this.timeoutId = setTimeout(() => {\r\n this.close();\r\n }, this.dismissDelay) as any;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.clearTimeout();\r\n }\r\n\r\n close() {\r\n this.show = false;\r\n this.message = null;\r\n this.closed.emit();\r\n }\r\n public clearTimeout() {\r\n if (this.timeoutId) {\r\n clearTimeout(this.timeoutId);\r\n this.timeoutId = null;\r\n }\r\n }\r\n}\r\n","<div class=\"message-error\">\r\n <div class=\"error-content\">\r\n <mat-icon class=\"alert-icon\">warning</mat-icon>\r\n <span class=\"error-text\">{{ message }}</span>\r\n </div>\r\n <mat-icon class=\"close-icon\" (click)=\"close()\">close</mat-icon>\r\n</div>\r\n","import { Directive, ElementRef, HostListener, Input, OnInit, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[draggableDialog]',\r\n standalone: true,\r\n})\r\nexport class DraggableDialogDirective implements OnInit {\r\n private isDragging = false;\r\n private startX = 0;\r\n private startY = 0;\r\n private offsetX = 0;\r\n private offsetY = 0;\r\n\r\n @Input('dragHandle') dragHandleSelector: string | undefined;\r\n @Input() enableDrag = false;\r\n\r\n private dragHandle: HTMLElement | undefined;\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2,\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (!this.enableDrag) {\r\n this.el.nativeElement.removeAttribute('draggableDialog');\r\n return;\r\n }\r\n\r\n if (this.dragHandleSelector) {\r\n this.dragHandle = this.el.nativeElement.querySelector(this.dragHandleSelector);\r\n } else {\r\n this.dragHandle = this.el.nativeElement; // fallback\r\n }\r\n if (this.dragHandle) {\r\n this.renderer.setStyle(this.dragHandle, 'cursor', 'move');\r\n }\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n if (!this.dragHandle || event.target !== this.dragHandle) return;\r\n\r\n this.isDragging = true;\r\n this.startX = event.clientX - this.offsetX;\r\n this.startY = event.clientY - this.offsetY;\r\n\r\n event.preventDefault();\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (!this.isDragging) return;\r\n\r\n this.offsetX = event.clientX - this.startX;\r\n this.offsetY = event.clientY - this.startY;\r\n\r\n this.renderer.setStyle(\r\n this.el.nativeElement,\r\n 'transform',\r\n `translate(${this.offsetX}px, ${this.offsetY}px)`,\r\n );\r\n }\r\n\r\n @HostListener('document:mouseup', [])\r\n onMouseUp() {\r\n this.isDragging = false;\r\n }\r\n}\r\n","// resizable-dialog.directive.ts\r\nimport {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n OnInit,\r\n OnDestroy,\r\n HostListener,\r\n Input,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[resizableDialog]',\r\n standalone: true,\r\n})\r\nexport class ResizableDialogDirective implements OnInit, OnDestroy {\r\n private resizeHandles: HTMLElement[] = [];\r\n private activeHandle: string | null = null;\r\n private startX = 0;\r\n private startY = 0;\r\n private startWidth = 0;\r\n private startHeight = 0;\r\n private startLeft = 0;\r\n private startTop = 0;\r\n\r\n @Input() enableResize = false;\r\n\r\n // Define resize directions\r\n private directions = ['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw'];\r\n\r\n constructor(\r\n private el: ElementRef<HTMLElement>,\r\n private renderer: Renderer2,\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (!this.enableResize) {\r\n this.el.nativeElement.removeAttribute('resizableDialog');\r\n return;\r\n }\r\n\r\n this.setStyle();\r\n this.createResizeHandles();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.removeResizeHandles();\r\n }\r\n\r\n private setStyle() {\r\n const element = this.el.nativeElement;\r\n this.renderer.setStyle(element, 'position', 'absolute');\r\n this.renderer.setStyle(element, 'overflow', 'hidden');\r\n this.renderer.setStyle(element, 'boxSizing', 'border-box');\r\n }\r\n\r\n private createResizeHandles() {\r\n this.directions.forEach((dir) => {\r\n const handle = this.renderer.createElement('div');\r\n this.renderer.setAttribute(handle, 'data-dir', dir);\r\n this.renderer.setStyle(handle, 'position', 'absolute');\r\n this.renderer.setStyle(handle, 'background', 'transparent');\r\n this.renderer.setStyle(handle, 'zIndex', '10');\r\n this.renderer.setStyle(handle, 'userSelect', 'none');\r\n\r\n // Set size and position based on direction\r\n if (dir.includes('e') || dir.includes('w')) {\r\n this.renderer.setStyle(handle, 'width', '10px');\r\n this.renderer.setStyle(handle, 'cursor', dir.includes('e') ? 'e-resize' : 'w-resize');\r\n this.renderer.setStyle(handle, 'top', '0');\r\n this.renderer.setStyle(handle, 'bottom', '0');\r\n this.renderer.setStyle(handle, 'right', dir.includes('e') ? '0' : null);\r\n this.renderer.setStyle(handle, 'left', dir.includes('w') ? '0' : null);\r\n }\r\n if (dir.includes('n') || dir.includes('s')) {\r\n this.renderer.setStyle(handle, 'height', '10px');\r\n this.renderer.setStyle(handle, 'cursor', dir.includes('s') ? 's-resize' : 'n-resize');\r\n this.renderer.setStyle(handle, 'left', '0');\r\n this.renderer.setStyle(handle, 'right', '0');\r\n this.renderer.setStyle(handle, 'bottom', dir.includes('s') ? '0' : null);\r\n this.renderer.setStyle(handle, 'top', dir.includes('n') ? '0' : null);\r\n }\r\n if (dir === 'ne' || dir === 'nw' || dir === 'se' || dir === 'sw') {\r\n this.renderer.setStyle(handle, 'width', '12px');\r\n this.renderer.setStyle(handle, 'height', '12px');\r\n this.renderer.setStyle(handle, 'borderRadius', '50%');\r\n this.renderer.setStyle(handle, 'cursor', `${dir}-resize`);\r\n this.renderer.setStyle(handle, 'top', dir.includes('n') ? '0' : null);\r\n this.renderer.setStyle(handle, 'bottom', dir.includes('s') ? '0' : null);\r\n this.renderer.setStyle(handle, 'left', dir.includes('w') ? '0' : null);\r\n this.renderer.setStyle(handle, 'right', dir.includes('e') ? '0' : null);\r\n }\r\n\r\n this.renderer.appendChild(this.el.nativeElement, handle);\r\n this.resizeHandles.push(handle);\r\n });\r\n }\r\n\r\n private removeResizeHandles() {\r\n this.resizeHandles.forEach((handle) => {\r\n this.renderer.removeChild(this.el.nativeElement, handle);\r\n });\r\n this.resizeHandles = [];\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n const dir = target.getAttribute('data-dir');\r\n if (!dir) return;\r\n\r\n event.preventDefault();\r\n\r\n this.activeHandle = dir;\r\n const rect = this.el.nativeElement.getBoundingClientRect();\r\n\r\n this.startX = event.clientX;\r\n this.startY = event.clientY;\r\n this.startWidth = parseFloat(this.getComputedStyleValue('width'));\r\n this.startHeight = parseFloat(this.getComputedStyleValue('height'));\r\n this.startLeft = parseFloat(this.getComputedStyleValue('left'));\r\n this.startTop = parseFloat(this.getComputedStyleValue('top'));\r\n\r\n // Prevent text selection during resize\r\n document.body.classList.add('no-select');\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (!this.activeHandle) return;\r\n\r\n const dx = event.clientX - this.startX;\r\n const dy = event.clientY - this.startY;\r\n\r\n let newWidth = this.startWidth;\r\n let newHeight = this.startHeight;\r\n let newLeft = this.startLeft;\r\n let newTop = this.startTop;\r\n\r\n const minWidth = 150;\r\n const minHeight = 100;\r\n\r\n // Horizontal resize\r\n if (this.activeHandle.includes('e')) {\r\n newWidth = Math.max(this.startWidth + dx, minWidth);\r\n }\r\n if (this.activeHandle.includes('w')) {\r\n newWidth = Math.max(this.startWidth - dx, minWidth);\r\n newLeft = this.startLeft + (this.startWidth - newWidth);\r\n }\r\n\r\n // Vertical resize\r\n if (this.activeHandle.includes('s')) {\r\n newHeight = Math.max(this.startHeight + dy, minHeight);\r\n }\r\n if (this.activeHandle.includes('n')) {\r\n newHeight = Math.max(this.startHeight - dy, minHeight);\r\n newTop = this.startTop + (this.startHeight - newHeight);\r\n }\r\n\r\n // Apply changes\r\n this.renderer.setStyle(this.el.nativeElement, 'width', `${newWidth}px`);\r\n this.renderer.setStyle(this.el.nativeElement, 'height', `${newHeight}px`);\r\n this.renderer.setStyle(this.el.nativeElement, 'left', `${newLeft}px`);\r\n this.renderer.setStyle(this.el.nativeElement, 'top', `${newTop}px`);\r\n }\r\n\r\n @HostListener('document:mouseup')\r\n onMouseUp() {\r\n if (this.activeHandle) {\r\n this.activeHandle = null;\r\n document.body.classList.remove('no-select');\r\n }\r\n }\r\n\r\n private getComputedStyleValue(property: string): string {\r\n return getComputedStyle(this.el.nativeElement).getPropertyValue(property) || '0';\r\n }\r\n}\r\n","import { Injectable, OnDestroy, Renderer2, RendererFactory2, signal } from '@angular/core';\r\nimport { OverlayContainer } from '@angular/cdk/overlay';\r\nimport { DoohbotThemeConfig } from '../../model/theme-config.model';\r\n\r\nexport type ThemeMode = 'light' | 'dark' | 'auto';\r\n\r\nconst DEFAULT_THEME_CONFIG: DoohbotThemeConfig = {\r\n fontFamily: \"'Roboto', Arial, sans-serif\",\r\n primaryColor: '#2800ff',\r\n secondaryColor: '#08dacf',\r\n backgroundColor: '#f8f9fa, #1a1717',\r\n chatInputColor: 'var(--background-color)',\r\n textAltColor: '#000000, #ffffff',\r\n buttonColor: '#000000, #ffffff',\r\n textColor: '#333, #f5f5f5',\r\n secondaryTextColor: '#858585, #a1a1a1',\r\n hintTextColor: '#858585, #a1a1a1',\r\n userMessageColor: 'var(--primary-color)',\r\n botMessageColor: '#e9ecef, #333',\r\n userTextColor: '#fff',\r\n botTextColor: '#333, #fff',\r\n borderColor: '#ccc, #444',\r\n borderShadowColor: '0 4px 16px rgba(0, 0, 0, 0.25), 0 4px 16px rgba(0, 0, 0, 0.75)',\r\n borderTopColor: '#dddddd00, #44444400',\r\n typingIndicatorColor: '#999, #bbb',\r\n white: '#ffffff',\r\n black: '#000000',\r\n grey: '#6c757d, #9ca3af',\r\n red: '#ff0000',\r\n lightRed: '#f28b8b',\r\n};\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ThemeService implements OnDestroy {\r\n private renderer: Renderer2;\r\n private _theme = signal<ThemeMode>('auto');\r\n public theme = this._theme.asReadonly();\r\n\r\n private _activeTheme = signal<'light-theme' | 'dark-theme'>('light-theme');\r\n public activeTheme = this._activeTheme.asReadonly();\r\n\r\n private observer: MutationObserver | null = null;\r\n // private mediaQueryListener: ((e: MediaQueryListEvent) => void) | null = null;\r\n\r\n constructor(\r\n rendererFactory: RendererFactory2,\r\n private overlay: OverlayContainer,\r\n ) {\r\n this.renderer = rendererFactory.createRenderer(null, null);\r\n // Initialize theme from local storage or default to auto\r\n const savedTheme = localStorage.getItem('theme') as ThemeMode;\r\n this.setTheme(savedTheme || 'auto');\r\n }\r\n\r\n setTheme(mode: ThemeMode): void {\r\n this._theme.set(mode);\r\n localStorage.setItem('theme', mode);\r\n this.updateActiveTheme(mode);\r\n }\r\n\r\n private updateActiveTheme(mode: ThemeMode) {\r\n this.cleanupObservers();\r\n\r\n if (mode === 'auto') {\r\n this.handleAutoTheme();\r\n } else {\r\n const themeToApply = mode === 'dark' ? 'dark-theme' : 'light-theme';\r\n this._activeTheme.set(themeToApply);\r\n this.applyThemeToGlobal(themeToApply);\r\n }\r\n }\r\n\r\n private handleAutoTheme() {\r\n // Initial detection\r\n this.detectAndApplyParentTheme();\r\n\r\n // Watch for changes in parent\r\n this.observer = new MutationObserver(() => {\r\n this.detectAndApplyParentTheme();\r\n });\r\n\r\n this.observer.observe(document.documentElement, {\r\n attributes: true,\r\n attributeFilter: ['class', 'data-theme'],\r\n });\r\n this.observer.observe(document.body, {\r\n attributes: true,\r\n attributeFilter: ['class', 'data-theme'],\r\n });\r\n\r\n // Also listen to system preference as a fallback or if parent doesn't specify\r\n // const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n // this.mediaQueryListener = (e) => {\r\n // // Re-run detection which prioritizes parent classes but falls back to system\r\n // this.detectAndApplyParentTheme();\r\n // };\r\n // mediaQuery.addEventListener('change', this.mediaQueryListener);\r\n }\r\n\r\n private detectAndApplyParentTheme() {\r\n const isDark = this.isParentDark();\r\n const newTheme = isDark ? 'dark-theme' : 'light-theme';\r\n\r\n // Only update if changed to avoid unnecessary DOM updates\r\n if (this._activeTheme() !== newTheme) {\r\n this._activeTheme.set(newTheme);\r\n this.applyThemeToGlobal(newTheme);\r\n }\r\n }\r\n\r\n private isParentDark(): boolean {\r\n const body = document.body;\r\n const html = document.documentElement;\r\n\r\n // Check for common class names\r\n const darkClasses = ['dark', 'dark-theme', 'dark-mode', 'night-mode'];\r\n const hasDarkClass = (el: HTMLElement) => darkClasses.some((c) => el.classList.contains(c));\r\n\r\n if (hasDarkClass(body) || hasDarkClass(html)) return true;\r\n\r\n // Check for data-theme attribute\r\n if (body.getAttribute('data-theme') === 'dark' || html.getAttribute('data-theme') === 'dark')\r\n return true;\r\n\r\n // Check for Bootstrap 5.3+ data-bs-theme\r\n if (\r\n body.getAttribute('data-bs-theme') === 'dark' ||\r\n html.getAttribute('data-bs-theme') === 'dark'\r\n ) {\r\n return true;\r\n }\r\n\r\n // Fallback to system preference\r\n // return window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n return false;\r\n }\r\n\r\n private applyThemeToGlobal(theme: 'light-theme' | 'dark-theme') {\r\n // We do NOT touch document.body anymore to avoid conflicts\r\n const overlayContainer = this.overlay.getContainerElement();\r\n\r\n // Only apply to overlay container (for menus/dialogs)\r\n // The main chat window handles its own theme via the host binding in doohbot.component.ts\r\n this.renderer.removeClass(overlayContainer, 'light-theme');\r\n this.renderer.removeClass(overlayContainer, 'dark-theme');\r\n this.renderer.addClass(overlayContainer, theme);\r\n }\r\n\r\n private cleanupObservers() {\r\n if (this.observer) {\r\n this.observer.disconnect();\r\n this.observer = null;\r\n }\r\n // if (this.mediaQueryListener) {\r\n // window\r\n // .matchMedia('(prefers-color-scheme: dark)')\r\n // .removeEventListener('change', this.mediaQueryListener);\r\n // this.mediaQueryListener = null;\r\n // }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.cleanupObservers();\r\n }\r\n\r\n public applyCssVariables(element: HTMLElement, config: DoohbotThemeConfig | undefined) {\r\n if (!config) return;\r\n\r\n //! Made for popout windows where we need to apply styles to a specific element\r\n // const activeConfig = config || DEFAULT_THEME_CONFIG;\r\n\r\n const isDark = this._activeTheme() === 'dark-theme';\r\n\r\n const applyColor = (input: string | undefined, variableName: string) => {\r\n if (input) {\r\n const { light, dark } = this.parseColor(input);\r\n const colorToUse = isDark ? dark : light;\r\n element.style.setProperty(`--${variableName}`, colorToUse);\r\n } else {\r\n element.style.removeProperty(`--${variableName}`);\r\n }\r\n };\r\n\r\n applyColor(config.fontFamily, 'font-family');\r\n applyColor(config.primaryColor, 'primary-color');\r\n applyColor(config.secondaryColor, 'secondary-color');\r\n applyColor(config.backgroundColor, 'background-color');\r\n applyColor(config.chatInputColor, 'chat-input-color');\r\n applyColor(config.textAltColor, 'text-alt-color');\r\n applyColor(config.buttonColor, 'button-color');\r\n applyColor(config.textColor, 'text-color');\r\n applyColor(config.secondaryTextColor, 'secondary-text-color');\r\n applyColor(config.hintTextColor, 'hint-text-color');\r\n applyColor(config.userMessageColor, 'user-message-color');\r\n applyColor(config.botMessageColor, 'bot-message-color');\r\n applyColor(config.userTextColor, 'user-text-color');\r\n applyColor(config.botTextColor, 'bot-text-color');\r\n applyColor(config.borderColor, 'border-color');\r\n applyColor(config.borderShadowColor, 'border-shadow-color');\r\n applyColor(config.borderTopColor, 'border-top-color');\r\n applyColor(config.typingIndicatorColor, 'typing-indicator-color');\r\n applyColor(config.white, 'white');\r\n applyColor(config.black, 'black');\r\n applyColor(config.grey, 'grey');\r\n applyColor(config.red, 'red');\r\n applyColor(config.lightRed, 'light-red');\r\n }\r\n\r\n private parseColor(input: string): { light: string; dark: string } {\r\n const parts = input.split(',').map((p) => p.trim());\r\n if (parts.length === 1) {\r\n return { light: parts[0], dark: parts[0] };\r\n } else if (parts.length >= 2) {\r\n return { light: parts[0], dark: parts[1] };\r\n }\r\n return { light: '', dark: '' };\r\n }\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\nexport interface DialogData {\r\n title: string;\r\n message: string;\r\n confirmText?: string;\r\n cancelText?: string;\r\n confirmButtonColor?: 'primary' | 'accent' | 'warn';\r\n icon?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-dialog',\r\n standalone: true,\r\n imports: [CommonModule, MatDialogModule, MatButtonModule, MatIconModule],\r\n templateUrl: './dialog.component.html',\r\n styleUrls: ['./dialog.component.scss'],\r\n})\r\nexport class DialogComponent {\r\n constructor(\r\n public dialogRef: MatDialogRef<DialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: DialogData,\r\n ) {\r\n // Set defaults\r\n this.data.confirmText = this.data.confirmText || 'Confirm';\r\n this.data.cancelText = this.data.cancelText || 'Cancel';\r\n this.data.confirmButtonColor = this.data.confirmButtonColor || 'warn';\r\n this.data.icon = this.data.icon || 'warning';\r\n }\r\n\r\n onCancel(): void {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n onConfirm(): void {\r\n this.dialogRef.close(true);\r\n }\r\n}\r\n","<div class=\"dialog-container\">\r\n <div class=\"dialog-header\">\r\n <mat-icon class=\"dialog-icon\" [class.warn-icon]=\"data.confirmButtonColor === 'warn'\">\r\n {{ data.icon }}\r\n </mat-icon>\r\n <h2 mat-dialog-title>{{ data.title }}</h2>\r\n </div>\r\n\r\n <mat-dialog-content>\r\n <p class=\"dialog-message\">{{ data.message }}</p>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-button class=\"cancel-btn\" (click)=\"onCancel()\" type=\"button\">\r\n {{ data.cancelText }}\r\n </button>\r\n <button\r\n mat-raised-button\r\n class=\"confirm-btn\"\r\n [class.warn-btn]=\"data.confirmButtonColor === 'warn'\"\r\n [class.primary-btn]=\"data.confirmButtonColor === 'primary'\"\r\n [class.accent-btn]=\"data.confirmButtonColor === 'accent'\"\r\n (click)=\"onConfirm()\"\r\n type=\"button\"\r\n >\r\n {{ data.confirmText }}\r\n </button>\r\n </mat-dialog-actions>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\nimport { DialogComponent, DialogData } from './dialog.component';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DialogService {\r\n constructor(private dialog: MatDialog) { }\r\n\r\n /**\r\n * Opens a confirmation dialog with customizable options\r\n * @param data Configuration for the dialog\r\n * @returns Observable that emits true if confirmed, false if cancelled\r\n */\r\n open(data: DialogData): Observable<boolean> {\r\n const dialogRef = this.dialog.open(DialogComponent, {\r\n width: '400px',\r\n data: data,\r\n disableClose: false,\r\n autoFocus: true,\r\n restoreFocus: true,\r\n });\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n\r\n /**\r\n * Convenience method for delete confirmation dialogs\r\n * @param itemName Name of the item being deleted\r\n * @returns Observable that emits true if confirmed, false if cancelled\r\n */\r\n confirmDelete(itemName: string = 'this item'): Observable<boolean> {\r\n return this.open({\r\n title: 'Confirm Delete',\r\n message: `Are you sure you want to delete ${itemName}? This action cannot be undone.`,\r\n confirmText: 'Delete',\r\n cancelText: 'Cancel',\r\n confirmButtonColor: 'warn',\r\n icon: 'delete_forever',\r\n });\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n OnChanges,\r\n SimpleChanges,\r\n Output,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ChatSession, ChatSessionGroup } from '../../model/chat-session.model';\r\nimport { DialogService } from '../../shared/dialog/dialog.service';\r\n\r\n@Component({\r\n selector: 'app-chat-history-sidebar',\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule],\r\n templateUrl: './chat-history-sidebar.component.html',\r\n styleUrls: ['./chat-history-sidebar.component.scss'],\r\n})\r\nexport class ChatHistorySidebarComponent implements OnInit, OnChanges {\r\n @Input() sessions: ChatSession[] = [];\r\n @Input() isOpen: boolean = false;\r\n @Input() userName: string = 'User';\r\n\r\n @Output() sessionSelected = new EventEmitter<ChatSession>();\r\n @Output() sessionDeleted = new EventEmitter<string>();\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n chatHistory: ChatSessionGroup[] = [];\r\n\r\n constructor(private dialogService: DialogService) {}\r\n\r\n ngOnInit(): void {\r\n this.chatHistory = this.groupedSessions();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['sessions']) {\r\n this.chatHistory = this.groupedSessions();\r\n }\r\n }\r\n\r\n groupedSessions(): ChatSessionGroup[] {\r\n const now = new Date();\r\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n const yesterday = new Date(today);\r\n yesterday.setDate(yesterday.getDate() - 1);\r\n const weekAgo = new Date(today);\r\n weekAgo.setDate(weekAgo.getDate() - 7);\r\n\r\n const groups: ChatSessionGroup[] = [\r\n { label: 'Today', sessions: [] },\r\n { label: 'Yesterday', sessions: [] },\r\n { label: 'This Week', sessions: [] },\r\n { label: 'Older', sessions: [] },\r\n ];\r\n\r\n // Sort sessions by timestamp (newest first)\r\n const sortedSessions = [...this.sessions].sort(\r\n (a, b) => b.timestamp.getTime() - a.timestamp.getTime(),\r\n );\r\n\r\n sortedSessions.forEach((session) => {\r\n const sessionDate = new Date(session.timestamp);\r\n const sessionDayStart = new Date(\r\n sessionDate.getFullYear(),\r\n sessionDate.getMonth(),\r\n sessionDate.getDate(),\r\n );\r\n\r\n if (sessionDayStart.getTime() === today.getTime()) {\r\n groups[0].sessions.push(session);\r\n } else if (sessionDayStart.getTime() === yesterday.getTime()) {\r\n groups[1].sessions.push(session);\r\n } else if (sessionDayStart.getTime() >= weekAgo.getTime()) {\r\n groups[2].sessions.push(session);\r\n } else {\r\n groups[3].sessions.push(session);\r\n }\r\n });\r\n\r\n // Filter out empty groups\r\n return groups.filter((g) => g.sessions.length > 0);\r\n }\r\n\r\n onSessionClick(session: ChatSession): void {\r\n this.sessionSelected.emit(session);\r\n }\r\n\r\n onDeleteClick(event: Event, sessionId: string): void {\r\n event.stopPropagation();\r\n this.dialogService.confirmDelete('this conversation').subscribe((confirmed) => {\r\n if (confirmed) {\r\n this.sessionDeleted.emit(sessionId);\r\n this.chatHistory = this.groupedSessions();\r\n }\r\n });\r\n }\r\n\r\n onClose(): void {\r\n this.closed.emit();\r\n }\r\n\r\n formatTime(date: Date): string {\r\n return new Date(date).toLocaleTimeString('en-US', {\r\n hour: 'numeric',\r\n minute: '2-digit',\r\n hour12: true,\r\n });\r\n }\r\n\r\n formatDate(date: Date): string {\r\n return new Date(date).toLocaleDateString('en-US', {\r\n month: 'short',\r\n day: 'numeric',\r\n });\r\n }\r\n}\r\n","<div class=\"history-sidebar\" [class.open]=\"isOpen\">\r\n <div class=\"sidebar-header\">\r\n <h3>{{ userName }}'s Chat History</h3>\r\n <button class=\"close-btn\" (click)=\"onClose()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"sidebar-content\">\r\n <div *ngIf=\"sessions.length === 0\" class=\"empty-state\">\r\n <mat-icon>history</mat-icon>\r\n <p>No chat history yet</p>\r\n <span>Start a conversation to see it here</span>\r\n </div>\r\n\r\n <div *ngFor=\"let group of chatHistory\" class=\"session-group\">\r\n <div class=\"group-label\">{{ group.label }}</div>\r\n <div class=\"session-list\">\r\n <div\r\n *ngFor=\"let session of group.sessions\"\r\n class=\"session-item\"\r\n (click)=\"onSessionClick(session)\"\r\n >\r\n <div class=\"session-content\">\r\n <div class=\"session-title\">{{ session.title }}</div>\r\n <div class=\"session-time\">\r\n {{ formatTime(session.timestamp) }} · {{ formatDate(session.timestamp) }}\r\n </div>\r\n </div>\r\n <button\r\n class=\"delete-btn\"\r\n (click)=\"onDeleteClick($event, session.id)\"\r\n title=\"Delete conversation\"\r\n >\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-menu-item',\r\n imports: [],\r\n templateUrl: './menu-item.component.html',\r\n styleUrl: './menu-item.component.scss',\r\n})\r\nexport class MenuItem {\r\n @Input() href = '#';\r\n @Output() selected = new EventEmitter<void>();\r\n\r\n onClick(event: Event): void {\r\n // Optional: prevent default if used for actions, not navigation\r\n // event.preventDefault();\r\n\r\n this.selected.emit();\r\n }\r\n}\r\n","<li>\r\n <a [href]=\"href\" (click)=\"onClick($event)\">\r\n <ng-content></ng-content>\r\n </a>\r\n</li>\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChildren,\r\n ElementRef,\r\n QueryList,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { MenuItem } from '../menu-item/menu-item.component';\r\n\r\n@Component({\r\n selector: 'app-dropdown-menu',\r\n imports: [],\r\n templateUrl: './dropdown-menu.component.html',\r\n styleUrl: './dropdown-menu.component.scss',\r\n})\r\nexport class DropdownMenu implements AfterContentInit {\r\n @ViewChild('details') detailsRef!: ElementRef<HTMLDetailsElement>;\r\n\r\n @ContentChildren(MenuItem) menuItems!: QueryList<MenuItem>;\r\n\r\n ngAfterContentInit() {\r\n // Subscribe to all menu item selections\r\n this.menuItems.forEach((item) => {\r\n item.selected.subscribe(() => {\r\n this.close();\r\n });\r\n });\r\n }\r\n\r\n close(): void {\r\n this.detailsRef.nativeElement.open = false;\r\n }\r\n}\r\n","<details class=\"dropdown-menu\" #details>\r\n <summary role=\"button\" class=\"dropdown-trigger\">\r\n <ng-content select=\"[trigger]\"></ng-content>\r\n </summary>\r\n <ul class=\"dropdown-list\">\r\n <ng-content></ng-content>\r\n </ul>\r\n</details>\r\n\r\n<!-- ussage example:\r\n<app-dropdown-menu>\r\n <span trigger>☰ Menu</span>\r\n\r\n <app-menu-item href=\"/profile\" (selected)=\"doSomething('profile')\">\r\n My Profile\r\n </app-menu-item>\r\n \r\n <app-menu-item href=\"/settings\" (selected)=\"doSomething('settings')\">\r\n Settings\r\n </app-menu-item>\r\n \r\n <app-menu-item href=\"#\" (selected)=\"logout()\">\r\n Logout\r\n </app-menu-item>\r\n</app-dropdown-menu> -->\r\n\r\n<!-- \r\n Note: The above usage example is commented out to avoid rendering issues.\r\n It demonstrates how to use the DropdownMenu component with MenuItem components as options.\r\n-->\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n EventEmitter,\r\n OnDestroy,\r\n Output,\r\n Renderer2,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'popout-window',\r\n template: `\r\n <div #innerWrapper style=\"width: 100%; height: 100%; overflow: auto;\">\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n})\r\nexport class PopoutWindowDirective implements OnDestroy {\r\n @ViewChild('innerWrapper') private innerWrapper!: ElementRef;\r\n\r\n @Input() windowWidth: number = 400;\r\n @Input() windowHeight: number = 400;\r\n @Input() windowLeft: number = 200;\r\n @Input() windowTop: number = 200;\r\n @Input() windowTitle: string = 'Popout Window';\r\n @Input() windowStyle: string = '';\r\n @Input() windowStyleUrl: string = '';\r\n @Input() suppressCloneStyles = false;\r\n @Input() get isPoppedOut(): boolean {\r\n return this.isOut;\r\n }\r\n @Output() closed: EventEmitter<boolean> = new EventEmitter();\r\n @Output() shown: EventEmitter<Window> = new EventEmitter();\r\n\r\n private popoutWindow: Window | null = null;\r\n private isOut = false;\r\n private observer: MutationObserver | undefined;\r\n\r\n @HostListener('window:beforeunload')\r\n public beforeunloadHandler(): void {\r\n this.close();\r\n }\r\n\r\n constructor(\r\n private renderer2: Renderer2,\r\n private elementRef: ElementRef,\r\n ) {}\r\n\r\n ngOnDestroy(): void {\r\n this.observer?.disconnect();\r\n this.close();\r\n }\r\n\r\n private close(): void {\r\n if (this.popoutWindow) {\r\n this.popoutWindow.close();\r\n this.popoutWindow = null;\r\n this.isOut = false;\r\n this.closed.next(true);\r\n }\r\n }\r\n\r\n public popIn(): void {\r\n if (this.elementRef.nativeElement && this.innerWrapper.nativeElement) {\r\n this.renderer2.appendChild(this.elementRef.nativeElement, this.innerWrapper.nativeElement);\r\n this.close();\r\n }\r\n }\r\n\r\n public popOut(): void {\r\n if (!this.popoutWindow) {\r\n const elmRect = this.innerWrapper.nativeElement.getBoundingClientRect();\r\n\r\n const navHeight = window.outerHeight - window.innerHeight;\r\n const navWidth = window.outerWidth - window.innerWidth;\r\n\r\n const winLeft = this.windowLeft || window.screenX + navWidth + elmRect.left;\r\n const winTop = this.windowTop || window.screenY + navHeight + elmRect.top - 60;\r\n\r\n this.popoutWindow = window.open(\r\n '',\r\n `popoutWindow${Date.now()}`,\r\n `width=${this.windowWidth > 99 ? this.windowWidth : elmRect.width},\r\n height=${this.windowHeight > 99 ? this.windowHeight : elmRect.height + 1},\r\n left=${winLeft},\r\n top=${winTop}`,\r\n );\r\n\r\n if (!this.popoutWindow) {\r\n console.error('Popup blocked or failed to open');\r\n return;\r\n }\r\n\r\n this.popoutWindow.document.title = this.windowTitle\r\n ? this.windowTitle\r\n : window.document.title;\r\n this.popoutWindow.document.body.style.margin = '0';\r\n\r\n if (!this.suppressCloneStyles) {\r\n document.head.querySelectorAll('style').forEach((node) => {\r\n this.popoutWindow?.document.head.appendChild(node.cloneNode(true));\r\n });\r\n\r\n this.observeStyleChanges();\r\n\r\n document.head.querySelectorAll('link[rel=\"stylesheet\"]').forEach((node) => {\r\n this.popoutWindow?.document.head.insertAdjacentHTML(\r\n 'beforeend',\r\n `<link rel=\"stylesheet\" type=\"${(node as HTMLLinkElement).type}\" href=\"${(node as HTMLLinkElement).href}\">`,\r\n );\r\n });\r\n\r\n // Safe check for document.fonts\r\n const doc: any = document;\r\n const targetDoc: any = this.popoutWindow.document;\r\n if (doc.fonts && targetDoc.fonts) {\r\n doc.fonts.forEach((node: any) => {\r\n targetDoc.fonts.add(node);\r\n });\r\n }\r\n }\r\n\r\n if (this.windowStyleUrl) {\r\n this.popoutWindow.document.head.insertAdjacentHTML(\r\n 'beforeend',\r\n `<link rel=\"stylesheet\" type=\"text/css\" href=\"${window.location.origin}/${this.windowStyleUrl}\">`,\r\n );\r\n }\r\n\r\n if (this.windowStyle) {\r\n this.popoutWindow.document.head.insertAdjacentHTML(\r\n 'beforeend',\r\n `<style>${this.windowStyle}</style>`,\r\n );\r\n }\r\n\r\n this.renderer2.appendChild(this.popoutWindow.document.body, this.innerWrapper.nativeElement);\r\n this.isOut = true;\r\n this.shown.emit(this.popoutWindow);\r\n\r\n this.popoutWindow.addEventListener('unload', () => {\r\n this.popIn();\r\n });\r\n } else {\r\n this.popoutWindow.focus();\r\n }\r\n }\r\n\r\n private observeStyleChanges(): void {\r\n const docHead = document.querySelector('head');\r\n if (!docHead) return;\r\n\r\n this.observer?.disconnect();\r\n this.observer = new MutationObserver((mutations: MutationRecord[]) => {\r\n mutations.forEach((mutation: MutationRecord) => {\r\n mutation.addedNodes.forEach((node: Node) => {\r\n if (node.nodeName === 'STYLE' && this.popoutWindow) {\r\n this.popoutWindow.document.head.appendChild(node.cloneNode(true));\r\n }\r\n });\r\n });\r\n });\r\n\r\n this.observer.observe(docHead, { childList: true });\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output, TrackByFunction } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { Chips } from '../../shared/chips/chips.component';\r\nimport { MessageListComponent } from '../message-list/message-list.component';\r\nimport { MessageInputComponent } from '../message-input/message-input.component';\r\nimport { SnackBar } from '../../shared/snackbar/snackbar.component';\r\nimport { DraggableDialogDirective } from '../../directives/draggable/draggable-dialog.directive';\r\nimport { ResizableDialogDirective } from '../../directives/resizable/resizable-dialog.directive';\r\nimport { Message } from '../../model/message';\r\nimport { ChatSession } from '../../model/chat-session.model';\r\nimport { ThemeService } from '../../core/services/theme.service';\r\nimport { inject } from '@angular/core';\r\n\r\nimport { ChatHistorySidebarComponent } from '../chat-history-sidebar/chat-history-sidebar.component';\r\nimport { DropdownMenu } from '../../shared/dropdown-menu/dropdown-menu.component';\r\nimport { MenuItem } from '../../shared/menu-item/menu-item.component';\r\nimport { PopoutWindowDirective } from '../../directives/popout/popout.directive';\r\nimport { DoohbotThemeConfig } from '../../model/theme-config.model';\r\n\r\n@Component({\r\n selector: 'app-chat-window',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n Chips,\r\n MessageListComponent,\r\n MessageInputComponent,\r\n SnackBar,\r\n DraggableDialogDirective,\r\n ResizableDialogDirective,\r\n ChatHistorySidebarComponent,\r\n DropdownMenu,\r\n MenuItem,\r\n PopoutWindowDirective,\r\n ],\r\n templateUrl: './chat-window.component.html',\r\n styleUrls: ['./chat-window.component.scss'],\r\n})\r\nexport class ChatWindowComponent {\r\n @Input() isChatOpen: boolean = false;\r\n @Input() enableDrag: boolean = false;\r\n @Input() enableResize: boolean = false;\r\n @Input() isFullScreen: boolean = false;\r\n @Input() isAuthenticated: boolean = false;\r\n @Input() appTitle: string = '';\r\n @Input() appLogoUrl: string = '';\r\n @Input() appTextLogoUrl: string = '';\r\n @Input() appHeaderLogoUrl: string = '';\r\n @Input() moreIcon: string = 'more_vert';\r\n @Input() minimizeIcon: string = 'minimize';\r\n @Input() messages: Message[] = [];\r\n @Input() isBotTyping: boolean = false;\r\n @Input() appSubtitle: string = '';\r\n @Input() welcomeDesc: string = '';\r\n @Input() predefinedMessages: string[] = [];\r\n @Input() botAvatarUrl: string = '';\r\n @Input() userAvatarUrl: string = '';\r\n @Input() userName: string = '';\r\n @Input() trackByMessageId: TrackByFunction<Message> = (index, item) => item.id ?? index;\r\n @Input() hintText: string = '';\r\n @Input() sendIcon: string = '';\r\n @Input() messageError: string | null = null;\r\n @Input() showSuggestionChips: boolean = false;\r\n @Input() isHistorySidebarOpen: boolean = false;\r\n @Input() chatSessions: ChatSession[] = [];\r\n @Input() chatHistoryUserName: string = 'User';\r\n @Input() isGuestUser: boolean = false;\r\n @Input() themeConfig: DoohbotThemeConfig | undefined;\r\n\r\n @Output() toggleChat = new EventEmitter<void>();\r\n @Output() toggleFullScreen = new EventEmitter<void>();\r\n @Output() toggleHistorySidebar = new EventEmitter<void>();\r\n @Output() openSettings = new EventEmitter<void>();\r\n @Output() suggestionClick = new EventEmitter<string>();\r\n @Output() send = new EventEmitter<string>();\r\n @Output() clearMessageError = new EventEmitter<void>();\r\n @Output() clearChat = new EventEmitter<void>();\r\n @Output() sessionSelected = new EventEmitter<ChatSession>();\r\n @Output() sessionDeleted = new EventEmitter<string>();\r\n\r\n public themeService = inject(ThemeService);\r\n\r\n onToggleChat() {\r\n this.toggleChat.emit();\r\n }\r\n\r\n onToggleHistorySidebar() {\r\n console.log('History button clicked!');\r\n this.toggleHistorySidebar.emit();\r\n }\r\n\r\n onToggleFullScreen() {\r\n this.toggleFullScreen.emit();\r\n }\r\n\r\n onOpenSettings() {\r\n this.openSettings.emit();\r\n }\r\n\r\n onSuggestionClick(text: string) {\r\n this.suggestionClick.emit(text);\r\n }\r\n\r\n onSend(text: string) {\r\n this.send.emit(text);\r\n }\r\n\r\n onClearMessageError() {\r\n this.clearMessageError.emit();\r\n }\r\n\r\n onClearChat() {\r\n this.clearChat.emit();\r\n }\r\n\r\n onSessionSelected(session: ChatSession) {\r\n this.sessionSelected.emit(session);\r\n }\r\n\r\n onSessionDeleted(sessionId: string) {\r\n this.sessionDeleted.emit(sessionId);\r\n }\r\n\r\n onPopoutShown(win: Window) {\r\n // Apply theme classes\r\n const activeTheme = this.themeService.activeTheme();\r\n console.log('Popout shown, applying theme:', activeTheme);\r\n\r\n const body = win.document.body;\r\n // We cannot use renderer easily on another document without custom renderer factory,\r\n // but native DOM manipulation is fine here since it's a separate window object.\r\n body.classList.remove('light-theme', 'dark-theme');\r\n body.classList.add(activeTheme);\r\n\r\n // Apply CSS variables\r\n this.themeService.applyCssVariables(body, this.themeConfig);\r\n }\r\n}\r\n","<div\r\n *ngIf=\"isChatOpen\"\r\n draggableDialog\r\n [enableDrag]=\"enableDrag\"\r\n [dragHandle]=\"'.chat-header'\"\r\n resizableDialog\r\n [enableResize]=\"enableResize\"\r\n class=\"chat-window\"\r\n [class.fullscreen]=\"isFullScreen\"\r\n>\r\n <!-- chat window -->\r\n <div class=\"chat-header\">\r\n <div class=\"chat-title\">\r\n <img\r\n class=\"chat-logo\"\r\n style=\"width: 150px; height: 50px; margin-left: 0px\"\r\n [src]=\"appHeaderLogoUrl\"\r\n alt=\"Text-Logo\"\r\n />\r\n </div>\r\n\r\n <div class=\"chat-header-buttons\">\r\n <!-- New Chat Button -->\r\n <!-- <button class=\"header-button\" (click)=\"createNewChat()\">\r\n <mat-icon>add</mat-icon>\r\n </button> -->\r\n\r\n <!-- <app-dropdown-menu>\r\n <span trigger>☰</span>\r\n\r\n <app-menu-item (selected)=\"onToggleFullScreen()\"> My Profile </app-menu-item>\r\n\r\n <app-menu-item> Settings </app-menu-item>\r\n\r\n <app-menu-item> Logout </app-menu-item>\r\n </app-dropdown-menu> -->\r\n\r\n <!-- History Button -->\r\n <button\r\n class=\"header-button\"\r\n *ngIf=\"isAuthenticated\"\r\n (click)=\"onToggleHistorySidebar()\"\r\n title=\"Chat History\"\r\n >\r\n <mat-icon>history</mat-icon>\r\n </button>\r\n\r\n <!-- settings Button -->\r\n <button class=\"header-button\" [matMenuTriggerFor]=\"settingsMenu\">\r\n <mat-icon>{{ moreIcon }}</mat-icon>\r\n </button>\r\n\r\n <!-- minimize Button -->\r\n <button class=\"header-button\" (click)=\"onToggleChat()\">\r\n <mat-icon>{{ minimizeIcon }}</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area: Toggle between Messages and History -->\r\n <!-- <popout-window\r\n #popout\r\n [windowTitle]=\"appTitle || 'Chat'\"\r\n [windowWidth]=\"400\"\r\n [windowHeight]=\"620\"\r\n (shown)=\"onPopoutShown($event)\"\r\n > -->\r\n <div class=\"chat-content-wrapper\">\r\n <!-- Chat History View -->\r\n <app-chat-history-sidebar\r\n [sessions]=\"chatSessions\"\r\n [isOpen]=\"isHistorySidebarOpen\"\r\n [userName]=\"chatHistoryUserName\"\r\n (sessionSelected)=\"onSessionSelected($event)\"\r\n (sessionDeleted)=\"onSessionDeleted($event)\"\r\n (closed)=\"onToggleHistorySidebar()\"\r\n >\r\n </app-chat-history-sidebar>\r\n\r\n <!-- Messages View -->\r\n <div class=\"messages-view\" [class.hidden]=\"isHistorySidebarOpen\">\r\n <!-- Messages / Welcome Screen -->\r\n <app-message-list\r\n [messages]=\"messages\"\r\n [isBotTyping]=\"isBotTyping\"\r\n [appLogoUrl]=\"appLogoUrl\"\r\n [appSubtitle]=\"appSubtitle\"\r\n [welcomeDesc]=\"welcomeDesc\"\r\n [predefinedMessages]=\"predefinedMessages\"\r\n [botAvatarUrl]=\"botAvatarUrl\"\r\n [userAvatarUrl]=\"userAvatarUrl\"\r\n [userName]=\"userName\"\r\n [trackByMessageId]=\"trackByMessageId\"\r\n [isAuthenticated]=\"isAuthenticated\"\r\n (suggestionClick)=\"onSuggestionClick($event)\"\r\n ></app-message-list>\r\n\r\n <!-- SUGGESTED CHIPS: Show only if last bot message was fallback AND user is authenticated -->\r\n <app-chips\r\n *ngIf=\"showSuggestionChips && isAuthenticated\"\r\n [messages]=\"predefinedMessages\"\r\n [disabled]=\"isBotTyping\"\r\n (chipClick)=\"onSuggestionClick($event)\"\r\n ></app-chips>\r\n\r\n <!-- Inline error message -->\r\n <app-snackbar\r\n *ngIf=\"messageError\"\r\n [message]=\"messageError\"\r\n [show]=\"!messageError\"\r\n (closed)=\"onClearMessageError()\"\r\n ></app-snackbar>\r\n\r\n <!-- Chat Input: Only show when authenticated -->\r\n <app-message-input\r\n *ngIf=\"isAuthenticated\"\r\n [isBotTyping]=\"isBotTyping\"\r\n [hintText]=\"hintText\"\r\n [sendIcon]=\"sendIcon\"\r\n (send)=\"onSend($event)\"\r\n ></app-message-input>\r\n\r\n <!-- footer -->\r\n <div class=\"terms-conditions\">\r\n <a href=\"#\">Terms and Conditions</a>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- </popout-window> -->\r\n</div>\r\n\r\n<mat-menu #settingsMenu=\"matMenu\">\r\n <!-- Change Theme -->\r\n <div class=\"theme-selector\">\r\n <!-- Auto Theme (inherits from parent app) -->\r\n <button\r\n mat-icon-button\r\n class=\"theme-btn\"\r\n [class.selected]=\"themeService.theme() === 'auto'\"\r\n (click)=\"themeService.setTheme('auto')\"\r\n >\r\n <mat-icon>brightness_auto</mat-icon>\r\n </button>\r\n\r\n <!-- Light Theme -->\r\n <button\r\n mat-icon-button\r\n class=\"theme-btn\"\r\n [class.selected]=\"themeService.theme() === 'light'\"\r\n (click)=\"themeService.setTheme('light')\"\r\n >\r\n <mat-icon>light_mode</mat-icon>\r\n </button>\r\n\r\n <!-- Dark Theme -->\r\n <button\r\n mat-icon-button\r\n class=\"theme-btn\"\r\n [class.selected]=\"themeService.theme() === 'dark'\"\r\n (click)=\"themeService.setTheme('dark')\"\r\n >\r\n <mat-icon>dark_mode</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <!-- Popout Button -->\r\n <!-- <button mat-menu-item (click)=\"popout.popOut()\" style=\"display: flex; align-items: center\">\r\n <mat-icon>open_in_new</mat-icon>\r\n <span>Popout Widget</span>\r\n </button> -->\r\n\r\n <!-- Full-Screen Button -->\r\n <button mat-menu-item (click)=\"onToggleFullScreen()\" style=\"display: flex; align-items: center\">\r\n <mat-icon>{{ isFullScreen ? 'fullscreen_exit' : 'fullscreen' }}</mat-icon>\r\n <span> {{ isFullScreen ? 'Minimize' : 'Expand' }}</span>\r\n </button>\r\n\r\n <!-- Clear Chat -->\r\n <button mat-menu-item (click)=\"onClearChat()\" style=\"display: flex; align-items: center\">\r\n <mat-icon>clear_all</mat-icon>\r\n <span>Clear Chat</span>\r\n </button>\r\n</mat-menu>\r\n","import { Directive, ElementRef, Input, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appFullscreen]',\r\n standalone: true,\r\n})\r\nexport class FullscreenDirective {\r\n private isFullScreen = false;\r\n private preFullscreenState: {\r\n width: string;\r\n height: string;\r\n left: string;\r\n top: string;\r\n } | null = null;\r\n\r\n @Input() fullscreenTarget: string = '.chat-window';\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2,\r\n ) {}\r\n\r\n public toggle(): void {\r\n const targetEl = this.el.nativeElement.querySelector(this.fullscreenTarget);\r\n if (!targetEl) return;\r\n\r\n if (!this.isFullScreen) {\r\n this.preFullscreenState = {\r\n width: targetEl.style.width,\r\n height: targetEl.style.height,\r\n left: targetEl.style.left,\r\n top: targetEl.style.top,\r\n };\r\n\r\n targetEl.style.width = '';\r\n targetEl.style.height = '';\r\n targetEl.style.left = '';\r\n targetEl.style.top = '';\r\n targetEl.style.transform = '';\r\n\r\n this.isFullScreen = true;\r\n } else {\r\n this.isFullScreen = false;\r\n\r\n if (this.preFullscreenState) {\r\n targetEl.style.width = this.preFullscreenState.width || '400px';\r\n targetEl.style.height = this.preFullscreenState.height || '500px';\r\n targetEl.style.left = this.preFullscreenState.left || 'auto';\r\n targetEl.style.top = this.preFullscreenState.top || 'auto';\r\n targetEl.style.transform = 'none';\r\n }\r\n }\r\n }\r\n\r\n public getFullscreenState(): boolean {\r\n return this.isFullScreen;\r\n }\r\n}\r\n","// export const environment = {\r\n// staging: false,\r\n// development: false,\r\n// production: true,\r\n// chatApiUrl: 'https://api.production.com',\r\n// apiKey: '',\r\n// };\r\nexport const environment = {\r\n config: 'const/app-const.json',\r\n production: false,\r\n apiBaseUrl: '',\r\n loginEndpoint: '',\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { environment } from './environments/environment';\r\nimport { environment as environmentprod } from './environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AppConst {\r\n static data: any;\r\n\r\n constructor() {}\r\n\r\n async load(): Promise<any> {\r\n const filePath = `../assets/${environment.production ? environmentprod.config : environment.config}?t=${new Date().getTime()}`;\r\n const response = await fetch(filePath);\r\n\r\n if (response.ok) {\r\n try {\r\n AppConst.data = await response.json();\r\n // Override apiBaseUrl if present in environment\r\n // if (environment.apiBaseUrl) {\r\n // AppConst.data.apiBaseUrl = environment.apiBaseUrl;\r\n // }\r\n // // Override loginEndpoint if present in environment\r\n // if (environment.loginEndpoint) {\r\n // AppConst.data.loginEndpoint = environment.loginEndpoint;\r\n // }\r\n } catch (error: any) {\r\n console.error('============================ ERROR ============================');\r\n console.error(`Could not find file ${filePath}.\\nMESSAGE: ${error.message}`);\r\n console.error('============================ ERROR ============================');\r\n }\r\n\r\n if (AppConst.data && !Object.keys(AppConst.data).length) {\r\n console.error('============================ ERROR ============================');\r\n console.error(`No data found in file ${filePath}`);\r\n console.error('============================ ERROR ============================');\r\n }\r\n } else {\r\n console.error('============================ ERROR ============================');\r\n console.error(\r\n `Failed to load file ${filePath}.\\nMESSAGE: Request failed with ${response.status} / ${response.statusText}`,\r\n );\r\n console.error('============================ ERROR ============================');\r\n }\r\n }\r\n}\r\n","import { ChatIntent } from './message';\r\n\r\nexport const CHAT_INTENTS: ChatIntent[] = [\r\n {\r\n patterns: ['hello', 'hi', 'hey', 'greetings', 'good morning', 'good afternoon', 'good evening'],\r\n response: '👋Hello! How can I help you today?',\r\n },\r\n {\r\n patterns: ['how are you', 'how are you doing'],\r\n response: \"I'm just a bot, but I'm doing great! How about you?\",\r\n },\r\n {\r\n patterns: ['help', 'support', 'problem', 'about', 'issue', 'question', 'assist', 'Contact'],\r\n response: 'Sure! Please tell me your issue, and I will try to assist you.',\r\n },\r\n {\r\n patterns: ['bye', 'goodbye', 'see you', 'thanks', 'thank you', 'bye bye', 'see you later'],\r\n response: 'Goodbye! Have a nice day!',\r\n },\r\n {\r\n patterns: ['news and updates', 'updates', 'news', 'new'],\r\n response: 'Stay tuned for the latest news and updates from our team!',\r\n },\r\n];\r\n","import { InjectionToken } from '@angular/core';\r\nimport { environment } from '../core/environments/environment.prod';\r\n\r\n/**\r\n * Configuration for Doohbot API integration\r\n */\r\nexport interface DoohbotApiConfig {\r\n /**\r\n * Backend API endpoint URL\r\n * Example: 'https://api.example.com/chat'\r\n */\r\n apiUrl: string;\r\n\r\n /**\r\n * Optional API key for authentication\r\n */\r\n apiKey?: string;\r\n\r\n /**\r\n * Request timeout in milliseconds\r\n * @default 30000 (30 seconds)\r\n */\r\n timeout?: number;\r\n\r\n /**\r\n * Enable API mode (true) or use local intent matching (false)\r\n * @default false\r\n */\r\n enableApi?: boolean;\r\n\r\n /**\r\n * Include message history in API requests\r\n * @default false\r\n */\r\n includeHistory?: boolean;\r\n\r\n /**\r\n * Maximum number of history messages to include in requests\r\n * @default 10\r\n */\r\n maxHistoryMessages?: number;\r\n\r\n /**\r\n * Custom headers to include in API requests\r\n */\r\n customHeaders?: Record<string, string>;\r\n\r\n /**\r\n * Enable retry on failure\r\n * @default true\r\n */\r\n enableRetry?: boolean;\r\n\r\n /**\r\n * Number of retry attempts\r\n * @default 2\r\n */\r\n retryAttempts?: number;\r\n\r\n /**\r\n * Delay between retries in milliseconds\r\n * @default 1000\r\n */\r\n retryDelay?: number;\r\n}\r\n\r\n/**\r\n * Injection token for providing Doohbot API configuration\r\n */\r\nexport const DOOHBOT_API_CONFIG = new InjectionToken<DoohbotApiConfig>('DOOHBOT_API_CONFIG', {\r\n providedIn: 'root',\r\n factory: () => ({\r\n apiUrl: '',\r\n timeout: 30000,\r\n enableApi: false,\r\n includeHistory: false,\r\n maxHistoryMessages: 10,\r\n enableRetry: true,\r\n retryAttempts: 2,\r\n retryDelay: 1000,\r\n }),\r\n});\r\n","import { Injectable, signal, computed, effect } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { ChatContext } from '../../model/chat-context.model';\r\n\r\nexport interface ContextChangeEvent {\r\n previous: ChatContext | null;\r\n current: ChatContext;\r\n contextKey: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class TenantContextService {\r\n // Current context state\r\n private platformTenant = signal<string>('');\r\n private subTenant = signal<string>('');\r\n private agent = signal<string>('');\r\n\r\n // Computed context object\r\n public currentContext = computed<ChatContext>(() => ({\r\n platformTenant: this.platformTenant(),\r\n subTenant: this.subTenant(),\r\n agent: this.agent(),\r\n }));\r\n\r\n // Computed unique context key for storage\r\n public contextKey = computed<string>(() => {\r\n const pt = this.platformTenant() || 'default';\r\n const st = this.subTenant() || 'default';\r\n const ag = this.agent() || 'default';\r\n return `${pt}_${st}_${ag}`;\r\n });\r\n\r\n // Observable for context changes\r\n private contextChangeSubject = new Subject<ContextChangeEvent>();\r\n public contextChange$ = this.contextChangeSubject.asObservable();\r\n\r\n private previousContext: ChatContext | null = null;\r\n\r\n constructor() {\r\n // Effect to emit context changes\r\n effect(() => {\r\n const current = this.currentContext();\r\n const key = this.contextKey();\r\n\r\n // Only emit if context actually changed\r\n if (this.hasContextChanged(current)) {\r\n this.contextChangeSubject.next({\r\n previous: this.previousContext,\r\n current: current,\r\n contextKey: key,\r\n });\r\n this.previousContext = { ...current };\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the complete context\r\n */\r\n public setContext(context: Partial<ChatContext>): void {\r\n if (context.platformTenant !== undefined) {\r\n this.platformTenant.set(context.platformTenant);\r\n }\r\n if (context.subTenant !== undefined) {\r\n this.subTenant.set(context.subTenant);\r\n }\r\n if (context.agent !== undefined) {\r\n this.agent.set(context.agent);\r\n }\r\n }\r\n\r\n /**\r\n * Update individual context properties\r\n */\r\n public setPlatformTenant(platformTenant: string): void {\r\n this.platformTenant.set(platformTenant);\r\n }\r\n\r\n public setSubTenant(subTenant: string): void {\r\n this.subTenant.set(subTenant);\r\n }\r\n\r\n public setAgent(agent: string): void {\r\n this.agent.set(agent);\r\n }\r\n\r\n /**\r\n * Get current context values\r\n */\r\n public getPlatformTenant(): string {\r\n return this.platformTenant();\r\n }\r\n\r\n public getSubTenant(): string {\r\n return this.subTenant();\r\n }\r\n\r\n public getAgent(): string {\r\n return this.agent();\r\n }\r\n\r\n public getContextKey(): string {\r\n return this.contextKey();\r\n }\r\n\r\n public getContext(): ChatContext {\r\n return this.currentContext();\r\n }\r\n\r\n /**\r\n * Check if context has changed\r\n */\r\n private hasContextChanged(current: ChatContext): boolean {\r\n if (!this.previousContext) {\r\n // First time initialization - only emit if we have valid values\r\n return current.platformTenant !== '' || current.subTenant !== '' || current.agent !== '';\r\n }\r\n\r\n return (\r\n this.previousContext.platformTenant !== current.platformTenant ||\r\n this.previousContext.subTenant !== current.subTenant ||\r\n this.previousContext.agent !== current.agent\r\n );\r\n }\r\n\r\n /**\r\n * Reset context to default\r\n */\r\n public resetContext(): void {\r\n this.platformTenant.set('');\r\n this.subTenant.set('');\r\n this.agent.set('');\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, throwError, timer } from 'rxjs';\r\nimport { catchError, retry, timeout, map } from 'rxjs/operators';\r\nimport { DOOHBOT_API_CONFIG, DoohbotApiConfig } from '../../model/api-config.model';\r\nimport { ChatApiRequest, ChatApiResponse, ChatApiError } from '../../model/api-request.model';\r\nimport { Message } from '../../model/message';\r\nimport { TenantContextService } from './tenant-context.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChatbotApiService {\r\n private http = inject(HttpClient);\r\n private tenantContext = inject(TenantContextService);\r\n private config = inject(DOOHBOT_API_CONFIG);\r\n\r\n /**\r\n * Send a chat message to the API\r\n * @param message User's message text\r\n * @param history Optional message history for context\r\n * @returns Observable of the API response\r\n */\r\n sendMessage(message: string, history?: Message[]): Observable<ChatApiResponse> {\r\n if (!this.config.apiUrl) {\r\n return throwError(\r\n () =>\r\n ({\r\n message: 'API URL not configured',\r\n code: 'CONFIG_ERROR',\r\n }) as ChatApiError,\r\n );\r\n }\r\n\r\n // Build request payload with tenant context\r\n const request = this.buildRequest(message, history);\r\n\r\n // Build headers\r\n const headers = this.buildHeaders();\r\n\r\n // Configure timeout\r\n const timeoutMs = this.config.timeout || 30000;\r\n\r\n // Make HTTP request\r\n return this.http.post<ChatApiResponse>(this.config.apiUrl, request, { headers }).pipe(\r\n timeout(timeoutMs),\r\n this.applyRetryStrategy(),\r\n map((response) => this.validateResponse(response)),\r\n catchError((error) => this.handleError(error)),\r\n );\r\n }\r\n\r\n /**\r\n * Build request payload with current tenant context\r\n */\r\n private buildRequest(message: string, history?: Message[]): ChatApiRequest {\r\n const context = this.tenantContext.getContext();\r\n\r\n const request: ChatApiRequest = {\r\n message,\r\n platformTenant: context.platformTenant,\r\n subTenant: context.subTenant,\r\n agent: context.agent,\r\n timestamp: new Date().toISOString(),\r\n };\r\n\r\n // Include history if enabled and provided\r\n if (this.config.includeHistory && history && history.length > 0) {\r\n const maxMessages = this.config.maxHistoryMessages || 10;\r\n request.history = history.slice(-maxMessages);\r\n }\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * Build HTTP headers\r\n */\r\n private buildHeaders(): HttpHeaders {\r\n let headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n });\r\n\r\n // Add API key if provided\r\n if (this.config.apiKey) {\r\n headers = headers.set('Authorization', `Bearer ${this.config.apiKey}`);\r\n }\r\n\r\n // Add custom headers if provided\r\n if (this.config.customHeaders) {\r\n Object.entries(this.config.customHeaders).forEach(([key, value]) => {\r\n headers = headers.set(key, value);\r\n });\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n /**\r\n * Apply retry strategy based on configuration\r\n */\r\n private applyRetryStrategy() {\r\n return (source: Observable<ChatApiResponse>) => {\r\n if (!this.config.enableRetry) {\r\n return source;\r\n }\r\n\r\n const retryAttempts = this.config.retryAttempts || 2;\r\n const retryDelay = this.config.retryDelay || 1000;\r\n\r\n return source.pipe(\r\n retry({\r\n count: retryAttempts,\r\n delay: (error, retryCount) => {\r\n // Only retry on network errors or 5xx server errors\r\n if (this.shouldRetry(error)) {\r\n console.warn(`Retrying API request (attempt ${retryCount}/${retryAttempts})...`);\r\n return timer(retryDelay * retryCount);\r\n }\r\n // Don't retry on client errors (4xx)\r\n return throwError(() => error);\r\n },\r\n }),\r\n );\r\n };\r\n }\r\n\r\n /**\r\n * Determine if error should trigger a retry\r\n */\r\n private shouldRetry(error: any): boolean {\r\n if (error instanceof HttpErrorResponse) {\r\n // Retry on network errors or 5xx server errors\r\n return error.status === 0 || error.status >= 500;\r\n }\r\n // Retry on timeout errors\r\n if (error.name === 'TimeoutError') {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Validate API response\r\n */\r\n private validateResponse(response: ChatApiResponse): ChatApiResponse {\r\n if (!response || !response.reply) {\r\n throw {\r\n message: 'Invalid API response: missing reply field',\r\n code: 'INVALID_RESPONSE',\r\n } as ChatApiError;\r\n }\r\n return response;\r\n }\r\n\r\n /**\r\n * Handle API errors\r\n */\r\n private handleError(error: any): Observable<never> {\r\n let apiError: ChatApiError;\r\n\r\n if (error instanceof HttpErrorResponse) {\r\n // HTTP error\r\n apiError = {\r\n message: error.error?.message || error.message || 'API request failed',\r\n code: error.error?.code || 'HTTP_ERROR',\r\n statusCode: error.status,\r\n details: error.error,\r\n };\r\n } else if (error.name === 'TimeoutError') {\r\n // Timeout error\r\n apiError = {\r\n message: 'Request timeout - please try again',\r\n code: 'TIMEOUT',\r\n statusCode: 408,\r\n };\r\n } else {\r\n // Other errors\r\n apiError = {\r\n message: error.message || 'Unknown error occurred',\r\n code: error.code || 'UNKNOWN_ERROR',\r\n details: error,\r\n };\r\n }\r\n\r\n console.error('Chatbot API Error:', apiError);\r\n return throwError(() => apiError);\r\n }\r\n\r\n /**\r\n * Check if API is enabled\r\n */\r\n isApiEnabled(): boolean {\r\n return this.config.enableApi === true && !!this.config.apiUrl;\r\n }\r\n\r\n /**\r\n * Get current API configuration\r\n */\r\n getConfig(): DoohbotApiConfig {\r\n return { ...this.config };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Message } from '../../model/message';\r\nimport { ChatSession } from '../../model/chat-session.model';\r\nimport { Observable, of } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChatHistoryService {\r\n private readonly STORAGE_PREFIX = 'doohbot_sessions_';\r\n private readonly LEGACY_PREFIX = 'doohbot_history_';\r\n\r\n constructor() {}\r\n\r\n /**\r\n * Create a new chat session\r\n */\r\n createSession(contextKey: string, userId: string): ChatSession {\r\n const session: ChatSession = {\r\n id: this.generateSessionId(),\r\n timestamp: new Date(),\r\n title: 'New Conversation',\r\n messages: [],\r\n contextKey,\r\n userId,\r\n };\r\n return session;\r\n }\r\n\r\n /**\r\n * Check if user is a guest/anonymous user who shouldn't have chat history\r\n */\r\n private isGuestUser(userId: string): boolean {\r\n const guestUserIds = ['anonymous', 'guest', 'default', ''];\r\n return guestUserIds.includes(userId.toLowerCase());\r\n }\r\n\r\n /**\r\n * Save a message to a specific session\r\n */\r\n saveMessageToSession(session: ChatSession, message: Message): Observable<void> {\r\n // Don't save history for guest users\r\n if (this.isGuestUser(session.userId)) {\r\n return of(void 0);\r\n }\r\n\r\n // Update title from first user message if still default\r\n if (session.title === 'New Conversation' && message.sender === 'user') {\r\n session.title = this.generateTitle(message.text);\r\n }\r\n\r\n session.messages.push(message);\r\n return this.saveSession(session);\r\n }\r\n\r\n /**\r\n * Save entire session\r\n */\r\n saveSession(session: ChatSession): Observable<void> {\r\n // Don't save history for guest users\r\n if (this.isGuestUser(session.userId)) {\r\n return of(void 0);\r\n }\r\n\r\n const key = this.getSessionStorageKey(session.contextKey, session.userId);\r\n const sessions = this.loadAllSessionsSync(session.contextKey, session.userId);\r\n\r\n const existingIndex = sessions.findIndex((s) => s.id === session.id);\r\n if (existingIndex >= 0) {\r\n sessions[existingIndex] = session;\r\n } else {\r\n sessions.push(session);\r\n }\r\n\r\n localStorage.setItem(key, JSON.stringify(sessions));\r\n return of(void 0);\r\n }\r\n\r\n /**\r\n * Load all sessions for a context and user\r\n */\r\n loadAllSessions(contextKey: string, userId: string): Observable<ChatSession[]> {\r\n return of(this.loadAllSessionsSync(contextKey, userId));\r\n }\r\n\r\n /**\r\n * Load all sessions synchronously (for internal use)\r\n */\r\n private loadAllSessionsSync(contextKey: string, userId: string): ChatSession[] {\r\n // Don't load history for guest users\r\n if (this.isGuestUser(userId)) {\r\n return [];\r\n }\r\n\r\n const key = this.getSessionStorageKey(contextKey, userId);\r\n const stored = localStorage.getItem(key);\r\n\r\n if (stored) {\r\n try {\r\n const sessions = JSON.parse(stored);\r\n // Restore Date objects\r\n return sessions.map((s: any) => ({\r\n ...s,\r\n timestamp: new Date(s.timestamp),\r\n messages: s.messages.map((m: any) => ({\r\n ...m,\r\n timestamp: m.timestamp ? new Date(m.timestamp) : undefined,\r\n })),\r\n }));\r\n } catch (e) {\r\n console.error('Failed to parse sessions', e);\r\n return [];\r\n }\r\n }\r\n\r\n // Try to migrate from legacy format\r\n return this.migrateLegacyData(contextKey, userId);\r\n }\r\n\r\n /**\r\n * Load a specific session\r\n */\r\n loadSession(\r\n sessionId: string,\r\n contextKey: string,\r\n userId: string,\r\n ): Observable<ChatSession | null> {\r\n const sessions = this.loadAllSessionsSync(contextKey, userId);\r\n const session = sessions.find((s) => s.id === sessionId);\r\n return of(session || null);\r\n }\r\n\r\n /**\r\n * Delete a session\r\n */\r\n deleteSession(sessionId: string, contextKey: string, userId: string): Observable<void> {\r\n const key = this.getSessionStorageKey(contextKey, userId);\r\n const sessions = this.loadAllSessionsSync(contextKey, userId);\r\n const filtered = sessions.filter((s) => s.id !== sessionId);\r\n\r\n localStorage.setItem(key, JSON.stringify(filtered));\r\n return of(void 0);\r\n }\r\n\r\n /**\r\n * Clear all sessions for a context and user\r\n */\r\n clearAllSessions(contextKey: string, userId: string): Observable<void> {\r\n const key = this.getSessionStorageKey(contextKey, userId);\r\n localStorage.removeItem(key);\r\n return of(void 0);\r\n }\r\n\r\n /**\r\n * Generate a unique session ID for a session\r\n */\r\n private generateSessionId(): string {\r\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\r\n return `session_${crypto.randomUUID()}`;\r\n }\r\n // Fallback\r\n return `session_${Date.now()}_${this.generateRandomString(16)}`;\r\n }\r\n\r\n private generateRandomString(length: number): string {\r\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n let result = '';\r\n const randomArray = new Uint8Array(length);\r\n crypto.getRandomValues(randomArray);\r\n for (let i = 0; i < length; i++) {\r\n result += chars[randomArray[i] % chars.length];\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Generate a title from the first message\r\n */\r\n private generateTitle(text: string): string {\r\n const maxLength = 30;\r\n if (text.length <= maxLength) {\r\n return text;\r\n }\r\n return text.substring(0, maxLength) + '...';\r\n }\r\n\r\n /**\r\n * Get storage key for sessions\r\n */\r\n private getSessionStorageKey(contextKey: string, userId: string): string {\r\n return `${this.STORAGE_PREFIX}${contextKey}_${userId}`;\r\n }\r\n\r\n /**\r\n * Migrate legacy flat message history to session format\r\n */\r\n private migrateLegacyData(contextKey: string, userId: string): ChatSession[] {\r\n const legacyKey = `${this.LEGACY_PREFIX}${contextKey}_${userId}`;\r\n const stored = localStorage.getItem(legacyKey);\r\n\r\n if (!stored) {\r\n return [];\r\n }\r\n\r\n try {\r\n const messages = JSON.parse(stored);\r\n if (messages.length === 0) {\r\n return [];\r\n }\r\n\r\n // Create a single session from legacy messages\r\n const session: ChatSession = {\r\n id: this.generateSessionId(),\r\n timestamp: messages[0].timestamp ? new Date(messages[0].timestamp) : new Date(),\r\n title: 'Migrated Conversation',\r\n messages: messages.map((m: any) => ({\r\n ...m,\r\n timestamp: m.timestamp ? new Date(m.timestamp) : undefined,\r\n })),\r\n contextKey,\r\n userId,\r\n };\r\n\r\n // Save as new format\r\n this.saveSession(session).subscribe();\r\n\r\n // Remove legacy data\r\n localStorage.removeItem(legacyKey);\r\n\r\n return [session];\r\n } catch (e) {\r\n console.error('Failed to migrate legacy data', e);\r\n return [];\r\n }\r\n }\r\n}\r\n","import { Injectable, signal, inject } from '@angular/core';\r\nimport { Message } from '../../model/message';\r\nimport { ChatSession } from '../../model/chat-session.model';\r\nimport { CHAT_INTENTS } from '../../model/doohbot.intents';\r\nimport { ChatApiError } from '../../model/api-request.model';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ChatbotApiService } from '../../core/services/doohbot-api.service';\r\nimport { UserContext } from '../../core/models/user-context.model';\r\nimport { ChatHistoryService } from '../../core/services/chat-history.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class MessageService {\r\n // Context-aware message storage\r\n private currentContextKey = signal<string>('default');\r\n\r\n // Public messages signal for current context\r\n public messages = signal<Message[]>([]);\r\n public audioUnlocked = false;\r\n\r\n // Active session\r\n private activeSession: ChatSession | null = null;\r\n\r\n // API service (optional)\r\n private apiService = inject(ChatbotApiService, { optional: true });\r\n private chatHistoryService = inject(ChatHistoryService);\r\n\r\n // User context for backend proxy mode\r\n private userContext?: UserContext;\r\n\r\n // API state signals\r\n public isLoadingApi = signal<boolean>(false);\r\n public apiError = signal<ChatApiError | null>(null);\r\n public isBotTyping = signal<boolean>(false);\r\n\r\n constructor() {\r\n // Start with empty messages - no auto-load\r\n }\r\n\r\n /**\r\n * Switch to a new context\r\n */\r\n public switchContext(contextKey: string): void {\r\n this.currentContextKey.set(contextKey);\r\n // Start fresh - don't auto-load\r\n this.startNewSession();\r\n }\r\n\r\n /**\r\n * Start a new chat session\r\n */\r\n public startNewSession(): void {\r\n const contextKey = this.currentContextKey();\r\n const userId = this.userContext?.userId || 'anonymous';\r\n\r\n this.activeSession = this.chatHistoryService.createSession(contextKey, userId);\r\n this.messages.set([]);\r\n }\r\n\r\n /**\r\n * Load an existing session\r\n */\r\n public loadSession(session: ChatSession): void {\r\n this.activeSession = session;\r\n this.messages.set([...session.messages]);\r\n }\r\n\r\n /**\r\n * Get current context key\r\n */\r\n public getCurrentContextKey(): string {\r\n return this.currentContextKey();\r\n }\r\n\r\n /**\r\n * Set user context for backend proxy mode\r\n */\r\n public setUserContext(context: UserContext): void {\r\n this.userContext = context;\r\n // Start fresh when user changes - don't auto-load\r\n this.startNewSession();\r\n }\r\n\r\n /**\r\n * Get current user context\r\n */\r\n public getUserContext(): UserContext | undefined {\r\n return this.userContext;\r\n }\r\n\r\n /**\r\n * Get active session\r\n */\r\n public getActiveSession(): ChatSession | null {\r\n return this.activeSession;\r\n }\r\n\r\n /**\r\n * Clear messages for current session and start new one\r\n */\r\n clearMessages(): void {\r\n this.messages.set([]);\r\n this.startNewSession();\r\n }\r\n\r\n /**\r\n * Add message to current session\r\n */\r\n public addMessage(message: Message): void {\r\n const newMessage = { ...message, timestamp: new Date() };\r\n\r\n // Update current messages signal\r\n this.messages.update((msgs) => [...msgs, newMessage]);\r\n\r\n // Save to active session\r\n if (this.activeSession) {\r\n console.log('Saving message to session:', this.activeSession.id);\r\n this.chatHistoryService.saveMessageToSession(this.activeSession, newMessage).subscribe(() => {\r\n console.log('Message saved, session title:', this.activeSession?.title);\r\n });\r\n } else {\r\n console.warn('No active session to save message to!');\r\n }\r\n\r\n if (message.sender === 'bot') {\r\n this.playBotSound();\r\n }\r\n }\r\n\r\n /**\r\n * Get bot reply - supports both API and local modes\r\n */\r\n async getBotReply(userText: string): Promise<string> {\r\n // Check if API mode is enabled\r\n if (this.apiService?.isApiEnabled()) {\r\n return this.getBotReplyFromApi(userText);\r\n }\r\n // Fall back to local intent matching\r\n return this.getBotReplyLocal(userText);\r\n }\r\n\r\n /**\r\n * Get bot reply from API\r\n */\r\n private async getBotReplyFromApi(userText: string): Promise<string> {\r\n if (!this.apiService) {\r\n return this.getFallbackReply();\r\n }\r\n\r\n try {\r\n this.isLoadingApi.set(true);\r\n this.apiError.set(null);\r\n\r\n // Get message history if API config includes history\r\n const history = this.apiService.getConfig().includeHistory ? this.messages() : undefined;\r\n\r\n // Call API\r\n const response = await firstValueFrom(this.apiService.sendMessage(userText, history));\r\n\r\n this.isLoadingApi.set(false);\r\n return response.reply;\r\n } catch (error) {\r\n this.isLoadingApi.set(false);\r\n const apiError = error as ChatApiError;\r\n this.apiError.set(apiError);\r\n console.error('API error, falling back to local mode:', apiError);\r\n\r\n // Fallback to local mode on API error\r\n return this.getBotReplyLocal(userText);\r\n }\r\n }\r\n\r\n /**\r\n * Get bot reply using local intent matching\r\n */\r\n private getBotReplyLocal(userText: string): string {\r\n const text = userText.toLowerCase();\r\n for (const intent of CHAT_INTENTS) {\r\n if (intent.patterns.some((pattern) => text.includes(pattern))) {\r\n return intent.response;\r\n }\r\n }\r\n return this.getFallbackReply();\r\n }\r\n\r\n /**\r\n * Process a user message: add it, get bot reply, and add bot reply\r\n */\r\n public async processUserMessage(text: string): Promise<void> {\r\n this.addMessage({\r\n sender: 'user',\r\n text: text,\r\n id: Date.now().toString(),\r\n timestamp: new Date(),\r\n });\r\n\r\n this.isBotTyping.set(true);\r\n\r\n const minDelay = 1000;\r\n const start = Date.now();\r\n\r\n try {\r\n const botReply = await this.getBotReply(text);\r\n\r\n // Ensure minimum delay\r\n const elapsed = Date.now() - start;\r\n if (elapsed < minDelay) {\r\n await new Promise((resolve) => setTimeout(resolve, minDelay - elapsed));\r\n }\r\n\r\n const isFallback = botReply === this.getFallbackReply();\r\n this.addMessage({\r\n sender: 'bot',\r\n text: botReply,\r\n id: Date.now().toString(),\r\n showSuggestions: isFallback,\r\n });\r\n } catch (error) {\r\n console.error('Error getting bot reply:', error);\r\n this.addMessage({\r\n sender: 'bot',\r\n text: this.getFallbackReply(),\r\n id: Date.now().toString(),\r\n showSuggestions: true,\r\n });\r\n } finally {\r\n this.isBotTyping.set(false);\r\n }\r\n }\r\n\r\n getFallbackReply(): string {\r\n return \"I'm sorry 😔, I didn't understand that.\";\r\n }\r\n\r\n isFallbackIntent(userText: string): boolean {\r\n const text = userText.toLowerCase();\r\n return !CHAT_INTENTS.some((intent) =>\r\n intent.patterns.some((pattern) => text.includes(pattern)),\r\n );\r\n }\r\n\r\n public unlockAudio(): void {\r\n if (this.audioUnlocked) return;\r\n const audio = new Audio();\r\n audio.volume = 1.0;\r\n audio\r\n .play()\r\n .then(() => (this.audioUnlocked = true))\r\n .catch(() => {});\r\n }\r\n\r\n public playBotSound(): void {\r\n if (!this.audioUnlocked) return;\r\n try {\r\n const audio = new Audio('assets/bot.mp3');\r\n audio.play();\r\n } catch (error) {\r\n console.error('Error playing bot sound:', error);\r\n }\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, delay, retry, map, catchError, of } from 'rxjs';\r\nimport { AppConst } from '../app-const';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class HttpService {\r\n // @BlockUI() blockUI!: NgBlockUI;\r\n\r\n apiUrl: string;\r\n\r\n constructor(private http: HttpClient) {\r\n this.apiUrl = `${AppConst?.data?.apiBaseUrl}${AppConst?.data?.apiSegment}`;\r\n }\r\n\r\n get(\r\n url: string,\r\n param?: object,\r\n nestedParam = false,\r\n showLoader = false,\r\n refresh = true,\r\n ): Observable<any> {\r\n // if (showLoader && !this.blockUI.isActive) {\r\n\r\n // this.blockUI.start();\r\n\r\n // }\r\n\r\n let params = {};\r\n\r\n if (nestedParam) {\r\n this.buildHttpParams(params, param, '');\r\n } else {\r\n params = param as HttpParams;\r\n }\r\n\r\n return this.http.get(`${this.apiUrl}${url}`, { params: params, withCredentials: true }).pipe(\r\n delay(100),\r\n\r\n retry(0),\r\n\r\n map((response) => this.returnResponse(response, showLoader)),\r\n\r\n catchError((error) => {\r\n // if (this.blockUI.isActive) {\r\n\r\n // this.blockUI.stop();\r\n\r\n // }\r\n\r\n return of(error);\r\n }),\r\n );\r\n }\r\n\r\n private buildHttpParams(params: any, data: any, currentPath: string) {\r\n Object.keys(data).forEach((key) => {\r\n if (data[key] instanceof Object && !(data[key] instanceof Array)) {\r\n this.buildHttpParams(params, data[key], `${currentPath}${key}.`);\r\n } else {\r\n params[`${currentPath}${key}`] = data[key];\r\n }\r\n });\r\n }\r\n\r\n post(url: string, param?: object, showLoader = false): Observable<any> {\r\n // if (showLoader && !this.blockUI.isActive) {\r\n\r\n // this.blockUI.start();\r\n\r\n // }\r\n\r\n return this.http.post(`${this.apiUrl}${url}`, param as HttpParams).pipe(\r\n delay(100),\r\n\r\n retry(0),\r\n\r\n map((response: any) => this.returnResponse(response, showLoader)),\r\n\r\n catchError((error) => {\r\n // if (this.blockUI.isActive) {\r\n\r\n // this.blockUI.stop();\r\n\r\n // }\r\n\r\n return of(error);\r\n }),\r\n );\r\n }\r\n\r\n private returnResponse(value: any, showLoader: boolean = true): any {\r\n // if (showLoader && this.blockUI.isActive) {\r\n\r\n // this.blockUI.reset();\r\n\r\n // }\r\n\r\n return value;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpService } from './http.service';\r\nimport { AuthResult } from '../models/auth-result.model';\r\nimport { ApiResponse } from '../models/api-response.model';\r\nimport { LoginRequest } from '../models/login-request.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AccountService {\r\n constructor(private http: HttpService) {}\r\n\r\n login(param?: LoginRequest, showLoader = false): Observable<ApiResponse<AuthResult>> {\r\n return this.http.post('Account/Login', param, showLoader);\r\n }\r\n\r\n // refreshLogin(param?: object, showLoader = false): Observable<MvResponse<MvLoginResult>> {\r\n\r\n // return this.http.post('Account/RefreshToken', param, showLoader);\r\n\r\n // }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class CryptoHelperService {\r\n private encoder = new TextEncoder();\r\n private decoder = new TextDecoder();\r\n private secretKey = ''; // Will be set by AuthService\r\n\r\n setSecretKey(key: string) {\r\n this.secretKey = key;\r\n }\r\n\r\n private async getKey() {\r\n const salt = this.encoder.encode('fixed_salt'); // Keep constant\r\n const baseKey = await crypto.subtle.importKey(\r\n 'raw',\r\n this.encoder.encode(this.secretKey),\r\n 'PBKDF2',\r\n false,\r\n ['deriveKey'],\r\n );\r\n\r\n return crypto.subtle.deriveKey(\r\n {\r\n name: 'PBKDF2',\r\n salt,\r\n iterations: 100000,\r\n hash: 'SHA-256',\r\n },\r\n baseKey,\r\n { name: 'AES-GCM', length: 256 },\r\n false,\r\n ['encrypt', 'decrypt'],\r\n );\r\n }\r\n\r\n async encrypt(value: string): Promise<string | null> {\r\n if (!value) return null;\r\n\r\n const key = await this.getKey();\r\n const iv = crypto.getRandomValues(new Uint8Array(12));\r\n\r\n const encrypted = await crypto.subtle.encrypt(\r\n { name: 'AES-GCM', iv },\r\n key,\r\n this.encoder.encode(value),\r\n );\r\n\r\n const merged = new Uint8Array(iv.length + encrypted.byteLength);\r\n merged.set(iv, 0);\r\n merged.set(new Uint8Array(encrypted), iv.length);\r\n\r\n return btoa(String.fromCharCode(...merged));\r\n }\r\n\r\n async decrypt(value: string): Promise<string | null> {\r\n if (!value) return null;\r\n\r\n const raw = Uint8Array.from(atob(value), (c) => c.charCodeAt(0));\r\n\r\n const iv = raw.slice(0, 12);\r\n const data = raw.slice(12);\r\n\r\n const key = await this.getKey();\r\n\r\n const decrypted = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, data);\r\n\r\n return this.decoder.decode(decrypted);\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { AppConst } from '../app-const';\r\nimport { map, Observable } from 'rxjs';\r\nimport { AuthResult } from '../models/auth-result.model';\r\nimport * as CryptoJS from 'crypto-js';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { Router } from '@angular/router';\r\nimport { CryptoHelperService } from '../helpers/crypto-helper.service';\r\n\r\n//!! inherit Window storageEventAdded for duplicate tab detection\r\ndeclare global {\r\n interface Window {\r\n storageEventAdded?: boolean;\r\n tabCLoseEventAdded?: boolean;\r\n }\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthService {\r\n apiUrl: string;\r\n storageKey: string;\r\n secretKey: string;\r\n companyCode: string;\r\n jwtHelper: JwtHelperService = new JwtHelperService();\r\n\r\n constructor(\r\n private router: Router,\r\n private http: HttpClient,\r\n private cryptoHelper: CryptoHelperService,\r\n // private cacheService: NgxCacheService,\r\n // private snackBar: MatSnackBar,\r\n ) {\r\n this.apiUrl = `${AppConst?.data?.apiBaseUrl}${AppConst?.data?.apiSegment}`;\r\n this.storageKey = AppConst?.data?.storageKey;\r\n this.secretKey = AppConst?.data?.secretKey;\r\n this.companyCode = AppConst?.data?.companyCode;\r\n this.cryptoHelper.setSecretKey(this.secretKey);\r\n }\r\n\r\n logout(): Observable<boolean> {\r\n const url = `${this.apiUrl}Account/Logout`;\r\n return this.http.post(url, {}).pipe(\r\n map((response: any) => {\r\n if (response && response.success) {\r\n this.clearAuth();\r\n // this.redirectOut();\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }),\r\n );\r\n }\r\n\r\n // redirectIn() {\r\n // let redirectUrl = this.getCurrentNavigationUrl();\r\n // redirectUrl = redirectUrl || AppConst?.data?.redirectUrl || '/login';\r\n // this.router.navigate([redirectUrl], { replaceUrl: true });\r\n // }\r\n\r\n // redirectOut() {\r\n // this.router.navigate(['/login'], { replaceUrl: true });\r\n // }\r\n\r\n // Utility\r\n setSession(session: AuthResult) {\r\n const user = this.jwtHelper.decodeToken(session.access_token);\r\n this.setLocalStorage('access_token', session.access_token);\r\n this.setLocalStorage('refresh_token', session.refresh_token);\r\n this.setLocalStorage('user_id', Number(user?.user_id));\r\n this.setLocalStorage('username', user?.username);\r\n this.setLocalStorage('roles', Number(user?.roles));\r\n this.setLocalStorage('permissions', Number(user?.permissions));\r\n this.setLocalStorage('company_id', user?.company_id);\r\n this.setLocalStorage('office_id', user?.office_id);\r\n }\r\n\r\n setLocalStorage(key: string, value: any) {\r\n const data = localStorage.getItem(this.storageKey);\r\n if (data) {\r\n let dataDec = this.decrypt(data);\r\n let dataJson = JSON.parse(dataDec ?? '{}');\r\n dataJson = Object.assign(dataJson, { [key]: value });\r\n localStorage.setItem(this.storageKey, this.encrypt(JSON.stringify(dataJson)));\r\n } else {\r\n let dataNew = Object.assign({}, { [key]: value });\r\n let dataEnc = this.encrypt(JSON.stringify(dataNew));\r\n localStorage.setItem(this.storageKey, dataEnc);\r\n }\r\n }\r\n\r\n getLocalStorage(key: string) {\r\n const data = localStorage.getItem(this.storageKey);\r\n if (data) {\r\n let dataDec = this.decrypt(data);\r\n let dataJson = JSON.parse(dataDec ?? '{}');\r\n return dataJson![key] || null;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n isAuthenticated(): boolean {\r\n let token = this.getLocalStorage('access_token');\r\n if (token && !this.isTokenExpired()) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n isTokenExpired(): boolean {\r\n let token = (this.getLocalStorage('access_token') ?? '') as string;\r\n if (token) {\r\n return this.jwtHelper.isTokenExpired(token);\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n encrypt(value: string): any {\r\n if (value) {\r\n return CryptoJS.AES.encrypt(value, this.secretKey);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n decrypt(value: string) {\r\n if (value) {\r\n let bytes = CryptoJS.AES.decrypt(value, this.secretKey);\r\n let decryptedText = bytes.toString(CryptoJS.enc.Utf8);\r\n return decryptedText;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n clearAuth() {\r\n this.clearSession();\r\n this.clearStorage();\r\n this.clearCache();\r\n }\r\n\r\n clearSession() {\r\n sessionStorage.clear();\r\n }\r\n\r\n clearTabInfo() {\r\n localStorage.removeItem('tabs');\r\n }\r\n\r\n clearStorage() {\r\n localStorage.clear();\r\n }\r\n\r\n clearCache() {\r\n // this.cacheService.clearCache();\r\n }\r\n\r\n getUserId() {\r\n return this.getLocalStorage('user_id') || 0;\r\n }\r\n}\r\n","import { Injectable, inject, signal, computed } from '@angular/core';\r\nimport { Observable, firstValueFrom } from 'rxjs';\r\nimport { MessageService } from '../../components/message-input/messaging.service';\r\nimport { ChatHistoryService } from './chat-history.service';\r\nimport { AccountService } from './account.service';\r\nimport { AuthService } from './auth.service';\r\nimport { TenantContextService } from './tenant-context.service';\r\nimport { ChatSession } from '../../model/chat-session.model';\r\nimport { LoginRequest } from '../models/login-request.model';\r\nimport { UserContext } from '../models/user-context.model';\r\nimport { AppConst } from '../app-const';\r\n\r\n/**\r\n * ChatFacadeService - High-level orchestration service\r\n *\r\n * Coordinates operations between multiple services to provide simplified,\r\n * high-level operations for the chat component. This facade encapsulates\r\n * complex interactions and provides a clean API for common chat operations.\r\n *\r\n * Responsibilities:\r\n * - Session management (load, delete, switch sessions)\r\n * - Authentication orchestration\r\n * - Message operations coordination\r\n * - Context management\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChatFacadeService {\r\n private messageService = inject(MessageService);\r\n private chatHistoryService = inject(ChatHistoryService);\r\n private accountService = inject(AccountService);\r\n private authService = inject(AuthService);\r\n private tenantContextService = inject(TenantContextService);\r\n\r\n // Expose state from services\r\n public messages = this.messageService.messages;\r\n public isBotTyping = this.messageService.isBotTyping;\r\n public chatSessions = signal<ChatSession[]>([]);\r\n public isAuthenticated = signal(false);\r\n public messageError = signal<string | null>(null);\r\n\r\n constructor() {\r\n // Set initial authentication status\r\n this.isAuthenticated.set(this.authService.isAuthenticated());\r\n }\r\n\r\n // ============================================================================\r\n // SESSION MANAGEMENT\r\n // ============================================================================\r\n\r\n /**\r\n * Load all chat sessions for a specific user and context\r\n */\r\n loadUserSessions(contextKey: string, userId: string): void {\r\n this.chatHistoryService.loadAllSessions(contextKey, userId).subscribe((sessions) => {\r\n this.chatSessions.set(sessions);\r\n console.log(`Loaded ${sessions.length} sessions for context: ${contextKey}, user: ${userId}`);\r\n });\r\n }\r\n\r\n /**\r\n * Delete a specific session\r\n */\r\n deleteSession(sessionId: string, contextKey: string, userId: string): Observable<void> {\r\n return new Observable((observer) => {\r\n this.chatHistoryService.deleteSession(sessionId, contextKey, userId).subscribe({\r\n next: () => {\r\n // Reload sessions after deletion\r\n this.loadUserSessions(contextKey, userId);\r\n\r\n // If deleted session is currently active, start a new one\r\n const activeSession = this.messageService.getActiveSession();\r\n if (activeSession?.id === sessionId) {\r\n this.messageService.startNewSession();\r\n }\r\n\r\n observer.next();\r\n observer.complete();\r\n },\r\n error: (err) => observer.error(err),\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Load a specific session into the message service\r\n */\r\n loadSession(session: ChatSession): void {\r\n this.messageService.loadSession(session);\r\n console.log('Loaded session:', session.title);\r\n }\r\n\r\n /**\r\n * Start a new chat session\r\n */\r\n startNewSession(): void {\r\n this.messageService.startNewSession();\r\n }\r\n\r\n // ============================================================================\r\n // MESSAGE OPERATIONS\r\n // ============================================================================\r\n\r\n /**\r\n * Send a message with validation\r\n */\r\n async sendMessage(text: string, maxLength: number = 1000): Promise<void> {\r\n const trimmedText = text.trim();\r\n this.messageError.set(null);\r\n\r\n if (!trimmedText) {\r\n return;\r\n }\r\n\r\n if (trimmedText.length > maxLength) {\r\n this.messageError.set(`Message exceeds maximum length of ${maxLength} characters.`);\r\n setTimeout(() => {\r\n this.messageError.set(null);\r\n }, 5000);\r\n return;\r\n }\r\n\r\n // Delegate to MessageService\r\n await this.messageService.processUserMessage(trimmedText);\r\n }\r\n\r\n /**\r\n * Clear the current chat and start a new session\r\n */\r\n clearCurrentChat(contextKey: string, userId: string): void {\r\n this.messageService.clearMessages();\r\n // Refresh sessions list after clearing\r\n this.loadUserSessions(contextKey, userId);\r\n }\r\n\r\n /**\r\n * Clear message error\r\n */\r\n clearMessageError(): void {\r\n this.messageError.set(null);\r\n }\r\n\r\n // ============================================================================\r\n // AUTHENTICATION\r\n // ============================================================================\r\n\r\n /**\r\n * Authenticate user with credentials or skip authentication for testing\r\n */\r\n async login(credentials: LoginRequest, skipAuth: boolean = false): Promise<boolean> {\r\n //Todo: Remove this in production\r\n if (skipAuth) {\r\n console.log('Authentication skipped - Mock mode enabled');\r\n this.isAuthenticated.set(true);\r\n return true;\r\n }\r\n\r\n try {\r\n const response = await firstValueFrom(this.accountService.login(credentials));\r\n if (response && response.success) {\r\n this.isAuthenticated.set(true);\r\n return true;\r\n } else {\r\n this.isAuthenticated.set(false);\r\n return false;\r\n }\r\n } catch (error) {\r\n console.error('Login failed:', error);\r\n this.isAuthenticated.set(false);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Check if user is authenticated\r\n */\r\n checkAuthentication(): boolean {\r\n return this.authService.isAuthenticated();\r\n }\r\n\r\n // ============================================================================\r\n // CONTEXT MANAGEMENT\r\n // ============================================================================\r\n\r\n /**\r\n * Update tenant context (platformTenant, subTenant, agent)\r\n */\r\n updateTenantContext(platformTenant: string, subTenant: string, agent: string): void {\r\n this.tenantContextService.setContext({\r\n platformTenant: platformTenant || '',\r\n subTenant: subTenant || '',\r\n agent: agent || '',\r\n });\r\n\r\n // Sync message service with new context\r\n const contextKey = this.tenantContextService.contextKey();\r\n console.log('>>>>>ChatFacade: Switching context to', contextKey);\r\n this.messageService.switchContext(contextKey);\r\n }\r\n\r\n /**\r\n * Handle user context changes (for backend proxy mode)\r\n */\r\n handleUserContextChange(userContext: UserContext): void {\r\n this.messageService.setUserContext(userContext);\r\n console.log('>>>>ChatFacade: User context updated', userContext.userName);\r\n }\r\n\r\n /**\r\n * Get current context key\r\n */\r\n getCurrentContextKey(): string {\r\n return this.tenantContextService.contextKey();\r\n }\r\n\r\n /**\r\n * Subscribe to context changes\r\n */\r\n subscribeToContextChanges(callback: (contextKey: string) => void): () => void {\r\n const subscription = this.tenantContextService.contextChange$.subscribe((event) => {\r\n // Sync message service with new context\r\n this.messageService.switchContext(event.contextKey);\r\n callback(event.contextKey);\r\n });\r\n\r\n // Return cleanup function\r\n return () => subscription.unsubscribe();\r\n }\r\n\r\n // ============================================================================\r\n // COMPUTED STATE\r\n // ============================================================================\r\n\r\n /**\r\n * Determine if suggestion chips should be shown\r\n */\r\n showSuggestionChips = computed(() => {\r\n const msgs = this.messages();\r\n if (msgs.length === 0) return false;\r\n const lastBotMsg = [...msgs].reverse().find((m) => m.sender === 'bot');\r\n return lastBotMsg?.showSuggestions === true;\r\n });\r\n}\r\n","import { Injectable, signal, computed, effect } from '@angular/core';\r\nimport { Message } from '../../model/message';\r\n\r\n/**\r\n * ChatUIStateService - Centralized UI state management\r\n * \r\n * Manages all UI-related state for the chat component including:\r\n * - Chat window open/close state\r\n * - History sidebar visibility\r\n * - Unread message tracking\r\n * - Fullscreen state\r\n * \r\n * This service uses Angular signals for reactive state management,\r\n * allowing components to subscribe to state changes efficiently.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChatUIStateService {\r\n // ============================================================================\r\n // UI STATE SIGNALS\r\n // ============================================================================\r\n\r\n /**\r\n * Whether the chat window is currently open\r\n */\r\n public isChatOpen = signal(false);\r\n\r\n /**\r\n * Whether the history sidebar is currently open\r\n */\r\n public isHistorySidebarOpen = signal(false);\r\n\r\n /**\r\n * Whether the chat is in fullscreen mode\r\n */\r\n public isFullScreen = signal(false);\r\n\r\n /**\r\n * ID of the last message that was read by the user\r\n */\r\n private lastReadMessageId = signal<string | null>(null);\r\n\r\n /**\r\n * Reference to current messages (injected from outside)\r\n */\r\n private messagesSignal = signal<Message[]>([]);\r\n\r\n // ============================================================================\r\n // COMPUTED SIGNALS\r\n // ============================================================================\r\n\r\n /**\r\n * Computed number of unread bot messages\r\n */\r\n public unreadCount = computed(() => {\r\n if (this.isChatOpen()) {\r\n return 0; // No unread when chat is open\r\n }\r\n\r\n const messages = this.messagesSignal();\r\n if (messages.length === 0) return 0;\r\n\r\n const lastReadId = this.lastReadMessageId();\r\n let lastReadIndex = -1;\r\n\r\n if (lastReadId !== null) {\r\n lastReadIndex = messages.findIndex((msg) => msg.id === lastReadId);\r\n }\r\n\r\n // Count unread bot messages after last read position\r\n const unreadBotMessages = messages\r\n .slice(lastReadIndex + 1)\r\n .filter((msg) => msg.sender === 'bot');\r\n\r\n return unreadBotMessages.length;\r\n });\r\n\r\n // ============================================================================\r\n // EFFECTS\r\n // ============================================================================\r\n\r\n /**\r\n * Effect to automatically mark messages as read when chat is opened\r\n */\r\n public markAsReadEffect = effect(\r\n () => {\r\n const isOpen = this.isChatOpen();\r\n const msgs = this.messagesSignal();\r\n\r\n if (isOpen && msgs.length > 0) {\r\n const lastMessage = msgs[msgs.length - 1];\r\n if (lastMessage?.id) {\r\n const currentLastRead = this.lastReadMessageId();\r\n if (lastMessage.id !== currentLastRead) {\r\n this.lastReadMessageId.set(lastMessage.id);\r\n }\r\n }\r\n }\r\n },\r\n { allowSignalWrites: true }\r\n );\r\n\r\n // ============================================================================\r\n // PUBLIC METHODS\r\n // ============================================================================\r\n\r\n /**\r\n * Set the messages signal reference from an external source\r\n * This allows the UI state service to track messages from MessageService\r\n */\r\n setMessagesSignal(messagesSignal: any): void {\r\n this.messagesSignal = messagesSignal;\r\n }\r\n\r\n /**\r\n * Toggle the chat window open/close state\r\n */\r\n toggleChat(): void {\r\n const currentlyOpen = this.isChatOpen();\r\n this.isChatOpen.update((open) => !open);\r\n\r\n // Mark messages as read when opening chat\r\n if (!currentlyOpen) {\r\n const messages = this.messagesSignal();\r\n if (messages.length > 0) {\r\n const lastMessage = messages[messages.length - 1];\r\n this.lastReadMessageId.set(lastMessage.id ?? null);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the history sidebar open/close state\r\n */\r\n toggleHistorySidebar(): void {\r\n this.isHistorySidebarOpen.update((open) => !open);\r\n }\r\n\r\n /**\r\n * Close the chat window\r\n */\r\n closeChat(): void {\r\n this.isChatOpen.set(false);\r\n }\r\n\r\n /**\r\n * Open the chat window\r\n */\r\n openChat(): void {\r\n this.isChatOpen.set(true);\r\n }\r\n\r\n /**\r\n * Close the history sidebar\r\n */\r\n closeHistorySidebar(): void {\r\n this.isHistorySidebarOpen.set(false);\r\n }\r\n\r\n /**\r\n * Open the history sidebar\r\n */\r\n openHistorySidebar(): void {\r\n this.isHistorySidebarOpen.set(true);\r\n }\r\n\r\n /**\r\n * Toggle fullscreen mode\r\n */\r\n toggleFullscreen(): void {\r\n this.isFullScreen.update((fs) => !fs);\r\n }\r\n\r\n /**\r\n * Set fullscreen state\r\n */\r\n setFullscreen(isFullscreen: boolean): void {\r\n this.isFullScreen.set(isFullscreen);\r\n }\r\n\r\n /**\r\n * Manually mark messages as read up to a specific message ID\r\n */\r\n markMessagesAsRead(messageId: string): void {\r\n this.lastReadMessageId.set(messageId);\r\n }\r\n\r\n /**\r\n * Reset last read message ID\r\n */\r\n resetLastRead(): void {\r\n this.lastReadMessageId.set(null);\r\n }\r\n\r\n /**\r\n * Get the last read message ID\r\n */\r\n getLastReadMessageId(): string | null {\r\n return this.lastReadMessageId();\r\n }\r\n}\r\n","//projects\\doohbot\\src\\lib\\constant\\utf8.ts\r\nexport const appEmoji = {\r\n waveHand: '\\u{1F44B}',\r\n robotFace: '\\u{1F916}',\r\n partyPopper: '\\u{1F389}',\r\n thinkingFace: '\\u{1F914}',\r\n thumbsUp: '\\u{1F44D}',\r\n thumbsDown: '\\u{1F44E}',\r\n redHeart: '\\u{2764}\\u{FE0F}',\r\n};\r\n","import {\r\n APP_INITIALIZER,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DoohbotInput } from './inputs/doohbot-input';\r\nimport { PredefinedMessages } from './helpers/predefined_messages';\r\nimport { ChatButtonComponent } from './components/chat-button/chat-button.component';\r\nimport { ChatWindowComponent } from './components/chat-window/chat-window.component';\r\nimport { DoohbotApiConfig } from './model/api-config.model';\r\nimport { UserContext } from './core/models/user-context.model';\r\nimport { DoohbotThemeConfig } from './model/theme-config.model';\r\nimport { FullscreenDirective } from './directives/fullscreen/fullscreen.directive';\r\nimport { ChatSession } from './model/chat-session.model';\r\nimport { appConst } from './constant/constant';\r\nimport { AppConst } from './core/app-const';\r\nimport { LoginRequest } from './core/models/login-request.model';\r\nimport { ThemeService } from './core/services/theme.service';\r\nimport { ChatFacadeService } from './core/services/chat-facade.service';\r\nimport { ChatUIStateService } from './core/services/chat-ui-state.service';\r\nimport { appEmoji } from './constant/utf8';\r\n\r\n@Component({\r\n selector: 'app-doohbot',\r\n standalone: true,\r\n imports: [CommonModule, ChatButtonComponent, ChatWindowComponent, FullscreenDirective],\r\n templateUrl: './doohbot.component.html',\r\n styleUrls: ['./doohbot.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n AppConst,\r\n {\r\n provide: APP_INITIALIZER,\r\n useFactory: (appConst: AppConst) => () => appConst.load(),\r\n deps: [AppConst],\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class Doohbot extends DoohbotInput implements OnDestroy {\r\n // ============================================================================\r\n // INPUTS\r\n // ============================================================================\r\n\r\n @Input() config: DoohbotInput = new DoohbotInput();\r\n @Input() platformTenant!: string;\r\n @Input() subTenant!: string;\r\n @Input() agent!: string;\r\n @Input() buttonStyle: 'fab' | 'sidebar' | 'sidebar-top' | 'sidebar-bottom' = 'fab';\r\n @Input() enableDrag: boolean = false;\r\n @Input() enableResize: boolean = false;\r\n @Input() apiConfig?: DoohbotApiConfig;\r\n @Input() userContext?: UserContext;\r\n @Input() themeConfig: DoohbotThemeConfig | undefined;\r\n\r\n appEmoji = appEmoji;\r\n\r\n // ============================================================================\r\n // FACADE SERVICES\r\n // ============================================================================\r\n\r\n private chatFacade = inject(ChatFacadeService);\r\n private uiState = inject(ChatUIStateService);\r\n private themeService = inject(ThemeService);\r\n\r\n // ============================================================================\r\n // EXPOSED STATE FROM FACADES\r\n // ============================================================================\r\n\r\n // UI State\r\n public isChatOpen = this.uiState.isChatOpen;\r\n public isHistorySidebarOpen = this.uiState.isHistorySidebarOpen;\r\n public unreadCount = this.uiState.unreadCount;\r\n public isFullScreen = this.uiState.isFullScreen;\r\n\r\n // Chat Facade State\r\n public isAuthenticated = this.chatFacade.isAuthenticated;\r\n public messages = this.chatFacade.messages;\r\n public isBotTyping = this.chatFacade.isBotTyping;\r\n public chatSessions = this.chatFacade.chatSessions;\r\n public messageError = this.chatFacade.messageError;\r\n public showSuggestionChips = this.chatFacade.showSuggestionChips;\r\n\r\n // ============================================================================\r\n // COMPONENT-SPECIFIC STATE\r\n // ============================================================================\r\n\r\n public userName = 'User';\r\n public predefinedMessages: string[] = PredefinedMessages;\r\n public maxMessageLength = 1000;\r\n\r\n // Context cleanup\r\n private contextCleanup?: () => void;\r\n\r\n /**\r\n * Check if current user is a guest user\r\n */\r\n public isGuestUser = computed(() => {\r\n const userId = this.userContext?.userId || 'anonymous';\r\n return this.checkIfGuestUser(userId);\r\n });\r\n\r\n /**\r\n * Helper method to check if a user ID belongs to a guest user\r\n */\r\n private checkIfGuestUser(userId: string): boolean {\r\n const guestUserIds = ['anonymous', 'guest', 'default', ''];\r\n return guestUserIds.includes(userId.toLowerCase());\r\n }\r\n\r\n // ============================================================================\r\n // VIEW CHILDREN\r\n // ============================================================================\r\n\r\n @ViewChild(ChatWindowComponent, { read: ElementRef }) chatWindowRef!: ElementRef;\r\n @ViewChild(FullscreenDirective) fullscreenDirective!: FullscreenDirective;\r\n\r\n // ============================================================================\r\n // CONSTRUCTOR\r\n // ============================================================================\r\n\r\n constructor(\r\n private elementRef: ElementRef,\r\n private renderer: Renderer2,\r\n ) {\r\n super();\r\n\r\n // Setup messages signal ref for UI state service\r\n this.uiState.setMessagesSignal(this.chatFacade.messages);\r\n\r\n // Theme management effect\r\n effect(() => {\r\n const activeTheme = this.themeService.activeTheme();\r\n const host = this.elementRef.nativeElement;\r\n this.renderer.removeClass(host, 'light-theme');\r\n this.renderer.removeClass(host, 'dark-theme');\r\n this.renderer.addClass(host, activeTheme);\r\n this.themeService.applyCssVariables(host, this.themeConfig);\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // LIFECYCLE HOOKS\r\n // ============================================================================\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Handle user context changes\r\n if (changes['userContext'] && this.userContext) {\r\n this.chatFacade.handleUserContextChange(this.userContext);\r\n this.userName = this.userContext.userName || this.config.username || 'User';\r\n\r\n // Reset UI state and re-authenticate\r\n this.uiState.closeChat();\r\n // Close history sidebar when user is switched\r\n this.uiState.closeHistorySidebar();\r\n this.performLogin();\r\n\r\n // Load sessions for new user\r\n this.loadUserSessions();\r\n }\r\n\r\n // Handle config changes\r\n if (changes['config']) {\r\n this.userAvatarUrl = this.config.userAvatarUrl || appConst.USER_AVATAR;\r\n if (!this.userName || this.userName === 'User') {\r\n this.userName = this.config.username || 'User';\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n // Initialize theme\r\n this.themeService.applyCssVariables(this.elementRef.nativeElement, this.themeConfig);\r\n\r\n // Set user avatar and name\r\n this.userAvatarUrl = this.config.userAvatarUrl || appConst.USER_AVATAR;\r\n this.userName = this.userContext?.userName || this.config.username || 'User';\r\n\r\n // Initialize tenant context\r\n this.chatFacade.updateTenantContext(\r\n this.platformTenant || '',\r\n this.subTenant || '',\r\n this.agent || '',\r\n );\r\n\r\n // Start new session\r\n this.chatFacade.startNewSession();\r\n\r\n // Load user sessions\r\n this.loadUserSessions();\r\n\r\n // Subscribe to context changes\r\n this.contextCleanup = this.chatFacade.subscribeToContextChanges((contextKey) => {\r\n this.uiState.resetLastRead();\r\n });\r\n\r\n // Perform authentication\r\n if (!this.chatFacade.checkAuthentication()) {\r\n this.performLogin();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // Clean up subscriptions\r\n if (this.contextCleanup) {\r\n this.contextCleanup();\r\n }\r\n }\r\n\r\n // ============================================================================\r\n // AUTHENTICATION\r\n // ============================================================================\r\n\r\n private performLogin(): void {\r\n const credentials: LoginRequest = {\r\n username: this.config.username || AppConst.data?.username,\r\n password: this.config.password || AppConst.data?.password,\r\n };\r\n\r\n this.chatFacade.login(credentials, this.config.skipAuthentication);\r\n }\r\n\r\n // ============================================================================\r\n // CHAT OPERATIONS\r\n // ============================================================================\r\n\r\n toggleChat(): void {\r\n this.uiState.toggleChat();\r\n }\r\n\r\n async sendMessage(text: string): Promise<void> {\r\n await this.chatFacade.sendMessage(text, this.maxMessageLength);\r\n }\r\n\r\n clearChat(): void {\r\n const contextKey = this.chatFacade.getCurrentContextKey();\r\n const userId = this.userContext?.userId || 'anonymous';\r\n this.chatFacade.clearCurrentChat(contextKey, userId);\r\n }\r\n\r\n clearMessageError(): void {\r\n this.chatFacade.clearMessageError();\r\n }\r\n\r\n // ============================================================================\r\n // SESSION MANAGEMENT\r\n // ============================================================================\r\n\r\n toggleHistorySidebar(): void {\r\n this.uiState.toggleHistorySidebar();\r\n }\r\n\r\n loadChatSession(session: ChatSession): void {\r\n this.chatFacade.loadSession(session);\r\n this.uiState.closeHistorySidebar();\r\n }\r\n\r\n deleteSession(sessionId: string): void {\r\n const contextKey = this.chatFacade.getCurrentContextKey();\r\n const userId = this.userContext?.userId || 'anonymous';\r\n this.chatFacade.deleteSession(sessionId, contextKey, userId).subscribe();\r\n }\r\n\r\n private loadUserSessions(): void {\r\n const contextKey = this.chatFacade.getCurrentContextKey();\r\n const userId = this.userContext?.userId || 'anonymous';\r\n this.chatFacade.loadUserSessions(contextKey, userId);\r\n }\r\n\r\n // ============================================================================\r\n // FULLSCREEN\r\n // ============================================================================\r\n\r\n toggleFullScreen(): void {\r\n if (this.fullscreenDirective) {\r\n this.fullscreenDirective.toggle();\r\n const isFullscreen = this.fullscreenDirective.getFullscreenState();\r\n this.uiState.setFullscreen(isFullscreen);\r\n }\r\n }\r\n\r\n // ============================================================================\r\n // UTILITY METHODS\r\n // ============================================================================\r\n\r\n trackByMessageId(index: number, item: any): string {\r\n return item.id || index.toString();\r\n }\r\n}\r\n","<app-chat-button\r\n [buttonStyle]=\"buttonStyle\"\r\n [isChatOpen]=\"isChatOpen()\"\r\n [unreadCount]=\"unreadCount()\"\r\n [chatIcon]=\"chatIcon ?? ''\"\r\n [appTitle]=\"appTitle ?? ''\"\r\n [appLogoUrl]=\"appLogoUrl ?? ''\"\r\n [appTextLogoUrl]=\"appTextLogoUrl ?? ''\"\r\n (toggle)=\"toggleChat()\"\r\n></app-chat-button>\r\n\r\n<app-chat-window\r\n *ngIf=\"isChatOpen()\"\r\n appFullscreen\r\n [isChatOpen]=\"isChatOpen()\"\r\n [enableDrag]=\"enableDrag\"\r\n [enableResize]=\"enableResize\"\r\n [isFullScreen]=\"isFullScreen()\"\r\n [appTitle]=\"appTitle ?? ''\"\r\n [appLogoUrl]=\"appLogoUrl ?? ''\"\r\n [appTextLogoUrl]=\"appTextLogoUrl ?? ''\"\r\n [appHeaderLogoUrl]=\"appHeaderLogoUrl ?? ''\"\r\n [moreIcon]=\"moreIcon ?? ''\"\r\n [minimizeIcon]=\"minimizeIcon ?? ''\"\r\n [messages]=\"messages()\"\r\n [isBotTyping]=\"isBotTyping()\"\r\n [isAuthenticated]=\"isAuthenticated()\"\r\n [appSubtitle]=\"appSubtitle ?? ''\"\r\n [welcomeDesc]=\"welcomeDesc ?? ''\"\r\n [predefinedMessages]=\"predefinedMessages\"\r\n [botAvatarUrl]=\"botAvatarUrl ?? ''\"\r\n [userAvatarUrl]=\"userAvatarUrl\"\r\n [userName]=\"userName\"\r\n [trackByMessageId]=\"trackByMessageId\"\r\n [hintText]=\"hintText ?? ''\"\r\n [sendIcon]=\"sendIcon ?? ''\"\r\n [messageError]=\"messageError()\"\r\n [showSuggestionChips]=\"showSuggestionChips()\"\r\n [isHistorySidebarOpen]=\"isHistorySidebarOpen()\"\r\n [chatSessions]=\"chatSessions()\"\r\n [chatHistoryUserName]=\"userName\"\r\n [isGuestUser]=\"isGuestUser()\"\r\n (toggleChat)=\"toggleChat()\"\r\n (toggleFullScreen)=\"toggleFullScreen()\"\r\n (toggleHistorySidebar)=\"toggleHistorySidebar()\"\r\n (sessionSelected)=\"loadChatSession($event)\"\r\n (sessionDeleted)=\"deleteSession($event)\"\r\n (suggestionClick)=\"sendMessage($event)\"\r\n (send)=\"sendMessage($event)\"\r\n (clearMessageError)=\"clearMessageError()\"\r\n (clearChat)=\"clearChat()\"\r\n></app-chat-window>\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const DOOHBOT_API_URL = new InjectionToken<string>('DOOHBOT_API_URL');\r\n","/*\r\n * Public API Surface of chatbot\r\n */\r\n\r\n// Main component\r\nexport * from './lib/doohbot.component';\r\n\r\nexport * from './lib/inputs/doohbot-input';\r\nexport * from './lib/model/api-config.model';\r\nexport * from './lib/core/models/user-context.model';\r\nexport * from './lib/core/services/doohbot-api.service';\r\nexport * from './lib/core/services/auth.service';\r\nexport * from './lib/core/services/account.service';\r\nexport * from './lib/constant/constant';\r\nexport * from './lib/model/token';\r\nexport * from './lib/model/tenant-config.model';\r\nexport * from './lib/model/chat-session.model';\r\nexport * from './lib/model/chat-context.model';\r\nexport * from './lib/model/theme-config.model';\r\nexport * from './lib/components/chat-window/chat-window.component';\r\nexport * from './lib/components/message-list/message-list.component';\r\nexport * from './lib/shared/dialog/dialog.component';\r\nexport * from './lib/shared/dialog/dialog.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i1.DialogService","i2","environmentprod","retry","map","catchError","i1.HttpService","i3.CryptoHelperService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aakash58-chatbot.mjs","sources":["../../../projects/doohbot/src/lib/constant/constant.ts","../../../projects/doohbot/src/lib/inputs/doohbot-input.ts","../../../projects/doohbot/src/lib/helpers/predefined_messages.ts","../../../projects/doohbot/src/lib/components/chat-button/chat-button.component.ts","../../../projects/doohbot/src/lib/components/chat-button/chat-button.component.html","../../../projects/doohbot/src/lib/shared/chips/chips.component.ts","../../../projects/doohbot/src/lib/shared/chips/chips.component.html","../../../projects/doohbot/src/lib/components/message-list/message-list.component.ts","../../../projects/doohbot/src/lib/components/message-list/message-list.component.html","../../../projects/doohbot/src/lib/components/message-input/message-input.component.ts","../../../projects/doohbot/src/lib/components/message-input/message-input.component.html","../../../projects/doohbot/src/lib/shared/snackbar/snackbar.component.ts","../../../projects/doohbot/src/lib/shared/snackbar/snackbar.component.html","../../../projects/doohbot/src/lib/directives/draggable/draggable-dialog.directive.ts","../../../projects/doohbot/src/lib/directives/resizable/resizable-dialog.directive.ts","../../../projects/doohbot/src/lib/core/services/theme.service.ts","../../../projects/doohbot/src/lib/shared/dialog/dialog.component.ts","../../../projects/doohbot/src/lib/shared/dialog/dialog.component.html","../../../projects/doohbot/src/lib/shared/dialog/dialog.service.ts","../../../projects/doohbot/src/lib/components/chat-history-sidebar/chat-history-sidebar.component.ts","../../../projects/doohbot/src/lib/components/chat-history-sidebar/chat-history-sidebar.component.html","../../../projects/doohbot/src/lib/components/chat-window/chat-window.component.ts","../../../projects/doohbot/src/lib/components/chat-window/chat-window.component.html","../../../projects/doohbot/src/lib/directives/fullscreen/fullscreen.directive.ts","../../../projects/doohbot/src/lib/core/environments/environment.ts","../../../projects/doohbot/src/lib/core/app-const.ts","../../../projects/doohbot/src/lib/model/doohbot.intents.ts","../../../projects/doohbot/src/lib/model/api-config.model.ts","../../../projects/doohbot/src/lib/core/services/tenant-context.service.ts","../../../projects/doohbot/src/lib/core/services/doohbot-api.service.ts","../../../projects/doohbot/src/lib/core/services/chat-history.service.ts","../../../projects/doohbot/src/lib/core/services/http.service.ts","../../../projects/doohbot/src/lib/core/services/account.service.ts","../../../projects/doohbot/src/lib/core/helpers/crypto-helper.service.ts","../../../projects/doohbot/src/lib/core/services/auth.service.ts","../../../projects/doohbot/src/lib/components/message-input/messaging.service.ts","../../../projects/doohbot/src/lib/core/services/chat-facade.service.ts","../../../projects/doohbot/src/lib/core/services/chat-ui-state.service.ts","../../../projects/doohbot/src/lib/constant/utf8.ts","../../../projects/doohbot/src/lib/core/interceptors/auth.interceptor.ts","../../../projects/doohbot/src/lib/doohbot.component.ts","../../../projects/doohbot/src/lib/doohbot.component.html","../../../projects/doohbot/src/lib/model/token.ts","../../../projects/doohbot/src/public-api.ts","../../../projects/doohbot/src/aakash58-chatbot.ts"],"sourcesContent":["export const appConst = {\r\n //LIVE ASSETS\r\n // APP_LOGO: 'https://iili.io/f3qSQJn.md.png',\r\n // USER_AVATAR: 'https://iili.io/KpEYoCP.png',\r\n // BOT_AVATAR: 'https://iili.io/KpER0Ge.png',\r\n\r\n // ==================\r\n\r\n //png ASSETS\r\n // APP_LOGO: 'assets/logo.svg',\r\n // APP_TEXT_LOGO: 'assets/title.svg',\r\n // APP_HEADER_LOGO: 'assets/header_logo.svg',\r\n // USER_AVATAR: 'assets/profile.png',\r\n // BOT_AVATAR: 'assets/bot.png',\r\n\r\n // ==================\r\n\r\n // base64_ASSETS\r\n APP_LOGO:\r\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEzMCIgdmlld0JveD0iMCAwIDEzMCAxMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8yMzY3XzE1OTgpIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAxXzIzNjdfMTU5OCkiPgo8cGF0aCBkPSJNNiA2SDEyNFYxMjRINlY2WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzIzNjdfMTU5OCkiLz4KPGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjBfZF8yMzY3XzE1OTgpIj4KPHBhdGggZD0iTTkxLjQ3MTcgMzguNTAyOUM3Ny43OTcgNTMuMzc4NCA3Ny44NTYyIDc2LjI2NzYgOTEuNjA3NCA5MS4wNzIzTDkyLjgwNDcgOTIuMzYxM0w5Mi43NzM0IDkyLjMzMkw5Mi44MDk2IDkyLjM2OTFMMzEuMTQzNiAxNTMuMzEyTDE0LjIzOTMgMTM2LjIwN0wxMy4zNDM4IDEzNy4wOTNMLTcgMTE2LjUwN0wtNi4zMTkzNCAxMTUuODMzTC0yMy45MDE0IDk4LjA0MkwzNy41MDY4IDM3LjM1NDVMMzcuNjE0MyAzNy40NjI5TDM3LjUwODggMzcuMzQ5NkwzOC44MDQ3IDM4LjU0MUM1My42Nzg4IDUyLjIxNjUgNzYuNTY4NSA1Mi4xNTYxIDkxLjM3MyAzOC40MDUzTDkyLjY2MzEgMzcuMjA3TDkxLjQ3MTcgMzguNTAyOVoiIGZpbGw9IiNFRUVFRUUiLz4KPC9nPgo8cGF0aCBkPSJNNC41NjQ5NCAxMjYuNDE4TDM5LjMzNTkgOTIuMDU0OEM1NC4xODkyIDc3LjM3NTYgNzguMTMwMSA3Ny41MTY4IDkyLjgwOTIgOTIuMzcwMVY5Mi4zNzAxTDMxLjE0MzkgMTUzLjMxMkw0LjU2NDk0IDEyNi40MThaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMjM2N18xNTk4KSIvPgo8cGF0aCBkPSJNLTIzLjkwMTQgOTguMDQyTDM3LjUwNjQgMzcuMzU0NEM1Mi41NTc5IDUyLjU4NDUgNTIuNDEzMSA3Ny4xMzI2IDM3LjE4MyA5Mi4xODQxTDMuMzUxNzkgMTI1LjYxOUwtMjMuOTAxNCA5OC4wNDJaIiBmaWxsPSJ1cmwoI3BhaW50Ml9saW5lYXJfMjM2N18xNTk4KSIvPgo8L2c+CjwvZz4KPGRlZnM+CjxmaWx0ZXIgaWQ9ImZpbHRlcjBfZF8yMzY3XzE1OTgiIHg9Ii0yNy45MDE0IiB5PSIzNy4yMDciIHdpZHRoPSIxMjQuNzExIiBoZWlnaHQ9IjEyNC4xMDQiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4yNSAwIi8+CjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0iZWZmZWN0MV9kcm9wU2hhZG93XzIzNjdfMTU5OCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd18yMzY3XzE1OTgiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yMzY3XzE1OTgiIHgxPSI2LjAwMjYzIiB5MT0iNiIgeDI9IjEyMy45OTciIHkyPSIxMjQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzI4MDBGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwOERBQ0YiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDFfbGluZWFyXzIzNjdfMTU5OCIgeDE9Ijc5Ljk2OTMiIHkxPSI3OS4zNzc5IiB4Mj0iNzYuMjk3NCIgeTI9IjE0Mi44MTkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzI4MDBGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwOERBQ0YiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyXzIzNjdfMTU5OCIgeDE9IjUwLjkzMjkiIHkxPSI1MC45NDAzIiB4Mj0iNDcuMTg1MiIgeTI9IjExNS4zNjQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzI4MDBGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwOERBQ0YiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMzY3XzE1OTgiPgo8cmVjdCB3aWR0aD0iMTE4IiBoZWlnaHQ9IjExOCIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYgNikiLz4KPC9jbGlwUGF0aD4KPGNsaXBQYXRoIGlkPSJjbGlwMV8yMzY3XzE1OTgiPgo8cGF0aCBkPSJNNiA2SDk0QzExMC41NjkgNiAxMjQgMTkuNDMxNSAxMjQgMzZWOTRDMTI0IDExMC41NjkgMTEwLjU2OSAxMjQgOTQgMTI0SDZWNloiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==',\r\n APP_TEXT_LOGO:\r\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDc3IiBoZWlnaHQ9Ijk0IiB2aWV3Qm94PSIwIDAgNDc3IDk0IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNNDUzLjkzMiA4Ny4wMjZDNDUyLjI0OSA4Ny4wMjYgNDUxLjI4NyA4Ni40MjUgNDUwLjA4NSA4NS4yMjI5TDQ0My43MTQgNzkuODEzNkM0NDIuNTEyIDc4LjYxMTUgNDQxLjkxMSA3Ny4yODkyIDQ0MS45MTEgNzUuNDg2MVY0MC44NjYySDQzMy42MTdWMzIuNDUxNkw0NDkuMTI0IDE1LjAyMTVINDUzLjIxMVYzMS4yNDk2SDQ3MC42NDFWNDAuODY2Mkg0NTMuMjExVjc2LjY4ODJINDcxLjAwMlY4Ny4wMjZINDUzLjkzMloiIGZpbGw9IiMyODAwRkYiLz4KPHBhdGggZD0iTTM3NS44MTkgODcuMDE4N0MzNzQuNjE3IDg3LjAxODcgMzczLjA1NCA4Ni42NTggMzcxLjQ5MiA4NS4wOTUzTDM2Ni4yMDIgNzkuODA2MkMzNjUuMTIgNzguNjA0MSAzNjQuNjQgNzcuMDQxNCAzNjQuNjQgNzUuNTk4OVY0Mi42NjE5QzM2NC42NCA0MC45NzkgMzY1LjI0MSAzOS41MzY1IDM2Ni4yMDIgMzguNDU0N0wzNzEuNDkyIDMzLjE2NTVDMzcyLjkzNCAzMS43MjMgMzc0LjQ5NyAzMS4yNDIyIDM3NS44MTkgMzEuMjQyMkg0MTAuNjhDNDEyLjM2MyAzMS4yNDIyIDQxMy42ODUgMzEuODQzMiA0MTQuODg3IDMzLjA0NTNMNDIwLjI5NiAzOC4zMzQ0QzQyMS42MTkgMzkuNjU2NyA0MjIuMSA0MC45NzkgNDIyLjEgNDIuNjYxOVY3NS41OTg5QzQyMi4xIDc3LjI4MTggNDIxLjYxOSA3OC42MDQxIDQyMC4yOTYgNzkuOTI2NEw0MTQuODg3IDg1LjIxNTVDNDEzLjY4NSA4Ni40MTc2IDQxMi4zNjMgODcuMDE4NyA0MTAuNjggODcuMDE4N0gzNzUuODE5Wk0zNzUuOTM5IDc2LjgwMUg0MTAuOFY0MS40NTk5SDM3NS45MzlWNzYuODAxWiIgZmlsbD0iIzI4MDBGRiIvPgo8cGF0aCBkPSJNMzQ5LjY0NCAzOC40NTYxQzM1MC44NDYgMzkuNzc4NCAzNTEuNDQ3IDQxLjEwMDcgMzUxLjQ0NyA0Mi43ODM2Vjc1LjYwMDRDMzUxLjQ0NyA3Ny4yODMzIDM1MC44NDYgNzguNjA1NiAzNDkuNjQ0IDc5LjkyNzlMMzQ0LjIzNCA4NS4yMTdDMzQzLjAzMiA4Ni41MzkzIDM0MS40NyA4Ny4wMjAxIDMzOS45MDcgODcuMDIwMUgzMTQuOTAzQzMxMi42MTkgODcuMDIwMSAzMTEuMjk3IDg2LjQxOTEgMzA5LjQ5NCA4NC40OTU4TDMwNi4xMjggODAuODg5NVY4Ny4wMjAxSDI5NC45NDlWNkgzMDYuMTI4VjM3LjM3NDNMMzA5LjQ5NCAzMy44ODgyQzMxMS40MTcgMzEuODQ0NyAzMTIuNjE5IDMxLjM2MzkgMzE0LjkwMyAzMS4zNjM5SDMzOS45MDdDMzQxLjU5IDMxLjM2MzkgMzQzLjAzMiAzMS44NDQ3IDM0NC4yMzQgMzMuMDQ2OEwzNDkuNjQ0IDM4LjQ1NjFaTTM0MC4xNDcgNzYuODAyNVY0MS40NjEzSDMwNi4xMjhWNzYuODAyNUgzNDAuMTQ3WiIgZmlsbD0iIzI4MDBGRiIvPgo8cGF0aCBkPSJNMjc2LjUxMiAzOC40NTYxQzI3Ny43MTQgMzkuNzc4NCAyNzguMzE1IDQxLjEwMDcgMjc4LjMxNSA0Mi43ODM2Vjg3LjAyMDFIMjY3LjAxNlY0MS40NjEzSDIzMi44NzZWODcuMDIwMUgyMjEuNjk3VjZIMjMyLjg3NlYzNy40OTQ1TDIzNi4zNjIgMzMuODg4MkMyMzguNDA2IDMxLjg0NDcgMjM5LjQ4OCAzMS4zNjM5IDI0MS43NzIgMzEuMzYzOUgyNjYuNzc1QzI2OC40NTggMzEuMzYzOSAyNjkuOTAxIDMxLjg0NDcgMjcxLjEwMyAzMy4wNDY4TDI3Ni41MTIgMzguNDU2MVoiIGZpbGw9IiMyODAwRkYiLz4KPHBhdGggZD0iTTE2MC4wNTUgODcuMDE4N0MxNTguODUzIDg3LjAxODcgMTU3LjI5IDg2LjY1OCAxNTUuNzI3IDg1LjA5NTNMMTUwLjQzOCA3OS44MDYyQzE0OS4zNTYgNzguNjA0MSAxNDguODc1IDc3LjA0MTQgMTQ4Ljg3NSA3NS41OTg5VjQyLjY2MTlDMTQ4Ljg3NSA0MC45NzkgMTQ5LjQ3NyAzOS41MzY1IDE1MC40MzggMzguNDU0N0wxNTUuNzI3IDMzLjE2NTVDMTU3LjE3IDMxLjcyMyAxNTguNzMzIDMxLjI0MjIgMTYwLjA1NSAzMS4yNDIySDE5NC45MTZDMTk2LjU5OCAzMS4yNDIyIDE5Ny45MjEgMzEuODQzMiAxOTkuMTIzIDMzLjA0NTNMMjA0LjUzMiAzOC4zMzQ0QzIwNS44NTUgMzkuNjU2NyAyMDYuMzM1IDQwLjk3OSAyMDYuMzM1IDQyLjY2MTlWNzUuNTk4OUMyMDYuMzM1IDc3LjI4MTggMjA1Ljg1NSA3OC42MDQxIDIwNC41MzIgNzkuOTI2NEwxOTkuMTIzIDg1LjIxNTVDMTk3LjkyMSA4Ni40MTc2IDE5Ni41OTggODcuMDE4NyAxOTQuOTE2IDg3LjAxODdIMTYwLjA1NVpNMTYwLjE3NSA3Ni44MDFIMTk1LjAzNlY0MS40NTk5SDE2MC4xNzVWNzYuODAxWiIgZmlsbD0iIzI4MDBGRiIvPgo8cGF0aCBkPSJNODguOTE0OCA4Ny4wMTg3Qzg3LjcxMjcgODcuMDE4NyA4Ni4xNSA4Ni42NTggODQuNTg3MyA4NS4wOTUzTDc5LjI5ODEgNzkuODA2MkM3OC4yMTYyIDc4LjYwNDEgNzcuNzM1NCA3Ny4wNDE0IDc3LjczNTQgNzUuNTk4OVY0Mi42NjE5Qzc3LjczNTQgNDAuOTc5IDc4LjMzNjQgMzkuNTM2NSA3OS4yOTgxIDM4LjQ1NDdMODQuNTg3MyAzMy4xNjU1Qzg2LjAyOTggMzEuNzIzIDg3LjU5MjUgMzEuMjQyMiA4OC45MTQ4IDMxLjI0MjJIMTIzLjc3NUMxMjUuNDU4IDMxLjI0MjIgMTI2Ljc4MSAzMS44NDMyIDEyNy45ODMgMzMuMDQ1M0wxMzMuMzkyIDM4LjMzNDRDMTM0LjcxNCAzOS42NTY3IDEzNS4xOTUgNDAuOTc5IDEzNS4xOTUgNDIuNjYxOVY3NS41OTg5QzEzNS4xOTUgNzcuMjgxOCAxMzQuNzE0IDc4LjYwNDEgMTMzLjM5MiA3OS45MjY0TDEyNy45ODMgODUuMjE1NUMxMjYuNzgxIDg2LjQxNzYgMTI1LjQ1OCA4Ny4wMTg3IDEyMy43NzUgODcuMDE4N0g4OC45MTQ4Wk04OS4wMzUgNzYuODAxSDEyMy44OTZWNDEuNDU5OUg4OS4wMzVWNzYuODAxWiIgZmlsbD0iIzI4MDBGRiIvPgo8cGF0aCBkPSJNNTEuMTk4NiA2SDYyLjM3OFY4Ny4wMjAxSDUxLjE5ODZWODAuODg5NUw0Ny44MzI3IDg0LjQ5NThDNDYuMDI5NiA4Ni40MTkxIDQ0LjcwNzMgODcuMDIwMSA0Mi40MjMzIDg3LjAyMDFIMTcuNDE5OUMxNS44NTcxIDg3LjAyMDEgMTQuMjk0NCA4Ni41MzkzIDEzLjA5MjMgODUuMjE3TDcuODAzMTQgNzkuOTI3OUM2LjQ4MDg0IDc4LjYwNTYgNiA3Ny4yODMzIDYgNzUuNjAwNFY0Mi43ODM2QzYgNDEuMTAwNyA2LjQ4MDg0IDM5Ljc3ODQgNy44MDMxNCAzOC40NTYxTDEzLjA5MjMgMzMuMDQ2OEMxNC4yOTQ0IDMxLjg0NDcgMTUuNzM2OSAzMS4zNjM5IDE3LjQxOTkgMzEuMzYzOUg0Mi40MjMzQzQ0LjcwNzMgMzEuMzYzOSA0NS45MDk0IDMxLjg0NDcgNDcuODMyNyAzMy44ODgyTDUxLjE5ODYgMzcuMzc0M1Y2Wk0xNy4xNzk0IDc2LjgwMjVINTEuMTk4NlY0MS40NjEzSDE3LjE3OTRWNzYuODAyNVoiIGZpbGw9IiMyODAwRkYiLz4KPHBhdGggZD0iTTIxLjgzMyA1OC4xNTYySDI3LjQyMTNWNjMuNzQ0NUgyMS44MzNWNTguMTU2MloiIGZpbGw9IiMyODAwRkYiLz4KPHBhdGggZD0iTTMxLjE0NiA1OC4xNTYySDM2LjczNDNWNjMuNzQ0NUgzMS4xNDZWNTguMTU2MloiIGZpbGw9IiMyODAwRkYiLz4KPHBhdGggZD0iTTQwLjQ1ODUgNTguMTU2Mkg0Ni4wNDY4VjYzLjc0NDVINDAuNDU4NVY1OC4xNTYyWiIgZmlsbD0iIzI4MDBGRiIvPgo8ZWxsaXBzZSBjeD0iMzg3LjA4MiIgY3k9IjU5LjI1NTIiIHJ4PSIzLjg5NDg3IiByeT0iMy44OTQ4NSIgZmlsbD0iIzI4MDBGRiIvPgo8ZWxsaXBzZSBjeD0iNDAwLjcxMyIgY3k9IjU5LjI1NTIiIHJ4PSIzLjg5NDg3IiByeT0iMy44OTQ4NSIgZmlsbD0iIzI4MDBGRiIvPgo8ZWxsaXBzZSBjeD0iMzkzLjE5MiIgY3k9IjkuOTE4MjgiIHJ4PSIzLjcwNTQxIiByeT0iMy43MDUzOSIgZmlsbD0iIzI4MDBGRiIvPgo8cGF0aCBkPSJNMzgwLjIyNCAyOS4zNjkxQzM4MC4yMjQgMjguMTAyNCAzODEuNTUxIDI3LjAzMjQgMzgzLjkxMyAyNi4xMzY2QzM4Ni4yNzUgMjUuMjQwOSAzODkuNDc5IDI0LjczNzcgMzkyLjgxOSAyNC43Mzc3QzM5Ni4xNiAyNC43Mzc3IDM5OS4zNjMgMjUuMjQwOSA0MDEuNzI1IDI2LjEzNjZDNDA0LjA4OCAyNy4wMzI0IDQwNS4yMzQgMjguMTAyNCA0MDUuMjM0IDI5LjM2OTFIMzkyLjcyOUgzODAuMjI0WiIgZmlsbD0iIzI4MDBGRiIvPgo8cmVjdCB4PSIzOTEuMzQiIHk9IjEwLjg0MzgiIHdpZHRoPSIzLjcwNTQxIiBoZWlnaHQ9IjE1Ljc0NzkiIGZpbGw9IiMyODAwRkYiLz4KPC9zdmc+Cg==',\r\n APP_HEADER_LOGO:\r\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjI2IiBoZWlnaHQ9IjEzMCIgdmlld0JveD0iMCAwIDYyNiAxMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8yMzY3XzE1OTcpIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAxXzIzNjdfMTU5NykiPgo8cGF0aCBkPSJNNiA2SDEyNFYxMjRINlY2WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzIzNjdfMTU5NykiLz4KPGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjBfZF8yMzY3XzE1OTcpIj4KPHBhdGggZD0iTTkxLjQ3MTcgMzguNTAyOUM3Ny43OTcgNTMuMzc4NCA3Ny44NTYyIDc2LjI2NzYgOTEuNjA3NCA5MS4wNzIzTDkyLjgwNDcgOTIuMzYxM0w5Mi43NzM0IDkyLjMzMkw5Mi44MDk2IDkyLjM2OTFMMzEuMTQzNiAxNTMuMzEyTDE0LjIzOTMgMTM2LjIwN0wxMy4zNDM4IDEzNy4wOTNMLTcgMTE2LjUwN0wtNi4zMTkzNCAxMTUuODMzTC0yMy45MDE0IDk4LjA0MkwzNy41MDY4IDM3LjM1NDVMMzcuNjE0MyAzNy40NjI5TDM3LjUwODggMzcuMzQ5NkwzOC44MDQ3IDM4LjU0MUM1My42Nzg4IDUyLjIxNjUgNzYuNTY4NSA1Mi4xNTYxIDkxLjM3MyAzOC40MDUzTDkyLjY2MzEgMzcuMjA3TDkxLjQ3MTcgMzguNTAyOVoiIGZpbGw9IiNFRUVFRUUiLz4KPC9nPgo8cGF0aCBkPSJNNC41NjQ5NCAxMjYuNDE4TDM5LjMzNTkgOTIuMDU0OEM1NC4xODkyIDc3LjM3NTYgNzguMTMwMSA3Ny41MTY4IDkyLjgwOTIgOTIuMzcwMVY5Mi4zNzAxTDMxLjE0MzkgMTUzLjMxMkw0LjU2NDk0IDEyNi40MThaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMjM2N18xNTk3KSIvPgo8cGF0aCBkPSJNLTIzLjkwMTQgOTguMDQyTDM3LjUwNjQgMzcuMzU0NEM1Mi41NTc5IDUyLjU4NDUgNTIuNDEzMSA3Ny4xMzI2IDM3LjE4MyA5Mi4xODQxTDMuMzUxNzkgMTI1LjYxOUwtMjMuOTAxNCA5OC4wNDJaIiBmaWxsPSJ1cmwoI3BhaW50Ml9saW5lYXJfMjM2N18xNTk3KSIvPgo8L2c+CjwvZz4KPHBhdGggZD0iTTYwMi4yMTEgNTcuMjVINjE5LjY0MVY2Ni44NjYySDYwMi4yMTFWMTAyLjY4OEg2MjAuMDAyVjExMy4wMjZINjAyLjkzMkM2MDEuMjQ5IDExMy4wMjYgNjAwLjI4NyAxMTIuNDI1IDU5OS4wODUgMTExLjIyM0w1OTIuNzE0IDEwNS44MTNDNTkxLjUxMiAxMDQuNjEyIDU5MC45MTEgMTAzLjI4OSA1OTAuOTExIDEwMS40ODZWNjYuODY2Mkg1ODIuNjE3VjU4LjQ1MTJMNTk4LjEyNCA0MS4wMjE1SDYwMi4yMTFWNTcuMjVaTTIxMS4zNzggMTEzLjAyMUgyMDAuMTk4VjEwNi44OUwxOTYuODMzIDExMC40OTZDMTk1LjAzIDExMi40MTkgMTkzLjcwNyAxMTMuMDIxIDE5MS40MjMgMTEzLjAyMUgxNjYuNDJDMTY0Ljg1NyAxMTMuMDIxIDE2My4yOTUgMTEyLjUzOSAxNjIuMDkzIDExMS4yMTdMMTU2LjgwMyAxMDUuOTI4QzE1NS40ODEgMTA0LjYwNiAxNTUgMTAzLjI4MyAxNTUgMTAxLjYwMVY2OC43ODMyQzE1NSA2Ny4xMDA2IDE1NS40ODEgNjUuNzc4MiAxNTYuODAzIDY0LjQ1NjFMMTYyLjA5MyA1OS4wNDY5QzE2My4yOTUgNTcuODQ0OSAxNjQuNzM3IDU3LjM2NDMgMTY2LjQyIDU3LjM2NDNIMTkxLjQyM0MxOTMuNzA3IDU3LjM2NDMgMTk0LjkxIDU3Ljg0NTEgMTk2LjgzMyA1OS44ODg3TDIwMC4xOTggNjMuMzc0VjMySDIxMS4zNzhWMTEzLjAyMVpNMzgxLjg3NiA2My40OTQxTDM4NS4zNjIgNTkuODg4N0MzODcuNDA2IDU3Ljg0NTIgMzg4LjQ4OCA1Ny4zNjQzIDM5MC43NzEgNTcuMzY0M0g0MTUuNzc1QzQxNy40NTggNTcuMzY0MyA0MTguOTAxIDU3Ljg0NDkgNDIwLjEwMyA1OS4wNDY5TDQyNS41MTIgNjQuNDU2MUM0MjYuNzE0IDY1Ljc3ODIgNDI3LjMxNSA2Ny4xMDA1IDQyNy4zMTUgNjguNzgzMlYxMTMuMDIxSDQxNi4wMTZWNjcuNDYwOUgzODEuODc2VjExMy4wMjFIMzcwLjY5N1YzMkgzODEuODc2VjYzLjQ5NDFaTTQ1NS4xMjggNjMuMzc0TDQ1OC40OTQgNTkuODg4N0M0NjAuNDE3IDU3Ljg0NTIgNDYxLjYxOSA1Ny4zNjQzIDQ2My45MDMgNTcuMzY0M0g0ODguOTA3QzQ5MC41OSA1Ny4zNjQzIDQ5Mi4wMzIgNTcuODQ0OSA0OTMuMjM0IDU5LjA0NjlMNDk4LjY0NCA2NC40NTYxQzQ5OS44NDYgNjUuNzc4MiA1MDAuNDQ3IDY3LjEwMDUgNTAwLjQ0NyA2OC43ODMyVjEwMS42MDFDNTAwLjQ0NyAxMDMuMjgzIDQ5OS44NDYgMTA0LjYwNiA0OTguNjQ0IDEwNS45MjhMNDkzLjIzNCAxMTEuMjE3QzQ5Mi4wMzIgMTEyLjUzOSA0OTAuNDcgMTEzLjAyIDQ4OC45MDcgMTEzLjAyMUg0NjMuOTAzQzQ2MS42MiAxMTMuMDIgNDYwLjI5NyAxMTIuNDE5IDQ1OC40OTQgMTEwLjQ5Nkw0NTUuMTI4IDEwNi44OVYxMTMuMDIxSDQ0My45NDlWMzJINDU1LjEyOFY2My4zNzRaTTI3Mi43NzUgNTcuMjQyMkMyNzQuNDU4IDU3LjI0MjIgMjc1Ljc4IDU3Ljg0MzEgMjc2Ljk4MiA1OS4wNDQ5TDI4Mi4zOTMgNjQuMzM0QzI4My43MTUgNjUuNjU2MyAyODQuMTk1IDY2Ljk3OTIgMjg0LjE5NSA2OC42NjIxVjEwMS41OTlDMjg0LjE5NSAxMDMuMjgyIDI4My43MTUgMTA0LjYwNCAyODIuMzkzIDEwNS45MjdMMjc2Ljk4MiAxMTEuMjE2QzI3NS43OCAxMTIuNDE4IDI3NC40NTggMTEzLjAxOSAyNzIuNzc1IDExMy4wMTlIMjM3LjkxNUMyMzYuNzEzIDExMy4wMTkgMjM1LjE1IDExMi42NTggMjMzLjU4NyAxMTEuMDk2TDIyOC4yOTggMTA1LjgwN0MyMjcuMjE2IDEwNC42MDUgMjI2LjczNSAxMDMuMDQxIDIyNi43MzUgMTAxLjU5OVY2OC42NjIxQzIyNi43MzUgNjYuOTc5NCAyMjcuMzM2IDY1LjUzNjkgMjI4LjI5OCA2NC40NTUxTDIzMy41ODcgNTkuMTY1QzIzNS4wMjkgNTcuNzIyNiAyMzYuNTkzIDU3LjI0MjIgMjM3LjkxNSA1Ny4yNDIySDI3Mi43NzVaTTM0My45MTYgNTcuMjQyMkMzNDUuNTk5IDU3LjI0MjMgMzQ2LjkyMSA1Ny44NDMgMzQ4LjEyMyA1OS4wNDQ5TDM1My41MzIgNjQuMzM0QzM1NC44NTUgNjUuNjU2MyAzNTUuMzM1IDY2Ljk3OTIgMzU1LjMzNSA2OC42NjIxVjEwMS41OTlDMzU1LjMzNSAxMDMuMjgyIDM1NC44NTUgMTA0LjYwNCAzNTMuNTMyIDEwNS45MjdMMzQ4LjEyMyAxMTEuMjE2QzM0Ni45MjEgMTEyLjQxOCAzNDUuNTk5IDExMy4wMTggMzQzLjkxNiAxMTMuMDE5SDMwOS4wNTVDMzA3Ljg1MyAxMTMuMDE5IDMwNi4yOSAxMTIuNjU4IDMwNC43MjggMTExLjA5NkwyOTkuNDM4IDEwNS44MDdDMjk4LjM1NyAxMDQuNjA1IDI5Ny44NzYgMTAzLjA0MSAyOTcuODc2IDEwMS41OTlWNjguNjYyMUMyOTcuODc2IDY2Ljk3OTMgMjk4LjQ3NyA2NS41MzY5IDI5OS40MzggNjQuNDU1MUwzMDQuNzI4IDU5LjE2NUMzMDYuMTcgNTcuNzIyOSAzMDcuNzMzIDU3LjI0MjIgMzA5LjA1NSA1Ny4yNDIySDM0My45MTZaTTU1OS42OCA1Ny4yNDIyQzU2MS4zNjIgNTcuMjQyMiA1NjIuNjg1IDU3Ljg0MzEgNTYzLjg4NyA1OS4wNDQ5TDU2OS4yOTcgNjQuMzM0QzU3MC42MTkgNjUuNjU2MyA1NzEuMSA2Ni45NzkyIDU3MS4xIDY4LjY2MjFWMTAxLjU5OUM1NzEuMSAxMDMuMjgyIDU3MC42MTkgMTA0LjYwNCA1NjkuMjk3IDEwNS45MjdMNTYzLjg4NyAxMTEuMjE2QzU2Mi42ODUgMTEyLjQxOCA1NjEuMzYyIDExMy4wMTkgNTU5LjY4IDExMy4wMTlINTI0LjgxOUM1MjMuNjE3IDExMy4wMTkgNTIyLjA1NCAxMTIuNjU4IDUyMC40OTEgMTExLjA5Nkw1MTUuMjAyIDEwNS44MDdDNTE0LjEyIDEwNC42MDUgNTEzLjY0IDEwMy4wNDEgNTEzLjY0IDEwMS41OTlWNjguNjYyMUM1MTMuNjQgNjYuOTc5NCA1MTQuMjQxIDY1LjUzNjkgNTE1LjIwMiA2NC40NTUxTDUyMC40OTEgNTkuMTY1QzUyMS45MzQgNTcuNzIyNiA1MjMuNDk3IDU3LjI0MjIgNTI0LjgxOSA1Ny4yNDIySDU1OS42OFpNMTY2LjE4IDEwMi44MDNIMjAwLjE5OFY2Ny40NjA5SDE2Ni4xOFYxMDIuODAzWk00NTUuMTI4IDEwMi44MDNINDg5LjE0N1Y2Ny40NjA5SDQ1NS4xMjhWMTAyLjgwM1pNMjM4LjAzNSAxMDIuODAxSDI3Mi44OTZWNjcuNDZIMjM4LjAzNVYxMDIuODAxWk0zMDkuMTc1IDEwMi44MDFIMzQ0LjAzNlY2Ny40NkgzMDkuMTc1VjEwMi44MDFaTTUyNC45MzkgMTAyLjgwMUg1NTkuOFY2Ny40Nkg1MjQuOTM5VjEwMi44MDFaTTE3Ni40MjEgODkuNzQ0MUgxNzAuODMzVjg0LjE1NjJIMTc2LjQyMVY4OS43NDQxWk0xODUuNzM0IDg5Ljc0NDFIMTgwLjE0NlY4NC4xNTYySDE4NS43MzRWODkuNzQ0MVpNMTk1LjA0NyA4OS43NDQxSDE4OS40NTlWODQuMTU2MkgxOTUuMDQ3Vjg5Ljc0NDFaTTUzNi4wODIgODEuMzYwNEM1MzguMjMzIDgxLjM2MDQgNTM5Ljk3OCA4My4xMDQ4IDUzOS45NzggODUuMjU1OUM1MzkuOTc3IDg3LjQwNjggNTM4LjIzMyA4OS4xNTA0IDUzNi4wODIgODkuMTUwNEM1MzMuOTMxIDg5LjE1MDIgNTMyLjE4OCA4Ny40MDY3IDUzMi4xODggODUuMjU1OUM1MzIuMTg4IDgzLjEwNDkgNTMzLjkzMSA4MS4zNjA1IDUzNi4wODIgODEuMzYwNFpNNTQ5LjcxMyA4MS4zNjA0QzU1MS44NjQgODEuMzYwNCA1NTMuNjA3IDgzLjEwNDggNTUzLjYwNyA4NS4yNTU5QzU1My42MDcgODcuNDA2OCA1NTEuODY0IDg5LjE1MDQgNTQ5LjcxMyA4OS4xNTA0QzU0Ny41NjIgODkuMTUwNCA1NDUuODE5IDg3LjQwNjggNTQ1LjgxOCA4NS4yNTU5QzU0NS44MTggODMuMTA0OCA1NDcuNTYyIDgxLjM2MDQgNTQ5LjcxMyA4MS4zNjA0Wk01NDIuMTkyIDMyLjIxMjlDNTQ0LjIzOSAzMi4yMTI5IDU0NS44OTcgMzMuODcxNyA1NDUuODk3IDM1LjkxOEM1NDUuODk3IDM3LjI4OTIgNTQ1LjE1MiAzOC40ODUyIDU0NC4wNDUgMzkuMTI2VjUwLjgxNDVDNTQ2LjU1OSA1MC45ODU2IDU0OC44OTUgNTEuNDQyNSA1NTAuNzI2IDUyLjEzNjdDNTUzLjA4NyA1My4wMzI0IDU1NC4yMzQgNTQuMTAyNiA1NTQuMjM0IDU1LjM2OTFINTI5LjIyNEM1MjkuMjI0IDU0LjEwMjYgNTMwLjU1MSA1My4wMzI0IDUzMi45MTMgNTIuMTM2N0M1MzQuOTI0IDUxLjM3NDMgNTM3LjU0NCA1MC44OTc4IDU0MC4zNCA1MC43NzI1VjM5LjEyN0M1MzkuMjMyIDM4LjQ4NjIgNTM4LjQ4NyAzNy4yODk0IDUzOC40ODcgMzUuOTE4QzUzOC40ODcgMzMuODcxNyA1NDAuMTQ2IDMyLjIxMjkgNTQyLjE5MiAzMi4yMTI5WiIgZmlsbD0iIzI4MDBGRiIvPgo8ZGVmcz4KPGZpbHRlciBpZD0iZmlsdGVyMF9kXzIzNjdfMTU5NyIgeD0iLTI3LjkwMTQiIHk9IjM3LjIwNyIgd2lkdGg9IjEyNC43MTEiIGhlaWdodD0iMTI0LjEwNCIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVDb2xvck1hdHJpeCBpbj0iU291cmNlQWxwaGEiIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIgcmVzdWx0PSJoYXJkQWxwaGEiLz4KPGZlT2Zmc2V0IGR5PSI0Ii8+CjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjIiLz4KPGZlQ29tcG9zaXRlIGluMj0iaGFyZEFscGhhIiBvcGVyYXRvcj0ib3V0Ii8+CjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjI1IDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfMjM2N18xNTk3Ii8+CjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iZWZmZWN0MV9kcm9wU2hhZG93XzIzNjdfMTU5NyIgcmVzdWx0PSJzaGFwZSIvPgo8L2ZpbHRlcj4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzIzNjdfMTU5NyIgeDE9IjYuMDAyNjMiIHkxPSI2IiB4Mj0iMTIzLjk5NyIgeTI9IjEyNCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMjgwMEZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzA4REFDRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MV9saW5lYXJfMjM2N18xNTk3IiB4MT0iNzkuOTY5MyIgeTE9Ijc5LjM3NzkiIHgyPSI3Ni4yOTc0IiB5Mj0iMTQyLjgxOSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMjgwMEZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzA4REFDRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50Ml9saW5lYXJfMjM2N18xNTk3IiB4MT0iNTAuOTMyOSIgeTE9IjUwLjk0MDMiIHgyPSI0Ny4xODUyIiB5Mj0iMTE1LjM2NCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMjgwMEZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzA4REFDRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzIzNjdfMTU5NyI+CjxyZWN0IHdpZHRoPSIxMTgiIGhlaWdodD0iMTE4IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNiA2KSIvPgo8L2NsaXBQYXRoPgo8Y2xpcFBhdGggaWQ9ImNsaXAxXzIzNjdfMTU5NyI+CjxwYXRoIGQ9Ik02IDZIOTRDMTEwLjU2OSA2IDEyNCAxOS40MzE1IDEyNCAzNlY5NEMxMjQgMTEwLjU2OSAxMTAuNTY5IDEyNCA5NCAxMjRINlY2WiIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K',\r\n USER_AVATAR:\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMMAAADDCAYAAAA/f6WqAAAACXBIWXMAACxLAAAsSwGlPZapAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAmfSURBVHgB7d09b1TZHcfx/7nz4OniMl1GImlWKHilJUq34wJMt14tJtthF5EMKYBXwPAKsIsAUgqGLjK7WlPFkIJJlUhBwSuFKMUSXbp0cYoo43m4Z8+5Hu+y83jOnRnPte/302DJ14A885vz/D8iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAMlOBGV1duLhcL/yjnJLelIliQIfiSiy/1PqlDr6J1otR909P7e7qNQcCIIwwzZACwU/n9dJFjVIkvml70o/kLzMtWVjp7sffGoLpgZwjADV65uVrRSd82XFZmuUFSwq5qdbVqM6SMMUzTDEAygaqoV3SMU00MYpuDK55tl3VGP5URC8AOmpZDt5zsPtwQTIwwTWvnVzVs60tWE44FpCVVLL9NKTIYwJBQPjouHj0XLqqRDaGap7rz48uGuIJGcwJvtFuVU58/my19KeiwqJZ+fO/8Lefvmr38SeCMMnrrjg5fmy7KkkGnqKwQiGbpJHqYRBLPecKC01EXrdyqQ/fe/F2kpm+8tilIXzCtTkQmYWa3qi50H9wTOCIOjowW0w9eSIAg2AIHW2+bLuuvCmf33SoXGqtbqetJgKBWs7+389onACWFwdPnqZk0p88b0E5p+fHVv5+FEb0jbIkVtqSb49w8iaS//8env9gVjEQYHdvrU9GG85vKV1vca7dJWfXfrQKYkYTctPGwtfDjN/8dZRRjGiD+VO+q1xzpCaD6NP53lp/HKZ5tbEqhbzj+gZMsszN0RjBQIRoq7Jx5BsItfs+6WPP/y0W3b8jj/gJbbl9Z+vSQYiTCMYPcaefTTT3QV2AzEqz6BCCR/XzASYRihu+nOxVy2Q3gGomLDLRiKMAxxae2m7VZUXJ41b8iNee0LsoEwf9RdnvUIdyYRhiGUjm47PRjp7XkfulE5vWHXMhwerdj1C8FAhGGA+A2j1CcOj4aqI3PfPr33e9MqHS3qjVXMN9xCnkGEYYBi7rDiMoMUL6ilZNt006xpuLQOZkLgY8FAhGEQpV22ZR9IU6dmM1y8qObWOtBVGoIwDOD26al203aYJshLzeW5QqGRljMYqUIYenQ/NcvjnrPVKiRl7NhBaxm74BfYUjXoQxh6lPINpzdKo11K5eY3M807vusWpPMsxrwRhh5aIpcw7Kd141sUiENI1QVBH8LQQ0vgMLjU7yS1ApcWqyzoQxj6lcc+Edkqd+nUahVDl+eYUepHGBLQSlLZRbJcu28laRCGHoQB6CIMCcSH9lPKtfvTkBIn33oQhn7h2CficvLpVCg0yy7PcQy0H2HooSRyeJPo1C5aqWjQnQ99QkEfwtBD61zo8Fg5tbMxyiGoWoeCPoShR1DQLvP0i64r1SfNaV+Vlq8FfQhDj3h/j8NWaJ2egsPfsZU8xOF0nsqp14I+hGEQrZ+NfSZQ19PWVep0HCvvpWjreZoQhgHMolrd4bHFYvHQ5TTciQnE6YxzyD0OgxGGAVqt0q7TqTEtVUmJS2ub6+K0lcSh1csowjCAnYNXIk4b3i5f3azKnNmxgmOrIGk4s51WhGEI13pEZvbm1pXVeOA6N7bqn7i0ClrX6SINRxiG6JZ/qTs8uqgL6uW8BtO2KLJr1T8VqJpgKMIwgke1uvJC4fArOWGXP7ux6lEdPJy0NP5ZRxhG8GgdrMrKtRtfnVQLcfnab66bV++x6/O2MrhgJMIwhnkTuZdyNwtx9nafWY8h4q6Rjmru1cFVjQtLxuOCwzH+9Y+//fvcBx+ZbrmqOP7IouTU6rnzFw/evnk11W0Pdtbo3AcX7XW7PlXxbFHkjW/++YpdqmNwWYmjlbUb9sacivip2zfipDM4tutVLDZvmdmg276Xr5txz/K8a8GeFoTB0YQ3fdbNqnat2Vx45nOOwJaQj4Lg4yQhsOwEQLdKNxwQBg8JrrQapG5mgL7WouqB0gcd1TnItXIHnUJnUUX5sgqin5je65IZgFRkgioWBMEfYfBkr4NSkn85YSBmygThiQnCusALs0me7KxMkNMfSkpPi3VbhHWBN1qGhCYcQ8yGljvPv3jI3qOEaBmSaschCCU9DnQg/5n3PqnTjJbBk53h6d6NVpF0Cs3/rxY0oydsyvNDGBydghD0ikPxYueB+33RGUcYxogXvPKNLY/7oNPGhEKqL9ikNxZhGMHuAdKRrqZ5GtWdqqlWdI+u03CEYQDbGiwUD+0eoNRVwJgQrcQIhKGHXVQLJG/PJpRlCuxZajP3v29rFSl7kYg2M1BtCW2t00FbM+xs0PFqtC0IpkRdMH9HWanpXT1lxhJVxhL9CMN7bLfI47DMcFrXzS/WlmOpT2uTXFwTqSMVrdUn5lWbQoul9k236VO6Td8jDF2Xr928az7Bq5KQbQGCo6tn67PeJWq7caVCY9UE47p5BSuSnN3evUwgjhAGY+XajfueZwTeF9q9QI12aWsela3jzYNtqU4w20UgujIfhpW1m4/N5/q6eDpuCdKyM3TCUBAIyXgYEneNIr192ClV03jHwZW1zXV9VEOpLH4yH4jMhiFhEGyXaCPtJ8fiqeFcoyqBuiV+Mh2ITIYh0ayRkt3D5sLGabrxxrYSkaj7fouGav+wVVzO4s0+mQtDdx3BqyT7aT41lmyruao9f/pgQzImU9Ux7BtD6dwfxOOTUkncLTq1ZwS++furg5/9/KNnZhq2Yj75fuz4Y0s/PX/xv2/fvPqLZEimzjM41yTtioPw9FFNTjl7AUuztbCs3YopH9Fy37aikiGZCYMt2e4z7XhWgnDMjgF8A2G3paT27roZyEQYfEq2x7TcOUtBOHYcCHE/oVcu5htJFyNPnUyEwad7ZAfLZ/kccXz3RE47B8K0pnezcpT0zIchLu3i2j0y06dZqDVkxxB2vcT1eV1QzgWOT7MzHwal867do1A1tXuR4VMuXjg03UHHxytZGDtkoZtUdnkoXlnO2MprtztYd3m2JA3CkA2qltXivGb8sOFymaM9jCRnXAbCMPZ2y9CeDZaMsuMHOTqHMZzW9SxszzjzYWi2S7YrEA77vlJSzfrWZfs7GrH+EKq2ZGJrxpkPw7CpxLhrYNcTOBz//fpDpLePu0xHvx9dz9Iu1kxt1IunWaN82ZaCb7RL+1ncmenCritw8g0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIlW8Bu6/t/+Gd9xUAAAAASUVORK5CYII=',\r\n BOT_AVATAR:\r\n 'data:image/png;base64,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',\r\n};\r\n","import { appConst } from '../constant/constant';\r\nimport { DOOHBOT_API_URL } from './../model/token';\r\n\r\nexport class DoohbotInput {\r\n username = '';\r\n password = '';\r\n authToken?: string;\r\n\r\n DOOHBOT_API_URL?: string;\r\n\r\n // inputs\r\n userAvatarUrl: string = appConst.USER_AVATAR;\r\n\r\n // Application Constants Text\r\n readonly appTitle? = 'DoohBot';\r\n readonly appSubtitle? = 'Welcome to DoohBot';\r\n readonly welcomeDesc? =\r\n 'We provide a powerful live chat platform to help businesses connect with their customers, offer support, and increase sales through real-time conversations.';\r\n readonly chatIcon? = 'chat';\r\n readonly sendIcon? = 'send';\r\n readonly closeIcon? = 'close';\r\n readonly clear? = 'clear_all';\r\n readonly minimizeIcon? = 'remove';\r\n readonly moreIcon? = 'more_vert';\r\n readonly fullscreenIcon? = 'fullscreen';\r\n readonly fullscreenExitIcon? = 'fullscreen_exit';\r\n readonly hintText? = 'Please Enter Here';\r\n readonly errorMessage? = 'The message you submitted was too long.';\r\n\r\n // Application Constants Images\r\n readonly appLogoUrl? = appConst.APP_LOGO;\r\n readonly appTextLogoUrl? = appConst.APP_TEXT_LOGO;\r\n readonly appHeaderLogoUrl? = appConst.APP_HEADER_LOGO;\r\n readonly botAvatarUrl? = appConst.BOT_AVATAR;\r\n}\r\n","export const PredefinedMessages = ['Hello!', 'I need help', 'Contact support', 'News and Updates'];\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-chat-button',\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule],\r\n templateUrl: './chat-button.component.html',\r\n styleUrls: ['./chat-button.component.scss'],\r\n})\r\nexport class ChatButtonComponent {\r\n @Input() buttonStyle: 'fab' | 'sidebar' | 'sidebar-top' | 'sidebar-bottom' = 'fab';\r\n @Input() isChatOpen: boolean = false;\r\n @Input() unreadCount: number = 0;\r\n @Input() chatIcon: string = 'chat';\r\n @Input() appTitle: string = 'Chat';\r\n @Input() appLogoUrl: string = '';\r\n @Input() appTextLogoUrl: string = '';\r\n\r\n @Output() toggle = new EventEmitter<void>();\r\n\r\n get isSidebar(): boolean {\r\n return this.buttonStyle.startsWith('sidebar');\r\n }\r\n\r\n get sidebarPosition(): 'top' | 'center' | 'bottom' {\r\n if (!this.isSidebar) return 'center';\r\n if (this.buttonStyle === 'sidebar') return 'center';\r\n return this.buttonStyle.split('-')[1] as 'top' | 'center' | 'bottom';\r\n }\r\n\r\n onToggle() {\r\n this.toggle.emit();\r\n }\r\n}\r\n","<!-- fab -->\r\n<button class=\"chat-fab\" (click)=\"onToggle()\" *ngIf=\"buttonStyle === 'fab' && !isChatOpen\">\r\n <!-- <mat-icon>{{ chatIcon }}</mat-icon> -->\r\n <img style=\"width: 30px; height: 30px\" [src]=\"appLogoUrl\" />\r\n <!-- <div class=\"chat-logo\"></div> -->\r\n <span class=\"alert-badge\" *ngIf=\"unreadCount > 0\">\r\n {{ unreadCount > 9 ? '9+' : unreadCount }}\r\n </span>\r\n</button>\r\n\r\n<!-- sidebar button -->\r\n<button\r\n class=\"chat-sidebar\"\r\n (click)=\"onToggle()\"\r\n *ngIf=\"isSidebar && !isChatOpen\"\r\n [ngClass]=\"sidebarPosition\"\r\n>\r\n <!-- <h2 style=\"transform: rotate(-90deg); font-size: 16px\">{{ appTitle }}</h2> -->\r\n <img style=\"transform: rotate(-90deg); width: 100px; height: 45px\" [src]=\"appTextLogoUrl\" />\r\n\r\n <span class=\"alert-badge\" *ngIf=\"unreadCount > 0\">\r\n {{ unreadCount > 9 ? '9+' : unreadCount }}\r\n </span>\r\n</button>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-chips',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './chips.component.html',\r\n styleUrls: ['./chips.component.scss'],\r\n})\r\nexport class Chips {\r\n @Input() messages: string[] = []; // messages array\r\n @Input() disabled = false;\r\n @Output() chipClick = new EventEmitter<string>(); // emit clicked chip\r\n\r\n onChipClick(msg: string) {\r\n if (this.disabled) return;\r\n this.chipClick.emit(msg);\r\n }\r\n}\r\n","@if (messages.length > 0) {\r\n <div class=\"predefined-chips\">\r\n @for (msg of messages; track msg) {\r\n <button class=\"chip\" (click)=\"onChipClick(msg)\">\r\n {{ msg }}\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n TrackByFunction,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Chips } from '../../shared/chips/chips.component';\r\nimport { Message } from '../../model/message';\r\n\r\n@Component({\r\n selector: 'app-message-list',\r\n standalone: true,\r\n imports: [CommonModule, Chips],\r\n templateUrl: './message-list.component.html',\r\n styleUrls: ['./message-list.component.scss'],\r\n})\r\nexport class MessageListComponent implements AfterViewInit, OnDestroy {\r\n @Input() messages: Message[] = [];\r\n @Input() isBotTyping: boolean = false;\r\n @Input() appLogoUrl: string = '';\r\n @Input() appSubtitle: string = '';\r\n @Input() welcomeDesc: string = '';\r\n @Input() predefinedMessages: string[] = [];\r\n @Input() botAvatarUrl: string = '';\r\n @Input() userAvatarUrl: string = '';\r\n @Input() userName: string = '';\r\n @Input() isAuthenticated: boolean = false;\r\n @Input() isGuestMode: boolean = false;\r\n @Input() trackByMessageId: TrackByFunction<Message> = (index, item) => item.id ?? index;\r\n\r\n @Output() suggestionClick = new EventEmitter<string>();\r\n @Output() loginClick = new EventEmitter<void>();\r\n @Output() continueAsGuest = new EventEmitter<void>();\r\n\r\n @ViewChild('chatMessages') private chatMessagesContainer!: ElementRef;\r\n private mutationObserver!: MutationObserver;\r\n\r\n appEmoji = {\r\n waveHand: '\\u{1F44B}',\r\n };\r\n\r\n ngAfterViewInit(): void {\r\n if (!this.chatMessagesContainer) return;\r\n\r\n this.mutationObserver = new MutationObserver(() => this.scrollToBottom());\r\n\r\n this.mutationObserver.observe(this.chatMessagesContainer.nativeElement, {\r\n childList: true,\r\n subtree: true,\r\n });\r\n\r\n this.scrollToBottom();\r\n }\r\n\r\n private scrollToBottom(): void {\r\n if (!this.chatMessagesContainer) {\r\n return;\r\n }\r\n const container = this.chatMessagesContainer.nativeElement;\r\n container.scrollTo({\r\n top: container.scrollHeight,\r\n behavior: 'smooth',\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.mutationObserver) {\r\n this.mutationObserver.disconnect();\r\n }\r\n }\r\n\r\n onPredefinedClick(text: string) {\r\n this.suggestionClick.emit(text);\r\n }\r\n}\r\n","<div #chatMessages class=\"chat-messages\">\r\n <!-- Welcome Screen -->\r\n <div class=\"welcome-screen\" *ngIf=\"messages.length === 0 && !isBotTyping\">\r\n <img [src]=\"appLogoUrl\" alt=\"Welcome\" class=\"welcome-image\" style=\"border-radius: 0px\" />\r\n\r\n <!-- Only show greeting if authenticated -->\r\n <h2 class=\"welcome-greeting\" *ngIf=\"userName && isAuthenticated\">\r\n Hi, {{ userName }}!\r\n <!-- <span class=\"emoji\">👋</span> -->\r\n <span class=\"emoji\">{{ appEmoji.waveHand }}</span>\r\n </h2>\r\n\r\n <h3>{{ appSubtitle }}</h3>\r\n <p>{{ welcomeDesc }}</p>\r\n\r\n <!-- Predefined messages chips: Only show when authenticated -->\r\n <app-chips\r\n *ngIf=\"isAuthenticated\"\r\n [messages]=\"predefinedMessages\"\r\n [disabled]=\"isBotTyping\"\r\n (chipClick)=\"onPredefinedClick($event)\"\r\n ></app-chips>\r\n\r\n <!-- Guest Mode Login Button -->\r\n <div *ngIf=\"isGuestMode\" style=\"margin-top: 10px\">\r\n <button class=\"login-btn\" (click)=\"loginClick.emit()\">Login</button>\r\n </div>\r\n\r\n <!-- Fallback / Login Prompts (Below Welcome Text) -->\r\n <div\r\n *ngIf=\"!isAuthenticated && !isGuestMode\"\r\n class=\"auth-buttons-container\"\r\n style=\"margin-top: 20px\"\r\n >\r\n <button (click)=\"loginClick.emit()\" class=\"auth-btn primary\" style=\"margin-right: 10px\">\r\n Login\r\n </button>\r\n <button (click)=\"continueAsGuest.emit()\" class=\"auth-btn secondary\">Continue as Guest</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Chat Messages -->\r\n <div\r\n *ngFor=\"let message of messages; trackBy: trackByMessageId\"\r\n class=\"message-wrapper\"\r\n [class.user]=\"message.sender === 'user'\"\r\n [class.bot]=\"message.sender === 'bot'\"\r\n >\r\n <!-- Bot Avatar -->\r\n <img\r\n *ngIf=\"message.sender === 'bot'\"\r\n class=\"bot-avatar\"\r\n [src]=\"botAvatarUrl\"\r\n alt=\"Bot Avatar\"\r\n />\r\n\r\n <!-- Message Bubble -->\r\n <div\r\n class=\"message\"\r\n [class.user]=\"message.sender === 'user'\"\r\n [class.bot]=\"message.sender === 'bot'\"\r\n >\r\n {{ message.text }}\r\n <!-- Show time below message -->\r\n <div *ngIf=\"message.sender === 'bot'\" class=\"message-time\">\r\n {{ message.timestamp | date: 'shortTime' }}\r\n </div>\r\n </div>\r\n\r\n <!-- User Avatar -->\r\n <div class=\"user-avatar-container\" *ngIf=\"message.sender === 'user'\">\r\n <img class=\"user-avatar\" [src]=\"userAvatarUrl\" alt=\"User Avatar\" />\r\n <!-- <span class=\"user-name\" *ngIf=\"userName\">{{ userName }}</span> -->\r\n </div>\r\n </div>\r\n\r\n <!-- Typing Indicator -->\r\n <div class=\"message-wrapper bot\" *ngIf=\"isBotTyping\">\r\n <img class=\"bot-avatar\" [src]=\"botAvatarUrl\" alt=\"Bot Avatar\" />\r\n <div class=\"message bot\">\r\n <div class=\"typing-indicator\">\r\n <span></span>\r\n <span></span>\r\n <span></span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-message-input',\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule],\r\n templateUrl: './message-input.component.html',\r\n styleUrls: ['./message-input.component.scss'],\r\n})\r\nexport class MessageInputComponent {\r\n @Input() isBotTyping: boolean = false;\r\n @Input() hintText: string = 'Type a message...';\r\n @Input() sendIcon: string = 'send';\r\n\r\n @Output() send = new EventEmitter<string>();\r\n\r\n onSend(text: string) {\r\n if (text.trim()) {\r\n this.send.emit(text);\r\n }\r\n }\r\n}\r\n","<!-- Chat Input -->\r\n<div class=\"chat-input\">\r\n <div class=\"input-wrapper\">\r\n <input #messageInput type=\"text\" [disabled]=\"isBotTyping\"\r\n (keydown.enter)=\"onSend(messageInput.value); messageInput.value = ''\" [placeholder]=\"hintText\" />\r\n\r\n <button [disabled]=\"isBotTyping\" (click)=\"onSend(messageInput.value); messageInput.value = ''\">\r\n <mat-icon>{{ sendIcon }}</mat-icon>\r\n </button>\r\n </div>\r\n</div>","import { Component, Input, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n@Component({\r\n selector: 'app-snackbar',\r\n templateUrl: './snackbar.component.html',\r\n styleUrls: ['./snackbar.component.scss'],\r\n standalone: true,\r\n imports: [MatIconModule],\r\n})\r\nexport class SnackBar implements OnInit, OnDestroy {\r\n @Input() message: string | null = null;\r\n @Input() autoDismiss: boolean = true;\r\n @Input() dismissDelay: number = 5000;\r\n @Input() show: boolean = false;\r\n\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n public timeoutId: number | null = null;\r\n\r\n ngOnInit() {\r\n if (this.autoDismiss) {\r\n this.timeoutId = setTimeout(() => {\r\n this.close();\r\n }, this.dismissDelay) as any;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.clearTimeout();\r\n }\r\n\r\n close() {\r\n this.show = false;\r\n this.message = null;\r\n this.closed.emit();\r\n }\r\n public clearTimeout() {\r\n if (this.timeoutId) {\r\n clearTimeout(this.timeoutId);\r\n this.timeoutId = null;\r\n }\r\n }\r\n}\r\n","<div class=\"message-error\">\r\n <div class=\"error-content\">\r\n <mat-icon class=\"alert-icon\">warning</mat-icon>\r\n <span class=\"error-text\">{{ message }}</span>\r\n </div>\r\n <mat-icon class=\"close-icon\" (click)=\"close()\">close</mat-icon>\r\n</div>\r\n","import { Directive, ElementRef, HostListener, Input, OnInit, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[draggableDialog]',\r\n standalone: true,\r\n})\r\nexport class DraggableDialogDirective implements OnInit {\r\n private isDragging = false;\r\n private startX = 0;\r\n private startY = 0;\r\n private offsetX = 0;\r\n private offsetY = 0;\r\n\r\n @Input('dragHandle') dragHandleSelector: string | undefined;\r\n @Input() enableDrag = false;\r\n\r\n private dragHandle: HTMLElement | undefined;\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2,\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (!this.enableDrag) {\r\n this.el.nativeElement.removeAttribute('draggableDialog');\r\n return;\r\n }\r\n\r\n if (this.dragHandleSelector) {\r\n this.dragHandle = this.el.nativeElement.querySelector(this.dragHandleSelector);\r\n } else {\r\n this.dragHandle = this.el.nativeElement; // fallback\r\n }\r\n if (this.dragHandle) {\r\n this.renderer.setStyle(this.dragHandle, 'cursor', 'move');\r\n }\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n if (!this.dragHandle || event.target !== this.dragHandle) return;\r\n\r\n this.isDragging = true;\r\n this.startX = event.clientX - this.offsetX;\r\n this.startY = event.clientY - this.offsetY;\r\n\r\n event.preventDefault();\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (!this.isDragging) return;\r\n\r\n this.offsetX = event.clientX - this.startX;\r\n this.offsetY = event.clientY - this.startY;\r\n\r\n this.renderer.setStyle(\r\n this.el.nativeElement,\r\n 'transform',\r\n `translate(${this.offsetX}px, ${this.offsetY}px)`,\r\n );\r\n }\r\n\r\n @HostListener('document:mouseup', [])\r\n onMouseUp() {\r\n this.isDragging = false;\r\n }\r\n}\r\n","// resizable-dialog.directive.ts\r\nimport {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n OnInit,\r\n OnDestroy,\r\n HostListener,\r\n Input,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[resizableDialog]',\r\n standalone: true,\r\n})\r\nexport class ResizableDialogDirective implements OnInit, OnDestroy {\r\n private resizeHandles: HTMLElement[] = [];\r\n private activeHandle: string | null = null;\r\n private startX = 0;\r\n private startY = 0;\r\n private startWidth = 0;\r\n private startHeight = 0;\r\n private startLeft = 0;\r\n private startTop = 0;\r\n\r\n @Input() enableResize = false;\r\n\r\n // Define resize directions\r\n private directions = ['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw'];\r\n\r\n constructor(\r\n private el: ElementRef<HTMLElement>,\r\n private renderer: Renderer2,\r\n ) { }\r\n\r\n ngOnInit() {\r\n if (!this.enableResize) {\r\n this.el.nativeElement.removeAttribute('resizableDialog');\r\n return;\r\n }\r\n\r\n this.setStyle();\r\n this.createResizeHandles();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.removeResizeHandles();\r\n }\r\n\r\n private setStyle() {\r\n const element = this.el.nativeElement;\r\n this.renderer.setStyle(element, 'position', 'absolute');\r\n this.renderer.setStyle(element, 'overflow', 'hidden');\r\n this.renderer.setStyle(element, 'boxSizing', 'border-box');\r\n }\r\n\r\n private createResizeHandles() {\r\n this.directions.forEach((dir) => {\r\n const handle = this.renderer.createElement('div');\r\n this.renderer.setAttribute(handle, 'data-dir', dir);\r\n this.renderer.setStyle(handle, 'position', 'absolute');\r\n this.renderer.setStyle(handle, 'background', 'transparent');\r\n this.renderer.setStyle(handle, 'zIndex', '10');\r\n this.renderer.setStyle(handle, 'userSelect', 'none');\r\n\r\n // Set size and position based on direction\r\n if (dir.includes('e') || dir.includes('w')) {\r\n this.renderer.setStyle(handle, 'width', '10px');\r\n this.renderer.setStyle(handle, 'cursor', dir.includes('e') ? 'e-resize' : 'w-resize');\r\n this.renderer.setStyle(handle, 'top', '0');\r\n this.renderer.setStyle(handle, 'bottom', '0');\r\n this.renderer.setStyle(handle, 'right', dir.includes('e') ? '0' : null);\r\n this.renderer.setStyle(handle, 'left', dir.includes('w') ? '0' : null);\r\n }\r\n if (dir.includes('n') || dir.includes('s')) {\r\n this.renderer.setStyle(handle, 'height', '10px');\r\n this.renderer.setStyle(handle, 'cursor', dir.includes('s') ? 's-resize' : 'n-resize');\r\n this.renderer.setStyle(handle, 'left', '0');\r\n this.renderer.setStyle(handle, 'right', '0');\r\n this.renderer.setStyle(handle, 'bottom', dir.includes('s') ? '0' : null);\r\n this.renderer.setStyle(handle, 'top', dir.includes('n') ? '0' : null);\r\n }\r\n if (dir === 'ne' || dir === 'nw' || dir === 'se' || dir === 'sw') {\r\n this.renderer.setStyle(handle, 'width', '12px');\r\n this.renderer.setStyle(handle, 'height', '12px');\r\n this.renderer.setStyle(handle, 'borderRadius', '50%');\r\n this.renderer.setStyle(handle, 'cursor', `${dir}-resize`);\r\n this.renderer.setStyle(handle, 'top', dir.includes('n') ? '0' : null);\r\n this.renderer.setStyle(handle, 'bottom', dir.includes('s') ? '0' : null);\r\n this.renderer.setStyle(handle, 'left', dir.includes('w') ? '0' : null);\r\n this.renderer.setStyle(handle, 'right', dir.includes('e') ? '0' : null);\r\n }\r\n\r\n this.renderer.appendChild(this.el.nativeElement, handle);\r\n this.resizeHandles.push(handle);\r\n });\r\n }\r\n\r\n private removeResizeHandles() {\r\n this.resizeHandles.forEach((handle) => {\r\n this.renderer.removeChild(this.el.nativeElement, handle);\r\n });\r\n this.resizeHandles = [];\r\n }\r\n\r\n @HostListener('mousedown', ['$event'])\r\n onMouseDown(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n const dir = target.getAttribute('data-dir');\r\n if (!dir) return;\r\n\r\n event.preventDefault();\r\n\r\n this.activeHandle = dir;\r\n const rect = this.el.nativeElement.getBoundingClientRect();\r\n\r\n this.startX = event.clientX;\r\n this.startY = event.clientY;\r\n this.startWidth = parseFloat(this.getComputedStyleValue('width'));\r\n this.startHeight = parseFloat(this.getComputedStyleValue('height'));\r\n this.startLeft = parseFloat(this.getComputedStyleValue('left'));\r\n this.startTop = parseFloat(this.getComputedStyleValue('top'));\r\n\r\n // Prevent text selection during resize\r\n document.body.classList.add('no-select');\r\n }\r\n\r\n @HostListener('document:mousemove', ['$event'])\r\n onMouseMove(event: MouseEvent) {\r\n if (!this.activeHandle) return;\r\n\r\n const dx = event.clientX - this.startX;\r\n const dy = event.clientY - this.startY;\r\n\r\n let newWidth = this.startWidth;\r\n let newHeight = this.startHeight;\r\n let newLeft = this.startLeft;\r\n let newTop = this.startTop;\r\n\r\n const minWidth = 150;\r\n const minHeight = 100;\r\n\r\n // Horizontal resize\r\n if (this.activeHandle.includes('e')) {\r\n newWidth = Math.max(this.startWidth + dx, minWidth);\r\n }\r\n if (this.activeHandle.includes('w')) {\r\n newWidth = Math.max(this.startWidth - dx, minWidth);\r\n newLeft = this.startLeft + (this.startWidth - newWidth);\r\n }\r\n\r\n // Vertical resize\r\n if (this.activeHandle.includes('s')) {\r\n newHeight = Math.max(this.startHeight + dy, minHeight);\r\n }\r\n if (this.activeHandle.includes('n')) {\r\n newHeight = Math.max(this.startHeight - dy, minHeight);\r\n newTop = this.startTop + (this.startHeight - newHeight);\r\n }\r\n\r\n // Apply changes\r\n this.renderer.setStyle(this.el.nativeElement, 'width', `${newWidth}px`);\r\n this.renderer.setStyle(this.el.nativeElement, 'height', `${newHeight}px`);\r\n this.renderer.setStyle(this.el.nativeElement, 'left', `${newLeft}px`);\r\n this.renderer.setStyle(this.el.nativeElement, 'top', `${newTop}px`);\r\n }\r\n\r\n @HostListener('document:mouseup')\r\n onMouseUp() {\r\n if (this.activeHandle) {\r\n this.activeHandle = null;\r\n document.body.classList.remove('no-select');\r\n }\r\n }\r\n\r\n private getComputedStyleValue(property: string): string {\r\n return getComputedStyle(this.el.nativeElement).getPropertyValue(property) || '0';\r\n }\r\n}\r\n","import { Injectable, OnDestroy, Renderer2, RendererFactory2, signal } from '@angular/core';\r\nimport { OverlayContainer } from '@angular/cdk/overlay';\r\nimport { DoohbotThemeConfig } from '../../model/theme-config.model';\r\n\r\nexport type ThemeMode = 'light' | 'dark' | 'auto';\r\n\r\n// const DEFAULT_THEME_CONFIG: DoohbotThemeConfig = {\r\n// fontFamily: \"'Roboto', Arial, sans-serif\",\r\n// primaryColor: '#2800ff',\r\n// secondaryColor: '#08dacf',\r\n// backgroundColor: '#f8f9fa, #1a1717',\r\n// chatInputColor: '#f8f9fa, #1a1717',\r\n// textAltColor: '#000000, #ffffff',\r\n// buttonColor: '#000000, #ffffff',\r\n// textColor: '#333, #f5f5f5',\r\n// secondaryTextColor: '#858585, #a1a1a1',\r\n// hintTextColor: '#858585, #a1a1a1',\r\n// userMessageColor: '#2800ff',\r\n// botMessageColor: '#e9ecef, #333',\r\n// userTextColor: '#fff',\r\n// botTextColor: '#333, #fff',\r\n// borderColor: '#ccc, #444',\r\n// borderShadowColor: '0 4px 16px rgba(0, 0, 0, 0.25), 0 4px 16px rgba(0, 0, 0, 0.75)',\r\n// borderTopColor: '#dddddd00, #44444400',\r\n// typingIndicatorColor: '#999, #bbb',\r\n// white: '#ffffff',\r\n// black: '#000000',\r\n// grey: '#6c757d, #9ca3af',\r\n// red: '#ff0000',\r\n// lightRed: '#f28b8b',\r\n// };\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ThemeService implements OnDestroy {\r\n private renderer: Renderer2;\r\n private _theme = signal<ThemeMode>('auto');\r\n public theme = this._theme.asReadonly();\r\n\r\n private _activeTheme = signal<'light-theme' | 'dark-theme'>('light-theme');\r\n public activeTheme = this._activeTheme.asReadonly();\r\n\r\n private observer: MutationObserver | null = null;\r\n // private mediaQueryListener: ((e: MediaQueryListEvent) => void) | null = null;\r\n\r\n constructor(\r\n rendererFactory: RendererFactory2,\r\n private overlay: OverlayContainer,\r\n ) {\r\n this.renderer = rendererFactory.createRenderer(null, null);\r\n // Initialize theme from local storage or default to auto\r\n const savedTheme = localStorage.getItem('theme') as ThemeMode;\r\n this.setTheme(savedTheme || 'auto');\r\n }\r\n\r\n setTheme(mode: ThemeMode): void {\r\n this._theme.set(mode);\r\n localStorage.setItem('theme', mode);\r\n this.updateActiveTheme(mode);\r\n }\r\n\r\n private updateActiveTheme(mode: ThemeMode) {\r\n this.cleanupObservers();\r\n\r\n if (mode === 'auto') {\r\n this.handleAutoTheme();\r\n } else {\r\n const themeToApply = mode === 'dark' ? 'dark-theme' : 'light-theme';\r\n this._activeTheme.set(themeToApply);\r\n this.applyThemeToGlobal(themeToApply);\r\n }\r\n }\r\n\r\n private handleAutoTheme() {\r\n // Initial detection\r\n this.detectAndApplyParentTheme();\r\n\r\n // Watch for changes in parent\r\n this.observer = new MutationObserver(() => {\r\n this.detectAndApplyParentTheme();\r\n });\r\n\r\n this.observer.observe(document.documentElement, {\r\n attributes: true,\r\n attributeFilter: ['class', 'data-theme'],\r\n });\r\n this.observer.observe(document.body, {\r\n attributes: true,\r\n attributeFilter: ['class', 'data-theme'],\r\n });\r\n\r\n // Also listen to system preference as a fallback or if parent doesn't specify\r\n // const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n // this.mediaQueryListener = (e) => {\r\n // // Re-run detection which prioritizes parent classes but falls back to system\r\n // this.detectAndApplyParentTheme();\r\n // };\r\n // mediaQuery.addEventListener('change', this.mediaQueryListener);\r\n }\r\n\r\n private detectAndApplyParentTheme() {\r\n const isDark = this.isParentDark();\r\n const newTheme = isDark ? 'dark-theme' : 'light-theme';\r\n\r\n // Only update if changed to avoid unnecessary DOM updates\r\n if (this._activeTheme() !== newTheme) {\r\n this._activeTheme.set(newTheme);\r\n this.applyThemeToGlobal(newTheme);\r\n }\r\n }\r\n\r\n private isParentDark(): boolean {\r\n const body = document.body;\r\n const html = document.documentElement;\r\n\r\n // Check for common class names\r\n const darkClasses = ['dark', 'dark-theme', 'dark-mode', 'night-mode'];\r\n const hasDarkClass = (el: HTMLElement) => darkClasses.some((c) => el.classList.contains(c));\r\n\r\n if (hasDarkClass(body) || hasDarkClass(html)) return true;\r\n\r\n // Check for data-theme attribute\r\n if (body.getAttribute('data-theme') === 'dark' || html.getAttribute('data-theme') === 'dark')\r\n return true;\r\n\r\n // Check for Bootstrap 5.3+ data-bs-theme\r\n if (\r\n body.getAttribute('data-bs-theme') === 'dark' ||\r\n html.getAttribute('data-bs-theme') === 'dark'\r\n ) {\r\n return true;\r\n }\r\n\r\n // Fallback to system preference\r\n // return window.matchMedia('(prefers-color-scheme: dark)').matches;\r\n return false;\r\n }\r\n\r\n private applyThemeToGlobal(theme: 'light-theme' | 'dark-theme') {\r\n // We do NOT touch document.body anymore to avoid conflicts\r\n const overlayContainer = this.overlay.getContainerElement();\r\n\r\n // Only apply to overlay container (for menus/dialogs)\r\n // The main chat window handles its own theme via the host binding in doohbot.component.ts\r\n this.renderer.removeClass(overlayContainer, 'light-theme');\r\n this.renderer.removeClass(overlayContainer, 'dark-theme');\r\n this.renderer.addClass(overlayContainer, theme);\r\n }\r\n\r\n private cleanupObservers() {\r\n if (this.observer) {\r\n this.observer.disconnect();\r\n this.observer = null;\r\n }\r\n // if (this.mediaQueryListener) {\r\n // window\r\n // .matchMedia('(prefers-color-scheme: dark)')\r\n // .removeEventListener('change', this.mediaQueryListener);\r\n // this.mediaQueryListener = null;\r\n // }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.cleanupObservers();\r\n }\r\n\r\n public applyCssVariables(element: HTMLElement, config: DoohbotThemeConfig | undefined) {\r\n if (!config) return;\r\n\r\n //! Made for popout windows where we need to apply styles to a specific element\r\n // const activeConfig = config || DEFAULT_THEME_CONFIG;\r\n\r\n const isDark = this._activeTheme() === 'dark-theme';\r\n\r\n const applyColor = (input: string | undefined, variableName: string) => {\r\n if (input) {\r\n const { light, dark } = this.parseColor(input);\r\n const colorToUse = isDark ? dark : light;\r\n element.style.setProperty(`--${variableName}`, colorToUse);\r\n } else {\r\n element.style.removeProperty(`--${variableName}`);\r\n }\r\n };\r\n\r\n applyColor(config.fontFamily, 'font-family');\r\n applyColor(config.primaryColor, 'primary-color');\r\n applyColor(config.secondaryColor, 'secondary-color');\r\n applyColor(config.backgroundColor, 'background-color');\r\n applyColor(config.chatInputColor, 'chat-input-color');\r\n applyColor(config.textAltColor, 'text-alt-color');\r\n applyColor(config.buttonColor, 'button-color');\r\n applyColor(config.textColor, 'text-color');\r\n applyColor(config.secondaryTextColor, 'secondary-text-color');\r\n applyColor(config.hintTextColor, 'hint-text-color');\r\n applyColor(config.userMessageColor, 'user-message-color');\r\n applyColor(config.botMessageColor, 'bot-message-color');\r\n applyColor(config.userTextColor, 'user-text-color');\r\n applyColor(config.botTextColor, 'bot-text-color');\r\n applyColor(config.borderColor, 'border-color');\r\n applyColor(config.borderShadowColor, 'border-shadow-color');\r\n applyColor(config.borderTopColor, 'border-top-color');\r\n applyColor(config.typingIndicatorColor, 'typing-indicator-color');\r\n applyColor(config.white, 'white');\r\n applyColor(config.black, 'black');\r\n applyColor(config.grey, 'grey');\r\n applyColor(config.red, 'red');\r\n applyColor(config.lightRed, 'light-red');\r\n }\r\n\r\n private parseColor(input: string): { light: string; dark: string } {\r\n const parts = input.split(',').map((p) => p.trim());\r\n if (parts.length === 1) {\r\n return { light: parts[0], dark: parts[0] };\r\n } else if (parts.length >= 2) {\r\n return { light: parts[0], dark: parts[1] };\r\n }\r\n return { light: '', dark: '' };\r\n }\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\nexport interface DialogData {\r\n title: string;\r\n message: string;\r\n confirmText?: string;\r\n cancelText?: string;\r\n confirmButtonColor?: 'primary' | 'accent' | 'warn';\r\n icon?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-dialog',\r\n standalone: true,\r\n imports: [CommonModule, MatDialogModule, MatButtonModule, MatIconModule],\r\n templateUrl: './dialog.component.html',\r\n styleUrls: ['./dialog.component.scss'],\r\n})\r\nexport class DialogComponent {\r\n constructor(\r\n public dialogRef: MatDialogRef<DialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: DialogData,\r\n ) {\r\n // Set defaults\r\n this.data.confirmText = this.data.confirmText || 'Confirm';\r\n this.data.cancelText = this.data.cancelText || 'Cancel';\r\n this.data.confirmButtonColor = this.data.confirmButtonColor || 'warn';\r\n this.data.icon = this.data.icon || 'warning';\r\n }\r\n\r\n onCancel(): void {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n onConfirm(): void {\r\n this.dialogRef.close(true);\r\n }\r\n}\r\n","<div class=\"dialog-container\">\r\n <div class=\"dialog-header\">\r\n <mat-icon class=\"dialog-icon\" [class.warn-icon]=\"data.confirmButtonColor === 'warn'\">\r\n {{ data.icon }}\r\n </mat-icon>\r\n <h2 mat-dialog-title>{{ data.title }}</h2>\r\n </div>\r\n\r\n <mat-dialog-content>\r\n <p class=\"dialog-message\">{{ data.message }}</p>\r\n </mat-dialog-content>\r\n\r\n <mat-dialog-actions align=\"end\">\r\n <button mat-button class=\"cancel-btn\" (click)=\"onCancel()\" type=\"button\">\r\n {{ data.cancelText }}\r\n </button>\r\n <button\r\n mat-raised-button\r\n class=\"confirm-btn\"\r\n [class.warn-btn]=\"data.confirmButtonColor === 'warn'\"\r\n [class.primary-btn]=\"data.confirmButtonColor === 'primary'\"\r\n [class.accent-btn]=\"data.confirmButtonColor === 'accent'\"\r\n (click)=\"onConfirm()\"\r\n type=\"button\"\r\n >\r\n {{ data.confirmText }}\r\n </button>\r\n </mat-dialog-actions>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\nimport { DialogComponent, DialogData } from './dialog.component';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class DialogService {\r\n constructor(private dialog: MatDialog) { }\r\n\r\n /**\r\n * Opens a confirmation dialog with customizable options\r\n * @param data Configuration for the dialog\r\n * @returns Observable that emits true if confirmed, false if cancelled\r\n */\r\n open(data: DialogData): Observable<boolean> {\r\n const dialogRef = this.dialog.open(DialogComponent, {\r\n width: '400px',\r\n data: data,\r\n disableClose: false,\r\n autoFocus: true,\r\n restoreFocus: true,\r\n });\r\n\r\n return dialogRef.afterClosed();\r\n }\r\n\r\n /**\r\n * Convenience method for delete confirmation dialogs\r\n * @param itemName Name of the item being deleted\r\n * @returns Observable that emits true if confirmed, false if cancelled\r\n */\r\n confirmDelete(itemName: string = 'this item'): Observable<boolean> {\r\n return this.open({\r\n title: 'Confirm Delete',\r\n message: `Are you sure you want to delete ${itemName}? This action cannot be undone.`,\r\n confirmText: 'Delete',\r\n cancelText: 'Cancel',\r\n confirmButtonColor: 'warn',\r\n icon: 'delete_forever',\r\n });\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n OnChanges,\r\n SimpleChanges,\r\n Output,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ChatSession, ChatSessionGroup } from '../../model/chat-session.model';\r\nimport { DialogService } from '../../shared/dialog/dialog.service';\r\n\r\n@Component({\r\n selector: 'app-chat-history-sidebar',\r\n standalone: true,\r\n imports: [CommonModule, MatIconModule],\r\n templateUrl: './chat-history-sidebar.component.html',\r\n styleUrls: ['./chat-history-sidebar.component.scss'],\r\n})\r\nexport class ChatHistorySidebarComponent implements OnInit, OnChanges {\r\n @Input() sessions: ChatSession[] = [];\r\n @Input() isOpen: boolean = false;\r\n @Input() userName: string = 'User';\r\n\r\n @Output() sessionSelected = new EventEmitter<ChatSession>();\r\n @Output() sessionDeleted = new EventEmitter<string>();\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n chatHistory: ChatSessionGroup[] = [];\r\n\r\n constructor(private dialogService: DialogService) {}\r\n\r\n ngOnInit(): void {\r\n this.chatHistory = this.groupedSessions();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['sessions']) {\r\n this.chatHistory = this.groupedSessions();\r\n }\r\n }\r\n\r\n groupedSessions(): ChatSessionGroup[] {\r\n const now = new Date();\r\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());\r\n const yesterday = new Date(today);\r\n yesterday.setDate(yesterday.getDate() - 1);\r\n const weekAgo = new Date(today);\r\n weekAgo.setDate(weekAgo.getDate() - 7);\r\n\r\n const groups: ChatSessionGroup[] = [\r\n { label: 'Today', sessions: [] },\r\n { label: 'Yesterday', sessions: [] },\r\n { label: 'This Week', sessions: [] },\r\n { label: 'Older', sessions: [] },\r\n ];\r\n\r\n // Sort sessions by timestamp (newest first)\r\n const sortedSessions = [...this.sessions].sort(\r\n (a, b) => b.timestamp.getTime() - a.timestamp.getTime(),\r\n );\r\n\r\n sortedSessions.forEach((session) => {\r\n const sessionDate = new Date(session.timestamp);\r\n const sessionDayStart = new Date(\r\n sessionDate.getFullYear(),\r\n sessionDate.getMonth(),\r\n sessionDate.getDate(),\r\n );\r\n\r\n if (sessionDayStart.getTime() === today.getTime()) {\r\n groups[0].sessions.push(session);\r\n } else if (sessionDayStart.getTime() === yesterday.getTime()) {\r\n groups[1].sessions.push(session);\r\n } else if (sessionDayStart.getTime() >= weekAgo.getTime()) {\r\n groups[2].sessions.push(session);\r\n } else {\r\n groups[3].sessions.push(session);\r\n }\r\n });\r\n\r\n // Filter out empty groups\r\n return groups.filter((g) => g.sessions.length > 0);\r\n }\r\n\r\n onSessionClick(session: ChatSession): void {\r\n this.sessionSelected.emit(session);\r\n }\r\n\r\n onDeleteClick(event: Event, sessionId: string): void {\r\n event.stopPropagation();\r\n this.dialogService.confirmDelete('this conversation').subscribe((confirmed) => {\r\n if (confirmed) {\r\n this.sessionDeleted.emit(sessionId);\r\n this.chatHistory = this.groupedSessions();\r\n }\r\n });\r\n }\r\n\r\n onClose(): void {\r\n this.closed.emit();\r\n }\r\n\r\n formatTime(date: Date): string {\r\n return new Date(date).toLocaleTimeString('en-US', {\r\n hour: 'numeric',\r\n minute: '2-digit',\r\n hour12: true,\r\n });\r\n }\r\n\r\n formatDate(date: Date): string {\r\n return new Date(date).toLocaleDateString('en-US', {\r\n month: 'short',\r\n day: 'numeric',\r\n });\r\n }\r\n}\r\n","<div class=\"history-sidebar\" [class.open]=\"isOpen\">\r\n <div class=\"sidebar-header\">\r\n <h3>{{ userName }}'s Chat History</h3>\r\n <button class=\"close-btn\" (click)=\"onClose()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"sidebar-content\">\r\n <div *ngIf=\"sessions.length === 0\" class=\"empty-state\">\r\n <mat-icon>history</mat-icon>\r\n <p>No chat history yet</p>\r\n <span>Start a conversation to see it here</span>\r\n </div>\r\n\r\n <div *ngFor=\"let group of chatHistory\" class=\"session-group\">\r\n <div class=\"group-label\">{{ group.label }}</div>\r\n <div class=\"session-list\">\r\n <div\r\n *ngFor=\"let session of group.sessions\"\r\n class=\"session-item\"\r\n (click)=\"onSessionClick(session)\"\r\n >\r\n <div class=\"session-content\">\r\n <div class=\"session-title\">{{ session.title }}</div>\r\n <div class=\"session-time\">\r\n {{ formatTime(session.timestamp) }} · {{ formatDate(session.timestamp) }}\r\n </div>\r\n </div>\r\n <button\r\n class=\"delete-btn\"\r\n (click)=\"onDeleteClick($event, session.id)\"\r\n title=\"Delete conversation\"\r\n >\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n TrackByFunction,\r\n OnDestroy,\r\n OnInit,\r\n SimpleChanges,\r\n OnChanges,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { Chips } from '../../shared/chips/chips.component';\r\nimport { MessageListComponent } from '../message-list/message-list.component';\r\nimport { MessageInputComponent } from '../message-input/message-input.component';\r\nimport { SnackBar } from '../../shared/snackbar/snackbar.component';\r\nimport { DraggableDialogDirective } from '../../directives/draggable/draggable-dialog.directive';\r\nimport { ResizableDialogDirective } from '../../directives/resizable/resizable-dialog.directive';\r\nimport { Message } from '../../model/message';\r\nimport { ChatSession } from '../../model/chat-session.model';\r\nimport { ThemeService } from '../../core/services/theme.service';\r\nimport { inject } from '@angular/core';\r\n\r\nimport { ChatHistorySidebarComponent } from '../chat-history-sidebar/chat-history-sidebar.component';\r\nimport { DropdownMenu } from '../../shared/dropdown-menu/dropdown-menu.component';\r\nimport { MenuItem } from '../../shared/menu-item/menu-item.component';\r\nimport { PopoutWindowDirective } from '../../directives/popout/popout.directive';\r\nimport { DoohbotThemeConfig } from '../../model/theme-config.model';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'app-chat-window',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n Chips,\r\n MessageListComponent,\r\n MessageInputComponent,\r\n SnackBar,\r\n DraggableDialogDirective,\r\n ResizableDialogDirective,\r\n ChatHistorySidebarComponent,\r\n FormsModule,\r\n ],\r\n templateUrl: './chat-window.component.html',\r\n styleUrls: ['./chat-window.component.scss'],\r\n})\r\nexport class ChatWindowComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() isChatOpen: boolean = false;\r\n @Input() enableDrag: boolean = false;\r\n @Input() enableResize: boolean = false;\r\n @Input() isFullScreen: boolean = false;\r\n @Input() isAuthenticated: boolean = false;\r\n @Input() appTitle: string = '';\r\n @Input() appLogoUrl: string = '';\r\n @Input() appTextLogoUrl: string = '';\r\n @Input() appHeaderLogoUrl: string = '';\r\n @Input() moreIcon: string = 'more_vert';\r\n @Input() minimizeIcon: string = 'minimize';\r\n @Input() messages: Message[] = [];\r\n @Input() isBotTyping: boolean = false;\r\n @Input() appSubtitle: string = '';\r\n @Input() welcomeDesc: string = '';\r\n @Input() predefinedMessages: string[] = [];\r\n @Input() botAvatarUrl: string = '';\r\n @Input() userAvatarUrl: string = '';\r\n @Input() userName: string = '';\r\n @Input() trackByMessageId: TrackByFunction<Message> = (index, item) => item.id ?? index;\r\n @Input() hintText: string = '';\r\n @Input() sendIcon: string = '';\r\n @Input() messageError: string | null = null;\r\n @Input() showSuggestionChips: boolean = false;\r\n @Input() isHistorySidebarOpen: boolean = false;\r\n @Input() chatSessions: ChatSession[] = [];\r\n @Input() chatHistoryUserName: string = 'User';\r\n @Input() isGuestUser: boolean = false;\r\n @Input() isGuestMode: boolean = false;\r\n @Input() isLoggingIn: boolean = false;\r\n @Input() authError: string | null = null;\r\n @Input() authSuccess: string | null = null;\r\n @Input() themeConfig: DoohbotThemeConfig | undefined;\r\n\r\n @Output() toggleChat = new EventEmitter<void>();\r\n @Output() toggleFullScreen = new EventEmitter<void>();\r\n @Output() toggleHistorySidebar = new EventEmitter<void>();\r\n @Output() openSettings = new EventEmitter<void>();\r\n @Output() suggestionClick = new EventEmitter<string>();\r\n @Output() send = new EventEmitter<string>();\r\n @Output() clearMessageError = new EventEmitter<void>();\r\n @Output() clearChat = new EventEmitter<void>();\r\n @Output() sessionSelected = new EventEmitter<ChatSession>();\r\n @Output() sessionDeleted = new EventEmitter<string>();\r\n @Output() continueAsGuest = new EventEmitter<void>();\r\n @Output() loginClick = new EventEmitter<void>();\r\n @Output() loginSubmit = new EventEmitter<{ username: string; password: string }>();\r\n @Output() logout = new EventEmitter<void>();\r\n\r\n public themeService = inject(ThemeService);\r\n\r\n // Login form state\r\n public loginUsername = '';\r\n public loginPassword = '';\r\n public showLoginForm = false;\r\n public showPassword = false;\r\n\r\n togglePasswordVisibility() {\r\n this.showPassword = !this.showPassword;\r\n }\r\n\r\n onToggleChat() {\r\n this.toggleChat.emit();\r\n }\r\n\r\n onToggleHistorySidebar() {\r\n console.log('History button clicked!');\r\n this.toggleHistorySidebar.emit();\r\n }\r\n\r\n onLoginClick() {\r\n this.loginClick.emit();\r\n this.showLoginForm = true;\r\n }\r\n\r\n onLoginSubmit() {\r\n if (this.loginUsername && this.loginPassword) {\r\n this.loginSubmit.emit({\r\n username: this.loginUsername,\r\n password: this.loginPassword,\r\n });\r\n }\r\n }\r\n\r\n onCancelLogin() {\r\n this.showLoginForm = false;\r\n }\r\n\r\n onToggleFullScreen() {\r\n this.toggleFullScreen.emit();\r\n }\r\n\r\n onOpenSettings() {\r\n this.openSettings.emit();\r\n }\r\n\r\n onSuggestionClick(text: string) {\r\n this.suggestionClick.emit(text);\r\n }\r\n\r\n onSend(text: string) {\r\n this.send.emit(text);\r\n }\r\n\r\n onClearMessageError() {\r\n this.messageError = null;\r\n this.clearMessageError.emit();\r\n }\r\n\r\n onClearAuthError() {\r\n this.clearMessageError.emit();\r\n }\r\n\r\n onClearChat() {\r\n this.clearChat.emit();\r\n }\r\n\r\n onLogout() {\r\n this.logout.emit();\r\n }\r\n\r\n onSessionSelected(session: ChatSession) {\r\n this.sessionSelected.emit(session);\r\n }\r\n\r\n onSessionDeleted(sessionId: string) {\r\n this.sessionDeleted.emit(sessionId);\r\n }\r\n\r\n onContinueAsGuest() {\r\n this.continueAsGuest.emit();\r\n }\r\n\r\n onPopoutShown(win: Window) {\r\n // Apply theme classes\r\n const activeTheme = this.themeService.activeTheme();\r\n console.log('Popout shown, applying theme:', activeTheme);\r\n\r\n const body = win.document.body;\r\n // We cannot use renderer easily on another document without custom renderer factory,\r\n // but native DOM manipulation is fine here since it's a separate window object.\r\n body.classList.remove('light-theme', 'dark-theme');\r\n body.classList.add(activeTheme);\r\n\r\n // Apply CSS variables\r\n this.themeService.applyCssVariables(body, this.themeConfig);\r\n }\r\n\r\n ngOnInit() {\r\n // Initialization logic if needed\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n //? Handle authentication status changes\r\n if (changes['isAuthenticated'] && this.isAuthenticated) {\r\n this.showLoginForm = false;\r\n }\r\n }\r\n\r\n ngOnDestroy() {}\r\n}\r\n","<div\r\n *ngIf=\"isChatOpen\"\r\n draggableDialog\r\n [enableDrag]=\"enableDrag\"\r\n [dragHandle]=\"'.chat-header'\"\r\n resizableDialog\r\n [enableResize]=\"enableResize\"\r\n class=\"chat-window\"\r\n [class.fullscreen]=\"isFullScreen\"\r\n>\r\n <!-- chat window -->\r\n <div class=\"chat-header\">\r\n <div class=\"chat-title\">\r\n <img\r\n class=\"chat-logo\"\r\n style=\"width: 150px; height: 50px; margin-left: 0px\"\r\n [src]=\"appHeaderLogoUrl\"\r\n alt=\"Text-Logo\"\r\n />\r\n </div>\r\n\r\n <div class=\"chat-header-buttons\">\r\n <!-- New Chat Button -->\r\n <!-- <button class=\"header-button\" (click)=\"createNewChat()\">\r\n <mat-icon>add</mat-icon>\r\n </button> -->\r\n\r\n <!-- <app-dropdown-menu>\r\n <span trigger>☰</span>\r\n\r\n <app-menu-item (selected)=\"onToggleFullScreen()\"> My Profile </app-menu-item>\r\n\r\n <app-menu-item> Settings </app-menu-item>\r\n\r\n <app-menu-item> Logout </app-menu-item>\r\n </app-dropdown-menu> -->\r\n\r\n <!-- History Button -->\r\n <button\r\n class=\"header-button\"\r\n *ngIf=\"isAuthenticated\"\r\n (click)=\"onToggleHistorySidebar()\"\r\n title=\"Chat History\"\r\n >\r\n <mat-icon>history</mat-icon>\r\n </button>\r\n\r\n <!-- settings Button -->\r\n <button class=\"header-button\" [matMenuTriggerFor]=\"settingsMenu\">\r\n <mat-icon>{{ moreIcon }}</mat-icon>\r\n </button>\r\n\r\n <!-- minimize Button -->\r\n <button class=\"header-button\" (click)=\"onToggleChat()\">\r\n <mat-icon>{{ minimizeIcon }}</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area: Toggle between Messages and History -->\r\n <!-- <popout-window\r\n #popout\r\n [windowTitle]=\"appTitle || 'Chat'\"\r\n [windowWidth]=\"400\"\r\n [windowHeight]=\"620\"\r\n (shown)=\"onPopoutShown($event)\"\r\n > -->\r\n <div class=\"chat-content-wrapper\">\r\n <!-- Chat History View -->\r\n <app-chat-history-sidebar\r\n [sessions]=\"chatSessions\"\r\n [isOpen]=\"isHistorySidebarOpen\"\r\n [userName]=\"chatHistoryUserName\"\r\n (sessionSelected)=\"onSessionSelected($event)\"\r\n (sessionDeleted)=\"onSessionDeleted($event)\"\r\n (closed)=\"onToggleHistorySidebar()\"\r\n >\r\n </app-chat-history-sidebar>\r\n\r\n <!-- Messages View -->\r\n <div class=\"messages-view\" [class.hidden]=\"isHistorySidebarOpen\">\r\n <!-- Messages / Welcome Screen -->\r\n <app-message-list\r\n *ngIf=\"!showLoginForm\"\r\n [messages]=\"messages\"\r\n [isBotTyping]=\"isBotTyping\"\r\n [appLogoUrl]=\"appLogoUrl\"\r\n [appSubtitle]=\"appSubtitle\"\r\n [welcomeDesc]=\"welcomeDesc\"\r\n [predefinedMessages]=\"predefinedMessages\"\r\n [botAvatarUrl]=\"botAvatarUrl\"\r\n [userAvatarUrl]=\"userAvatarUrl\"\r\n [userName]=\"userName\"\r\n [trackByMessageId]=\"trackByMessageId\"\r\n [isAuthenticated]=\"isAuthenticated\"\r\n [isGuestMode]=\"isGuestMode\"\r\n (suggestionClick)=\"onSuggestionClick($event)\"\r\n (loginClick)=\"onLoginClick()\"\r\n (continueAsGuest)=\"onContinueAsGuest()\"\r\n ></app-message-list>\r\n\r\n <!-- SUGGESTED CHIPS: Show only if last bot message was fallback AND user is authenticated -->\r\n <app-chips\r\n *ngIf=\"showSuggestionChips && (isAuthenticated || isGuestMode)\"\r\n [messages]=\"predefinedMessages\"\r\n [disabled]=\"isBotTyping\"\r\n (chipClick)=\"onSuggestionClick($event)\"\r\n ></app-chips>\r\n\r\n <!-- Chat Input: Only show when authenticated or guest mode -->\r\n <app-message-input\r\n *ngIf=\"isAuthenticated || isGuestMode\"\r\n [isBotTyping]=\"isBotTyping\"\r\n [hintText]=\"hintText\"\r\n [sendIcon]=\"sendIcon\"\r\n (send)=\"onSend($event)\"\r\n ></app-message-input>\r\n\r\n <!-- Login Form -->\r\n <div *ngIf=\"showLoginForm && !isAuthenticated\" class=\"login-form-container\">\r\n <h3 class=\"login-title\">Login</h3>\r\n <div class=\"login-fields\">\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"loginUsername\"\r\n placeholder=\"Username\"\r\n class=\"login-input\"\r\n />\r\n <div class=\"password-wrapper\">\r\n <input\r\n [type]=\"showPassword ? 'text' : 'password'\"\r\n [(ngModel)]=\"loginPassword\"\r\n placeholder=\"Password\"\r\n class=\"login-input password-input\"\r\n (keydown.enter)=\"onLoginSubmit()\"\r\n />\r\n <button\r\n type=\"button\"\r\n class=\"password-toggle-btn\"\r\n (click)=\"togglePasswordVisibility()\"\r\n tabindex=\"-1\"\r\n >\r\n <mat-icon>{{ showPassword ? 'visibility' : 'visibility_off' }}</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"login-actions\">\r\n <button (click)=\"onCancelLogin()\" class=\"auth-btn secondary\">Cancel</button>\r\n <button\r\n (click)=\"onLoginSubmit()\"\r\n class=\"auth-btn primary\"\r\n [disabled]=\"!loginUsername || !loginPassword || isLoggingIn\"\r\n >\r\n {{ isLoggingIn ? 'Logging in...' : 'Submit' }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Auth error snackbar (login/logout errors only) -->\r\n <app-snackbar\r\n *ngIf=\"authError\"\r\n [message]=\"authError\"\r\n (closed)=\"onClearAuthError()\"\r\n ></app-snackbar>\r\n\r\n <!-- footer -->\r\n <div class=\"terms-conditions\">\r\n <a href=\"#\">Terms and Conditions</a>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- </popout-window> -->\r\n</div>\r\n\r\n<mat-menu #settingsMenu=\"matMenu\">\r\n <!-- Change Theme -->\r\n <div class=\"theme-selector\">\r\n <!-- Auto Theme (inherits from parent app) -->\r\n <button\r\n mat-icon-button\r\n class=\"theme-btn\"\r\n [class.selected]=\"themeService.theme() === 'auto'\"\r\n (click)=\"themeService.setTheme('auto')\"\r\n >\r\n <mat-icon>brightness_auto</mat-icon>\r\n </button>\r\n\r\n <!-- Light Theme -->\r\n <button\r\n mat-icon-button\r\n class=\"theme-btn\"\r\n [class.selected]=\"themeService.theme() === 'light'\"\r\n (click)=\"themeService.setTheme('light')\"\r\n >\r\n <mat-icon>light_mode</mat-icon>\r\n </button>\r\n\r\n <!-- Dark Theme -->\r\n <button\r\n mat-icon-button\r\n class=\"theme-btn\"\r\n [class.selected]=\"themeService.theme() === 'dark'\"\r\n (click)=\"themeService.setTheme('dark')\"\r\n >\r\n <mat-icon>dark_mode</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <!-- Popout Button -->\r\n <!-- <button mat-menu-item (click)=\"popout.popOut()\" style=\"display: flex; align-items: center\">\r\n <mat-icon>open_in_new</mat-icon>\r\n <span>Popout Widget</span>\r\n </button> -->\r\n\r\n <!-- Full-Screen Button -->\r\n <button mat-menu-item (click)=\"onToggleFullScreen()\" style=\"display: flex; align-items: center\">\r\n <mat-icon>{{ isFullScreen ? 'fullscreen_exit' : 'fullscreen' }}</mat-icon>\r\n <span> {{ isFullScreen ? 'Minimize' : 'Expand' }}</span>\r\n </button>\r\n\r\n <!-- Clear Chat -->\r\n <button mat-menu-item (click)=\"onClearChat()\" style=\"display: flex; align-items: center\">\r\n <mat-icon>clear_all</mat-icon>\r\n <span>Clear Chat</span>\r\n </button>\r\n\r\n <!-- Logout -->\r\n <button\r\n mat-menu-item\r\n *ngIf=\"isAuthenticated\"\r\n (click)=\"onLogout()\"\r\n style=\"display: flex; align-items: center\"\r\n >\r\n <mat-icon>logout</mat-icon>\r\n <span>Logout</span>\r\n </button>\r\n</mat-menu>\r\n","import { Directive, ElementRef, Input, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[appFullscreen]',\r\n standalone: true,\r\n})\r\nexport class FullscreenDirective {\r\n private isFullScreen = false;\r\n private preFullscreenState: {\r\n width: string;\r\n height: string;\r\n left: string;\r\n top: string;\r\n } | null = null;\r\n\r\n @Input() fullscreenTarget: string = '.chat-window';\r\n\r\n constructor(\r\n private el: ElementRef,\r\n private renderer: Renderer2,\r\n ) {}\r\n\r\n public toggle(): void {\r\n const targetEl = this.el.nativeElement.querySelector(this.fullscreenTarget);\r\n if (!targetEl) return;\r\n\r\n if (!this.isFullScreen) {\r\n this.preFullscreenState = {\r\n width: targetEl.style.width,\r\n height: targetEl.style.height,\r\n left: targetEl.style.left,\r\n top: targetEl.style.top,\r\n };\r\n\r\n targetEl.style.width = '';\r\n targetEl.style.height = '';\r\n targetEl.style.left = '';\r\n targetEl.style.top = '';\r\n targetEl.style.transform = '';\r\n\r\n this.isFullScreen = true;\r\n } else {\r\n this.isFullScreen = false;\r\n\r\n if (this.preFullscreenState) {\r\n targetEl.style.width = this.preFullscreenState.width || '400px';\r\n targetEl.style.height = this.preFullscreenState.height || '500px';\r\n targetEl.style.left = this.preFullscreenState.left || 'auto';\r\n targetEl.style.top = this.preFullscreenState.top || 'auto';\r\n targetEl.style.transform = 'none';\r\n }\r\n }\r\n }\r\n\r\n public getFullscreenState(): boolean {\r\n return this.isFullScreen;\r\n }\r\n}\r\n","// export const environment = {\r\n// staging: false,\r\n// development: false,\r\n// production: true,\r\n// chatApiUrl: 'https://api.production.com',\r\n// apiKey: '',\r\n// };\r\nexport const environment = {\r\n config: 'const/app-const.json',\r\n production: false,\r\n apiBaseUrl: '',\r\n loginEndpoint: '',\r\n apiSegment: 'api/v1/',\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { environment } from './environments/environment';\r\nimport { environment as environmentprod } from './environments/environment';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AppConst {\r\n static data: any;\r\n\r\n constructor() {}\r\n\r\n async load(): Promise<any> {\r\n const filePath = `../assets/${environment.production ? environmentprod.config : environment.config}?t=${new Date().getTime()}`;\r\n const response = await fetch(filePath);\r\n\r\n console.error('============================ AppConst ============================', filePath);\r\n if (response.ok) {\r\n try {\r\n AppConst.data = await response.json();\r\n console.error(\r\n '============================ AppConst ============================',\r\n AppConst.data,\r\n );\r\n // Override apiBaseUrl if present in environment\r\n // if (environment.apiBaseUrl) {\r\n // AppConst.data.apiBaseUrl = environment.apiBaseUrl;\r\n // }\r\n // // Override loginEndpoint if present in environment\r\n // if (environment.loginEndpoint) {\r\n // AppConst.data.loginEndpoint = environment.loginEndpoint;\r\n // }\r\n } catch (error: any) {\r\n console.error('============================ ERROR ============================');\r\n console.error(`Could not find file ${filePath}.\\nMESSAGE: ${error.message}`);\r\n console.error('============================ ERROR ============================');\r\n }\r\n\r\n if (AppConst.data && !Object.keys(AppConst.data).length) {\r\n console.error('============================ ERROR ============================');\r\n console.error(`No data found in file ${filePath}`);\r\n console.error('============================ ERROR ============================');\r\n }\r\n } else {\r\n console.error('============================ ERROR ============================');\r\n console.error(\r\n `Failed to load file ${filePath}.\\nMESSAGE: Request failed with ${response.status} / ${response.statusText}`,\r\n );\r\n console.error('============================ ERROR ============================');\r\n }\r\n }\r\n}\r\n","import { ChatIntent } from './message';\r\n\r\nexport const CHAT_INTENTS: ChatIntent[] = [\r\n {\r\n patterns: ['hello', 'hi', 'hey', 'greetings', 'good morning', 'good afternoon', 'good evening'],\r\n response: '👋Hello! How can I help you today?',\r\n },\r\n {\r\n patterns: ['how are you', 'how are you doing'],\r\n response: \"I'm just a bot, but I'm doing great! How about you?\",\r\n },\r\n {\r\n patterns: ['help', 'support', 'problem', 'about', 'issue', 'question', 'assist', 'Contact'],\r\n response: 'Sure! Please tell me your issue, and I will try to assist you.',\r\n },\r\n {\r\n patterns: ['bye', 'goodbye', 'see you', 'thanks', 'thank you', 'bye bye', 'see you later'],\r\n response: 'Goodbye! Have a nice day!',\r\n },\r\n {\r\n patterns: ['news and updates', 'updates', 'news', 'new'],\r\n response: 'Stay tuned for the latest news and updates from our team!',\r\n },\r\n];\r\n","import { InjectionToken } from '@angular/core';\r\nimport { environment } from '../core/environments/environment.prod';\r\n\r\n/**\r\n * Configuration for Doohbot API integration\r\n */\r\nexport interface DoohbotApiConfig {\r\n /**\r\n * Backend API endpoint URL\r\n * Example: 'https://api.example.com/chat'\r\n */\r\n apiUrl: string;\r\n\r\n /**\r\n * Optional API key for authentication\r\n */\r\n apiKey?: string;\r\n\r\n /**\r\n * Request timeout in milliseconds\r\n * @default 30000 (30 seconds)\r\n */\r\n timeout?: number;\r\n\r\n /**\r\n * Enable API mode (true) or use local intent matching (false)\r\n * @default false\r\n */\r\n enableApi?: boolean;\r\n\r\n /**\r\n * Include message history in API requests\r\n * @default false\r\n */\r\n includeHistory?: boolean;\r\n\r\n /**\r\n * Maximum number of history messages to include in requests\r\n * @default 10\r\n */\r\n maxHistoryMessages?: number;\r\n\r\n /**\r\n * Custom headers to include in API requests\r\n */\r\n customHeaders?: Record<string, string>;\r\n\r\n /**\r\n * Enable retry on failure\r\n * @default true\r\n */\r\n enableRetry?: boolean;\r\n\r\n /**\r\n * Number of retry attempts\r\n * @default 2\r\n */\r\n retryAttempts?: number;\r\n\r\n /**\r\n * Delay between retries in milliseconds\r\n * @default 1000\r\n */\r\n retryDelay?: number;\r\n}\r\n\r\n/**\r\n * Injection token for providing Doohbot API configuration\r\n */\r\nexport const DOOHBOT_API_CONFIG = new InjectionToken<DoohbotApiConfig>('DOOHBOT_API_CONFIG', {\r\n providedIn: 'root',\r\n factory: () => ({\r\n apiUrl: '',\r\n timeout: 30000,\r\n enableApi: false,\r\n includeHistory: false,\r\n maxHistoryMessages: 10,\r\n enableRetry: true,\r\n retryAttempts: 2,\r\n retryDelay: 1000,\r\n }),\r\n});\r\n","import { Injectable, signal, computed, effect } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\nimport { ChatContext } from '../../model/chat-context.model';\r\n\r\nexport interface ContextChangeEvent {\r\n previous: ChatContext | null;\r\n current: ChatContext;\r\n contextKey: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class TenantContextService {\r\n // Current context state\r\n private platformTenant = signal<string>('');\r\n private subTenant = signal<string>('');\r\n private agent = signal<string>('');\r\n\r\n // Computed context object\r\n public currentContext = computed<ChatContext>(() => ({\r\n platformTenant: this.platformTenant(),\r\n subTenant: this.subTenant(),\r\n agent: this.agent(),\r\n }));\r\n\r\n // Computed unique context key for storage\r\n public contextKey = computed<string>(() => {\r\n const pt = this.platformTenant() || 'default';\r\n const st = this.subTenant() || 'default';\r\n const ag = this.agent() || 'default';\r\n return `${pt}_${st}_${ag}`;\r\n });\r\n\r\n // Observable for context changes\r\n private contextChangeSubject = new Subject<ContextChangeEvent>();\r\n public contextChange$ = this.contextChangeSubject.asObservable();\r\n\r\n private previousContext: ChatContext | null = null;\r\n\r\n constructor() {\r\n // Effect to emit context changes\r\n effect(() => {\r\n const current = this.currentContext();\r\n const key = this.contextKey();\r\n\r\n // Only emit if context actually changed\r\n if (this.hasContextChanged(current)) {\r\n this.contextChangeSubject.next({\r\n previous: this.previousContext,\r\n current: current,\r\n contextKey: key,\r\n });\r\n this.previousContext = { ...current };\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Update the complete context\r\n */\r\n public setContext(context: Partial<ChatContext>): void {\r\n if (context.platformTenant !== undefined) {\r\n this.platformTenant.set(context.platformTenant);\r\n }\r\n if (context.subTenant !== undefined) {\r\n this.subTenant.set(context.subTenant);\r\n }\r\n if (context.agent !== undefined) {\r\n this.agent.set(context.agent);\r\n }\r\n }\r\n\r\n /**\r\n * Update individual context properties\r\n */\r\n public setPlatformTenant(platformTenant: string): void {\r\n this.platformTenant.set(platformTenant);\r\n }\r\n\r\n public setSubTenant(subTenant: string): void {\r\n this.subTenant.set(subTenant);\r\n }\r\n\r\n public setAgent(agent: string): void {\r\n this.agent.set(agent);\r\n }\r\n\r\n /**\r\n * Get current context values\r\n */\r\n public getPlatformTenant(): string {\r\n return this.platformTenant();\r\n }\r\n\r\n public getSubTenant(): string {\r\n return this.subTenant();\r\n }\r\n\r\n public getAgent(): string {\r\n return this.agent();\r\n }\r\n\r\n public getContextKey(): string {\r\n return this.contextKey();\r\n }\r\n\r\n public getContext(): ChatContext {\r\n return this.currentContext();\r\n }\r\n\r\n /**\r\n * Check if context has changed\r\n */\r\n private hasContextChanged(current: ChatContext): boolean {\r\n if (!this.previousContext) {\r\n // First time initialization - only emit if we have valid values\r\n return current.platformTenant !== '' || current.subTenant !== '' || current.agent !== '';\r\n }\r\n\r\n return (\r\n this.previousContext.platformTenant !== current.platformTenant ||\r\n this.previousContext.subTenant !== current.subTenant ||\r\n this.previousContext.agent !== current.agent\r\n );\r\n }\r\n\r\n /**\r\n * Reset context to default\r\n */\r\n public resetContext(): void {\r\n this.platformTenant.set('');\r\n this.subTenant.set('');\r\n this.agent.set('');\r\n }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, throwError, timer } from 'rxjs';\r\nimport { catchError, retry, timeout, map } from 'rxjs/operators';\r\nimport { DOOHBOT_API_CONFIG, DoohbotApiConfig } from '../../model/api-config.model';\r\nimport { ChatApiRequest, ChatApiResponse, ChatApiError } from '../../model/api-request.model';\r\nimport { Message } from '../../model/message';\r\nimport { TenantContextService } from './tenant-context.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChatbotApiService {\r\n private http = inject(HttpClient);\r\n private tenantContext = inject(TenantContextService);\r\n private config = inject(DOOHBOT_API_CONFIG);\r\n\r\n /**\r\n * Send a chat message to the API\r\n * @param message User's message text\r\n * @param history Optional message history for context\r\n * @returns Observable of the API response\r\n */\r\n sendMessage(message: string, history?: Message[]): Observable<ChatApiResponse> {\r\n if (!this.config.apiUrl) {\r\n return throwError(\r\n () =>\r\n ({\r\n message: 'API URL not configured',\r\n code: 'CONFIG_ERROR',\r\n }) as ChatApiError,\r\n );\r\n }\r\n\r\n // Build request payload with tenant context\r\n const request = this.buildRequest(message, history);\r\n\r\n // Build headers\r\n const headers = this.buildHeaders();\r\n\r\n // Configure timeout\r\n const timeoutMs = this.config.timeout || 30000;\r\n\r\n // Make HTTP request\r\n return this.http.post<ChatApiResponse>(this.config.apiUrl, request, { headers }).pipe(\r\n timeout(timeoutMs),\r\n this.applyRetryStrategy(),\r\n map((response) => this.validateResponse(response)),\r\n catchError((error) => this.handleError(error)),\r\n );\r\n }\r\n\r\n /**\r\n * Build request payload with current tenant context\r\n */\r\n private buildRequest(message: string, history?: Message[]): ChatApiRequest {\r\n const context = this.tenantContext.getContext();\r\n\r\n const request: ChatApiRequest = {\r\n message,\r\n platformTenant: context.platformTenant,\r\n subTenant: context.subTenant,\r\n agent: context.agent,\r\n timestamp: new Date().toISOString(),\r\n };\r\n\r\n // Include history if enabled and provided\r\n if (this.config.includeHistory && history && history.length > 0) {\r\n const maxMessages = this.config.maxHistoryMessages || 10;\r\n request.history = history.slice(-maxMessages);\r\n }\r\n\r\n return request;\r\n }\r\n\r\n /**\r\n * Build HTTP headers\r\n */\r\n private buildHeaders(): HttpHeaders {\r\n let headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n });\r\n\r\n // Add API key if provided\r\n if (this.config.apiKey) {\r\n headers = headers.set('Authorization', `Bearer ${this.config.apiKey}`);\r\n }\r\n\r\n // Add custom headers if provided\r\n if (this.config.customHeaders) {\r\n Object.entries(this.config.customHeaders).forEach(([key, value]) => {\r\n headers = headers.set(key, value);\r\n });\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n /**\r\n * Apply retry strategy based on configuration\r\n */\r\n private applyRetryStrategy() {\r\n return (source: Observable<ChatApiResponse>) => {\r\n if (!this.config.enableRetry) {\r\n return source;\r\n }\r\n\r\n const retryAttempts = this.config.retryAttempts || 2;\r\n const retryDelay = this.config.retryDelay || 1000;\r\n\r\n return source.pipe(\r\n retry({\r\n count: retryAttempts,\r\n delay: (error, retryCount) => {\r\n // Only retry on network errors or 5xx server errors\r\n if (this.shouldRetry(error)) {\r\n console.warn(`Retrying API request (attempt ${retryCount}/${retryAttempts})...`);\r\n return timer(retryDelay * retryCount);\r\n }\r\n // Don't retry on client errors (4xx)\r\n return throwError(() => error);\r\n },\r\n }),\r\n );\r\n };\r\n }\r\n\r\n /**\r\n * Determine if error should trigger a retry\r\n */\r\n private shouldRetry(error: any): boolean {\r\n if (error instanceof HttpErrorResponse) {\r\n // Retry on network errors or 5xx server errors\r\n return error.status === 0 || error.status >= 500;\r\n }\r\n // Retry on timeout errors\r\n if (error.name === 'TimeoutError') {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Validate API response\r\n */\r\n private validateResponse(response: ChatApiResponse): ChatApiResponse {\r\n if (!response || !response.reply) {\r\n throw {\r\n message: 'Invalid API response: missing reply field',\r\n code: 'INVALID_RESPONSE',\r\n } as ChatApiError;\r\n }\r\n return response;\r\n }\r\n\r\n /**\r\n * Handle API errors\r\n */\r\n private handleError(error: any): Observable<never> {\r\n let apiError: ChatApiError;\r\n\r\n if (error instanceof HttpErrorResponse) {\r\n // HTTP error\r\n apiError = {\r\n message: error.error?.message || error.message || 'API request failed',\r\n code: error.error?.code || 'HTTP_ERROR',\r\n statusCode: error.status,\r\n details: error.error,\r\n };\r\n } else if (error.name === 'TimeoutError') {\r\n // Timeout error\r\n apiError = {\r\n message: 'Request timeout - please try again',\r\n code: 'TIMEOUT',\r\n statusCode: 408,\r\n };\r\n } else {\r\n // Other errors\r\n apiError = {\r\n message: error.message || 'Unknown error occurred',\r\n code: error.code || 'UNKNOWN_ERROR',\r\n details: error,\r\n };\r\n }\r\n\r\n console.error('Chatbot API Error:', apiError);\r\n return throwError(() => apiError);\r\n }\r\n\r\n /**\r\n * Check if API is enabled\r\n */\r\n isApiEnabled(): boolean {\r\n return this.config.enableApi === true && !!this.config.apiUrl;\r\n }\r\n\r\n /**\r\n * Get current API configuration\r\n */\r\n getConfig(): DoohbotApiConfig {\r\n return { ...this.config };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Message } from '../../model/message';\r\nimport { ChatSession } from '../../model/chat-session.model';\r\nimport { Observable, of } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChatHistoryService {\r\n private readonly STORAGE_PREFIX = 'doohbot_sessions_';\r\n private readonly LEGACY_PREFIX = 'doohbot_history_';\r\n\r\n constructor() {}\r\n\r\n /**\r\n * Create a new chat session\r\n */\r\n createSession(contextKey: string, userId: string): ChatSession {\r\n const session: ChatSession = {\r\n id: this.generateSessionId(),\r\n timestamp: new Date(),\r\n title: 'New Conversation',\r\n messages: [],\r\n contextKey,\r\n userId,\r\n };\r\n return session;\r\n }\r\n\r\n /**\r\n * Check if user is a guest/anonymous user who shouldn't have chat history\r\n */\r\n private isGuestUser(userId: string): boolean {\r\n const guestUserIds = ['anonymous', 'guest', 'default', ''];\r\n return guestUserIds.includes(userId.toLowerCase());\r\n }\r\n\r\n /**\r\n * Save a message to a specific session\r\n */\r\n saveMessageToSession(session: ChatSession, message: Message): Observable<void> {\r\n // Don't save history for guest users\r\n if (this.isGuestUser(session.userId)) {\r\n return of(void 0);\r\n }\r\n\r\n // Update title from first user message if still default\r\n if (session.title === 'New Conversation' && message.sender === 'user') {\r\n session.title = this.generateTitle(message.text);\r\n }\r\n\r\n session.messages.push(message);\r\n return this.saveSession(session);\r\n }\r\n\r\n /**\r\n * Save entire session\r\n */\r\n saveSession(session: ChatSession): Observable<void> {\r\n // Don't save history for guest users\r\n if (this.isGuestUser(session.userId)) {\r\n return of(void 0);\r\n }\r\n\r\n const key = this.getSessionStorageKey(session.contextKey, session.userId);\r\n const sessions = this.loadAllSessionsSync(session.contextKey, session.userId);\r\n\r\n const existingIndex = sessions.findIndex((s) => s.id === session.id);\r\n if (existingIndex >= 0) {\r\n sessions[existingIndex] = session;\r\n } else {\r\n sessions.push(session);\r\n }\r\n\r\n localStorage.setItem(key, JSON.stringify(sessions));\r\n return of(void 0);\r\n }\r\n\r\n /**\r\n * Load all sessions for a context and user\r\n */\r\n loadAllSessions(contextKey: string, userId: string): Observable<ChatSession[]> {\r\n return of(this.loadAllSessionsSync(contextKey, userId));\r\n }\r\n\r\n /**\r\n * Load all sessions synchronously (for internal use)\r\n */\r\n private loadAllSessionsSync(contextKey: string, userId: string): ChatSession[] {\r\n // Don't load history for guest users\r\n if (this.isGuestUser(userId)) {\r\n return [];\r\n }\r\n\r\n const key = this.getSessionStorageKey(contextKey, userId);\r\n const stored = localStorage.getItem(key);\r\n\r\n if (stored) {\r\n try {\r\n const sessions = JSON.parse(stored);\r\n // Restore Date objects\r\n return sessions.map((s: any) => ({\r\n ...s,\r\n timestamp: new Date(s.timestamp),\r\n messages: s.messages.map((m: any) => ({\r\n ...m,\r\n timestamp: m.timestamp ? new Date(m.timestamp) : undefined,\r\n })),\r\n }));\r\n } catch (e) {\r\n console.error('Failed to parse sessions', e);\r\n return [];\r\n }\r\n }\r\n\r\n // Try to migrate from legacy format\r\n return this.migrateLegacyData(contextKey, userId);\r\n }\r\n\r\n /**\r\n * Load a specific session\r\n */\r\n loadSession(\r\n sessionId: string,\r\n contextKey: string,\r\n userId: string,\r\n ): Observable<ChatSession | null> {\r\n const sessions = this.loadAllSessionsSync(contextKey, userId);\r\n const session = sessions.find((s) => s.id === sessionId);\r\n return of(session || null);\r\n }\r\n\r\n /**\r\n * Delete a session\r\n */\r\n deleteSession(sessionId: string, contextKey: string, userId: string): Observable<void> {\r\n const key = this.getSessionStorageKey(contextKey, userId);\r\n const sessions = this.loadAllSessionsSync(contextKey, userId);\r\n const filtered = sessions.filter((s) => s.id !== sessionId);\r\n\r\n localStorage.setItem(key, JSON.stringify(filtered));\r\n return of(void 0);\r\n }\r\n\r\n /**\r\n * Clear all sessions for a context and user\r\n */\r\n clearAllSessions(contextKey: string, userId: string): Observable<void> {\r\n const key = this.getSessionStorageKey(contextKey, userId);\r\n localStorage.removeItem(key);\r\n return of(void 0);\r\n }\r\n\r\n /**\r\n * Generate a unique session ID for a session\r\n */\r\n private generateSessionId(): string {\r\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\r\n return `session_${crypto.randomUUID()}`;\r\n }\r\n // Fallback\r\n return `session_${Date.now()}_${this.generateRandomString(16)}`;\r\n }\r\n\r\n private generateRandomString(length: number): string {\r\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n let result = '';\r\n const randomArray = new Uint8Array(length);\r\n crypto.getRandomValues(randomArray);\r\n for (let i = 0; i < length; i++) {\r\n result += chars[randomArray[i] % chars.length];\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Generate a title from the first message\r\n */\r\n private generateTitle(text: string): string {\r\n const maxLength = 30;\r\n if (text.length <= maxLength) {\r\n return text;\r\n }\r\n return text.substring(0, maxLength) + '...';\r\n }\r\n\r\n /**\r\n * Get storage key for sessions\r\n */\r\n private getSessionStorageKey(contextKey: string, userId: string): string {\r\n return `${this.STORAGE_PREFIX}${contextKey}_${userId}`;\r\n }\r\n\r\n /**\r\n * Migrate legacy flat message history to session format\r\n */\r\n private migrateLegacyData(contextKey: string, userId: string): ChatSession[] {\r\n const legacyKey = `${this.LEGACY_PREFIX}${contextKey}_${userId}`;\r\n const stored = localStorage.getItem(legacyKey);\r\n\r\n if (!stored) {\r\n return [];\r\n }\r\n\r\n try {\r\n const messages = JSON.parse(stored);\r\n if (messages.length === 0) {\r\n return [];\r\n }\r\n\r\n // Create a single session from legacy messages\r\n const session: ChatSession = {\r\n id: this.generateSessionId(),\r\n timestamp: messages[0].timestamp ? new Date(messages[0].timestamp) : new Date(),\r\n title: 'Migrated Conversation',\r\n messages: messages.map((m: any) => ({\r\n ...m,\r\n timestamp: m.timestamp ? new Date(m.timestamp) : undefined,\r\n })),\r\n contextKey,\r\n userId,\r\n };\r\n\r\n // Save as new format\r\n this.saveSession(session).subscribe();\r\n\r\n // Remove legacy data\r\n localStorage.removeItem(legacyKey);\r\n\r\n return [session];\r\n } catch (e) {\r\n console.error('Failed to migrate legacy data', e);\r\n return [];\r\n }\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, delay, retry, map, catchError, of } from 'rxjs';\r\nimport { AppConst } from '../app-const';\r\nimport { environment } from '../environments/environment.prod';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class HttpService {\r\n // @BlockUI() blockUI!: NgBlockUI;\r\n\r\n apiUrl: string;\r\n\r\n constructor(private http: HttpClient) {\r\n this.apiUrl = `${AppConst?.data?.apiBaseUrl}${AppConst?.data?.apiSegment}`;\r\n // this.apiUrl = `${environment.apiBaseUrl}${environment.apiSegment}`;\r\n\r\n console.log('HttpService: Initialized', this.apiUrl);\r\n }\r\n\r\n get(\r\n url: string,\r\n param?: object,\r\n nestedParam = false,\r\n showLoader = false,\r\n refresh = true,\r\n ): Observable<any> {\r\n // if (showLoader && !this.blockUI.isActive) {\r\n\r\n // this.blockUI.start();\r\n\r\n // }\r\n\r\n let params = {};\r\n\r\n if (nestedParam) {\r\n this.buildHttpParams(params, param, '');\r\n } else {\r\n params = param as HttpParams;\r\n }\r\n\r\n return this.http.get(`${this.apiUrl}${url}`, { params: params, withCredentials: true }).pipe(\r\n delay(100),\r\n\r\n retry(0),\r\n\r\n map((response) => this.returnResponse(response, showLoader)),\r\n\r\n catchError((error) => {\r\n // if (this.blockUI.isActive) {\r\n\r\n // this.blockUI.stop();\r\n\r\n // }\r\n\r\n return of(error);\r\n }),\r\n );\r\n }\r\n\r\n private buildHttpParams(params: any, data: any, currentPath: string) {\r\n Object.keys(data).forEach((key) => {\r\n if (data[key] instanceof Object && !(data[key] instanceof Array)) {\r\n this.buildHttpParams(params, data[key], `${currentPath}${key}.`);\r\n } else {\r\n params[`${currentPath}${key}`] = data[key];\r\n }\r\n });\r\n }\r\n\r\n post(url: string, param?: object, showLoader = false): Observable<any> {\r\n // if (showLoader && !this.blockUI.isActive) {\r\n\r\n // this.blockUI.start();\r\n\r\n // }\r\n\r\n return this.http.post(`${this.apiUrl}${url}`, param as HttpParams).pipe(\r\n delay(100),\r\n\r\n retry(0),\r\n\r\n map((response: any) => this.returnResponse(response, showLoader)),\r\n\r\n catchError((error) => {\r\n // if (this.blockUI.isActive) {\r\n\r\n // this.blockUI.stop();\r\n\r\n // }\r\n\r\n return of(error);\r\n }),\r\n );\r\n }\r\n\r\n private returnResponse(value: any, showLoader: boolean = true): any {\r\n // if (showLoader && this.blockUI.isActive) {\r\n\r\n // this.blockUI.reset();\r\n\r\n // }\r\n\r\n return value;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpService } from './http.service';\r\nimport { AuthResult } from '../models/auth-result.model';\r\nimport { ApiResponse } from '../models/api-response.model';\r\nimport { LoginRequest } from '../models/login-request.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AccountService {\r\n constructor(private http: HttpService) {}\r\n\r\n login(param?: LoginRequest, showLoader = false): Observable<ApiResponse<AuthResult>> {\r\n return this.http.post('auth/login', param, showLoader);\r\n }\r\n\r\n logout(refreshToken: string, showLoader = false): Observable<ApiResponse<any>> {\r\n return this.http.post('auth/logout', { refresh_token: refreshToken }, showLoader);\r\n }\r\n\r\n startChat(param?: object, showLoader = false): Observable<ApiResponse<any>> {\r\n return this.http.post('chat/ask', param, showLoader);\r\n }\r\n\r\n getChatHistory(param?: object, showLoader = false): Observable<ApiResponse<any>> {\r\n return this.http.get('chat/history', param, showLoader);\r\n }\r\n\r\n deleteHistory(param?: object, showLoader = false): Observable<ApiResponse<any>> {\r\n return this.http.post('chat/history', param, showLoader);\r\n }\r\n\r\n refreshLogin(param?: object, showLoader = false): Observable<ApiResponse<AuthResult>> {\r\n return this.http.post('Account/RefreshToken', param, showLoader);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class CryptoHelperService {\r\n private encoder = new TextEncoder();\r\n private decoder = new TextDecoder();\r\n private secretKey = ''; // Will be set by AuthService\r\n\r\n setSecretKey(key: string) {\r\n this.secretKey = key;\r\n }\r\n\r\n private async getKey() {\r\n const salt = this.encoder.encode('fixed_salt'); // Keep constant\r\n const baseKey = await crypto.subtle.importKey(\r\n 'raw',\r\n this.encoder.encode(this.secretKey),\r\n 'PBKDF2',\r\n false,\r\n ['deriveKey'],\r\n );\r\n\r\n return crypto.subtle.deriveKey(\r\n {\r\n name: 'PBKDF2',\r\n salt,\r\n iterations: 100000,\r\n hash: 'SHA-256',\r\n },\r\n baseKey,\r\n { name: 'AES-GCM', length: 256 },\r\n false,\r\n ['encrypt', 'decrypt'],\r\n );\r\n }\r\n\r\n async encrypt(value: string): Promise<string | null> {\r\n if (!value) return null;\r\n\r\n const key = await this.getKey();\r\n const iv = crypto.getRandomValues(new Uint8Array(12));\r\n\r\n const encrypted = await crypto.subtle.encrypt(\r\n { name: 'AES-GCM', iv },\r\n key,\r\n this.encoder.encode(value),\r\n );\r\n\r\n const merged = new Uint8Array(iv.length + encrypted.byteLength);\r\n merged.set(iv, 0);\r\n merged.set(new Uint8Array(encrypted), iv.length);\r\n\r\n return btoa(String.fromCharCode(...merged));\r\n }\r\n\r\n async decrypt(value: string): Promise<string | null> {\r\n if (!value) return null;\r\n\r\n const raw = Uint8Array.from(atob(value), (c) => c.charCodeAt(0));\r\n\r\n const iv = raw.slice(0, 12);\r\n const data = raw.slice(12);\r\n\r\n const key = await this.getKey();\r\n\r\n const decrypted = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, data);\r\n\r\n return this.decoder.decode(decrypted);\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { AppConst } from '../app-const';\r\nimport { map, Observable } from 'rxjs';\r\nimport { AuthResult } from '../models/auth-result.model';\r\nimport * as CryptoJS from 'crypto-js';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { Router } from '@angular/router';\r\nimport { CryptoHelperService } from '../helpers/crypto-helper.service';\r\n\r\n//!! inherit Window storageEventAdded for duplicate tab detection\r\ndeclare global {\r\n interface Window {\r\n storageEventAdded?: boolean;\r\n tabCLoseEventAdded?: boolean;\r\n }\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthService {\r\n apiUrl: string;\r\n storageKey: string;\r\n secretKey: string;\r\n companyCode: string;\r\n jwtHelper: JwtHelperService = new JwtHelperService();\r\n\r\n constructor(\r\n private router: Router,\r\n private http: HttpClient,\r\n private cryptoHelper: CryptoHelperService,\r\n // private cacheService: NgxCacheService,\r\n // private snackBar: MatSnackBar,\r\n ) {\r\n this.apiUrl = `${AppConst?.data?.apiBaseUrl}${AppConst?.data?.apiSegment}`;\r\n this.storageKey = AppConst?.data?.storageKey;\r\n this.secretKey = AppConst?.data?.secretKey;\r\n this.companyCode = AppConst?.data?.companyCode;\r\n this.cryptoHelper.setSecretKey(this.secretKey);\r\n }\r\n\r\n logout(): Observable<boolean> {\r\n const url = `${this.apiUrl}Account/Logout`;\r\n return this.http.post(url, {}).pipe(\r\n map((response: any) => {\r\n if (response && response.success) {\r\n this.clearAuth();\r\n // this.redirectOut();\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }),\r\n );\r\n }\r\n\r\n // redirectIn() {\r\n // let redirectUrl = this.getCurrentNavigationUrl();\r\n // redirectUrl = redirectUrl || AppConst?.data?.redirectUrl || '/login';\r\n // this.router.navigate([redirectUrl], { replaceUrl: true });\r\n // }\r\n\r\n // redirectOut() {\r\n // this.router.navigate(['/login'], { replaceUrl: true });\r\n // }\r\n\r\n // Utility\r\n setSession(session: AuthResult) {\r\n const user = this.jwtHelper.decodeToken(session.access_token);\r\n this.setLocalStorage('access_token', session.access_token);\r\n this.setLocalStorage('refresh_token', session.refresh_token);\r\n this.setLocalStorage('user_id', Number(user?.user_id));\r\n this.setLocalStorage('username', user?.username);\r\n this.setLocalStorage('roles', Number(user?.roles));\r\n this.setLocalStorage('permissions', Number(user?.permissions));\r\n this.setLocalStorage('company_id', user?.company_id);\r\n this.setLocalStorage('office_id', user?.office_id);\r\n }\r\n\r\n setLocalStorage(key: string, value: any) {\r\n const data = localStorage.getItem(this.storageKey);\r\n if (data) {\r\n let dataDec = this.decrypt(data);\r\n let dataJson = JSON.parse(dataDec ?? '{}');\r\n dataJson = Object.assign(dataJson, { [key]: value });\r\n localStorage.setItem(this.storageKey, this.encrypt(JSON.stringify(dataJson)));\r\n } else {\r\n let dataNew = Object.assign({}, { [key]: value });\r\n let dataEnc = this.encrypt(JSON.stringify(dataNew));\r\n localStorage.setItem(this.storageKey, dataEnc);\r\n }\r\n }\r\n\r\n getLocalStorage(key: string) {\r\n const data = localStorage.getItem(this.storageKey);\r\n if (data) {\r\n let dataDec = this.decrypt(data);\r\n let dataJson = JSON.parse(dataDec ?? '{}');\r\n return dataJson![key] || null;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n isAuthenticated(): boolean {\r\n let token = this.getLocalStorage('access_token');\r\n if (token && !this.isTokenExpired()) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n isTokenExpired(): boolean {\r\n let token = (this.getLocalStorage('access_token') ?? '') as string;\r\n if (token) {\r\n return this.jwtHelper.isTokenExpired(token);\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n encrypt(value: string): any {\r\n if (value) {\r\n return CryptoJS.AES.encrypt(value, this.secretKey);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n decrypt(value: string) {\r\n if (value) {\r\n let bytes = CryptoJS.AES.decrypt(value, this.secretKey);\r\n let decryptedText = bytes.toString(CryptoJS.enc.Utf8);\r\n return decryptedText;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n clearAuth() {\r\n this.clearSession();\r\n this.clearStorage();\r\n this.clearCache();\r\n }\r\n\r\n clearSession() {\r\n sessionStorage.clear();\r\n }\r\n\r\n clearTabInfo() {\r\n localStorage.removeItem('tabs');\r\n }\r\n\r\n clearStorage() {\r\n localStorage.clear();\r\n }\r\n\r\n clearCache() {\r\n // this.cacheService.clearCache();\r\n }\r\n\r\n getUserId() {\r\n return this.getLocalStorage('user_id') || 0;\r\n }\r\n}\r\n","import { Injectable, signal, inject } from '@angular/core';\r\nimport { Message } from '../../model/message';\r\nimport { ChatSession } from '../../model/chat-session.model';\r\nimport { CHAT_INTENTS } from '../../model/doohbot.intents';\r\nimport { ChatApiError } from '../../model/api-request.model';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { ChatbotApiService } from '../../core/services/doohbot-api.service';\r\nimport { UserContext } from '../../core/models/user-context.model';\r\nimport { ChatHistoryService } from '../../core/services/chat-history.service';\r\nimport { AccountService } from '../../core/services/account.service';\r\nimport { AuthService } from '../../core/services/auth.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class MessageService {\r\n // Context-aware message storage\r\n private currentContextKey = signal<string>('default');\r\n\r\n // Public messages signal for current context\r\n public messages = signal<Message[]>([]);\r\n public audioUnlocked = false;\r\n\r\n // Active session\r\n private activeSession: ChatSession | null = null;\r\n\r\n // API service (optional)\r\n private apiService = inject(ChatbotApiService, { optional: true });\r\n private chatHistoryService = inject(ChatHistoryService);\r\n\r\n // User context for backend proxy mode\r\n private userContext?: UserContext;\r\n\r\n // API state signals\r\n public isLoadingApi = signal<boolean>(false);\r\n public apiError = signal<ChatApiError | null>(null);\r\n public isBotTyping = signal<boolean>(false);\r\n public isGuestMode = signal<boolean>(false);\r\n\r\n constructor() {\r\n // Start with empty messages - no auto-load\r\n }\r\n\r\n setGuestMode(isGuest: boolean) {\r\n this.isGuestMode.set(isGuest);\r\n }\r\n\r\n /**\r\n * Switch to a new context\r\n */\r\n public switchContext(contextKey: string): void {\r\n this.currentContextKey.set(contextKey);\r\n // Start fresh - don't auto-load\r\n this.startNewSession();\r\n }\r\n\r\n /**\r\n * Start a new chat session\r\n */\r\n public startNewSession(): void {\r\n const contextKey = this.currentContextKey();\r\n const userId = this.userContext?.userId || 'anonymous';\r\n\r\n this.activeSession = this.chatHistoryService.createSession(contextKey, userId);\r\n this.messages.set([]);\r\n }\r\n\r\n /**\r\n * Load an existing session\r\n */\r\n public loadSession(session: ChatSession): void {\r\n this.activeSession = session;\r\n this.messages.set([...session.messages]);\r\n }\r\n\r\n /**\r\n * Get current context key\r\n */\r\n public getCurrentContextKey(): string {\r\n return this.currentContextKey();\r\n }\r\n\r\n /**\r\n * Set user context for backend proxy mode\r\n */\r\n public setUserContext(context: UserContext): void {\r\n this.userContext = context;\r\n // Start fresh when user changes - don't auto-load\r\n this.startNewSession();\r\n }\r\n\r\n /**\r\n * Get current user context\r\n */\r\n public getUserContext(): UserContext | undefined {\r\n return this.userContext;\r\n }\r\n\r\n /**\r\n * Get active session\r\n */\r\n public getActiveSession(): ChatSession | null {\r\n return this.activeSession;\r\n }\r\n\r\n /**\r\n * Clear messages for current session and start new one\r\n */\r\n clearMessages(): void {\r\n this.messages.set([]);\r\n this.startNewSession();\r\n }\r\n\r\n /**\r\n * Add message to current session\r\n */\r\n public addMessage(message: Message): void {\r\n const newMessage = { ...message, timestamp: new Date() };\r\n\r\n // Update current messages signal\r\n this.messages.update((msgs) => [...msgs, newMessage]);\r\n\r\n // Save to active session\r\n if (this.activeSession) {\r\n console.log('Saving message to session:', this.activeSession.id);\r\n this.chatHistoryService.saveMessageToSession(this.activeSession, newMessage).subscribe(() => {\r\n console.log('Message saved, session title:', this.activeSession?.title);\r\n });\r\n } else {\r\n console.warn('No active session to save message to!');\r\n }\r\n\r\n if (message.sender === 'bot') {\r\n this.playBotSound();\r\n }\r\n }\r\n\r\n /**\r\n * Get bot reply - supports both API and local modes\r\n */\r\n async getBotReply(userText: string): Promise<string> {\r\n // If in guest mode, force local logic\r\n if (this.isGuestMode()) {\r\n return this.getBotReplyLocal(userText);\r\n }\r\n\r\n // Get auth service to check if user is authenticated\r\n const authService = inject(AuthService, { optional: true });\r\n const isAuthenticated = authService?.isAuthenticated() || false;\r\n\r\n // Call API if user is authenticated\r\n if (isAuthenticated) {\r\n return this.getBotReplyFromApi(userText);\r\n }\r\n\r\n // Fall back to local intent matching\r\n return this.getBotReplyLocal(userText);\r\n }\r\n\r\n /**\r\n * Get bot reply from API\r\n */\r\n private async getBotReplyFromApi(userText: string): Promise<string> {\r\n // Inject AccountService dynamically\r\n const accountService = inject(AccountService, { optional: true });\r\n\r\n if (!accountService) {\r\n console.error('AccountService not available, falling back to local');\r\n return this.getBotReplyLocal(userText);\r\n }\r\n\r\n try {\r\n this.isLoadingApi.set(true);\r\n this.apiError.set(null);\r\n\r\n // Call chat API endpoint\r\n const response = await firstValueFrom(accountService.startChat({ message: userText }));\r\n\r\n this.isLoadingApi.set(false);\r\n\r\n if (response && response.success && response.data) {\r\n return response.data.reply || response.data.message || this.getFallbackReply();\r\n }\r\n\r\n return this.getFallbackReply();\r\n } catch (error) {\r\n this.isLoadingApi.set(false);\r\n const apiError = error as ChatApiError;\r\n this.apiError.set(apiError);\r\n console.error('API error, falling back to local mode:', apiError);\r\n\r\n // Fallback to local mode on API error\r\n return this.getBotReplyLocal(userText);\r\n }\r\n }\r\n\r\n /**\r\n * Get bot reply using local intent matching\r\n */\r\n private getBotReplyLocal(userText: string): string {\r\n const text = userText.toLowerCase();\r\n for (const intent of CHAT_INTENTS) {\r\n if (intent.patterns.some((pattern) => text.includes(pattern))) {\r\n return intent.response;\r\n }\r\n }\r\n return this.getFallbackReply();\r\n }\r\n\r\n /**\r\n * Process a user message: add it, get bot reply, and add bot reply\r\n */\r\n public async processUserMessage(text: string): Promise<void> {\r\n this.addMessage({\r\n sender: 'user',\r\n text: text,\r\n id: Date.now().toString(),\r\n timestamp: new Date(),\r\n });\r\n\r\n this.isBotTyping.set(true);\r\n\r\n const minDelay = 1000;\r\n const start = Date.now();\r\n\r\n try {\r\n const botReply = await this.getBotReply(text);\r\n\r\n // Ensure minimum delay\r\n const elapsed = Date.now() - start;\r\n if (elapsed < minDelay) {\r\n await new Promise((resolve) => setTimeout(resolve, minDelay - elapsed));\r\n }\r\n\r\n const isFallback = botReply === this.getFallbackReply();\r\n this.addMessage({\r\n sender: 'bot',\r\n text: botReply,\r\n id: Date.now().toString(),\r\n showSuggestions: isFallback,\r\n });\r\n } catch (error) {\r\n console.error('Error getting bot reply:', error);\r\n this.addMessage({\r\n sender: 'bot',\r\n text: this.getFallbackReply(),\r\n id: Date.now().toString(),\r\n showSuggestions: true,\r\n });\r\n } finally {\r\n this.isBotTyping.set(false);\r\n }\r\n }\r\n\r\n getFallbackReply(): string {\r\n return \"I'm sorry 😔, I didn't understand that.\";\r\n }\r\n\r\n isFallbackIntent(userText: string): boolean {\r\n const text = userText.toLowerCase();\r\n return !CHAT_INTENTS.some((intent) =>\r\n intent.patterns.some((pattern) => text.includes(pattern)),\r\n );\r\n }\r\n\r\n public unlockAudio(): void {\r\n if (this.audioUnlocked) return;\r\n const audio = new Audio();\r\n audio.volume = 1.0;\r\n audio\r\n .play()\r\n .then(() => (this.audioUnlocked = true))\r\n .catch(() => {});\r\n }\r\n\r\n public playBotSound(): void {\r\n if (!this.audioUnlocked) return;\r\n try {\r\n const audio = new Audio('assets/bot.mp3');\r\n audio.play();\r\n } catch (error) {\r\n console.error('Error playing bot sound:', error);\r\n }\r\n }\r\n}\r\n","import { Injectable, inject, signal, computed } from '@angular/core';\r\nimport { Observable, firstValueFrom } from 'rxjs';\r\nimport { MessageService } from '../../components/message-input/messaging.service';\r\nimport { ChatHistoryService } from './chat-history.service';\r\nimport { AccountService } from './account.service';\r\nimport { AuthService } from './auth.service';\r\nimport { TenantContextService } from './tenant-context.service';\r\nimport { ChatSession } from '../../model/chat-session.model';\r\nimport { LoginRequest } from '../models/login-request.model';\r\nimport { UserContext } from '../models/user-context.model';\r\n\r\n/**\r\n * ChatFacadeService - High-level orchestration service\r\n *\r\n * Coordinates operations between multiple services to provide simplified,\r\n * high-level operations for the chat component. This facade encapsulates\r\n * complex interactions and provides a clean API for common chat operations.\r\n *\r\n * Responsibilities:\r\n * - Session management (load, delete, switch sessions)\r\n * - Authentication orchestration\r\n * - Message operations coordination\r\n * - Context management\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChatFacadeService {\r\n private messageService = inject(MessageService);\r\n private chatHistoryService = inject(ChatHistoryService);\r\n private accountService = inject(AccountService);\r\n private authService = inject(AuthService);\r\n private tenantContextService = inject(TenantContextService);\r\n\r\n // Chat State\r\n public messages = this.messageService.messages;\r\n public isBotTyping = this.messageService.isBotTyping;\r\n public chatSessions = signal<ChatSession[]>([]);\r\n public isAuthenticated = signal(false);\r\n public isGuestMode = signal(false);\r\n public messageError = signal<string | null>(null);\r\n\r\n // API / Auth State\r\n apiError = signal<string | null>(null);\r\n authError = signal<string | null>(null);\r\n authSuccess = signal<string | null>(null);\r\n isLoggingIn = signal<boolean>(false);\r\n\r\n constructor() {\r\n // Set initial authentication status\r\n this.isAuthenticated.set(this.authService.isAuthenticated());\r\n\r\n // Check if we should default to guest mode (missing API config)\r\n if (!this.authService.apiUrl || !this.authService.companyCode) {\r\n console.log('ChatFacade: No API config detected, defaulting to Guest Mode');\r\n this.isGuestMode.set(true);\r\n }\r\n }\r\n\r\n /**\r\n * Get logged-in user's name from auth token\r\n */\r\n getLoggedInUserName(): string {\r\n const username = this.authService.getLocalStorage('username');\r\n return username || 'User';\r\n }\r\n\r\n // ============================================================================\r\n // SESSION MANAGEMENT\r\n // ============================================================================\r\n\r\n /**\r\n * Load all chat sessions for a specific user and context\r\n */\r\n loadUserSessions(contextKey: string, userId: string): void {\r\n this.chatHistoryService.loadAllSessions(contextKey, userId).subscribe((sessions) => {\r\n this.chatSessions.set(sessions);\r\n console.log(`Loaded ${sessions.length} sessions for context: ${contextKey}, user: ${userId}`);\r\n });\r\n }\r\n\r\n /**\r\n * Delete a specific session\r\n */\r\n deleteSession(sessionId: string, contextKey: string, userId: string): Observable<void> {\r\n return new Observable((observer) => {\r\n this.chatHistoryService.deleteSession(sessionId, contextKey, userId).subscribe({\r\n next: () => {\r\n // Reload sessions after deletion\r\n this.loadUserSessions(contextKey, userId);\r\n\r\n // If deleted session is currently active, start a new one\r\n const activeSession = this.messageService.getActiveSession();\r\n if (activeSession?.id === sessionId) {\r\n this.messageService.startNewSession();\r\n }\r\n\r\n observer.next();\r\n observer.complete();\r\n },\r\n error: (err) => observer.error(err),\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Load a specific session into the message service\r\n */\r\n loadSession(session: ChatSession): void {\r\n this.messageService.loadSession(session);\r\n console.log('Loaded session:', session.title);\r\n }\r\n\r\n /**\r\n * Start a new chat session\r\n */\r\n startNewSession(): void {\r\n this.messageService.startNewSession();\r\n }\r\n\r\n // ============================================================================\r\n // MESSAGE OPERATIONS\r\n // ============================================================================\r\n\r\n /**\r\n * Send a message with validation\r\n */\r\n async sendMessage(text: string, maxLength: number = 1000): Promise<void> {\r\n const trimmedText = text.trim();\r\n this.messageError.set(null);\r\n\r\n if (!trimmedText) {\r\n return;\r\n }\r\n\r\n if (trimmedText.length > maxLength) {\r\n this.messageError.set(`Message exceeds maximum length of ${maxLength} characters.`);\r\n setTimeout(() => {\r\n this.messageError.set(null);\r\n }, 5000);\r\n return;\r\n }\r\n\r\n // Delegate to MessageService\r\n await this.messageService.processUserMessage(trimmedText);\r\n }\r\n\r\n /**\r\n * Clear the current chat and start a new session\r\n */\r\n clearCurrentChat(contextKey: string, userId: string): void {\r\n this.messageService.clearMessages();\r\n // Refresh sessions list after clearing\r\n this.loadUserSessions(contextKey, userId);\r\n }\r\n\r\n /**\r\n * Clear message error\r\n */\r\n clearMessageError(): void {\r\n this.messageError.set(null);\r\n this.authError.set(null);\r\n this.authSuccess.set(null);\r\n }\r\n\r\n // ============================================================================\r\n // AUTHENTICATION\r\n // ============================================================================\r\n\r\n /**\r\n * Enable guest mode explicitly\r\n */\r\n enableGuestMode(): void {\r\n this.isGuestMode.set(true);\r\n this.messageService.setGuestMode(true);\r\n }\r\n\r\n /**\r\n * Disable guest mode explicitly\r\n */\r\n disableGuestMode(): void {\r\n this.isGuestMode.set(false);\r\n this.messageService.setGuestMode(false);\r\n }\r\n\r\n /**\r\n * Authenticate user with credentials\r\n */\r\n async login(credentials: LoginRequest, silent: boolean = false): Promise<boolean> {\r\n this.isLoggingIn.set(true);\r\n if (!silent) {\r\n this.authError.set(null);\r\n this.authSuccess.set(null);\r\n }\r\n\r\n try {\r\n const response = await firstValueFrom(this.accountService.login(credentials));\r\n console.log('>>>>>>>>>>>Login response<<<<<<<<<<:', response);\r\n console.log('>>>>>>>>>>Credentials used<<<<<<<<:', credentials);\r\n if (response && response.success) {\r\n console.log('Login response (success):', response);\r\n this.isAuthenticated.set(true);\r\n this.disableGuestMode(); // Ensure guest mode is off\r\n if (!silent) {\r\n this.authSuccess.set('Login successful!');\r\n }\r\n this.isLoggingIn.set(false);\r\n return true;\r\n } else {\r\n this.isAuthenticated.set(false);\r\n if (!silent) {\r\n this.authError.set('Login failed. Please check your credentials.');\r\n }\r\n this.isLoggingIn.set(false);\r\n return false;\r\n }\r\n } catch (error) {\r\n console.error('Login failed:', error);\r\n this.isAuthenticated.set(false);\r\n if (!silent) {\r\n this.authError.set('An error occurred during login.');\r\n }\r\n this.isLoggingIn.set(false);\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Check if user is authenticated\r\n */\r\n checkAuthentication(): boolean {\r\n return this.authService.isAuthenticated();\r\n }\r\n\r\n /**\r\n * Logout the current user\r\n */\r\n async logout(): Promise<void> {\r\n try {\r\n // Get refresh token from auth service\r\n const refreshToken = this.authService.getLocalStorage('refresh_token');\r\n\r\n if (!refreshToken) {\r\n console.warn('No refresh token found, clearing local state only');\r\n this.clearAuthState();\r\n return;\r\n }\r\n\r\n // Call the backend logout endpoint with refresh token\r\n const response = await firstValueFrom(this.accountService.logout(refreshToken));\r\n\r\n if (response && response.success) {\r\n this.clearAuthState();\r\n console.log('User logged out successfully');\r\n } else {\r\n throw new Error('Logout failed');\r\n }\r\n } catch (error) {\r\n console.error('Logout failed:', error);\r\n // Even if backend logout fails, clear local state\r\n this.clearAuthState();\r\n this.authError.set('Logout completed with errors.');\r\n setTimeout(() => {\r\n this.authError.set(null);\r\n }, 5000);\r\n }\r\n }\r\n\r\n /**\r\n * Clear authentication state and reset UI\r\n */\r\n private clearAuthState(): void {\r\n // Clear auth storage via AuthService\r\n this.authService.clearAuth();\r\n\r\n // Update authentication state\r\n this.isAuthenticated.set(false);\r\n this.isGuestMode.set(false);\r\n\r\n // Clear messages and start new session\r\n this.messageService.clearMessages();\r\n this.messageService.startNewSession();\r\n\r\n // Clear sessions\r\n this.chatSessions.set([]);\r\n\r\n // Show success message\r\n this.authSuccess.set('Logged out successfully!');\r\n\r\n // Clear success message after 3 seconds\r\n setTimeout(() => {\r\n this.authSuccess.set(null);\r\n }, 3000);\r\n }\r\n\r\n // ============================================================================\r\n // CONTEXT MANAGEMENT\r\n // ============================================================================\r\n\r\n /**\r\n * Update tenant context (platformTenant, subTenant, agent)\r\n */\r\n updateTenantContext(platformTenant: string, subTenant: string, agent: string): void {\r\n this.tenantContextService.setContext({\r\n platformTenant: platformTenant || '',\r\n subTenant: subTenant || '',\r\n agent: agent || '',\r\n });\r\n\r\n // Sync message service with new context\r\n const contextKey = this.tenantContextService.contextKey();\r\n console.log('>>>>>ChatFacade: Switching context to', contextKey);\r\n this.messageService.switchContext(contextKey);\r\n }\r\n\r\n /**\r\n * Handle user context changes (for backend proxy mode)\r\n */\r\n handleUserContextChange(userContext: UserContext): void {\r\n this.messageService.setUserContext(userContext);\r\n console.log('>>>>ChatFacade: User context updated', userContext.userName);\r\n }\r\n\r\n /**\r\n * Get current context key\r\n */\r\n getCurrentContextKey(): string {\r\n return this.tenantContextService.contextKey();\r\n }\r\n\r\n /**\r\n * Subscribe to context changes\r\n */\r\n subscribeToContextChanges(callback: (contextKey: string) => void): () => void {\r\n const subscription = this.tenantContextService.contextChange$.subscribe((event) => {\r\n // Sync message service with new context\r\n this.messageService.switchContext(event.contextKey);\r\n callback(event.contextKey);\r\n });\r\n\r\n // Return cleanup function\r\n return () => subscription.unsubscribe();\r\n }\r\n\r\n // ============================================================================\r\n // COMPUTED STATE\r\n // ============================================================================\r\n\r\n /**\r\n * Determine if suggestion chips should be shown\r\n */\r\n showSuggestionChips = computed(() => {\r\n const msgs = this.messages();\r\n if (msgs.length === 0) return false;\r\n const lastBotMsg = [...msgs].reverse().find((m) => m.sender === 'bot');\r\n return lastBotMsg?.showSuggestions === true;\r\n });\r\n}\r\n","import { Injectable, signal, computed, effect } from '@angular/core';\r\nimport { Message } from '../../model/message';\r\n\r\n/**\r\n * ChatUIStateService - Centralized UI state management\r\n * \r\n * Manages all UI-related state for the chat component including:\r\n * - Chat window open/close state\r\n * - History sidebar visibility\r\n * - Unread message tracking\r\n * - Fullscreen state\r\n * \r\n * This service uses Angular signals for reactive state management,\r\n * allowing components to subscribe to state changes efficiently.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ChatUIStateService {\r\n // ============================================================================\r\n // UI STATE SIGNALS\r\n // ============================================================================\r\n\r\n /**\r\n * Whether the chat window is currently open\r\n */\r\n public isChatOpen = signal(false);\r\n\r\n /**\r\n * Whether the history sidebar is currently open\r\n */\r\n public isHistorySidebarOpen = signal(false);\r\n\r\n /**\r\n * Whether the chat is in fullscreen mode\r\n */\r\n public isFullScreen = signal(false);\r\n\r\n /**\r\n * ID of the last message that was read by the user\r\n */\r\n private lastReadMessageId = signal<string | null>(null);\r\n\r\n /**\r\n * Reference to current messages (injected from outside)\r\n */\r\n private messagesSignal = signal<Message[]>([]);\r\n\r\n // ============================================================================\r\n // COMPUTED SIGNALS\r\n // ============================================================================\r\n\r\n /**\r\n * Computed number of unread bot messages\r\n */\r\n public unreadCount = computed(() => {\r\n if (this.isChatOpen()) {\r\n return 0; // No unread when chat is open\r\n }\r\n\r\n const messages = this.messagesSignal();\r\n if (messages.length === 0) return 0;\r\n\r\n const lastReadId = this.lastReadMessageId();\r\n let lastReadIndex = -1;\r\n\r\n if (lastReadId !== null) {\r\n lastReadIndex = messages.findIndex((msg) => msg.id === lastReadId);\r\n }\r\n\r\n // Count unread bot messages after last read position\r\n const unreadBotMessages = messages\r\n .slice(lastReadIndex + 1)\r\n .filter((msg) => msg.sender === 'bot');\r\n\r\n return unreadBotMessages.length;\r\n });\r\n\r\n // ============================================================================\r\n // EFFECTS\r\n // ============================================================================\r\n\r\n /**\r\n * Effect to automatically mark messages as read when chat is opened\r\n */\r\n public markAsReadEffect = effect(\r\n () => {\r\n const isOpen = this.isChatOpen();\r\n const msgs = this.messagesSignal();\r\n\r\n if (isOpen && msgs.length > 0) {\r\n const lastMessage = msgs[msgs.length - 1];\r\n if (lastMessage?.id) {\r\n const currentLastRead = this.lastReadMessageId();\r\n if (lastMessage.id !== currentLastRead) {\r\n this.lastReadMessageId.set(lastMessage.id);\r\n }\r\n }\r\n }\r\n },\r\n { allowSignalWrites: true }\r\n );\r\n\r\n // ============================================================================\r\n // PUBLIC METHODS\r\n // ============================================================================\r\n\r\n /**\r\n * Set the messages signal reference from an external source\r\n * This allows the UI state service to track messages from MessageService\r\n */\r\n setMessagesSignal(messagesSignal: any): void {\r\n this.messagesSignal = messagesSignal;\r\n }\r\n\r\n /**\r\n * Toggle the chat window open/close state\r\n */\r\n toggleChat(): void {\r\n const currentlyOpen = this.isChatOpen();\r\n this.isChatOpen.update((open) => !open);\r\n\r\n // Mark messages as read when opening chat\r\n if (!currentlyOpen) {\r\n const messages = this.messagesSignal();\r\n if (messages.length > 0) {\r\n const lastMessage = messages[messages.length - 1];\r\n this.lastReadMessageId.set(lastMessage.id ?? null);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Toggle the history sidebar open/close state\r\n */\r\n toggleHistorySidebar(): void {\r\n this.isHistorySidebarOpen.update((open) => !open);\r\n }\r\n\r\n /**\r\n * Close the chat window\r\n */\r\n closeChat(): void {\r\n this.isChatOpen.set(false);\r\n }\r\n\r\n /**\r\n * Open the chat window\r\n */\r\n openChat(): void {\r\n this.isChatOpen.set(true);\r\n }\r\n\r\n /**\r\n * Close the history sidebar\r\n */\r\n closeHistorySidebar(): void {\r\n this.isHistorySidebarOpen.set(false);\r\n }\r\n\r\n /**\r\n * Open the history sidebar\r\n */\r\n openHistorySidebar(): void {\r\n this.isHistorySidebarOpen.set(true);\r\n }\r\n\r\n /**\r\n * Toggle fullscreen mode\r\n */\r\n toggleFullscreen(): void {\r\n this.isFullScreen.update((fs) => !fs);\r\n }\r\n\r\n /**\r\n * Set fullscreen state\r\n */\r\n setFullscreen(isFullscreen: boolean): void {\r\n this.isFullScreen.set(isFullscreen);\r\n }\r\n\r\n /**\r\n * Manually mark messages as read up to a specific message ID\r\n */\r\n markMessagesAsRead(messageId: string): void {\r\n this.lastReadMessageId.set(messageId);\r\n }\r\n\r\n /**\r\n * Reset last read message ID\r\n */\r\n resetLastRead(): void {\r\n this.lastReadMessageId.set(null);\r\n }\r\n\r\n /**\r\n * Get the last read message ID\r\n */\r\n getLastReadMessageId(): string | null {\r\n return this.lastReadMessageId();\r\n }\r\n}\r\n","//projects\\doohbot\\src\\lib\\constant\\utf8.ts\r\nexport const appEmoji = {\r\n waveHand: '\\u{1F44B}',\r\n robotFace: '\\u{1F916}',\r\n partyPopper: '\\u{1F389}',\r\n thinkingFace: '\\u{1F914}',\r\n thumbsUp: '\\u{1F44D}',\r\n thumbsDown: '\\u{1F44E}',\r\n redHeart: '\\u{2764}\\u{FE0F}',\r\n};\r\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, tap } from 'rxjs';\r\nimport { AuthService } from '../services/auth.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthInterceptor implements HttpInterceptor {\r\n constructor(private auth: AuthService) {}\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n const authReq = this.getRequestWithHeaders(req);\r\n return this.sendRequest(authReq, next);\r\n }\r\n\r\n sendRequest(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n return next.handle(req).pipe(\r\n tap((event: any) => {\r\n // if (event instanceof HttpResponse) {\r\n // this.ngxCache.setHttpResponse(req.urlWithParams\r\n // .replace('refresh=true', '')\r\n // .replace('refresh=false', '')\r\n // .replace('refresh=undefined', ''), event, AppConst.data.timeToLeave || 60);\r\n // }\r\n }),\r\n );\r\n }\r\n\r\n getRequestWithHeaders(req: HttpRequest<any>): any {\r\n let headers = req.headers;\r\n const token = this.auth.getLocalStorage('access_token') ?? '';\r\n\r\n if (token != '') {\r\n headers = headers.set('Authorization', `Bearer ${token}`);\r\n }\r\n\r\n return req.clone({ headers });\r\n }\r\n}\r\n","import {\r\n APP_INITIALIZER,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n provideAppInitializer,\r\n Renderer2,\r\n SimpleChanges,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DoohbotInput } from './inputs/doohbot-input';\r\nimport { PredefinedMessages } from './helpers/predefined_messages';\r\nimport { ChatButtonComponent } from './components/chat-button/chat-button.component';\r\nimport { ChatWindowComponent } from './components/chat-window/chat-window.component';\r\nimport { DoohbotApiConfig } from './model/api-config.model';\r\nimport { UserContext } from './core/models/user-context.model';\r\nimport { DoohbotThemeConfig } from './model/theme-config.model';\r\nimport { FullscreenDirective } from './directives/fullscreen/fullscreen.directive';\r\nimport { ChatSession } from './model/chat-session.model';\r\nimport { appConst } from './constant/constant';\r\nimport { AppConst } from './core/app-const';\r\nimport { LoginRequest } from './core/models/login-request.model';\r\nimport { ThemeService } from './core/services/theme.service';\r\nimport { ChatFacadeService } from './core/services/chat-facade.service';\r\nimport { ChatUIStateService } from './core/services/chat-ui-state.service';\r\nimport { appEmoji } from './constant/utf8';\r\nimport { bootstrapApplication } from '@angular/platform-browser';\r\nimport { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\r\nimport { AuthInterceptor } from './core/interceptors/auth.interceptor';\r\n\r\n@Component({\r\n selector: 'app-doohbot',\r\n standalone: true,\r\n imports: [CommonModule, ChatButtonComponent, ChatWindowComponent, FullscreenDirective],\r\n templateUrl: './doohbot.component.html',\r\n styleUrls: ['./doohbot.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n // providers: [\r\n // AppConst,\r\n // {\r\n // provide: APP_INITIALIZER,\r\n // useFactory: (appConst: AppConst) => () => appConst.load(),\r\n // deps: [AppConst],\r\n // multi: true,\r\n // },\r\n // ],\r\n})\r\nexport class Doohbot extends DoohbotInput implements OnDestroy {\r\n // ============================================================================\r\n // INPUTS\r\n // ============================================================================\r\n\r\n @Input() config: DoohbotInput = new DoohbotInput();\r\n @Input() platformTenant!: string;\r\n @Input() subTenant!: string;\r\n @Input() agent!: string;\r\n @Input() buttonStyle: 'fab' | 'sidebar' | 'sidebar-top' | 'sidebar-bottom' = 'fab';\r\n @Input() enableDrag: boolean = false;\r\n @Input() enableResize: boolean = false;\r\n @Input() apiConfig?: DoohbotApiConfig;\r\n @Input() userContext?: UserContext;\r\n @Input() themeConfig: DoohbotThemeConfig | undefined;\r\n\r\n appEmoji = appEmoji;\r\n\r\n // ============================================================================\r\n // FACADE SERVICES\r\n // ============================================================================\r\n\r\n private chatFacade = inject(ChatFacadeService);\r\n private uiState = inject(ChatUIStateService);\r\n private themeService = inject(ThemeService);\r\n\r\n // ============================================================================\r\n // EXPOSED STATE FROM FACADES\r\n // ============================================================================\r\n\r\n // UI State\r\n public isChatOpen = this.uiState.isChatOpen;\r\n public isHistorySidebarOpen = this.uiState.isHistorySidebarOpen;\r\n public unreadCount = this.uiState.unreadCount;\r\n public isFullScreen = this.uiState.isFullScreen;\r\n\r\n // Chat Facade State\r\n public isAuthenticated = this.chatFacade.isAuthenticated;\r\n public messages = this.chatFacade.messages;\r\n public isBotTyping = this.chatFacade.isBotTyping;\r\n public chatSessions = this.chatFacade.chatSessions;\r\n public messageError = this.chatFacade.messageError;\r\n public showSuggestionChips = this.chatFacade.showSuggestionChips;\r\n public isGuestMode = this.chatFacade.isGuestMode;\r\n public isLoggingIn = this.chatFacade.isLoggingIn;\r\n public authError = this.chatFacade.authError;\r\n public authSuccess = this.chatFacade.authSuccess;\r\n\r\n // ============================================================================\r\n // COMPONENT-SPECIFIC STATE\r\n // ============================================================================\r\n\r\n public userName = 'User';\r\n public predefinedMessages: string[] = PredefinedMessages;\r\n public maxMessageLength = 1000;\r\n\r\n // Context cleanup\r\n private contextCleanup?: () => void;\r\n\r\n /**\r\n * Check if current user is a guest user\r\n */\r\n public isGuestUser = computed(() => {\r\n const userId = this.userContext?.userId || 'anonymous';\r\n return this.checkIfGuestUser(userId);\r\n });\r\n\r\n /**\r\n * Helper method to check if a user ID belongs to a guest user\r\n */\r\n private checkIfGuestUser(userId: string): boolean {\r\n const guestUserIds = ['anonymous', 'guest', 'default', ''];\r\n return guestUserIds.includes(userId.toLowerCase());\r\n }\r\n\r\n // ============================================================================\r\n // VIEW CHILDREN\r\n // ============================================================================\r\n\r\n @ViewChild(ChatWindowComponent, { read: ElementRef }) chatWindowRef!: ElementRef;\r\n @ViewChild(FullscreenDirective) fullscreenDirective!: FullscreenDirective;\r\n\r\n // ============================================================================\r\n // CONSTRUCTOR\r\n // ============================================================================\r\n\r\n constructor(\r\n private elementRef: ElementRef,\r\n private renderer: Renderer2,\r\n ) {\r\n super();\r\n\r\n // Setup messages signal ref for UI state service\r\n this.uiState.setMessagesSignal(this.chatFacade.messages);\r\n\r\n // Theme management effect\r\n effect(() => {\r\n const activeTheme = this.themeService.activeTheme();\r\n const host = this.elementRef.nativeElement;\r\n this.renderer.removeClass(host, 'light-theme');\r\n this.renderer.removeClass(host, 'dark-theme');\r\n this.renderer.addClass(host, activeTheme);\r\n this.themeService.applyCssVariables(host, this.themeConfig);\r\n });\r\n\r\n // Update userName when authentication status changes\r\n effect(() => {\r\n const isAuth = this.chatFacade.isAuthenticated();\r\n if (isAuth) {\r\n const loggedInName = this.chatFacade.getLoggedInUserName();\r\n if (loggedInName !== 'User') {\r\n this.userName = loggedInName;\r\n console.log('Updated userName from auth token:', this.userName);\r\n }\r\n }\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // LIFECYCLE HOOKS\r\n // ============================================================================\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n // Handle user context changes\r\n if (changes['userContext'] && this.userContext) {\r\n this.chatFacade.handleUserContextChange(this.userContext);\r\n this.userName = this.userContext.userName || this.config.username || 'User';\r\n\r\n // Reset UI state and re-authenticate\r\n this.uiState.closeChat();\r\n // Close history sidebar when user is switched\r\n this.uiState.closeHistorySidebar();\r\n // this.performLogin();\r\n\r\n // Load sessions for new user\r\n this.loadUserSessions();\r\n }\r\n\r\n // Handle config changes\r\n if (changes['config']) {\r\n this.userAvatarUrl = this.config.userAvatarUrl || appConst.USER_AVATAR;\r\n if (!this.userName || this.userName === 'User') {\r\n this.userName = this.config.username || 'User';\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n // Initialize theme\r\n this.themeService.applyCssVariables(this.elementRef.nativeElement, this.themeConfig);\r\n\r\n // Set user avatar and name\r\n this.userAvatarUrl = this.config.userAvatarUrl || appConst.USER_AVATAR;\r\n this.userName = this.userContext?.userName || this.config.username || 'User';\r\n\r\n // Initialize tenant context\r\n this.chatFacade.updateTenantContext(\r\n this.platformTenant || '',\r\n this.subTenant || '',\r\n this.agent || '',\r\n );\r\n\r\n // Start new session\r\n this.chatFacade.startNewSession();\r\n\r\n // Load user sessions\r\n this.loadUserSessions();\r\n\r\n // Subscribe to context changes\r\n this.contextCleanup = this.chatFacade.subscribeToContextChanges((contextKey) => {\r\n this.uiState.resetLastRead();\r\n });\r\n\r\n // Perform authentication\r\n if (!this.chatFacade.checkAuthentication()) {\r\n this.performLogin();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n // Clean up subscriptions\r\n if (this.contextCleanup) {\r\n this.contextCleanup();\r\n }\r\n }\r\n\r\n // ============================================================================\r\n // AUTHENTICATION\r\n // ============================================================================\r\n\r\n private performLogin(): void {\r\n const credentials: LoginRequest = {\r\n username: this.config.username || AppConst.data?.username,\r\n password: this.config.password || AppConst.data?.password,\r\n };\r\n\r\n console.log('performLogin:', credentials.username, credentials.password);\r\n this.chatFacade.login(credentials, true);\r\n }\r\n\r\n performLoginWithCredentials(credentials: LoginRequest): void {\r\n this.chatFacade.login(credentials, false);\r\n }\r\n\r\n continueAsGuest(): void {\r\n this.chatFacade.enableGuestMode();\r\n }\r\n\r\n disableGuestMode(): void {\r\n this.chatFacade.disableGuestMode();\r\n }\r\n\r\n performLogout(): void {\r\n this.chatFacade.logout();\r\n }\r\n\r\n // ============================================================================\r\n // CHAT OPERATIONS\r\n // ============================================================================\r\n\r\n toggleChat(): void {\r\n this.uiState.toggleChat();\r\n }\r\n\r\n async sendMessage(text: string): Promise<void> {\r\n await this.chatFacade.sendMessage(text, this.maxMessageLength);\r\n }\r\n\r\n clearChat(): void {\r\n const contextKey = this.chatFacade.getCurrentContextKey();\r\n const userId = this.userContext?.userId || 'anonymous';\r\n this.chatFacade.clearCurrentChat(contextKey, userId);\r\n }\r\n\r\n clearMessageError(): void {\r\n this.chatFacade.clearMessageError();\r\n }\r\n\r\n // ============================================================================\r\n // SESSION MANAGEMENT\r\n // ============================================================================\r\n\r\n toggleHistorySidebar(): void {\r\n this.uiState.toggleHistorySidebar();\r\n }\r\n\r\n loadChatSession(session: ChatSession): void {\r\n this.chatFacade.loadSession(session);\r\n this.uiState.closeHistorySidebar();\r\n }\r\n\r\n deleteSession(sessionId: string): void {\r\n const contextKey = this.chatFacade.getCurrentContextKey();\r\n const userId = this.userContext?.userId || 'anonymous';\r\n this.chatFacade.deleteSession(sessionId, contextKey, userId).subscribe();\r\n }\r\n\r\n private loadUserSessions(): void {\r\n const contextKey = this.chatFacade.getCurrentContextKey();\r\n const userId = this.userContext?.userId || 'anonymous';\r\n this.chatFacade.loadUserSessions(contextKey, userId);\r\n }\r\n\r\n // ============================================================================\r\n // FULLSCREEN\r\n // ============================================================================\r\n\r\n toggleFullScreen(): void {\r\n if (this.fullscreenDirective) {\r\n this.fullscreenDirective.toggle();\r\n const isFullscreen = this.fullscreenDirective.getFullscreenState();\r\n this.uiState.setFullscreen(isFullscreen);\r\n }\r\n }\r\n\r\n // ============================================================================\r\n // UTILITY METHODS\r\n // ============================================================================\r\n\r\n trackByMessageId(index: number, item: any): string {\r\n return item.id || index.toString();\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// APP INITIALIZATION\r\n// ============================================================================\r\n\r\nexport function initializeApp() {\r\n const appConst = inject(AppConst);\r\n return appConst.load(); // Returns a Promise\r\n}\r\n\r\nbootstrapApplication(Doohbot, {\r\n providers: [\r\n provideHttpClient(withInterceptorsFromDi()),\r\n AppConst,\r\n provideAppInitializer(initializeApp),\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: AuthInterceptor,\r\n multi: true,\r\n },\r\n ],\r\n});\r\n","<app-chat-button\r\n [buttonStyle]=\"buttonStyle\"\r\n [isChatOpen]=\"isChatOpen()\"\r\n [unreadCount]=\"unreadCount()\"\r\n [chatIcon]=\"chatIcon ?? ''\"\r\n [appTitle]=\"appTitle ?? ''\"\r\n [appLogoUrl]=\"appLogoUrl ?? ''\"\r\n [appTextLogoUrl]=\"appTextLogoUrl ?? ''\"\r\n (toggle)=\"toggleChat()\"\r\n></app-chat-button>\r\n\r\n<app-chat-window\r\n *ngIf=\"isChatOpen()\"\r\n appFullscreen\r\n [isChatOpen]=\"isChatOpen()\"\r\n [enableDrag]=\"enableDrag\"\r\n [enableResize]=\"enableResize\"\r\n [isFullScreen]=\"isFullScreen()\"\r\n [appTitle]=\"appTitle ?? ''\"\r\n [appLogoUrl]=\"appLogoUrl ?? ''\"\r\n [appTextLogoUrl]=\"appTextLogoUrl ?? ''\"\r\n [appHeaderLogoUrl]=\"appHeaderLogoUrl ?? ''\"\r\n [moreIcon]=\"moreIcon ?? ''\"\r\n [minimizeIcon]=\"minimizeIcon ?? ''\"\r\n [messages]=\"messages()\"\r\n [isBotTyping]=\"isBotTyping()\"\r\n [isAuthenticated]=\"isAuthenticated()\"\r\n [appSubtitle]=\"appSubtitle ?? ''\"\r\n [welcomeDesc]=\"welcomeDesc ?? ''\"\r\n [predefinedMessages]=\"predefinedMessages\"\r\n [botAvatarUrl]=\"botAvatarUrl ?? ''\"\r\n [userAvatarUrl]=\"userAvatarUrl\"\r\n [userName]=\"userName\"\r\n [trackByMessageId]=\"trackByMessageId\"\r\n [hintText]=\"hintText ?? ''\"\r\n [sendIcon]=\"sendIcon ?? ''\"\r\n [messageError]=\"messageError()\"\r\n [showSuggestionChips]=\"showSuggestionChips()\"\r\n [isHistorySidebarOpen]=\"isHistorySidebarOpen()\"\r\n [chatSessions]=\"chatSessions()\"\r\n [chatHistoryUserName]=\"userName\"\r\n [isGuestUser]=\"isGuestUser()\"\r\n [isGuestMode]=\"isGuestMode()\"\r\n [isLoggingIn]=\"isLoggingIn()\"\r\n [authError]=\"authError()\"\r\n [authSuccess]=\"authSuccess()\"\r\n (toggleChat)=\"toggleChat()\"\r\n (continueAsGuest)=\"continueAsGuest()\"\r\n (loginClick)=\"disableGuestMode()\"\r\n (loginSubmit)=\"performLoginWithCredentials($event)\"\r\n (toggleFullScreen)=\"toggleFullScreen()\"\r\n (toggleHistorySidebar)=\"toggleHistorySidebar()\"\r\n (sessionSelected)=\"loadChatSession($event)\"\r\n (sessionDeleted)=\"deleteSession($event)\"\r\n (suggestionClick)=\"sendMessage($event)\"\r\n (send)=\"sendMessage($event)\"\r\n (clearMessageError)=\"clearMessageError()\"\r\n (clearChat)=\"clearChat()\"\r\n (logout)=\"performLogout()\"\r\n></app-chat-window>\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport const DOOHBOT_API_URL = new InjectionToken<string>('DOOHBOT_API_URL');\r\n","/*\r\n * Public API Surface of chatbot\r\n */\r\n\r\n// Main component\r\nexport * from './lib/doohbot.component';\r\n\r\nexport * from './lib/inputs/doohbot-input';\r\nexport * from './lib/model/api-config.model';\r\nexport * from './lib/core/models/user-context.model';\r\nexport * from './lib/core/services/doohbot-api.service';\r\nexport * from './lib/core/services/auth.service';\r\nexport * from './lib/core/services/account.service';\r\nexport * from './lib/constant/constant';\r\nexport * from './lib/model/token';\r\nexport * from './lib/model/tenant-config.model';\r\nexport * from './lib/model/chat-session.model';\r\nexport * from './lib/model/chat-context.model';\r\nexport * from './lib/model/theme-config.model';\r\nexport * from './lib/components/chat-window/chat-window.component';\r\nexport * from './lib/components/message-list/message-list.component';\r\nexport * from './lib/shared/dialog/dialog.component';\r\nexport * from './lib/shared/dialog/dialog.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i1.DialogService","i2","environmentprod","retry","map","catchError","i1.HttpService","i3.CryptoHelperService","i1.AuthService"],"mappings":"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"}
|