@ -58,10 +58,7 @@
< / div >
< / div >
< div v-if ="showCameraPreview" :class ="cameraPreviewClasses" >
< div v-if ="showCameraPreview" :class ="cameraPreviewClasses" >
<!-- Diagnostic Panel -- >
<!-- Diagnostic Panel -- >
< div
< div v-if ="showDiagnostics" :class ="diagnosticsPanelClasses" >
v - if = "showDiagnostics"
: class = "diagnosticsPanelClasses"
>
< div class = "grid grid-cols-2 gap-2" >
< div class = "grid grid-cols-2 gap-2" >
< div >
< div >
< p > < strong > Camera State : < / strong > { { cameraState } } < / p >
< p > < strong > Camera State : < / strong > { { cameraState } } < / p >
@ -117,7 +114,10 @@
muted
muted
> < / video >
> < / video >
< div :class ="cameraControlsClasses" >
< div :class ="cameraControlsClasses" >
< button :class ="cameraControlButtonClasses" @click ="capturePhoto" >
< button
: class = "cameraControlButtonClasses"
@ click = "capturePhoto"
>
< font -awesome icon = "camera" class = "w-[1em]" / >
< font -awesome icon = "camera" class = "w-[1em]" / >
< / button >
< / button >
< button
< button
@ -195,9 +195,7 @@
/ >
/ >
< / div >
< / div >
< / div >
< / div >
< div
< div :class ="buttonGridClasses" >
: class = "buttonGridClasses"
>
< button
< button
class = "bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white py-2 px-3 rounded-md"
class = "bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white py-2 px-3 rounded-md"
@ click = "uploadImage"
@ click = "uploadImage"
@ -345,9 +343,9 @@ export default class ImageMethodDialog extends Vue {
* /
* /
get buttonGridClasses ( ) : string {
get buttonGridClasses ( ) : string {
return [
return [
'grid gap-2 mt-2' ,
"grid gap-2 mt-2" ,
this . showRetry ? 'grid-cols-2' : 'grid-cols-1' ,
this . showRetry ? "grid-cols-2" : "grid-cols-1" ,
] . join ( ' ' ) ;
] . join ( " " ) ;
}
}
/ * *
/ * *
@ -355,7 +353,7 @@ export default class ImageMethodDialog extends Vue {
* Provides consistent styling for section dividers
* Provides consistent styling for section dividers
* /
* /
get sectionDividerClasses ( ) : string {
get sectionDividerClasses ( ) : string {
return 'border-b border-dashed border-slate-300 text-orange-400 mb-4 font-bold text-sm' ;
return "border-b border-dashed border-slate-300 text-orange-400 mb-4 font-bold text-sm" ;
}
}
/ * *
/ * *
@ -363,7 +361,7 @@ export default class ImageMethodDialog extends Vue {
* Provides consistent styling for divider labels
* Provides consistent styling for divider labels
* /
* /
get sectionDividerSpanClasses ( ) : string {
get sectionDividerSpanClasses ( ) : string {
return 'block w-fit mx-auto -mb-2.5 bg-white px-2' ;
return "block w-fit mx-auto -mb-2.5 bg-white px-2" ;
}
}
/ * *
/ * *
@ -371,7 +369,7 @@ export default class ImageMethodDialog extends Vue {
* Provides consistent styling for camera preview
* Provides consistent styling for camera preview
* /
* /
get cameraPreviewClasses ( ) : string {
get cameraPreviewClasses ( ) : string {
return 'camera-preview relative flex bg-black overflow-hidden mb-4' ;
return "camera-preview relative flex bg-black overflow-hidden mb-4" ;
}
}
/ * *
/ * *
@ -379,7 +377,7 @@ export default class ImageMethodDialog extends Vue {
* Provides consistent styling for diagnostics overlay
* Provides consistent styling for diagnostics overlay
* /
* /
get diagnosticsPanelClasses ( ) : string {
get diagnosticsPanelClasses ( ) : string {
return ' absolute top-0 left-0 right-0 bg-black/80 text-white text-xs p-2 pt-8 z-20 overflow-auto max-h-[50vh]' ;
return " absolute top-0 left-0 right-0 bg-black/80 text-white text-xs p-2 pt-8 z-20 overflow-auto max-h-[50vh]" ;
}
}
/ * *
/ * *
@ -387,7 +385,7 @@ export default class ImageMethodDialog extends Vue {
* Provides consistent styling for diagnostics toggle
* Provides consistent styling for diagnostics toggle
* /
* /
get diagnosticsToggleClasses ( ) : string {
get diagnosticsToggleClasses ( ) : string {
return 'absolute top-2 right-2 bg-black/50 text-white px-2 py-1 rounded text-xs z-30' ;
return "absolute top-2 right-2 bg-black/50 text-white px-2 py-1 rounded text-xs z-30" ;
}
}
/ * *
/ * *
@ -395,7 +393,7 @@ export default class ImageMethodDialog extends Vue {
* Provides consistent styling for camera control buttons
* Provides consistent styling for camera control buttons
* /
* /
get cameraControlButtonClasses ( ) : string {
get cameraControlButtonClasses ( ) : string {
return 'bg-white text-slate-800 p-3 rounded-full text-2xl leading-none' ;
return "bg-white text-slate-800 p-3 rounded-full text-2xl leading-none" ;
}
}
/ * *
/ * *
@ -403,7 +401,7 @@ export default class ImageMethodDialog extends Vue {
* Provides consistent styling for camera controls
* Provides consistent styling for camera controls
* /
* /
get cameraControlsClasses ( ) : string {
get cameraControlsClasses ( ) : string {
return 'absolute bottom-4 inset-x-0 flex items-center justify-center gap-4' ;
return "absolute bottom-4 inset-x-0 flex items-center justify-center gap-4" ;
}
}
/ * *
/ * *
@ -411,7 +409,7 @@ export default class ImageMethodDialog extends Vue {
* Provides consistent styling for file input with custom button
* Provides consistent styling for file input with custom button
* /
* /
get fileInputClasses ( ) : string {
get fileInputClasses ( ) : string {
return ' w-full file:text-center file:bg-gradient-to-b file:from-slate-400 file:to-slate-700 file:shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] file:text-white file:px-3 file:py-2 file:rounded-md file:border-none file:cursor-pointer file:me-2' ;
return " w-full file:text-center file:bg-gradient-to-b file:from-slate-400 file:to-slate-700 file:shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] file:text-white file:px-3 file:py-2 file:rounded-md file:border-none file:cursor-pointer file:me-2" ;
}
}
/ * *
/ * *
@ -419,7 +417,7 @@ export default class ImageMethodDialog extends Vue {
* Provides consistent styling for URL input field
* Provides consistent styling for URL input field
* /
* /
get urlInputClasses ( ) : string {
get urlInputClasses ( ) : string {
return 'block w-full rounded border border-slate-400 px-4 py-2' ;
return "block w-full rounded border border-slate-400 px-4 py-2" ;
}
}
/ * *
/ * *
@ -427,7 +425,7 @@ export default class ImageMethodDialog extends Vue {
* Provides consistent styling for accept URL button
* Provides consistent styling for accept URL button
* /
* /
get acceptUrlButtonClasses ( ) : string {
get acceptUrlButtonClasses ( ) : string {
return ' bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-3 py-2 rounded-md cursor-pointer' ;
return " bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-3 py-2 rounded-md cursor-pointer" ;
}
}
/ * *
/ * *
@ -435,7 +433,7 @@ export default class ImageMethodDialog extends Vue {
* Provides consistent styling for image preview
* Provides consistent styling for image preview
* /
* /
get imageContainerClasses ( ) : string {
get imageContainerClasses ( ) : string {
return 'mt-2 rounded max-h-[50vh] max-w-[90vw] object-contain' ;
return "mt-2 rounded max-h-[50vh] max-w-[90vw] object-contain" ;
}
}
/ * *
/ * *
@ -443,7 +441,7 @@ export default class ImageMethodDialog extends Vue {
* Provides consistent styling for cropper
* Provides consistent styling for cropper
* /
* /
get cropperClasses ( ) : string {
get cropperClasses ( ) : string {
return 'max-h-[50vh] max-w-[90vw] object-contain' ;
return "max-h-[50vh] max-w-[90vw] object-contain" ;
}
}
/ / P r o p s
/ / P r o p s