@dxos/plugin-chess 0.8.4-main.5ea62a8 → 0.8.4-main.72ec0f3
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/lib/browser/{ChessboardContainer-HBHUXBG3.mjs → ChessboardContainer-5YXEM4VR.mjs} +20 -20
- package/dist/lib/browser/ChessboardContainer-5YXEM4VR.mjs.map +7 -0
- package/dist/lib/browser/blueprint-definition-FD4TL5EE.mjs +11 -0
- package/dist/lib/browser/{chunk-UDWRTBWA.mjs → chunk-5DOZV3PW.mjs} +113 -143
- package/dist/lib/browser/chunk-5DOZV3PW.mjs.map +7 -0
- package/dist/lib/browser/{chunk-PE3IWOFR.mjs → chunk-DUO4WTAM.mjs} +5 -5
- package/dist/lib/browser/chunk-DUO4WTAM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-T275KG4U.mjs → chunk-FBLAVAMY.mjs} +12 -12
- package/dist/lib/browser/chunk-FBLAVAMY.mjs.map +7 -0
- package/dist/lib/browser/{chunk-H65TQTPW.mjs → chunk-Q5TZCIH7.mjs} +2 -2
- package/dist/lib/browser/{chunk-VTIITHYS.mjs → chunk-TIIGNOGK.mjs} +30 -14
- package/dist/lib/browser/chunk-TIIGNOGK.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +22 -21
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-DA5H5633.mjs → intent-resolver-GXZN2EBT.mjs} +5 -5
- package/dist/lib/browser/{intent-resolver-DA5H5633.mjs.map → intent-resolver-GXZN2EBT.mjs.map} +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-FSDNVKZN.mjs → react-surface-KTTAUHAA.mjs} +7 -7
- package/dist/lib/browser/{react-surface-FSDNVKZN.mjs.map → react-surface-KTTAUHAA.mjs.map} +1 -1
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{ChessboardContainer-PF75AEMW.mjs → ChessboardContainer-7OQ6TOKB.mjs} +20 -20
- package/dist/lib/node-esm/ChessboardContainer-7OQ6TOKB.mjs.map +7 -0
- package/dist/lib/node-esm/blueprint-definition-O7ZM3HUF.mjs +12 -0
- package/dist/lib/node-esm/{chunk-PIRITYWV.mjs → chunk-F4C2HVZL.mjs} +113 -143
- package/dist/lib/node-esm/chunk-F4C2HVZL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-6OWCPDUA.mjs → chunk-KNOOJFIR.mjs} +5 -5
- package/dist/lib/node-esm/chunk-KNOOJFIR.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-5DYLCQBR.mjs → chunk-MP3A3AGA.mjs} +12 -12
- package/dist/lib/node-esm/chunk-MP3A3AGA.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-3NZRGOSV.mjs → chunk-RTCAAOLF.mjs} +30 -14
- package/dist/lib/node-esm/chunk-RTCAAOLF.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-IFDV434X.mjs → chunk-VVXTAVIS.mjs} +2 -2
- package/dist/lib/node-esm/index.mjs +22 -21
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-PODONUD3.mjs → intent-resolver-HK5L6P6Z.mjs} +5 -5
- package/dist/lib/node-esm/{intent-resolver-PODONUD3.mjs.map → intent-resolver-HK5L6P6Z.mjs.map} +1 -1
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-2TW3PIGQ.mjs → react-surface-VO4PSY6O.mjs} +7 -7
- package/dist/lib/node-esm/{react-surface-2TW3PIGQ.mjs.map → react-surface-VO4PSY6O.mjs.map} +1 -1
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/ChessPlugin.d.ts +1 -1
- package/dist/types/src/ChessPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +2 -2
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
- package/dist/types/src/components/Card.stories.d.ts +11 -3
- package/dist/types/src/components/Card.stories.d.ts.map +1 -1
- package/dist/types/src/components/Chessboard.d.ts +11 -12
- package/dist/types/src/components/Chessboard.d.ts.map +1 -1
- package/dist/types/src/components/Chessboard.stories.d.ts +11 -8
- package/dist/types/src/components/Chessboard.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChessboardArticle.d.ts +2 -1
- package/dist/types/src/components/ChessboardArticle.d.ts.map +1 -1
- package/dist/types/src/components/{ChessboardInfo.d.ts → Info.d.ts} +5 -5
- package/dist/types/src/components/Info.d.ts.map +1 -0
- package/dist/types/src/functions/create.d.ts +2 -2
- package/dist/types/src/functions/create.d.ts.map +1 -1
- package/dist/types/src/functions/move.d.ts +1 -1
- package/dist/types/src/functions/move.d.ts.map +1 -1
- package/dist/types/src/functions/play.d.ts +2 -1
- package/dist/types/src/functions/play.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +0 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +8 -6
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Chess.d.ts +2 -2
- package/dist/types/src/types/Chess.d.ts.map +1 -1
- package/dist/types/src/types/ChessAction.d.ts +1 -1
- package/dist/types/src/types/ChessAction.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +42 -36
- package/src/ChessPlugin.tsx +47 -47
- package/src/capabilities/artifact-definition.ts +3 -2
- package/src/capabilities/blueprint-definition.ts +3 -3
- package/src/components/Card.stories.tsx +3 -5
- package/src/components/Chessboard.stories.tsx +3 -4
- package/src/components/Chessboard.tsx +79 -55
- package/src/components/ChessboardArticle.tsx +22 -18
- package/src/components/ChessboardContainer.tsx +1 -1
- package/src/components/{ChessboardInfo.tsx → Info.tsx} +103 -40
- package/src/functions/create.ts +4 -2
- package/src/functions/move.ts +4 -2
- package/src/functions/play.ts +13 -3
- package/src/meta.ts +4 -4
- package/src/translations.ts +8 -6
- package/src/types/Chess.ts +20 -26
- package/src/types/ChessAction.ts +1 -1
- package/dist/lib/browser/ChessboardContainer-HBHUXBG3.mjs.map +0 -7
- package/dist/lib/browser/blueprint-definition-W5PLLXPP.mjs +0 -11
- package/dist/lib/browser/chunk-PE3IWOFR.mjs.map +0 -7
- package/dist/lib/browser/chunk-T275KG4U.mjs.map +0 -7
- package/dist/lib/browser/chunk-UDWRTBWA.mjs.map +0 -7
- package/dist/lib/browser/chunk-VTIITHYS.mjs.map +0 -7
- package/dist/lib/node-esm/ChessboardContainer-PF75AEMW.mjs.map +0 -7
- package/dist/lib/node-esm/blueprint-definition-PR5YZC6M.mjs +0 -12
- package/dist/lib/node-esm/chunk-3NZRGOSV.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5DYLCQBR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6OWCPDUA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PIRITYWV.mjs.map +0 -7
- package/dist/types/src/components/ChessboardInfo.d.ts.map +0 -1
- package/dist/types/src/components/ChessboardPlayers.d.ts +0 -8
- package/dist/types/src/components/ChessboardPlayers.d.ts.map +0 -1
- package/src/components/ChessboardPlayers.tsx +0 -98
- /package/dist/lib/browser/{blueprint-definition-W5PLLXPP.mjs.map → blueprint-definition-FD4TL5EE.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-H65TQTPW.mjs.map → chunk-Q5TZCIH7.mjs.map} +0 -0
- /package/dist/lib/node-esm/{blueprint-definition-PR5YZC6M.mjs.map → blueprint-definition-O7ZM3HUF.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-IFDV434X.mjs.map → chunk-VVXTAVIS.mjs.map} +0 -0
package/dist/lib/browser/{ChessboardContainer-HBHUXBG3.mjs → ChessboardContainer-5YXEM4VR.mjs}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Chessboard
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-5DOZV3PW.mjs";
|
|
4
4
|
import {
|
|
5
5
|
meta
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-DUO4WTAM.mjs";
|
|
7
7
|
|
|
8
8
|
// src/components/ChessboardContainer.tsx
|
|
9
9
|
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
@@ -13,10 +13,10 @@ import { getSpace } from "@dxos/react-client/echo";
|
|
|
13
13
|
// src/components/ChessboardArticle.tsx
|
|
14
14
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
15
15
|
import React, { useCallback, useRef, useState } from "react";
|
|
16
|
-
import {
|
|
16
|
+
import { Toolbar, useTranslation } from "@dxos/react-ui";
|
|
17
17
|
import { StackItem } from "@dxos/react-ui-stack";
|
|
18
18
|
import { mx } from "@dxos/react-ui-theme";
|
|
19
|
-
var ChessboardArticle = ({ game }) => {
|
|
19
|
+
var ChessboardArticle = ({ game, role }) => {
|
|
20
20
|
var _effect = _useSignals();
|
|
21
21
|
try {
|
|
22
22
|
const { t } = useTranslation(meta.id);
|
|
@@ -27,13 +27,22 @@ var ChessboardArticle = ({ game }) => {
|
|
|
27
27
|
controller.current?.setMoveNumber(index);
|
|
28
28
|
}, []);
|
|
29
29
|
return /* @__PURE__ */ React.createElement(StackItem.Content, {
|
|
30
|
-
|
|
30
|
+
toolbar: true,
|
|
31
|
+
classNames: "@container"
|
|
31
32
|
}, /* @__PURE__ */ React.createElement(Chessboard.Root, {
|
|
32
33
|
game,
|
|
33
34
|
ref: controller
|
|
34
|
-
}, /* @__PURE__ */ React.createElement(
|
|
35
|
-
|
|
35
|
+
}, /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(Toolbar.IconButton, {
|
|
36
|
+
icon: "ph--info--regular",
|
|
37
|
+
iconOnly: true,
|
|
38
|
+
label: t("toggle info button"),
|
|
39
|
+
disabled: open,
|
|
40
|
+
classNames: mx("invisible @3xl:visible"),
|
|
41
|
+
onClick: () => setOpen((open2) => !open2)
|
|
42
|
+
})), /* @__PURE__ */ React.createElement("div", {
|
|
43
|
+
className: mx("grid bs-full is-full gap-2", open && "@3xl:grid-cols-[1fr_320px]", role === "section" && "aspect-square", role === "section" && open && "@3xl:aspect-auto")
|
|
36
44
|
}, /* @__PURE__ */ React.createElement(Chessboard.Content, null, /* @__PURE__ */ React.createElement(Chessboard.Board, {
|
|
45
|
+
classNames: "m-4 rounded-sm overflow-hidden",
|
|
37
46
|
orientation
|
|
38
47
|
})), open && /* @__PURE__ */ React.createElement("div", {
|
|
39
48
|
className: "hidden @3xl:flex flex-col p-8 justify-center items-center overflow-hidden"
|
|
@@ -44,17 +53,7 @@ var ChessboardArticle = ({ game }) => {
|
|
|
44
53
|
onOrientationChange: setOrientation,
|
|
45
54
|
onClose: () => setOpen(false),
|
|
46
55
|
onSelect: handleSelect
|
|
47
|
-
}))
|
|
48
|
-
className: "flex justify-center items-center"
|
|
49
|
-
}, /* @__PURE__ */ React.createElement(Chessboard.Players, null, /* @__PURE__ */ React.createElement(IconButton, {
|
|
50
|
-
variant: "ghost",
|
|
51
|
-
icon: "ph--info--regular",
|
|
52
|
-
iconOnly: true,
|
|
53
|
-
label: t("button toggle info"),
|
|
54
|
-
size: 6,
|
|
55
|
-
classNames: mx("invisible", !open && "@3xl:visible"),
|
|
56
|
-
onClick: () => setOpen((open2) => !open2)
|
|
57
|
-
}))))));
|
|
56
|
+
})))));
|
|
58
57
|
} finally {
|
|
59
58
|
_effect.f();
|
|
60
59
|
}
|
|
@@ -80,7 +79,8 @@ var ChessboardContainer = ({ game, role }) => {
|
|
|
80
79
|
}
|
|
81
80
|
default: {
|
|
82
81
|
return /* @__PURE__ */ React2.createElement(ChessboardArticle, {
|
|
83
|
-
game
|
|
82
|
+
game,
|
|
83
|
+
role
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
86
|
}
|
|
@@ -93,4 +93,4 @@ export {
|
|
|
93
93
|
ChessboardContainer,
|
|
94
94
|
ChessboardContainer_default as default
|
|
95
95
|
};
|
|
96
|
-
//# sourceMappingURL=ChessboardContainer-
|
|
96
|
+
//# sourceMappingURL=ChessboardContainer-5YXEM4VR.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/ChessboardContainer.tsx", "../../../src/components/ChessboardArticle.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { getSpace } from '@dxos/react-client/echo';\n\nimport { type Chess } from '../types';\n\nimport { Chessboard } from './Chessboard';\nimport { ChessboardArticle } from './ChessboardArticle';\n\nexport type ChessboardContainerProps = {\n game: Chess.Game;\n role?: string;\n};\n\nexport const ChessboardContainer = ({ game, role }: ChessboardContainerProps) => {\n const space = getSpace(game);\n if (!space) {\n return null;\n }\n\n switch (role) {\n case 'card--popover':\n case 'card--intrinsic':\n case 'card--extrinsic': {\n return (\n <Chessboard.Root game={game}>\n <Chessboard.Content role={role}>\n <Chessboard.Board />\n </Chessboard.Content>\n </Chessboard.Root>\n );\n }\n\n default: {\n return <ChessboardArticle game={game} role={role} />;\n }\n }\n};\n\nexport default ChessboardContainer;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useRef, useState } from 'react';\n\nimport { Toolbar, useTranslation } from '@dxos/react-ui';\nimport { type Player } from '@dxos/react-ui-gameboard';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../meta';\nimport { type Chess } from '../types';\n\nimport { Chessboard, type ChessboardController, type ChessboardInfoProps } from './Chessboard';\n\nexport const ChessboardArticle = ({ game, role }: { game: Chess.Game; role?: string }) => {\n const { t } = useTranslation(meta.id);\n const [orientation, setOrientation] = useState<Player>('white');\n const [open, setOpen] = useState(true);\n const controller = useRef<ChessboardController>(null);\n\n // TODO(burdon): Keyboard handler.\n const handleSelect = useCallback<NonNullable<ChessboardInfoProps['onSelect']>>((index) => {\n controller.current?.setMoveNumber(index);\n }, []);\n\n return (\n <StackItem.Content toolbar classNames='@container'>\n <Chessboard.Root game={game} ref={controller}>\n <Toolbar.Root>\n <Toolbar.IconButton\n icon='ph--info--regular'\n iconOnly\n label={t('toggle info button')}\n disabled={open}\n classNames={mx('invisible @3xl:visible')}\n onClick={() => setOpen((open) => !open)}\n />\n </Toolbar.Root>\n <div\n className={mx(\n 'grid bs-full is-full gap-2',\n open && '@3xl:grid-cols-[1fr_320px]',\n role === 'section' && 'aspect-square',\n role === 'section' && open && '@3xl:aspect-auto',\n )}\n >\n <Chessboard.Content>\n <Chessboard.Board classNames='m-4 rounded-sm overflow-hidden' orientation={orientation} />\n </Chessboard.Content>\n {open && (\n <div className='hidden @3xl:flex flex-col p-8 justify-center items-center overflow-hidden'>\n <Chessboard.Info\n orientation={orientation}\n min={8}\n max={8}\n onOrientationChange={setOrientation}\n onClose={() => setOpen(false)}\n onSelect={handleSelect}\n />\n </div>\n )}\n </div>\n </Chessboard.Root>\n </StackItem.Content>\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;AAIA,OAAOA,YAAW;AAElB,SAASC,gBAAgB;;;;ACFzB,OAAOC,SAASC,aAAaC,QAAQC,gBAAgB;AAErD,SAASC,SAASC,sBAAsB;AAExC,SAASC,iBAAiB;AAC1B,SAASC,UAAU;AAOZ,IAAMC,oBAAoB,CAAC,EAAEC,MAAMC,KAAI,MAAuC;;;AACnF,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,UAAM,CAACC,aAAaC,cAAAA,IAAkBC,SAAiB,OAAA;AACvD,UAAM,CAACC,MAAMC,OAAAA,IAAWF,SAAS,IAAA;AACjC,UAAMG,aAAaC,OAA6B,IAAA;AAGhD,UAAMC,eAAeC,YAA0D,CAACC,UAAAA;AAC9EJ,iBAAWK,SAASC,cAAcF,KAAAA;IACpC,GAAG,CAAA,CAAE;AAEL,WACE,sBAAA,cAACG,UAAUC,SAAO;MAACC,SAAAA;MAAQC,YAAW;OACpC,sBAAA,cAACC,WAAWC,MAAI;MAACvB;MAAYwB,KAAKb;OAChC,sBAAA,cAACc,QAAQF,MAAI,MACX,sBAAA,cAACE,QAAQC,YAAU;MACjBC,MAAK;MACLC,UAAAA;MACAC,OAAO3B,EAAE,oBAAA;MACT4B,UAAUrB;MACVY,YAAYU,GAAG,wBAAA;MACfC,SAAS,MAAMtB,QAAQ,CAACD,UAAS,CAACA,KAAAA;SAGtC,sBAAA,cAACwB,OAAAA;MACCC,WAAWH,GACT,8BACAtB,QAAQ,8BACRR,SAAS,aAAa,iBACtBA,SAAS,aAAaQ,QAAQ,kBAAA;OAGhC,sBAAA,cAACa,WAAWH,SAAO,MACjB,sBAAA,cAACG,WAAWa,OAAK;MAACd,YAAW;MAAiCf;SAE/DG,QACC,sBAAA,cAACwB,OAAAA;MAAIC,WAAU;OACb,sBAAA,cAACZ,WAAWc,MAAI;MACd9B;MACA+B,KAAK;MACLC,KAAK;MACLC,qBAAqBhC;MACrBiC,SAAS,MAAM9B,QAAQ,KAAA;MACvB+B,UAAU5B;;;;;AAQ1B;;;ADjDO,IAAM6B,sBAAsB,CAAC,EAAEC,MAAMC,KAAI,MAA4B;;;AAC1E,UAAMC,QAAQC,SAASH,IAAAA;AACvB,QAAI,CAACE,OAAO;AACV,aAAO;IACT;AAEA,YAAQD,MAAAA;MACN,KAAK;MACL,KAAK;MACL,KAAK,mBAAmB;AACtB,eACE,gBAAAG,OAAA,cAACC,WAAWC,MAAI;UAACN;WACf,gBAAAI,OAAA,cAACC,WAAWE,SAAO;UAACN;WAClB,gBAAAG,OAAA,cAACC,WAAWG,OAAK,IAAA,CAAA,CAAA;MAIzB;MAEA,SAAS;AACP,eAAO,gBAAAJ,OAAA,cAACK,mBAAAA;UAAkBT;UAAYC;;MACxC;IACF;;;;AACF;AAEA,IAAA,8BAAeF;",
|
|
6
|
+
"names": ["React", "getSpace", "React", "useCallback", "useRef", "useState", "Toolbar", "useTranslation", "StackItem", "mx", "ChessboardArticle", "game", "role", "t", "useTranslation", "meta", "id", "orientation", "setOrientation", "useState", "open", "setOpen", "controller", "useRef", "handleSelect", "useCallback", "index", "current", "setMoveNumber", "StackItem", "Content", "toolbar", "classNames", "Chessboard", "Root", "ref", "Toolbar", "IconButton", "icon", "iconOnly", "label", "disabled", "mx", "onClick", "div", "className", "Board", "Info", "min", "max", "onOrientationChange", "onClose", "onSelect", "ChessboardContainer", "game", "role", "space", "getSpace", "React", "Chessboard", "Root", "Content", "Board", "ChessboardArticle"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CHESS_BLUEPRINT_KEY,
|
|
3
|
+
blueprint_definition_default
|
|
4
|
+
} from "./chunk-TIIGNOGK.mjs";
|
|
5
|
+
import "./chunk-FBLAVAMY.mjs";
|
|
6
|
+
import "./chunk-DUO4WTAM.mjs";
|
|
7
|
+
export {
|
|
8
|
+
CHESS_BLUEPRINT_KEY,
|
|
9
|
+
blueprint_definition_default as default
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=blueprint-definition-FD4TL5EE.mjs.map
|
|
@@ -1,62 +1,78 @@
|
|
|
1
1
|
import {
|
|
2
2
|
meta
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DUO4WTAM.mjs";
|
|
4
4
|
|
|
5
5
|
// src/components/Chessboard.tsx
|
|
6
|
-
import { useSignals as
|
|
7
|
-
import
|
|
6
|
+
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
7
|
+
import React2, { forwardRef, useCallback, useEffect as useEffect2, useImperativeHandle, useMemo as useMemo2, useRef as useRef2 } from "react";
|
|
8
8
|
import { addEventListener } from "@dxos/async";
|
|
9
|
-
import { ChessModel, Gameboard, Chessboard as
|
|
10
|
-
import {
|
|
9
|
+
import { ChessModel, Gameboard, Chessboard as NaturalChessboard, getRawPgn, useGameboardContext as useGameboardContext2 } from "@dxos/react-ui-gameboard";
|
|
10
|
+
import { useSoundEffect } from "@dxos/react-ui-sfx";
|
|
11
|
+
import { mx as mx2 } from "@dxos/react-ui-theme";
|
|
11
12
|
|
|
12
|
-
// src/components/
|
|
13
|
+
// src/components/Info.tsx
|
|
13
14
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
14
15
|
import React, { useEffect, useMemo, useRef } from "react";
|
|
15
|
-
import {
|
|
16
|
+
import { generateName } from "@dxos/display-name";
|
|
17
|
+
import { getSpace, useMembers } from "@dxos/react-client/echo";
|
|
18
|
+
import { Icon, IconButton, Select, useTranslation } from "@dxos/react-ui";
|
|
16
19
|
import { useGameboardContext } from "@dxos/react-ui-gameboard";
|
|
17
20
|
import { mx } from "@dxos/react-ui-theme";
|
|
18
|
-
var
|
|
21
|
+
var Info = ({ classNames, orientation = "white", onOrientationChange, onClose, ...props }) => {
|
|
19
22
|
var _effect = _useSignals();
|
|
20
23
|
try {
|
|
21
24
|
const { t } = useTranslation(meta.id);
|
|
22
|
-
const { model } = useGameboardContext(
|
|
25
|
+
const { model } = useGameboardContext(Info.displayName);
|
|
26
|
+
const members = useMembers(getSpace(model.object)?.key);
|
|
23
27
|
return /* @__PURE__ */ React.createElement("div", {
|
|
24
|
-
className: mx("grid grid-rows-[min-content_1fr_min-content] is-full min-is-[
|
|
28
|
+
className: mx("grid grid-rows-[min-content_1fr_min-content] is-full min-is-[18rem] p-2 overflow-hidden bg-groupSurface rounded-sm", classNames)
|
|
25
29
|
}, /* @__PURE__ */ React.createElement(PlayerIndicator, {
|
|
26
30
|
model,
|
|
27
31
|
player: orientation === "white" ? "black" : "white",
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
icon: onClose && /* @__PURE__ */ React.createElement(IconButton, {
|
|
33
|
+
icon: "ph--x--regular",
|
|
34
|
+
iconOnly: true,
|
|
35
|
+
label: t("close info button"),
|
|
36
|
+
size: 4,
|
|
37
|
+
onClick: onClose
|
|
38
|
+
})
|
|
39
|
+
}, /* @__PURE__ */ React.createElement(PlayerSelector, {
|
|
40
|
+
value: model.object.players?.[orientation === "white" ? "black" : "white"],
|
|
41
|
+
onValueChange: (value) => {
|
|
42
|
+
model.object.players[orientation === "white" ? "black" : "white"] = value;
|
|
43
|
+
},
|
|
44
|
+
members
|
|
35
45
|
})), /* @__PURE__ */ React.createElement(History, {
|
|
36
46
|
model,
|
|
37
47
|
...props
|
|
38
48
|
}), /* @__PURE__ */ React.createElement(PlayerIndicator, {
|
|
39
49
|
model,
|
|
40
50
|
player: orientation,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
icon: onOrientationChange && /* @__PURE__ */ React.createElement(IconButton, {
|
|
52
|
+
classNames: mx("transition duration-200 ease-linear", orientation === "white" && "rotate-180"),
|
|
53
|
+
icon: "ph--arrows-clockwise--regular",
|
|
54
|
+
iconOnly: true,
|
|
55
|
+
label: t("flip board button"),
|
|
56
|
+
size: 4,
|
|
57
|
+
onClick: () => onOrientationChange(orientation === "white" ? "black" : "white")
|
|
58
|
+
})
|
|
59
|
+
}, /* @__PURE__ */ React.createElement(PlayerSelector, {
|
|
60
|
+
value: model.object.players?.[orientation],
|
|
61
|
+
onValueChange: (value) => {
|
|
62
|
+
model.object.players[orientation] = value;
|
|
63
|
+
},
|
|
64
|
+
members
|
|
49
65
|
})));
|
|
50
66
|
} finally {
|
|
51
67
|
_effect.f();
|
|
52
68
|
}
|
|
53
69
|
};
|
|
54
|
-
|
|
70
|
+
Info.displayName = "Chessboard.Info";
|
|
55
71
|
var History = ({ classNames, model, min, max, onSelect }) => {
|
|
56
72
|
var _effect = _useSignals();
|
|
57
73
|
try {
|
|
58
74
|
const { t } = useTranslation(meta.id);
|
|
59
|
-
const label = model.game.isGameOver() ? model.game.isCheckmate() ? t("game.checkmate") : model.game.isStalemate() ? t("game.stalemate") : t("game.draw") : model.game.isCheck() ? t("game.check") : void 0;
|
|
75
|
+
const label = model.game.isGameOver() ? model.game.isCheckmate() ? t("game.checkmate label") : model.game.isStalemate() ? t("game.stalemate label") : t("game.draw label") : model.game.isCheck() ? t("game.check label") : void 0;
|
|
60
76
|
const history = model.game.history();
|
|
61
77
|
const moves = useMemo(() => history.reduce((acc, move, index) => {
|
|
62
78
|
if (index % 2 === 0) {
|
|
@@ -96,7 +112,7 @@ var History = ({ classNames, model, min, max, onSelect }) => {
|
|
|
96
112
|
]);
|
|
97
113
|
return /* @__PURE__ */ React.createElement("div", {
|
|
98
114
|
ref: scrollerRef,
|
|
99
|
-
className: mx("overflow-y-
|
|
115
|
+
className: mx("overflow-y-auto", classNames),
|
|
100
116
|
style: {
|
|
101
117
|
minHeight: min === void 0 ? "auto" : `${min * 24}px`,
|
|
102
118
|
maxHeight: max === void 0 ? "auto" : `${max * 24}px`
|
|
@@ -121,12 +137,12 @@ var History = ({ classNames, model, min, max, onSelect }) => {
|
|
|
121
137
|
_effect.f();
|
|
122
138
|
}
|
|
123
139
|
};
|
|
124
|
-
var PlayerIndicator = ({ children, model, player,
|
|
140
|
+
var PlayerIndicator = ({ children, model, player, icon }) => {
|
|
125
141
|
var _effect = _useSignals();
|
|
126
142
|
try {
|
|
127
143
|
const turn = player === (model.game.turn() === "w" ? "white" : "black");
|
|
128
144
|
return /* @__PURE__ */ React.createElement("div", {
|
|
129
|
-
className: "grid grid-cols-[2rem_1fr_2rem] gap-
|
|
145
|
+
className: "grid grid-cols-[2rem_1fr_2rem] gap-2 bs-[--rail-size] pli-1 flex items-center overflow-hidden"
|
|
130
146
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
131
147
|
className: "place-items-center"
|
|
132
148
|
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
@@ -134,107 +150,46 @@ var PlayerIndicator = ({ children, model, player, title }) => {
|
|
|
134
150
|
size: 6,
|
|
135
151
|
classNames: mx(turn && (model.game.isCheckmate() ? "text-red-500" : "text-green-500"))
|
|
136
152
|
})), /* @__PURE__ */ React.createElement("div", {
|
|
137
|
-
className: "truncate"
|
|
138
|
-
},
|
|
139
|
-
} finally {
|
|
140
|
-
_effect.f();
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
// src/components/ChessboardPlayers.tsx
|
|
145
|
-
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
146
|
-
import React2 from "react";
|
|
147
|
-
import { generateName } from "@dxos/display-name";
|
|
148
|
-
import { getSpace, useMembers } from "@dxos/react-client/echo";
|
|
149
|
-
import { Icon as Icon2, Input, Select, useThemeContext } from "@dxos/react-ui";
|
|
150
|
-
import { useGameboardContext as useGameboardContext2 } from "@dxos/react-ui-gameboard";
|
|
151
|
-
import { mx as mx2 } from "@dxos/react-ui-theme";
|
|
152
|
-
var ChessboardPlayers = ({ classNames, children }) => {
|
|
153
|
-
var _effect = _useSignals2();
|
|
154
|
-
try {
|
|
155
|
-
const { model } = useGameboardContext2(ChessboardPlayers.displayName);
|
|
156
|
-
const members = useMembers(getSpace(model.object)?.key);
|
|
157
|
-
const players = model.object.players;
|
|
158
|
-
if (!players) {
|
|
159
|
-
return null;
|
|
160
|
-
}
|
|
161
|
-
return /* @__PURE__ */ React2.createElement("div", {
|
|
162
|
-
role: "none",
|
|
163
|
-
className: mx2("grid grid-cols-[1fr_min-content_1fr] pis-2 pie-2 overflow-hidden", classNames)
|
|
164
|
-
}, /* @__PURE__ */ React2.createElement("div", {
|
|
165
|
-
role: "none",
|
|
166
|
-
className: "flex flex-row-reverse items-center gap-2"
|
|
167
|
-
}, /* @__PURE__ */ React2.createElement(PlayerSelect, {
|
|
168
|
-
side: "white",
|
|
169
|
-
value: players.white,
|
|
170
|
-
onValueChange: (player) => players.white = player,
|
|
171
|
-
members
|
|
172
|
-
})), /* @__PURE__ */ React2.createElement("div", {
|
|
173
|
-
className: "flex flex-row justify-center items-center"
|
|
174
|
-
}, children), /* @__PURE__ */ React2.createElement("div", {
|
|
175
|
-
role: "none",
|
|
176
|
-
className: "flex flex-row items-center gap-2"
|
|
177
|
-
}, /* @__PURE__ */ React2.createElement(PlayerSelect, {
|
|
178
|
-
side: "black",
|
|
179
|
-
value: players.black,
|
|
180
|
-
onValueChange: (player) => players.black = player,
|
|
181
|
-
members
|
|
182
|
-
})));
|
|
153
|
+
className: "truncate overflow-hidden items-center"
|
|
154
|
+
}, children), icon);
|
|
183
155
|
} finally {
|
|
184
156
|
_effect.f();
|
|
185
157
|
}
|
|
186
158
|
};
|
|
187
|
-
|
|
188
|
-
var
|
|
189
|
-
var _effect = _useSignals2();
|
|
159
|
+
var PlayerSelector = ({ value, onValueChange, members }) => {
|
|
160
|
+
var _effect = _useSignals();
|
|
190
161
|
try {
|
|
191
|
-
const {
|
|
192
|
-
|
|
193
|
-
return /* @__PURE__ */ React2.createElement(Input.Root, null, /* @__PURE__ */ React2.createElement(Input.Label, null, /* @__PURE__ */ React2.createElement(Icon2, {
|
|
194
|
-
"aria-label": `Chess icon for side ${side}`,
|
|
195
|
-
icon: `ph--crown-cross--${iconFillMode || "regular"}`,
|
|
196
|
-
size: 6
|
|
197
|
-
})), /* @__PURE__ */ React2.createElement(Select.Root, {
|
|
162
|
+
const { t } = useTranslation(meta.id);
|
|
163
|
+
return /* @__PURE__ */ React.createElement(Select.Root, {
|
|
198
164
|
value,
|
|
199
165
|
onValueChange
|
|
200
|
-
}, /* @__PURE__ */
|
|
201
|
-
placeholder: "
|
|
202
|
-
}), /* @__PURE__ */
|
|
166
|
+
}, /* @__PURE__ */ React.createElement(Select.TriggerButton, {
|
|
167
|
+
placeholder: t("select player button")
|
|
168
|
+
}), /* @__PURE__ */ React.createElement(Select.Portal, null, /* @__PURE__ */ React.createElement(Select.Content, null, /* @__PURE__ */ React.createElement(Select.Viewport, null, members.map((member) => {
|
|
203
169
|
const memberKey = member.identity.identityKey.toHex();
|
|
204
170
|
const displayName = member.identity?.profile?.displayName || generateName(memberKey);
|
|
205
|
-
return /* @__PURE__ */
|
|
171
|
+
return /* @__PURE__ */ React.createElement(Select.Option, {
|
|
206
172
|
key: memberKey,
|
|
207
173
|
value: memberKey
|
|
208
174
|
}, displayName);
|
|
209
|
-
})), /* @__PURE__ */
|
|
175
|
+
})), /* @__PURE__ */ React.createElement(Select.Arrow, null))));
|
|
210
176
|
} finally {
|
|
211
177
|
_effect.f();
|
|
212
178
|
}
|
|
213
179
|
};
|
|
214
180
|
|
|
215
181
|
// src/components/Chessboard.tsx
|
|
216
|
-
function _define_property(obj, key, value) {
|
|
217
|
-
if (key in obj) {
|
|
218
|
-
Object.defineProperty(obj, key, {
|
|
219
|
-
value,
|
|
220
|
-
enumerable: true,
|
|
221
|
-
configurable: true,
|
|
222
|
-
writable: true
|
|
223
|
-
});
|
|
224
|
-
} else {
|
|
225
|
-
obj[key] = value;
|
|
226
|
-
}
|
|
227
|
-
return obj;
|
|
228
|
-
}
|
|
229
182
|
var ExtendedChessModel = class extends ChessModel {
|
|
183
|
+
object;
|
|
230
184
|
constructor(object) {
|
|
231
|
-
super(),
|
|
185
|
+
super(), this.object = object;
|
|
232
186
|
}
|
|
233
187
|
};
|
|
234
|
-
var
|
|
235
|
-
var _effect =
|
|
188
|
+
var Root = /* @__PURE__ */ forwardRef(({ game, children }, forwardedRef) => {
|
|
189
|
+
var _effect = _useSignals2();
|
|
236
190
|
try {
|
|
237
191
|
const model = useMemo2(() => new ExtendedChessModel(game), []);
|
|
192
|
+
const click = useSoundEffect("Click");
|
|
238
193
|
useImperativeHandle(forwardedRef, () => {
|
|
239
194
|
return {
|
|
240
195
|
setMoveNumber: (index) => model.setMoveIndex(index)
|
|
@@ -243,15 +198,56 @@ var ChessboardRoot = /* @__PURE__ */ forwardRef(({ game, children }, forwardedRe
|
|
|
243
198
|
model
|
|
244
199
|
]);
|
|
245
200
|
useEffect2(() => {
|
|
246
|
-
model.
|
|
201
|
+
if (model.pgn !== getRawPgn(game.pgn ?? "")) {
|
|
202
|
+
const silent = model.pgn === "*";
|
|
203
|
+
model.update(game.pgn);
|
|
204
|
+
if (!silent) {
|
|
205
|
+
void click.play();
|
|
206
|
+
}
|
|
207
|
+
}
|
|
247
208
|
}, [
|
|
248
209
|
game.pgn
|
|
249
210
|
]);
|
|
211
|
+
const handleDrop = useCallback((move) => {
|
|
212
|
+
if (!model.makeMove(move)) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
void click.play();
|
|
216
|
+
game.pgn = model.pgn;
|
|
217
|
+
return true;
|
|
218
|
+
}, [
|
|
219
|
+
model
|
|
220
|
+
]);
|
|
221
|
+
return /* @__PURE__ */ React2.createElement(Gameboard.Root, {
|
|
222
|
+
model,
|
|
223
|
+
onDrop: handleDrop
|
|
224
|
+
}, children);
|
|
225
|
+
} finally {
|
|
226
|
+
_effect.f();
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
var Content = ({ classNames, children, role }) => {
|
|
230
|
+
var _effect = _useSignals2();
|
|
231
|
+
try {
|
|
232
|
+
return /* @__PURE__ */ React2.createElement(Gameboard.Content, {
|
|
233
|
+
classNames: mx2(classNames, role === "card--popover" && "size-container popover-square"),
|
|
234
|
+
grow: !role || role === "card--extrinsic",
|
|
235
|
+
contain: !role || role === "card--extrinsic" || role === "card--popover"
|
|
236
|
+
}, children);
|
|
237
|
+
} finally {
|
|
238
|
+
_effect.f();
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
var Board = (props) => {
|
|
242
|
+
var _effect = _useSignals2();
|
|
243
|
+
try {
|
|
244
|
+
const { model } = useGameboardContext2(Board.displayName);
|
|
250
245
|
const ref = useRef2(null);
|
|
251
246
|
useEffect2(() => {
|
|
252
247
|
if (!ref.current) {
|
|
253
248
|
return;
|
|
254
249
|
}
|
|
250
|
+
ref.current.setAttribute("data-arrow-keys", "all");
|
|
255
251
|
return addEventListener(ref.current, "keydown", (ev) => {
|
|
256
252
|
switch (ev.key) {
|
|
257
253
|
case "ArrowUp":
|
|
@@ -275,50 +271,24 @@ var ChessboardRoot = /* @__PURE__ */ forwardRef(({ game, children }, forwardedRe
|
|
|
275
271
|
}, [
|
|
276
272
|
model
|
|
277
273
|
]);
|
|
278
|
-
|
|
279
|
-
if (model.makeMove(move)) {
|
|
280
|
-
game.pgn = model.pgn;
|
|
281
|
-
return true;
|
|
282
|
-
}
|
|
283
|
-
return false;
|
|
284
|
-
}, [
|
|
285
|
-
model
|
|
286
|
-
]);
|
|
287
|
-
return /* @__PURE__ */ React3.createElement(Gameboard.Root, {
|
|
288
|
-
model,
|
|
289
|
-
onDrop: handleDrop
|
|
290
|
-
}, /* @__PURE__ */ React3.createElement("div", {
|
|
274
|
+
return /* @__PURE__ */ React2.createElement(NaturalChessboard, {
|
|
291
275
|
ref,
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
className: "grid grow outline-none"
|
|
295
|
-
}, children));
|
|
296
|
-
} finally {
|
|
297
|
-
_effect.f();
|
|
298
|
-
}
|
|
299
|
-
});
|
|
300
|
-
var ChessboardContent = ({ classNames, children, role }) => {
|
|
301
|
-
var _effect = _useSignals3();
|
|
302
|
-
try {
|
|
303
|
-
return /* @__PURE__ */ React3.createElement(Gameboard.Content, {
|
|
304
|
-
classNames: mx3(classNames, role === "card--popover" && "size-container popover-square"),
|
|
305
|
-
grow: !role || role === "card--extrinsic",
|
|
306
|
-
contain: !role || role === "card--extrinsic" || role === "card--popover"
|
|
307
|
-
}, children);
|
|
276
|
+
...props
|
|
277
|
+
});
|
|
308
278
|
} finally {
|
|
309
279
|
_effect.f();
|
|
310
280
|
}
|
|
311
281
|
};
|
|
282
|
+
Board.displayName = "Chessboard.Board";
|
|
312
283
|
var Chessboard = {
|
|
313
|
-
Root
|
|
314
|
-
Content
|
|
315
|
-
Board
|
|
316
|
-
Info
|
|
317
|
-
Players: ChessboardPlayers
|
|
284
|
+
Root,
|
|
285
|
+
Content,
|
|
286
|
+
Board,
|
|
287
|
+
Info
|
|
318
288
|
};
|
|
319
289
|
|
|
320
290
|
export {
|
|
321
291
|
ExtendedChessModel,
|
|
322
292
|
Chessboard
|
|
323
293
|
};
|
|
324
|
-
//# sourceMappingURL=chunk-
|
|
294
|
+
//# sourceMappingURL=chunk-5DOZV3PW.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/Chessboard.tsx", "../../../src/components/Info.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, {\n type PropsWithChildren,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\n\nimport { addEventListener } from '@dxos/async';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport {\n ChessModel,\n Gameboard,\n type GameboardRootProps,\n Chessboard as NaturalChessboard,\n type ChessboardProps as NaturalChessboardProps,\n getRawPgn,\n useGameboardContext,\n} from '@dxos/react-ui-gameboard';\nimport { useSoundEffect } from '@dxos/react-ui-sfx';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type Chess } from '../types';\n\nimport { Info, type InfoProps } from './Info';\n\nexport interface ChessboardController {\n setMoveNumber(index: number): void;\n}\n\nexport class ExtendedChessModel extends ChessModel {\n constructor(readonly object: Chess.Game) {\n super();\n }\n}\n\n//\n// Root\n//\n\ntype RootProps = PropsWithChildren<{\n game: Chess.Game;\n}>;\n\nconst Root = forwardRef<ChessboardController, RootProps>(({ game, children }, forwardedRef) => {\n const model = useMemo(() => new ExtendedChessModel(game), []);\n const click = useSoundEffect('Click');\n\n // Controller.\n useImperativeHandle(forwardedRef, () => {\n return {\n setMoveNumber: (index) => model.setMoveIndex(index),\n };\n }, [model]);\n\n // External change.\n // NOTE: Warning if user has not interacted with the board.\n useEffect(() => {\n if (model.pgn !== getRawPgn(game.pgn ?? '')) {\n const silent = model.pgn === '*';\n model.update(game.pgn);\n if (!silent) {\n void click.play();\n }\n }\n }, [game.pgn]);\n\n // Move.\n const handleDrop = useCallback<NonNullable<GameboardRootProps<ChessModel>['onDrop']>>(\n (move) => {\n if (!model.makeMove(move)) {\n return false;\n }\n\n void click.play();\n game.pgn = model.pgn;\n return true;\n },\n [model],\n );\n\n return (\n <Gameboard.Root model={model} onDrop={handleDrop}>\n {children}\n </Gameboard.Root>\n );\n});\n\n//\n// Content\n//\n\ntype Role = 'card--popover' | 'card--intrinsic' | 'card--extrinsic';\n\ntype ContentProps = ThemedClassName<PropsWithChildren<{ role?: Role }>>;\n\nconst Content = ({ classNames, children, role }: ContentProps) => {\n return (\n <Gameboard.Content\n classNames={mx(classNames, role === 'card--popover' && 'size-container popover-square')}\n grow={!role || role === 'card--extrinsic'}\n contain={!role || role === 'card--extrinsic' || role === 'card--popover'}\n >\n {children}\n </Gameboard.Content>\n );\n};\n\n//\n// Board\n//\n\ntype BoardProps = NaturalChessboardProps;\n\nconst Board = (props: BoardProps) => {\n const { model } = useGameboardContext<ChessModel>(Board.displayName);\n\n // Keyboard navigation.\n const ref = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (!ref.current) {\n return;\n }\n\n // Participate in keyboard navigation (set tabIndex={0})\n ref.current.setAttribute('data-arrow-keys', 'all');\n\n return addEventListener(ref.current, 'keydown', (ev) => {\n switch (ev.key) {\n case 'ArrowUp':\n model.setMoveIndex(0);\n break;\n case 'ArrowDown':\n model.setMoveIndex(model.game.history().length);\n break;\n case 'ArrowLeft':\n if (model.moveIndex.value > 0) {\n model.setMoveIndex(model.moveIndex.value - 1);\n }\n break;\n case 'ArrowRight':\n if (model.moveIndex.value < model.game.history().length) {\n model.setMoveIndex(model.moveIndex.value + 1);\n }\n break;\n }\n });\n }, [model]);\n\n return <NaturalChessboard ref={ref} {...props} />;\n};\n\nBoard.displayName = 'Chessboard.Board';\n\n//\n// Chessboard\n//\n\nexport const Chessboard = {\n Root: Root,\n Content: Content,\n Board: Board,\n Info: Info,\n};\n\nexport type {\n RootProps as ChessboardRootProps,\n ContentProps as ChessboardContentProps,\n BoardProps as ChessboardBoardProps,\n InfoProps as ChessboardInfoProps,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type JSX, type PropsWithChildren, useEffect, useMemo, useRef } from 'react';\n\nimport { generateName } from '@dxos/display-name';\nimport { type SpaceMember, getSpace, useMembers } from '@dxos/react-client/echo';\nimport { Icon, IconButton, Select, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { type Player, useGameboardContext } from '@dxos/react-ui-gameboard';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../meta';\n\nimport { type ExtendedChessModel } from './Chessboard';\n\nexport type InfoProps = ThemedClassName<\n {\n orientation?: Player;\n onOrientationChange?: (orientation: Player) => void;\n onClose?: () => void;\n } & Pick<HistoryProps, 'min' | 'max' | 'onSelect'>\n>;\n\nexport const Info = ({ classNames, orientation = 'white', onOrientationChange, onClose, ...props }: InfoProps) => {\n const { t } = useTranslation(meta.id);\n const { model } = useGameboardContext<ExtendedChessModel>(Info.displayName);\n const members = useMembers(getSpace(model.object)?.key);\n\n return (\n <div\n className={mx(\n 'grid grid-rows-[min-content_1fr_min-content] is-full min-is-[18rem] p-2 overflow-hidden bg-groupSurface rounded-sm',\n classNames,\n )}\n >\n <PlayerIndicator\n model={model}\n player={orientation === 'white' ? 'black' : 'white'}\n icon={\n onClose && (\n <IconButton icon='ph--x--regular' iconOnly label={t('close info button')} size={4} onClick={onClose} />\n )\n }\n >\n <PlayerSelector\n value={model.object.players?.[orientation === 'white' ? 'black' : 'white']}\n onValueChange={(value) => {\n model.object.players![orientation === 'white' ? 'black' : 'white'] = value;\n }}\n members={members}\n />\n </PlayerIndicator>\n\n <History model={model} {...props} />\n\n <PlayerIndicator\n model={model}\n player={orientation}\n icon={\n onOrientationChange && (\n <IconButton\n classNames={mx('transition duration-200 ease-linear', orientation === 'white' && 'rotate-180')}\n icon='ph--arrows-clockwise--regular'\n iconOnly\n label={t('flip board button')}\n size={4}\n onClick={() => onOrientationChange(orientation === 'white' ? 'black' : 'white')}\n />\n )\n }\n >\n <PlayerSelector\n value={model.object.players?.[orientation]}\n onValueChange={(value) => {\n model.object.players![orientation] = value;\n }}\n members={members}\n />\n </PlayerIndicator>\n </div>\n );\n};\n\nInfo.displayName = 'Chessboard.Info';\n\n//\n// History\n//\n\ntype HistoryProps = ThemedClassName<{\n model: ExtendedChessModel;\n min?: number;\n max?: number;\n onSelect?: (index: number) => void;\n}>;\n\nconst History = ({ classNames, model, min, max, onSelect }: HistoryProps) => {\n const { t } = useTranslation(meta.id);\n const label = model.game.isGameOver()\n ? model.game.isCheckmate()\n ? t('game.checkmate label')\n : model.game.isStalemate()\n ? t('game.stalemate label')\n : t('game.draw label')\n : model.game.isCheck()\n ? t('game.check label')\n : undefined;\n\n const history = model.game.history();\n const moves = useMemo(\n () =>\n history.reduce(\n (acc, move, index) => {\n if (index % 2 === 0) {\n acc.push([{ index, move }]);\n } else {\n acc[acc.length - 1].push({ index, move });\n }\n return acc;\n },\n [] as { index: number; move: string }[][],\n ),\n [history.length],\n );\n\n const scrollerRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n scrollerRef.current?.scrollTo({ top: scrollerRef.current.scrollHeight });\n }, [history.length]);\n\n useEffect(() => {\n const div = scrollerRef.current?.querySelector(`[data-index=\"${model.moveIndex.value - 1}\"]`);\n scrollerRef.current?.classList.add('scrollbar-none');\n div?.scrollIntoView({ behavior: 'smooth' });\n scrollerRef.current?.classList.remove('scrollbar-none');\n }, [model.moveIndex.value]);\n\n return (\n <div\n ref={scrollerRef}\n className={mx('overflow-y-auto', classNames)}\n style={{\n minHeight: min === undefined ? 'auto' : `${min * 24}px`,\n maxHeight: max === undefined ? 'auto' : `${max * 24}px`,\n }}\n >\n {moves.map(([a, b], index) => (\n <div key={index} className='grid grid-cols-[3rem_1fr_1fr_1rem] gap-2 pis-4 leading-1'>\n <div className='content-center text-xs text-subdued'>{index + 1}</div>\n {a && (\n <div\n data-index={a.index}\n className={mx('pis-2 cursor-pointer', a.index === model.moveIndex.value - 1 && 'bg-primary-500')}\n onClick={() => onSelect?.(a.index + 1)}\n >\n {a.move}\n </div>\n )}\n {b && (\n <div\n data-index={b.index}\n className={mx('pis-2 cursor-pointer', b.index === model.moveIndex.value - 1 && 'bg-primary-500')}\n onClick={() => onSelect?.(b.index + 1)}\n >\n {b.move}\n </div>\n )}\n </div>\n ))}\n {label && <div className='text-center'>{label}</div>}\n </div>\n );\n};\n\n//\n// PlayerIndicator\n//\n\ntype PlayerIndicatorProps = PropsWithChildren<{\n model: ExtendedChessModel;\n player: Player;\n icon?: JSX.Element;\n}>;\n\nconst PlayerIndicator = ({ children, model, player, icon }: PlayerIndicatorProps) => {\n const turn = player === (model.game.turn() === 'w' ? 'white' : 'black');\n return (\n <div className='grid grid-cols-[2rem_1fr_2rem] gap-2 bs-[--rail-size] pli-1 flex items-center overflow-hidden'>\n <div className='place-items-center'>\n <Icon\n icon={turn ? 'ph--circle--fill' : 'ph--circle--thin'}\n size={6}\n classNames={mx(turn && (model.game.isCheckmate() ? 'text-red-500' : 'text-green-500'))}\n />\n </div>\n <div className='truncate overflow-hidden items-center'>{children}</div>\n {icon}\n </div>\n );\n};\n\n//\n// PlayerSelector\n//\n\ntype PlayerSelectorProps = {\n value?: string;\n onValueChange: (player: string) => void;\n members: SpaceMember[];\n};\n\nconst PlayerSelector = ({ value, onValueChange, members }: PlayerSelectorProps) => {\n const { t } = useTranslation(meta.id);\n return (\n <Select.Root value={value} onValueChange={onValueChange}>\n <Select.TriggerButton placeholder={t('select player button')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {members.map((member) => {\n const memberKey = member.identity.identityKey.toHex();\n const displayName = member.identity?.profile?.displayName || generateName(memberKey);\n return (\n <Select.Option key={memberKey} value={memberKey}>\n {displayName}\n </Select.Option>\n );\n })}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "forwardRef", "useCallback", "useEffect", "useImperativeHandle", "useMemo", "useRef", "addEventListener", "ChessModel", "Gameboard", "Chessboard", "NaturalChessboard", "getRawPgn", "useGameboardContext", "useSoundEffect", "mx", "React", "useEffect", "useMemo", "useRef", "generateName", "getSpace", "useMembers", "Icon", "IconButton", "Select", "useTranslation", "useGameboardContext", "mx", "Info", "classNames", "orientation", "onOrientationChange", "onClose", "props", "t", "useTranslation", "meta", "id", "model", "useGameboardContext", "displayName", "members", "useMembers", "getSpace", "object", "key", "div", "className", "mx", "PlayerIndicator", "player", "icon", "IconButton", "iconOnly", "label", "size", "onClick", "PlayerSelector", "value", "players", "onValueChange", "History", "min", "max", "onSelect", "game", "isGameOver", "isCheckmate", "isStalemate", "isCheck", "undefined", "history", "moves", "useMemo", "reduce", "acc", "move", "index", "push", "length", "scrollerRef", "useRef", "useEffect", "current", "scrollTo", "top", "scrollHeight", "querySelector", "moveIndex", "classList", "add", "scrollIntoView", "behavior", "remove", "ref", "style", "minHeight", "maxHeight", "map", "a", "b", "data-index", "children", "turn", "Icon", "Select", "Root", "TriggerButton", "placeholder", "Portal", "Content", "Viewport", "member", "memberKey", "identity", "identityKey", "toHex", "profile", "generateName", "Option", "Arrow", "ExtendedChessModel", "ChessModel", "object", "Root", "forwardRef", "game", "children", "forwardedRef", "model", "useMemo", "click", "useSoundEffect", "useImperativeHandle", "setMoveNumber", "index", "setMoveIndex", "useEffect", "pgn", "getRawPgn", "silent", "update", "play", "handleDrop", "useCallback", "move", "makeMove", "React", "Gameboard", "onDrop", "Content", "classNames", "role", "mx", "grow", "contain", "Board", "props", "useGameboardContext", "displayName", "ref", "useRef", "current", "setAttribute", "addEventListener", "ev", "key", "history", "length", "moveIndex", "value", "NaturalChessboard", "Chessboard", "Info"]
|
|
7
|
+
}
|
|
@@ -6,14 +6,15 @@ var __export = (target, all) => {
|
|
|
6
6
|
|
|
7
7
|
// src/meta.ts
|
|
8
8
|
import { trim } from "@dxos/util";
|
|
9
|
-
var CHESS_PLUGIN = "dxos.org/plugin/chess";
|
|
10
9
|
var meta = {
|
|
11
|
-
id:
|
|
10
|
+
id: "dxos.org/plugin/chess",
|
|
12
11
|
name: "Chess",
|
|
13
12
|
description: trim`
|
|
14
|
-
|
|
13
|
+
Full-featured chess game supporting multiplayer matches with friends or practice sessions against AI opponents.
|
|
14
|
+
Track game history and analyze moves in real-time.
|
|
15
15
|
`,
|
|
16
16
|
icon: "ph--shield-chevron--regular",
|
|
17
|
+
iconHue: "amber",
|
|
17
18
|
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-chess",
|
|
18
19
|
screenshots: [
|
|
19
20
|
"https://dxos.network/plugin-details-chess-dark.png"
|
|
@@ -22,7 +23,6 @@ var meta = {
|
|
|
22
23
|
|
|
23
24
|
export {
|
|
24
25
|
__export,
|
|
25
|
-
CHESS_PLUGIN,
|
|
26
26
|
meta
|
|
27
27
|
};
|
|
28
|
-
//# sourceMappingURL=chunk-
|
|
28
|
+
//# sourceMappingURL=chunk-DUO4WTAM.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/chess',\n name: 'Chess',\n description: trim`\n Full-featured chess game supporting multiplayer matches with friends or practice sessions against AI opponents.\n Track game history and analyze moves in real-time.\n `,\n icon: 'ph--shield-chevron--regular',\n iconHue: 'amber',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-chess',\n screenshots: ['https://dxos.network/plugin-details-chess-dark.png'],\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;AAKA,SAASA,YAAY;AAEd,IAAMC,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,aAAa;IAAC;;AAChB;",
|
|
6
|
+
"names": ["trim", "meta", "id", "name", "description", "trim", "icon", "iconHue", "source", "screenshots"]
|
|
7
|
+
}
|