@signalwire/web-components 4.0.0-beta.10 → 4.0.0-beta.12
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 +48 -55
- package/dist/_virtual/_commonjsHelpers.js +9 -0
- package/dist/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/_virtual/prism-python.js +28 -0
- package/dist/_virtual/prism-python.js.map +1 -0
- package/dist/_virtual/prism-python2.js +5 -0
- package/dist/_virtual/prism-python2.js.map +1 -0
- package/dist/_virtual/prism-typescript.js +28 -0
- package/dist/_virtual/prism-typescript.js.map +1 -0
- package/dist/_virtual/prism-typescript2.js +5 -0
- package/dist/_virtual/prism-typescript2.js.map +1 -0
- package/dist/_virtual/prism.js +28 -0
- package/dist/_virtual/prism.js.map +1 -0
- package/dist/_virtual/prism2.js +5 -0
- package/dist/_virtual/prism2.js.map +1 -0
- package/dist/assets/sw_background.webp.js +5 -0
- package/dist/assets/sw_background.webp.js.map +1 -0
- package/dist/components/UI/DEFAULT_BACKGROUND.d.ts +4 -0
- package/dist/components/UI/DEFAULT_BACKGROUND.d.ts.map +1 -0
- package/dist/components/UI/DEFAULT_BACKGROUND.js +5 -0
- package/dist/components/UI/DEFAULT_BACKGROUND.js.map +1 -0
- package/dist/components/UI/controls/sw-ui-control-bar.d.ts +114 -0
- package/dist/components/UI/controls/sw-ui-control-bar.d.ts.map +1 -0
- package/dist/components/UI/controls/sw-ui-control-bar.js +324 -0
- package/dist/components/UI/controls/sw-ui-control-bar.js.map +1 -0
- package/dist/components/UI/controls/sw-ui-dialpad.d.ts +67 -0
- package/dist/components/UI/controls/sw-ui-dialpad.d.ts.map +1 -0
- package/dist/components/UI/controls/sw-ui-dialpad.js +359 -0
- package/dist/components/UI/controls/sw-ui-dialpad.js.map +1 -0
- package/dist/components/UI/controls/sw-ui-dropup.d.ts +42 -0
- package/dist/components/UI/controls/sw-ui-dropup.d.ts.map +1 -0
- package/dist/components/UI/controls/sw-ui-dropup.js +137 -0
- package/dist/components/UI/controls/sw-ui-dropup.js.map +1 -0
- package/dist/components/UI/controls/sw-ui-split-button.d.ts +44 -0
- package/dist/components/UI/controls/sw-ui-split-button.d.ts.map +1 -0
- package/dist/components/UI/controls/sw-ui-split-button.js +177 -0
- package/dist/components/UI/controls/sw-ui-split-button.js.map +1 -0
- package/dist/components/UI/icons/backspace.svg.js +10 -0
- package/dist/components/UI/icons/backspace.svg.js.map +1 -0
- package/dist/components/UI/icons/camera-off.svg.js +8 -0
- package/dist/components/UI/icons/camera-off.svg.js.map +1 -0
- package/dist/components/UI/icons/camera-on.svg.js +8 -0
- package/dist/components/UI/icons/camera-on.svg.js.map +1 -0
- package/dist/components/UI/icons/check-circle.svg.js +6 -0
- package/dist/components/UI/icons/check-circle.svg.js.map +1 -0
- package/dist/components/UI/icons/chevron-up.svg.js +8 -0
- package/dist/components/UI/icons/chevron-up.svg.js.map +1 -0
- package/dist/components/UI/icons/close.svg.js +6 -0
- package/dist/components/UI/icons/close.svg.js.map +1 -0
- package/dist/components/UI/icons/copy.svg.js +6 -0
- package/dist/components/UI/icons/copy.svg.js.map +1 -0
- package/dist/components/UI/icons/download.svg.js +6 -0
- package/dist/components/UI/icons/download.svg.js.map +1 -0
- package/dist/components/UI/icons/fullscreen-exit.svg.js +8 -0
- package/dist/components/UI/icons/fullscreen-exit.svg.js.map +1 -0
- package/dist/components/UI/icons/fullscreen.svg.js +8 -0
- package/dist/components/UI/icons/fullscreen.svg.js.map +1 -0
- package/dist/components/UI/icons/hand-raise.svg.js +6 -0
- package/dist/components/UI/icons/hand-raise.svg.js.map +1 -0
- package/dist/components/UI/icons/icons.d.ts +31 -0
- package/dist/components/UI/icons/icons.d.ts.map +1 -0
- package/dist/components/UI/icons/icons.js +60 -0
- package/dist/components/UI/icons/icons.js.map +1 -0
- package/dist/components/UI/icons/index.d.ts +4 -0
- package/dist/components/UI/icons/index.d.ts.map +1 -0
- package/dist/components/UI/icons/info-circle.svg.js +6 -0
- package/dist/components/UI/icons/info-circle.svg.js.map +1 -0
- package/dist/components/UI/icons/mic-off.svg.js +8 -0
- package/dist/components/UI/icons/mic-off.svg.js.map +1 -0
- package/dist/components/UI/icons/mic-on.svg.js +8 -0
- package/dist/components/UI/icons/mic-on.svg.js.map +1 -0
- package/dist/components/UI/icons/person.svg.js +8 -0
- package/dist/components/UI/icons/person.svg.js.map +1 -0
- package/dist/components/UI/icons/phone-call.svg.js +8 -0
- package/dist/components/UI/icons/phone-call.svg.js.map +1 -0
- package/dist/components/UI/icons/phone-end.svg.js +8 -0
- package/dist/components/UI/icons/phone-end.svg.js.map +1 -0
- package/dist/components/UI/icons/room.svg.js +8 -0
- package/dist/components/UI/icons/room.svg.js.map +1 -0
- package/dist/components/UI/icons/screen-share-off.svg.js +9 -0
- package/dist/components/UI/icons/screen-share-off.svg.js.map +1 -0
- package/dist/components/UI/icons/screen-share.svg.js +9 -0
- package/dist/components/UI/icons/screen-share.svg.js.map +1 -0
- package/dist/components/UI/icons/sendIcon.svg.js +9 -0
- package/dist/components/UI/icons/sendIcon.svg.js.map +1 -0
- package/dist/components/UI/icons/settings.svg.js +8 -0
- package/dist/components/UI/icons/settings.svg.js.map +1 -0
- package/dist/components/UI/icons/speaker-off.svg.js +8 -0
- package/dist/components/UI/icons/speaker-off.svg.js.map +1 -0
- package/dist/components/UI/icons/speaker-on.svg.js +8 -0
- package/dist/components/UI/icons/speaker-on.svg.js.map +1 -0
- package/dist/components/UI/icons/spinner.svg.js +9 -0
- package/dist/components/UI/icons/spinner.svg.js.map +1 -0
- package/dist/components/UI/icons/sw-logo.svg.js +11 -0
- package/dist/components/UI/icons/sw-logo.svg.js.map +1 -0
- package/dist/components/UI/icons/sw-ui-icon.d.ts +28 -0
- package/dist/components/UI/icons/sw-ui-icon.d.ts.map +1 -0
- package/dist/components/UI/icons/sw-ui-icon.js +47 -0
- package/dist/components/UI/icons/sw-ui-icon.js.map +1 -0
- package/dist/components/UI/icons/transcript.svg.js +10 -0
- package/dist/components/UI/icons/transcript.svg.js.map +1 -0
- package/dist/components/UI/index.d.ts +18 -0
- package/dist/components/UI/index.d.ts.map +1 -0
- package/dist/components/UI/layout/sw-ui-background.d.ts +33 -0
- package/dist/components/UI/layout/sw-ui-background.d.ts.map +1 -0
- package/dist/components/UI/layout/sw-ui-background.js +106 -0
- package/dist/components/UI/layout/sw-ui-background.js.map +1 -0
- package/dist/components/UI/layout/sw-ui-call-layout.d.ts +69 -0
- package/dist/components/UI/layout/sw-ui-call-layout.d.ts.map +1 -0
- package/dist/components/UI/layout/sw-ui-call-layout.js +278 -0
- package/dist/components/UI/layout/sw-ui-call-layout.js.map +1 -0
- package/dist/components/UI/layout/sw-ui-content-drawer.d.ts +50 -0
- package/dist/components/UI/layout/sw-ui-content-drawer.d.ts.map +1 -0
- package/dist/components/UI/layout/sw-ui-content-drawer.js +413 -0
- package/dist/components/UI/layout/sw-ui-content-drawer.js.map +1 -0
- package/dist/components/UI/layout/sw-ui-modal.d.ts +31 -0
- package/dist/components/UI/layout/sw-ui-modal.d.ts.map +1 -0
- package/dist/components/UI/layout/sw-ui-modal.js +150 -0
- package/dist/components/UI/layout/sw-ui-modal.js.map +1 -0
- package/dist/components/UI/layout/sw-ui-responsive-container.d.ts +15 -0
- package/dist/components/UI/layout/sw-ui-responsive-container.d.ts.map +1 -0
- package/dist/components/UI/layout/sw-ui-responsive-container.js +78 -0
- package/dist/components/UI/layout/sw-ui-responsive-container.js.map +1 -0
- package/dist/components/UI/sw-ui-alert.d.ts +37 -0
- package/dist/components/UI/sw-ui-alert.d.ts.map +1 -0
- package/dist/components/UI/sw-ui-alert.js +126 -0
- package/dist/components/UI/sw-ui-alert.js.map +1 -0
- package/dist/components/UI/sw-ui-transcript-view.d.ts +56 -0
- package/dist/components/UI/sw-ui-transcript-view.d.ts.map +1 -0
- package/dist/components/UI/sw-ui-transcript-view.js +341 -0
- package/dist/components/UI/sw-ui-transcript-view.js.map +1 -0
- package/dist/components/{audio-level.d.ts → sw-audio-level.d.ts} +44 -4
- package/dist/components/sw-audio-level.d.ts.map +1 -0
- package/dist/components/sw-audio-level.js +252 -0
- package/dist/components/sw-audio-level.js.map +1 -0
- package/dist/components/sw-call-controls.d.ts +58 -0
- package/dist/components/sw-call-controls.d.ts.map +1 -0
- package/dist/components/sw-call-controls.js +186 -0
- package/dist/components/sw-call-controls.js.map +1 -0
- package/dist/components/sw-call-dialpad.d.ts +52 -0
- package/dist/components/sw-call-dialpad.d.ts.map +1 -0
- package/dist/components/sw-call-dialpad.js +70 -0
- package/dist/components/sw-call-dialpad.js.map +1 -0
- package/dist/components/sw-call-media.d.ts +68 -0
- package/dist/components/sw-call-media.d.ts.map +1 -0
- package/dist/components/sw-call-media.js +220 -0
- package/dist/components/sw-call-media.js.map +1 -0
- package/dist/components/sw-call-provider.d.ts +41 -0
- package/dist/components/sw-call-provider.d.ts.map +1 -0
- package/dist/components/sw-call-provider.js +37 -0
- package/dist/components/sw-call-provider.js.map +1 -0
- package/dist/components/sw-call-status.d.ts +50 -0
- package/dist/components/sw-call-status.d.ts.map +1 -0
- package/dist/components/sw-call-status.js +203 -0
- package/dist/components/sw-call-status.js.map +1 -0
- package/dist/components/sw-call-widget/client-factory.d.ts +6 -0
- package/dist/components/sw-call-widget/client-factory.d.ts.map +1 -0
- package/dist/components/sw-call-widget/client-factory.js +25 -0
- package/dist/components/sw-call-widget/client-factory.js.map +1 -0
- package/dist/components/sw-call-widget/sw-call-widget.d.ts +110 -0
- package/dist/components/sw-call-widget/sw-call-widget.d.ts.map +1 -0
- package/dist/components/sw-call-widget/sw-call-widget.js +250 -0
- package/dist/components/sw-call-widget/sw-call-widget.js.map +1 -0
- package/dist/components/sw-call-widget/sw-call-widget.templates.d.ts +17 -0
- package/dist/components/sw-call-widget/sw-call-widget.templates.d.ts.map +1 -0
- package/dist/components/sw-call-widget/sw-call-widget.templates.js +80 -0
- package/dist/components/sw-call-widget/sw-call-widget.templates.js.map +1 -0
- package/dist/components/sw-click-to-call.d.ts +39 -0
- package/dist/components/sw-click-to-call.d.ts.map +1 -0
- package/dist/components/sw-click-to-call.js +87 -0
- package/dist/components/sw-click-to-call.js.map +1 -0
- package/dist/components/sw-device-selector/index.d.ts +2 -0
- package/dist/components/sw-device-selector/index.d.ts.map +1 -0
- package/dist/components/sw-device-selector/sw-device-selector.d.ts +69 -0
- package/dist/components/sw-device-selector/sw-device-selector.d.ts.map +1 -0
- package/dist/components/sw-device-selector/sw-device-selector.js +277 -0
- package/dist/components/sw-device-selector/sw-device-selector.js.map +1 -0
- package/dist/components/sw-device-selector/sw-device-selector.styles.d.ts +2 -0
- package/dist/components/sw-device-selector/sw-device-selector.styles.d.ts.map +1 -0
- package/dist/components/sw-device-selector/sw-device-selector.styles.js +238 -0
- package/dist/components/sw-device-selector/sw-device-selector.styles.js.map +1 -0
- package/dist/components/{directory.d.ts → sw-directory.d.ts} +17 -3
- package/dist/components/sw-directory.d.ts.map +1 -0
- package/dist/components/sw-directory.js +434 -0
- package/dist/components/sw-directory.js.map +1 -0
- package/dist/components/sw-local-camera.d.ts +53 -0
- package/dist/components/sw-local-camera.d.ts.map +1 -0
- package/dist/components/sw-local-camera.js +147 -0
- package/dist/components/sw-local-camera.js.map +1 -0
- package/dist/components/sw-participant-controls.d.ts +58 -0
- package/dist/components/sw-participant-controls.d.ts.map +1 -0
- package/dist/components/sw-participant-controls.js +305 -0
- package/dist/components/sw-participant-controls.js.map +1 -0
- package/dist/components/sw-participants.d.ts +55 -0
- package/dist/components/sw-participants.d.ts.map +1 -0
- package/dist/components/sw-participants.js +319 -0
- package/dist/components/sw-participants.js.map +1 -0
- package/dist/components/sw-self-media.d.ts +46 -0
- package/dist/components/sw-self-media.d.ts.map +1 -0
- package/dist/components/sw-self-media.js +106 -0
- package/dist/components/sw-self-media.js.map +1 -0
- package/dist/context/CallStateContextController.d.ts +31 -0
- package/dist/context/CallStateContextController.d.ts.map +1 -0
- package/dist/context/CallStateContextController.js +125 -0
- package/dist/context/CallStateContextController.js.map +1 -0
- package/dist/context/DevicesContextController.d.ts +38 -0
- package/dist/context/DevicesContextController.d.ts.map +1 -0
- package/dist/context/DevicesContextController.js +124 -0
- package/dist/context/DevicesContextController.js.map +1 -0
- package/dist/context/TranscriptController.d.ts +32 -0
- package/dist/context/TranscriptController.d.ts.map +1 -0
- package/dist/context/TranscriptController.js +113 -0
- package/dist/context/TranscriptController.js.map +1 -0
- package/dist/context/UserEventController.d.ts +26 -0
- package/dist/context/UserEventController.d.ts.map +1 -0
- package/dist/context/UserEventController.js +55 -0
- package/dist/context/UserEventController.js.map +1 -0
- package/dist/context/call-state-context.d.ts +75 -0
- package/dist/context/call-state-context.d.ts.map +1 -0
- package/dist/context/call-state-context.js +39 -0
- package/dist/context/call-state-context.js.map +1 -0
- package/dist/context/chat-state.d.ts +41 -0
- package/dist/context/chat-state.d.ts.map +1 -0
- package/dist/context/chat-state.js +61 -0
- package/dist/context/chat-state.js.map +1 -0
- package/dist/context/devices-context.d.ts +28 -0
- package/dist/context/devices-context.d.ts.map +1 -0
- package/dist/context/devices-context.js +6 -0
- package/dist/context/devices-context.js.map +1 -0
- package/dist/context/index.d.ts +9 -1
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/transcript-context.d.ts +9 -0
- package/dist/context/transcript-context.d.ts.map +1 -0
- package/dist/context/transcript-context.js +6 -0
- package/dist/context/transcript-context.js.map +1 -0
- package/dist/context/types.d.ts +9 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/embed/signalwire-web-components-embed.iife.js +3225 -0
- package/dist/embed/signalwire-web-components-embed.iife.js.map +1 -0
- package/dist/embed/signalwire-web-components-embed.umd.cjs +3225 -0
- package/dist/embed/signalwire-web-components-embed.umd.cjs.map +1 -0
- package/dist/embed.d.ts +20 -0
- package/dist/embed.d.ts.map +1 -0
- package/dist/index.d.ts +19 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +83 -34
- package/dist/index.js.map +1 -1
- package/dist/node_modules/dompurify/dist/purify.es.js +597 -0
- package/dist/node_modules/dompurify/dist/purify.es.js.map +1 -0
- package/dist/node_modules/marked/lib/marked.esm.js +1475 -0
- package/dist/node_modules/marked/lib/marked.esm.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-bash.js +220 -0
- package/dist/node_modules/prismjs/components/prism-bash.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-css.js +56 -0
- package/dist/node_modules/prismjs/components/prism-css.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-javascript.js +138 -0
- package/dist/node_modules/prismjs/components/prism-javascript.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-json.js +26 -0
- package/dist/node_modules/prismjs/components/prism-json.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-markdown.js +301 -0
- package/dist/node_modules/prismjs/components/prism-markdown.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-python.js +69 -0
- package/dist/node_modules/prismjs/components/prism-python.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-sql.js +34 -0
- package/dist/node_modules/prismjs/components/prism-sql.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-typescript.js +53 -0
- package/dist/node_modules/prismjs/components/prism-typescript.js.map +1 -0
- package/dist/node_modules/prismjs/components/prism-yaml.js +67 -0
- package/dist/node_modules/prismjs/components/prism-yaml.js.map +1 -0
- package/dist/node_modules/prismjs/prism.js +1165 -0
- package/dist/node_modules/prismjs/prism.js.map +1 -0
- package/dist/react.d.ts +96 -46
- package/dist/theme.css +451 -0
- package/dist/theme.css.js +5 -0
- package/dist/theme.css.js.map +1 -0
- package/dist/types/index.d.ts +9 -33
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/prism.d.ts +4 -0
- package/dist/utils/prism.d.ts.map +1 -0
- package/dist/utils/prism.js +34 -0
- package/dist/utils/prism.js.map +1 -0
- package/dist/utils/theme-loader.d.ts +11 -0
- package/dist/utils/theme-loader.d.ts.map +1 -0
- package/dist/utils/theme-loader.js +17 -0
- package/dist/utils/theme-loader.js.map +1 -0
- package/dist/utils/transcriptToMarkdown.d.ts +14 -0
- package/dist/utils/transcriptToMarkdown.d.ts.map +1 -0
- package/dist/utils/transcriptToMarkdown.js +59 -0
- package/dist/utils/transcriptToMarkdown.js.map +1 -0
- package/dist/utils/use-google-font.d.ts +18 -0
- package/dist/utils/use-google-font.d.ts.map +1 -0
- package/dist/utils/use-google-font.js +12 -0
- package/dist/utils/use-google-font.js.map +1 -0
- package/dist/utils/user-variables.d.ts +20 -0
- package/dist/utils/user-variables.d.ts.map +1 -0
- package/dist/utils/user-variables.js +37 -0
- package/dist/utils/user-variables.js.map +1 -0
- package/package.json +104 -41
- package/dist/components/audio-level.d.ts.map +0 -1
- package/dist/components/audio-level.js +0 -203
- package/dist/components/audio-level.js.map +0 -1
- package/dist/components/call-controls.d.ts +0 -163
- package/dist/components/call-controls.d.ts.map +0 -1
- package/dist/components/call-controls.js +0 -606
- package/dist/components/call-controls.js.map +0 -1
- package/dist/components/call-media.d.ts +0 -114
- package/dist/components/call-media.d.ts.map +0 -1
- package/dist/components/call-media.js +0 -219
- package/dist/components/call-media.js.map +0 -1
- package/dist/components/call-status.d.ts +0 -68
- package/dist/components/call-status.d.ts.map +0 -1
- package/dist/components/call-status.js +0 -254
- package/dist/components/call-status.js.map +0 -1
- package/dist/components/click-to-call.d.ts +0 -123
- package/dist/components/click-to-call.d.ts.map +0 -1
- package/dist/components/click-to-call.js +0 -428
- package/dist/components/click-to-call.js.map +0 -1
- package/dist/components/device-selector.d.ts +0 -224
- package/dist/components/device-selector.d.ts.map +0 -1
- package/dist/components/device-selector.js +0 -685
- package/dist/components/device-selector.js.map +0 -1
- package/dist/components/dialpad.d.ts +0 -60
- package/dist/components/dialpad.d.ts.map +0 -1
- package/dist/components/dialpad.js +0 -372
- package/dist/components/dialpad.js.map +0 -1
- package/dist/components/directory.d.ts.map +0 -1
- package/dist/components/directory.js +0 -503
- package/dist/components/directory.js.map +0 -1
- package/dist/components/example-button.d.ts +0 -20
- package/dist/components/example-button.d.ts.map +0 -1
- package/dist/components/example-button.js +0 -74
- package/dist/components/example-button.js.map +0 -1
- package/dist/components/participant-controls.d.ts +0 -94
- package/dist/components/participant-controls.d.ts.map +0 -1
- package/dist/components/participant-controls.js +0 -468
- package/dist/components/participant-controls.js.map +0 -1
- package/dist/components/participants.d.ts +0 -116
- package/dist/components/participants.d.ts.map +0 -1
- package/dist/components/participants.js +0 -394
- package/dist/components/participants.js.map +0 -1
- package/dist/components/self-media.d.ts +0 -78
- package/dist/components/self-media.d.ts.map +0 -1
- package/dist/components/self-media.js +0 -129
- package/dist/components/self-media.js.map +0 -1
- package/dist/context/call-context.d.ts +0 -13
- package/dist/context/call-context.d.ts.map +0 -1
- package/dist/context/call-context.js +0 -6
- package/dist/context/call-context.js.map +0 -1
- package/dist/types/index.js +0 -12
- package/dist/types/index.js.map +0 -1
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { LitElement as C, nothing as c, html as _ } from "lit";
|
|
2
|
+
import { property as l, state as p, customElement as y } from "lit/decorators.js";
|
|
3
|
+
import { getLogger as f, SignalWire as w } from "@signalwire/js";
|
|
4
|
+
import { filter as g, first as m } from "rxjs/operators";
|
|
5
|
+
import { CallStateContextController as b } from "../../context/CallStateContextController.js";
|
|
6
|
+
import { IncomingCallController as v } from "../../context/call-state-context.js";
|
|
7
|
+
import { DevicesContextController as E } from "../../context/DevicesContextController.js";
|
|
8
|
+
import { TranscriptController as S } from "../../context/TranscriptController.js";
|
|
9
|
+
import { UserEventController as L } from "../../context/UserEventController.js";
|
|
10
|
+
import { showPrompt as h } from "../UI/sw-ui-alert.js";
|
|
11
|
+
import { ensureSignalWireTheme as I, ensureSignalWireFonts as D } from "../../utils/theme-loader.js";
|
|
12
|
+
import { withWidgetCapabilities as T, parseUserVariablesAttribute as F } from "../../utils/user-variables.js";
|
|
13
|
+
import { buildCredentialProvider as $ } from "./client-factory.js";
|
|
14
|
+
import { renderCallView as A, renderConnecting as k, widgetStyles as W } from "./sw-call-widget.templates.js";
|
|
15
|
+
var U = Object.defineProperty, V = Object.getOwnPropertyDescriptor, s = (t, e, n, r) => {
|
|
16
|
+
for (var o = r > 1 ? void 0 : r ? V(e, n) : e, a = t.length - 1, u; a >= 0; a--)
|
|
17
|
+
(u = t[a]) && (o = (r ? u(e, n, o) : u(o)) || o);
|
|
18
|
+
return r && o && U(e, n, o), o;
|
|
19
|
+
};
|
|
20
|
+
const d = f();
|
|
21
|
+
let i = class extends C {
|
|
22
|
+
constructor() {
|
|
23
|
+
super(...arguments), this.token = "", this.host = "", this.destination = "", this.modal = !1, this.transcription = !1, this.allowIncomingCalls = !1, this.audioOnly = !1, this.userVariables = "", this.disableAutoTheme = !1, this.disableAutoFonts = !1, this._call = null, this._connecting = !1, this._hasLayoutLayers = !1, this._drawer = null, this._callState = new b(this), this._devices = new E(this), this._transcript = new S(this), this._userEventCtrl = new L(this), this._incomingCalls = new v(this), this._client = null, this._subs = [], this._pendingIncoming = !1, this._handleIncomingCall = async (t) => {
|
|
24
|
+
if (!(this._call || this._connecting || this._pendingIncoming)) {
|
|
25
|
+
this._pendingIncoming = !0;
|
|
26
|
+
try {
|
|
27
|
+
const e = t.callerName || t.callerNumber || "Unknown Caller";
|
|
28
|
+
await h({
|
|
29
|
+
title: "Incoming Call",
|
|
30
|
+
description: `${e} is calling`,
|
|
31
|
+
type: "confirm"
|
|
32
|
+
}) ? (this._wireCall(t.call), t.call.answer()) : t.call.reject();
|
|
33
|
+
} finally {
|
|
34
|
+
this._pendingIncoming = !1;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}, this._onDisplayContent = (t) => {
|
|
38
|
+
this._drawer = t.detail, this._transcript.injectEntry({
|
|
39
|
+
id: crypto.randomUUID(),
|
|
40
|
+
type: "system",
|
|
41
|
+
state: "complete",
|
|
42
|
+
text: t.detail.title ?? "Agent shared content",
|
|
43
|
+
meta: { displayContent: t.detail }
|
|
44
|
+
});
|
|
45
|
+
}, this._onDrawerClose = () => {
|
|
46
|
+
this._drawer = null;
|
|
47
|
+
}, this._onModalClose = (t) => {
|
|
48
|
+
if (this._call || this._connecting) {
|
|
49
|
+
this.hangup();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
this.destination || t.preventDefault();
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
// ── Lifecycle ──────────────────────────────────────────────────────
|
|
56
|
+
connectedCallback() {
|
|
57
|
+
super.connectedCallback(), this.disableAutoTheme || I(), this.disableAutoFonts || D();
|
|
58
|
+
}
|
|
59
|
+
updated(t) {
|
|
60
|
+
super.updated(t), t.has("token") || t.has("host") ? this.token ? this._refreshClient() : t.has("host") && d.debug(
|
|
61
|
+
"[SwCallWidget] host changed but token is empty; skipping client refresh until token is set"
|
|
62
|
+
) : t.has("allowIncomingCalls") && this._client && (this.allowIncomingCalls ? this._connectIncomingCalls() : this._incomingCalls.disconnect());
|
|
63
|
+
}
|
|
64
|
+
disconnectedCallback() {
|
|
65
|
+
super.disconnectedCallback(), this._destroyClient();
|
|
66
|
+
}
|
|
67
|
+
// ── Client lifecycle ───────────────────────────────────────────────
|
|
68
|
+
_destroyClient() {
|
|
69
|
+
if (this._subs.forEach((t) => t.unsubscribe()), this._subs = [], this._incomingCalls.disconnect(), this._devices.disconnectCall(), this._devices.disconnect(), this._callState.disconnect(), this._transcript.setCall(void 0), this._client) {
|
|
70
|
+
try {
|
|
71
|
+
this._client.destroy();
|
|
72
|
+
} catch (t) {
|
|
73
|
+
d.error("[SwCallWidget] Error destroying client:", t);
|
|
74
|
+
}
|
|
75
|
+
this._client = null;
|
|
76
|
+
}
|
|
77
|
+
this._call = null, this._connecting = !1;
|
|
78
|
+
}
|
|
79
|
+
_refreshClient() {
|
|
80
|
+
this._destroyClient();
|
|
81
|
+
try {
|
|
82
|
+
this._client = new w(
|
|
83
|
+
$(this.token, this.host)
|
|
84
|
+
), this._devices.connectDevices(this._client), this.allowIncomingCalls && this._connectIncomingCalls();
|
|
85
|
+
} catch (t) {
|
|
86
|
+
const e = t instanceof Error ? t.message : "Failed to initialise client";
|
|
87
|
+
d.error("[SwCallWidget] Failed to initialise client:", t), h({ title: "Client Error", description: e, type: "alert" });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// ── Public methods ─────────────────────────────────────────────────
|
|
91
|
+
async dial() {
|
|
92
|
+
if (!this._client || this._connecting || this._call) return;
|
|
93
|
+
if (!this.destination) {
|
|
94
|
+
h({ title: "Call Error", description: "No destination configured.", type: "alert" });
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
this._connecting = !0, this.dispatchEvent(new CustomEvent("sw-dial", {
|
|
98
|
+
detail: { destination: this.destination },
|
|
99
|
+
bubbles: !0,
|
|
100
|
+
composed: !0
|
|
101
|
+
}));
|
|
102
|
+
const t = !this.audioOnly;
|
|
103
|
+
try {
|
|
104
|
+
const e = await new Promise((n, r) => {
|
|
105
|
+
const o = this._client.isConnected$.pipe(g((a) => a), m()).subscribe({
|
|
106
|
+
next: () => {
|
|
107
|
+
const a = T(
|
|
108
|
+
F(this.userVariables)
|
|
109
|
+
);
|
|
110
|
+
this._client.dial(this.destination, {
|
|
111
|
+
audio: !0,
|
|
112
|
+
video: t,
|
|
113
|
+
receiveAudio: !0,
|
|
114
|
+
receiveVideo: t,
|
|
115
|
+
userVariables: a
|
|
116
|
+
}).then(n).catch(r);
|
|
117
|
+
},
|
|
118
|
+
error: r
|
|
119
|
+
});
|
|
120
|
+
this._subs.push(o);
|
|
121
|
+
});
|
|
122
|
+
this._wireCall(e);
|
|
123
|
+
} catch (e) {
|
|
124
|
+
const n = e instanceof Error ? e.message : "Failed to connect call";
|
|
125
|
+
d.error("[SwCallWidget] Dial failed:", e), h({ title: "Call Failed", description: n, type: "alert" });
|
|
126
|
+
} finally {
|
|
127
|
+
this._connecting = !1;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async hangup() {
|
|
131
|
+
this._call && await this._call.hangup();
|
|
132
|
+
}
|
|
133
|
+
// ── Incoming calls ──────────────────────────────────────────────────
|
|
134
|
+
_connectIncomingCalls() {
|
|
135
|
+
this._client && (this._incomingCalls.onIncomingCall = this._handleIncomingCall, this._subs.push(
|
|
136
|
+
this._client.isConnected$.pipe(g(Boolean), m()).subscribe(() => {
|
|
137
|
+
this._client && this._incomingCalls.connect(this._client.session.incomingCalls$);
|
|
138
|
+
})
|
|
139
|
+
));
|
|
140
|
+
}
|
|
141
|
+
// ── Call wiring ────────────────────────────────────────────────────
|
|
142
|
+
_wireCall(t) {
|
|
143
|
+
this._call = t, this._callState.connect(t), this._devices.connectCall(t), this._transcript.setCall(t), this._userEventCtrl.setCall(t), this.addEventListener("sw-display-content", this._onDisplayContent), this._devices.refreshDevices(), this._subs.push(
|
|
144
|
+
t.layoutLayers$.subscribe((e) => {
|
|
145
|
+
this._hasLayoutLayers = e.length > 0;
|
|
146
|
+
})
|
|
147
|
+
), this._subs.push(
|
|
148
|
+
t.status$.subscribe((e) => {
|
|
149
|
+
(e === "disconnected" || e === "destroyed" || e === "failed") && this._unwireCall();
|
|
150
|
+
})
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
_unwireCall() {
|
|
154
|
+
const t = this._call, e = t == null ? void 0 : t.status;
|
|
155
|
+
this._callState.disconnect(), this._devices.disconnectCall(), this._transcript.setCall(void 0), this._userEventCtrl.setCall(void 0), this.removeEventListener("sw-display-content", this._onDisplayContent), this._call = null, this._connecting = !1, this._hasLayoutLayers = !1, this._drawer = null, t && this.dispatchEvent(new CustomEvent("sw-call-ended", {
|
|
156
|
+
detail: { status: e },
|
|
157
|
+
bubbles: !0,
|
|
158
|
+
composed: !0
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
161
|
+
// ── Slot trigger ───────────────────────────────────────────────────
|
|
162
|
+
_onSlotChange(t) {
|
|
163
|
+
t.target.assignedElements({ flatten: !0 }).forEach((n) => {
|
|
164
|
+
n instanceof HTMLElement && n.addEventListener("click", () => this.dial());
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
// ── Event handlers ─────────────────────────────────────────────────
|
|
168
|
+
_onHangUp() {
|
|
169
|
+
this.hangup();
|
|
170
|
+
}
|
|
171
|
+
_onFullscreenToggle() {
|
|
172
|
+
var e;
|
|
173
|
+
const t = (e = this.shadowRoot) == null ? void 0 : e.querySelector("sw-ui-call-layout");
|
|
174
|
+
t && t.toggleFullscreen();
|
|
175
|
+
}
|
|
176
|
+
_onTranscriptToggle() {
|
|
177
|
+
this.transcription = !this.transcription;
|
|
178
|
+
}
|
|
179
|
+
// ── Render ─────────────────────────────────────────────────────────
|
|
180
|
+
render() {
|
|
181
|
+
const t = !!(this._call || this._connecting), e = this._call ? A({
|
|
182
|
+
transcription: this.transcription,
|
|
183
|
+
hasLayoutLayers: this._hasLayoutLayers,
|
|
184
|
+
drawer: this._drawer,
|
|
185
|
+
transcriptEntries: this._transcript.state.entries,
|
|
186
|
+
onHangUp: this._onHangUp,
|
|
187
|
+
onFullscreenToggle: this._onFullscreenToggle,
|
|
188
|
+
onTranscriptToggle: this._onTranscriptToggle,
|
|
189
|
+
onDrawerClose: this._onDrawerClose
|
|
190
|
+
}) : this._connecting ? k() : c;
|
|
191
|
+
return this.modal ? _`
|
|
192
|
+
<slot @slotchange=${this._onSlotChange}></slot>
|
|
193
|
+
<sw-ui-modal ?open=${t} @sw-modal-close=${this._onModalClose}>
|
|
194
|
+
<sw-ui-responsive-container>
|
|
195
|
+
${e !== c ? e : c}
|
|
196
|
+
</sw-ui-responsive-container>
|
|
197
|
+
</sw-ui-modal>
|
|
198
|
+
` : e !== c ? e : _`<slot @slotchange=${this._onSlotChange}></slot>`;
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
i.styles = W;
|
|
202
|
+
s([
|
|
203
|
+
l({ type: String })
|
|
204
|
+
], i.prototype, "token", 2);
|
|
205
|
+
s([
|
|
206
|
+
l({ type: String })
|
|
207
|
+
], i.prototype, "host", 2);
|
|
208
|
+
s([
|
|
209
|
+
l({ type: String })
|
|
210
|
+
], i.prototype, "destination", 2);
|
|
211
|
+
s([
|
|
212
|
+
l({ type: Boolean, reflect: !0 })
|
|
213
|
+
], i.prototype, "modal", 2);
|
|
214
|
+
s([
|
|
215
|
+
l({ type: Boolean, reflect: !0 })
|
|
216
|
+
], i.prototype, "transcription", 2);
|
|
217
|
+
s([
|
|
218
|
+
l({ type: Boolean, reflect: !0, attribute: "allow-incoming-calls" })
|
|
219
|
+
], i.prototype, "allowIncomingCalls", 2);
|
|
220
|
+
s([
|
|
221
|
+
l({ type: Boolean, reflect: !0, attribute: "audio-only" })
|
|
222
|
+
], i.prototype, "audioOnly", 2);
|
|
223
|
+
s([
|
|
224
|
+
l({ type: String, attribute: "user-variables" })
|
|
225
|
+
], i.prototype, "userVariables", 2);
|
|
226
|
+
s([
|
|
227
|
+
l({ type: Boolean, reflect: !0, attribute: "disable-auto-theme" })
|
|
228
|
+
], i.prototype, "disableAutoTheme", 2);
|
|
229
|
+
s([
|
|
230
|
+
l({ type: Boolean, reflect: !0, attribute: "disable-auto-fonts" })
|
|
231
|
+
], i.prototype, "disableAutoFonts", 2);
|
|
232
|
+
s([
|
|
233
|
+
p()
|
|
234
|
+
], i.prototype, "_call", 2);
|
|
235
|
+
s([
|
|
236
|
+
p()
|
|
237
|
+
], i.prototype, "_connecting", 2);
|
|
238
|
+
s([
|
|
239
|
+
p()
|
|
240
|
+
], i.prototype, "_hasLayoutLayers", 2);
|
|
241
|
+
s([
|
|
242
|
+
p()
|
|
243
|
+
], i.prototype, "_drawer", 2);
|
|
244
|
+
i = s([
|
|
245
|
+
y("sw-call-widget")
|
|
246
|
+
], i);
|
|
247
|
+
export {
|
|
248
|
+
i as SwCallWidget
|
|
249
|
+
};
|
|
250
|
+
//# sourceMappingURL=sw-call-widget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sw-call-widget.js","sources":["../../../src/components/sw-call-widget/sw-call-widget.ts"],"sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { SignalWire, getLogger } from '@signalwire/js';\nimport type { Call } from '../../types/index.js';\nimport { Subscription } from 'rxjs';\nimport { first, filter } from 'rxjs/operators';\n\nimport { CallStateContextController } from '../../context/CallStateContextController.js';\nimport { IncomingCallController } from '../../context/call-state-context.js';\nimport type { IncomingCallInfo } from '../../context/call-state-context.js';\nimport { DevicesContextController } from '../../context/DevicesContextController.js';\nimport { TranscriptController } from '../../context/TranscriptController.js';\nimport { UserEventController } from '../../context/UserEventController.js';\n\nimport '../sw-call-media.js';\nimport '../sw-local-camera.js';\nimport '../sw-call-controls.js';\nimport '../UI/layout/sw-ui-call-layout.js';\nimport '../UI/layout/sw-ui-responsive-container.js';\nimport '../UI/layout/sw-ui-modal.js';\nimport '../UI/layout/sw-ui-background.js';\nimport '../UI/layout/sw-ui-content-drawer.js';\nimport '../UI/sw-ui-transcript-view.js';\nimport { showPrompt } from '../UI/sw-ui-alert.js';\nimport type { DisplayContentPayload } from '../UI/layout/sw-ui-content-drawer.js';\nimport { ensureSignalWireTheme, ensureSignalWireFonts } from '../../utils/theme-loader.js';\nimport {\n parseUserVariablesAttribute,\n withWidgetCapabilities,\n} from '../../utils/user-variables.js';\nimport { buildCredentialProvider } from './client-factory.js';\nimport {\n widgetStyles,\n renderCallView,\n renderConnecting,\n} from './sw-call-widget.templates.js';\n\nconst logger = getLogger();\n\n/**\n * All-in-one call widget. Handles client initialisation, dialling, media,\n * controls and optional AI transcript — in either inline or modal modes.\n *\n * Composes `sw-ui-call-layout`, `sw-call-media`, `sw-local-camera`,\n * `sw-call-controls`, and `sw-ui-transcript-view` under the hood.\n * All child components are wired via Lit context — no manual plumbing needed.\n *\n * @prop {string} token - SignalWire SAT or embed token\n * @prop {string} host - Optional server host\n * @prop {string} destination - Call destination (address or resource)\n * @prop {boolean} modal - Render in a `<sw-ui-modal>` overlay\n * @prop {boolean} transcription - Show AI transcript panel\n *\n * @slot background - Background element (e.g. `<sw-ui-background default>`)\n * @slot (default) - Trigger element (click to dial, shown when idle)\n *\n * @fires sw-dial - When `dial()` is invoked. Detail: `{ destination }`.\n * @fires sw-call-ended - When the call reaches a terminal state (user hangup, remote disconnect, or failure). Detail: `{ status }`.\n * @fires sw-display-content - From `display_content` user event. Detail: `DisplayContentPayload`.\n * @fires signalwire-address:event - Forwarded SignalWire custom user events.\n *\n * All inner events bubble.\n *\n * @method dial() - Initiate call\n * @method hangup() - End active call\n */\n@customElement('sw-call-widget')\nexport class SwCallWidget extends LitElement {\n static styles = widgetStyles;\n\n // ── Public properties ──────────────────────────────────────────────\n\n @property({ type: String }) token = '';\n @property({ type: String }) host = '';\n @property({ type: String }) destination = '';\n @property({ type: Boolean, reflect: true }) modal = false;\n @property({ type: Boolean, reflect: true }) transcription = false;\n @property({ type: Boolean, reflect: true, attribute: 'allow-incoming-calls' }) allowIncomingCalls = false;\n @property({ type: Boolean, reflect: true, attribute: 'audio-only' }) audioOnly = false;\n\n /**\n * Custom variables sent with the Verto invite as a JSON object.\n *\n * The widget always advertises `capabilities.display_content` and\n * `metadata.widget.opened_at` so the agent can detect that the caller\n * supports the content drawer; user-supplied keys are merged in and win\n * on shallow conflict.\n *\n * Invalid JSON is logged and ignored — the call still dials.\n *\n * @example\n * <sw-call-widget user-variables='{\"customer_id\": \"abc-123\"}'></sw-call-widget>\n */\n @property({ type: String, attribute: 'user-variables' }) userVariables = '';\n\n /**\n * Skip auto-injecting the SignalWire `theme.css` design-token stylesheet.\n * Set this when the host page already loads `@signalwire/web-components/theme.css`\n * or a custom theme written against the same DTCG token names.\n */\n @property({ type: Boolean, reflect: true, attribute: 'disable-auto-theme' }) disableAutoTheme = false;\n\n /**\n * Skip auto-loading the SignalWire brand fonts (Lexend, Instrument Sans,\n * JetBrains Mono) from Google Fonts. Set this when fonts are self-hosted\n * or loaded elsewhere.\n */\n @property({ type: Boolean, reflect: true, attribute: 'disable-auto-fonts' }) disableAutoFonts = false;\n\n // ── Internal state ─────────────────────────────────────────────────\n\n @state() private _call: Call | null = null;\n @state() private _connecting = false;\n @state() private _hasLayoutLayers = false;\n @state() private _drawer: DisplayContentPayload | null = null;\n\n // ── Context providers ──────────────────────────────────────────────\n\n private _callState = new CallStateContextController(this);\n private _devices = new DevicesContextController(this);\n private _transcript: TranscriptController = new TranscriptController(this);\n private _userEventCtrl = new UserEventController(this);\n private _incomingCalls = new IncomingCallController(this);\n\n // ── Internals ──────────────────────────────────────────────────────\n\n private _client: SignalWire | null = null;\n private _subs: Subscription[] = [];\n private _pendingIncoming = false;\n\n // ── Lifecycle ──────────────────────────────────────────────────────\n\n connectedCallback(): void {\n super.connectedCallback();\n if (!this.disableAutoTheme) ensureSignalWireTheme();\n if (!this.disableAutoFonts) ensureSignalWireFonts();\n }\n\n protected updated(changed: Map<string, unknown>): void {\n super.updated(changed);\n if (changed.has('token') || changed.has('host')) {\n if (this.token) {\n this._refreshClient();\n } else if (changed.has('host')) {\n // Host changed but no token configured yet — defer client init until\n // the consumer sets `.token`. Surface this so misconfigurations\n // (e.g. forgetting to bind token) don't fail silently.\n logger.debug(\n '[SwCallWidget] host changed but token is empty; skipping client refresh until token is set',\n );\n }\n } else if (changed.has('allowIncomingCalls') && this._client) {\n if (this.allowIncomingCalls) {\n this._connectIncomingCalls();\n } else {\n this._incomingCalls.disconnect();\n }\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this._destroyClient();\n }\n\n // ── Client lifecycle ───────────────────────────────────────────────\n\n private _destroyClient(): void {\n this._subs.forEach((s) => s.unsubscribe());\n this._subs = [];\n\n this._incomingCalls.disconnect();\n this._devices.disconnectCall();\n this._devices.disconnect();\n this._callState.disconnect();\n this._transcript.setCall(undefined);\n\n\n if (this._client) {\n try {\n this._client.destroy();\n } catch (e) {\n logger.error('[SwCallWidget] Error destroying client:', e);\n }\n this._client = null;\n }\n\n this._call = null;\n this._connecting = false;\n }\n\n private _refreshClient(): void {\n this._destroyClient();\n try {\n this._client = new SignalWire(\n buildCredentialProvider(this.token, this.host),\n );\n this._devices.connectDevices(this._client as unknown as import('../../types/index.js').DeviceController);\n\n if (this.allowIncomingCalls) {\n this._connectIncomingCalls();\n }\n } catch (e) {\n const message = e instanceof Error ? e.message : 'Failed to initialise client';\n logger.error('[SwCallWidget] Failed to initialise client:', e);\n void showPrompt({ title: 'Client Error', description: message, type: 'alert' });\n }\n }\n\n // ── Public methods ─────────────────────────────────────────────────\n\n async dial(): Promise<void> {\n if (!this._client || this._connecting || this._call) return;\n if (!this.destination) {\n void showPrompt({ title: 'Call Error', description: 'No destination configured.', type: 'alert' });\n return;\n }\n\n this._connecting = true;\n\n this.dispatchEvent(new CustomEvent('sw-dial', {\n detail: { destination: this.destination },\n bubbles: true,\n composed: true,\n }));\n\n const wantsVideo = !this.audioOnly;\n\n try {\n const call = await new Promise<Call>((resolve, reject) => {\n const sub = this._client!.isConnected$\n .pipe(filter((c) => c), first())\n .subscribe({\n next: () => {\n const userVariables = withWidgetCapabilities(\n parseUserVariablesAttribute(this.userVariables)\n );\n this._client!\n .dial(this.destination, {\n audio: true,\n video: wantsVideo,\n receiveAudio: true,\n receiveVideo: wantsVideo,\n userVariables,\n })\n .then(resolve)\n .catch(reject);\n },\n error: reject,\n });\n this._subs.push(sub);\n });\n\n this._wireCall(call);\n } catch (e) {\n const message = e instanceof Error ? e.message : 'Failed to connect call';\n logger.error('[SwCallWidget] Dial failed:', e);\n void showPrompt({ title: 'Call Failed', description: message, type: 'alert' });\n } finally {\n this._connecting = false;\n }\n }\n\n async hangup(): Promise<void> {\n if (this._call) {\n await this._call.hangup();\n }\n }\n\n // ── Incoming calls ──────────────────────────────────────────────────\n\n private _connectIncomingCalls(): void {\n if (!this._client) return;\n this._incomingCalls.onIncomingCall = this._handleIncomingCall;\n this._subs.push(\n this._client.isConnected$\n .pipe(filter(Boolean), first())\n .subscribe(() => {\n if (this._client) {\n this._incomingCalls.connect(this._client.session.incomingCalls$);\n }\n })\n );\n }\n\n private _handleIncomingCall = async (info: IncomingCallInfo): Promise<void> => {\n if (this._call || this._connecting || this._pendingIncoming) return;\n this._pendingIncoming = true;\n\n try {\n const callerDisplay = info.callerName || info.callerNumber || 'Unknown Caller';\n // TODO(ringing-ux): the confirm dialog is a placeholder, not a real\n // ringing UI. Missing: caller avatar, audible ringtone, distinction\n // between \"ignore\" (let it keep ringing) and \"reject\" (decline now),\n // and a timeout. Replace with a dedicated `<sw-ui-incoming-call>`.\n const accepted = await showPrompt({\n title: 'Incoming Call',\n description: `${callerDisplay} is calling`,\n type: 'confirm',\n });\n\n if (accepted) {\n this._wireCall(info.call);\n info.call.answer();\n } else {\n info.call.reject();\n }\n } finally {\n this._pendingIncoming = false;\n }\n };\n\n // ── Call wiring ────────────────────────────────────────────────────\n\n private _wireCall(call: Call): void {\n this._call = call;\n\n // Wire contexts\n this._callState.connect(call);\n this._devices.connectCall(call);\n this._transcript.setCall(call);\n\n // Always subscribe to user_event for display_content and pass-through\n this._userEventCtrl.setCall(call);\n this.addEventListener('sw-display-content', this._onDisplayContent as EventListener);\n\n // Re-enumerate devices now that getUserMedia has granted permission\n this._devices.refreshDevices();\n\n // Track layout layers to know when MCU composites local camera\n this._subs.push(\n call.layoutLayers$.subscribe((layers) => {\n this._hasLayoutLayers = layers.length > 0;\n })\n );\n\n // Watch for call end\n this._subs.push(\n call.status$.subscribe((status) => {\n if (\n status === 'disconnected' ||\n status === 'destroyed' ||\n status === 'failed'\n ) {\n this._unwireCall();\n }\n })\n );\n }\n\n private _onDisplayContent = (e: CustomEvent<DisplayContentPayload>): void => {\n this._drawer = e.detail;\n this._transcript.injectEntry({\n id: crypto.randomUUID(),\n type: 'system',\n state: 'complete',\n text: e.detail.title ?? 'Agent shared content',\n meta: { displayContent: e.detail },\n });\n };\n\n private _onDrawerClose = (): void => {\n this._drawer = null;\n };\n\n private _unwireCall(): void {\n const endedCall = this._call;\n const endedStatus = endedCall?.status;\n\n this._callState.disconnect();\n this._devices.disconnectCall();\n this._transcript.setCall(undefined);\n this._userEventCtrl.setCall(undefined);\n this.removeEventListener('sw-display-content', this._onDisplayContent as EventListener);\n\n this._call = null;\n this._connecting = false;\n this._hasLayoutLayers = false;\n this._drawer = null;\n\n if (endedCall) {\n // Fires for any terminal transition — user hangup, remote disconnect,\n // or failure. Distinct from `sw-call-hangup` which only fires when the\n // user clicks the hangup button.\n this.dispatchEvent(new CustomEvent('sw-call-ended', {\n detail: { status: endedStatus },\n bubbles: true,\n composed: true,\n }));\n }\n }\n\n // ── Slot trigger ───────────────────────────────────────────────────\n\n private _onSlotChange(e: Event): void {\n const slot = e.target as HTMLSlotElement;\n slot.assignedElements({ flatten: true }).forEach((el) => {\n if (el instanceof HTMLElement) {\n el.addEventListener('click', () => this.dial());\n }\n });\n }\n\n // ── Event handlers ─────────────────────────────────────────────────\n\n private _onHangUp(): void {\n this.hangup();\n }\n\n private _onModalClose = (e: Event): void => {\n if (this._call || this._connecting) {\n // Active call → hang up. Modal will close automatically once the\n // call reaches a terminal state and `_unwireCall` clears `_call`.\n this.hangup();\n return;\n }\n if (!this.destination) {\n // Pre-call dialpad state — no destination entered yet. Keep the\n // modal open so the user doesn't lose their in-progress dialing.\n e.preventDefault();\n }\n };\n\n private _onFullscreenToggle(): void {\n const layout = this.shadowRoot?.querySelector('sw-ui-call-layout');\n if (layout) {\n (layout as import('../UI/layout/sw-ui-call-layout.js').SwUiCallLayout).toggleFullscreen();\n }\n }\n\n private _onTranscriptToggle(): void {\n this.transcription = !this.transcription;\n }\n\n // ── Render ─────────────────────────────────────────────────────────\n\n render() {\n const isActive = !!(this._call || this._connecting);\n const body = this._call\n ? renderCallView({\n transcription: this.transcription,\n hasLayoutLayers: this._hasLayoutLayers,\n drawer: this._drawer,\n transcriptEntries: this._transcript.state.entries,\n onHangUp: this._onHangUp,\n onFullscreenToggle: this._onFullscreenToggle,\n onTranscriptToggle: this._onTranscriptToggle,\n onDrawerClose: this._onDrawerClose,\n })\n : this._connecting\n ? renderConnecting()\n : nothing;\n\n if (this.modal) {\n return html`\n <slot @slotchange=${this._onSlotChange}></slot>\n <sw-ui-modal ?open=${isActive} @sw-modal-close=${this._onModalClose}>\n <sw-ui-responsive-container>\n ${body !== nothing ? body : nothing}\n </sw-ui-responsive-container>\n </sw-ui-modal>\n `;\n }\n\n if (body !== nothing) return body;\n\n return html`<slot @slotchange=${this._onSlotChange}></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sw-call-widget': SwCallWidget;\n }\n}\n"],"names":["logger","getLogger","SwCallWidget","LitElement","CallStateContextController","DevicesContextController","TranscriptController","UserEventController","IncomingCallController","info","callerDisplay","showPrompt","e","ensureSignalWireTheme","ensureSignalWireFonts","changed","s","SignalWire","buildCredentialProvider","message","wantsVideo","call","resolve","reject","sub","filter","c","first","userVariables","withWidgetCapabilities","parseUserVariablesAttribute","layers","status","endedCall","endedStatus","el","layout","_a","isActive","body","renderCallView","renderConnecting","nothing","html","widgetStyles","__decorateClass","property","state","customElement"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type TemplateResult } from 'lit';
|
|
2
|
+
import type { DisplayContentPayload } from '../UI/layout/sw-ui-content-drawer.js';
|
|
3
|
+
import type { TranscriptEntry } from '../../context/transcript-context.js';
|
|
4
|
+
export declare const widgetStyles: import("lit").CSSResult;
|
|
5
|
+
export interface CallViewOpts {
|
|
6
|
+
transcription: boolean;
|
|
7
|
+
hasLayoutLayers: boolean;
|
|
8
|
+
drawer: DisplayContentPayload | null;
|
|
9
|
+
transcriptEntries: TranscriptEntry[];
|
|
10
|
+
onHangUp: () => void;
|
|
11
|
+
onFullscreenToggle: () => void;
|
|
12
|
+
onTranscriptToggle: () => void;
|
|
13
|
+
onDrawerClose: () => void;
|
|
14
|
+
}
|
|
15
|
+
export declare function renderCallView(opts: CallViewOpts): TemplateResult;
|
|
16
|
+
export declare function renderConnecting(): TemplateResult;
|
|
17
|
+
//# sourceMappingURL=sw-call-widget.templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sw-call-widget.templates.d.ts","sourceRoot":"","sources":["../../../src/components/sw-call-widget/sw-call-widget.templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE3E,eAAO,MAAM,YAAY,yBAoBxB,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACrC,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,CA2CjE;AAED,wBAAgB,gBAAgB,IAAI,cAAc,CAQjD"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { nothing as o, html as a, css as s } from "lit";
|
|
2
|
+
const c = s`
|
|
3
|
+
:host {
|
|
4
|
+
display: block;
|
|
5
|
+
height: 100%;
|
|
6
|
+
font-family: var(--type-family-body);
|
|
7
|
+
|
|
8
|
+
--sw-control-bar-bg: #000;
|
|
9
|
+
--sw-control-bar-padding: 6px 12px;
|
|
10
|
+
--sw-control-bar-gap: 6px;
|
|
11
|
+
--sw-control-bar-radius: 0;
|
|
12
|
+
--sw-split-button-width: 56px;
|
|
13
|
+
--sw-split-button-height: 36px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.call-view-wrapper {
|
|
17
|
+
position: relative;
|
|
18
|
+
width: 100%;
|
|
19
|
+
height: 100%;
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
}
|
|
22
|
+
`;
|
|
23
|
+
function w(r) {
|
|
24
|
+
var l, t, e, n;
|
|
25
|
+
return a`
|
|
26
|
+
<div class="call-view-wrapper">
|
|
27
|
+
<sw-ui-call-layout
|
|
28
|
+
?transcript=${r.transcription}
|
|
29
|
+
shadow
|
|
30
|
+
style="--sw-call-layout-radius: 10px;"
|
|
31
|
+
>
|
|
32
|
+
<slot name="background" slot="background"></slot>
|
|
33
|
+
|
|
34
|
+
<sw-call-media slot="video"></sw-call-media>
|
|
35
|
+
|
|
36
|
+
${r.hasLayoutLayers ? o : a`<sw-local-camera slot="floating-video" mirror></sw-local-camera>`}
|
|
37
|
+
|
|
38
|
+
<sw-call-controls
|
|
39
|
+
slot="controls"
|
|
40
|
+
show-screen-share
|
|
41
|
+
show-hand-raise
|
|
42
|
+
show-transcript
|
|
43
|
+
.transcriptActive=${r.transcription}
|
|
44
|
+
@sw-call-hangup=${r.onHangUp}
|
|
45
|
+
@sw-fullscreen-toggle=${r.onFullscreenToggle}
|
|
46
|
+
@sw-transcript-toggle=${r.onTranscriptToggle}
|
|
47
|
+
></sw-call-controls>
|
|
48
|
+
|
|
49
|
+
<sw-ui-transcript-view
|
|
50
|
+
slot="transcript"
|
|
51
|
+
.entries=${r.transcriptEntries}
|
|
52
|
+
></sw-ui-transcript-view>
|
|
53
|
+
</sw-ui-call-layout>
|
|
54
|
+
|
|
55
|
+
<sw-ui-content-drawer
|
|
56
|
+
?open=${r.drawer !== null}
|
|
57
|
+
.title=${((l = r.drawer) == null ? void 0 : l.title) ?? ""}
|
|
58
|
+
.content=${((t = r.drawer) == null ? void 0 : t.content) ?? ""}
|
|
59
|
+
.format=${((e = r.drawer) == null ? void 0 : e.format) ?? "text"}
|
|
60
|
+
.language=${((n = r.drawer) == null ? void 0 : n.language) ?? ""}
|
|
61
|
+
@sw-content-drawer-close=${r.onDrawerClose}
|
|
62
|
+
></sw-ui-content-drawer>
|
|
63
|
+
</div>
|
|
64
|
+
`;
|
|
65
|
+
}
|
|
66
|
+
function d() {
|
|
67
|
+
return a`
|
|
68
|
+
<div class="call-view-wrapper">
|
|
69
|
+
<sw-ui-call-layout loading shadow style="--sw-call-layout-radius: 10px;">
|
|
70
|
+
<slot name="background" slot="background"></slot>
|
|
71
|
+
</sw-ui-call-layout>
|
|
72
|
+
</div>
|
|
73
|
+
`;
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
w as renderCallView,
|
|
77
|
+
d as renderConnecting,
|
|
78
|
+
c as widgetStyles
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=sw-call-widget.templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sw-call-widget.templates.js","sources":["../../../src/components/sw-call-widget/sw-call-widget.templates.ts"],"sourcesContent":["import { css, html, nothing, type TemplateResult } from 'lit';\nimport type { DisplayContentPayload } from '../UI/layout/sw-ui-content-drawer.js';\nimport type { TranscriptEntry } from '../../context/transcript-context.js';\n\nexport const widgetStyles = css`\n :host {\n display: block;\n height: 100%;\n font-family: var(--type-family-body);\n\n --sw-control-bar-bg: #000;\n --sw-control-bar-padding: 6px 12px;\n --sw-control-bar-gap: 6px;\n --sw-control-bar-radius: 0;\n --sw-split-button-width: 56px;\n --sw-split-button-height: 36px;\n }\n\n .call-view-wrapper {\n position: relative;\n width: 100%;\n height: 100%;\n overflow: hidden;\n }\n`;\n\nexport interface CallViewOpts {\n transcription: boolean;\n hasLayoutLayers: boolean;\n drawer: DisplayContentPayload | null;\n transcriptEntries: TranscriptEntry[];\n onHangUp: () => void;\n onFullscreenToggle: () => void;\n onTranscriptToggle: () => void;\n onDrawerClose: () => void;\n}\n\nexport function renderCallView(opts: CallViewOpts): TemplateResult {\n return html`\n <div class=\"call-view-wrapper\">\n <sw-ui-call-layout\n ?transcript=${opts.transcription}\n shadow\n style=\"--sw-call-layout-radius: 10px;\"\n >\n <slot name=\"background\" slot=\"background\"></slot>\n\n <sw-call-media slot=\"video\"></sw-call-media>\n\n ${!opts.hasLayoutLayers\n ? html`<sw-local-camera slot=\"floating-video\" mirror></sw-local-camera>`\n : nothing}\n\n <sw-call-controls\n slot=\"controls\"\n show-screen-share\n show-hand-raise\n show-transcript\n .transcriptActive=${opts.transcription}\n @sw-call-hangup=${opts.onHangUp}\n @sw-fullscreen-toggle=${opts.onFullscreenToggle}\n @sw-transcript-toggle=${opts.onTranscriptToggle}\n ></sw-call-controls>\n\n <sw-ui-transcript-view\n slot=\"transcript\"\n .entries=${opts.transcriptEntries}\n ></sw-ui-transcript-view>\n </sw-ui-call-layout>\n\n <sw-ui-content-drawer\n ?open=${opts.drawer !== null}\n .title=${opts.drawer?.title ?? ''}\n .content=${opts.drawer?.content ?? ''}\n .format=${opts.drawer?.format ?? 'text'}\n .language=${opts.drawer?.language ?? ''}\n @sw-content-drawer-close=${opts.onDrawerClose}\n ></sw-ui-content-drawer>\n </div>\n `;\n}\n\nexport function renderConnecting(): TemplateResult {\n return html`\n <div class=\"call-view-wrapper\">\n <sw-ui-call-layout loading shadow style=\"--sw-call-layout-radius: 10px;\">\n <slot name=\"background\" slot=\"background\"></slot>\n </sw-ui-call-layout>\n </div>\n `;\n}\n"],"names":["widgetStyles","css","renderCallView","opts","html","nothing","_a","_b","_c","_d","renderConnecting"],"mappings":";AAIO,MAAMA,IAAeC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCrB,SAASC,EAAeC,GAAoC;;AACjE,SAAOC;AAAA;AAAA;AAAA,sBAGaD,EAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQ7BA,EAAK,kBAEJE,IADAD,mEACO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAOWD,EAAK,aAAa;AAAA,4BACpBA,EAAK,QAAQ;AAAA,kCACPA,EAAK,kBAAkB;AAAA,kCACvBA,EAAK,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,qBAKpCA,EAAK,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,gBAK3BA,EAAK,WAAW,IAAI;AAAA,mBACnBG,IAAAH,EAAK,WAAL,gBAAAG,EAAa,UAAS,EAAE;AAAA,qBACtBC,IAAAJ,EAAK,WAAL,gBAAAI,EAAa,YAAW,EAAE;AAAA,oBAC3BC,IAAAL,EAAK,WAAL,gBAAAK,EAAa,WAAU,MAAM;AAAA,sBAC3BC,IAAAN,EAAK,WAAL,gBAAAM,EAAa,aAAY,EAAE;AAAA,mCACZN,EAAK,aAAa;AAAA;AAAA;AAAA;AAIrD;AAEO,SAASO,IAAmC;AACjD,SAAON;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOT;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
import './sw-call-widget/sw-call-widget.js';
|
|
3
|
+
import './UI/layout/sw-ui-background.js';
|
|
4
|
+
import './UI/icons/sw-ui-icon.js';
|
|
5
|
+
/**
|
|
6
|
+
* Click-to-call button that opens a full call widget.
|
|
7
|
+
*
|
|
8
|
+
* Thin wrapper around `sw-call-widget` in modal mode. Renders a styled
|
|
9
|
+
* call button; clicking it dials the preconfigured destination and opens
|
|
10
|
+
* the call UI in a modal overlay.
|
|
11
|
+
*
|
|
12
|
+
* @prop {string} token - SignalWire SAT or embed token
|
|
13
|
+
* @prop {string} host - Optional server host
|
|
14
|
+
* @prop {string} destination - Call destination (address or resource)
|
|
15
|
+
* @prop {string} label - Button text (default "Call")
|
|
16
|
+
* @prop {boolean} audioOnly - Audio-only mode (no video send/receive)
|
|
17
|
+
*
|
|
18
|
+
* @fires sw-dial - Fired when the call is initiated. Detail: `{ destination }`.
|
|
19
|
+
* @fires sw-call-ended - Fired when the call reaches a terminal state (any reason). Detail: `{ status }`.
|
|
20
|
+
* @fires sw-call-hangup - Fired when the user clicks the hangup button (does not fire on remote disconnect).
|
|
21
|
+
*
|
|
22
|
+
* Themed via the SignalWire DTCG tokens (`--interactive-status-success`,
|
|
23
|
+
* `--type-family-body`, `--type-size-body`, `--radius-md`, `--transition-fast`).
|
|
24
|
+
*/
|
|
25
|
+
export declare class SwClickToCall extends LitElement {
|
|
26
|
+
static styles: import("lit").CSSResult;
|
|
27
|
+
token: string;
|
|
28
|
+
host: string;
|
|
29
|
+
destination: string;
|
|
30
|
+
label: string;
|
|
31
|
+
audioOnly: boolean;
|
|
32
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
33
|
+
}
|
|
34
|
+
declare global {
|
|
35
|
+
interface HTMLElementTagNameMap {
|
|
36
|
+
'sw-click-to-call': SwClickToCall;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=sw-click-to-call.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sw-click-to-call.d.ts","sourceRoot":"","sources":["../../src/components/sw-click-to-call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C,OAAO,oCAAoC,CAAC;AAC5C,OAAO,iCAAiC,CAAC;AACzC,OAAO,0BAA0B,CAAC;AAElC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBACa,aAAc,SAAQ,UAAU;IAC3C,MAAM,CAAC,MAAM,0BAkCX;IAE0B,KAAK,SAAM;IACX,IAAI,SAAM;IACV,WAAW,SAAM;IACjB,KAAK,SAAU;IAC0B,SAAS,UAAS;IAEvF,MAAM;CAkBP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,aAAa,CAAC;KACnC;CACF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { LitElement as p, html as u, css as d } from "lit";
|
|
2
|
+
import { property as n, customElement as f } from "lit/decorators.js";
|
|
3
|
+
var y = Object.defineProperty, b = Object.getOwnPropertyDescriptor, o = (c, i, s, r) => {
|
|
4
|
+
for (var e = r > 1 ? void 0 : r ? b(i, s) : i, l = c.length - 1, a; l >= 0; l--)
|
|
5
|
+
(a = c[l]) && (e = (r ? a(i, s, e) : a(e)) || e);
|
|
6
|
+
return r && e && y(i, s, e), e;
|
|
7
|
+
};
|
|
8
|
+
let t = class extends p {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments), this.token = "", this.host = "", this.destination = "", this.label = "Call", this.audioOnly = !1;
|
|
11
|
+
}
|
|
12
|
+
render() {
|
|
13
|
+
return u`
|
|
14
|
+
<sw-call-widget
|
|
15
|
+
modal
|
|
16
|
+
transcription
|
|
17
|
+
?audio-only=${this.audioOnly}
|
|
18
|
+
.token=${this.token}
|
|
19
|
+
.host=${this.host}
|
|
20
|
+
.destination=${this.destination}
|
|
21
|
+
>
|
|
22
|
+
<sw-ui-background slot="background" default></sw-ui-background>
|
|
23
|
+
<button class="call-button" part="button">
|
|
24
|
+
<sw-ui-icon name="phone-call" size="20"></sw-ui-icon>
|
|
25
|
+
${this.label}
|
|
26
|
+
</button>
|
|
27
|
+
</sw-call-widget>
|
|
28
|
+
`;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
t.styles = d`
|
|
32
|
+
:host {
|
|
33
|
+
display: inline-block;
|
|
34
|
+
font-family: var(--type-family-body);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.call-button {
|
|
38
|
+
display: inline-flex;
|
|
39
|
+
align-items: center;
|
|
40
|
+
justify-content: center;
|
|
41
|
+
gap: 8px;
|
|
42
|
+
padding: 12px 20px;
|
|
43
|
+
background: var(--interactive-status-success);
|
|
44
|
+
color: #fff;
|
|
45
|
+
border: none;
|
|
46
|
+
border-radius: var(--radius-md);
|
|
47
|
+
font-family: inherit;
|
|
48
|
+
font-size: var(--type-size-body);
|
|
49
|
+
font-weight: 600;
|
|
50
|
+
cursor: pointer;
|
|
51
|
+
transition: filter var(--transition-fast), transform 0.1s ease;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.call-button:hover {
|
|
55
|
+
filter: brightness(0.9);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.call-button:active {
|
|
59
|
+
transform: scale(0.98);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.call-button sw-ui-icon {
|
|
63
|
+
pointer-events: none;
|
|
64
|
+
}
|
|
65
|
+
`;
|
|
66
|
+
o([
|
|
67
|
+
n({ type: String })
|
|
68
|
+
], t.prototype, "token", 2);
|
|
69
|
+
o([
|
|
70
|
+
n({ type: String })
|
|
71
|
+
], t.prototype, "host", 2);
|
|
72
|
+
o([
|
|
73
|
+
n({ type: String })
|
|
74
|
+
], t.prototype, "destination", 2);
|
|
75
|
+
o([
|
|
76
|
+
n({ type: String })
|
|
77
|
+
], t.prototype, "label", 2);
|
|
78
|
+
o([
|
|
79
|
+
n({ type: Boolean, reflect: !0, attribute: "audio-only" })
|
|
80
|
+
], t.prototype, "audioOnly", 2);
|
|
81
|
+
t = o([
|
|
82
|
+
f("sw-click-to-call")
|
|
83
|
+
], t);
|
|
84
|
+
export {
|
|
85
|
+
t as SwClickToCall
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=sw-click-to-call.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sw-click-to-call.js","sources":["../../src/components/sw-click-to-call.ts"],"sourcesContent":["import { LitElement, html, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport './sw-call-widget/sw-call-widget.js';\nimport './UI/layout/sw-ui-background.js';\nimport './UI/icons/sw-ui-icon.js';\n\n/**\n * Click-to-call button that opens a full call widget.\n *\n * Thin wrapper around `sw-call-widget` in modal mode. Renders a styled\n * call button; clicking it dials the preconfigured destination and opens\n * the call UI in a modal overlay.\n *\n * @prop {string} token - SignalWire SAT or embed token\n * @prop {string} host - Optional server host\n * @prop {string} destination - Call destination (address or resource)\n * @prop {string} label - Button text (default \"Call\")\n * @prop {boolean} audioOnly - Audio-only mode (no video send/receive)\n *\n * @fires sw-dial - Fired when the call is initiated. Detail: `{ destination }`.\n * @fires sw-call-ended - Fired when the call reaches a terminal state (any reason). Detail: `{ status }`.\n * @fires sw-call-hangup - Fired when the user clicks the hangup button (does not fire on remote disconnect).\n *\n * Themed via the SignalWire DTCG tokens (`--interactive-status-success`,\n * `--type-family-body`, `--type-size-body`, `--radius-md`, `--transition-fast`).\n */\n@customElement('sw-click-to-call')\nexport class SwClickToCall extends LitElement {\n static styles = css`\n :host {\n display: inline-block;\n font-family: var(--type-family-body);\n }\n\n .call-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px 20px;\n background: var(--interactive-status-success);\n color: #fff;\n border: none;\n border-radius: var(--radius-md);\n font-family: inherit;\n font-size: var(--type-size-body);\n font-weight: 600;\n cursor: pointer;\n transition: filter var(--transition-fast), transform 0.1s ease;\n }\n\n .call-button:hover {\n filter: brightness(0.9);\n }\n\n .call-button:active {\n transform: scale(0.98);\n }\n\n .call-button sw-ui-icon {\n pointer-events: none;\n }\n `;\n\n @property({ type: String }) token = '';\n @property({ type: String }) host = '';\n @property({ type: String }) destination = '';\n @property({ type: String }) label = 'Call';\n @property({ type: Boolean, reflect: true, attribute: 'audio-only' }) audioOnly = false;\n\n render() {\n return html`\n <sw-call-widget\n modal\n transcription\n ?audio-only=${this.audioOnly}\n .token=${this.token}\n .host=${this.host}\n .destination=${this.destination}\n >\n <sw-ui-background slot=\"background\" default></sw-ui-background>\n <button class=\"call-button\" part=\"button\">\n <sw-ui-icon name=\"phone-call\" size=\"20\"></sw-ui-icon>\n ${this.label}\n </button>\n </sw-call-widget>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sw-click-to-call': SwClickToCall;\n }\n}\n"],"names":["SwClickToCall","LitElement","html","css","__decorateClass","property","customElement"],"mappings":";;;;;;;AA2BO,IAAMA,IAAN,cAA4BC,EAAW;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA,GAqCuB,KAAA,QAAQ,IACR,KAAA,OAAO,IACP,KAAA,cAAc,IACd,KAAA,QAAQ,QACiC,KAAA,YAAY;AAAA,EAAA;AAAA,EAEjF,SAAS;AACP,WAAOC;AAAA;AAAA;AAAA;AAAA,sBAIW,KAAK,SAAS;AAAA,iBACnB,KAAK,KAAK;AAAA,gBACX,KAAK,IAAI;AAAA,uBACF,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,YAK3B,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA,EAIpB;AACF;AA7DaF,EACJ,SAASG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCYC,EAAA;AAAA,EAA3BC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GArCfL,EAqCiB,WAAA,SAAA,CAAA;AACAI,EAAA;AAAA,EAA3BC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAtCfL,EAsCiB,WAAA,QAAA,CAAA;AACAI,EAAA;AAAA,EAA3BC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAvCfL,EAuCiB,WAAA,eAAA,CAAA;AACAI,EAAA;AAAA,EAA3BC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAxCfL,EAwCiB,WAAA,SAAA,CAAA;AACyCI,EAAA;AAAA,EAApEC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM,WAAW,cAAc;AAAA,GAzCxDL,EAyC0D,WAAA,aAAA,CAAA;AAzC1DA,IAANI,EAAA;AAAA,EADNE,EAAc,kBAAkB;AAAA,GACpBN,CAAA;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/sw-device-selector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
import type { DeviceController } from '@signalwire/js';
|
|
3
|
+
import '../UI/icons/sw-ui-icon.js';
|
|
4
|
+
import '../sw-local-camera.js';
|
|
5
|
+
import '../sw-audio-level.js';
|
|
6
|
+
/**
|
|
7
|
+
* Single-button device settings popover. Opens a panel above the button
|
|
8
|
+
* with sections for Microphone, Camera, and Speaker selection.
|
|
9
|
+
*
|
|
10
|
+
* When `show-preview` is enabled, the open panel also renders a live
|
|
11
|
+
* camera preview, a microphone level meter for the currently selected
|
|
12
|
+
* input devices, and a "Test speaker" button that plays a short tone
|
|
13
|
+
* through the selected output.
|
|
14
|
+
*
|
|
15
|
+
* @fires sw-device-change - User picked a device. Detail: `{ type: 'microphone'|'camera'|'speaker', device: MediaDeviceInfo }`.
|
|
16
|
+
* @cssprop --ctrl-* - all primitive ctrl tokens
|
|
17
|
+
*/
|
|
18
|
+
export declare class SwDeviceSelector extends LitElement {
|
|
19
|
+
static styles: import("lit").CSSResult;
|
|
20
|
+
deviceController?: DeviceController;
|
|
21
|
+
/**
|
|
22
|
+
* Render inline previews (camera video, mic level, speaker test) inside
|
|
23
|
+
* each section while the panel is open. Streams are acquired only while
|
|
24
|
+
* the panel is open and stopped when it closes.
|
|
25
|
+
*/
|
|
26
|
+
showPreview: boolean;
|
|
27
|
+
private _videoStream;
|
|
28
|
+
private _audioStream;
|
|
29
|
+
private _testingSpeaker;
|
|
30
|
+
private _audioIn;
|
|
31
|
+
private _videoIn;
|
|
32
|
+
private _audioOut;
|
|
33
|
+
private _selAudioIn;
|
|
34
|
+
private _selVideoIn;
|
|
35
|
+
private _selAudioOut;
|
|
36
|
+
private _open;
|
|
37
|
+
private _subs;
|
|
38
|
+
private _onDocumentClick;
|
|
39
|
+
connectedCallback(): void;
|
|
40
|
+
protected updated(changed: Map<string, unknown>): void;
|
|
41
|
+
disconnectedCallback(): void;
|
|
42
|
+
protected willUpdate(changed: Map<string, unknown>): void;
|
|
43
|
+
private _subscribe;
|
|
44
|
+
private _unsubscribe;
|
|
45
|
+
private _toggle;
|
|
46
|
+
private _selectMic;
|
|
47
|
+
private _selectCamera;
|
|
48
|
+
private _selectSpeaker;
|
|
49
|
+
private _startVideoPreview;
|
|
50
|
+
private _stopVideoPreview;
|
|
51
|
+
private _startAudioPreview;
|
|
52
|
+
private _stopAudioPreview;
|
|
53
|
+
private static readonly _TEST_TONE_DATA_URI;
|
|
54
|
+
private _testAudio?;
|
|
55
|
+
private _testSpeaker;
|
|
56
|
+
private _stopTestTone;
|
|
57
|
+
private _emitChange;
|
|
58
|
+
private _renderSection;
|
|
59
|
+
private _renderCameraPreview;
|
|
60
|
+
private _renderMicPreview;
|
|
61
|
+
private _renderSpeakerPreview;
|
|
62
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
63
|
+
}
|
|
64
|
+
declare global {
|
|
65
|
+
interface HTMLElementTagNameMap {
|
|
66
|
+
'sw-device-selector': SwDeviceSelector;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=sw-device-selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sw-device-selector.d.ts","sourceRoot":"","sources":["../../../src/components/sw-device-selector/sw-device-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;AAGhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIvD,OAAO,2BAA2B,CAAC;AACnC,OAAO,uBAAuB,CAAC;AAC/B,OAAO,sBAAsB,CAAC;AAQ9B;;;;;;;;;;;GAWG;AACH,qBACa,gBAAiB,SAAQ,UAAU;IAC9C,MAAM,CAAC,MAAM,0BAAwB;IAET,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAEhE;;;;OAIG;IAEH,WAAW,UAAS;IAEX,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,KAAK,CAAS;IAE/B,OAAO,CAAC,KAAK,CAAsB;IAEnC,OAAO,CAAC,gBAAgB,CAEtB;IAEF,iBAAiB;IAMjB,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAQtD,oBAAoB;IASpB,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA+BzD,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;YASR,kBAAkB;IAYhC,OAAO,CAAC,iBAAiB;YAKX,kBAAkB;IAYhC,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CACwqC;IAEntC,OAAO,CAAC,UAAU,CAAC,CAAyB;YAE9B,YAAY;IA2B1B,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,qBAAqB;IAmB7B,MAAM;CA8BP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,gBAAgB,CAAC;KACxC;CACF"}
|