@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/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-3LPE2B5J.mjs";
|
|
5
|
+
import "./chunk-CCF24VRU.mjs";
|
|
6
|
+
import "./chunk-DUO4WTAM.mjs";
|
|
7
|
+
export {
|
|
8
|
+
CHESS_BLUEPRINT_KEY,
|
|
9
|
+
blueprint_definition_default as default
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=blueprint-definition-Y5Y4YGNL.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Chess_exports
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-CCF24VRU.mjs";
|
|
4
4
|
|
|
5
5
|
// src/capabilities/blueprint-definition.ts
|
|
6
6
|
import { Capabilities, contributes } from "@dxos/app-framework";
|
|
@@ -8,10 +8,12 @@ import { Blueprint, Template } from "@dxos/blueprints";
|
|
|
8
8
|
import { trim } from "@dxos/util";
|
|
9
9
|
|
|
10
10
|
// src/functions/create.ts
|
|
11
|
-
import
|
|
11
|
+
import * as Effect from "effect/Effect";
|
|
12
|
+
import * as Schema from "effect/Schema";
|
|
12
13
|
import { DatabaseService, defineFunction } from "@dxos/functions";
|
|
13
14
|
var create_default = defineFunction({
|
|
14
|
-
|
|
15
|
+
key: "dxos.org/function/chess/create",
|
|
16
|
+
name: "Create Chess",
|
|
15
17
|
description: "Creates a new chess game.",
|
|
16
18
|
inputSchema: Schema.Struct({
|
|
17
19
|
pgn: Schema.optional(Schema.String.annotations({
|
|
@@ -32,11 +34,13 @@ var create_default = defineFunction({
|
|
|
32
34
|
|
|
33
35
|
// src/functions/move.ts
|
|
34
36
|
import { Chess as ChessJS } from "chess.js";
|
|
35
|
-
import
|
|
37
|
+
import * as Effect2 from "effect/Effect";
|
|
38
|
+
import * as Schema2 from "effect/Schema";
|
|
36
39
|
import { ArtifactId } from "@dxos/assistant";
|
|
37
40
|
import { DatabaseService as DatabaseService2, defineFunction as defineFunction2 } from "@dxos/functions";
|
|
38
41
|
var move_default = defineFunction2({
|
|
39
|
-
|
|
42
|
+
key: "dxos.org/function/chess/move",
|
|
43
|
+
name: "Move",
|
|
40
44
|
description: "Makes a move in the given chess game.",
|
|
41
45
|
inputSchema: Schema2.Struct({
|
|
42
46
|
id: ArtifactId.annotations({
|
|
@@ -75,15 +79,21 @@ var move_default = defineFunction2({
|
|
|
75
79
|
|
|
76
80
|
// src/functions/play.ts
|
|
77
81
|
import { Chess as ChessJS2 } from "chess.js";
|
|
78
|
-
import
|
|
82
|
+
import * as Effect3 from "effect/Effect";
|
|
83
|
+
import * as Schema3 from "effect/Schema";
|
|
79
84
|
import { ArtifactId as ArtifactId2 } from "@dxos/assistant";
|
|
80
85
|
import { DatabaseService as DatabaseService3, defineFunction as defineFunction3 } from "@dxos/functions";
|
|
81
86
|
var play_default = defineFunction3({
|
|
82
|
-
|
|
87
|
+
key: "dxos.org/function/chess/play",
|
|
88
|
+
name: "Play",
|
|
83
89
|
description: "Uses the chess engine to play the next move.",
|
|
84
90
|
inputSchema: Schema3.Struct({
|
|
85
91
|
id: ArtifactId2.annotations({
|
|
86
92
|
description: "The ID of the chess object."
|
|
93
|
+
}),
|
|
94
|
+
side: Schema3.optional(Schema3.Literal("white", "black", "any")).annotations({
|
|
95
|
+
description: "The side to play.",
|
|
96
|
+
defaultValue: "any"
|
|
87
97
|
})
|
|
88
98
|
}),
|
|
89
99
|
outputSchema: Schema3.Struct({
|
|
@@ -94,7 +104,7 @@ var play_default = defineFunction3({
|
|
|
94
104
|
description: "The move that was played."
|
|
95
105
|
})
|
|
96
106
|
}),
|
|
97
|
-
handler: Effect3.fn(function* ({ data: { id } }) {
|
|
107
|
+
handler: Effect3.fn(function* ({ data: { id, side = "any" } }) {
|
|
98
108
|
const object = yield* DatabaseService3.resolve(ArtifactId2.toDXN(id), Chess_exports.Game);
|
|
99
109
|
const chess = new ChessJS2();
|
|
100
110
|
if (object.pgn) {
|
|
@@ -102,6 +112,12 @@ var play_default = defineFunction3({
|
|
|
102
112
|
} else if (object.fen) {
|
|
103
113
|
chess.load(object.fen);
|
|
104
114
|
}
|
|
115
|
+
if (!(side === "any" || chess.turn() === "w" && side === "white" || chess.turn() === "b" && side === "black")) {
|
|
116
|
+
return {
|
|
117
|
+
move: void 0,
|
|
118
|
+
pgn: object.pgn
|
|
119
|
+
};
|
|
120
|
+
}
|
|
105
121
|
const moves = chess.moves();
|
|
106
122
|
const move = moves[Math.floor(Math.random() * moves.length)];
|
|
107
123
|
chess.move(move, {
|
|
@@ -116,17 +132,17 @@ var play_default = defineFunction3({
|
|
|
116
132
|
});
|
|
117
133
|
|
|
118
134
|
// src/capabilities/blueprint-definition.ts
|
|
119
|
-
var BLUEPRINT_KEY = "dxos.org/blueprint/chess";
|
|
120
135
|
var functions = [
|
|
121
136
|
create_default,
|
|
122
137
|
move_default,
|
|
123
138
|
play_default
|
|
124
139
|
];
|
|
125
|
-
var
|
|
140
|
+
var CHESS_BLUEPRINT_KEY = "dxos.org/blueprint/chess";
|
|
141
|
+
var blueprint_definition_default = (() => {
|
|
126
142
|
return [
|
|
127
143
|
contributes(Capabilities.Functions, functions),
|
|
128
144
|
contributes(Capabilities.BlueprintDefinition, Blueprint.make({
|
|
129
|
-
key:
|
|
145
|
+
key: CHESS_BLUEPRINT_KEY,
|
|
130
146
|
name: "Chess",
|
|
131
147
|
tools: Blueprint.toolDefinitions({
|
|
132
148
|
functions
|
|
@@ -141,13 +157,13 @@ var blueprint_definition_default = () => {
|
|
|
141
157
|
})
|
|
142
158
|
}))
|
|
143
159
|
];
|
|
144
|
-
};
|
|
160
|
+
});
|
|
145
161
|
|
|
146
162
|
export {
|
|
147
163
|
create_default,
|
|
148
164
|
move_default,
|
|
149
165
|
play_default,
|
|
150
|
-
|
|
166
|
+
CHESS_BLUEPRINT_KEY,
|
|
151
167
|
blueprint_definition_default
|
|
152
168
|
};
|
|
153
|
-
//# sourceMappingURL=chunk-
|
|
169
|
+
//# sourceMappingURL=chunk-3LPE2B5J.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,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
|