brutalism design

This commit is contained in:
2026-05-22 05:08:41 +06:00
parent e4ed785911
commit 1ca73e786c
9 changed files with 740 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
import { createGlobalState } from '@vueuse/core'
import { computed, ref, watch } from 'vue'
import { useMediasoup } from './use-mediasoup'
import { useProducers } from './use-producers'
export const useMediaControls = createGlobalState(() => {
const { producers } = useMediasoup()
const { enableMic, enableVideo, disableVideo, enableShare, disableShare, pauseProducer, resumeProducer } = useProducers()
const micProducer = computed(() => producers.values.value.find(p => p.appData.source === 'mic'))
const cameraProducer = computed(() => producers.values.value.find(p => p.appData.source === 'camera'))
const shareProducer = computed(() => producers.values.value.find(p => p.appData.source === 'share'))
const isSoundEnabled = ref(true)
const isMicEnabled = computed(() => isSoundEnabled.value && !!micProducer.value && !micProducer.value.paused)
const isCameraEnabled = computed(() => !!cameraProducer.value && !cameraProducer.value.paused)
const isShareEnabled = computed(() => !!shareProducer.value)
watch(isSoundEnabled, async (enabled) => {
if (!enabled) {
if (micProducer.value && !micProducer.value.paused)
await pauseProducer(micProducer.value.id)
}
else {
if (micProducer.value?.paused)
await resumeProducer(micProducer.value.id)
}
})
async function toggleMic() {
if (!isSoundEnabled.value)
return
if (isMicEnabled.value) {
await pauseProducer(micProducer.value!.id)
}
else if (micProducer.value?.paused) {
await resumeProducer(micProducer.value.id)
}
else {
await enableMic()
}
}
function toggleSound() {
isSoundEnabled.value = !isSoundEnabled.value
}
async function toggleCamera() {
if (isCameraEnabled.value)
await disableVideo()
else
await enableVideo()
}
async function toggleShare() {
if (isShareEnabled.value)
await disableShare()
else
await enableShare()
}
return {
isMicEnabled,
isSoundEnabled,
isCameraEnabled,
isShareEnabled,
toggleMic,
toggleSound,
toggleCamera,
toggleShare,
}
})