Some checks failed
CD / Deploy to Test (push) Blocked by required conditions
CD / Smoke tests against Test (push) Blocked by required conditions
CD / Promote to Int (push) Blocked by required conditions
CI / Auth e2e pack (push) Blocked by required conditions
CI / Import/export fidelity gate (push) Blocked by required conditions
CI / Build container images (push) Blocked by required conditions
CD / Build and push images (push) Has been cancelled
CI / Lint, typecheck, test (push) Has been cancelled
- lucide-react (MIT, tree-shaken, compiled into the bundle — no runtime requests; fonts.spec's off-origin assertion covers the page route) - page-actions slot: TopBar registers a DOM element via context, the active page portals its actions into it, TopBar stays page-agnostic - PageActions: mode toggle, watch (WatchToggle icon variant), comments (unread badge kept), attachments, plugin page tools, labels, history as icon buttons with localized aria-label+tooltip (de+en), plus an overflow menu for markdown copy/download, docx/odt/pdf export and the destructive delete (confirm kept) - page header keeps only the title; the editor-shell tools row is gone; panel state lives in PageEditorPage now - hamburger/search/bell adopt the same icon set - e2e: content/export open the overflow menu; class hooks (editor-page__mode-toggle, editor-shell__*-toggle, editor-page__labels-toggle, editor-page__export) kept stable Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EwZ4jR4KFAPvpjWevfUGX1
27 lines
767 B
TypeScript
27 lines
767 B
TypeScript
import type { ButtonHTMLAttributes } from 'react';
|
|
|
|
interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
/** Localized accessible name; also shown as the hover tooltip. */
|
|
label: string;
|
|
active?: boolean;
|
|
}
|
|
|
|
/** A compact icon-only button (issue #101): aria-label + title carry the
|
|
* localized name, `active` marks toggles that are currently on. */
|
|
export function IconButton({
|
|
label,
|
|
active,
|
|
className,
|
|
children,
|
|
...rest
|
|
}: IconButtonProps): React.JSX.Element {
|
|
const classes = ['icon-button', active ? 'icon-button--active' : '', className ?? '']
|
|
.filter(Boolean)
|
|
.join(' ');
|
|
return (
|
|
<button type="button" className={classes} aria-label={label} title={label} {...rest}>
|
|
{children}
|
|
</button>
|
|
);
|
|
}
|