@vgroup/dialbox 0.0.81 → 0.0.82
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/esm2020/lib/components/incoming-call-overlay/incoming-call-overlay.component.mjs +65 -0
- package/esm2020/lib/dialbox.component.mjs +4 -3
- package/esm2020/lib/dialbox.module.mjs +8 -3
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/vgroup-dialbox.mjs +75 -8
- package/fesm2015/vgroup-dialbox.mjs.map +1 -1
- package/fesm2020/vgroup-dialbox.mjs +73 -8
- package/fesm2020/vgroup-dialbox.mjs.map +1 -1
- package/lib/components/incoming-call-overlay/incoming-call-overlay.component.d.ts +17 -0
- package/lib/dialbox.module.d.ts +7 -6
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../service/twilio.service";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
export class IncomingCallOverlayComponent {
|
|
6
|
+
constructor(twilioService) {
|
|
7
|
+
this.twilioService = twilioService;
|
|
8
|
+
this.showOverlay = false;
|
|
9
|
+
this.callData = {
|
|
10
|
+
phone: '',
|
|
11
|
+
name: 'Unknown',
|
|
12
|
+
img: 'assets/images/user.jpg',
|
|
13
|
+
isIncomingCall: false
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
ngOnInit() {
|
|
17
|
+
// Subscribe to call state changes
|
|
18
|
+
this.callStateSubscription = this.twilioService.currentCallState.subscribe(state => {
|
|
19
|
+
if (state === 'incoming') {
|
|
20
|
+
this.showOverlay = true;
|
|
21
|
+
}
|
|
22
|
+
else if (state === 'none') {
|
|
23
|
+
this.showOverlay = false;
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
// Subscribe to call object changes
|
|
27
|
+
this.callSubscription = this.twilioService.currentCall.subscribe((call) => {
|
|
28
|
+
if (call) {
|
|
29
|
+
this.callData = {
|
|
30
|
+
phone: call.parameters['From'],
|
|
31
|
+
name: call.customParameters?.get('name') || 'Unknown',
|
|
32
|
+
img: call.customParameters?.get('image') || 'assets/images/user.jpg',
|
|
33
|
+
isIncomingCall: true,
|
|
34
|
+
call: call
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
acceptCall() {
|
|
40
|
+
this.twilioService.isIncomingCallPicked.next(true);
|
|
41
|
+
this.twilioService.currentCallState.next('in-progress');
|
|
42
|
+
this.showOverlay = false;
|
|
43
|
+
// The actual call acceptance is handled by the Twilio service
|
|
44
|
+
}
|
|
45
|
+
rejectCall() {
|
|
46
|
+
const call = this.twilioService.currentCall.value;
|
|
47
|
+
if (call) {
|
|
48
|
+
call.reject();
|
|
49
|
+
this.twilioService.currentCall.next(null);
|
|
50
|
+
this.twilioService.currentCallState.next('none');
|
|
51
|
+
}
|
|
52
|
+
this.showOverlay = false;
|
|
53
|
+
}
|
|
54
|
+
ngOnDestroy() {
|
|
55
|
+
this.callSubscription?.unsubscribe();
|
|
56
|
+
this.callStateSubscription?.unsubscribe();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
IncomingCallOverlayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: IncomingCallOverlayComponent, deps: [{ token: i1.TwilioService }], target: i0.ɵɵFactoryTarget.Component });
|
|
60
|
+
IncomingCallOverlayComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: IncomingCallOverlayComponent, selector: "lib-incoming-call-overlay", ngImport: i0, template: "<div *ngIf=\"showOverlay\" class=\"incoming-call-overlay\">\n <div class=\"incoming-call-container\">\n <div class=\"caller-info\">\n <img [src]=\"callData.img\" alt=\"Caller\" class=\"caller-avatar\">\n <h3>{{ callData.name }}</h3>\n <p>{{ callData.phone }}</p>\n <p class=\"call-status\">Incoming Call</p>\n </div>\n <div class=\"call-actions\">\n <button class=\"btn-reject\" (click)=\"rejectCall()\">\n <i class=\"fas fa-phone-slash\"></i>\n </button>\n <button class=\"btn-accept\" (click)=\"acceptCall()\">\n <i class=\"fas fa-phone\"></i>\n </button>\n </div>\n </div>\n</div>\n", styles: [".incoming-call-overlay{position:fixed;inset:0;background-color:#000000b3;display:flex;justify-content:center;align-items:center;z-index:1000}.incoming-call-container{background:white;border-radius:12px;padding:30px;text-align:center;width:300px;box-shadow:0 4px 20px #0003}.caller-avatar{width:120px;height:120px;border-radius:50%;margin:0 auto 20px;object-fit:cover;border:4px solid #4CAF50}.caller-info h3{margin:10px 0 5px;color:#333;font-size:1.5em}.caller-info p{color:#666;margin:5px 0}.call-status{font-weight:700;color:#4caf50!important;margin-top:15px!important}.call-actions{display:flex;justify-content:center;gap:30px;margin-top:25px}.btn-accept,.btn-reject{width:60px;height:60px;border-radius:50%;border:none;color:#fff;font-size:24px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.btn-accept{background-color:#4caf50}.btn-reject{background-color:#f44336}.btn-accept:hover{background-color:#45a049;transform:scale(1.1)}.btn-reject:hover{background-color:#d32f2f;transform:scale(1.1)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
61
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: IncomingCallOverlayComponent, decorators: [{
|
|
62
|
+
type: Component,
|
|
63
|
+
args: [{ selector: 'lib-incoming-call-overlay', template: "<div *ngIf=\"showOverlay\" class=\"incoming-call-overlay\">\n <div class=\"incoming-call-container\">\n <div class=\"caller-info\">\n <img [src]=\"callData.img\" alt=\"Caller\" class=\"caller-avatar\">\n <h3>{{ callData.name }}</h3>\n <p>{{ callData.phone }}</p>\n <p class=\"call-status\">Incoming Call</p>\n </div>\n <div class=\"call-actions\">\n <button class=\"btn-reject\" (click)=\"rejectCall()\">\n <i class=\"fas fa-phone-slash\"></i>\n </button>\n <button class=\"btn-accept\" (click)=\"acceptCall()\">\n <i class=\"fas fa-phone\"></i>\n </button>\n </div>\n </div>\n</div>\n", styles: [".incoming-call-overlay{position:fixed;inset:0;background-color:#000000b3;display:flex;justify-content:center;align-items:center;z-index:1000}.incoming-call-container{background:white;border-radius:12px;padding:30px;text-align:center;width:300px;box-shadow:0 4px 20px #0003}.caller-avatar{width:120px;height:120px;border-radius:50%;margin:0 auto 20px;object-fit:cover;border:4px solid #4CAF50}.caller-info h3{margin:10px 0 5px;color:#333;font-size:1.5em}.caller-info p{color:#666;margin:5px 0}.call-status{font-weight:700;color:#4caf50!important;margin-top:15px!important}.call-actions{display:flex;justify-content:center;gap:30px;margin-top:25px}.btn-accept,.btn-reject{width:60px;height:60px;border-radius:50%;border:none;color:#fff;font-size:24px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.btn-accept{background-color:#4caf50}.btn-reject{background-color:#f44336}.btn-accept:hover{background-color:#45a049;transform:scale(1.1)}.btn-reject:hover{background-color:#d32f2f;transform:scale(1.1)}\n"] }]
|
|
64
|
+
}], ctorParameters: function () { return [{ type: i1.TwilioService }]; } });
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jb21pbmctY2FsbC1vdmVybGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RpYWxib3gvc3JjL2xpYi9jb21wb25lbnRzL2luY29taW5nLWNhbGwtb3ZlcmxheS9pbmNvbWluZy1jYWxsLW92ZXJsYXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2NvbXBvbmVudHMvaW5jb21pbmctY2FsbC1vdmVybGF5L2luY29taW5nLWNhbGwtb3ZlcmxheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQzs7OztBQVU3RCxNQUFNLE9BQU8sNEJBQTRCO0lBV3ZDLFlBQW9CLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBVmhELGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGFBQVEsR0FBUTtZQUNkLEtBQUssRUFBRSxFQUFFO1lBQ1QsSUFBSSxFQUFFLFNBQVM7WUFDZixHQUFHLEVBQUUsd0JBQXdCO1lBQzdCLGNBQWMsRUFBRSxLQUFLO1NBQ3RCLENBQUM7SUFJaUQsQ0FBQztJQUVwRCxRQUFRO1FBQ04sa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqRixJQUFJLEtBQUssS0FBSyxVQUFVLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO2lCQUFNLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtnQkFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7YUFDMUI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILG1DQUFtQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBaUIsRUFBRSxFQUFFO1lBQ3JGLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksQ0FBQyxRQUFRLEdBQUc7b0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO29CQUM5QixJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTO29CQUNyRCxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSx3QkFBd0I7b0JBQ3BFLGNBQWMsRUFBRSxJQUFJO29CQUNwQixJQUFJLEVBQUUsSUFBSTtpQkFDWCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsOERBQThEO0lBQ2hFLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ2xELElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzVDLENBQUM7OzBIQXpEVSw0QkFBNEI7OEdBQTVCLDRCQUE0QixpRUNWekMsK29CQWtCQTs0RkRSYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHdpbGlvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvdHdpbGlvLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FsbCB9IGZyb20gJ0B0d2lsaW8vdm9pY2Utc2RrJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItaW5jb21pbmctY2FsbC1vdmVybGF5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2luY29taW5nLWNhbGwtb3ZlcmxheS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2luY29taW5nLWNhbGwtb3ZlcmxheS5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSW5jb21pbmdDYWxsT3ZlcmxheUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgc2hvd092ZXJsYXkgPSBmYWxzZTtcbiAgY2FsbERhdGE6IGFueSA9IHtcbiAgICBwaG9uZTogJycsXG4gICAgbmFtZTogJ1Vua25vd24nLFxuICAgIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxuICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZVxuICB9O1xuICBwcml2YXRlIGNhbGxTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY2FsbFN0YXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdHdpbGlvU2VydmljZTogVHdpbGlvU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBTdWJzY3JpYmUgdG8gY2FsbCBzdGF0ZSBjaGFuZ2VzXG4gICAgdGhpcy5jYWxsU3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLnR3aWxpb1NlcnZpY2UuY3VycmVudENhbGxTdGF0ZS5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgaWYgKHN0YXRlID09PSAnaW5jb21pbmcnKSB7XG4gICAgICAgIHRoaXMuc2hvd092ZXJsYXkgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHRoaXMuc2hvd092ZXJsYXkgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBjYWxsIG9iamVjdCBjaGFuZ2VzXG4gICAgdGhpcy5jYWxsU3Vic2NyaXB0aW9uID0gdGhpcy50d2lsaW9TZXJ2aWNlLmN1cnJlbnRDYWxsLnN1YnNjcmliZSgoY2FsbDogQ2FsbCB8IG51bGwpID0+IHtcbiAgICAgIGlmIChjYWxsKSB7XG4gICAgICAgIHRoaXMuY2FsbERhdGEgPSB7XG4gICAgICAgICAgcGhvbmU6IGNhbGwucGFyYW1ldGVyc1snRnJvbSddLFxuICAgICAgICAgIG5hbWU6IGNhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCduYW1lJykgfHwgJ1Vua25vd24nLFxuICAgICAgICAgIGltZzogY2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxuICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiB0cnVlLFxuICAgICAgICAgIGNhbGw6IGNhbGxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFjY2VwdENhbGwoKSB7XG4gICAgdGhpcy50d2lsaW9TZXJ2aWNlLmlzSW5jb21pbmdDYWxsUGlja2VkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy50d2lsaW9TZXJ2aWNlLmN1cnJlbnRDYWxsU3RhdGUubmV4dCgnaW4tcHJvZ3Jlc3MnKTtcbiAgICB0aGlzLnNob3dPdmVybGF5ID0gZmFsc2U7XG4gICAgLy8gVGhlIGFjdHVhbCBjYWxsIGFjY2VwdGFuY2UgaXMgaGFuZGxlZCBieSB0aGUgVHdpbGlvIHNlcnZpY2VcbiAgfVxuXG4gIHJlamVjdENhbGwoKSB7XG4gICAgY29uc3QgY2FsbCA9IHRoaXMudHdpbGlvU2VydmljZS5jdXJyZW50Q2FsbC52YWx1ZTtcbiAgICBpZiAoY2FsbCkge1xuICAgICAgY2FsbC5yZWplY3QoKTtcbiAgICAgIHRoaXMudHdpbGlvU2VydmljZS5jdXJyZW50Q2FsbC5uZXh0KG51bGwpO1xuICAgICAgdGhpcy50d2lsaW9TZXJ2aWNlLmN1cnJlbnRDYWxsU3RhdGUubmV4dCgnbm9uZScpO1xuICAgIH1cbiAgICB0aGlzLnNob3dPdmVybGF5ID0gZmFsc2U7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNhbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jYWxsU3RhdGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJzaG93T3ZlcmxheVwiIGNsYXNzPVwiaW5jb21pbmctY2FsbC1vdmVybGF5XCI+XG4gIDxkaXYgY2xhc3M9XCJpbmNvbWluZy1jYWxsLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYWxsZXItaW5mb1wiPlxuICAgICAgPGltZyBbc3JjXT1cImNhbGxEYXRhLmltZ1wiIGFsdD1cIkNhbGxlclwiIGNsYXNzPVwiY2FsbGVyLWF2YXRhclwiPlxuICAgICAgPGgzPnt7IGNhbGxEYXRhLm5hbWUgfX08L2gzPlxuICAgICAgPHA+e3sgY2FsbERhdGEucGhvbmUgfX08L3A+XG4gICAgICA8cCBjbGFzcz1cImNhbGwtc3RhdHVzXCI+SW5jb21pbmcgQ2FsbDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hY3Rpb25zXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXJlamVjdFwiIChjbGljayk9XCJyZWplY3RDYWxsKClcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGhvbmUtc2xhc2hcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tYWNjZXB0XCIgKGNsaWNrKT1cImFjY2VwdENhbGwoKVwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1waG9uZVwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|