@tmsoft/webphone 1.1.25 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +144 -165
- package/dist/favicon.ico +0 -0
- package/dist/index.d.ts +2 -68
- package/dist/lib/index.d.ts +3 -0
- package/dist/lib/types.d.ts +17 -0
- package/dist/src/components/WebPhone.vue.d.ts +155 -0
- package/dist/webphone.component.js +296 -0
- package/dist/webphone.es.js +18198 -12703
- package/dist/webphone.umd.js +283 -73
- package/package.json +88 -61
- package/dist/webphone-element.umd.js +0 -86
- package/dist/webphone.cjs.js +0 -79
package/README.md
CHANGED
|
@@ -1,215 +1,194 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @tmsoft/webphone
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/@tmsoft/webphone)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
SIP softphone component for Vue 3 and Web Components.
|
|
6
7
|
|
|
8
|
+
## Installation
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- Audio WebRTC con manejo de permisos de micrófono
|
|
11
|
-
- Teclado DTMF y estado de llamada (entrante/saliente/en curso)
|
|
12
|
-
- Gestión de dispositivos de audio (micrófonos y altavoces)
|
|
13
|
-
- Reconexión y manejo de estado SIP
|
|
14
|
-
- Diseño compacto y dependencias UI mínimas (PrimeVue para botones/inputs)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
### Requisitos
|
|
18
|
-
- Vue 3.5+
|
|
19
|
-
- PrimeVue 4.x y PrimeIcons 7.x (peer dependencies)
|
|
20
|
-
- @vueuse/core 13.x (peer dependency)
|
|
21
|
-
- Servidor SIP con WebSocket habilitado (por ejemplo, Asterisk en `/asterisk/ws`, puerto 8089 por defecto)
|
|
22
|
-
- Navegador con HTTPS y permisos de micrófono
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
## Instalación
|
|
26
|
-
|
|
27
|
-
Instale el paquete y los peer dependencies:
|
|
28
|
-
|
|
29
|
-
```sh
|
|
30
|
-
npm install @tmsoft/webphone primevue primeicons @vueuse/core
|
|
31
|
-
# o
|
|
32
|
-
yarn add @tmsoft/webphone primevue primeicons @vueuse/core
|
|
33
|
-
# o
|
|
34
|
-
pnpm add @tmsoft/webphone primevue primeicons @vueuse/core
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
Los estilos del componente se inyectan automáticamente en tiempo de ejecución. No es necesario configurar Tailwind en su proyecto para usar esta librería.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
## Uso
|
|
41
|
-
|
|
42
|
-
Puede utilizar la librería como plugin global o importar el componente localmente.
|
|
43
|
-
|
|
44
|
-
### Opción A: Plugin global
|
|
45
|
-
`main.ts`:
|
|
46
|
-
|
|
47
|
-
```ts
|
|
48
|
-
import { createApp } from 'vue'
|
|
49
|
-
import App from './App.vue'
|
|
50
|
-
import WebphonePlugin from '@tmsoft/webphone'
|
|
51
|
-
|
|
52
|
-
const app = createApp(App)
|
|
53
|
-
app.use(WebphonePlugin)
|
|
54
|
-
app.mount('#app')
|
|
10
|
+
```bash
|
|
11
|
+
npm install @tmsoft/webphone
|
|
55
12
|
```
|
|
56
13
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
```vue
|
|
60
|
-
<script setup lang="ts">
|
|
61
|
-
const extension = '1001'
|
|
62
|
-
const password = 'supersecret'
|
|
63
|
-
const domain = 'sip.example.com' // ver normalización de dominio más abajo
|
|
64
|
-
</script>
|
|
65
|
-
|
|
66
|
-
<template>
|
|
67
|
-
<WebPhone :extension="extension" :password="password" :domain="domain" />
|
|
68
|
-
</template>
|
|
69
|
-
```
|
|
14
|
+
## Usage
|
|
70
15
|
|
|
71
|
-
###
|
|
16
|
+
### Vue 3
|
|
72
17
|
|
|
73
18
|
```vue
|
|
74
19
|
<script setup lang="ts">
|
|
75
20
|
import { WebPhone } from '@tmsoft/webphone'
|
|
21
|
+
import type { WebPhoneContact } from '@tmsoft/webphone'
|
|
76
22
|
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
23
|
+
const contacts: WebPhoneContact[] = [
|
|
24
|
+
{ name: 'Support', number: '1000', type: 'extension' },
|
|
25
|
+
{ name: 'Sales', number: '2000', type: 'extension' },
|
|
26
|
+
]
|
|
80
27
|
</script>
|
|
81
28
|
|
|
82
29
|
<template>
|
|
83
|
-
<WebPhone
|
|
30
|
+
<WebPhone
|
|
31
|
+
host="pbx.example.com"
|
|
32
|
+
extension="1001"
|
|
33
|
+
password="your-password"
|
|
34
|
+
:contacts="contacts"
|
|
35
|
+
@back="handleBack"
|
|
36
|
+
/>
|
|
84
37
|
</template>
|
|
85
38
|
```
|
|
86
39
|
|
|
40
|
+
### Web Component
|
|
87
41
|
|
|
88
|
-
|
|
42
|
+
```html
|
|
43
|
+
<script src="https://unpkg.com/@tmsoft/webphone/dist/webphone.component.js"></script>
|
|
44
|
+
|
|
45
|
+
<web-phone
|
|
46
|
+
host="pbx.example.com"
|
|
47
|
+
extension="1001"
|
|
48
|
+
password="your-password"
|
|
49
|
+
contacts='[{"name":"Support","number":"1000","type":"extension"}]'
|
|
50
|
+
></web-phone>
|
|
51
|
+
```
|
|
89
52
|
|
|
90
|
-
|
|
53
|
+
## Props
|
|
54
|
+
|
|
55
|
+
| Prop | Type | Required | Default | Description |
|
|
56
|
+
| ----------- | -------------------------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------- |
|
|
57
|
+
| `host` | `string` | Yes | — | SIP server host (e.g., `pbx.example.com`). WebSocket URL is built as `wss://<host>:8089/asterisk/ws` |
|
|
58
|
+
| `extension` | `string` | Yes | — | SIP extension for registration and calls |
|
|
59
|
+
| `password` | `string` | Yes | — | SIP password |
|
|
60
|
+
| `mode` | `'webcall' \| 'call' \| 'video'` | No | `'call'` | Operating mode |
|
|
61
|
+
| `logo` | `string` | No | — | Logo URL or base64 for `webcall` mode |
|
|
62
|
+
| `to` | `string` | No | — | Destination number for `webcall` mode. Auto-dials when SIP registration is active (~2s) |
|
|
63
|
+
| `contacts` | `WebPhoneContact[]` | No | `[]` | Contact list |
|
|
64
|
+
|
|
65
|
+
## Modes
|
|
66
|
+
|
|
67
|
+
| Mode | Description |
|
|
68
|
+
| --------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
69
|
+
| `call` | Standard softphone with keypad, contacts, and call history. Full-featured interface for making and receiving audio calls. |
|
|
70
|
+
| `video` | Same as `call` mode but with video support enabled. Displays local and remote video streams during calls. |
|
|
71
|
+
| `webcall` | Simplified click-to-call widget. Requires `to` and `logo` props. Ideal for embedding a quick-call button on websites. |
|
|
72
|
+
|
|
73
|
+
## Types
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
interface WebPhoneContact {
|
|
77
|
+
name: string
|
|
78
|
+
number: string
|
|
79
|
+
type?: 'tool' | 'extension' | 'contact' | 'voicemail'
|
|
80
|
+
}
|
|
81
|
+
```
|
|
91
82
|
|
|
92
|
-
|
|
93
|
-
|------------|--------------------------------------|-----------|-----------|-------------|
|
|
94
|
-
| `extension`| `string` | Sí | — | Extensión del usuario para registrar y originar llamadas SIP. |
|
|
95
|
-
| `password` | `string` | Sí | — | Contraseña SIP de la extensión. |
|
|
96
|
-
| `domain` | `string` | Sí | — | Dominio o URL del servidor SIP. Se normaliza automáticamente (ver detalle). |
|
|
97
|
-
| `mode` | `'webcall' \| 'call' \| 'video'` | No | `'webcall'` | Modo de uso. Nota: `video` aún no inicia video de forma automática. |
|
|
98
|
-
| `image` | `string` | No | — | URL o base64 para mostrar un logotipo en modo `webcall`. |
|
|
99
|
-
| `to` | `string` | No | — | Número destino en modo `webcall`. Si se define, se origina la llamada automáticamente cuando el registro SIP está activo (≈ 2 s). |
|
|
100
|
-
| `callback` | `(event: MouseEvent) => void` | No | — | Reservado. Actualmente no se utiliza en el componente. |
|
|
83
|
+
## Emits
|
|
101
84
|
|
|
85
|
+
| Emit | Description |
|
|
86
|
+
| ------ | ----------------------------------- |
|
|
87
|
+
| `back` | Emitted when back button is pressed |
|
|
102
88
|
|
|
103
|
-
|
|
104
|
-
El componente acepta distintos formatos y construye automáticamente la URL WebSocket para SIP:
|
|
105
|
-
- Si recibe solo host (por ejemplo, `pbx.midominio.com`), se asume `wss://pbx.midominio.com:8089/asterisk/ws`.
|
|
106
|
-
- Si recibe `http://host[:puerto]` se usa `ws://host[:puerto]/asterisk/ws`.
|
|
107
|
-
- Si recibe `https://host[:puerto]` se usa `wss://host[:puerto]/asterisk/ws`.
|
|
108
|
-
- Si indica explícitamente un puerto, se respeta (de lo contrario, se usa 8089 por defecto para Asterisk).
|
|
89
|
+
## Examples
|
|
109
90
|
|
|
110
|
-
|
|
91
|
+
### Call Mode (Default)
|
|
111
92
|
|
|
93
|
+
Standard softphone with full interface.
|
|
112
94
|
|
|
113
|
-
|
|
114
|
-
|
|
95
|
+
```vue
|
|
96
|
+
<WebPhone
|
|
97
|
+
host="pbx.example.com"
|
|
98
|
+
extension="1001"
|
|
99
|
+
password="secret"
|
|
100
|
+
mode="call"
|
|
101
|
+
:contacts="contacts"
|
|
102
|
+
/>
|
|
103
|
+
```
|
|
115
104
|
|
|
105
|
+
### Video Mode
|
|
116
106
|
|
|
117
|
-
|
|
107
|
+
Softphone with video support.
|
|
118
108
|
|
|
119
|
-
|
|
109
|
+
```vue
|
|
110
|
+
<WebPhone
|
|
111
|
+
host="pbx.example.com"
|
|
112
|
+
extension="1001"
|
|
113
|
+
password="secret"
|
|
114
|
+
mode="video"
|
|
115
|
+
:contacts="contacts"
|
|
116
|
+
/>
|
|
117
|
+
```
|
|
120
118
|
|
|
121
|
-
|
|
122
|
-
<script type="module">
|
|
123
|
-
import { createApp } from 'vue'
|
|
124
|
-
import WebphonePlugin from 'https://cdn.jsdelivr.net/npm/@tmsoft/webphone/dist/webphone.es.js'
|
|
119
|
+
### WebCall Mode
|
|
125
120
|
|
|
126
|
-
|
|
127
|
-
template: '<WebPhone extension="1001" password="supersecret" domain="sip.example.com" />'
|
|
128
|
-
}
|
|
121
|
+
Click-to-call widget for websites.
|
|
129
122
|
|
|
130
|
-
|
|
131
|
-
|
|
123
|
+
```vue
|
|
124
|
+
<WebPhone
|
|
125
|
+
host="pbx.example.com"
|
|
126
|
+
extension="1001"
|
|
127
|
+
password="secret"
|
|
128
|
+
mode="webcall"
|
|
129
|
+
to="5551234567"
|
|
130
|
+
logo="https://your-site.com/logo.png"
|
|
131
|
+
/>
|
|
132
132
|
```
|
|
133
133
|
|
|
134
|
-
### UMD
|
|
135
|
-
|
|
136
134
|
```html
|
|
137
|
-
<!--
|
|
138
|
-
<
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
app.use(WebPhone.default)
|
|
147
|
-
app.mount('#app')
|
|
148
|
-
</script>
|
|
135
|
+
<!-- Web Component -->
|
|
136
|
+
<web-phone
|
|
137
|
+
host="pbx.example.com"
|
|
138
|
+
extension="1001"
|
|
139
|
+
password="secret"
|
|
140
|
+
mode="webcall"
|
|
141
|
+
to="5551234567"
|
|
142
|
+
logo="https://your-site.com/logo.png"
|
|
143
|
+
></web-phone>
|
|
149
144
|
```
|
|
150
145
|
|
|
151
|
-
|
|
146
|
+
## Development
|
|
152
147
|
|
|
153
|
-
|
|
148
|
+
### Prerequisites
|
|
154
149
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
<script src="https://cdn.jsdelivr.net/npm/@tmsoft/webphone/dist/webphone-element.umd.js"></script>
|
|
150
|
+
- Node.js ^20.19.0 || >=22.12.0
|
|
151
|
+
- Yarn
|
|
158
152
|
|
|
159
|
-
|
|
160
|
-
|
|
153
|
+
### Setup
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# Install dependencies
|
|
157
|
+
yarn install
|
|
158
|
+
|
|
159
|
+
# Start development server
|
|
160
|
+
yarn dev
|
|
161
161
|
```
|
|
162
162
|
|
|
163
|
-
|
|
164
|
-
- Los atributos del elemento corresponden a las props del componente (`extension`, `password`, `domain`, `mode`, `image`, `to`).
|
|
165
|
-
- El build del Web Component incluye internamente Vue, PrimeVue y estilos necesarios; no requiere inicialización adicional.
|
|
163
|
+
### Scripts
|
|
166
164
|
|
|
165
|
+
| Command | Description |
|
|
166
|
+
| -------------------- | ------------------------------ |
|
|
167
|
+
| `yarn dev` | Start development server |
|
|
168
|
+
| `yarn build` | Build for production |
|
|
169
|
+
| `yarn build:lib` | Build library for distribution |
|
|
170
|
+
| `yarn test:unit` | Run unit tests in watch mode |
|
|
171
|
+
| `yarn test:coverage` | Run tests with coverage report |
|
|
172
|
+
| `yarn lint` | Run ESLint |
|
|
173
|
+
| `yarn type-check` | Run TypeScript type checking |
|
|
167
174
|
|
|
168
|
-
|
|
175
|
+
### Testing
|
|
169
176
|
|
|
170
|
-
|
|
177
|
+
The project uses Vitest for unit testing with the following coverage thresholds:
|
|
171
178
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
npm run test:unit # pruebas unitarias (Vitest)
|
|
177
|
-
npm run test:e2e # pruebas E2E (Playwright)
|
|
178
|
-
npm run lint # lint con ESLint
|
|
179
|
-
npm run format # formateo con Prettier
|
|
180
|
-
```
|
|
179
|
+
- Statements: 80%
|
|
180
|
+
- Branches: 70%
|
|
181
|
+
- Functions: 70%
|
|
182
|
+
- Lines: 80%
|
|
181
183
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
- `webphone.umd.js` (UMD)
|
|
186
|
-
- `index.d.ts` (tipos TypeScript)
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
## Publicación en NPM
|
|
190
|
-
|
|
191
|
-
Pasos sugeridos para publicar una versión:
|
|
192
|
-
|
|
193
|
-
1. Autentíquese en NPM (una vez por entorno):
|
|
194
|
-
```sh
|
|
195
|
-
npm login
|
|
196
|
-
```
|
|
197
|
-
2. Compile el paquete:
|
|
198
|
-
```sh
|
|
199
|
-
npm run build
|
|
200
|
-
```
|
|
201
|
-
3. Publique con incremento de patch automático:
|
|
202
|
-
```sh
|
|
203
|
-
npm run publish:lib
|
|
204
|
-
```
|
|
205
|
-
Este script ejecuta `npm version patch` y `npm publish --access public`.
|
|
206
|
-
|
|
207
|
-
Para publicar en un registro local (por ejemplo, Verdaccio):
|
|
208
|
-
```sh
|
|
209
|
-
npm run publish:local
|
|
210
|
-
```
|
|
184
|
+
```bash
|
|
185
|
+
# Run tests
|
|
186
|
+
yarn test:unit
|
|
211
187
|
|
|
188
|
+
# Run tests with coverage
|
|
189
|
+
yarn test:coverage
|
|
190
|
+
```
|
|
212
191
|
|
|
213
|
-
##
|
|
192
|
+
## License
|
|
214
193
|
|
|
215
|
-
MIT
|
|
194
|
+
MIT
|
package/dist/favicon.ico
CHANGED
|
Binary file
|
package/dist/index.d.ts
CHANGED
|
@@ -1,68 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { DefineComponent } from 'vue';
|
|
4
|
-
import { PublicProps } from 'vue';
|
|
5
|
-
|
|
6
|
-
declare const __VLS_component: DefineComponent<WebphoneProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<WebphoneProps> & Readonly<{}>, {
|
|
7
|
-
mode: "webcall" | "call" | "video";
|
|
8
|
-
}, {}, {}, {}, string, ComponentProvideOptions, false, {
|
|
9
|
-
playerRef: HTMLAudioElement;
|
|
10
|
-
ringerRef: HTMLAudioElement;
|
|
11
|
-
backRingerRef: HTMLAudioElement;
|
|
12
|
-
viewerRef: HTMLVideoElement;
|
|
13
|
-
selfViewerRef: HTMLVideoElement;
|
|
14
|
-
transcriptRef: HTMLDivElement;
|
|
15
|
-
}, any>;
|
|
16
|
-
|
|
17
|
-
declare function __VLS_template(): {
|
|
18
|
-
attrs: Partial<{}>;
|
|
19
|
-
slots: {
|
|
20
|
-
'back-button'?(_: {}): any;
|
|
21
|
-
};
|
|
22
|
-
refs: {
|
|
23
|
-
playerRef: HTMLAudioElement;
|
|
24
|
-
ringerRef: HTMLAudioElement;
|
|
25
|
-
backRingerRef: HTMLAudioElement;
|
|
26
|
-
viewerRef: HTMLVideoElement;
|
|
27
|
-
selfViewerRef: HTMLVideoElement;
|
|
28
|
-
transcriptRef: HTMLDivElement;
|
|
29
|
-
};
|
|
30
|
-
rootEl: any;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
declare type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
34
|
-
|
|
35
|
-
declare type __VLS_WithTemplateSlots<T, S> = T & {
|
|
36
|
-
new (): {
|
|
37
|
-
$slots: S;
|
|
38
|
-
};
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
export declare const WebPhone: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
42
|
-
|
|
43
|
-
declare interface WebphoneProps {
|
|
44
|
-
extension: string;
|
|
45
|
-
password: string;
|
|
46
|
-
domain: string;
|
|
47
|
-
mode: 'webcall' | 'call' | 'video';
|
|
48
|
-
image?: string;
|
|
49
|
-
to?: string;
|
|
50
|
-
callback?: (event: MouseEvent) => void;
|
|
51
|
-
/**
|
|
52
|
-
* (Opcional) Habilita la vista de múltiples canales de llamada
|
|
53
|
-
* Si es false o no se especifica, usa la vista de canal único tradicional
|
|
54
|
-
*/
|
|
55
|
-
multiChannel?: boolean;
|
|
56
|
-
/**
|
|
57
|
-
* (Opcional) Endpoint backend que devuelve el token efímero para OpenAI Realtime.
|
|
58
|
-
* Si se provee, se asigna a window.__WEBPHONE_TRANSCRIPTION_TOKEN_URL__ automáticamente.
|
|
59
|
-
*/
|
|
60
|
-
transcriptionTokenUrl?: string;
|
|
61
|
-
/**
|
|
62
|
-
* (Opcional) API key para solicitar el token efímero al endpoint indicado en `transcriptionTokenUrl`.
|
|
63
|
-
* Se envía en el header `api-key`.
|
|
64
|
-
*/
|
|
65
|
-
transcriptionTokenApiKey?: string;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export { }
|
|
1
|
+
export * from './lib/index'
|
|
2
|
+
export {}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface WebPhoneContact {
|
|
2
|
+
name: string;
|
|
3
|
+
number: string;
|
|
4
|
+
type?: 'tool' | 'extension' | 'contact' | 'voicemail';
|
|
5
|
+
}
|
|
6
|
+
export interface WebPhoneProps {
|
|
7
|
+
host?: string;
|
|
8
|
+
extension?: string;
|
|
9
|
+
password?: string;
|
|
10
|
+
to?: string;
|
|
11
|
+
mode?: 'webcall' | 'call' | 'video';
|
|
12
|
+
logo?: string;
|
|
13
|
+
contacts?: WebPhoneContact[];
|
|
14
|
+
}
|
|
15
|
+
export interface WebPhoneEmits {
|
|
16
|
+
back: () => void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
host?: string;
|
|
3
|
+
extension?: string;
|
|
4
|
+
password?: string;
|
|
5
|
+
to?: string;
|
|
6
|
+
mode?: 'webcall' | 'call' | 'video';
|
|
7
|
+
logo?: string;
|
|
8
|
+
contacts?: {
|
|
9
|
+
name: string;
|
|
10
|
+
number: string;
|
|
11
|
+
type?: 'tool' | 'extension' | 'contact' | 'voicemail';
|
|
12
|
+
}[];
|
|
13
|
+
};
|
|
14
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
15
|
+
back: () => any;
|
|
16
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
17
|
+
onBack?: (() => any) | undefined;
|
|
18
|
+
}>, {
|
|
19
|
+
contacts: {
|
|
20
|
+
name: string;
|
|
21
|
+
number: string;
|
|
22
|
+
type?: "tool" | "extension" | "contact" | "voicemail";
|
|
23
|
+
}[];
|
|
24
|
+
mode: "webcall" | "call" | "video";
|
|
25
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
26
|
+
phoneRef: HTMLDivElement;
|
|
27
|
+
standardHandleRef: HTMLDivElement;
|
|
28
|
+
webcallHandleRef: HTMLDivElement;
|
|
29
|
+
remoteVideoRef: HTMLVideoElement;
|
|
30
|
+
localVideoRef: HTMLVideoElement;
|
|
31
|
+
documentPipRef: ({
|
|
32
|
+
$: import('vue').ComponentInternalInstance;
|
|
33
|
+
$data: {};
|
|
34
|
+
$props: {
|
|
35
|
+
readonly remoteStream: MediaStream | null;
|
|
36
|
+
readonly localStream: MediaStream | null;
|
|
37
|
+
readonly hasVideo: boolean;
|
|
38
|
+
readonly remoteNumber: string;
|
|
39
|
+
readonly isConnected: boolean;
|
|
40
|
+
readonly callStatus: "idle" | "calling" | "incoming" | "connected" | "held";
|
|
41
|
+
readonly isMuted: boolean;
|
|
42
|
+
readonly isHeld: boolean;
|
|
43
|
+
readonly destination?: string | undefined;
|
|
44
|
+
readonly isVideo?: boolean | undefined;
|
|
45
|
+
readonly active?: boolean | undefined;
|
|
46
|
+
readonly autoOpenOnBlur?: boolean | undefined;
|
|
47
|
+
readonly onToggleMute?: (() => any) | undefined;
|
|
48
|
+
readonly onToggleHold?: (() => any) | undefined;
|
|
49
|
+
readonly onTransfer?: (() => any) | undefined;
|
|
50
|
+
readonly "onUpdate:active"?: ((isActive: boolean) => any) | undefined;
|
|
51
|
+
readonly onHangup?: (() => any) | undefined;
|
|
52
|
+
readonly onAnswer?: ((video: boolean) => any) | undefined;
|
|
53
|
+
} & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
|
|
54
|
+
$attrs: {
|
|
55
|
+
[x: string]: unknown;
|
|
56
|
+
};
|
|
57
|
+
$refs: {
|
|
58
|
+
[x: string]: unknown;
|
|
59
|
+
};
|
|
60
|
+
$slots: Readonly<{
|
|
61
|
+
[name: string]: import('vue').Slot<any> | undefined;
|
|
62
|
+
}>;
|
|
63
|
+
$root: import('vue').ComponentPublicInstance | null;
|
|
64
|
+
$parent: import('vue').ComponentPublicInstance | null;
|
|
65
|
+
$host: Element | null;
|
|
66
|
+
$emit: ((event: "toggleMute") => void) & ((event: "toggleHold") => void) & ((event: "transfer") => void) & ((event: "update:active", isActive: boolean) => void) & ((event: "hangup") => void) & ((event: "answer", video: boolean) => void);
|
|
67
|
+
$el: any;
|
|
68
|
+
$options: import('vue').ComponentOptionsBase<Readonly<{
|
|
69
|
+
remoteStream: MediaStream | null;
|
|
70
|
+
localStream: MediaStream | null;
|
|
71
|
+
hasVideo: boolean;
|
|
72
|
+
remoteNumber: string;
|
|
73
|
+
isConnected: boolean;
|
|
74
|
+
callStatus: "idle" | "calling" | "incoming" | "connected" | "held";
|
|
75
|
+
isMuted: boolean;
|
|
76
|
+
isHeld: boolean;
|
|
77
|
+
destination?: string;
|
|
78
|
+
isVideo?: boolean;
|
|
79
|
+
active?: boolean;
|
|
80
|
+
autoOpenOnBlur?: boolean;
|
|
81
|
+
}> & Readonly<{
|
|
82
|
+
onToggleMute?: (() => any) | undefined;
|
|
83
|
+
onToggleHold?: (() => any) | undefined;
|
|
84
|
+
onTransfer?: (() => any) | undefined;
|
|
85
|
+
"onUpdate:active"?: ((isActive: boolean) => any) | undefined;
|
|
86
|
+
onHangup?: (() => any) | undefined;
|
|
87
|
+
onAnswer?: ((video: boolean) => any) | undefined;
|
|
88
|
+
}>, {
|
|
89
|
+
open: () => Promise<void>;
|
|
90
|
+
close: () => void;
|
|
91
|
+
toggle: () => void;
|
|
92
|
+
isActive: import('vue').Ref<boolean, boolean>;
|
|
93
|
+
isSupported: import('vue').Ref<boolean, boolean>;
|
|
94
|
+
canUsePip: import('vue').ComputedRef<boolean>;
|
|
95
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
96
|
+
toggleMute: () => any;
|
|
97
|
+
toggleHold: () => any;
|
|
98
|
+
transfer: () => any;
|
|
99
|
+
"update:active": (isActive: boolean) => any;
|
|
100
|
+
hangup: () => any;
|
|
101
|
+
answer: (video: boolean) => any;
|
|
102
|
+
}, string, {}, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & {
|
|
103
|
+
beforeCreate?: (() => void) | (() => void)[];
|
|
104
|
+
created?: (() => void) | (() => void)[];
|
|
105
|
+
beforeMount?: (() => void) | (() => void)[];
|
|
106
|
+
mounted?: (() => void) | (() => void)[];
|
|
107
|
+
beforeUpdate?: (() => void) | (() => void)[];
|
|
108
|
+
updated?: (() => void) | (() => void)[];
|
|
109
|
+
activated?: (() => void) | (() => void)[];
|
|
110
|
+
deactivated?: (() => void) | (() => void)[];
|
|
111
|
+
beforeDestroy?: (() => void) | (() => void)[];
|
|
112
|
+
beforeUnmount?: (() => void) | (() => void)[];
|
|
113
|
+
destroyed?: (() => void) | (() => void)[];
|
|
114
|
+
unmounted?: (() => void) | (() => void)[];
|
|
115
|
+
renderTracked?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
|
|
116
|
+
renderTriggered?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
|
|
117
|
+
errorCaptured?: ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void)[];
|
|
118
|
+
};
|
|
119
|
+
$forceUpdate: () => void;
|
|
120
|
+
$nextTick: typeof import('vue').nextTick;
|
|
121
|
+
$watch<T extends string | ((...args: any) => any)>(source: T, cb: T extends (...args: any) => infer R ? (...args: [R, R, import('@vue/reactivity').OnCleanup]) => any : (...args: [any, any, import('@vue/reactivity').OnCleanup]) => any, options?: import('vue').WatchOptions): import('vue').WatchStopHandle;
|
|
122
|
+
} & Readonly<{}> & Omit<Readonly<{
|
|
123
|
+
remoteStream: MediaStream | null;
|
|
124
|
+
localStream: MediaStream | null;
|
|
125
|
+
hasVideo: boolean;
|
|
126
|
+
remoteNumber: string;
|
|
127
|
+
isConnected: boolean;
|
|
128
|
+
callStatus: "idle" | "calling" | "incoming" | "connected" | "held";
|
|
129
|
+
isMuted: boolean;
|
|
130
|
+
isHeld: boolean;
|
|
131
|
+
destination?: string;
|
|
132
|
+
isVideo?: boolean;
|
|
133
|
+
active?: boolean;
|
|
134
|
+
autoOpenOnBlur?: boolean;
|
|
135
|
+
}> & Readonly<{
|
|
136
|
+
onToggleMute?: (() => any) | undefined;
|
|
137
|
+
onToggleHold?: (() => any) | undefined;
|
|
138
|
+
onTransfer?: (() => any) | undefined;
|
|
139
|
+
"onUpdate:active"?: ((isActive: boolean) => any) | undefined;
|
|
140
|
+
onHangup?: (() => any) | undefined;
|
|
141
|
+
onAnswer?: ((video: boolean) => any) | undefined;
|
|
142
|
+
}>, "close" | "toggle" | "open" | "isActive" | "isSupported" | "canUsePip"> & import('vue').ShallowUnwrapRef<{
|
|
143
|
+
open: () => Promise<void>;
|
|
144
|
+
close: () => void;
|
|
145
|
+
toggle: () => void;
|
|
146
|
+
isActive: import('vue').Ref<boolean, boolean>;
|
|
147
|
+
isSupported: import('vue').Ref<boolean, boolean>;
|
|
148
|
+
canUsePip: import('vue').ComputedRef<boolean>;
|
|
149
|
+
}> & {} & import('vue').ComponentCustomProperties & {} & {
|
|
150
|
+
$slots: {
|
|
151
|
+
default?(_: {}): any;
|
|
152
|
+
};
|
|
153
|
+
}) | null;
|
|
154
|
+
}, any>;
|
|
155
|
+
export default _default;
|