Шахматная доска для 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 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" - если вы используете встроенные наборы из пакета, установите:
piecesBaseUrl = builtin_pieces_base_url()- и вызовите
register_builtin_piece_assets()
- итоговый путь:
Встроенные SVG-наборы фигур (в пакете)
Пакет включает несколько популярных наборов: merida, cburnett, maestro, pirouetti.
Как использовать в чужом проекте
- Зарегистрируйте ассеты (один раз при импорте/компиляции приложения — рекомендуемое место:
rxconfig.py):
from reflex_chessboard import register_builtin_piece_assets
register_builtin_piece_assets()
- В
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: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 Distribution
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.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dad69b4b0be4c1255911f3ce52c282267cf0a4517de6a014e8ea626a6768cbfc
|
|
| MD5 |
ce3e60907d8d49818c4a4dc7d8bc9eb3
|
|
| BLAKE2b-256 |
5a08b6635e56832a42462984016c941ba232a638b41193564929f5528e5eb50f
|
Provenance
The following attestation bundles were made for reflex_chessboard-0.1.4.tar.gz:
Publisher:
publish.yml on kuruhuru/reflex-chessboard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
reflex_chessboard-0.1.4.tar.gz -
Subject digest:
dad69b4b0be4c1255911f3ce52c282267cf0a4517de6a014e8ea626a6768cbfc - Sigstore transparency entry: 779412580
- Sigstore integration time:
-
Permalink:
kuruhuru/reflex-chessboard@6a153ee09dcf1295c33e4c013eb9cb12098db45d -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/kuruhuru
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6a153ee09dcf1295c33e4c013eb9cb12098db45d -
Trigger Event:
push
-
Statement type:
File details
Details for the file reflex_chessboard-0.1.4-py3-none-any.whl.
File metadata
- Download URL: reflex_chessboard-0.1.4-py3-none-any.whl
- Upload date:
- Size: 71.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98ac4548a899a34e2068a2ba9fb4fc5909260df37768fbe5daa0af00b47b6f38
|
|
| MD5 |
839acd2a993dace322400200164c910f
|
|
| BLAKE2b-256 |
05237c8701c268d127e892c204764d71cf2aab9d987d1426cd867beb3683816a
|
Provenance
The following attestation bundles were made for reflex_chessboard-0.1.4-py3-none-any.whl:
Publisher:
publish.yml on kuruhuru/reflex-chessboard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
reflex_chessboard-0.1.4-py3-none-any.whl -
Subject digest:
98ac4548a899a34e2068a2ba9fb4fc5909260df37768fbe5daa0af00b47b6f38 - Sigstore transparency entry: 779412581
- Sigstore integration time:
-
Permalink:
kuruhuru/reflex-chessboard@6a153ee09dcf1295c33e4c013eb9cb12098db45d -
Branch / Tag:
refs/tags/v0.1.4 - Owner: https://github.com/kuruhuru
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6a153ee09dcf1295c33e4c013eb9cb12098db45d -
Trigger Event:
push
-
Statement type: