diff --git a/src/pages/Viewer.tsx b/src/pages/Viewer.tsx
index 3c4cd17..a20eb74 100644
--- a/src/pages/Viewer.tsx
+++ b/src/pages/Viewer.tsx
@@ -144,6 +144,8 @@ const Viewer = () => {
type="file"
accept={ACCEPTED_EXTENSIONS}
className="hidden"
+ title="Selecionar arquivo de maquete para upload"
+ placeholder="Upload de maquete"
onChange={handleFileUpload}
/>
@@ -256,7 +258,7 @@ const Viewer = () => {
);
};
-function InfoItem({ icon: Icon, label, value }: { icon: any; label: string; value: string }) {
+function InfoItem({ icon: Icon, label, value }: { icon: React.ComponentType<{ className?: string }>; label: string; value: string }) {
return (
diff --git a/src/pages/XRSession.tsx b/src/pages/XRSession.tsx
index cac2c2d..de7d61d 100644
--- a/src/pages/XRSession.tsx
+++ b/src/pages/XRSession.tsx
@@ -841,7 +841,7 @@ const XRSession = () => {
{/* Floating DOM HUD overlay — only visible OUTSIDE passthrough.
Inside AR, the DOM is occluded by the headset compositor; the
in-world XRHudInWorld replaces it. */}
-
+
setFreeMove(!freeMove)}
@@ -857,7 +857,7 @@ const XRSession = () => {
{/* Hidden ShareButton instance — registers window.__trackSteelStartLive
so the in-world Share tab can trigger broadcasts. Also keeps live
state in sync with the in-XR HUD. */}
-
+
setLiveCode(h?.code ?? null)}
onViewerCountChange={setLiveViewers}