@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.
Files changed (39) hide show
  1. package/dist/components/audio-level.d.ts +106 -0
  2. package/dist/components/audio-level.d.ts.map +1 -0
  3. package/dist/components/call-controls.d.ts +163 -0
  4. package/dist/components/call-controls.d.ts.map +1 -0
  5. package/dist/components/call-media.d.ts +114 -0
  6. package/dist/components/call-media.d.ts.map +1 -0
  7. package/dist/components/call-status.d.ts +71 -0
  8. package/dist/components/call-status.d.ts.map +1 -0
  9. package/dist/components/click-to-call.d.ts +123 -0
  10. package/dist/components/click-to-call.d.ts.map +1 -0
  11. package/dist/components/device-selector.d.ts +250 -0
  12. package/dist/components/device-selector.d.ts.map +1 -0
  13. package/dist/components/dialpad.d.ts +60 -0
  14. package/dist/components/dialpad.d.ts.map +1 -0
  15. package/dist/components/directory.d.ts +103 -0
  16. package/dist/components/directory.d.ts.map +1 -0
  17. package/dist/components/example-button.d.ts +20 -0
  18. package/dist/components/example-button.d.ts.map +1 -0
  19. package/dist/components/participant-controls.d.ts +94 -0
  20. package/dist/components/participant-controls.d.ts.map +1 -0
  21. package/dist/components/participants.d.ts +116 -0
  22. package/dist/components/participants.d.ts.map +1 -0
  23. package/dist/components/self-media.d.ts +78 -0
  24. package/dist/components/self-media.d.ts.map +1 -0
  25. package/dist/context/call-context.d.ts +13 -0
  26. package/dist/context/call-context.d.ts.map +1 -0
  27. package/dist/context/index.d.ts +2 -0
  28. package/dist/context/index.d.ts.map +1 -0
  29. package/dist/index.d.ts +29 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/types/index.d.ts +67 -0
  32. package/dist/types/index.d.ts.map +1 -0
  33. package/dist/utils/debounce.d.ts +10 -0
  34. package/dist/utils/debounce.d.ts.map +1 -0
  35. package/dist/utils/index.d.ts +3 -0
  36. package/dist/utils/index.d.ts.map +1 -0
  37. package/dist/utils/video.d.ts +34 -0
  38. package/dist/utils/video.d.ts.map +1 -0
  39. 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"}