feat(client): phantom-piece palette component
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import type { Color, PieceType } from '@blind-chess/shared';
|
||||||
|
import { pieceGlyph } from './pieces.js';
|
||||||
|
import { phantomDrag } from './stores/phantom-drag.svelte.js';
|
||||||
|
|
||||||
|
interface Props { oppColor: Color; }
|
||||||
|
let { oppColor }: Props = $props();
|
||||||
|
|
||||||
|
const TYPES: PieceType[] = ['q', 'r', 'b', 'n', 'p', 'k'];
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="palette">
|
||||||
|
<span class="hint muted">Drag onto your board — your guess of where the opponent is.</span>
|
||||||
|
<div class="pieces">
|
||||||
|
{#each TYPES as t (t)}
|
||||||
|
<!-- Pointer-only drag source — same deliberate a11y trade-off as the
|
||||||
|
phantom spans in Board.svelte (no keyboard drag interaction). -->
|
||||||
|
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
||||||
|
<span
|
||||||
|
class="pp pp-{oppColor}"
|
||||||
|
onpointerdown={(e) => { e.preventDefault(); phantomDrag.start({ kind: 'palette', type: t }, e); }}
|
||||||
|
>{pieceGlyph({ color: oppColor, type: t })}</span>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.palette {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 4px;
|
||||||
|
background: var(--panel);
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 8px 12px;
|
||||||
|
}
|
||||||
|
.hint { font-size: 12px; }
|
||||||
|
.pieces { display: flex; gap: 6px; }
|
||||||
|
.pp {
|
||||||
|
font-size: 30px;
|
||||||
|
line-height: 1;
|
||||||
|
cursor: grab;
|
||||||
|
touch-action: none;
|
||||||
|
opacity: 0.75;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
.pp:hover { opacity: 1; }
|
||||||
|
.pp-w { color: #fafafa; }
|
||||||
|
.pp-b { color: #1a1a1a; }
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user