Skip to content

Commit 359c32b

Browse files
fix(editor): move page icon above title for proper alignment (#189)
The emoji picker was rendered inline with the title, causing misalignment between the title and editor content. Now the icon renders as a block element above the title row. When no icon is set, a small 'Add icon' button appears on hover. Co-authored-by: Ona <no-reply@ona.com>
1 parent 1f533cb commit 359c32b

2 files changed

Lines changed: 50 additions & 28 deletions

File tree

src/components/page-icon.tsx

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -44,24 +44,44 @@ export function PageIcon({ pageId, initialIcon }: PageIconProps) {
4444
saveIcon(null);
4545
}, [saveIcon]);
4646

47+
if (icon) {
48+
return (
49+
<div className="mb-2">
50+
<EmojiPicker
51+
open={open}
52+
onOpenChange={setOpen}
53+
onSelect={handleSelect}
54+
onRemove={handleRemove}
55+
hasIcon
56+
>
57+
<button
58+
className="flex h-10 w-10 items-center justify-center rounded-sm text-4xl leading-none hover:bg-white/[0.04]"
59+
aria-label={`Page icon: ${icon}. Click to change`}
60+
>
61+
{icon}
62+
</button>
63+
</EmojiPicker>
64+
</div>
65+
);
66+
}
67+
4768
return (
48-
<EmojiPicker
49-
open={open}
50-
onOpenChange={setOpen}
51-
onSelect={handleSelect}
52-
onRemove={handleRemove}
53-
hasIcon={icon !== null}
54-
>
55-
<button
56-
className="flex h-9 w-9 shrink-0 items-center justify-center text-muted-foreground hover:bg-white/[0.04]"
57-
aria-label={icon ? `Page icon: ${icon}. Click to change` : "Add page icon"}
69+
<div className="mb-1 opacity-0 group-hover/page-header:opacity-100 transition-opacity">
70+
<EmojiPicker
71+
open={open}
72+
onOpenChange={setOpen}
73+
onSelect={handleSelect}
74+
onRemove={handleRemove}
75+
hasIcon={false}
5876
>
59-
{icon ? (
60-
<span className="text-2xl leading-none">{icon}</span>
61-
) : (
62-
<SmilePlus className="h-5 w-5 opacity-0 group-hover/page-icon:opacity-100" />
63-
)}
64-
</button>
65-
</EmojiPicker>
77+
<button
78+
className="flex h-7 items-center gap-1 rounded-sm px-1.5 text-xs text-muted-foreground hover:bg-white/[0.04]"
79+
aria-label="Add page icon"
80+
>
81+
<SmilePlus className="h-3.5 w-3.5" />
82+
<span>Add icon</span>
83+
</button>
84+
</EmojiPicker>
85+
</div>
6686
);
6787
}

src/components/page-view-client.tsx

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,21 @@ export function PageViewClient({
3030

3131
return (
3232
<div className="mx-auto max-w-3xl p-6">
33-
<div className="group/page-icon flex items-start gap-2">
33+
<div className="group/page-header">
3434
<PageIcon key={`icon-${pageId}`} pageId={pageId} initialIcon={pageIcon} />
35-
<div className="min-w-0 flex-1">
36-
<PageTitle key={pageId} pageId={pageId} initialTitle={pageTitle} />
35+
<div className="flex items-start gap-2">
36+
<div className="min-w-0 flex-1">
37+
<PageTitle key={pageId} pageId={pageId} initialTitle={pageTitle} />
38+
</div>
39+
<PageMenu
40+
pageId={pageId}
41+
pageTitle={pageTitle}
42+
workspaceId={workspaceId}
43+
workspaceSlug={workspaceSlug}
44+
userId={userId}
45+
editorRef={editorRef}
46+
/>
3747
</div>
38-
<PageMenu
39-
pageId={pageId}
40-
pageTitle={pageTitle}
41-
workspaceId={workspaceId}
42-
workspaceSlug={workspaceSlug}
43-
userId={userId}
44-
editorRef={editorRef}
45-
/>
4648
</div>
4749
<div className="mt-4">
4850
<Editor

0 commit comments

Comments
 (0)