@dxos/plugin-chess 0.7.4 → 0.7.5-feature-compute.4d9d99a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/lib/browser/ChessContainer-EG4RG2MG.mjs +26 -0
  2. package/dist/lib/browser/ChessContainer-EG4RG2MG.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-6NAJOKLY.mjs +548 -0
  4. package/dist/lib/browser/chunk-6NAJOKLY.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-E24G3MMK.mjs +8 -0
  6. package/dist/lib/browser/chunk-E24G3MMK.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-BG7NXK4E.mjs → chunk-TRMP2D26.mjs} +28 -7
  8. package/dist/lib/browser/chunk-TRMP2D26.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +65 -621
  10. package/dist/lib/browser/index.mjs.map +4 -4
  11. package/dist/lib/browser/intent-resolver-HTTI4M6I.mjs +19 -0
  12. package/dist/lib/browser/intent-resolver-HTTI4M6I.mjs.map +7 -0
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/react-surface-O2LZGJGS.mjs +28 -0
  15. package/dist/lib/browser/react-surface-O2LZGJGS.mjs.map +7 -0
  16. package/dist/lib/browser/types/index.mjs +1 -2
  17. package/dist/lib/node/ChessContainer-TSXBWAED.cjs +52 -0
  18. package/dist/lib/node/ChessContainer-TSXBWAED.cjs.map +7 -0
  19. package/dist/lib/node/chunk-DI3I3BWN.cjs +40 -0
  20. package/dist/lib/node/chunk-DI3I3BWN.cjs.map +7 -0
  21. package/dist/lib/node/{chunk-3VNSWSKR.cjs → chunk-NQRTWXBJ.cjs} +31 -9
  22. package/dist/lib/node/chunk-NQRTWXBJ.cjs.map +7 -0
  23. package/dist/lib/node/chunk-P2LVKNZF.cjs +574 -0
  24. package/dist/lib/node/chunk-P2LVKNZF.cjs.map +7 -0
  25. package/dist/lib/node/index.cjs +63 -599
  26. package/dist/lib/node/index.cjs.map +4 -4
  27. package/dist/lib/node/{meta.cjs → intent-resolver-7CF7WQVU.cjs} +15 -11
  28. package/dist/lib/node/intent-resolver-7CF7WQVU.cjs.map +7 -0
  29. package/dist/lib/node/meta.json +1 -1
  30. package/dist/lib/node/react-surface-X5VT3F77.cjs +51 -0
  31. package/dist/lib/node/react-surface-X5VT3F77.cjs.map +7 -0
  32. package/dist/lib/node/types/index.cjs +5 -6
  33. package/dist/lib/node/types/index.cjs.map +2 -2
  34. package/dist/lib/node-esm/ChessContainer-GP2KGMVU.mjs +27 -0
  35. package/dist/lib/node-esm/ChessContainer-GP2KGMVU.mjs.map +7 -0
  36. package/dist/lib/node-esm/chunk-6DPPWWHM.mjs +550 -0
  37. package/dist/lib/node-esm/chunk-6DPPWWHM.mjs.map +7 -0
  38. package/dist/lib/node-esm/{chunk-RIQ5MOYO.mjs → chunk-OJWLLKVP.mjs} +28 -6
  39. package/dist/lib/node-esm/chunk-OJWLLKVP.mjs.map +7 -0
  40. package/dist/lib/node-esm/chunk-RMXO453C.mjs +10 -0
  41. package/dist/lib/node-esm/chunk-RMXO453C.mjs.map +7 -0
  42. package/dist/lib/node-esm/index.mjs +65 -621
  43. package/dist/lib/node-esm/index.mjs.map +4 -4
  44. package/dist/lib/node-esm/intent-resolver-NWEEQVXB.mjs +20 -0
  45. package/dist/lib/node-esm/intent-resolver-NWEEQVXB.mjs.map +7 -0
  46. package/dist/lib/node-esm/meta.json +1 -1
  47. package/dist/lib/node-esm/react-surface-S4UTZKHT.mjs +29 -0
  48. package/dist/lib/node-esm/react-surface-S4UTZKHT.mjs.map +7 -0
  49. package/dist/lib/node-esm/types/index.mjs +1 -2
  50. package/dist/types/src/ChessPlugin.d.ts +1 -3
  51. package/dist/types/src/ChessPlugin.d.ts.map +1 -1
  52. package/dist/types/src/capabilities/index.d.ts +3 -0
  53. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  54. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
  55. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  56. package/dist/types/src/capabilities/react-surface.d.ts +4 -0
  57. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  58. package/dist/types/src/components/ChessContainer.d.ts.map +1 -1
  59. package/dist/types/src/components/Chessboard/Chessboard.d.ts +2 -2
  60. package/dist/types/src/components/Chessboard/Chessboard.d.ts.map +1 -1
  61. package/dist/types/src/components/Chessboard/Chessboard.stories.d.ts +14 -3
  62. package/dist/types/src/components/Chessboard/Chessboard.stories.d.ts.map +1 -1
  63. package/dist/types/src/components/index.d.ts +2 -0
  64. package/dist/types/src/components/index.d.ts.map +1 -1
  65. package/dist/types/src/index.d.ts +2 -2
  66. package/dist/types/src/index.d.ts.map +1 -1
  67. package/dist/types/src/meta.d.ts +1 -2
  68. package/dist/types/src/meta.d.ts.map +1 -1
  69. package/dist/types/src/types/schema.d.ts +10 -8
  70. package/dist/types/src/types/schema.d.ts.map +1 -1
  71. package/dist/types/src/types/types.d.ts +15 -6
  72. package/dist/types/src/types/types.d.ts.map +1 -1
  73. package/dist/types/tsconfig.tsbuildinfo +1 -0
  74. package/package.json +20 -26
  75. package/src/ChessPlugin.tsx +46 -89
  76. package/src/capabilities/index.ts +8 -0
  77. package/src/capabilities/intent-resolver.ts +18 -0
  78. package/src/capabilities/react-surface.tsx +22 -0
  79. package/src/components/ChessContainer.tsx +3 -2
  80. package/src/components/Chessboard/Chessboard.stories.tsx +21 -8
  81. package/src/components/Chessboard/Chessboard.tsx +30 -17
  82. package/src/components/index.ts +3 -0
  83. package/src/index.ts +2 -3
  84. package/src/meta.ts +1 -1
  85. package/src/types/schema.ts +1 -0
  86. package/src/types/types.ts +11 -20
  87. package/dist/lib/browser/chunk-2H2BTWYT.mjs +0 -15
  88. package/dist/lib/browser/chunk-2H2BTWYT.mjs.map +0 -7
  89. package/dist/lib/browser/chunk-BG7NXK4E.mjs.map +0 -7
  90. package/dist/lib/browser/meta.mjs +0 -9
  91. package/dist/lib/browser/meta.mjs.map +0 -7
  92. package/dist/lib/node/chunk-3VNSWSKR.cjs.map +0 -7
  93. package/dist/lib/node/chunk-Q4NVPVPX.cjs +0 -38
  94. package/dist/lib/node/chunk-Q4NVPVPX.cjs.map +0 -7
  95. package/dist/lib/node/meta.cjs.map +0 -7
  96. package/dist/lib/node-esm/chunk-RIQ5MOYO.mjs.map +0 -7
  97. package/dist/lib/node-esm/chunk-WNE2FPQW.mjs +0 -17
  98. package/dist/lib/node-esm/chunk-WNE2FPQW.mjs.map +0 -7
  99. package/dist/lib/node-esm/meta.mjs +0 -10
  100. package/dist/lib/node-esm/meta.mjs.map +0 -7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-chess",
3
- "version": "0.7.4",
3
+ "version": "0.7.5-feature-compute.4d9d99a",
4
4
  "description": "Chess for new plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -13,11 +13,6 @@
13
13
  "browser": "./dist/lib/browser/index.mjs",
14
14
  "node": "./dist/lib/node-esm/index.mjs"
15
15
  },
16
- "./meta": {
17
- "types": "./dist/types/src/meta.d.ts",
18
- "browser": "./dist/lib/browser/meta.mjs",
19
- "node": "./dist/lib/node-esm/meta.mjs"
20
- },
21
16
  "./types": {
22
17
  "types": "./dist/types/src/types/index.d.ts",
23
18
  "browser": "./dist/lib/browser/types/index.mjs",
@@ -27,9 +22,6 @@
27
22
  "types": "dist/types/src/index.d.ts",
28
23
  "typesVersions": {
29
24
  "*": {
30
- "meta": [
31
- "dist/types/src/meta.d.ts"
32
- ],
33
25
  "types": [
34
26
  "dist/types/src/types/index.d.ts"
35
27
  ]
@@ -42,19 +34,21 @@
42
34
  "dependencies": {
43
35
  "@effect/schema": "^0.75.5",
44
36
  "@preact/signals-core": "^1.6.0",
45
- "chess.js": "^1.0.0-beta.8",
46
- "react-chessboard": "^4.7.1",
37
+ "chess.js": "^1.0.0",
38
+ "react-chessboard": "^4.7.2",
39
+ "react-dnd-html5-backend": "^16.0.1",
47
40
  "react-resize-detector": "^11.0.1",
48
- "@dxos/app-framework": "0.7.4",
49
- "@dxos/async": "0.7.4",
50
- "@dxos/invariant": "0.7.4",
51
- "@dxos/display-name": "0.7.4",
52
- "@dxos/echo-schema": "0.7.4",
53
- "@dxos/plugin-client": "0.7.4",
54
- "@dxos/plugin-graph": "0.7.4",
55
- "@dxos/live-object": "0.7.4",
56
- "@dxos/react-client": "0.7.4",
57
- "@dxos/plugin-space": "0.7.4"
41
+ "@dxos/async": "0.7.5-feature-compute.4d9d99a",
42
+ "@dxos/app-framework": "0.7.5-feature-compute.4d9d99a",
43
+ "@dxos/display-name": "0.7.5-feature-compute.4d9d99a",
44
+ "@dxos/invariant": "0.7.5-feature-compute.4d9d99a",
45
+ "@dxos/echo-schema": "0.7.5-feature-compute.4d9d99a",
46
+ "@dxos/live-object": "0.7.5-feature-compute.4d9d99a",
47
+ "@dxos/plugin-graph": "0.7.5-feature-compute.4d9d99a",
48
+ "@dxos/plugin-client": "0.7.5-feature-compute.4d9d99a",
49
+ "@dxos/plugin-space": "0.7.5-feature-compute.4d9d99a",
50
+ "@dxos/react-client": "0.7.5-feature-compute.4d9d99a",
51
+ "@dxos/react-ui-stack": "0.7.5-feature-compute.4d9d99a"
58
52
  },
59
53
  "devDependencies": {
60
54
  "@phosphor-icons/react": "^2.1.5",
@@ -63,16 +57,16 @@
63
57
  "react": "~18.2.0",
64
58
  "react-dom": "~18.2.0",
65
59
  "vite": "5.4.7",
66
- "@dxos/react-ui": "0.7.4",
67
- "@dxos/react-ui-theme": "0.7.4",
68
- "@dxos/storybook-utils": "0.7.4"
60
+ "@dxos/react-ui-theme": "0.7.5-feature-compute.4d9d99a",
61
+ "@dxos/react-ui": "0.7.5-feature-compute.4d9d99a",
62
+ "@dxos/storybook-utils": "0.7.5-feature-compute.4d9d99a"
69
63
  },
70
64
  "peerDependencies": {
71
65
  "@phosphor-icons/react": "^2.1.5",
72
66
  "react": "~18.2.0",
73
67
  "react-dom": "~18.2.0",
74
- "@dxos/react-ui": "0.7.4",
75
- "@dxos/react-ui-theme": "0.7.4"
68
+ "@dxos/react-ui": "0.7.5-feature-compute.4d9d99a",
69
+ "@dxos/react-ui-theme": "0.7.5-feature-compute.4d9d99a"
76
70
  },
77
71
  "publishConfig": {
78
72
  "access": "public"
@@ -2,98 +2,55 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import React from 'react';
5
+ import {
6
+ Capabilities,
7
+ contributes,
8
+ createIntent,
9
+ defineModule,
10
+ definePlugin,
11
+ Events,
12
+ oneOf,
13
+ } from '@dxos/app-framework';
14
+ import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
6
15
 
7
- import { NavigationAction, parseIntentPlugin, type PluginDefinition, resolvePlugin } from '@dxos/app-framework';
8
- import { create } from '@dxos/live-object';
9
- import { parseClientPlugin } from '@dxos/plugin-client';
10
- import { type ActionGroup, createExtension, isActionGroup } from '@dxos/plugin-graph';
11
- import { SpaceAction } from '@dxos/plugin-space';
12
-
13
- import ChessContainer from './components/ChessContainer';
14
- import meta, { CHESS_PLUGIN } from './meta';
16
+ import { IntentResolver, ReactSurface } from './capabilities';
17
+ import { CHESS_PLUGIN, meta } from './meta';
15
18
  import translations from './translations';
16
- import { ChessAction, type ChessPluginProvides, GameType, isObject } from './types';
19
+ import { ChessAction, GameType } from './types';
17
20
 
18
- export const ChessPlugin = (): PluginDefinition<ChessPluginProvides> => {
19
- return {
20
- meta,
21
- provides: {
22
- metadata: {
23
- records: {
24
- [GameType.typename]: {
25
- createObject: ChessAction.CREATE,
21
+ export const ChessPlugin = () =>
22
+ definePlugin(meta, [
23
+ defineModule({
24
+ id: `${meta.id}/module/translations`,
25
+ activatesOn: Events.SetupTranslations,
26
+ activate: () => contributes(Capabilities.Translations, translations),
27
+ }),
28
+ defineModule({
29
+ id: `${meta.id}/module/metadata`,
30
+ activatesOn: oneOf(Events.Startup, Events.SetupAppGraph),
31
+ activate: () =>
32
+ contributes(Capabilities.Metadata, {
33
+ id: GameType.typename,
34
+ metadata: {
35
+ createObject: (props: { name?: string }) => createIntent(ChessAction.Create, props),
26
36
  placeholder: ['game title placeholder', { ns: CHESS_PLUGIN }],
27
37
  icon: 'ph--shield-chevron--regular',
28
38
  },
29
- },
30
- },
31
- echo: {
32
- schema: [GameType],
33
- },
34
- graph: {
35
- builder: (plugins) => {
36
- const client = resolvePlugin(plugins, parseClientPlugin)?.provides.client;
37
- const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatch;
38
- if (!client || !dispatch) {
39
- return [];
40
- }
41
-
42
- return createExtension({
43
- id: ChessAction.CREATE,
44
- filter: (node): node is ActionGroup => isActionGroup(node) && node.id.startsWith(SpaceAction.ADD_OBJECT),
45
- actions: ({ node }) => {
46
- const id = node.id.split('/').at(-1);
47
- const [spaceId, objectId] = id?.split(':') ?? [];
48
- const space = client.spaces.get().find((space) => space.id === spaceId);
49
- const object = objectId && space?.db.getObjectById(objectId);
50
- const target = objectId ? object : space;
51
- if (!target) {
52
- return;
53
- }
54
-
55
- return [
56
- {
57
- id: `${CHESS_PLUGIN}/create/${node.id}`,
58
- data: async () => {
59
- await dispatch([
60
- { plugin: CHESS_PLUGIN, action: ChessAction.CREATE },
61
- { action: SpaceAction.ADD_OBJECT, data: { target } },
62
- { action: NavigationAction.OPEN },
63
- ]);
64
- },
65
- properties: {
66
- label: ['create game label', { ns: CHESS_PLUGIN }],
67
- icon: 'ph--shield-chevron--regular',
68
- testId: 'chessPlugin.createObject',
69
- },
70
- },
71
- ];
72
- },
73
- });
74
- },
75
- },
76
- translations,
77
- surface: {
78
- component: ({ data, role }) => {
79
- switch (role) {
80
- case 'article':
81
- case 'section':
82
- return isObject(data.object) ? <ChessContainer game={data.object} role={role} /> : null;
83
- default:
84
- return null;
85
- }
86
- },
87
- },
88
- intent: {
89
- resolver: (intent) => {
90
- switch (intent.action) {
91
- case ChessAction.CREATE: {
92
- return { data: create(GameType, {}) };
93
- }
94
- }
95
- },
96
- },
97
- },
98
- };
99
- };
39
+ }),
40
+ }),
41
+ defineModule({
42
+ id: `${meta.id}/module/schema`,
43
+ activatesOn: ClientEvents.SetupClient,
44
+ activate: () => contributes(ClientCapabilities.Schema, [GameType]),
45
+ }),
46
+ defineModule({
47
+ id: `${meta.id}/module/react-surface`,
48
+ activatesOn: Events.Startup,
49
+ activate: ReactSurface,
50
+ }),
51
+ defineModule({
52
+ id: `${meta.id}/module/intent-resolver`,
53
+ activatesOn: Events.Startup,
54
+ activate: IntentResolver,
55
+ }),
56
+ ]);
@@ -0,0 +1,8 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { lazy } from '@dxos/app-framework';
6
+
7
+ export const IntentResolver = lazy(() => import('./intent-resolver'));
8
+ export const ReactSurface = lazy(() => import('./react-surface'));
@@ -0,0 +1,18 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capabilities, contributes, createResolver } from '@dxos/app-framework';
6
+ import { create } from '@dxos/live-object';
7
+
8
+ import { ChessAction, GameType } from '../types';
9
+
10
+ export default () =>
11
+ contributes(
12
+ Capabilities.IntentResolver,
13
+ createResolver(ChessAction.Create, ({ name }) => ({
14
+ data: {
15
+ object: create(GameType, { name }),
16
+ },
17
+ })),
18
+ );
@@ -0,0 +1,22 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
8
+
9
+ import { ChessContainer } from '../components';
10
+ import { CHESS_PLUGIN } from '../meta';
11
+ import { isObject, type GameType } from '../types';
12
+
13
+ export default () =>
14
+ contributes(
15
+ Capabilities.ReactSurface,
16
+ createSurface({
17
+ id: CHESS_PLUGIN,
18
+ role: ['article', 'section'],
19
+ filter: (data): data is { subject: GameType } => isObject(data.subject),
20
+ component: ({ data, role }) => <ChessContainer game={data.subject} role={role} />,
21
+ }),
22
+ );
@@ -5,6 +5,7 @@
5
5
  import React, { type ComponentProps } from 'react';
6
6
 
7
7
  import { getSpace } from '@dxos/react-client/echo';
8
+ import { StackItem } from '@dxos/react-ui-stack';
8
9
 
9
10
  import { Chess } from './Chess';
10
11
 
@@ -15,9 +16,9 @@ const ChessContainer = ({ game, role }: Pick<ComponentProps<typeof Chess>, 'game
15
16
  }
16
17
 
17
18
  return (
18
- <div role='none' className='flex flex-col row-span-2 is-full overflow-hidden'>
19
+ <StackItem.Content toolbar={false}>
19
20
  <Chess game={game} space={space} playerSelector={role === 'article'} />
20
- </div>
21
+ </StackItem.Content>
21
22
  );
22
23
  };
23
24
 
@@ -7,11 +7,12 @@ import '@dxos-theme';
7
7
  import { Chess } from 'chess.js';
8
8
  import React, { useState } from 'react';
9
9
 
10
+ import { mx } from '@dxos/react-ui-theme';
10
11
  import { withTheme } from '@dxos/storybook-utils';
11
12
 
12
13
  import { Chessboard, type ChessModel, type ChessMove, ChessPanel } from './Chessboard';
13
14
 
14
- const Story = () => {
15
+ const Story = ({ size, panel = false }: { size?: 'large' | 'small'; panel: boolean }) => {
15
16
  const [model, setModel] = useState<ChessModel>({ chess: new Chess() });
16
17
  const handleUpdate = (move: ChessMove) => {
17
18
  if (model.chess.move(move)) {
@@ -21,12 +22,14 @@ const Story = () => {
21
22
 
22
23
  return (
23
24
  <div className='flex flex-row'>
24
- <div className='w-[600px]'>
25
- <Chessboard model={model} boardStyle='default' onUpdate={handleUpdate} />
26
- </div>
27
- <div className='w-[160px] ml-8'>
28
- <ChessPanel model={model} />
25
+ <div className={mx(size === 'small' ? 'w-[320px]' : 'w-[640px]')}>
26
+ <Chessboard model={model} onUpdate={handleUpdate} />
29
27
  </div>
28
+ {panel && (
29
+ <div className='w-[160px] ml-8'>
30
+ <ChessPanel model={model} />
31
+ </div>
32
+ )}
30
33
  </div>
31
34
  );
32
35
  };
@@ -38,6 +41,16 @@ export default {
38
41
  decorators: [withTheme],
39
42
  };
40
43
 
41
- export const Default = {
42
- component: Chessboard,
44
+ export const Default = {};
45
+
46
+ export const Panel = {
47
+ args: {
48
+ panel: true,
49
+ },
50
+ };
51
+
52
+ export const Micro = {
53
+ args: {
54
+ size: 'small',
55
+ },
43
56
  };
@@ -4,8 +4,9 @@
4
4
 
5
5
  import { ArrowURightDown, Circle } from '@phosphor-icons/react';
6
6
  import { Chess, type Color } from 'chess.js';
7
- import React, { type FC } from 'react';
8
- import { Chessboard as ReactChessboard } from 'react-chessboard';
7
+ import React, { useRef, type FC } from 'react';
8
+ import { ChessboardDnDProvider, Chessboard as ReactChessboard } from 'react-chessboard';
9
+ import { HTML5Backend } from 'react-dnd-html5-backend';
9
10
  import { useResizeDetector } from 'react-resize-detector';
10
11
 
11
12
  import { getSize, mx } from '@dxos/react-ui-theme';
@@ -68,8 +69,8 @@ export type ChessboardProps = {
68
69
  };
69
70
 
70
71
  /**
71
- * https://www.npmjs.com/package/chess.js
72
- * https://www.npmjs.com/package/react-chessboard
72
+ * https://github.com/jhlywa/chess.js
73
+ * https://react-chessboard.com/?path=/story/example-chessboard--configurable-board
73
74
  */
74
75
  export const Chessboard = ({
75
76
  model: { chess },
@@ -79,7 +80,8 @@ export const Chessboard = ({
79
80
  pieces = ChessPieces.STANDARD,
80
81
  onUpdate,
81
82
  }: ChessboardProps) => {
82
- const { ref, width } = useResizeDetector();
83
+ const chessRoot = useRef<HTMLDivElement>(null);
84
+ const { ref, width, height } = useResizeDetector();
83
85
  const style = boardStyles[boardStyle];
84
86
 
85
87
  const handleDrop = (source: any, target: any, piece: any) => {
@@ -99,19 +101,30 @@ export const Chessboard = ({
99
101
  }
100
102
  };
101
103
 
102
- // https://react-chessboard.com/?path=/story/example-chessboard--configurable-board
103
104
  return (
104
- <div ref={ref} className='flex grow aspect-square overflow-hidden'>
105
- <ReactChessboard
106
- boardWidth={width}
107
- position={chess.fen()}
108
- boardOrientation={orientation === 'w' ? 'white' : 'black'}
109
- arePiecesDraggable={!readonly}
110
- onPieceDrop={handleDrop}
111
- customPieces={chessPieces[pieces]}
112
- {...style}
113
- {...props}
114
- />
105
+ <div ref={ref} className='flex w-full h-full justify-center items-center'>
106
+ <div
107
+ className='flex w-full justify-center'
108
+ style={{ width: width && height ? Math.min(width, height) : undefined }}
109
+ >
110
+ <div ref={chessRoot} className='w-full relative' style={{ transform: 'translate3d(0, 0, 0)' }}>
111
+ {/* TODO(burdon): Prevents interference with external DND, but drag position is broken. Fix for touch also. */}
112
+ <ChessboardDnDProvider debugMode={true} backend={HTML5Backend} options={{ rootElement: chessRoot.current }}>
113
+ <ReactChessboard
114
+ boardWidth={width && height ? Math.min(width, height) : undefined}
115
+ boardOrientation={orientation === 'w' ? 'white' : 'black'}
116
+ allowDragOutsideBoard={false}
117
+ arePiecesDraggable={true}
118
+ // arePiecesDraggable={!readonly}
119
+ customPieces={chessPieces[pieces]}
120
+ position={chess.fen()}
121
+ onPieceDrop={handleDrop}
122
+ {...style}
123
+ {...props}
124
+ />
125
+ </ChessboardDnDProvider>
126
+ </div>
127
+ </div>
115
128
  </div>
116
129
  );
117
130
  };
@@ -4,4 +4,7 @@
4
4
 
5
5
  import { lazy } from 'react';
6
6
 
7
+ export * from './Chess';
8
+ export * from './Chessboard';
9
+
7
10
  export const ChessContainer = lazy(() => import('./ChessContainer'));
package/src/index.ts CHANGED
@@ -2,8 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { ChessPlugin } from './ChessPlugin';
6
-
7
- export default ChessPlugin;
5
+ export * from './components';
6
+ export * from './meta';
8
7
 
9
8
  export * from './ChessPlugin';
package/src/meta.ts CHANGED
@@ -6,7 +6,7 @@ import { type PluginMeta } from '@dxos/app-framework';
6
6
 
7
7
  export const CHESS_PLUGIN = 'dxos.org/plugin/chess';
8
8
 
9
- export default {
9
+ export const meta = {
10
10
  id: CHESS_PLUGIN,
11
11
  name: 'Chess',
12
12
  description: 'Play chess.',
@@ -16,6 +16,7 @@ export const MoveSchema = S.mutable(
16
16
 
17
17
  export class GameType extends TypedObject({ typename: 'dxos.org/type/Chess', version: '0.1.0' })(
18
18
  {
19
+ name: S.optional(S.String),
19
20
  playerWhite: S.String,
20
21
  playerBlack: S.String,
21
22
  moves: S.mutable(S.Array(S.String)),
@@ -2,34 +2,25 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import type {
6
- GraphBuilderProvides,
7
- IntentResolverProvides,
8
- MetadataRecordsProvides,
9
- SurfaceProvides,
10
- TranslationsProvides,
11
- } from '@dxos/app-framework';
5
+ import { S } from '@dxos/echo-schema';
12
6
  import { isReactiveObject } from '@dxos/live-object';
13
- import { type SchemaProvides } from '@dxos/plugin-space';
14
7
 
15
8
  import { GameType } from './schema';
16
9
  import { CHESS_PLUGIN } from '../meta';
17
10
 
18
- const CHESS_ACTION = `${CHESS_PLUGIN}/action`;
11
+ export namespace ChessAction {
12
+ const CHESS_ACTION = `${CHESS_PLUGIN}/action`;
19
13
 
20
- export enum ChessAction {
21
- CREATE = `${CHESS_ACTION}/create`,
14
+ export class Create extends S.TaggedClass<Create>()(`${CHESS_ACTION}/create`, {
15
+ input: S.Struct({
16
+ name: S.optional(S.String),
17
+ }),
18
+ output: S.Struct({
19
+ object: GameType,
20
+ }),
21
+ }) {}
22
22
  }
23
23
 
24
- export type ChessProvides = {};
25
-
26
- export type ChessPluginProvides = SurfaceProvides &
27
- IntentResolverProvides &
28
- GraphBuilderProvides &
29
- MetadataRecordsProvides &
30
- TranslationsProvides &
31
- SchemaProvides;
32
-
33
24
  export const isObject = (object: unknown): object is GameType => {
34
25
  return isReactiveObject(object) && object instanceof GameType;
35
26
  };
@@ -1,15 +0,0 @@
1
- // packages/plugins/plugin-chess/src/meta.ts
2
- var CHESS_PLUGIN = "dxos.org/plugin/chess";
3
- var meta_default = {
4
- id: CHESS_PLUGIN,
5
- name: "Chess",
6
- description: "Play chess.",
7
- icon: "ph--shield-chevron--regular",
8
- source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-chess"
9
- };
10
-
11
- export {
12
- CHESS_PLUGIN,
13
- meta_default
14
- };
15
- //# sourceMappingURL=chunk-2H2BTWYT.mjs.map
@@ -1,7 +0,0 @@
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';\n\nexport const CHESS_PLUGIN = 'dxos.org/plugin/chess';\n\nexport default {\n id: CHESS_PLUGIN,\n name: 'Chess',\n description: 'Play chess.',\n icon: 'ph--shield-chevron--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-chess',\n} satisfies PluginMeta;\n"],
5
- "mappings": ";AAMO,IAAMA,eAAe;AAE5B,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
6
- "names": ["CHESS_PLUGIN", "id", "name", "description", "icon", "source"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types/schema.ts", "../../../src/types/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { S, TypedObject } from '@dxos/echo-schema';\n\nexport const MoveSchema = S.mutable(\n S.partial(\n S.Struct({\n source: S.String,\n target: S.String,\n piece: S.String,\n }),\n ),\n);\n\nexport class GameType extends TypedObject({ typename: 'dxos.org/type/Chess', version: '0.1.0' })(\n {\n playerWhite: S.String,\n playerBlack: S.String,\n moves: S.mutable(S.Array(S.String)),\n pgn: S.String,\n },\n { partial: true },\n) {}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { isReactiveObject } from '@dxos/live-object';\nimport { type SchemaProvides } from '@dxos/plugin-space';\n\nimport { GameType } from './schema';\nimport { CHESS_PLUGIN } from '../meta';\n\nconst CHESS_ACTION = `${CHESS_PLUGIN}/action`;\n\nexport enum ChessAction {\n CREATE = `${CHESS_ACTION}/create`,\n}\n\nexport type ChessProvides = {};\n\nexport type ChessPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MetadataRecordsProvides &\n TranslationsProvides &\n SchemaProvides;\n\nexport const isObject = (object: unknown): object is GameType => {\n return isReactiveObject(object) && object instanceof GameType;\n};\n"],
5
- "mappings": ";;;;;AAIA,SAASA,GAAGC,mBAAmB;AAExB,IAAMC,aAAaC,EAAEC,QAC1BD,EAAEE,QACAF,EAAEG,OAAO;EACPC,QAAQJ,EAAEK;EACVC,QAAQN,EAAEK;EACVE,OAAOP,EAAEK;AACX,CAAA,CAAA,CAAA;AAIG,IAAMG,WAAN,cAAuBC,YAAY;EAAEC,UAAU;EAAuBC,SAAS;AAAQ,CAAA,EAC5F;EACEC,aAAaZ,EAAEK;EACfQ,aAAab,EAAEK;EACfS,OAAOd,EAAEC,QAAQD,EAAEe,MAAMf,EAAEK,MAAM,CAAA;EACjCW,KAAKhB,EAAEK;AACT,GACA;EAAEH,SAAS;AAAK,CAAA,EAAA;AACf;;;ACbH,SAASe,wBAAwB;AAMjC,IAAMC,eAAe,GAAGC,YAAAA;;UAEZC,cAAAA;wCACD,GAAGF,YAAAA,SAAqB,IAAA;GADvBE,gBAAAA,cAAAA,CAAAA,EAAAA;AAaL,IAAMC,WAAW,CAACC,WAAAA;AACvB,SAAOC,iBAAiBD,MAAAA,KAAWA,kBAAkBE;AACvD;",
6
- "names": ["S", "TypedObject", "MoveSchema", "S", "mutable", "partial", "Struct", "source", "String", "target", "piece", "GameType", "TypedObject", "typename", "version", "playerWhite", "playerBlack", "moves", "Array", "pgn", "isReactiveObject", "CHESS_ACTION", "CHESS_PLUGIN", "ChessAction", "isObject", "object", "isReactiveObject", "GameType"]
7
- }
@@ -1,9 +0,0 @@
1
- import {
2
- CHESS_PLUGIN,
3
- meta_default
4
- } from "./chunk-2H2BTWYT.mjs";
5
- export {
6
- CHESS_PLUGIN,
7
- meta_default as default
8
- };
9
- //# sourceMappingURL=meta.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types/schema.ts", "../../../src/types/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { S, TypedObject } from '@dxos/echo-schema';\n\nexport const MoveSchema = S.mutable(\n S.partial(\n S.Struct({\n source: S.String,\n target: S.String,\n piece: S.String,\n }),\n ),\n);\n\nexport class GameType extends TypedObject({ typename: 'dxos.org/type/Chess', version: '0.1.0' })(\n {\n playerWhite: S.String,\n playerBlack: S.String,\n moves: S.mutable(S.Array(S.String)),\n pgn: S.String,\n },\n { partial: true },\n) {}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { isReactiveObject } from '@dxos/live-object';\nimport { type SchemaProvides } from '@dxos/plugin-space';\n\nimport { GameType } from './schema';\nimport { CHESS_PLUGIN } from '../meta';\n\nconst CHESS_ACTION = `${CHESS_PLUGIN}/action`;\n\nexport enum ChessAction {\n CREATE = `${CHESS_ACTION}/create`,\n}\n\nexport type ChessProvides = {};\n\nexport type ChessPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MetadataRecordsProvides &\n TranslationsProvides &\n SchemaProvides;\n\nexport const isObject = (object: unknown): object is GameType => {\n return isReactiveObject(object) && object instanceof GameType;\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,yBAA+B;ACO/B,yBAAiC;ADL1B,IAAMA,aAAaC,qBAAEC,QAC1BD,qBAAEE,QACAF,qBAAEG,OAAO;EACPC,QAAQJ,qBAAEK;EACVC,QAAQN,qBAAEK;EACVE,OAAOP,qBAAEK;AACX,CAAA,CAAA,CAAA;AAIG,IAAMG,WAAN,kBAAuBC,gCAAY;EAAEC,UAAU;EAAuBC,SAAS;AAAQ,CAAA,EAC5F;EACEC,aAAaZ,qBAAEK;EACfQ,aAAab,qBAAEK;EACfS,OAAOd,qBAAEC,QAAQD,qBAAEe,MAAMf,qBAAEK,MAAM,CAAA;EACjCW,KAAKhB,qBAAEK;AACT,GACA;EAAEH,SAAS;AAAK,CAAA,EAAA;AACf;ACPH,IAAMe,eAAe,GAAGC,kCAAAA;;UAEZC,cAAAA;wCACD,GAAGF,YAAAA,SAAqB,IAAA;GADvBE,gBAAAA,cAAAA,CAAAA,EAAAA;AAaL,IAAMC,WAAW,CAACC,WAAAA;AACvB,aAAOC,qCAAiBD,MAAAA,KAAWA,kBAAkBb;AACvD;",
6
- "names": ["MoveSchema", "S", "mutable", "partial", "Struct", "source", "String", "target", "piece", "GameType", "TypedObject", "typename", "version", "playerWhite", "playerBlack", "moves", "Array", "pgn", "CHESS_ACTION", "CHESS_PLUGIN", "ChessAction", "isObject", "object", "isReactiveObject"]
7
- }
@@ -1,38 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_Q4NVPVPX_exports = {};
20
- __export(chunk_Q4NVPVPX_exports, {
21
- CHESS_PLUGIN: () => CHESS_PLUGIN,
22
- meta_default: () => meta_default
23
- });
24
- module.exports = __toCommonJS(chunk_Q4NVPVPX_exports);
25
- var CHESS_PLUGIN = "dxos.org/plugin/chess";
26
- var meta_default = {
27
- id: CHESS_PLUGIN,
28
- name: "Chess",
29
- description: "Play chess.",
30
- icon: "ph--shield-chevron--regular",
31
- source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-chess"
32
- };
33
- // Annotate the CommonJS export names for ESM import in node:
34
- 0 && (module.exports = {
35
- CHESS_PLUGIN,
36
- meta_default
37
- });
38
- //# sourceMappingURL=chunk-Q4NVPVPX.cjs.map
@@ -1,7 +0,0 @@
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';\n\nexport const CHESS_PLUGIN = 'dxos.org/plugin/chess';\n\nexport default {\n id: CHESS_PLUGIN,\n name: 'Chess',\n description: 'Play chess.',\n icon: 'ph--shield-chevron--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-chess',\n} satisfies PluginMeta;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,eAAe;AAE5B,IAAA,eAAe;EACbC,IAAID;EACJE,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
6
- "names": ["CHESS_PLUGIN", "id", "name", "description", "icon", "source"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["meta.cjs"],
4
- "sourcesContent": ["import {\n CHESS_PLUGIN,\n meta_default\n} from \"./chunk-Q4NVPVPX.cjs\";\nexport {\n CHESS_PLUGIN,\n meta_default as default\n};\n//# sourceMappingURL=meta.cjs.map\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAGO;",
6
- "names": []
7
- }