The Shudan Goban is the Goban component that powers Sabaki. It is licensed under the MIT license and supports modern browsers. Shudan is written for Preact, but should work with React as well.
Use npm to install:
$ npm install @sabaki/shudan
To use this module, require it as follows:
const { h } = require("preact");
const { Goban } = require("@sabaki/shudan");
const CustomComponent = (props) => (
<Goban vertexSize={24} signMap={props.signMap} />
);Don't forget to include the css/goban.css file in your HTML:
<link rel="stylesheet" href="path/to/css/goban.css" />In this case, we assume you have a bundler set up correctly and Preact installed.
Shudan is fully compatible with React. In your webpack configuration,
additionally alias preact and preact/hooks to react:
module.exports = {
// ...
resolve: {
alias: {
preact: "react",
"preact/hooks": "react",
},
},
};The board is represented by an array of arrays. Each of those subarrays
represent one row, all of the same size. We shall refer to this structure as a
map. For signMap, the subarrays consists of integers: -1 denotes a white
stone, 1 a black stone, and 0 represents an empty vertex
[
[ 0, 0, 1, 0, -1, -1, 1, 0, 0],
[ 1, 0, 1, -1, -1, 1, 1, 1, 0],
[ 0, 0, 1, -1, 0, 1, -1, -1, 0],
[ 1, 1, 1, -1, -1, -1, 1, -1, 0],
[ 1, -1, 1, 1, -1, 1, 1, 1, 0],
[-1, -1, -1, -1, -1, 1, 0, 0, 0],
[ 0, -1, -1, 0, -1, 1, 1, 1, 1],
[ 0, 0, 0, 0, 0, -1, -1, -1, 1],
[ 0, 0, 0, 0, 0, 0, 0, -1, 0]
]Board positions are represented by a vertex, i.e. an array of the form
[x, y] where x and y are non-negative integers, zero-based coordinates.
[0, 0] denotes the upper left position of the board.
Shudan only uses <div>, <span>, <svg>, <rect>, and <circle> elements
with class names prefixed with shudan-. Override the background image for
certain classes to customize the appearance:
.shudan-goban-image {
/* Board texture */
background-image: url("./board.png");
}
.shudan-stone-image.shudan-sign_1 {
/* Black stone */
background-image: url("./black_stone.png");
}
.shudan-stone-image.shudan-sign_-1 {
/* White stone */
background-image: url("./white_stone.png");
}Also override Shudan's default CSS custom properties to adjust the colors:
.shudan-goban {
--shudan-board-border-width: 0.25em;
--shudan-board-border-color: #ca933a;
--shudan-board-background-color: #ebb55b;
--shudan-board-foreground-color: #5e2e0c;
--shudan-black-background-color: #222;
--shudan-black-foreground-color: #eee;
--shudan-white-background-color: #fff;
--shudan-white-foreground-color: #222;
}Shudan adds random classes .shudan-random_{n} where n = 0,...,4 to
.shudan-stone-image. Say, you have white shell stone images with different
shell patterns. You can use the random classes to randomly assign a different
pattern to each stone:
.shudan-stone-image.shudan-sign_-1 {
background-image: url("white_stone_1.png");
}
.shudan-stone-image.shudan-sign_-1.shudan-random_1 {
background-image: url("white_stone_2.png");
}
.shudan-stone-image.shudan-sign_-1.shudan-random_2 {
background-image: url("white_stone_3.png");
}
.shudan-stone-image.shudan-sign_-1.shudan-random_3 {
background-image: url("white_stone_4.png");
}
.shudan-stone-image.shudan-sign_-1.shudan-random_4 {
background-image: url("white_stone_5.png");
}All props are optional. The following props are supported:
-
id<string>Sets the
idattribute of the container element. -
class/className<string>Adds the specified classes to Shudan's own classes to the container element.
-
style<Object>Adds the specified styles to Shudan's own styles to the container element.
-
innerProps<Object>Applies other props to the container element.
-
busy<boolean>- Default:falseDetermines whether component is busy. When busy, no user input are accepted.
-
vertexSize<number>- Default:24The width and height of a single vertex as a pixel number. Adjust this prop to change the size of the component.
If you want to specify a maximum width and height instead, use the
BoundedGobancomponent. -
rangeX<[<integer>, <integer>]>- Default:[0, Infinity]Only vertices with
xvalue inside this range are displayed. -
rangeY<[<integer>, <integer>]>- Default:[0, Infinity]Only vertices with
yvalue inside this range are displayed.
-
showCoordinates<boolean>- Default:falseDetermines rendering of coordinates.
-
coordX<Function>- Default:x => ['A', 'B', 'C', ...][x]A function that determines coordinate label by
xvalue of a vertex. -
coordY<Function>- Default:y => height - yA function that determines coordinate label by
yvalue of a vertex.
-
fuzzyStonePlacement<boolean>- Default:falseWhen set to
true, stones are rendered slightly off-grid. -
animateStonePlacement<boolean>- Default:falseWhen set to
true, stones that are added to the board will slide into place, adjusting nearby stones if necessary. Only works iffuzzyStonePlacementis set totrue. Only triggers animation ifsignMapprop updates with a new object.
-
signMap<Map<integer>>A
mapconsisting of-1(white stone),0(empty field), or1(black stone), representing the stone arrangement on the board. -
markerMap<Map<null | Object>>A
mapconsisting of objects of the following structure:{ type?: <string> | null, label?: <string> | null }
The string specified in
labelis shown as tooltip. Shudan provides styles for the following types:'circle''cross''triangle''square''point''loader''label'
-
paintMap<Map<number>>A
mapconsisting of numbers between-1and1inclusive that will paint the corresponding vertices accordingly.-1will paint the vertex black,0will not paint the vertex, while1will paint the vertex white. -
ghostStoneMap<Map<null | Object>>A
mapconsisting of objects of the following structure:{ sign: <integer>, type?: <string> | null, faint?: <boolean> | null }
signcan be-1(white stone),0(empty field), or1(black stone). Shudan provides styles for the following types:'good''interesting''doubtful''bad'
-
heatMap<Map<null | Object>>A
mapconsisting of objects of the following form:{ strength: <integer>, text?: <string> | null }
Shudan provides styles for
strengthbetween0and9.
-
selectedVertices<Vertex[]>- Default:[]An array of vertices which should be in a selected state.
-
dimmedVertices<Vertex[]>- Default:[]An array of vertices which should be dimmed.
-
lines<Object[]>- Default:[]An array of objects of the following form:
{ v1: <Vertex>, v2: <Vertex>, type: <string> }
Shudan provides default styles for
'line'and'arrow'types.
onVertexClick<Function>onVertexMouseUp<Function>onVertexMouseDown<Function>onVertexMouseMove<Function>onVertexMouseEnter<Function>onVertexMouseLeave<Function>onVertexPointerUp<Function>onVertexPointerDown<Function>onVertexPointerMove<Function>onVertexPointerEnter<Function>onVertexPointerLeave<Function>
These functions will be called when the corresponding event is emitted on a vertex. It will be called with two arguments:
evt- The original eventvertex<Vertex>
Supports all props of Goban, but instead of vertexSize, you have to specify
maxWidth and maxHeight to control the size of the board.
-
maxWidth<number>The maximum width in pixels of the Goban.
-
maxHeight<number>The maximum height in pixels of the Goban.
-
maxVertexSize<number>- Default:InfinityThe maximum
vertexSize.
-
onResized<Function>This function will be called when the component has finished resizing.