@hackersheet/next-document-content-kifu 0.1.0-alpha.1 → 0.1.0-alpha.11

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.
Files changed (32) hide show
  1. package/dist/cjs/components/kifu/kifu.d.ts +1 -1
  2. package/dist/cjs/components/kifu/kifu.js +5 -21
  3. package/dist/cjs/components/kifu-to/kifu-to.js +1 -1
  4. package/dist/cjs/components/shogi-player/button.d.ts +8 -0
  5. package/dist/cjs/components/shogi-player/button.js +44 -0
  6. package/dist/cjs/components/shogi-player/index.d.ts +2 -0
  7. package/dist/cjs/components/shogi-player/index.js +38 -0
  8. package/dist/cjs/components/shogi-player/moves-area.d.ts +11 -0
  9. package/dist/cjs/components/shogi-player/moves-area.js +78 -0
  10. package/dist/cjs/components/shogi-player/shogi-board-canvas.d.ts +17 -0
  11. package/dist/cjs/components/shogi-player/shogi-board-canvas.js +180 -0
  12. package/dist/cjs/components/shogi-player/shogi-hands-canvas.d.ts +16 -0
  13. package/dist/cjs/components/shogi-player/shogi-hands-canvas.js +140 -0
  14. package/dist/cjs/components/shogi-player/shogi-player.d.ts +10 -0
  15. package/dist/cjs/components/shogi-player/shogi-player.js +112 -0
  16. package/dist/cjs/index.js +3 -3
  17. package/dist/esm/components/kifu/kifu.d.mts +1 -1
  18. package/dist/esm/components/kifu/kifu.mjs +5 -21
  19. package/dist/esm/components/kifu-to/kifu-to.mjs +1 -1
  20. package/dist/esm/components/shogi-player/button.d.mts +8 -0
  21. package/dist/esm/components/shogi-player/button.mjs +14 -0
  22. package/dist/esm/components/shogi-player/index.d.mts +2 -0
  23. package/dist/esm/components/shogi-player/index.mjs +4 -0
  24. package/dist/esm/components/shogi-player/moves-area.d.mts +11 -0
  25. package/dist/esm/components/shogi-player/moves-area.mjs +44 -0
  26. package/dist/esm/components/shogi-player/shogi-board-canvas.d.mts +17 -0
  27. package/dist/esm/components/shogi-player/shogi-board-canvas.mjs +150 -0
  28. package/dist/esm/components/shogi-player/shogi-hands-canvas.d.mts +16 -0
  29. package/dist/esm/components/shogi-player/shogi-hands-canvas.mjs +110 -0
  30. package/dist/esm/components/shogi-player/shogi-player.d.mts +10 -0
  31. package/dist/esm/components/shogi-player/shogi-player.mjs +82 -0
  32. 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 flex-col md:flex-row 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 md:w-fit bg-[#f9d27a] p-4 gap-4" }, /* @__PURE__ */ React.createElement("div", { className: "hidden md:block flex-1 relative w-full" }, /* @__PURE__ */ React.createElement(MovesArea, { moves, tesuu, onTesuuChange: handleGoto })), /* @__PURE__ */ React.createElement("div", { className: "hidden md:block 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.1",
3
+ "version": "0.1.0-alpha.11",
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
- "@hackersheet/core": "alpha",
28
- "@hackersheet/react-document-content": "alpha",
29
- "kifu-for-js": "^5.4.1"
27
+ "shogi.js": "^5.4.1",
28
+ "json-kifu-format": "^5.4.1",
29
+ "@hackersheet/core": "0.1.0-alpha.11",
30
+ "@hackersheet/react-document-content": "0.1.0-alpha.13"
30
31
  },
31
32
  "devDependencies": {
32
- "@types/react": "^18.0.0",
33
- "@types/react-dom": "^18.0.0",
34
- "next": "14.2.5",
35
- "react": "^18.0.0",
36
- "react-dom": "^18.0.0",
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": "^14.0.0",
41
- "react": "^18.0.0",
42
- "react-dom": "^18.0.0"
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",