Шахматная доска для Reflex (react-chessboard + chess.js)
Project description
reflex-chessboard
Шахматная доска для Reflex на базе react-chessboard + chess.js.
Цели проекта:
- Drag & Drop с мгновенной проверкой легальности хода (без round-trip на сервер)
- Click-to-move (клики по клеткам)
- Аннотации “как в ChessBase”: стрелки + подсветка клеток (server↔client)
- Переиспользуемый пакет, устанавливаемый из PyPI
Установка
pip install reflex-chessboard
Быстрый старт
import reflex as rx
from reflex_chessboard import chessboard
class State(rx.State):
fen: str = "start"
last_san: str = ""
def on_move(self, payload: dict):
# payload: {from,to,piece,promotion,fen,san}
self.fen = payload.get("fen", self.fen)
self.last_san = payload.get("san") or ""
def index():
return rx.vstack(
chessboard(
fen=State.fen,
options={
"allowDragging": True,
"enableClickToMove": True,
"showNotation": True,
},
on_move=State.on_move,
),
rx.text(State.last_san),
rx.code(State.fen),
)
app = rx.App()
app.add_page(index, route="/")
Запуск:
cd chessboard_demo
uv run reflex run
API (зафиксировано)
Props
fen: str:"start"или FEN.options: dict | None: Options APIreact-chessboard+ расширенияreflex-chessboard.
Events
on_move(payload: dict): отправляется после успешного хода (DnD или click-to-move).- минимальные поля:
from,to,fen,san,promotion,piece
- минимальные поля:
on_arrows_change(payload: dict)(опционально): когда пользователь рисует стрелки.- формат:
{ "arrows": [...] }
- формат:
on_resize(payload: dict)(опционально): изменение размера контейнера вresponsiveрежиме.- формат:
{ "size": 420 }(в пикселях)
- формат:
Options: расширения reflex-chessboard
Это “наши” ключи, которые интерпретируются shim’ом:
enableClickToMove: bool(defaultTrue): включить click-to-move.enableBuiltInHighlights: bool(defaultTrue): встроенные подсветки выбранной клетки и последнего хода.boardTheme: "default" | "gray": пресеты цвета доски.boardSize: int | str: размер доски (например420или"420px"). Реализуется черезoptions.boardStyle.width/height.responsive: bool(defaultFalse): подстраивать размер доски под контейнер (черезResizeObserver). Удобно для resizable контейнеров.
В этом режимеboardSizeигнорируется, размер берётся из контейнера.pieceSet:"merida": встроенный SVG набор изreact-chessboard(defaultPieces)"unicode": символы Unicode (без ассетов)"assets/<name>": SVG из статических ассетов приложения
piecesBaseUrl: str(default"/pieces"): базовый URL дляassets/<name>.- итоговый путь:
"{piecesBaseUrl}/{name}/{wK|bQ|...}.svg"
- итоговый путь:
Options: полезные ключи react-chessboard (pass-through)
Часто используемые:
boardOrientation:"white" | "black"showNotation:boolsquareStyles:{ "e4": { "backgroundColor": "rgba(...)" }, ... }arrows:[{ "startSquare": "e2", "endSquare": "e4", "color": "#00aa00" }, ...]allowDrawingArrows:boolarrowOptions: объект настроек стрелок
Аннотации (рекомендуемый формат на Python)
Нормализованный формат (server-side):
annotations = {
"highlights": [{"square": "e4", "color": "rgba(255,215,0,0.35)"}],
"arrows": [{"startSquare": "e2", "endSquare": "e4", "color": "#00aa00"}],
}
Далее адаптируйте в options:
highlights -> options["squareStyles"]arrows -> options["arrows"]
Важное про CSP
Reflex runtime в текущей версии использует eval() в .web. Если вы встраиваете приложение в окружение со строгим CSP (без 'unsafe-eval'), это может ломать работу. Для PoC/демо используйте стандартный dev-режим Reflex.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file reflex_chessboard-0.1.0-py3-none-any.whl.
File metadata
- Download URL: reflex_chessboard-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5571118409adc0ed415a51a1544430ad20ec7375736655da19fbb73989830d32
|
|
| MD5 |
f6c354197019b358daa78dd098a839ea
|
|
| BLAKE2b-256 |
4124e1d6486ed38263cf4b7268904a77da154f6688af6edb473b747a360fde48
|