Skip to main content

Шахматная доска для 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 (
    builtin_pieces_base_url,
    chessboard,
    list_builtin_piece_sets,
    register_builtin_piece_assets,
)


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():
    # (Опционально) если вы хотите использовать встроенные SVG-наборы из пакета:
    # - register_builtin_piece_assets() создаст shared assets в текущем приложении
    # - builtin_pieces_base_url() даст правильный baseUrl для img src
    register_builtin_piece_assets()
    _sets = list_builtin_piece_sets()
    return rx.vstack(
        chessboard(
            fen=State.fen,
            options={
                "allowDragging": True,
                "enableClickToMove": True,
                "showNotation": True,
                # Пример: используем встроенный набор "merida" из пакета:
                "pieceSet": "assets/merida",
                "piecesBaseUrl": builtin_pieces_base_url(),
            },
            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 API react-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 (default True): включить click-to-move.
  • enableBuiltInHighlights: bool (default True): встроенные подсветки выбранной клетки и последнего хода.
  • boardTheme: "default" | "gray": пресеты цвета доски.
  • boardSize: int | str: размер доски (например 420 или "420px"). Реализуется через options.boardStyle.width/height.
  • responsive: bool (default False): подстраивать размер доски под контейнер (через 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"
    • если вы используете встроенные наборы из пакета, установите:
      • piecesBaseUrl = builtin_pieces_base_url()
      • и вызовите register_builtin_piece_assets()

Встроенные SVG-наборы фигур (в пакете)

Пакет включает несколько популярных наборов: merida, cburnett, maestro, pirouetti.

API:

  • list_builtin_piece_sets() -> list[str]: список доступных наборов
  • builtin_pieces_base_url() -> str: base URL (обычно "/external/reflex_chessboard/pieces")
  • register_builtin_piece_assets(sets: Iterable[str] | None = None): зарегистрировать наборы как shared assets

Options: полезные ключи react-chessboard (pass-through)

Часто используемые:

  • boardOrientation: "white" | "black"
  • showNotation: bool
  • squareStyles: { "e4": { "backgroundColor": "rgba(...)" }, ... }
  • arrows: [{ "startSquare": "e2", "endSquare": "e4", "color": "#00aa00" }, ...]
  • allowDrawingArrows: bool
  • arrowOptions: объект настроек стрелок

Аннотации (рекомендуемый формат на 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reflex_chessboard-0.1.2.tar.gz (47.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

reflex_chessboard-0.1.2-py3-none-any.whl (70.5 kB view details)

Uploaded Python 3

File details

Details for the file reflex_chessboard-0.1.2.tar.gz.

File metadata

  • Download URL: reflex_chessboard-0.1.2.tar.gz
  • Upload date:
  • Size: 47.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for reflex_chessboard-0.1.2.tar.gz
Algorithm Hash digest
SHA256 2c88a57ff8d248f7801f1d973d00acafc3f185dd67cbce198b2856b4825863ce
MD5 bc39ede2712ea9bedd7da5c3a50d8f6e
BLAKE2b-256 264eb30a5ad68745b1abb5a732c8d46c611ed535474d67d8e33e8f4b17a28274

See more details on using hashes here.

Provenance

The following attestation bundles were made for reflex_chessboard-0.1.2.tar.gz:

Publisher: publish.yml on kuruhuru/reflex-chessboard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reflex_chessboard-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for reflex_chessboard-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 09ef7742ec0a9817ef29b93a001ec68dcbfa32b7360f4155bd2ad4377c07f865
MD5 621dca2b72c3cb5efa04a3a608e39266
BLAKE2b-256 0b07f5c0005d476cb32aa167024d19dbfc268f89834ffdf19d09c12435555eff

See more details on using hashes here.

Provenance

The following attestation bundles were made for reflex_chessboard-0.1.2-py3-none-any.whl:

Publisher: publish.yml on kuruhuru/reflex-chessboard

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page