refactor: update report panel and toolbar components for improved layout and accessibility, including enhanced styling and conditional rendering

This commit is contained in:
Anish Sarkar 2026-02-17 03:25:24 +05:30
parent d7118fba15
commit 2b2a4c858a
5 changed files with 102 additions and 98 deletions

View file

@ -32,104 +32,107 @@ export function FixedToolbarButtons() {
const { onSave, hasUnsavedChanges, isSaving, canToggleMode } = useEditorSave();
return (
<div className="flex w-full flex-wrap">
{!readOnly && (
<>
<div className="flex w-full items-center">
{/* Scrollable editing buttons */}
<div className="flex flex-1 min-w-0 overflow-x-auto scrollbar-hide">
{!readOnly && (
<>
<ToolbarGroup>
<ToolbarButton
tooltip="Undo (⌘+Z)"
onClick={() => {
editor.undo();
editor.tf.focus();
}}
>
<UndoIcon />
</ToolbarButton>
<ToolbarButton
tooltip="Redo (⌘+⇧+Z)"
onClick={() => {
editor.redo();
editor.tf.focus();
}}
>
<RedoIcon />
</ToolbarButton>
</ToolbarGroup>
<ToolbarGroup>
<InsertToolbarButton />
<TurnIntoToolbarButton />
</ToolbarGroup>
<ToolbarGroup>
<MarkToolbarButton nodeType={KEYS.bold} tooltip="Bold (⌘+B)">
<BoldIcon />
</MarkToolbarButton>
<MarkToolbarButton nodeType={KEYS.italic} tooltip="Italic (⌘+I)">
<ItalicIcon />
</MarkToolbarButton>
<MarkToolbarButton
nodeType={KEYS.underline}
tooltip="Underline (⌘+U)"
>
<UnderlineIcon />
</MarkToolbarButton>
<MarkToolbarButton
nodeType={KEYS.strikethrough}
tooltip="Strikethrough (⌘+⇧+M)"
>
<StrikethroughIcon />
</MarkToolbarButton>
<MarkToolbarButton nodeType={KEYS.code} tooltip="Code (⌘+E)">
<Code2Icon />
</MarkToolbarButton>
<MarkToolbarButton
nodeType={KEYS.highlight}
tooltip="Highlight (⌘+⇧+H)"
>
<HighlighterIcon />
</MarkToolbarButton>
</ToolbarGroup>
<ToolbarGroup>
<LinkToolbarButton />
</ToolbarGroup>
</>
)}
</div>
{/* Fixed right-side buttons (Save + Mode) */}
<div className="flex shrink-0 items-center">
{/* Save button — only in edit mode with unsaved changes */}
{!readOnly && onSave && hasUnsavedChanges && (
<ToolbarGroup>
<ToolbarButton
tooltip="Undo (⌘+Z)"
onClick={() => {
editor.undo();
editor.tf.focus();
}}
tooltip={isSaving ? 'Saving...' : 'Save (⌘+S)'}
onClick={onSave}
disabled={isSaving}
className="bg-primary text-primary-foreground hover:bg-primary/90"
>
<UndoIcon />
</ToolbarButton>
<ToolbarButton
tooltip="Redo (⌘+⇧+Z)"
onClick={() => {
editor.redo();
editor.tf.focus();
}}
>
<RedoIcon />
{isSaving ? (
<Spinner size="xs" />
) : (
<SaveIcon />
)}
</ToolbarButton>
</ToolbarGroup>
)}
{/* Mode toggle */}
{canToggleMode && (
<ToolbarGroup>
<InsertToolbarButton />
<TurnIntoToolbarButton />
<ModeToolbarButton />
</ToolbarGroup>
<ToolbarGroup>
<MarkToolbarButton nodeType={KEYS.bold} tooltip="Bold (⌘+B)">
<BoldIcon />
</MarkToolbarButton>
<MarkToolbarButton nodeType={KEYS.italic} tooltip="Italic (⌘+I)">
<ItalicIcon />
</MarkToolbarButton>
<MarkToolbarButton
nodeType={KEYS.underline}
tooltip="Underline (⌘+U)"
>
<UnderlineIcon />
</MarkToolbarButton>
<MarkToolbarButton
nodeType={KEYS.strikethrough}
tooltip="Strikethrough (⌘+⇧+M)"
>
<StrikethroughIcon />
</MarkToolbarButton>
<MarkToolbarButton nodeType={KEYS.code} tooltip="Code (⌘+E)">
<Code2Icon />
</MarkToolbarButton>
<MarkToolbarButton
nodeType={KEYS.highlight}
tooltip="Highlight (⌘+⇧+H)"
>
<HighlighterIcon />
</MarkToolbarButton>
</ToolbarGroup>
<ToolbarGroup>
<LinkToolbarButton />
</ToolbarGroup>
</>
)}
<div className="grow" />
{/* Save button — only in edit mode with unsaved changes */}
{!readOnly && onSave && hasUnsavedChanges && (
<ToolbarGroup>
<ToolbarButton
tooltip={isSaving ? 'Saving...' : 'Save (⌘+S)'}
onClick={onSave}
disabled={isSaving}
className="bg-primary text-primary-foreground hover:bg-primary/90"
>
{isSaving ? (
<Spinner size="xs" />
) : (
<SaveIcon />
)}
</ToolbarButton>
</ToolbarGroup>
)}
{/* Mode toggle */}
{canToggleMode && (
<ToolbarGroup>
<ModeToolbarButton />
</ToolbarGroup>
)}
)}
</div>
</div>
);
}