@dxos/plugin-chess 0.8.4-main.5ea62a8 → 0.8.4-main.66e292d
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-Y5Y4YGNL.mjs +11 -0
- package/dist/lib/browser/{chunk-VTIITHYS.mjs → chunk-3LPE2B5J.mjs} +30 -14
- package/dist/lib/browser/chunk-3LPE2B5J.mjs.map +7 -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-T275KG4U.mjs → chunk-CCF24VRU.mjs} +13 -14
- package/dist/lib/browser/chunk-CCF24VRU.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-H65TQTPW.mjs → chunk-Q5TZCIH7.mjs} +2 -2
- package/dist/lib/browser/index.mjs +30 -29
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-DA5H5633.mjs → intent-resolver-KPGHK5JU.mjs} +5 -5
- package/dist/lib/browser/{intent-resolver-DA5H5633.mjs.map → intent-resolver-KPGHK5JU.mjs.map} +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-FSDNVKZN.mjs → react-surface-3YST34QI.mjs} +7 -7
- package/dist/lib/browser/{react-surface-FSDNVKZN.mjs.map → react-surface-3YST34QI.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-GR6OLMB6.mjs +12 -0
- package/dist/lib/node-esm/{chunk-3NZRGOSV.mjs → chunk-F3HFLDV5.mjs} +30 -14
- package/dist/lib/node-esm/chunk-F3HFLDV5.mjs.map +7 -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-QKXLEJNZ.mjs} +13 -14
- package/dist/lib/node-esm/chunk-QKXLEJNZ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-IFDV434X.mjs → chunk-VVXTAVIS.mjs} +2 -2
- package/dist/lib/node-esm/index.mjs +30 -29
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-PODONUD3.mjs → intent-resolver-ZAELGF7I.mjs} +5 -5
- package/dist/lib/node-esm/{intent-resolver-PODONUD3.mjs.map → intent-resolver-ZAELGF7I.mjs.map} +1 -1
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-2TW3PIGQ.mjs → react-surface-KV2KBSIU.mjs} +7 -7
- package/dist/lib/node-esm/{react-surface-2TW3PIGQ.mjs.map → react-surface-KV2KBSIU.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 +14 -9
- 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 +9 -6
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Chess.d.ts +3 -3
- 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 +45 -51
- 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 +9 -6
- package/src/types/Chess.ts +20 -28
- 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-Y5Y4YGNL.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-GR6OLMB6.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-IFDV434X.mjs.map → chunk-VVXTAVIS.mjs.map} +0 -0
package/dist/lib/node-esm/{ChessboardContainer-PF75AEMW.mjs → ChessboardContainer-7OQ6TOKB.mjs}
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
Chessboard
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-F4C2HVZL.mjs";
|
|
5
5
|
import {
|
|
6
6
|
meta
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-KNOOJFIR.mjs";
|
|
8
8
|
|
|
9
9
|
// src/components/ChessboardContainer.tsx
|
|
10
10
|
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
@@ -14,10 +14,10 @@ import { getSpace } from "@dxos/react-client/echo";
|
|
|
14
14
|
// src/components/ChessboardArticle.tsx
|
|
15
15
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
16
16
|
import React, { useCallback, useRef, useState } from "react";
|
|
17
|
-
import {
|
|
17
|
+
import { Toolbar, useTranslation } from "@dxos/react-ui";
|
|
18
18
|
import { StackItem } from "@dxos/react-ui-stack";
|
|
19
19
|
import { mx } from "@dxos/react-ui-theme";
|
|
20
|
-
var ChessboardArticle = ({ game }) => {
|
|
20
|
+
var ChessboardArticle = ({ game, role }) => {
|
|
21
21
|
var _effect = _useSignals();
|
|
22
22
|
try {
|
|
23
23
|
const { t } = useTranslation(meta.id);
|
|
@@ -28,13 +28,22 @@ var ChessboardArticle = ({ game }) => {
|
|
|
28
28
|
controller.current?.setMoveNumber(index);
|
|
29
29
|
}, []);
|
|
30
30
|
return /* @__PURE__ */ React.createElement(StackItem.Content, {
|
|
31
|
-
|
|
31
|
+
toolbar: true,
|
|
32
|
+
classNames: "@container"
|
|
32
33
|
}, /* @__PURE__ */ React.createElement(Chessboard.Root, {
|
|
33
34
|
game,
|
|
34
35
|
ref: controller
|
|
35
|
-
}, /* @__PURE__ */ React.createElement(
|
|
36
|
-
|
|
36
|
+
}, /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(Toolbar.IconButton, {
|
|
37
|
+
icon: "ph--info--regular",
|
|
38
|
+
iconOnly: true,
|
|
39
|
+
label: t("toggle info button"),
|
|
40
|
+
disabled: open,
|
|
41
|
+
classNames: mx("invisible @3xl:visible"),
|
|
42
|
+
onClick: () => setOpen((open2) => !open2)
|
|
43
|
+
})), /* @__PURE__ */ React.createElement("div", {
|
|
44
|
+
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")
|
|
37
45
|
}, /* @__PURE__ */ React.createElement(Chessboard.Content, null, /* @__PURE__ */ React.createElement(Chessboard.Board, {
|
|
46
|
+
classNames: "m-4 rounded-sm overflow-hidden",
|
|
38
47
|
orientation
|
|
39
48
|
})), open && /* @__PURE__ */ React.createElement("div", {
|
|
40
49
|
className: "hidden @3xl:flex flex-col p-8 justify-center items-center overflow-hidden"
|
|
@@ -45,17 +54,7 @@ var ChessboardArticle = ({ game }) => {
|
|
|
45
54
|
onOrientationChange: setOrientation,
|
|
46
55
|
onClose: () => setOpen(false),
|
|
47
56
|
onSelect: handleSelect
|
|
48
|
-
}))
|
|
49
|
-
className: "flex justify-center items-center"
|
|
50
|
-
}, /* @__PURE__ */ React.createElement(Chessboard.Players, null, /* @__PURE__ */ React.createElement(IconButton, {
|
|
51
|
-
variant: "ghost",
|
|
52
|
-
icon: "ph--info--regular",
|
|
53
|
-
iconOnly: true,
|
|
54
|
-
label: t("button toggle info"),
|
|
55
|
-
size: 6,
|
|
56
|
-
classNames: mx("invisible", !open && "@3xl:visible"),
|
|
57
|
-
onClick: () => setOpen((open2) => !open2)
|
|
58
|
-
}))))));
|
|
57
|
+
})))));
|
|
59
58
|
} finally {
|
|
60
59
|
_effect.f();
|
|
61
60
|
}
|
|
@@ -81,7 +80,8 @@ var ChessboardContainer = ({ game, role }) => {
|
|
|
81
80
|
}
|
|
82
81
|
default: {
|
|
83
82
|
return /* @__PURE__ */ React2.createElement(ChessboardArticle, {
|
|
84
|
-
game
|
|
83
|
+
game,
|
|
84
|
+
role
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
87
|
}
|
|
@@ -94,4 +94,4 @@ export {
|
|
|
94
94
|
ChessboardContainer,
|
|
95
95
|
ChessboardContainer_default as default
|
|
96
96
|
};
|
|
97
|
-
//# sourceMappingURL=ChessboardContainer-
|
|
97
|
+
//# sourceMappingURL=ChessboardContainer-7OQ6TOKB.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,12 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
CHESS_BLUEPRINT_KEY,
|
|
4
|
+
blueprint_definition_default
|
|
5
|
+
} from "./chunk-F3HFLDV5.mjs";
|
|
6
|
+
import "./chunk-QKXLEJNZ.mjs";
|
|
7
|
+
import "./chunk-KNOOJFIR.mjs";
|
|
8
|
+
export {
|
|
9
|
+
CHESS_BLUEPRINT_KEY,
|
|
10
|
+
blueprint_definition_default as default
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=blueprint-definition-GR6OLMB6.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
Chess_exports
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QKXLEJNZ.mjs";
|
|
5
5
|
|
|
6
6
|
// src/capabilities/blueprint-definition.ts
|
|
7
7
|
import { Capabilities, contributes } from "@dxos/app-framework";
|
|
@@ -9,10 +9,12 @@ import { Blueprint, Template } from "@dxos/blueprints";
|
|
|
9
9
|
import { trim } from "@dxos/util";
|
|
10
10
|
|
|
11
11
|
// src/functions/create.ts
|
|
12
|
-
import
|
|
12
|
+
import * as Effect from "effect/Effect";
|
|
13
|
+
import * as Schema from "effect/Schema";
|
|
13
14
|
import { DatabaseService, defineFunction } from "@dxos/functions";
|
|
14
15
|
var create_default = defineFunction({
|
|
15
|
-
|
|
16
|
+
key: "dxos.org/function/chess/create",
|
|
17
|
+
name: "Create Chess",
|
|
16
18
|
description: "Creates a new chess game.",
|
|
17
19
|
inputSchema: Schema.Struct({
|
|
18
20
|
pgn: Schema.optional(Schema.String.annotations({
|
|
@@ -33,11 +35,13 @@ var create_default = defineFunction({
|
|
|
33
35
|
|
|
34
36
|
// src/functions/move.ts
|
|
35
37
|
import { Chess as ChessJS } from "chess.js";
|
|
36
|
-
import
|
|
38
|
+
import * as Effect2 from "effect/Effect";
|
|
39
|
+
import * as Schema2 from "effect/Schema";
|
|
37
40
|
import { ArtifactId } from "@dxos/assistant";
|
|
38
41
|
import { DatabaseService as DatabaseService2, defineFunction as defineFunction2 } from "@dxos/functions";
|
|
39
42
|
var move_default = defineFunction2({
|
|
40
|
-
|
|
43
|
+
key: "dxos.org/function/chess/move",
|
|
44
|
+
name: "Move",
|
|
41
45
|
description: "Makes a move in the given chess game.",
|
|
42
46
|
inputSchema: Schema2.Struct({
|
|
43
47
|
id: ArtifactId.annotations({
|
|
@@ -76,15 +80,21 @@ var move_default = defineFunction2({
|
|
|
76
80
|
|
|
77
81
|
// src/functions/play.ts
|
|
78
82
|
import { Chess as ChessJS2 } from "chess.js";
|
|
79
|
-
import
|
|
83
|
+
import * as Effect3 from "effect/Effect";
|
|
84
|
+
import * as Schema3 from "effect/Schema";
|
|
80
85
|
import { ArtifactId as ArtifactId2 } from "@dxos/assistant";
|
|
81
86
|
import { DatabaseService as DatabaseService3, defineFunction as defineFunction3 } from "@dxos/functions";
|
|
82
87
|
var play_default = defineFunction3({
|
|
83
|
-
|
|
88
|
+
key: "dxos.org/function/chess/play",
|
|
89
|
+
name: "Play",
|
|
84
90
|
description: "Uses the chess engine to play the next move.",
|
|
85
91
|
inputSchema: Schema3.Struct({
|
|
86
92
|
id: ArtifactId2.annotations({
|
|
87
93
|
description: "The ID of the chess object."
|
|
94
|
+
}),
|
|
95
|
+
side: Schema3.optional(Schema3.Literal("white", "black", "any")).annotations({
|
|
96
|
+
description: "The side to play.",
|
|
97
|
+
defaultValue: "any"
|
|
88
98
|
})
|
|
89
99
|
}),
|
|
90
100
|
outputSchema: Schema3.Struct({
|
|
@@ -95,7 +105,7 @@ var play_default = defineFunction3({
|
|
|
95
105
|
description: "The move that was played."
|
|
96
106
|
})
|
|
97
107
|
}),
|
|
98
|
-
handler: Effect3.fn(function* ({ data: { id } }) {
|
|
108
|
+
handler: Effect3.fn(function* ({ data: { id, side = "any" } }) {
|
|
99
109
|
const object = yield* DatabaseService3.resolve(ArtifactId2.toDXN(id), Chess_exports.Game);
|
|
100
110
|
const chess = new ChessJS2();
|
|
101
111
|
if (object.pgn) {
|
|
@@ -103,6 +113,12 @@ var play_default = defineFunction3({
|
|
|
103
113
|
} else if (object.fen) {
|
|
104
114
|
chess.load(object.fen);
|
|
105
115
|
}
|
|
116
|
+
if (!(side === "any" || chess.turn() === "w" && side === "white" || chess.turn() === "b" && side === "black")) {
|
|
117
|
+
return {
|
|
118
|
+
move: void 0,
|
|
119
|
+
pgn: object.pgn
|
|
120
|
+
};
|
|
121
|
+
}
|
|
106
122
|
const moves = chess.moves();
|
|
107
123
|
const move = moves[Math.floor(Math.random() * moves.length)];
|
|
108
124
|
chess.move(move, {
|
|
@@ -117,17 +133,17 @@ var play_default = defineFunction3({
|
|
|
117
133
|
});
|
|
118
134
|
|
|
119
135
|
// src/capabilities/blueprint-definition.ts
|
|
120
|
-
var BLUEPRINT_KEY = "dxos.org/blueprint/chess";
|
|
121
136
|
var functions = [
|
|
122
137
|
create_default,
|
|
123
138
|
move_default,
|
|
124
139
|
play_default
|
|
125
140
|
];
|
|
126
|
-
var
|
|
141
|
+
var CHESS_BLUEPRINT_KEY = "dxos.org/blueprint/chess";
|
|
142
|
+
var blueprint_definition_default = (() => {
|
|
127
143
|
return [
|
|
128
144
|
contributes(Capabilities.Functions, functions),
|
|
129
145
|
contributes(Capabilities.BlueprintDefinition, Blueprint.make({
|
|
130
|
-
key:
|
|
146
|
+
key: CHESS_BLUEPRINT_KEY,
|
|
131
147
|
name: "Chess",
|
|
132
148
|
tools: Blueprint.toolDefinitions({
|
|
133
149
|
functions
|
|
@@ -142,13 +158,13 @@ var blueprint_definition_default = () => {
|
|
|
142
158
|
})
|
|
143
159
|
}))
|
|
144
160
|
];
|
|
145
|
-
};
|
|
161
|
+
});
|
|
146
162
|
|
|
147
163
|
export {
|
|
148
164
|
create_default,
|
|
149
165
|
move_default,
|
|
150
166
|
play_default,
|
|
151
|
-
|
|
167
|
+
CHESS_BLUEPRINT_KEY,
|
|
152
168
|
blueprint_definition_default
|
|
153
169
|
};
|
|
154
|
-
//# sourceMappingURL=chunk-
|
|
170
|
+
//# sourceMappingURL=chunk-F3HFLDV5.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/blueprint-definition.ts", "../../../src/functions/create.ts", "../../../src/functions/move.ts", "../../../src/functions/play.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { Blueprint, Template } from '@dxos/blueprints';\nimport { type FunctionDefinition } from '@dxos/functions';\nimport { trim } from '@dxos/util';\n\nimport { create, move, play } from '../functions';\n\nconst functions: FunctionDefinition[] = [create, move, play];\n\nexport const CHESS_BLUEPRINT_KEY = 'dxos.org/blueprint/chess';\n\nexport default () => {\n return [\n contributes(Capabilities.Functions, functions),\n contributes(\n Capabilities.BlueprintDefinition,\n Blueprint.make({\n key: CHESS_BLUEPRINT_KEY,\n name: 'Chess',\n tools: Blueprint.toolDefinitions({ functions }),\n instructions: Template.make({\n source: trim`\n You are an expert chess player.\n To analyze a game you can access the \"pgn\" property by loading the context object that represents the current game.\n You could suggest a good next move or offer to play a move.\n Don't actually make a move unless you are asked to.\n `,\n }),\n }),\n ),\n ];\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { DatabaseService, defineFunction } from '@dxos/functions';\n\nimport { Chess } from '../types';\n\nexport default defineFunction({\n key: 'dxos.org/function/chess/create',\n name: 'Create Chess',\n description: 'Creates a new chess game.',\n inputSchema: Schema.Struct({\n pgn: Schema.optional(\n Schema.String.annotations({\n description: 'Portable Game Notation.',\n }),\n ),\n fen: Schema.optional(\n Schema.String.annotations({\n description: 'Forsyth-Edwards Notation.',\n }),\n ),\n }),\n outputSchema: Chess.Game,\n handler: Effect.fn(function* ({ data: { pgn, fen } }) {\n return yield* DatabaseService.add(Chess.makeGame({ pgn, fen }));\n }),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Chess as ChessJS } from 'chess.js';\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { ArtifactId } from '@dxos/assistant';\nimport { DatabaseService, defineFunction } from '@dxos/functions';\n\nimport { Chess } from '../types';\n\nexport default defineFunction({\n key: 'dxos.org/function/chess/move',\n name: 'Move',\n description: 'Makes a move in the given chess game.',\n inputSchema: Schema.Struct({\n id: ArtifactId.annotations({\n description: 'The ID of the chess object.',\n }),\n move: Schema.String.annotations({\n description: 'The move to make in the chess game.',\n examples: ['e4', 'Bf3'],\n }),\n }),\n outputSchema: Schema.Struct({\n pgn: Schema.String.annotations({\n description: 'The PGN of the game after the move was played.',\n }),\n }),\n handler: Effect.fn(function* ({ data: { id, move } }) {\n const object = yield* DatabaseService.resolve(ArtifactId.toDXN(id), Chess.Game);\n const chess = new ChessJS();\n if (object.pgn) {\n chess.loadPgn(object.pgn);\n } else if (object.fen) {\n chess.load(object.fen);\n }\n\n chess.move(move, { strict: false });\n object.pgn = chess.pgn();\n return { pgn: object.pgn };\n }),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Chess as ChessJS } from 'chess.js';\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { ArtifactId } from '@dxos/assistant';\nimport { DatabaseService, defineFunction } from '@dxos/functions';\n\nimport { Chess } from '../types';\n\nexport default defineFunction({\n key: 'dxos.org/function/chess/play',\n name: 'Play',\n description: 'Uses the chess engine to play the next move.',\n inputSchema: Schema.Struct({\n id: ArtifactId.annotations({\n description: 'The ID of the chess object.',\n }),\n side: Schema.optional(Schema.Literal('white', 'black', 'any')).annotations({\n description: 'The side to play.',\n defaultValue: 'any',\n }),\n }),\n outputSchema: Schema.Struct({\n pgn: Schema.String.annotations({\n description: 'The PGN of the game after the move was played.',\n }),\n move: Schema.optional(Schema.String).annotations({\n description: 'The move that was played.',\n }),\n }),\n handler: Effect.fn(function* ({ data: { id, side = 'any' } }) {\n const object = yield* DatabaseService.resolve(ArtifactId.toDXN(id), Chess.Game);\n const chess = new ChessJS();\n if (object.pgn) {\n chess.loadPgn(object.pgn);\n } else if (object.fen) {\n chess.load(object.fen);\n }\n\n if (!(side === 'any' || (chess.turn() === 'w' && side === 'white') || (chess.turn() === 'b' && side === 'black'))) {\n return { move: undefined, pgn: object.pgn! };\n }\n\n const moves = chess.moves();\n const move = moves[Math.floor(Math.random() * moves.length)];\n\n chess.move(move, { strict: false });\n object.pgn = chess.pgn();\n return { move, pgn: object.pgn };\n }),\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Capabilities", "contributes", "Blueprint", "Template", "trim", "Effect", "Schema", "DatabaseService", "defineFunction", "defineFunction", "key", "name", "description", "inputSchema", "Struct", "pgn", "optional", "String", "annotations", "fen", "outputSchema", "Chess", "Game", "handler", "fn", "data", "DatabaseService", "add", "makeGame", "Chess", "ChessJS", "Effect", "Schema", "ArtifactId", "DatabaseService", "defineFunction", "defineFunction", "key", "name", "description", "inputSchema", "Struct", "id", "ArtifactId", "annotations", "move", "String", "examples", "outputSchema", "pgn", "handler", "fn", "data", "object", "DatabaseService", "resolve", "toDXN", "Chess", "Game", "chess", "ChessJS", "loadPgn", "fen", "load", "strict", "Chess", "ChessJS", "Effect", "Schema", "ArtifactId", "DatabaseService", "defineFunction", "defineFunction", "key", "name", "description", "inputSchema", "Struct", "id", "ArtifactId", "annotations", "side", "optional", "Literal", "defaultValue", "outputSchema", "pgn", "String", "move", "handler", "fn", "data", "object", "DatabaseService", "resolve", "toDXN", "Chess", "Game", "chess", "ChessJS", "loadPgn", "fen", "load", "turn", "undefined", "moves", "Math", "floor", "random", "length", "strict", "functions", "create", "move", "play", "CHESS_BLUEPRINT_KEY", "contributes", "Capabilities", "Functions", "BlueprintDefinition", "Blueprint", "make", "key", "name", "tools", "toolDefinitions", "instructions", "Template", "source", "trim"]
|
|
7
|
+
}
|
|
@@ -1,63 +1,79 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
meta
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-KNOOJFIR.mjs";
|
|
5
5
|
|
|
6
6
|
// src/components/Chessboard.tsx
|
|
7
|
-
import { useSignals as
|
|
8
|
-
import
|
|
7
|
+
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
8
|
+
import React2, { forwardRef, useCallback, useEffect as useEffect2, useImperativeHandle, useMemo as useMemo2, useRef as useRef2 } from "react";
|
|
9
9
|
import { addEventListener } from "@dxos/async";
|
|
10
|
-
import { ChessModel, Gameboard, Chessboard as
|
|
11
|
-
import {
|
|
10
|
+
import { ChessModel, Gameboard, Chessboard as NaturalChessboard, getRawPgn, useGameboardContext as useGameboardContext2 } from "@dxos/react-ui-gameboard";
|
|
11
|
+
import { useSoundEffect } from "@dxos/react-ui-sfx";
|
|
12
|
+
import { mx as mx2 } from "@dxos/react-ui-theme";
|
|
12
13
|
|
|
13
|
-
// src/components/
|
|
14
|
+
// src/components/Info.tsx
|
|
14
15
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
15
16
|
import React, { useEffect, useMemo, useRef } from "react";
|
|
16
|
-
import {
|
|
17
|
+
import { generateName } from "@dxos/display-name";
|
|
18
|
+
import { getSpace, useMembers } from "@dxos/react-client/echo";
|
|
19
|
+
import { Icon, IconButton, Select, useTranslation } from "@dxos/react-ui";
|
|
17
20
|
import { useGameboardContext } from "@dxos/react-ui-gameboard";
|
|
18
21
|
import { mx } from "@dxos/react-ui-theme";
|
|
19
|
-
var
|
|
22
|
+
var Info = ({ classNames, orientation = "white", onOrientationChange, onClose, ...props }) => {
|
|
20
23
|
var _effect = _useSignals();
|
|
21
24
|
try {
|
|
22
25
|
const { t } = useTranslation(meta.id);
|
|
23
|
-
const { model } = useGameboardContext(
|
|
26
|
+
const { model } = useGameboardContext(Info.displayName);
|
|
27
|
+
const members = useMembers(getSpace(model.object)?.key);
|
|
24
28
|
return /* @__PURE__ */ React.createElement("div", {
|
|
25
|
-
className: mx("grid grid-rows-[min-content_1fr_min-content] is-full min-is-[
|
|
29
|
+
className: mx("grid grid-rows-[min-content_1fr_min-content] is-full min-is-[18rem] p-2 overflow-hidden bg-groupSurface rounded-sm", classNames)
|
|
26
30
|
}, /* @__PURE__ */ React.createElement(PlayerIndicator, {
|
|
27
31
|
model,
|
|
28
32
|
player: orientation === "white" ? "black" : "white",
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
icon: onClose && /* @__PURE__ */ React.createElement(IconButton, {
|
|
34
|
+
icon: "ph--x--regular",
|
|
35
|
+
iconOnly: true,
|
|
36
|
+
label: t("close info button"),
|
|
37
|
+
size: 4,
|
|
38
|
+
onClick: onClose
|
|
39
|
+
})
|
|
40
|
+
}, /* @__PURE__ */ React.createElement(PlayerSelector, {
|
|
41
|
+
value: model.object.players?.[orientation === "white" ? "black" : "white"],
|
|
42
|
+
onValueChange: (value) => {
|
|
43
|
+
model.object.players[orientation === "white" ? "black" : "white"] = value;
|
|
44
|
+
},
|
|
45
|
+
members
|
|
36
46
|
})), /* @__PURE__ */ React.createElement(History, {
|
|
37
47
|
model,
|
|
38
48
|
...props
|
|
39
49
|
}), /* @__PURE__ */ React.createElement(PlayerIndicator, {
|
|
40
50
|
model,
|
|
41
51
|
player: orientation,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
icon: onOrientationChange && /* @__PURE__ */ React.createElement(IconButton, {
|
|
53
|
+
classNames: mx("transition duration-200 ease-linear", orientation === "white" && "rotate-180"),
|
|
54
|
+
icon: "ph--arrows-clockwise--regular",
|
|
55
|
+
iconOnly: true,
|
|
56
|
+
label: t("flip board button"),
|
|
57
|
+
size: 4,
|
|
58
|
+
onClick: () => onOrientationChange(orientation === "white" ? "black" : "white")
|
|
59
|
+
})
|
|
60
|
+
}, /* @__PURE__ */ React.createElement(PlayerSelector, {
|
|
61
|
+
value: model.object.players?.[orientation],
|
|
62
|
+
onValueChange: (value) => {
|
|
63
|
+
model.object.players[orientation] = value;
|
|
64
|
+
},
|
|
65
|
+
members
|
|
50
66
|
})));
|
|
51
67
|
} finally {
|
|
52
68
|
_effect.f();
|
|
53
69
|
}
|
|
54
70
|
};
|
|
55
|
-
|
|
71
|
+
Info.displayName = "Chessboard.Info";
|
|
56
72
|
var History = ({ classNames, model, min, max, onSelect }) => {
|
|
57
73
|
var _effect = _useSignals();
|
|
58
74
|
try {
|
|
59
75
|
const { t } = useTranslation(meta.id);
|
|
60
|
-
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;
|
|
76
|
+
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;
|
|
61
77
|
const history = model.game.history();
|
|
62
78
|
const moves = useMemo(() => history.reduce((acc, move, index) => {
|
|
63
79
|
if (index % 2 === 0) {
|
|
@@ -97,7 +113,7 @@ var History = ({ classNames, model, min, max, onSelect }) => {
|
|
|
97
113
|
]);
|
|
98
114
|
return /* @__PURE__ */ React.createElement("div", {
|
|
99
115
|
ref: scrollerRef,
|
|
100
|
-
className: mx("overflow-y-
|
|
116
|
+
className: mx("overflow-y-auto", classNames),
|
|
101
117
|
style: {
|
|
102
118
|
minHeight: min === void 0 ? "auto" : `${min * 24}px`,
|
|
103
119
|
maxHeight: max === void 0 ? "auto" : `${max * 24}px`
|
|
@@ -122,12 +138,12 @@ var History = ({ classNames, model, min, max, onSelect }) => {
|
|
|
122
138
|
_effect.f();
|
|
123
139
|
}
|
|
124
140
|
};
|
|
125
|
-
var PlayerIndicator = ({ children, model, player,
|
|
141
|
+
var PlayerIndicator = ({ children, model, player, icon }) => {
|
|
126
142
|
var _effect = _useSignals();
|
|
127
143
|
try {
|
|
128
144
|
const turn = player === (model.game.turn() === "w" ? "white" : "black");
|
|
129
145
|
return /* @__PURE__ */ React.createElement("div", {
|
|
130
|
-
className: "grid grid-cols-[2rem_1fr_2rem] gap-
|
|
146
|
+
className: "grid grid-cols-[2rem_1fr_2rem] gap-2 bs-[--rail-size] pli-1 flex items-center overflow-hidden"
|
|
131
147
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
132
148
|
className: "place-items-center"
|
|
133
149
|
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
@@ -135,107 +151,46 @@ var PlayerIndicator = ({ children, model, player, title }) => {
|
|
|
135
151
|
size: 6,
|
|
136
152
|
classNames: mx(turn && (model.game.isCheckmate() ? "text-red-500" : "text-green-500"))
|
|
137
153
|
})), /* @__PURE__ */ React.createElement("div", {
|
|
138
|
-
className: "truncate"
|
|
139
|
-
},
|
|
140
|
-
} finally {
|
|
141
|
-
_effect.f();
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
// src/components/ChessboardPlayers.tsx
|
|
146
|
-
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
147
|
-
import React2 from "react";
|
|
148
|
-
import { generateName } from "@dxos/display-name";
|
|
149
|
-
import { getSpace, useMembers } from "@dxos/react-client/echo";
|
|
150
|
-
import { Icon as Icon2, Input, Select, useThemeContext } from "@dxos/react-ui";
|
|
151
|
-
import { useGameboardContext as useGameboardContext2 } from "@dxos/react-ui-gameboard";
|
|
152
|
-
import { mx as mx2 } from "@dxos/react-ui-theme";
|
|
153
|
-
var ChessboardPlayers = ({ classNames, children }) => {
|
|
154
|
-
var _effect = _useSignals2();
|
|
155
|
-
try {
|
|
156
|
-
const { model } = useGameboardContext2(ChessboardPlayers.displayName);
|
|
157
|
-
const members = useMembers(getSpace(model.object)?.key);
|
|
158
|
-
const players = model.object.players;
|
|
159
|
-
if (!players) {
|
|
160
|
-
return null;
|
|
161
|
-
}
|
|
162
|
-
return /* @__PURE__ */ React2.createElement("div", {
|
|
163
|
-
role: "none",
|
|
164
|
-
className: mx2("grid grid-cols-[1fr_min-content_1fr] pis-2 pie-2 overflow-hidden", classNames)
|
|
165
|
-
}, /* @__PURE__ */ React2.createElement("div", {
|
|
166
|
-
role: "none",
|
|
167
|
-
className: "flex flex-row-reverse items-center gap-2"
|
|
168
|
-
}, /* @__PURE__ */ React2.createElement(PlayerSelect, {
|
|
169
|
-
side: "white",
|
|
170
|
-
value: players.white,
|
|
171
|
-
onValueChange: (player) => players.white = player,
|
|
172
|
-
members
|
|
173
|
-
})), /* @__PURE__ */ React2.createElement("div", {
|
|
174
|
-
className: "flex flex-row justify-center items-center"
|
|
175
|
-
}, children), /* @__PURE__ */ React2.createElement("div", {
|
|
176
|
-
role: "none",
|
|
177
|
-
className: "flex flex-row items-center gap-2"
|
|
178
|
-
}, /* @__PURE__ */ React2.createElement(PlayerSelect, {
|
|
179
|
-
side: "black",
|
|
180
|
-
value: players.black,
|
|
181
|
-
onValueChange: (player) => players.black = player,
|
|
182
|
-
members
|
|
183
|
-
})));
|
|
154
|
+
className: "truncate overflow-hidden items-center"
|
|
155
|
+
}, children), icon);
|
|
184
156
|
} finally {
|
|
185
157
|
_effect.f();
|
|
186
158
|
}
|
|
187
159
|
};
|
|
188
|
-
|
|
189
|
-
var
|
|
190
|
-
var _effect = _useSignals2();
|
|
160
|
+
var PlayerSelector = ({ value, onValueChange, members }) => {
|
|
161
|
+
var _effect = _useSignals();
|
|
191
162
|
try {
|
|
192
|
-
const {
|
|
193
|
-
|
|
194
|
-
return /* @__PURE__ */ React2.createElement(Input.Root, null, /* @__PURE__ */ React2.createElement(Input.Label, null, /* @__PURE__ */ React2.createElement(Icon2, {
|
|
195
|
-
"aria-label": `Chess icon for side ${side}`,
|
|
196
|
-
icon: `ph--crown-cross--${iconFillMode || "regular"}`,
|
|
197
|
-
size: 6
|
|
198
|
-
})), /* @__PURE__ */ React2.createElement(Select.Root, {
|
|
163
|
+
const { t } = useTranslation(meta.id);
|
|
164
|
+
return /* @__PURE__ */ React.createElement(Select.Root, {
|
|
199
165
|
value,
|
|
200
166
|
onValueChange
|
|
201
|
-
}, /* @__PURE__ */
|
|
202
|
-
placeholder: "
|
|
203
|
-
}), /* @__PURE__ */
|
|
167
|
+
}, /* @__PURE__ */ React.createElement(Select.TriggerButton, {
|
|
168
|
+
placeholder: t("select player button")
|
|
169
|
+
}), /* @__PURE__ */ React.createElement(Select.Portal, null, /* @__PURE__ */ React.createElement(Select.Content, null, /* @__PURE__ */ React.createElement(Select.Viewport, null, members.map((member) => {
|
|
204
170
|
const memberKey = member.identity.identityKey.toHex();
|
|
205
171
|
const displayName = member.identity?.profile?.displayName || generateName(memberKey);
|
|
206
|
-
return /* @__PURE__ */
|
|
172
|
+
return /* @__PURE__ */ React.createElement(Select.Option, {
|
|
207
173
|
key: memberKey,
|
|
208
174
|
value: memberKey
|
|
209
175
|
}, displayName);
|
|
210
|
-
})), /* @__PURE__ */
|
|
176
|
+
})), /* @__PURE__ */ React.createElement(Select.Arrow, null))));
|
|
211
177
|
} finally {
|
|
212
178
|
_effect.f();
|
|
213
179
|
}
|
|
214
180
|
};
|
|
215
181
|
|
|
216
182
|
// src/components/Chessboard.tsx
|
|
217
|
-
function _define_property(obj, key, value) {
|
|
218
|
-
if (key in obj) {
|
|
219
|
-
Object.defineProperty(obj, key, {
|
|
220
|
-
value,
|
|
221
|
-
enumerable: true,
|
|
222
|
-
configurable: true,
|
|
223
|
-
writable: true
|
|
224
|
-
});
|
|
225
|
-
} else {
|
|
226
|
-
obj[key] = value;
|
|
227
|
-
}
|
|
228
|
-
return obj;
|
|
229
|
-
}
|
|
230
183
|
var ExtendedChessModel = class extends ChessModel {
|
|
184
|
+
object;
|
|
231
185
|
constructor(object) {
|
|
232
|
-
super(),
|
|
186
|
+
super(), this.object = object;
|
|
233
187
|
}
|
|
234
188
|
};
|
|
235
|
-
var
|
|
236
|
-
var _effect =
|
|
189
|
+
var Root = /* @__PURE__ */ forwardRef(({ game, children }, forwardedRef) => {
|
|
190
|
+
var _effect = _useSignals2();
|
|
237
191
|
try {
|
|
238
192
|
const model = useMemo2(() => new ExtendedChessModel(game), []);
|
|
193
|
+
const click = useSoundEffect("Click");
|
|
239
194
|
useImperativeHandle(forwardedRef, () => {
|
|
240
195
|
return {
|
|
241
196
|
setMoveNumber: (index) => model.setMoveIndex(index)
|
|
@@ -244,15 +199,56 @@ var ChessboardRoot = /* @__PURE__ */ forwardRef(({ game, children }, forwardedRe
|
|
|
244
199
|
model
|
|
245
200
|
]);
|
|
246
201
|
useEffect2(() => {
|
|
247
|
-
model.
|
|
202
|
+
if (model.pgn !== getRawPgn(game.pgn ?? "")) {
|
|
203
|
+
const silent = model.pgn === "*";
|
|
204
|
+
model.update(game.pgn);
|
|
205
|
+
if (!silent) {
|
|
206
|
+
void click.play();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
248
209
|
}, [
|
|
249
210
|
game.pgn
|
|
250
211
|
]);
|
|
212
|
+
const handleDrop = useCallback((move) => {
|
|
213
|
+
if (!model.makeMove(move)) {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
void click.play();
|
|
217
|
+
game.pgn = model.pgn;
|
|
218
|
+
return true;
|
|
219
|
+
}, [
|
|
220
|
+
model
|
|
221
|
+
]);
|
|
222
|
+
return /* @__PURE__ */ React2.createElement(Gameboard.Root, {
|
|
223
|
+
model,
|
|
224
|
+
onDrop: handleDrop
|
|
225
|
+
}, children);
|
|
226
|
+
} finally {
|
|
227
|
+
_effect.f();
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
var Content = ({ classNames, children, role }) => {
|
|
231
|
+
var _effect = _useSignals2();
|
|
232
|
+
try {
|
|
233
|
+
return /* @__PURE__ */ React2.createElement(Gameboard.Content, {
|
|
234
|
+
classNames: mx2(classNames, role === "card--popover" && "size-container popover-square"),
|
|
235
|
+
grow: !role || role === "card--extrinsic",
|
|
236
|
+
contain: !role || role === "card--extrinsic" || role === "card--popover"
|
|
237
|
+
}, children);
|
|
238
|
+
} finally {
|
|
239
|
+
_effect.f();
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
var Board = (props) => {
|
|
243
|
+
var _effect = _useSignals2();
|
|
244
|
+
try {
|
|
245
|
+
const { model } = useGameboardContext2(Board.displayName);
|
|
251
246
|
const ref = useRef2(null);
|
|
252
247
|
useEffect2(() => {
|
|
253
248
|
if (!ref.current) {
|
|
254
249
|
return;
|
|
255
250
|
}
|
|
251
|
+
ref.current.setAttribute("data-arrow-keys", "all");
|
|
256
252
|
return addEventListener(ref.current, "keydown", (ev) => {
|
|
257
253
|
switch (ev.key) {
|
|
258
254
|
case "ArrowUp":
|
|
@@ -276,50 +272,24 @@ var ChessboardRoot = /* @__PURE__ */ forwardRef(({ game, children }, forwardedRe
|
|
|
276
272
|
}, [
|
|
277
273
|
model
|
|
278
274
|
]);
|
|
279
|
-
|
|
280
|
-
if (model.makeMove(move)) {
|
|
281
|
-
game.pgn = model.pgn;
|
|
282
|
-
return true;
|
|
283
|
-
}
|
|
284
|
-
return false;
|
|
285
|
-
}, [
|
|
286
|
-
model
|
|
287
|
-
]);
|
|
288
|
-
return /* @__PURE__ */ React3.createElement(Gameboard.Root, {
|
|
289
|
-
model,
|
|
290
|
-
onDrop: handleDrop
|
|
291
|
-
}, /* @__PURE__ */ React3.createElement("div", {
|
|
275
|
+
return /* @__PURE__ */ React2.createElement(NaturalChessboard, {
|
|
292
276
|
ref,
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
className: "grid grow outline-none"
|
|
296
|
-
}, children));
|
|
297
|
-
} finally {
|
|
298
|
-
_effect.f();
|
|
299
|
-
}
|
|
300
|
-
});
|
|
301
|
-
var ChessboardContent = ({ classNames, children, role }) => {
|
|
302
|
-
var _effect = _useSignals3();
|
|
303
|
-
try {
|
|
304
|
-
return /* @__PURE__ */ React3.createElement(Gameboard.Content, {
|
|
305
|
-
classNames: mx3(classNames, role === "card--popover" && "size-container popover-square"),
|
|
306
|
-
grow: !role || role === "card--extrinsic",
|
|
307
|
-
contain: !role || role === "card--extrinsic" || role === "card--popover"
|
|
308
|
-
}, children);
|
|
277
|
+
...props
|
|
278
|
+
});
|
|
309
279
|
} finally {
|
|
310
280
|
_effect.f();
|
|
311
281
|
}
|
|
312
282
|
};
|
|
283
|
+
Board.displayName = "Chessboard.Board";
|
|
313
284
|
var Chessboard = {
|
|
314
|
-
Root
|
|
315
|
-
Content
|
|
316
|
-
Board
|
|
317
|
-
Info
|
|
318
|
-
Players: ChessboardPlayers
|
|
285
|
+
Root,
|
|
286
|
+
Content,
|
|
287
|
+
Board,
|
|
288
|
+
Info
|
|
319
289
|
};
|
|
320
290
|
|
|
321
291
|
export {
|
|
322
292
|
ExtendedChessModel,
|
|
323
293
|
Chessboard
|
|
324
294
|
};
|
|
325
|
-
//# sourceMappingURL=chunk-
|
|
295
|
+
//# sourceMappingURL=chunk-F4C2HVZL.mjs.map
|