generated from nhcarrigan/template
feat: v1 prototype — core game systems #30
@@ -35,6 +35,7 @@ export const CharacterSheetPanel = (): React.JSX.Element => {
|
||||
const [saving, setSaving] = useState(false);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
const [saved, setSaved] = useState(false);
|
||||
const [copied, setCopied] = useState(false);
|
||||
const savedSettingsRef = useRef<ProfileSettings>({ ...DEFAULT_PROFILE_SETTINGS });
|
||||
|
||||
useEffect(() => {
|
||||
@@ -238,9 +239,24 @@ export const CharacterSheetPanel = (): React.JSX.Element => {
|
||||
<section className="panel character-sheet-panel">
|
||||
<div className="panel-header">
|
||||
<h2>📋 Character Sheet</h2>
|
||||
<button className="character-sheet-edit-btn" onClick={handleEdit} type="button">
|
||||
✏️ Edit
|
||||
</button>
|
||||
<div className="character-sheet-header-actions">
|
||||
<button
|
||||
className="character-sheet-edit-btn"
|
||||
onClick={() => {
|
||||
const url = `${window.location.origin}/character/${player?.discordId ?? ""}`;
|
||||
void navigator.clipboard.writeText(url).then(() => {
|
||||
setCopied(true);
|
||||
setTimeout(() => { setCopied(false); }, 2000);
|
||||
});
|
||||
}}
|
||||
type="button"
|
||||
>
|
||||
{copied ? "✓ Copied!" : "🔗 Share"}
|
||||
</button>
|
||||
<button className="character-sheet-edit-btn" onClick={handleEdit} type="button">
|
||||
✏️ Edit
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="character-sheet-view">
|
||||
|
||||
@@ -3079,6 +3079,11 @@ body {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.character-sheet-header-actions {
|
||||
display: flex;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.character-sheet-edit-btn {
|
||||
background: var(--colour-surface);
|
||||
border: 1px solid var(--colour-border);
|
||||
|
||||
Reference in New Issue
Block a user