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_piece_options,
    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" из пакета:
                **builtin_piece_options("merida"),
            },
            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.

Как использовать в чужом проекте

  1. Зарегистрируйте ассеты (один раз при импорте/компиляции приложения — рекомендуемое место: rxconfig.py):
from reflex_chessboard import register_builtin_piece_assets

register_builtin_piece_assets()
  1. В options:
  • pieceSet = "assets/merida" (или другой из list_builtin_piece_sets())
  • piecesBaseUrl = builtin_pieces_base_url() (обычно ставится автоматически, если не указать)

API:

  • list_builtin_piece_sets() -> list[str]: список доступных наборов
  • builtin_pieces_base_url() -> str: base URL (обычно "/external/reflex_chessboard/pieces")
  • builtin_piece_options(set_name: str) -> dict[str, str]: готовый фрагмент options для встроенного набора
  • 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.4.tar.gz (48.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.4-py3-none-any.whl (71.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: reflex_chessboard-0.1.4.tar.gz
  • Upload date:
  • Size: 48.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.4.tar.gz
Algorithm Hash digest
SHA256 dad69b4b0be4c1255911f3ce52c282267cf0a4517de6a014e8ea626a6768cbfc
MD5 ce3e60907d8d49818c4a4dc7d8bc9eb3
BLAKE2b-256 5a08b6635e56832a42462984016c941ba232a638b41193564929f5528e5eb50f

See more details on using hashes here.

Provenance

The following attestation bundles were made for reflex_chessboard-0.1.4.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.4-py3-none-any.whl.

File metadata

File hashes

Hashes for reflex_chessboard-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 98ac4548a899a34e2068a2ba9fb4fc5909260df37768fbe5daa0af00b47b6f38
MD5 839acd2a993dace322400200164c910f
BLAKE2b-256 05237c8701c268d127e892c204764d71cf2aab9d987d1426cd867beb3683816a

See more details on using hashes here.

Provenance

The following attestation bundles were made for reflex_chessboard-0.1.4-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