@hackersheet/next-document-content-kifu 0.1.0-alpha.1 → 0.1.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/kifu/kifu.d.ts +1 -1
- package/dist/cjs/components/kifu/kifu.js +5 -21
- package/dist/cjs/components/kifu-to/kifu-to.js +1 -1
- package/dist/cjs/components/shogi-player/button.d.ts +8 -0
- package/dist/cjs/components/shogi-player/button.js +44 -0
- package/dist/cjs/components/shogi-player/index.d.ts +2 -0
- package/dist/cjs/components/shogi-player/index.js +38 -0
- package/dist/cjs/components/shogi-player/moves-area.d.ts +11 -0
- package/dist/cjs/components/shogi-player/moves-area.js +78 -0
- package/dist/cjs/components/shogi-player/shogi-board-canvas.d.ts +17 -0
- package/dist/cjs/components/shogi-player/shogi-board-canvas.js +180 -0
- package/dist/cjs/components/shogi-player/shogi-hands-canvas.d.ts +16 -0
- package/dist/cjs/components/shogi-player/shogi-hands-canvas.js +140 -0
- package/dist/cjs/components/shogi-player/shogi-player.d.ts +10 -0
- package/dist/cjs/components/shogi-player/shogi-player.js +112 -0
- package/dist/cjs/index.js +3 -3
- package/dist/esm/components/kifu/kifu.d.mts +1 -1
- package/dist/esm/components/kifu/kifu.mjs +5 -21
- package/dist/esm/components/kifu-to/kifu-to.mjs +1 -1
- package/dist/esm/components/shogi-player/button.d.mts +8 -0
- package/dist/esm/components/shogi-player/button.mjs +14 -0
- package/dist/esm/components/shogi-player/index.d.mts +2 -0
- package/dist/esm/components/shogi-player/index.mjs +4 -0
- package/dist/esm/components/shogi-player/moves-area.d.mts +11 -0
- package/dist/esm/components/shogi-player/moves-area.mjs +44 -0
- package/dist/esm/components/shogi-player/shogi-board-canvas.d.mts +17 -0
- package/dist/esm/components/shogi-player/shogi-board-canvas.mjs +150 -0
- package/dist/esm/components/shogi-player/shogi-hands-canvas.d.mts +16 -0
- package/dist/esm/components/shogi-player/shogi-hands-canvas.mjs +110 -0
- package/dist/esm/components/shogi-player/shogi-player.d.mts +10 -0
- package/dist/esm/components/shogi-player/shogi-player.mjs +82 -0
- package/package.json +13 -13
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { JKFPlayer } from "json-kifu-format";
|
|
3
|
+
import React, { useCallback, useEffect, useState } from "react";
|
|
4
|
+
import Button from "./button";
|
|
5
|
+
import { MovesArea } from "./moves-area";
|
|
6
|
+
import ShogiBoardCanvas from "./shogi-board-canvas";
|
|
7
|
+
import ShogiHandsCanvas from "./shogi-hands-canvas";
|
|
8
|
+
function ShogiPlayer(props) {
|
|
9
|
+
const [player] = useState(JKFPlayer.parse(props.kifuText.trim()));
|
|
10
|
+
const [pieces, setPieces] = useState(player.shogi.board);
|
|
11
|
+
const [hands, setHands] = useState(player.shogi.hands);
|
|
12
|
+
const [moves, setMoves] = useState(player.kifu.moves);
|
|
13
|
+
const [tesuu, setTesuu] = useState(player.tesuu);
|
|
14
|
+
const [currentMove, setCurrentMove] = useState(player.getMove());
|
|
15
|
+
const [isSente, setIsSente] = useState(true);
|
|
16
|
+
const [maxTesuu, setMaxTesuu] = useState(player.getMaxTesuu());
|
|
17
|
+
const [comments, setComments] = useState(player.getComments());
|
|
18
|
+
const size = props.size ? props.size : 360;
|
|
19
|
+
const updateState = () => {
|
|
20
|
+
setPieces([...player.shogi.board]);
|
|
21
|
+
setHands([...player.shogi.hands]);
|
|
22
|
+
setMoves([...player.kifu.moves]);
|
|
23
|
+
setCurrentMove(player.getMove());
|
|
24
|
+
setMaxTesuu(player.getMaxTesuu());
|
|
25
|
+
setComments(player.getComments());
|
|
26
|
+
setTesuu(player.tesuu);
|
|
27
|
+
};
|
|
28
|
+
const handleForward = () => {
|
|
29
|
+
player.forward();
|
|
30
|
+
updateState();
|
|
31
|
+
};
|
|
32
|
+
const handleBackward = () => {
|
|
33
|
+
player.backward();
|
|
34
|
+
updateState();
|
|
35
|
+
};
|
|
36
|
+
const handleGoto = (tesuu2) => {
|
|
37
|
+
player.goto(tesuu2);
|
|
38
|
+
updateState();
|
|
39
|
+
};
|
|
40
|
+
const handeleToggle = () => {
|
|
41
|
+
setIsSente(!isSente);
|
|
42
|
+
updateState();
|
|
43
|
+
};
|
|
44
|
+
const handleKeydown = useCallback(
|
|
45
|
+
(event) => {
|
|
46
|
+
event.preventDefault();
|
|
47
|
+
event.stopPropagation();
|
|
48
|
+
switch (event.key) {
|
|
49
|
+
case "Up":
|
|
50
|
+
case "ArrowUp":
|
|
51
|
+
handleGoto(0);
|
|
52
|
+
break;
|
|
53
|
+
case "Down":
|
|
54
|
+
case "ArrowDown":
|
|
55
|
+
handleGoto(maxTesuu);
|
|
56
|
+
break;
|
|
57
|
+
case "Left":
|
|
58
|
+
case "ArrowLeft":
|
|
59
|
+
handleBackward();
|
|
60
|
+
break;
|
|
61
|
+
case " ":
|
|
62
|
+
case "Right":
|
|
63
|
+
case "ArrowRight":
|
|
64
|
+
handleForward();
|
|
65
|
+
break;
|
|
66
|
+
case "r":
|
|
67
|
+
handeleToggle();
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
[maxTesuu, isSente]
|
|
72
|
+
);
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
if (props.tesuu !== void 0) {
|
|
75
|
+
handleGoto(props.tesuu);
|
|
76
|
+
}
|
|
77
|
+
}, [props.tesuu]);
|
|
78
|
+
return /* @__PURE__ */ React.createElement("div", { className: "flex w-fit", tabIndex: 1, onKeyDown: handleKeydown }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React.createElement("div", { className: "bg-[#f9d27a] text-black text-xs text-right p-1" }, isSente ? "\u2616 " + player.kifu.header["\u5F8C\u624B"] : "\u2617 " + player.kifu.header["\u5148\u624B"]), /* @__PURE__ */ React.createElement(ShogiHandsCanvas, { size, hands, isSente, isTop: true }), /* @__PURE__ */ React.createElement(ShogiBoardCanvas, { size, pieces, isSente, currentMove }), /* @__PURE__ */ React.createElement(ShogiHandsCanvas, { size, hands, isSente, isTop: false }), /* @__PURE__ */ React.createElement("div", { className: "bg-[#f9d27a] text-black text-xs p-1" }, isSente ? "\u2617 " + player.kifu.header["\u5148\u624B"] : "\u2616 " + player.kifu.header["\u5F8C\u624B"])), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col w-fit bg-[#f9d27a] p-4 gap-4" }, /* @__PURE__ */ React.createElement("div", { className: "flex-1 relative w-full" }, /* @__PURE__ */ React.createElement(MovesArea, { moves, tesuu, onTesuuChange: handleGoto })), /* @__PURE__ */ React.createElement("div", { className: "text-black border-black border-2 p-1 text-xs max-h-40 w-0 min-w-full overflow-auto" }, comments.map((comment, index) => /* @__PURE__ */ React.createElement("div", { key: index }, comment)), comments.length === 0 && tesuu !== 0 && /* @__PURE__ */ React.createElement("div", null, "\xA0"), tesuu === 0 && Object.entries(player.kifu.header).map(([key, value], i) => /* @__PURE__ */ React.createElement("div", { key: i, className: "whitespace-nowrap" }, key, ": ", value))), /* @__PURE__ */ React.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React.createElement(Button, { onClick: () => handleGoto(0) }, "\u6700\u521D"), /* @__PURE__ */ React.createElement(Button, { onClick: handleBackward }, "\u524D"), /* @__PURE__ */ React.createElement(Button, { onClick: handleForward }, "\u6B21"), /* @__PURE__ */ React.createElement(Button, { onClick: () => handleGoto(maxTesuu) }, "\u6700\u5F8C"), /* @__PURE__ */ React.createElement(Button, { onClick: handeleToggle }, "\u53CD\u8EE2"))));
|
|
79
|
+
}
|
|
80
|
+
export {
|
|
81
|
+
ShogiPlayer as default
|
|
82
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hackersheet/next-document-content-kifu",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.10",
|
|
4
4
|
"description": "Hacker Sheet document content kifu components for Next.js",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"repository": {
|
|
@@ -24,22 +24,22 @@
|
|
|
24
24
|
"dist"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
27
|
+
"shogi.js": "^5.4.1",
|
|
28
|
+
"json-kifu-format": "^5.4.1",
|
|
29
|
+
"@hackersheet/react-document-content": "0.1.0-alpha.13",
|
|
30
|
+
"@hackersheet/core": "0.1.0-alpha.11"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
|
-
"@types/react": "^
|
|
33
|
-
"@types/react-dom": "^
|
|
34
|
-
"next": "
|
|
35
|
-
"react": "^
|
|
36
|
-
"react-dom": "^
|
|
37
|
-
"@hackersheet/eslint-config-custom": "0.0.0"
|
|
33
|
+
"@types/react": "^19.2.0",
|
|
34
|
+
"@types/react-dom": "^19.2.0",
|
|
35
|
+
"next": "^15.5.4",
|
|
36
|
+
"react": "^19.2.0",
|
|
37
|
+
"react-dom": "^19.2.0"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"next": "^
|
|
41
|
-
"react": "^
|
|
42
|
-
"react-dom": "^
|
|
40
|
+
"next": "^15.0.0",
|
|
41
|
+
"react": "^19.0.0",
|
|
42
|
+
"react-dom": "^19.0.0"
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
45
45
|
"build": "rm -rf ./dist && pnpm tsup",
|