TeaWeb/shared/js/ui/modal/video-source/Definitions.ts

76 lines
1.9 KiB
TypeScript

export type DeviceListResult = {
status: "success",
devices: { id: string, displayName: string }[],
selectedDeviceId: string | undefined,
fallbackSelectedDeviceName: string | undefined
} | {
status: "error",
reason: "no-permissions" | "request-permissions" | "custom"
};
export type VideoPreviewStatus = {
status: "preview",
stream: MediaStream /* Attention: This makes this window non popoutable! */
} | {
status: "error",
reason: "no-permissions" | "request-permissions" | "custom",
message?: string
} | {
status: "none";
};
export type VideoSourceState = {
type: "none"
} | {
type: "selected",
deviceId: string,
name: string,
} | {
type: "errored",
error: string
};
export type SettingFrameRate = {
min: number,
max: number,
original: number,
};
export interface ModalVideoSourceEvents {
action_cancel: {},
action_start: {},
action_request_permissions: {},
action_select_source: { id: string | undefined },
action_setting_dimension: { width: number, height: number },
action_setting_framerate: { frameRate: number },
query_source: {},
query_device_list: {},
query_video_preview: {},
query_start_button: {},
query_setting_dimension: {},
query_setting_framerate: {},
notify_source: { state: VideoSourceState }
notify_device_list: { status: DeviceListResult },
notify_video_preview: { status: VideoPreviewStatus },
notify_start_button: { enabled: boolean },
notify_setting_dimension: {
setting: {
minWidth: number,
currentWidth: number,
originalWidth: number,
maxWidth: number,
minHeight: number,
currentHeight: number,
originalHeight: number,
maxHeight: number
} | undefined
},
notify_settings_framerate: {
frameRate: SettingFrameRate | undefined
}
notify_destroy: {}
}