Skip to content

Commit d14b803

Browse files
committed
refine(visual-edits): remove overlay cinza, X flutuante e fechar na área do preview
- Remove fundo bg-black/20 quando dropdown aberto: sem mais escurecimento. - Overlay transparente (pointer-events-auto) sobre o canvas do preview para fechar o menu ao clicar na área cinza ao redor do card. - Botão X reposicionado para fora do card (-top-3 -right-3), visualmente "saindo" do dropdown como badge flutuante com borda e sombra próprios. - Header limpo sem botão interno; container com overflow-visible para o X não ser cortado; conteúdo tem overflow-hidden separado para preservar o clip interno.
1 parent d471be3 commit d14b803

3 files changed

Lines changed: 21 additions & 15 deletions

File tree

src/App.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@ export default function App() {
366366
onViewportChange={setViewport}
367367
onLocate={onVisualEditsLocate}
368368
menuOpen={veMenu !== null}
369+
onMenuClose={onVeMenuClose}
369370
/>
370371
}
371372
/>

src/components/HtmlPreview.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,9 @@ interface HtmlPreviewProps {
2222
cursorOffset: number;
2323
viewport: ViewportState;
2424
onViewportChange: (v: ViewportState) => void;
25-
// Recebe o loc clicado e as coordenadas já convertidas para a janela principal
26-
// (levando em conta a posição e a escala do iframe).
2725
onLocate?: (loc: string, screenX: number, screenY: number) => void;
2826
menuOpen?: boolean;
27+
onMenuClose?: () => void;
2928
}
3029

3130
const MIN_W = 200;
@@ -53,6 +52,7 @@ export function HtmlPreview({
5352
onViewportChange,
5453
onLocate,
5554
menuOpen,
55+
onMenuClose,
5656
}: HtmlPreviewProps) {
5757
const [showWarnings, setShowWarnings] = useState(false);
5858
const iframeRef = useRef<HTMLIFrameElement | null>(null);
@@ -242,8 +242,11 @@ export function HtmlPreview({
242242
data-ve-anchor="preview-canvas"
243243
className={`relative flex flex-1 items-center justify-center overflow-hidden bg-[hsl(var(--preview-bg))]${visualEditsEnabled ? ' ve-border-pulse' : ''}`}
244244
>
245-
{menuOpen && (
246-
<div className="absolute inset-0 bg-black/20 z-[59] pointer-events-none" />
245+
{menuOpen && onMenuClose && (
246+
<div
247+
className="absolute inset-0 z-[59]"
248+
onClick={onMenuClose}
249+
/>
247250
)}
248251
{error ? (
249252
<div className="flex h-full w-full flex-col items-center justify-center gap-3 p-8 text-center">

src/components/VisualEditsMenu.tsx

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -160,24 +160,26 @@ export function VisualEditsMenu({ menu, onSelect, onClose }: Props) {
160160
<div
161161
ref={ref}
162162
style={menuStyle}
163-
className="rounded-xl border border-border bg-white dark:bg-zinc-900 shadow-[var(--shadow-popover)] overflow-hidden ring-1 ring-black/5 dark:ring-white/10"
163+
className="relative rounded-xl border border-border bg-white dark:bg-zinc-900 shadow-[var(--shadow-popover)] overflow-visible ring-1 ring-black/5 dark:ring-white/10"
164164
role="menu"
165165
>
166-
<div className="relative flex items-center justify-center gap-2 px-3 py-2 border-b border-border bg-gradient-to-b from-muted/40 to-transparent">
166+
{/* X flutuando no canto externo do card */}
167+
<button
168+
type="button"
169+
onClick={onClose}
170+
aria-label="Fechar"
171+
className="absolute -top-3 -right-3 z-10 inline-flex h-6 w-6 items-center justify-center rounded-full bg-white dark:bg-zinc-800 border border-border shadow-sm text-muted-foreground hover:text-foreground hover:bg-accent transition-colors"
172+
>
173+
<X className="h-3.5 w-3.5" />
174+
</button>
175+
176+
<div className="flex items-center justify-center gap-2 px-3 py-2 border-b border-border bg-gradient-to-b from-muted/40 to-transparent rounded-t-xl overflow-hidden">
167177
<MousePointerClick className="h-3.5 w-3.5 text-muted-foreground/70" />
168178
<span className="text-[11px] font-semibold uppercase tracking-[0.12em] text-muted-foreground">
169179
Elemento selecionado
170180
</span>
171-
<button
172-
type="button"
173-
onClick={onClose}
174-
aria-label="Fechar"
175-
className="absolute right-1.5 top-1/2 -translate-y-1/2 inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground/60 hover:text-foreground hover:bg-accent transition-colors"
176-
>
177-
<X className="h-3 w-3" />
178-
</button>
179181
</div>
180-
<div className="py-1">
182+
<div className="py-1 rounded-b-xl overflow-hidden">
181183
{menu.items.length > 0 && (
182184
<div className="max-h-72 overflow-y-auto">
183185
{menu.items.map((c, i) => {

0 commit comments

Comments
 (0)