@signalwire/web-components 1.0.0-dev-20260226173058 → 1.0.0-dev-20260303132237
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/dist/components/audio-level.d.ts +106 -0
- package/dist/components/audio-level.d.ts.map +1 -0
- package/dist/components/call-controls.d.ts +163 -0
- package/dist/components/call-controls.d.ts.map +1 -0
- package/dist/components/call-media.d.ts +114 -0
- package/dist/components/call-media.d.ts.map +1 -0
- package/dist/components/call-status.d.ts +71 -0
- package/dist/components/call-status.d.ts.map +1 -0
- package/dist/components/click-to-call.d.ts +123 -0
- package/dist/components/click-to-call.d.ts.map +1 -0
- package/dist/components/device-selector.d.ts +250 -0
- package/dist/components/device-selector.d.ts.map +1 -0
- package/dist/components/dialpad.d.ts +60 -0
- package/dist/components/dialpad.d.ts.map +1 -0
- package/dist/components/directory.d.ts +103 -0
- package/dist/components/directory.d.ts.map +1 -0
- package/dist/components/example-button.d.ts +20 -0
- package/dist/components/example-button.d.ts.map +1 -0
- package/dist/components/participant-controls.d.ts +94 -0
- package/dist/components/participant-controls.d.ts.map +1 -0
- package/dist/components/participants.d.ts +116 -0
- package/dist/components/participants.d.ts.map +1 -0
- package/dist/components/self-media.d.ts +78 -0
- package/dist/components/self-media.d.ts.map +1 -0
- package/dist/context/call-context.d.ts +13 -0
- package/dist/context/call-context.d.ts.map +1 -0
- package/dist/context/index.d.ts +2 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +67 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/debounce.d.ts +10 -0
- package/dist/utils/debounce.d.ts.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/video.d.ts +34 -0
- package/dist/utils/video.d.ts.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio Level Component
|
|
3
|
+
*
|
|
4
|
+
* Visual audio level indicator that renders real-time audio levels from a MediaStream
|
|
5
|
+
* via Web Audio API. Displays configurable number of bars with color transitions
|
|
6
|
+
* based on audio intensity.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```html
|
|
10
|
+
* <sw-audio-level .stream=${mediaStream} bars="5" orientation="vertical"></sw-audio-level>
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
import { LitElement } from 'lit';
|
|
14
|
+
export declare class AudioLevel extends LitElement {
|
|
15
|
+
static styles: import("lit").CSSResult;
|
|
16
|
+
/**
|
|
17
|
+
* MediaStream to analyze for audio levels
|
|
18
|
+
*/
|
|
19
|
+
stream?: MediaStream;
|
|
20
|
+
/**
|
|
21
|
+
* Number of bars to display (default: 5)
|
|
22
|
+
*/
|
|
23
|
+
bars: number;
|
|
24
|
+
/**
|
|
25
|
+
* Orientation of the bars: 'vertical' or 'horizontal'
|
|
26
|
+
*/
|
|
27
|
+
orientation: 'vertical' | 'horizontal';
|
|
28
|
+
/**
|
|
29
|
+
* Maximum height/width of bars in pixels
|
|
30
|
+
*/
|
|
31
|
+
maxSize: number;
|
|
32
|
+
/**
|
|
33
|
+
* Current audio levels for each bar (0-1)
|
|
34
|
+
*/
|
|
35
|
+
private _levels;
|
|
36
|
+
/**
|
|
37
|
+
* Web Audio API context
|
|
38
|
+
*/
|
|
39
|
+
private _audioContext?;
|
|
40
|
+
/**
|
|
41
|
+
* Analyser node for frequency data
|
|
42
|
+
*/
|
|
43
|
+
private _analyser?;
|
|
44
|
+
/**
|
|
45
|
+
* Source node connected to the MediaStream
|
|
46
|
+
*/
|
|
47
|
+
private _source?;
|
|
48
|
+
/**
|
|
49
|
+
* Animation frame ID for cleanup
|
|
50
|
+
*/
|
|
51
|
+
private _animationFrameId?;
|
|
52
|
+
/**
|
|
53
|
+
* Frequency data buffer
|
|
54
|
+
*/
|
|
55
|
+
private _dataArray?;
|
|
56
|
+
/**
|
|
57
|
+
* Lifecycle: Component connected to DOM
|
|
58
|
+
*/
|
|
59
|
+
connectedCallback(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Lifecycle: React to property changes
|
|
62
|
+
*/
|
|
63
|
+
protected updated(changedProperties: Map<string, unknown>): void;
|
|
64
|
+
/**
|
|
65
|
+
* Lifecycle: Component disconnected from DOM
|
|
66
|
+
*/
|
|
67
|
+
disconnectedCallback(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Public method to release all audio resources immediately
|
|
70
|
+
* Call this before stopping the MediaStream tracks to ensure proper cleanup
|
|
71
|
+
*/
|
|
72
|
+
releaseResources(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Setup Web Audio API for audio level analysis
|
|
75
|
+
*/
|
|
76
|
+
private setupAudioAnalysis;
|
|
77
|
+
/**
|
|
78
|
+
* Cleanup Web Audio API resources
|
|
79
|
+
*/
|
|
80
|
+
private cleanupAudioAnalysis;
|
|
81
|
+
/**
|
|
82
|
+
* Start the animation loop for updating levels
|
|
83
|
+
*/
|
|
84
|
+
private startAnimationLoop;
|
|
85
|
+
/**
|
|
86
|
+
* Get the color class based on level
|
|
87
|
+
*/
|
|
88
|
+
private getLevelClass;
|
|
89
|
+
/**
|
|
90
|
+
* Get the active class if level is above threshold
|
|
91
|
+
*/
|
|
92
|
+
private isActive;
|
|
93
|
+
/**
|
|
94
|
+
* Render the component
|
|
95
|
+
*/
|
|
96
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Declare global type for TypeScript
|
|
100
|
+
*/
|
|
101
|
+
declare global {
|
|
102
|
+
interface HTMLElementTagNameMap {
|
|
103
|
+
'sw-audio-level': AudioLevel;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=audio-level.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-level.d.ts","sourceRoot":"","sources":["../../src/components/audio-level.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,qBACa,UAAW,SAAQ,UAAU;IACxC,MAAM,CAAC,MAAM,0BAiEX;IAEF;;OAEG;IACyB,MAAM,CAAC,EAAE,WAAW,CAAC;IAEjD;;OAEG;IACyB,IAAI,SAAK;IAErC;;OAEG;IACwC,WAAW,EAAE,UAAU,GAAG,YAAY,CAAc;IAE/F;;OAEG;IACyB,OAAO,SAAM;IAEzC;;OAEG;IACM,OAAO,CAAC,OAAO,CAAgB;IAExC;;OAEG;IACH,OAAO,CAAC,aAAa,CAAC,CAAe;IAErC;;OAEG;IACH,OAAO,CAAC,SAAS,CAAC,CAAe;IAEjC;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,CAA6B;IAE7C;;OAEG;IACH,OAAO,CAAC,iBAAiB,CAAC,CAAS;IAEnC;;OAEG;IACH,OAAO,CAAC,UAAU,CAAC,CAA0B;IAE7C;;OAEG;IACH,iBAAiB;IAQjB;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAehE;;OAEG;IACH,oBAAoB;IAKpB;;;OAGG;IACI,gBAAgB,IAAI,IAAI;IAK/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgC5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyC1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACH,MAAM;CA0BP;AAED;;GAEG;AACH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,UAAU,CAAC;KAC9B;CACF"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Call Controls Component
|
|
3
|
+
*
|
|
4
|
+
* Responsive button bar for call actions. Displays mute audio, mute video,
|
|
5
|
+
* screen share, and hangup buttons with states reflecting current call state.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```html
|
|
9
|
+
* <sw-call-controls .call=${call}></sw-call-controls>
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
import { LitElement } from 'lit';
|
|
13
|
+
import type { Observable } from 'rxjs';
|
|
14
|
+
/**
|
|
15
|
+
* Screen share status type
|
|
16
|
+
*/
|
|
17
|
+
export type ScreenShareStatus = 'inactive' | 'pending' | 'active';
|
|
18
|
+
/**
|
|
19
|
+
* SelfParticipant interface for call controls
|
|
20
|
+
*/
|
|
21
|
+
export interface SelfParticipant {
|
|
22
|
+
id: string;
|
|
23
|
+
audioMuted$: Observable<boolean>;
|
|
24
|
+
videoMuted$: Observable<boolean>;
|
|
25
|
+
screenShareStatus$?: Observable<ScreenShareStatus>;
|
|
26
|
+
mute: () => Promise<void>;
|
|
27
|
+
unmute: () => Promise<void>;
|
|
28
|
+
muteVideo: () => Promise<void>;
|
|
29
|
+
unmuteVideo: () => Promise<void>;
|
|
30
|
+
startScreenShare?: () => Promise<void>;
|
|
31
|
+
stopScreenShare?: () => Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Call interface for call controls
|
|
35
|
+
*/
|
|
36
|
+
export interface CallControlsCall {
|
|
37
|
+
self?: SelfParticipant;
|
|
38
|
+
self$?: Observable<SelfParticipant>;
|
|
39
|
+
capabilities$?: Observable<string[]>;
|
|
40
|
+
hangup: () => Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
export declare class CallControls extends LitElement {
|
|
43
|
+
static styles: import("lit").CSSResult;
|
|
44
|
+
/**
|
|
45
|
+
* The call object - can be provided via property or context
|
|
46
|
+
*/
|
|
47
|
+
call?: CallControlsCall;
|
|
48
|
+
/**
|
|
49
|
+
* Consume call from context if not provided as property
|
|
50
|
+
*/
|
|
51
|
+
private _contextCall?;
|
|
52
|
+
/**
|
|
53
|
+
* Orientation: horizontal (default) or vertical
|
|
54
|
+
*/
|
|
55
|
+
orientation: 'horizontal' | 'vertical';
|
|
56
|
+
/**
|
|
57
|
+
* Show tooltips on hover
|
|
58
|
+
*/
|
|
59
|
+
showTooltips: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Current audio muted state
|
|
62
|
+
*/
|
|
63
|
+
private _audioMuted;
|
|
64
|
+
/**
|
|
65
|
+
* Current video muted state
|
|
66
|
+
*/
|
|
67
|
+
private _videoMuted;
|
|
68
|
+
/**
|
|
69
|
+
* Current screen share status
|
|
70
|
+
*/
|
|
71
|
+
private _screenShareStatus;
|
|
72
|
+
/**
|
|
73
|
+
* Available capabilities
|
|
74
|
+
*/
|
|
75
|
+
private _capabilities;
|
|
76
|
+
/**
|
|
77
|
+
* Is overflow menu open
|
|
78
|
+
*/
|
|
79
|
+
private _overflowOpen;
|
|
80
|
+
/**
|
|
81
|
+
* RxJS subscriptions for cleanup
|
|
82
|
+
*/
|
|
83
|
+
private subscriptions;
|
|
84
|
+
/**
|
|
85
|
+
* Cached self participant reference for button handlers.
|
|
86
|
+
* Marked as @state() to trigger re-render when self becomes available,
|
|
87
|
+
* enabling the control buttons.
|
|
88
|
+
*/
|
|
89
|
+
private selfParticipant?;
|
|
90
|
+
/**
|
|
91
|
+
* Get the effective call (property or context)
|
|
92
|
+
*/
|
|
93
|
+
private get effectiveCall();
|
|
94
|
+
/**
|
|
95
|
+
* Lifecycle: Component connected to DOM
|
|
96
|
+
*/
|
|
97
|
+
connectedCallback(): void;
|
|
98
|
+
/**
|
|
99
|
+
* Lifecycle: React to property changes
|
|
100
|
+
*/
|
|
101
|
+
protected updated(changedProperties: Map<string, unknown>): void;
|
|
102
|
+
/**
|
|
103
|
+
* Lifecycle: Component disconnected from DOM
|
|
104
|
+
*/
|
|
105
|
+
disconnectedCallback(): void;
|
|
106
|
+
/**
|
|
107
|
+
* Subscribe to call observables
|
|
108
|
+
*/
|
|
109
|
+
private setupSubscriptions;
|
|
110
|
+
/**
|
|
111
|
+
* Cleanup all subscriptions
|
|
112
|
+
*/
|
|
113
|
+
private cleanupSubscriptions;
|
|
114
|
+
/**
|
|
115
|
+
* Check if capability is available
|
|
116
|
+
*/
|
|
117
|
+
private hasCapability;
|
|
118
|
+
/**
|
|
119
|
+
* Handle mute audio toggle
|
|
120
|
+
*/
|
|
121
|
+
private handleMuteAudio;
|
|
122
|
+
/**
|
|
123
|
+
* Handle mute video toggle
|
|
124
|
+
*/
|
|
125
|
+
private handleMuteVideo;
|
|
126
|
+
/**
|
|
127
|
+
* Handle screen share toggle
|
|
128
|
+
*/
|
|
129
|
+
private handleScreenShare;
|
|
130
|
+
/**
|
|
131
|
+
* Handle hangup
|
|
132
|
+
*/
|
|
133
|
+
private handleHangup;
|
|
134
|
+
/**
|
|
135
|
+
* Toggle overflow menu
|
|
136
|
+
*/
|
|
137
|
+
private toggleOverflow;
|
|
138
|
+
/**
|
|
139
|
+
* Get tooltip text for button
|
|
140
|
+
*/
|
|
141
|
+
private getTooltipText;
|
|
142
|
+
/**
|
|
143
|
+
* Render button icon
|
|
144
|
+
*/
|
|
145
|
+
private renderIcon;
|
|
146
|
+
/**
|
|
147
|
+
* Render a control button
|
|
148
|
+
*/
|
|
149
|
+
private renderButton;
|
|
150
|
+
/**
|
|
151
|
+
* Render the component
|
|
152
|
+
*/
|
|
153
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Declare global type for TypeScript
|
|
157
|
+
*/
|
|
158
|
+
declare global {
|
|
159
|
+
interface HTMLElementTagNameMap {
|
|
160
|
+
'sw-call-controls': CallControls;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=call-controls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-controls.d.ts","sourceRoot":"","sources":["../../src/components/call-controls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAKrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAGvC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACjC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACjC,kBAAkB,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACnD,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAOD,qBACa,YAAa,SAAQ,UAAU;IAC1C,MAAM,CAAC,MAAM,0BAmPX;IAEF;;OAEG;IACyB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IAEpD;;OAEG;IAGH,OAAO,CAAC,YAAY,CAAC,CAAmB;IAExC;;OAEG;IACyB,WAAW,EAAE,YAAY,GAAG,UAAU,CAAgB;IAElF;;OAEG;IACsD,YAAY,UAAQ;IAE7E;;OAEG;IACM,OAAO,CAAC,WAAW,CAAS;IAErC;;OAEG;IACM,OAAO,CAAC,WAAW,CAAS;IAErC;;OAEG;IACM,OAAO,CAAC,kBAAkB,CAAiC;IAEpE;;OAEG;IACM,OAAO,CAAC,aAAa,CAAgB;IAE9C;;OAEG;IACM,OAAO,CAAC,aAAa,CAAS;IAEvC;;OAEG;IACH,OAAO,CAAC,aAAa,CAAsB;IAE3C;;;;OAIG;IACM,OAAO,CAAC,eAAe,CAAC,CAAkB;IAEnD;;OAEG;IACH,OAAO,KAAK,aAAa,GAExB;IAED;;OAEG;IACH,iBAAiB;IAKjB;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAQhE;;OAEG;IACH,oBAAoB;IAKpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqE1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;YACW,eAAe;IA0B7B;;OAEG;YACW,eAAe;IA0B7B;;OAEG;YACW,iBAAiB;IA0B/B;;OAEG;YACW,YAAY;IAkB1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACH,OAAO,CAAC,UAAU;IAkDlB;;OAEG;IACH,OAAO,CAAC,YAAY;IA6BpB;;OAEG;IACH,MAAM;CAkFP;AAED;;GAEG;AACH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,YAAY,CAAC;KAClC;CACF"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Call Media Component
|
|
3
|
+
*
|
|
4
|
+
* Root component that renders remote video stream and provides call context
|
|
5
|
+
* to child components. Manages aspect ratio with ResizeObserver and handles
|
|
6
|
+
* video stream lifecycle.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```html
|
|
10
|
+
* <call-media .call=${call}>
|
|
11
|
+
* <participants>
|
|
12
|
+
* <self-media mirror=${true}></self-media>
|
|
13
|
+
* </participants>
|
|
14
|
+
* </call-media>
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import { LitElement } from 'lit';
|
|
18
|
+
import type { Call } from '../types/index.js';
|
|
19
|
+
export declare class CallMedia extends LitElement {
|
|
20
|
+
static styles: import("lit").CSSResult;
|
|
21
|
+
/**
|
|
22
|
+
* Call object with observable streams and properties
|
|
23
|
+
*/
|
|
24
|
+
call?: Call;
|
|
25
|
+
/**
|
|
26
|
+
* Provides call context to child components
|
|
27
|
+
* Note: Used by @provide decorator, TypeScript doesn't see the usage
|
|
28
|
+
*/
|
|
29
|
+
private _providedCall?;
|
|
30
|
+
/**
|
|
31
|
+
* Current remote stream value from observable
|
|
32
|
+
*/
|
|
33
|
+
private _remoteStreamValue;
|
|
34
|
+
/**
|
|
35
|
+
* RxJS subscriptions for cleanup
|
|
36
|
+
*/
|
|
37
|
+
private subscriptions;
|
|
38
|
+
/**
|
|
39
|
+
* ResizeObserver instance for aspect ratio management
|
|
40
|
+
*/
|
|
41
|
+
private resizeObserver?;
|
|
42
|
+
/**
|
|
43
|
+
* Video resize event handler reference for cleanup
|
|
44
|
+
*/
|
|
45
|
+
private videoResizeHandler?;
|
|
46
|
+
/**
|
|
47
|
+
* Window resize event handler reference for cleanup
|
|
48
|
+
*/
|
|
49
|
+
private windowResizeHandler?;
|
|
50
|
+
/**
|
|
51
|
+
* Lifecycle: Component connected to DOM
|
|
52
|
+
*/
|
|
53
|
+
connectedCallback(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Lifecycle: React to property changes
|
|
56
|
+
*/
|
|
57
|
+
protected updated(changedProperties: Map<string, unknown>): void;
|
|
58
|
+
/**
|
|
59
|
+
* Lifecycle: Component disconnected from DOM
|
|
60
|
+
*/
|
|
61
|
+
disconnectedCallback(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Lifecycle: First update after render
|
|
64
|
+
*/
|
|
65
|
+
protected firstUpdated(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Subscribe to call observables
|
|
68
|
+
*/
|
|
69
|
+
private setupSubscriptions;
|
|
70
|
+
/**
|
|
71
|
+
* Cleanup all subscriptions
|
|
72
|
+
*/
|
|
73
|
+
private cleanupSubscriptions;
|
|
74
|
+
/**
|
|
75
|
+
* Setup ResizeObserver for aspect ratio management
|
|
76
|
+
*/
|
|
77
|
+
private setupResizeObserver;
|
|
78
|
+
/**
|
|
79
|
+
* Video element reference for dimension calculations
|
|
80
|
+
*/
|
|
81
|
+
private _videoElement?;
|
|
82
|
+
/**
|
|
83
|
+
* Padding wrapper reference for dimension calculations
|
|
84
|
+
*/
|
|
85
|
+
private _paddingWrapper?;
|
|
86
|
+
/**
|
|
87
|
+
* Recalculate and apply dimensions based on viewport, container, and video sizes.
|
|
88
|
+
* Video should never grow bigger than the visible area.
|
|
89
|
+
* When container bleeds viewport, scale proportionally to maintain container's aspect ratio.
|
|
90
|
+
* Uses "contain" fitting algorithm - compares aspect ratios to determine constraint.
|
|
91
|
+
*/
|
|
92
|
+
private recalculateDimensions;
|
|
93
|
+
/**
|
|
94
|
+
* Cleanup ResizeObserver and event listeners
|
|
95
|
+
*/
|
|
96
|
+
private cleanupResizeObserver;
|
|
97
|
+
/**
|
|
98
|
+
* Cleanup video element
|
|
99
|
+
*/
|
|
100
|
+
private cleanupVideoElement;
|
|
101
|
+
/**
|
|
102
|
+
* Render the component
|
|
103
|
+
*/
|
|
104
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Declare global type for TypeScript
|
|
108
|
+
*/
|
|
109
|
+
declare global {
|
|
110
|
+
interface HTMLElementTagNameMap {
|
|
111
|
+
'sw-call-media': CallMedia;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=call-media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-media.d.ts","sourceRoot":"","sources":["../../src/components/call-media.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAI5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAK9C,qBACa,SAAU,SAAQ,UAAU;IACvC,MAAM,CAAC,MAAM,0BA4DX;IAEF;;OAEG;IACyB,IAAI,CAAC,EAAE,IAAI,CAAC;IAExC;;;OAGG;IAGH,OAAO,CAAC,aAAa,CAAC,CAAO;IAE7B;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAA4B;IAEtD;;OAEG;IACH,OAAO,CAAC,aAAa,CAAsB;IAE3C;;OAEG;IACH,OAAO,CAAC,cAAc,CAAC,CAAiB;IAExC;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAAC,CAAa;IAExC;;OAEG;IACH,OAAO,CAAC,mBAAmB,CAAC,CAAa;IAEzC;;OAEG;IACH,iBAAiB;IAMjB;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAYhE;;OAEG;IACH,oBAAoB;IAOpB;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAS9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAK5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwC3B;;OAEG;IACH,OAAO,CAAC,aAAa,CAAC,CAAmB;IAEzC;;OAEG;IACH,OAAO,CAAC,eAAe,CAAC,CAAiB;IAEzC;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAgF7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,MAAM;CAqBP;AAED;;GAEG;AACH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,eAAe,EAAE,SAAS,CAAC;KAC5B;CACF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Call Status Component
|
|
3
|
+
*
|
|
4
|
+
* Displays current call state with status text and duration timer.
|
|
5
|
+
* Shows animated indicators for transient states (connecting, ringing, disconnecting).
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```html
|
|
9
|
+
* <sw-call-status .call=${call}></sw-call-status>
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
import { LitElement } from 'lit';
|
|
13
|
+
import type { Observable } from 'rxjs';
|
|
14
|
+
/**
|
|
15
|
+
* Call status types
|
|
16
|
+
*/
|
|
17
|
+
export type CallStatus = 'idle' | 'connecting' | 'ringing' | 'connected' | 'disconnecting' | 'disconnected';
|
|
18
|
+
/**
|
|
19
|
+
* Call interface for status component
|
|
20
|
+
*/
|
|
21
|
+
export interface CallStatusCall {
|
|
22
|
+
status$: Observable<CallStatus>;
|
|
23
|
+
}
|
|
24
|
+
export declare class CallStatusComponent extends LitElement {
|
|
25
|
+
static styles: import("lit").CSSResult;
|
|
26
|
+
/**
|
|
27
|
+
* Call object with status$ observable
|
|
28
|
+
*/
|
|
29
|
+
call: CallStatusCall | null;
|
|
30
|
+
/**
|
|
31
|
+
* Call from context (if nested in sw-call-media)
|
|
32
|
+
*/
|
|
33
|
+
private contextCall?;
|
|
34
|
+
/**
|
|
35
|
+
* Current call status
|
|
36
|
+
*/
|
|
37
|
+
private status;
|
|
38
|
+
/**
|
|
39
|
+
* Call start time for duration calculation
|
|
40
|
+
*/
|
|
41
|
+
private callStartTime;
|
|
42
|
+
/**
|
|
43
|
+
* Formatted duration string
|
|
44
|
+
*/
|
|
45
|
+
private duration;
|
|
46
|
+
/**
|
|
47
|
+
* RxJS subscriptions for cleanup
|
|
48
|
+
*/
|
|
49
|
+
private subscriptions;
|
|
50
|
+
/**
|
|
51
|
+
* Duration timer interval
|
|
52
|
+
*/
|
|
53
|
+
private durationInterval;
|
|
54
|
+
connectedCallback(): void;
|
|
55
|
+
disconnectedCallback(): void;
|
|
56
|
+
updated(changedProperties: Map<string, unknown>): void;
|
|
57
|
+
private get activeCall();
|
|
58
|
+
private subscribeToCall;
|
|
59
|
+
private startDurationTimer;
|
|
60
|
+
private stopDurationTimer;
|
|
61
|
+
private formatDuration;
|
|
62
|
+
private cleanup;
|
|
63
|
+
private getStatusText;
|
|
64
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
65
|
+
}
|
|
66
|
+
declare global {
|
|
67
|
+
interface HTMLElementTagNameMap {
|
|
68
|
+
'sw-call-status': CallStatusComponent;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=call-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call-status.d.ts","sourceRoot":"","sources":["../../src/components/call-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAI5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAGvC;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,YAAY,GACZ,SAAS,GACT,WAAW,GACX,eAAe,GACf,cAAc,CAAC;AAEnB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;CACjC;AAED,qBACa,mBAAoB,SAAQ,UAAU;IACjD,MAAM,CAAC,MAAM,0BA2IX;IAEF;;OAEG;IAEH,IAAI,EAAE,cAAc,GAAG,IAAI,CAAQ;IAEnC;;OAEG;IAGH,OAAO,CAAC,WAAW,CAAC,CAAiB;IAErC;;OAEG;IAEH,OAAO,CAAC,MAAM,CAAsB;IAEpC;;OAEG;IAEH,OAAO,CAAC,aAAa,CAAuB;IAE5C;;OAEG;IAEH,OAAO,CAAC,QAAQ,CAAkB;IAElC;;OAEG;IACH,OAAO,CAAC,aAAa,CAAsB;IAE3C;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAuB;IAE/C,iBAAiB;IAKjB,oBAAoB;IAKpB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAO/C,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,aAAa;IAmBrB,MAAM;CAqBP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,mBAAmB,CAAC;KACvC;CACF"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Click to Call Component
|
|
3
|
+
*
|
|
4
|
+
* A single button widget to initiate calls to a preconfigured destination.
|
|
5
|
+
* Shows minimal UI with call status, duration, and basic controls.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```html
|
|
9
|
+
* <sw-click-to-call
|
|
10
|
+
* destination="sip:support@example.com"
|
|
11
|
+
* .client=${signalWire}
|
|
12
|
+
* label="Call Support"
|
|
13
|
+
* ></sw-click-to-call>
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
import { LitElement } from 'lit';
|
|
17
|
+
import type { Observable } from 'rxjs';
|
|
18
|
+
/**
|
|
19
|
+
* Call status type
|
|
20
|
+
*/
|
|
21
|
+
export type ClickToCallStatus = 'idle' | 'connecting' | 'connected' | 'disconnecting' | 'error';
|
|
22
|
+
/**
|
|
23
|
+
* Self participant interface for click-to-call component
|
|
24
|
+
*/
|
|
25
|
+
export interface ClickToCallSelf {
|
|
26
|
+
audioMuted$: Observable<boolean>;
|
|
27
|
+
mute(): Promise<void>;
|
|
28
|
+
unmute(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Call interface for click-to-call component
|
|
32
|
+
*/
|
|
33
|
+
export interface ClickToCallCall {
|
|
34
|
+
status$: Observable<string>;
|
|
35
|
+
hangup(): Promise<void>;
|
|
36
|
+
self$?: Observable<ClickToCallSelf>;
|
|
37
|
+
self?: ClickToCallSelf;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Client interface for click-to-call component
|
|
41
|
+
*/
|
|
42
|
+
export interface ClickToCallClient {
|
|
43
|
+
dial(destination: string, options?: {
|
|
44
|
+
audio?: boolean;
|
|
45
|
+
video?: boolean;
|
|
46
|
+
}): Promise<ClickToCallCall>;
|
|
47
|
+
}
|
|
48
|
+
export declare class ClickToCallComponent extends LitElement {
|
|
49
|
+
static styles: import("lit").CSSResult;
|
|
50
|
+
/**
|
|
51
|
+
* Client for initiating calls (SignalWire)
|
|
52
|
+
*/
|
|
53
|
+
client: ClickToCallClient | null;
|
|
54
|
+
/**
|
|
55
|
+
* Destination address to call
|
|
56
|
+
*/
|
|
57
|
+
destination: string;
|
|
58
|
+
/**
|
|
59
|
+
* Button label when idle
|
|
60
|
+
*/
|
|
61
|
+
label: string;
|
|
62
|
+
/**
|
|
63
|
+
* Audio-only mode (no video)
|
|
64
|
+
*/
|
|
65
|
+
audioOnly: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Current call status
|
|
68
|
+
*/
|
|
69
|
+
private status;
|
|
70
|
+
/**
|
|
71
|
+
* Current call object
|
|
72
|
+
*/
|
|
73
|
+
private call;
|
|
74
|
+
/**
|
|
75
|
+
* Is audio muted
|
|
76
|
+
*/
|
|
77
|
+
private audioMuted;
|
|
78
|
+
/**
|
|
79
|
+
* Self participant reference for mute/unmute operations
|
|
80
|
+
*/
|
|
81
|
+
private selfParticipant;
|
|
82
|
+
/**
|
|
83
|
+
* Call duration in seconds
|
|
84
|
+
*/
|
|
85
|
+
private callDuration;
|
|
86
|
+
/**
|
|
87
|
+
* Error message
|
|
88
|
+
*/
|
|
89
|
+
private errorMessage;
|
|
90
|
+
/**
|
|
91
|
+
* RxJS subscriptions for cleanup
|
|
92
|
+
*/
|
|
93
|
+
private subscriptions;
|
|
94
|
+
/**
|
|
95
|
+
* Duration timer interval
|
|
96
|
+
*/
|
|
97
|
+
private durationInterval;
|
|
98
|
+
/**
|
|
99
|
+
* Call start time
|
|
100
|
+
*/
|
|
101
|
+
private callStartTime;
|
|
102
|
+
disconnectedCallback(): void;
|
|
103
|
+
private initiateCall;
|
|
104
|
+
private subscribeToCall;
|
|
105
|
+
private startDurationTimer;
|
|
106
|
+
private stopDurationTimer;
|
|
107
|
+
private formatDuration;
|
|
108
|
+
private handleCallEnded;
|
|
109
|
+
private toggleMute;
|
|
110
|
+
private hangup;
|
|
111
|
+
private cleanup;
|
|
112
|
+
private renderIdleState;
|
|
113
|
+
private renderConnectingState;
|
|
114
|
+
private renderConnectedState;
|
|
115
|
+
private renderErrorState;
|
|
116
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
117
|
+
}
|
|
118
|
+
declare global {
|
|
119
|
+
interface HTMLElementTagNameMap {
|
|
120
|
+
'sw-click-to-call': ClickToCallComponent;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=click-to-call.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"click-to-call.d.ts","sourceRoot":"","sources":["../../src/components/click-to-call.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,eAAe,GAAG,OAAO,CAAC;AAEhG;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,CAAC,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CACF,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC7C,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7B;AAED,qBACa,oBAAqB,SAAQ,UAAU;IAClD,MAAM,CAAC,MAAM,0BA+MX;IAEF;;OAEG;IAEH,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IAExC;;OAEG;IAEH,WAAW,EAAE,MAAM,CAAM;IAEzB;;OAEG;IAEH,KAAK,EAAE,MAAM,CAAU;IAEvB;;OAEG;IAEH,SAAS,EAAE,OAAO,CAAQ;IAE1B;;OAEG;IAEH,OAAO,CAAC,MAAM,CAA6B;IAE3C;;OAEG;IAEH,OAAO,CAAC,IAAI,CAAgC;IAE5C;;OAEG;IAEH,OAAO,CAAC,UAAU,CAAkB;IAEpC;;OAEG;IACH,OAAO,CAAC,eAAe,CAAgC;IAEvD;;OAEG;IAEH,OAAO,CAAC,YAAY,CAAa;IAEjC;;OAEG;IAEH,OAAO,CAAC,YAAY,CAAc;IAElC;;OAEG;IACH,OAAO,CAAC,aAAa,CAAsB;IAE3C;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAuB;IAE/C;;OAEG;IACH,OAAO,CAAC,aAAa,CAAuB;IAE5C,oBAAoB;YAKN,YAAY;IAkC1B,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,eAAe;YAgBT,UAAU;YAsBV,MAAM;IAYpB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,oBAAoB;IAiD5B,OAAO,CAAC,gBAAgB;IASxB,MAAM;CAeP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,oBAAoB,CAAC;KAC1C;CACF"}
|