| 
						
						
							
								
							
						
						
					 | 
					@ -43,7 +43,7 @@ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          <img :src="URL.createObjectURL(blob)" class="mt-2 rounded" /> | 
					 | 
					 | 
					          <img :src="URL.createObjectURL(blob)" class="mt-2 rounded" /> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        </div> | 
					 | 
					 | 
					        </div> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      </div> | 
					 | 
					 | 
					      </div> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					      <div v-else> | 
					 | 
					 | 
					      <div v-else ref="cameraContainer"> | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        <!-- | 
					 | 
					 | 
					        <!-- | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          Camera "resolution" doesn't change how it shows on screen but rather stretches the result, eg the following which just stretches it vertically: | 
					 | 
					 | 
					          Camera "resolution" doesn't change how it shows on screen but rather stretches the result, eg the following which just stretches it vertically: | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          :resolution="{ width: 375, height: 812 }" | 
					 | 
					 | 
					          :resolution="{ width: 375, height: 812 }" | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -52,21 +52,31 @@ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          facingMode="environment" | 
					 | 
					 | 
					          facingMode="environment" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          autoplay | 
					 | 
					 | 
					          autoplay | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          ref="camera" | 
					 | 
					 | 
					          ref="camera" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					          @started="cameraStarted" | 
					 | 
					 | 
					          @started="cameraStarted()" | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        > | 
					 | 
					 | 
					        > | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          <div | 
					 | 
					 | 
					          <div | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					            class="absolute portrait:bottom-0 portrait:left-0 portrait:right-0 landscape:right-0 landscape:top-0 landscape:bottom-0 flex landscape:flex-row justify-center items-center portrait:pb-2 landscape:pr-4" | 
					 | 
					 | 
					            class="absolute portrait:bottom-0 portrait:left-0 portrait:right-0 portrait:pb-2 landscape:right-0 landscape:top-0 landscape:bottom-0 landscape:pr-4 flex landscape:flex-row justify-center items-center" | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					          > | 
					 | 
					 | 
					          > | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            <button | 
					 | 
					 | 
					            <button | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					              @click="takeImage" | 
					 | 
					 | 
					              @click="takeImage()" | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					              class="bg-blue-500 hover:bg-blue-700 text-white font-bold p-3 rounded-full text-2xl leading-none" | 
					 | 
					 | 
					              class="bg-blue-500 hover:bg-blue-700 text-white font-bold p-3 rounded-full text-2xl leading-none" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            > | 
					 | 
					 | 
					            > | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					              <fa icon="camera" class="w-[1em]"></fa> | 
					 | 
					 | 
					              <fa icon="camera" class="w-[1em]"></fa> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            </button> | 
					 | 
					 | 
					            </button> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          </div> | 
					 | 
					 | 
					          </div> | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					          <div v-if="numDevices > 1" class="absolute bottom-2 right-4"> | 
					 | 
					 | 
					          <div | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            class="absolute portrait:bottom-2 portrait:right-16 landscape:right-0 landscape:bottom-16 landscape:pr-4 flex justify-center items-center" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          > | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            <button | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					              @click="swapMirrorClass()" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					              class="bg-blue-500 hover:bg-blue-700 text-white font-bold p-3 rounded-full text-2xl leading-none" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            > | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					              <fa icon="left-right" class="w-[1em]"></fa> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            </button> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          </div> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					          <div v-if="numDevices > -1" class="absolute bottom-2 right-4"> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            <button | 
					 | 
					 | 
					            <button | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					              @click="switchCamera" | 
					 | 
					 | 
					              @click="switchCamera()" | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					              class="bg-blue-500 hover:bg-blue-700 text-white font-bold p-3 rounded-full text-2xl leading-none" | 
					 | 
					 | 
					              class="bg-blue-500 hover:bg-blue-700 text-white font-bold p-3 rounded-full text-2xl leading-none" | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            > | 
					 | 
					 | 
					            > | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					              <fa icon="rotate" class="w-[1em]"></fa> | 
					 | 
					 | 
					              <fa icon="rotate" class="w-[1em]"></fa> | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -96,6 +106,7 @@ export default class GiftedPhotoDialog extends Vue { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  activeDeviceNumber = 0; | 
					 | 
					 | 
					  activeDeviceNumber = 0; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  activeDid = ""; | 
					 | 
					 | 
					  activeDid = ""; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  blob: Blob | null = null; | 
					 | 
					 | 
					  blob: Blob | null = null; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  mirror = false; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  numDevices = 0; | 
					 | 
					 | 
					  numDevices = 0; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  setImage: (arg: string) => void = () => {}; | 
					 | 
					 | 
					  setImage: (arg: string) => void = () => {}; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  uploading = false; | 
					 | 
					 | 
					  uploading = false; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -145,6 +156,7 @@ export default class GiftedPhotoDialog extends Vue { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    const cameraComponent = this.$refs.camera as InstanceType<typeof Camera>; | 
					 | 
					 | 
					    const cameraComponent = this.$refs.camera as InstanceType<typeof Camera>; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    if (cameraComponent) { | 
					 | 
					 | 
					    if (cameraComponent) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      this.numDevices = (await cameraComponent.devices(["videoinput"])).length; | 
					 | 
					 | 
					      this.numDevices = (await cameraComponent.devices(["videoinput"])).length; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      this.mirror = cameraComponent.facingMode === "user"; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    } | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  } | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -310,6 +322,17 @@ export default class GiftedPhotoDialog extends Vue { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      this.blob = null; | 
					 | 
					 | 
					      this.blob = null; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    } | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  } | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  swapMirrorClass() { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    this.mirror = !this.mirror; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    if (this.mirror) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      (this.$refs.cameraContainer as HTMLElement).classList.add("mirror-video"); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    } else { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      (this.$refs.cameraContainer as HTMLElement).classList.remove( | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        "mirror-video", | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      ); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					} | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					</script> | 
					 | 
					 | 
					</script> | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -334,4 +357,12 @@ export default class GiftedPhotoDialog extends Vue { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  width: 100%; | 
					 | 
					 | 
					  width: 100%; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  max-width: 700px; | 
					 | 
					 | 
					  max-width: 700px; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					} | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					.mirror-video { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  transform: scaleX(-1); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  -webkit-transform: scaleX(-1); /* For Safari */ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  -moz-transform: scaleX(-1); /* For Firefox */ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  -ms-transform: scaleX(-1); /* For IE */ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					  -o-transform: scaleX(-1); /* For Opera */ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					</style> | 
					 | 
					 | 
					</style> | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					
  |