Add deck synergy suggestions, a responsive deck layout, and undoable library bulk-add
Suggestion scoring is fully offline (tribal/mechanic/archetype/mana-base signals derived at ingest, no external synergy database), with an "unusual picks" mode that surfaces underappreciated cards instead of staples. The deck page's top panels now use a CSS grid so wide windows don't waste horizontal space. Library's bulk add-to-deck can clobber existing deck quantities, so it now offers an undo (snackbar + command palette, the latter with no timeout) that restores each card's prior state exactly. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -279,6 +279,31 @@ export function InfoDialog({
|
||||
);
|
||||
}
|
||||
|
||||
/** Floating snackbar offering to reverse the caller's last action. Auto-
|
||||
* dismisses on a timer managed by the caller (this component is purely
|
||||
* presentational) — pass `null`/omit rendering it once the window lapses. */
|
||||
export function UndoBar({
|
||||
message,
|
||||
onUndo,
|
||||
onDismiss,
|
||||
}: {
|
||||
message: string;
|
||||
onUndo: () => void;
|
||||
onDismiss: () => void;
|
||||
}) {
|
||||
return (
|
||||
<div className="undo-bar">
|
||||
<span>{message}</span>
|
||||
<button className="primary" onClick={onUndo}>
|
||||
Undo
|
||||
</button>
|
||||
<button className="undo-bar-close" onClick={onDismiss} title="Dismiss">
|
||||
×
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
/** Modal shuffle-and-draw sample hand: shows the drawn cards and lets the
|
||||
* caller draw more or reshuffle, on top of a click/Escape-to-close backdrop. */
|
||||
export function SampleHandModal({
|
||||
|
||||
Reference in New Issue
Block a user