@signalwire/web-components 4.0.0-beta.11 → 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} +39 -7
- 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} +13 -21
- 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 +18 -12
- 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 +55 -26
- package/dist/theme.css +451 -0
- package/dist/theme.css.js +5 -0
- package/dist/theme.css.js.map +1 -0
- 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 -183
- 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 -118
- 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 -83
- package/dist/components/call-status.d.ts.map +0 -1
- package/dist/components/call-status.js +0 -255
- package/dist/components/call-status.js.map +0 -1
- package/dist/components/click-to-call.d.ts +0 -151
- 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 -238
- 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 -74
- 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 -21
- 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 -123
- 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 -120
- 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,114 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
import type { DropUpItem } from './sw-ui-dropup';
|
|
3
|
+
export interface MicToggleDetail {
|
|
4
|
+
muted: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface CameraToggleDetail {
|
|
7
|
+
muted: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface SpeakerToggleDetail {
|
|
10
|
+
muted: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface DeviceChangeDetail {
|
|
13
|
+
kind: 'mic' | 'camera' | 'speaker';
|
|
14
|
+
deviceId: string;
|
|
15
|
+
label: string;
|
|
16
|
+
}
|
|
17
|
+
export interface FullscreenToggleDetail {
|
|
18
|
+
fullscreen: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface ScreenShareToggleDetail {
|
|
21
|
+
active: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface HandRaiseToggleDetail {
|
|
24
|
+
raised: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface SettingsChangeDetail {
|
|
27
|
+
settingId: string;
|
|
28
|
+
}
|
|
29
|
+
export interface SwUiControlBarEventMap {
|
|
30
|
+
'sw-mic-toggle': CustomEvent<MicToggleDetail>;
|
|
31
|
+
'sw-camera-toggle': CustomEvent<CameraToggleDetail>;
|
|
32
|
+
'sw-speaker-toggle': CustomEvent<SpeakerToggleDetail>;
|
|
33
|
+
'sw-device-change': CustomEvent<DeviceChangeDetail>;
|
|
34
|
+
'sw-fullscreen-toggle': CustomEvent<FullscreenToggleDetail>;
|
|
35
|
+
'sw-screen-share-toggle': CustomEvent<ScreenShareToggleDetail>;
|
|
36
|
+
'sw-hand-raise-toggle': CustomEvent<HandRaiseToggleDetail>;
|
|
37
|
+
'sw-transcript-toggle': CustomEvent<void>;
|
|
38
|
+
'sw-settings-change': CustomEvent<SettingsChangeDetail>;
|
|
39
|
+
'sw-call-hangup': CustomEvent<void>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Call controls bar.
|
|
43
|
+
*
|
|
44
|
+
* Buttons rendered (left to right): mic, camera, speaker, screen share,
|
|
45
|
+
* hand raise, transcript, fullscreen, hang-up. Optional buttons are hidden
|
|
46
|
+
* when their `show*` property is false.
|
|
47
|
+
*
|
|
48
|
+
* @fires sw-mic-toggle - Mic toggled. Detail: `{ muted: boolean }`.
|
|
49
|
+
* @fires sw-camera-toggle - Camera toggled. Detail: `{ muted: boolean }`.
|
|
50
|
+
* @fires sw-speaker-toggle - Speaker toggled. Detail: `{ muted: boolean }`.
|
|
51
|
+
* @fires sw-device-change - Device picked from a chevron menu. Detail: `{ kind, deviceId, label }`.
|
|
52
|
+
* @fires sw-fullscreen-toggle - Fullscreen toggled. Detail: `{ fullscreen: boolean }`.
|
|
53
|
+
* @fires sw-screen-share-toggle - Screen share toggled. Detail: `{ active: boolean }`.
|
|
54
|
+
* @fires sw-hand-raise-toggle - Hand raise toggled. Detail: `{ raised: boolean }`.
|
|
55
|
+
* @fires sw-transcript-toggle - Transcript button clicked. No detail.
|
|
56
|
+
* @fires sw-settings-change - Settings menu item picked. Detail: `{ settingId: string }`.
|
|
57
|
+
* @fires sw-call-hangup - Hang-up button clicked. No detail.
|
|
58
|
+
*
|
|
59
|
+
* @cssprop --sw-control-bar-bg [transparent] - bar background
|
|
60
|
+
* @cssprop --sw-control-bar-padding [8px 16px] - bar padding
|
|
61
|
+
* @cssprop --sw-control-bar-gap [8px] - gap between buttons
|
|
62
|
+
* @cssprop --sw-control-bar-radius [0] - bar border-radius
|
|
63
|
+
*
|
|
64
|
+
* @cssprop --sw-split-button-size [44px] - button width & height
|
|
65
|
+
* @cssprop --sw-split-button-bg [rgba(255,255,255,0.12)] - button background
|
|
66
|
+
* @cssprop --sw-split-button-bg-hover [rgba(255,255,255,0.22)] - button hover bg
|
|
67
|
+
* @cssprop --sw-split-button-color [#fff] - icon colour
|
|
68
|
+
* @cssprop --sw-split-button-radius [9999px] - button border-radius
|
|
69
|
+
*
|
|
70
|
+
* @cssprop --sw-control-bar-hangup-bg - hang-up background (falls back to --interactive-button-destructive-bg)
|
|
71
|
+
* @cssprop --sw-control-bar-hangup-bg-hover - hang-up hover bg (falls back to --interactive-button-destructive-hover)
|
|
72
|
+
* @cssprop --sw-control-bar-hangup-color - hang-up icon colour (defaults to #fff)
|
|
73
|
+
*
|
|
74
|
+
* The active-toggle variant uses --interactive-button-primary-{bg,hover,text} from the design tokens.
|
|
75
|
+
*/
|
|
76
|
+
export declare class SwUiControlBar extends LitElement {
|
|
77
|
+
static styles: import("lit").CSSResult;
|
|
78
|
+
micMuted: boolean;
|
|
79
|
+
cameraMuted: boolean;
|
|
80
|
+
speakerMuted: boolean;
|
|
81
|
+
fullscreen: boolean;
|
|
82
|
+
screenSharing: boolean;
|
|
83
|
+
handRaised: boolean;
|
|
84
|
+
transcriptActive: boolean;
|
|
85
|
+
showScreenShare: boolean;
|
|
86
|
+
showHandRaise: boolean;
|
|
87
|
+
showTranscript: boolean;
|
|
88
|
+
showSettings: boolean;
|
|
89
|
+
showFullscreen: boolean;
|
|
90
|
+
micDevices: DropUpItem[];
|
|
91
|
+
cameraDevices: DropUpItem[];
|
|
92
|
+
speakerDevices: DropUpItem[];
|
|
93
|
+
settingsItems: DropUpItem[];
|
|
94
|
+
private _dispatch;
|
|
95
|
+
private _onMicToggle;
|
|
96
|
+
private _onCameraToggle;
|
|
97
|
+
private _onSpeakerToggle;
|
|
98
|
+
private _onDeviceSelect;
|
|
99
|
+
private _onFullscreenToggle;
|
|
100
|
+
private _onScreenShareToggle;
|
|
101
|
+
private _onHandRaiseToggle;
|
|
102
|
+
private _onTranscriptToggle;
|
|
103
|
+
private _onSettingsSelect;
|
|
104
|
+
private _onHangUp;
|
|
105
|
+
private _overflowItems;
|
|
106
|
+
private _onOverflowSelect;
|
|
107
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
108
|
+
}
|
|
109
|
+
declare global {
|
|
110
|
+
interface HTMLElementTagNameMap {
|
|
111
|
+
'sw-ui-control-bar': SwUiControlBar;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=sw-ui-control-bar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sw-ui-control-bar.d.ts","sourceRoot":"","sources":["../../../../src/components/UI/controls/sw-ui-control-bar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIjD,MAAM,WAAW,eAAe;IAAG,KAAK,EAAE,OAAO,CAAA;CAAE;AACnD,MAAM,WAAW,kBAAkB;IAAG,KAAK,EAAE,OAAO,CAAA;CAAE;AACtD,MAAM,WAAW,mBAAmB;IAAG,KAAK,EAAE,OAAO,CAAA;CAAE;AACvD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,sBAAsB;IAAG,UAAU,EAAE,OAAO,CAAA;CAAE;AAC/D,MAAM,WAAW,uBAAuB;IAAG,MAAM,EAAE,OAAO,CAAA;CAAE;AAC5D,MAAM,WAAW,qBAAqB;IAAG,MAAM,EAAE,OAAO,CAAA;CAAE;AAC1D,MAAM,WAAW,oBAAoB;IAAG,SAAS,EAAE,MAAM,CAAA;CAAE;AAI3D,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAC9C,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACpD,mBAAmB,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;IACtD,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACpD,sBAAsB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAC5D,wBAAwB,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAC/D,sBAAsB,EAAE,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAC3D,sBAAsB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1C,oBAAoB,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAC;IACxD,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;CACrC;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBACa,cAAe,SAAQ,UAAU;IAC5C,MAAM,CAAC,MAAM,0BA2EX;IAKF,QAAQ,UAAS;IAGjB,WAAW,UAAS;IAGpB,YAAY,UAAS;IAGrB,UAAU,UAAS;IAGnB,aAAa,UAAS;IAGtB,UAAU,UAAS;IAGnB,gBAAgB,UAAS;IAKzB,eAAe,UAAS;IAGxB,aAAa,UAAS;IAGtB,cAAc,UAAS;IAGvB,YAAY,UAAS;IAGrB,cAAc,UAAQ;IAKtB,UAAU,EAAE,UAAU,EAAE,CAAM;IAG9B,aAAa,EAAE,UAAU,EAAE,CAAM;IAGjC,cAAc,EAAE,UAAU,EAAE,CAAM;IAGlC,aAAa,EAAE,UAAU,EAAE,CAAM;IAIjC,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,iBAAiB;IAqBzB,MAAM;CAsHP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,cAAc,CAAC;KACrC;CACF"}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { LitElement as h, nothing as r, html as a, css as w } from "lit";
|
|
2
|
+
import { property as i, customElement as d } from "lit/decorators.js";
|
|
3
|
+
var g = Object.defineProperty, b = Object.getOwnPropertyDescriptor, s = (t, n, c, l) => {
|
|
4
|
+
for (var o = l > 1 ? void 0 : l ? b(n, c) : n, p = t.length - 1, u; p >= 0; p--)
|
|
5
|
+
(u = t[p]) && (o = (l ? u(n, c, o) : u(o)) || o);
|
|
6
|
+
return l && o && g(n, c, o), o;
|
|
7
|
+
};
|
|
8
|
+
let e = class extends h {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments), this.micMuted = !1, this.cameraMuted = !1, this.speakerMuted = !1, this.fullscreen = !1, this.screenSharing = !1, this.handRaised = !1, this.transcriptActive = !1, this.showScreenShare = !1, this.showHandRaise = !1, this.showTranscript = !1, this.showSettings = !1, this.showFullscreen = !0, this.micDevices = [], this.cameraDevices = [], this.speakerDevices = [], this.settingsItems = [];
|
|
11
|
+
}
|
|
12
|
+
// ── Dispatchers ───────────────────────────────────────────────────────────
|
|
13
|
+
_dispatch(t, n) {
|
|
14
|
+
this.dispatchEvent(new CustomEvent(t, { detail: n, bubbles: !0, composed: !0 }));
|
|
15
|
+
}
|
|
16
|
+
_onMicToggle() {
|
|
17
|
+
this.micMuted = !this.micMuted, this._dispatch("sw-mic-toggle", { muted: this.micMuted });
|
|
18
|
+
}
|
|
19
|
+
_onCameraToggle() {
|
|
20
|
+
this.cameraMuted = !this.cameraMuted, this._dispatch("sw-camera-toggle", { muted: this.cameraMuted });
|
|
21
|
+
}
|
|
22
|
+
_onSpeakerToggle() {
|
|
23
|
+
this.speakerMuted = !this.speakerMuted, this._dispatch("sw-speaker-toggle", { muted: this.speakerMuted });
|
|
24
|
+
}
|
|
25
|
+
_onDeviceSelect(t, n) {
|
|
26
|
+
this._dispatch("sw-device-change", { kind: t, deviceId: n.id, label: n.label });
|
|
27
|
+
}
|
|
28
|
+
_onFullscreenToggle() {
|
|
29
|
+
this.fullscreen = !this.fullscreen, this._dispatch("sw-fullscreen-toggle", { fullscreen: this.fullscreen });
|
|
30
|
+
}
|
|
31
|
+
_onScreenShareToggle() {
|
|
32
|
+
this.screenSharing = !this.screenSharing, this._dispatch("sw-screen-share-toggle", { active: this.screenSharing });
|
|
33
|
+
}
|
|
34
|
+
_onHandRaiseToggle() {
|
|
35
|
+
this.handRaised = !this.handRaised, this._dispatch("sw-hand-raise-toggle", { raised: this.handRaised });
|
|
36
|
+
}
|
|
37
|
+
_onTranscriptToggle() {
|
|
38
|
+
this.transcriptActive = !this.transcriptActive, this._dispatch("sw-transcript-toggle", void 0);
|
|
39
|
+
}
|
|
40
|
+
_onSettingsSelect(t) {
|
|
41
|
+
this._dispatch("sw-settings-change", { settingId: t.detail.id });
|
|
42
|
+
}
|
|
43
|
+
_onHangUp() {
|
|
44
|
+
this._dispatch("sw-call-hangup", void 0);
|
|
45
|
+
}
|
|
46
|
+
_overflowItems() {
|
|
47
|
+
const t = [];
|
|
48
|
+
return this.showScreenShare && t.push({
|
|
49
|
+
id: "__overflow:screen-share",
|
|
50
|
+
label: this.screenSharing ? "Stop sharing" : "Share screen",
|
|
51
|
+
selected: this.screenSharing
|
|
52
|
+
}), this.showHandRaise && t.push({
|
|
53
|
+
id: "__overflow:hand-raise",
|
|
54
|
+
label: this.handRaised ? "Lower hand" : "Raise hand",
|
|
55
|
+
selected: this.handRaised
|
|
56
|
+
}), this.showTranscript && t.push({
|
|
57
|
+
id: "__overflow:transcript",
|
|
58
|
+
label: "Transcript",
|
|
59
|
+
selected: this.transcriptActive
|
|
60
|
+
}), this.showSettings && t.push(...this.settingsItems), this.showFullscreen && t.push({
|
|
61
|
+
id: "__overflow:fullscreen",
|
|
62
|
+
label: this.fullscreen ? "Exit fullscreen" : "Fullscreen",
|
|
63
|
+
selected: this.fullscreen
|
|
64
|
+
}), t;
|
|
65
|
+
}
|
|
66
|
+
_onOverflowSelect(t) {
|
|
67
|
+
switch (t.detail.id) {
|
|
68
|
+
case "__overflow:screen-share":
|
|
69
|
+
this._onScreenShareToggle();
|
|
70
|
+
return;
|
|
71
|
+
case "__overflow:hand-raise":
|
|
72
|
+
this._onHandRaiseToggle();
|
|
73
|
+
return;
|
|
74
|
+
case "__overflow:transcript":
|
|
75
|
+
this._onTranscriptToggle();
|
|
76
|
+
return;
|
|
77
|
+
case "__overflow:fullscreen":
|
|
78
|
+
this._onFullscreenToggle();
|
|
79
|
+
return;
|
|
80
|
+
default:
|
|
81
|
+
this._dispatch("sw-settings-change", { settingId: t.detail.id });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// ── Render ────────────────────────────────────────────────────────────────
|
|
85
|
+
render() {
|
|
86
|
+
return a`
|
|
87
|
+
<div class="bar" part="bar">
|
|
88
|
+
<!-- SignalWire logo -->
|
|
89
|
+
<span class="sw-logo" part="logo" aria-hidden="true">
|
|
90
|
+
<sw-ui-icon name="sw-logo" size="20"></sw-ui-icon>
|
|
91
|
+
</span>
|
|
92
|
+
|
|
93
|
+
<!-- Mic -->
|
|
94
|
+
<sw-ui-split-button
|
|
95
|
+
.active=${!this.micMuted}
|
|
96
|
+
.items=${this.micDevices}
|
|
97
|
+
@sw-split-button-toggle=${this._onMicToggle}
|
|
98
|
+
@sw-dropup-select=${(t) => this._onDeviceSelect("mic", t.detail)}
|
|
99
|
+
>
|
|
100
|
+
<sw-ui-icon slot="active" name="mic-on"></sw-ui-icon>
|
|
101
|
+
<sw-ui-icon slot="inactive" name="mic-off"></sw-ui-icon>
|
|
102
|
+
</sw-ui-split-button>
|
|
103
|
+
|
|
104
|
+
<!-- Camera -->
|
|
105
|
+
<sw-ui-split-button
|
|
106
|
+
.active=${!this.cameraMuted}
|
|
107
|
+
.items=${this.cameraDevices}
|
|
108
|
+
@sw-split-button-toggle=${this._onCameraToggle}
|
|
109
|
+
@sw-dropup-select=${(t) => this._onDeviceSelect("camera", t.detail)}
|
|
110
|
+
>
|
|
111
|
+
<sw-ui-icon slot="active" name="camera-on"></sw-ui-icon>
|
|
112
|
+
<sw-ui-icon slot="inactive" name="camera-off"></sw-ui-icon>
|
|
113
|
+
</sw-ui-split-button>
|
|
114
|
+
|
|
115
|
+
<!-- Speaker -->
|
|
116
|
+
<sw-ui-split-button
|
|
117
|
+
.active=${!this.speakerMuted}
|
|
118
|
+
.items=${this.speakerDevices}
|
|
119
|
+
@sw-split-button-toggle=${this._onSpeakerToggle}
|
|
120
|
+
@sw-dropup-select=${(t) => this._onDeviceSelect("speaker", t.detail)}
|
|
121
|
+
>
|
|
122
|
+
<sw-ui-icon slot="active" name="speaker-on"></sw-ui-icon>
|
|
123
|
+
<sw-ui-icon slot="inactive" name="speaker-off"></sw-ui-icon>
|
|
124
|
+
</sw-ui-split-button>
|
|
125
|
+
|
|
126
|
+
<!-- Screen share (optional) -->
|
|
127
|
+
${this.showScreenShare ? a`
|
|
128
|
+
<sw-ui-split-button
|
|
129
|
+
class="optional ${this.screenSharing ? "active-toggle" : ""}"
|
|
130
|
+
@sw-split-button-click=${this._onScreenShareToggle}
|
|
131
|
+
>
|
|
132
|
+
<sw-ui-icon name=${this.screenSharing ? "screen-share-off" : "screen-share"}></sw-ui-icon>
|
|
133
|
+
</sw-ui-split-button>
|
|
134
|
+
` : r}
|
|
135
|
+
|
|
136
|
+
<!-- Hand raise (optional) -->
|
|
137
|
+
${this.showHandRaise ? a`
|
|
138
|
+
<sw-ui-split-button
|
|
139
|
+
class="optional ${this.handRaised ? "active-toggle" : ""}"
|
|
140
|
+
@sw-split-button-click=${this._onHandRaiseToggle}
|
|
141
|
+
>
|
|
142
|
+
<sw-ui-icon name="hand-raise"></sw-ui-icon>
|
|
143
|
+
</sw-ui-split-button>
|
|
144
|
+
` : r}
|
|
145
|
+
|
|
146
|
+
<!-- Transcript (optional) -->
|
|
147
|
+
${this.showTranscript ? a`
|
|
148
|
+
<sw-ui-split-button
|
|
149
|
+
class="optional ${this.transcriptActive ? "active-toggle" : ""}"
|
|
150
|
+
@sw-split-button-click=${this._onTranscriptToggle}
|
|
151
|
+
>
|
|
152
|
+
<sw-ui-icon name="transcript"></sw-ui-icon>
|
|
153
|
+
</sw-ui-split-button>
|
|
154
|
+
` : r}
|
|
155
|
+
|
|
156
|
+
<!-- Settings (optional) -->
|
|
157
|
+
${this.showSettings ? a`
|
|
158
|
+
<sw-ui-split-button
|
|
159
|
+
class="optional"
|
|
160
|
+
.items=${this.settingsItems}
|
|
161
|
+
@sw-dropup-select=${this._onSettingsSelect}
|
|
162
|
+
>
|
|
163
|
+
<sw-ui-icon name="settings"></sw-ui-icon>
|
|
164
|
+
</sw-ui-split-button>
|
|
165
|
+
` : r}
|
|
166
|
+
|
|
167
|
+
<!-- Fullscreen (optional) -->
|
|
168
|
+
${this.showFullscreen ? a`
|
|
169
|
+
<sw-ui-split-button class="optional" @sw-split-button-click=${this._onFullscreenToggle}>
|
|
170
|
+
<sw-ui-icon name=${this.fullscreen ? "fullscreen-exit" : "fullscreen"}></sw-ui-icon>
|
|
171
|
+
</sw-ui-split-button>
|
|
172
|
+
` : r}
|
|
173
|
+
|
|
174
|
+
<!-- Overflow menu (shown on narrow containers) -->
|
|
175
|
+
<sw-ui-split-button
|
|
176
|
+
class="overflow"
|
|
177
|
+
.items=${this._overflowItems()}
|
|
178
|
+
@sw-dropup-select=${this._onOverflowSelect}
|
|
179
|
+
>
|
|
180
|
+
<sw-ui-icon name="settings"></sw-ui-icon>
|
|
181
|
+
</sw-ui-split-button>
|
|
182
|
+
|
|
183
|
+
<!-- Hang up -->
|
|
184
|
+
<sw-ui-split-button class="hangup" @sw-split-button-click=${this._onHangUp}>
|
|
185
|
+
<sw-ui-icon name="phone-end"></sw-ui-icon>
|
|
186
|
+
</sw-ui-split-button>
|
|
187
|
+
|
|
188
|
+
<!-- Spacer to balance the logo and keep buttons centered -->
|
|
189
|
+
<span class="bar-spacer" aria-hidden="true"></span>
|
|
190
|
+
</div>
|
|
191
|
+
`;
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
e.styles = w`
|
|
195
|
+
:host {
|
|
196
|
+
display: block;
|
|
197
|
+
background: var(--sw-control-bar-bg, transparent);
|
|
198
|
+
border-radius: var(--sw-control-bar-radius, 0);
|
|
199
|
+
container-type: inline-size;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.bar {
|
|
203
|
+
display: flex;
|
|
204
|
+
align-items: center;
|
|
205
|
+
justify-content: center;
|
|
206
|
+
gap: var(--sw-control-bar-gap, 8px);
|
|
207
|
+
padding: var(--sw-control-bar-padding, 8px 16px);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.sw-logo {
|
|
211
|
+
display: inline-flex;
|
|
212
|
+
align-items: center;
|
|
213
|
+
color: var(--fg-default);
|
|
214
|
+
opacity: 0.5;
|
|
215
|
+
flex-shrink: 0;
|
|
216
|
+
pointer-events: none;
|
|
217
|
+
margin-right: auto;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.bar-spacer {
|
|
221
|
+
margin-left: auto;
|
|
222
|
+
width: 20px;
|
|
223
|
+
flex-shrink: 0;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.hangup {
|
|
227
|
+
--sw-split-button-bg: var(--sw-control-bar-hangup-bg, var(--interactive-button-destructive-bg));
|
|
228
|
+
--sw-split-button-bg-hover: var(--sw-control-bar-hangup-bg-hover, var(--interactive-button-destructive-hover));
|
|
229
|
+
--sw-split-button-color: var(--sw-control-bar-hangup-color, #fff);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.active-toggle {
|
|
233
|
+
--sw-split-button-bg: var(--interactive-button-primary-bg);
|
|
234
|
+
--sw-split-button-bg-hover: var(--interactive-button-primary-hover);
|
|
235
|
+
--sw-split-button-color: var(--interactive-button-primary-text);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/* Overflow menu hidden by default (wide containers) */
|
|
239
|
+
sw-ui-split-button.overflow { display: none; }
|
|
240
|
+
|
|
241
|
+
/* Collapse optional/secondary buttons into an overflow menu on narrow containers */
|
|
242
|
+
@container (max-width: 720px) {
|
|
243
|
+
sw-ui-split-button.optional { display: none !important; }
|
|
244
|
+
sw-ui-split-button.overflow { display: inline-flex; }
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/* Shrink buttons on very narrow containers */
|
|
248
|
+
@container (max-width: 540px) {
|
|
249
|
+
.bar {
|
|
250
|
+
--sw-split-button-size: 34px;
|
|
251
|
+
--sw-split-button-width: 42px;
|
|
252
|
+
--sw-split-button-height: 28px;
|
|
253
|
+
gap: 4px;
|
|
254
|
+
padding: 4px 8px;
|
|
255
|
+
}
|
|
256
|
+
.sw-logo, .bar-spacer { display: none; }
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/* Further shrink for very small phones to prevent clipping */
|
|
260
|
+
@container (max-width: 360px) {
|
|
261
|
+
.bar {
|
|
262
|
+
--sw-split-button-size: 28px;
|
|
263
|
+
--sw-split-button-width: 34px;
|
|
264
|
+
--sw-split-button-height: 24px;
|
|
265
|
+
gap: 2px;
|
|
266
|
+
padding: 2px 4px;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
`;
|
|
270
|
+
s([
|
|
271
|
+
i({ type: Boolean, reflect: !0, attribute: "mic-muted" })
|
|
272
|
+
], e.prototype, "micMuted", 2);
|
|
273
|
+
s([
|
|
274
|
+
i({ type: Boolean, reflect: !0, attribute: "camera-muted" })
|
|
275
|
+
], e.prototype, "cameraMuted", 2);
|
|
276
|
+
s([
|
|
277
|
+
i({ type: Boolean, reflect: !0, attribute: "speaker-muted" })
|
|
278
|
+
], e.prototype, "speakerMuted", 2);
|
|
279
|
+
s([
|
|
280
|
+
i({ type: Boolean, reflect: !0 })
|
|
281
|
+
], e.prototype, "fullscreen", 2);
|
|
282
|
+
s([
|
|
283
|
+
i({ type: Boolean, reflect: !0, attribute: "screen-sharing" })
|
|
284
|
+
], e.prototype, "screenSharing", 2);
|
|
285
|
+
s([
|
|
286
|
+
i({ type: Boolean, reflect: !0, attribute: "hand-raised" })
|
|
287
|
+
], e.prototype, "handRaised", 2);
|
|
288
|
+
s([
|
|
289
|
+
i({ type: Boolean, reflect: !0, attribute: "transcript-active" })
|
|
290
|
+
], e.prototype, "transcriptActive", 2);
|
|
291
|
+
s([
|
|
292
|
+
i({ type: Boolean, reflect: !0, attribute: "show-screen-share" })
|
|
293
|
+
], e.prototype, "showScreenShare", 2);
|
|
294
|
+
s([
|
|
295
|
+
i({ type: Boolean, reflect: !0, attribute: "show-hand-raise" })
|
|
296
|
+
], e.prototype, "showHandRaise", 2);
|
|
297
|
+
s([
|
|
298
|
+
i({ type: Boolean, reflect: !0, attribute: "show-transcript" })
|
|
299
|
+
], e.prototype, "showTranscript", 2);
|
|
300
|
+
s([
|
|
301
|
+
i({ type: Boolean, reflect: !0, attribute: "show-settings" })
|
|
302
|
+
], e.prototype, "showSettings", 2);
|
|
303
|
+
s([
|
|
304
|
+
i({ type: Boolean, reflect: !0, attribute: "show-fullscreen" })
|
|
305
|
+
], e.prototype, "showFullscreen", 2);
|
|
306
|
+
s([
|
|
307
|
+
i({ attribute: !1 })
|
|
308
|
+
], e.prototype, "micDevices", 2);
|
|
309
|
+
s([
|
|
310
|
+
i({ attribute: !1 })
|
|
311
|
+
], e.prototype, "cameraDevices", 2);
|
|
312
|
+
s([
|
|
313
|
+
i({ attribute: !1 })
|
|
314
|
+
], e.prototype, "speakerDevices", 2);
|
|
315
|
+
s([
|
|
316
|
+
i({ attribute: !1 })
|
|
317
|
+
], e.prototype, "settingsItems", 2);
|
|
318
|
+
e = s([
|
|
319
|
+
d("sw-ui-control-bar")
|
|
320
|
+
], e);
|
|
321
|
+
export {
|
|
322
|
+
e as SwUiControlBar
|
|
323
|
+
};
|
|
324
|
+
//# sourceMappingURL=sw-ui-control-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sw-ui-control-bar.js","sources":["../../../../src/components/UI/controls/sw-ui-control-bar.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport type { DropUpItem } from './sw-ui-dropup';\n\n// ── Event detail types ────────────────────────────────────────────────────────\n\nexport interface MicToggleDetail { muted: boolean }\nexport interface CameraToggleDetail { muted: boolean }\nexport interface SpeakerToggleDetail { muted: boolean }\nexport interface DeviceChangeDetail {\n kind: 'mic' | 'camera' | 'speaker';\n deviceId: string;\n label: string;\n}\nexport interface FullscreenToggleDetail { fullscreen: boolean }\nexport interface ScreenShareToggleDetail { active: boolean }\nexport interface HandRaiseToggleDetail { raised: boolean }\nexport interface SettingsChangeDetail { settingId: string }\n\n// ── Event map ─────────────────────────────────────────────────────────────────\n\nexport interface SwUiControlBarEventMap {\n 'sw-mic-toggle': CustomEvent<MicToggleDetail>;\n 'sw-camera-toggle': CustomEvent<CameraToggleDetail>;\n 'sw-speaker-toggle': CustomEvent<SpeakerToggleDetail>;\n 'sw-device-change': CustomEvent<DeviceChangeDetail>;\n 'sw-fullscreen-toggle': CustomEvent<FullscreenToggleDetail>;\n 'sw-screen-share-toggle': CustomEvent<ScreenShareToggleDetail>;\n 'sw-hand-raise-toggle': CustomEvent<HandRaiseToggleDetail>;\n 'sw-transcript-toggle': CustomEvent<void>;\n 'sw-settings-change': CustomEvent<SettingsChangeDetail>;\n 'sw-call-hangup': CustomEvent<void>;\n}\n\n// ── Component ─────────────────────────────────────────────────────────────────\n\n/**\n * Call controls bar.\n *\n * Buttons rendered (left to right): mic, camera, speaker, screen share,\n * hand raise, transcript, fullscreen, hang-up. Optional buttons are hidden\n * when their `show*` property is false.\n *\n * @fires sw-mic-toggle - Mic toggled. Detail: `{ muted: boolean }`.\n * @fires sw-camera-toggle - Camera toggled. Detail: `{ muted: boolean }`.\n * @fires sw-speaker-toggle - Speaker toggled. Detail: `{ muted: boolean }`.\n * @fires sw-device-change - Device picked from a chevron menu. Detail: `{ kind, deviceId, label }`.\n * @fires sw-fullscreen-toggle - Fullscreen toggled. Detail: `{ fullscreen: boolean }`.\n * @fires sw-screen-share-toggle - Screen share toggled. Detail: `{ active: boolean }`.\n * @fires sw-hand-raise-toggle - Hand raise toggled. Detail: `{ raised: boolean }`.\n * @fires sw-transcript-toggle - Transcript button clicked. No detail.\n * @fires sw-settings-change - Settings menu item picked. Detail: `{ settingId: string }`.\n * @fires sw-call-hangup - Hang-up button clicked. No detail.\n *\n * @cssprop --sw-control-bar-bg [transparent] - bar background\n * @cssprop --sw-control-bar-padding [8px 16px] - bar padding\n * @cssprop --sw-control-bar-gap [8px] - gap between buttons\n * @cssprop --sw-control-bar-radius [0] - bar border-radius\n *\n * @cssprop --sw-split-button-size [44px] - button width & height\n * @cssprop --sw-split-button-bg [rgba(255,255,255,0.12)] - button background\n * @cssprop --sw-split-button-bg-hover [rgba(255,255,255,0.22)] - button hover bg\n * @cssprop --sw-split-button-color [#fff] - icon colour\n * @cssprop --sw-split-button-radius [9999px] - button border-radius\n *\n * @cssprop --sw-control-bar-hangup-bg - hang-up background (falls back to --interactive-button-destructive-bg)\n * @cssprop --sw-control-bar-hangup-bg-hover - hang-up hover bg (falls back to --interactive-button-destructive-hover)\n * @cssprop --sw-control-bar-hangup-color - hang-up icon colour (defaults to #fff)\n *\n * The active-toggle variant uses --interactive-button-primary-{bg,hover,text} from the design tokens.\n */\n@customElement('sw-ui-control-bar')\nexport class SwUiControlBar extends LitElement {\n static styles = css`\n :host {\n display: block;\n background: var(--sw-control-bar-bg, transparent);\n border-radius: var(--sw-control-bar-radius, 0);\n container-type: inline-size;\n }\n\n .bar {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--sw-control-bar-gap, 8px);\n padding: var(--sw-control-bar-padding, 8px 16px);\n }\n\n .sw-logo {\n display: inline-flex;\n align-items: center;\n color: var(--fg-default);\n opacity: 0.5;\n flex-shrink: 0;\n pointer-events: none;\n margin-right: auto;\n }\n\n .bar-spacer {\n margin-left: auto;\n width: 20px;\n flex-shrink: 0;\n }\n\n .hangup {\n --sw-split-button-bg: var(--sw-control-bar-hangup-bg, var(--interactive-button-destructive-bg));\n --sw-split-button-bg-hover: var(--sw-control-bar-hangup-bg-hover, var(--interactive-button-destructive-hover));\n --sw-split-button-color: var(--sw-control-bar-hangup-color, #fff);\n }\n\n .active-toggle {\n --sw-split-button-bg: var(--interactive-button-primary-bg);\n --sw-split-button-bg-hover: var(--interactive-button-primary-hover);\n --sw-split-button-color: var(--interactive-button-primary-text);\n }\n\n /* Overflow menu hidden by default (wide containers) */\n sw-ui-split-button.overflow { display: none; }\n\n /* Collapse optional/secondary buttons into an overflow menu on narrow containers */\n @container (max-width: 720px) {\n sw-ui-split-button.optional { display: none !important; }\n sw-ui-split-button.overflow { display: inline-flex; }\n }\n\n /* Shrink buttons on very narrow containers */\n @container (max-width: 540px) {\n .bar {\n --sw-split-button-size: 34px;\n --sw-split-button-width: 42px;\n --sw-split-button-height: 28px;\n gap: 4px;\n padding: 4px 8px;\n }\n .sw-logo, .bar-spacer { display: none; }\n }\n\n /* Further shrink for very small phones to prevent clipping */\n @container (max-width: 360px) {\n .bar {\n --sw-split-button-size: 28px;\n --sw-split-button-width: 34px;\n --sw-split-button-height: 24px;\n gap: 2px;\n padding: 2px 4px;\n }\n }\n `;\n\n // ── Media toggle state ─────────────────────────────────────────────\n\n @property({ type: Boolean, reflect: true, attribute: 'mic-muted' })\n micMuted = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'camera-muted' })\n cameraMuted = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'speaker-muted' })\n speakerMuted = false;\n\n @property({ type: Boolean, reflect: true })\n fullscreen = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'screen-sharing' })\n screenSharing = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'hand-raised' })\n handRaised = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'transcript-active' })\n transcriptActive = false;\n\n // ── Visibility flags ───────────────────────────────────────────────\n\n @property({ type: Boolean, reflect: true, attribute: 'show-screen-share' })\n showScreenShare = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'show-hand-raise' })\n showHandRaise = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'show-transcript' })\n showTranscript = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'show-settings' })\n showSettings = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'show-fullscreen' })\n showFullscreen = true;\n\n // ── Device lists ───────────────────────────────────────────────────\n\n @property({ attribute: false })\n micDevices: DropUpItem[] = [];\n\n @property({ attribute: false })\n cameraDevices: DropUpItem[] = [];\n\n @property({ attribute: false })\n speakerDevices: DropUpItem[] = [];\n\n @property({ attribute: false })\n settingsItems: DropUpItem[] = [];\n\n // ── Dispatchers ───────────────────────────────────────────────────────────\n\n private _dispatch<K extends keyof SwUiControlBarEventMap>(\n type: K,\n detail: SwUiControlBarEventMap[K] extends CustomEvent<infer D> ? D : never\n ) {\n this.dispatchEvent(new CustomEvent(type, { detail, bubbles: true, composed: true }));\n }\n\n private _onMicToggle() {\n this.micMuted = !this.micMuted;\n this._dispatch('sw-mic-toggle', { muted: this.micMuted });\n }\n\n private _onCameraToggle() {\n this.cameraMuted = !this.cameraMuted;\n this._dispatch('sw-camera-toggle', { muted: this.cameraMuted });\n }\n\n private _onSpeakerToggle() {\n this.speakerMuted = !this.speakerMuted;\n this._dispatch('sw-speaker-toggle', { muted: this.speakerMuted });\n }\n\n private _onDeviceSelect(kind: 'mic' | 'camera' | 'speaker', item: DropUpItem) {\n this._dispatch('sw-device-change', { kind, deviceId: item.id, label: item.label });\n }\n\n private _onFullscreenToggle() {\n this.fullscreen = !this.fullscreen;\n this._dispatch('sw-fullscreen-toggle', { fullscreen: this.fullscreen });\n }\n\n private _onScreenShareToggle() {\n this.screenSharing = !this.screenSharing;\n this._dispatch('sw-screen-share-toggle', { active: this.screenSharing });\n }\n\n private _onHandRaiseToggle() {\n this.handRaised = !this.handRaised;\n this._dispatch('sw-hand-raise-toggle', { raised: this.handRaised });\n }\n\n private _onTranscriptToggle() {\n this.transcriptActive = !this.transcriptActive;\n this._dispatch('sw-transcript-toggle', undefined as never);\n }\n\n private _onSettingsSelect(e: CustomEvent<DropUpItem>) {\n this._dispatch('sw-settings-change', { settingId: e.detail.id });\n }\n\n private _onHangUp() {\n this._dispatch('sw-call-hangup', undefined as never);\n }\n\n private _overflowItems(): DropUpItem[] {\n const items: DropUpItem[] = [];\n if (this.showScreenShare) {\n items.push({\n id: '__overflow:screen-share',\n label: this.screenSharing ? 'Stop sharing' : 'Share screen',\n selected: this.screenSharing,\n });\n }\n if (this.showHandRaise) {\n items.push({\n id: '__overflow:hand-raise',\n label: this.handRaised ? 'Lower hand' : 'Raise hand',\n selected: this.handRaised,\n });\n }\n if (this.showTranscript) {\n items.push({\n id: '__overflow:transcript',\n label: 'Transcript',\n selected: this.transcriptActive,\n });\n }\n if (this.showSettings) {\n items.push(...this.settingsItems);\n }\n if (this.showFullscreen) {\n items.push({\n id: '__overflow:fullscreen',\n label: this.fullscreen ? 'Exit fullscreen' : 'Fullscreen',\n selected: this.fullscreen,\n });\n }\n return items;\n }\n\n private _onOverflowSelect(e: CustomEvent<DropUpItem>) {\n switch (e.detail.id) {\n case '__overflow:screen-share':\n this._onScreenShareToggle();\n return;\n case '__overflow:hand-raise':\n this._onHandRaiseToggle();\n return;\n case '__overflow:transcript':\n this._onTranscriptToggle();\n return;\n case '__overflow:fullscreen':\n this._onFullscreenToggle();\n return;\n default:\n this._dispatch('sw-settings-change', { settingId: e.detail.id });\n }\n }\n\n // ── Render ────────────────────────────────────────────────────────────────\n\n render() {\n return html`\n <div class=\"bar\" part=\"bar\">\n <!-- SignalWire logo -->\n <span class=\"sw-logo\" part=\"logo\" aria-hidden=\"true\">\n <sw-ui-icon name=\"sw-logo\" size=\"20\"></sw-ui-icon>\n </span>\n\n <!-- Mic -->\n <sw-ui-split-button\n .active=${!this.micMuted}\n .items=${this.micDevices}\n @sw-split-button-toggle=${this._onMicToggle}\n @sw-dropup-select=${(e: CustomEvent<DropUpItem>) => this._onDeviceSelect('mic', e.detail)}\n >\n <sw-ui-icon slot=\"active\" name=\"mic-on\"></sw-ui-icon>\n <sw-ui-icon slot=\"inactive\" name=\"mic-off\"></sw-ui-icon>\n </sw-ui-split-button>\n\n <!-- Camera -->\n <sw-ui-split-button\n .active=${!this.cameraMuted}\n .items=${this.cameraDevices}\n @sw-split-button-toggle=${this._onCameraToggle}\n @sw-dropup-select=${(e: CustomEvent<DropUpItem>) => this._onDeviceSelect('camera', e.detail)}\n >\n <sw-ui-icon slot=\"active\" name=\"camera-on\"></sw-ui-icon>\n <sw-ui-icon slot=\"inactive\" name=\"camera-off\"></sw-ui-icon>\n </sw-ui-split-button>\n\n <!-- Speaker -->\n <sw-ui-split-button\n .active=${!this.speakerMuted}\n .items=${this.speakerDevices}\n @sw-split-button-toggle=${this._onSpeakerToggle}\n @sw-dropup-select=${(e: CustomEvent<DropUpItem>) => this._onDeviceSelect('speaker', e.detail)}\n >\n <sw-ui-icon slot=\"active\" name=\"speaker-on\"></sw-ui-icon>\n <sw-ui-icon slot=\"inactive\" name=\"speaker-off\"></sw-ui-icon>\n </sw-ui-split-button>\n\n <!-- Screen share (optional) -->\n ${this.showScreenShare\n ? html`\n <sw-ui-split-button\n class=\"optional ${this.screenSharing ? 'active-toggle' : ''}\"\n @sw-split-button-click=${this._onScreenShareToggle}\n >\n <sw-ui-icon name=${this.screenSharing ? 'screen-share-off' : 'screen-share'}></sw-ui-icon>\n </sw-ui-split-button>\n `\n : nothing}\n\n <!-- Hand raise (optional) -->\n ${this.showHandRaise\n ? html`\n <sw-ui-split-button\n class=\"optional ${this.handRaised ? 'active-toggle' : ''}\"\n @sw-split-button-click=${this._onHandRaiseToggle}\n >\n <sw-ui-icon name=\"hand-raise\"></sw-ui-icon>\n </sw-ui-split-button>\n `\n : nothing}\n\n <!-- Transcript (optional) -->\n ${this.showTranscript\n ? html`\n <sw-ui-split-button\n class=\"optional ${this.transcriptActive ? 'active-toggle' : ''}\"\n @sw-split-button-click=${this._onTranscriptToggle}\n >\n <sw-ui-icon name=\"transcript\"></sw-ui-icon>\n </sw-ui-split-button>\n `\n : nothing}\n\n <!-- Settings (optional) -->\n ${this.showSettings\n ? html`\n <sw-ui-split-button\n class=\"optional\"\n .items=${this.settingsItems}\n @sw-dropup-select=${this._onSettingsSelect}\n >\n <sw-ui-icon name=\"settings\"></sw-ui-icon>\n </sw-ui-split-button>\n `\n : nothing}\n\n <!-- Fullscreen (optional) -->\n ${this.showFullscreen\n ? html`\n <sw-ui-split-button class=\"optional\" @sw-split-button-click=${this._onFullscreenToggle}>\n <sw-ui-icon name=${this.fullscreen ? 'fullscreen-exit' : 'fullscreen'}></sw-ui-icon>\n </sw-ui-split-button>\n `\n : nothing}\n\n <!-- Overflow menu (shown on narrow containers) -->\n <sw-ui-split-button\n class=\"overflow\"\n .items=${this._overflowItems()}\n @sw-dropup-select=${this._onOverflowSelect}\n >\n <sw-ui-icon name=\"settings\"></sw-ui-icon>\n </sw-ui-split-button>\n\n <!-- Hang up -->\n <sw-ui-split-button class=\"hangup\" @sw-split-button-click=${this._onHangUp}>\n <sw-ui-icon name=\"phone-end\"></sw-ui-icon>\n </sw-ui-split-button>\n\n <!-- Spacer to balance the logo and keep buttons centered -->\n <span class=\"bar-spacer\" aria-hidden=\"true\"></span>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sw-ui-control-bar': SwUiControlBar;\n }\n}\n"],"names":["SwUiControlBar","LitElement","type","detail","kind","item","e","items","html","nothing","css","__decorateClass","property","customElement"],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dialpad Component
|
|
3
|
+
*
|
|
4
|
+
* A 12-key telephone keypad (0-9, *, #) for entering phone numbers
|
|
5
|
+
* and sending DTMF tones during active calls. Pure UI component — no
|
|
6
|
+
* call logic. Use `sw-call-dialpad` for a version that integrates with
|
|
7
|
+
* a call context.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```html
|
|
11
|
+
* <sw-dialpad show-call-button></sw-dialpad>
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* Long-press behavior:
|
|
15
|
+
* - Long-press the `0` key → inserts `+` (international prefix).
|
|
16
|
+
* - Long-press the backspace button → clears the entire buffer.
|
|
17
|
+
*
|
|
18
|
+
* @fires sw-digit-press - Fired when a digit button is pressed. Detail: `{ digit: string, digits: string }`
|
|
19
|
+
* @fires sw-dialpad-backspace - Fired when the backspace button is pressed (or long-pressed to clear). Detail: `{ digits: string }`
|
|
20
|
+
* @fires sw-dial - Fired when the call button is pressed. Detail: `{ digits: string }`
|
|
21
|
+
* @fires sw-dialpad-input - Fired when free-text input changes (only when `allow-text` is set). Detail: `{ digits: string }`
|
|
22
|
+
*
|
|
23
|
+
* @cssprop [--interactive-button-primary-bg=#044ef4] - Primary accent color.
|
|
24
|
+
* @cssprop [--interactive-button-primary-hover=#0342cf] - Primary color on hover.
|
|
25
|
+
* @cssprop [--interactive-status-success=#22c55e] - Success/call button color.
|
|
26
|
+
* @cssprop [--interactive-button-destructive-bg=#dc2626] - Danger/hangup button color.
|
|
27
|
+
* @cssprop [--bg-surface=#181a28] - Component background.
|
|
28
|
+
* @cssprop [--fg-default=#f0f0f4] - Text color.
|
|
29
|
+
* @cssprop [--fg-muted=#a0a0aa] - Muted text color.
|
|
30
|
+
* @cssprop [--border-default=rgba(255,255,255,0.12)] - Border color.
|
|
31
|
+
*/
|
|
32
|
+
import { LitElement } from 'lit';
|
|
33
|
+
import '../icons/sw-ui-icon.js';
|
|
34
|
+
export declare class SwUiDialpad extends LitElement {
|
|
35
|
+
static styles: import("lit").CSSResult;
|
|
36
|
+
/** Whether to display the call button below the keypad. */
|
|
37
|
+
showCallButton: boolean;
|
|
38
|
+
/** Allow free-text input in the display field (e.g., SIP URIs, vanity letters). Keypad buttons still append DTMF digits. */
|
|
39
|
+
allowText: boolean;
|
|
40
|
+
/** Placeholder text shown in the digit display input. */
|
|
41
|
+
placeholder: string;
|
|
42
|
+
private digits;
|
|
43
|
+
private pressedKey;
|
|
44
|
+
private _longPressTimer;
|
|
45
|
+
private _longPressFired;
|
|
46
|
+
private _startLongPress;
|
|
47
|
+
private _cancelLongPress;
|
|
48
|
+
disconnectedCallback(): void;
|
|
49
|
+
private _clearAll;
|
|
50
|
+
private _pressDigit;
|
|
51
|
+
private _backspace;
|
|
52
|
+
private _dial;
|
|
53
|
+
/**
|
|
54
|
+
* Handle keyboard input on the display field.
|
|
55
|
+
* We intercept all keys and manage state ourselves to prevent the browser
|
|
56
|
+
* from accumulating non-DTMF characters in the input value.
|
|
57
|
+
*/
|
|
58
|
+
private _onKeyDown;
|
|
59
|
+
private _onInput;
|
|
60
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
61
|
+
}
|
|
62
|
+
declare global {
|
|
63
|
+
interface HTMLElementTagNameMap {
|
|
64
|
+
'sw-ui-dialpad': SwUiDialpad;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=sw-ui-dialpad.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sw-ui-dialpad.d.ts","sourceRoot":"","sources":["../../../../src/components/UI/controls/sw-ui-dialpad.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C,OAAO,wBAAwB,CAAC;AAuBhC,qBACa,WAAY,SAAQ,UAAU;IACzC,MAAM,CAAC,MAAM,0BAoKX;IAEF,2DAA2D;IAE3D,cAAc,EAAE,OAAO,CAAS;IAEhC,4HAA4H;IAE5H,SAAS,EAAE,OAAO,CAAS;IAE3B,yDAAyD;IAEzD,WAAW,EAAE,MAAM,CAAkB;IAE5B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAuB;IAElD,OAAO,CAAC,eAAe,CAA8C;IACrE,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,gBAAgB;IAOf,oBAAoB;IAK7B,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,KAAK;IAWb;;;;OAIG;IACH,OAAO,CAAC,UAAU;IA0BlB,OAAO,CAAC,QAAQ;IAahB,MAAM;CAyEP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,eAAe,EAAE,WAAW,CAAC;KAC9B;CACF"}
|