@dxos/plugin-board 0.8.4-main.5ad4a44 → 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.
Files changed (45) hide show
  1. package/dist/lib/browser/{chunk-Z6L4ZVCB.mjs → chunk-BPWAJIIV.mjs} +11 -6
  2. package/dist/lib/browser/chunk-BPWAJIIV.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-RHMZXTJ7.mjs → chunk-Q2FY5QDD.mjs} +39 -25
  4. package/dist/lib/browser/chunk-Q2FY5QDD.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +15 -14
  6. package/dist/lib/browser/index.mjs.map +3 -3
  7. package/dist/lib/browser/{intent-resolver-H6OF7V77.mjs → intent-resolver-N25TTBCB.mjs} +2 -2
  8. package/dist/lib/browser/meta.json +1 -1
  9. package/dist/lib/browser/{react-surface-37LEVBKY.mjs → react-surface-QP64T3BI.mjs} +3 -3
  10. package/dist/lib/browser/types/index.mjs +1 -1
  11. package/dist/lib/node-esm/{chunk-AWLY252W.mjs → chunk-366TAZLJ.mjs} +11 -6
  12. package/dist/lib/node-esm/chunk-366TAZLJ.mjs.map +7 -0
  13. package/dist/lib/node-esm/{chunk-XZA5WICX.mjs → chunk-WG2I3CAR.mjs} +39 -25
  14. package/dist/lib/node-esm/chunk-WG2I3CAR.mjs.map +7 -0
  15. package/dist/lib/node-esm/index.mjs +15 -14
  16. package/dist/lib/node-esm/index.mjs.map +3 -3
  17. package/dist/lib/node-esm/{intent-resolver-L534P6FM.mjs → intent-resolver-IAZULV42.mjs} +2 -2
  18. package/dist/lib/node-esm/meta.json +1 -1
  19. package/dist/lib/node-esm/{react-surface-GVHSH2W2.mjs → react-surface-D6JA57PU.mjs} +3 -3
  20. package/dist/lib/node-esm/types/index.mjs +1 -1
  21. package/dist/types/src/BoardPlugin.d.ts.map +1 -1
  22. package/dist/types/src/components/BoardContainer.d.ts.map +1 -1
  23. package/dist/types/src/components/BoardContainer.stories.d.ts +1 -0
  24. package/dist/types/src/components/BoardContainer.stories.d.ts.map +1 -1
  25. package/dist/types/src/meta.d.ts.map +1 -1
  26. package/dist/types/src/translations.d.ts +1 -0
  27. package/dist/types/src/translations.d.ts.map +1 -1
  28. package/dist/types/src/types/Board.d.ts +4 -10
  29. package/dist/types/src/types/Board.d.ts.map +1 -1
  30. package/dist/types/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +34 -32
  32. package/src/BoardPlugin.tsx +7 -12
  33. package/src/components/BoardContainer.stories.tsx +4 -4
  34. package/src/components/BoardContainer.tsx +56 -46
  35. package/src/meta.ts +6 -2
  36. package/src/translations.ts +1 -0
  37. package/src/types/Board.ts +4 -4
  38. package/dist/lib/browser/chunk-RHMZXTJ7.mjs.map +0 -7
  39. package/dist/lib/browser/chunk-Z6L4ZVCB.mjs.map +0 -7
  40. package/dist/lib/node-esm/chunk-AWLY252W.mjs.map +0 -7
  41. package/dist/lib/node-esm/chunk-XZA5WICX.mjs.map +0 -7
  42. /package/dist/lib/browser/{intent-resolver-H6OF7V77.mjs.map → intent-resolver-N25TTBCB.mjs.map} +0 -0
  43. /package/dist/lib/browser/{react-surface-37LEVBKY.mjs.map → react-surface-QP64T3BI.mjs.map} +0 -0
  44. /package/dist/lib/node-esm/{intent-resolver-L534P6FM.mjs.map → intent-resolver-IAZULV42.mjs.map} +0 -0
  45. /package/dist/lib/node-esm/{react-surface-GVHSH2W2.mjs.map → react-surface-D6JA57PU.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-board",
3
- "version": "0.8.4-main.5ad4a44",
3
+ "version": "0.8.4-main.66e292d",
4
4
  "description": "Surface plugin for card baords",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -39,48 +39,50 @@
39
39
  "@preact/signals-core": "^1.12.1",
40
40
  "@preact/signals-react": "^3.3.0",
41
41
  "effect": "3.18.3",
42
- "@dxos/ai": "0.8.4-main.5ad4a44",
43
- "@dxos/app-framework": "0.8.4-main.5ad4a44",
44
- "@dxos/async": "0.8.4-main.5ad4a44",
45
- "@dxos/assistant": "0.8.4-main.5ad4a44",
46
- "@dxos/client": "0.8.4-main.5ad4a44",
47
- "@dxos/echo": "0.8.4-main.5ad4a44",
48
- "@dxos/blueprints": "0.8.4-main.5ad4a44",
49
- "@dxos/effect": "0.8.4-main.5ad4a44",
50
- "@dxos/log": "0.8.4-main.5ad4a44",
51
- "@dxos/plugin-client": "0.8.4-main.5ad4a44",
52
- "@dxos/plugin-graph": "0.8.4-main.5ad4a44",
53
- "@dxos/plugin-search": "0.8.4-main.5ad4a44",
54
- "@dxos/plugin-space": "0.8.4-main.5ad4a44",
55
- "@dxos/invariant": "0.8.4-main.5ad4a44",
56
- "@dxos/random": "0.8.4-main.5ad4a44",
57
- "@dxos/react-client": "0.8.4-main.5ad4a44",
58
- "@dxos/react-ui": "0.8.4-main.5ad4a44",
59
- "@dxos/react-ui-board": "0.8.4-main.5ad4a44",
60
- "@dxos/react-ui-form": "0.8.4-main.5ad4a44",
61
- "@dxos/react-ui-stack": "0.8.4-main.5ad4a44",
62
- "@dxos/schema": "0.8.4-main.5ad4a44",
63
- "@dxos/util": "0.8.4-main.5ad4a44"
42
+ "@dxos/ai": "0.8.4-main.66e292d",
43
+ "@dxos/app-framework": "0.8.4-main.66e292d",
44
+ "@dxos/assistant": "0.8.4-main.66e292d",
45
+ "@dxos/async": "0.8.4-main.66e292d",
46
+ "@dxos/client": "0.8.4-main.66e292d",
47
+ "@dxos/echo": "0.8.4-main.66e292d",
48
+ "@dxos/effect": "0.8.4-main.66e292d",
49
+ "@dxos/invariant": "0.8.4-main.66e292d",
50
+ "@dxos/plugin-client": "0.8.4-main.66e292d",
51
+ "@dxos/log": "0.8.4-main.66e292d",
52
+ "@dxos/plugin-graph": "0.8.4-main.66e292d",
53
+ "@dxos/plugin-search": "0.8.4-main.66e292d",
54
+ "@dxos/plugin-space": "0.8.4-main.66e292d",
55
+ "@dxos/random": "0.8.4-main.66e292d",
56
+ "@dxos/react-client": "0.8.4-main.66e292d",
57
+ "@dxos/react-ui": "0.8.4-main.66e292d",
58
+ "@dxos/blueprints": "0.8.4-main.66e292d",
59
+ "@dxos/react-ui-attention": "0.8.4-main.66e292d",
60
+ "@dxos/react-ui-board": "0.8.4-main.66e292d",
61
+ "@dxos/react-ui-stack": "0.8.4-main.66e292d",
62
+ "@dxos/react-ui-form": "0.8.4-main.66e292d",
63
+ "@dxos/schema": "0.8.4-main.66e292d",
64
+ "@dxos/types": "0.8.4-main.66e292d",
65
+ "@dxos/util": "0.8.4-main.66e292d"
64
66
  },
65
67
  "devDependencies": {
66
68
  "@types/react": "~19.2.2",
67
- "@types/react-dom": "~19.2.1",
69
+ "@types/react-dom": "~19.2.2",
68
70
  "react": "~19.2.0",
69
71
  "react-dom": "~19.2.0",
70
72
  "vite": "7.1.9",
71
- "@dxos/plugin-theme": "0.8.4-main.5ad4a44",
72
- "@dxos/react-ui-theme": "0.8.4-main.5ad4a44",
73
- "@dxos/plugin-preview": "0.8.4-main.5ad4a44",
74
- "@dxos/storybook-utils": "0.8.4-main.5ad4a44",
75
- "@dxos/test-utils": "0.8.4-main.5ad4a44",
76
- "@dxos/react-ui-syntax-highlighter": "0.8.4-main.5ad4a44"
73
+ "@dxos/plugin-preview": "0.8.4-main.66e292d",
74
+ "@dxos/react-ui-syntax-highlighter": "0.8.4-main.66e292d",
75
+ "@dxos/plugin-theme": "0.8.4-main.66e292d",
76
+ "@dxos/react-ui-theme": "0.8.4-main.66e292d",
77
+ "@dxos/test-utils": "0.8.4-main.66e292d",
78
+ "@dxos/storybook-utils": "0.8.4-main.66e292d"
77
79
  },
78
80
  "peerDependencies": {
79
81
  "effect": "^3.13.3",
80
82
  "react": "^19.0.0",
81
83
  "react-dom": "^19.0.0",
82
- "@dxos/react-ui": "0.8.4-main.5ad4a44",
83
- "@dxos/react-ui-theme": "0.8.4-main.5ad4a44"
84
+ "@dxos/react-ui": "0.8.4-main.66e292d",
85
+ "@dxos/react-ui-theme": "0.8.4-main.66e292d"
84
86
  },
85
87
  "publishConfig": {
86
88
  "access": "public"
@@ -3,9 +3,8 @@
3
3
  //
4
4
 
5
5
  import { Capabilities, Events, contributes, createIntent, defineModule, definePlugin } from '@dxos/app-framework';
6
- import { ClientEvents } from '@dxos/plugin-client';
7
- import { SpaceCapabilities } from '@dxos/plugin-space';
8
- import { defineObjectForm } from '@dxos/plugin-space/types';
6
+ import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
7
+ import { type CreateObjectIntent } from '@dxos/plugin-space/types';
9
8
  import { translations as boardTranslations } from '@dxos/react-ui-board';
10
9
 
11
10
  import { IntentResolver, ReactSurface } from './capabilities';
@@ -28,20 +27,16 @@ export const BoardPlugin = definePlugin(meta, () => [
28
27
  id: Board.Board.typename,
29
28
  metadata: {
30
29
  icon: 'ph--squares-four--regular',
30
+ iconHue: 'green',
31
+ creatObjectIntent: (() => createIntent(Board.Create)) satisfies CreateObjectIntent,
32
+ addToCollectionOnCreate: true,
31
33
  },
32
34
  }),
33
35
  }),
34
36
  defineModule({
35
- id: `${meta.id}/module/object-form`,
37
+ id: `${meta.id}/module/schema`,
36
38
  activatesOn: ClientEvents.SetupSchema,
37
- activate: () =>
38
- contributes(
39
- SpaceCapabilities.ObjectForm,
40
- defineObjectForm({
41
- objectSchema: Board.Board,
42
- getIntent: () => createIntent(Board.Create),
43
- }),
44
- ),
39
+ activate: () => contributes(ClientCapabilities.Schema, [Board.Board]),
45
40
  }),
46
41
  defineModule({
47
42
  id: `${meta.id}/module/react-surface`,
@@ -18,7 +18,7 @@ import { Filter, Ref, useQuery, useSpaces } from '@dxos/react-client/echo';
18
18
  import { withTheme } from '@dxos/react-ui/testing';
19
19
  import { translations as stackTranslations } from '@dxos/react-ui-stack';
20
20
  import { defaultTx } from '@dxos/react-ui-theme';
21
- import { DataType } from '@dxos/schema';
21
+ import { Organization, Person } from '@dxos/types';
22
22
 
23
23
  import { translations } from '../translations';
24
24
  import { Board } from '../types';
@@ -38,13 +38,13 @@ const createBoard = () =>
38
38
  });
39
39
 
40
40
  const createOrg = () =>
41
- Obj.make(DataType.Organization, {
41
+ Obj.make(Organization.Organization, {
42
42
  name: faker.commerce.productName(),
43
43
  description: faker.lorem.paragraph(),
44
44
  image: faker.image.url(),
45
45
  website: faker.internet.url(),
46
46
  // TODO(burdon): Fix.
47
- // status: faker.helpers.arrayElement(DataType.OrganizationStatusOptions).id,
47
+ // status: faker.helpers.arrayElement(Organization.StatusOptions).id,
48
48
  });
49
49
 
50
50
  const DefaultStory = () => {
@@ -79,7 +79,7 @@ const meta = {
79
79
  withPluginManager({
80
80
  plugins: [
81
81
  ClientPlugin({
82
- types: [DataType.Organization, DataType.Person, Board.Board],
82
+ types: [Organization.Organization, Person.Person, Board.Board],
83
83
  onClientInitialized: async ({ client }) => {
84
84
  await client.halo.createIdentity();
85
85
  const space = await client.spaces.create();
@@ -4,45 +4,58 @@
4
4
 
5
5
  import React, { useCallback, useMemo, useRef, useState } from 'react';
6
6
 
7
- import { Surface } from '@dxos/app-framework';
8
- import { Filter, Ref, getSpace } from '@dxos/client/echo';
7
+ import { Surface } from '@dxos/app-framework/react';
8
+ import { getSpace } from '@dxos/client/echo';
9
+ import { Filter, Obj, Ref } from '@dxos/echo';
9
10
  import { invariant } from '@dxos/invariant';
10
11
  import { useQuery } from '@dxos/react-client/echo';
11
12
  import { useSignalsMemo } from '@dxos/react-ui';
13
+ import { useAttention } from '@dxos/react-ui-attention';
12
14
  import { Board, type BoardController, type BoardRootProps, type Position } from '@dxos/react-ui-board';
13
- import { ObjectPicker } from '@dxos/react-ui-form';
15
+ import { ObjectPicker, type ObjectPickerContentProps } from '@dxos/react-ui-form';
14
16
  import { StackItem } from '@dxos/react-ui-stack';
15
17
  import { isNonNullable } from '@dxos/util';
16
18
 
17
19
  import { type Board as BoardType } from '../types';
18
20
 
19
- export type BoardContainerProps = {
20
- role?: string;
21
- board: BoardType.Board;
22
- };
23
-
24
21
  const DEFAULT_POSITION = { x: 0, y: 0 } satisfies Position;
25
22
 
26
23
  type PickerState = {
27
24
  position: Position;
28
25
  };
29
26
 
27
+ export type BoardContainerProps = {
28
+ role?: string;
29
+ board: BoardType.Board;
30
+ };
31
+
30
32
  export const BoardContainer = ({ board }: BoardContainerProps) => {
31
33
  const controller = useRef<BoardController>(null);
32
34
  const items = useSignalsMemo(() => board.items.map((ref) => ref.target).filter(isNonNullable), [board]);
33
35
  const addTriggerRef = useRef<HTMLButtonElement | null>(null);
34
36
  const [pickerState, setPickerState] = useState<PickerState | null>(null);
37
+ const attendableId = Obj.getDXN(board).toString();
38
+ const { hasAttention } = useAttention(attendableId);
35
39
 
36
- // Memoize options for ObjectPicker containing all ECHO objects in the same space as the Board.
37
- const allObjects = useQuery(getSpace(board), Filter.everything());
38
- const options = useMemo(
40
+ // TODO(burdon): Use search.
41
+ const objects = useQuery(getSpace(board), Filter.everything());
42
+ const options = useMemo<ObjectPickerContentProps['options']>(
39
43
  () =>
40
- allObjects.map((obj) => ({
41
- id: obj.id,
42
- label: obj.name || obj.title || obj.id,
43
- hue: 'neutral' as const,
44
- })),
45
- [allObjects],
44
+ objects
45
+ .filter((obj) => obj.id !== board.id)
46
+ .map((obj) => {
47
+ const label = Obj.getLabel(obj);
48
+ if (label) {
49
+ return {
50
+ id: obj.id,
51
+ label,
52
+ hue: 'neutral' as const,
53
+ };
54
+ }
55
+ })
56
+ .filter(isNonNullable)
57
+ .sort(({ label: a }, { label: b }) => a.toLocaleLowerCase().localeCompare(b.toLocaleLowerCase())),
58
+ [objects],
46
59
  );
47
60
 
48
61
  const handleAdd = useCallback<NonNullable<BoardRootProps['onAdd']>>(
@@ -57,27 +70,6 @@ export const BoardContainer = ({ board }: BoardContainerProps) => {
57
70
  [board],
58
71
  );
59
72
 
60
- const handleSelect = useCallback(
61
- (id: string) => {
62
- if (!pickerState) return;
63
-
64
- // Find the selected object by id from the space.
65
- const selectedObject = allObjects.find((obj) => obj.id === id);
66
- if (!selectedObject) return;
67
-
68
- // Create a reference to the selected object and add it to the board.
69
- const ref = Ref.make(selectedObject);
70
- board.items.push(ref);
71
-
72
- // Set the layout position for the new item.
73
- board.layout.cells[selectedObject.id.toString()] = pickerState.position;
74
-
75
- // Close the picker.
76
- setPickerState(null);
77
- },
78
- [pickerState, allObjects, board],
79
- );
80
-
81
73
  // TODO(burdon): Use intents so can be undone.
82
74
  const handleDelete = useCallback<NonNullable<BoardRootProps['onDelete']>>(
83
75
  (id) => {
@@ -99,22 +91,40 @@ export const BoardContainer = ({ board }: BoardContainerProps) => {
99
91
  [board],
100
92
  );
101
93
 
94
+ const handleSelect = useCallback<NonNullable<ObjectPickerContentProps['onSelect']>>(
95
+ (id) => {
96
+ if (!pickerState) {
97
+ return;
98
+ }
99
+
100
+ // Find the selected object by id from the space.
101
+ const selectedObject = objects.find((obj) => obj.id === id);
102
+ if (!Obj.isObject(selectedObject)) {
103
+ return;
104
+ }
105
+
106
+ // Create a reference to the selected object and add it to the board.
107
+ board.items.push(Ref.make(selectedObject));
108
+
109
+ // Set the layout position for the new item.
110
+ board.layout.cells[selectedObject.id.toString()] = pickerState.position;
111
+
112
+ // Close the picker.
113
+ setPickerState(null);
114
+ },
115
+ [pickerState, objects, board],
116
+ );
117
+
102
118
  return (
103
119
  <Board.Root ref={controller} layout={board.layout} onAdd={handleAdd} onDelete={handleDelete} onMove={handleMove}>
104
120
  <ObjectPicker.Root
105
121
  open={!!pickerState}
106
122
  onOpenChange={(nextOpen: boolean) => {
107
- setPickerState(
108
- nextOpen
109
- ? {
110
- position: DEFAULT_POSITION,
111
- }
112
- : null,
113
- );
123
+ setPickerState(nextOpen ? { position: DEFAULT_POSITION } : null);
114
124
  }}
115
125
  >
116
126
  <StackItem.Content toolbar>
117
- <Board.Toolbar />
127
+ <Board.Toolbar disabled={!hasAttention} />
118
128
  <Board.Container>
119
129
  <Board.Viewport classNames='border-none'>
120
130
  <Board.Backdrop />
package/src/meta.ts CHANGED
@@ -3,13 +3,17 @@
3
3
  //
4
4
 
5
5
  import { type PluginMeta } from '@dxos/app-framework';
6
+ import { trim } from '@dxos/util';
6
7
 
7
8
  export const meta: PluginMeta = {
8
9
  id: 'dxos.org/plugin/board',
9
10
  name: 'Board',
10
- description:
11
- 'A spatial, infinite canvas app combining notes, media, and whiteboarding in a tactile, visual interface.',
11
+ description: trim`
12
+ Infinite canvas workspace that combines sticky notes, media, and whiteboarding tools.
13
+ Arrange and connect ideas freely in a visual space perfect for brainstorming and creative collaboration.
14
+ `,
12
15
  icon: 'ph--squares-four--regular',
16
+ iconHue: 'green',
13
17
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-board',
14
18
  screenshots: [],
15
19
  };
@@ -18,6 +18,7 @@ export const translations = [
18
18
  'object name placeholder': 'New board',
19
19
  'rename object label': 'Rename board',
20
20
  'delete object label': 'Delete board',
21
+ 'object deleted label': 'Board deleted',
21
22
  },
22
23
  [meta.id]: {
23
24
  'plugin name': 'Board',
@@ -5,7 +5,7 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { Obj, Type } from '@dxos/echo';
8
- import { LabelAnnotation } from '@dxos/echo/internal';
8
+ import { FormInputAnnotation, LabelAnnotation } from '@dxos/echo/internal';
9
9
  import { BoardLayout, defaultLayout } from '@dxos/react-ui-board';
10
10
 
11
11
  import { meta } from '../meta';
@@ -14,9 +14,9 @@ import { meta } from '../meta';
14
14
  * Board and layout.
15
15
  */
16
16
  export const Board = Schema.Struct({
17
- name: Schema.optional(Schema.String),
18
- items: Schema.mutable(Schema.Array(Type.Ref(Type.Expando))),
19
- layout: Schema.mutable(BoardLayout),
17
+ name: Schema.String.pipe(Schema.optional),
18
+ items: Type.Ref(Obj.Any).pipe(Schema.Array, Schema.mutable, FormInputAnnotation.set(false)),
19
+ layout: BoardLayout.pipe(Schema.mutable, FormInputAnnotation.set(false)),
20
20
  }).pipe(
21
21
  Type.Obj({
22
22
  typename: 'dxos.org/type/Board',
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/BoardContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { Filter, Ref, getSpace } from '@dxos/client/echo';\nimport { invariant } from '@dxos/invariant';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { useSignalsMemo } from '@dxos/react-ui';\nimport { Board, type BoardController, type BoardRootProps, type Position } from '@dxos/react-ui-board';\nimport { ObjectPicker } from '@dxos/react-ui-form';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type Board as BoardType } from '../types';\n\nexport type BoardContainerProps = {\n role?: string;\n board: BoardType.Board;\n};\n\nconst DEFAULT_POSITION = { x: 0, y: 0 } satisfies Position;\n\ntype PickerState = {\n position: Position;\n};\n\nexport const BoardContainer = ({ board }: BoardContainerProps) => {\n const controller = useRef<BoardController>(null);\n const items = useSignalsMemo(() => board.items.map((ref) => ref.target).filter(isNonNullable), [board]);\n const addTriggerRef = useRef<HTMLButtonElement | null>(null);\n const [pickerState, setPickerState] = useState<PickerState | null>(null);\n\n // Memoize options for ObjectPicker containing all ECHO objects in the same space as the Board.\n const allObjects = useQuery(getSpace(board), Filter.everything());\n const options = useMemo(\n () =>\n allObjects.map((obj) => ({\n id: obj.id,\n label: obj.name || obj.title || obj.id,\n hue: 'neutral' as const,\n })),\n [allObjects],\n );\n\n const handleAdd = useCallback<NonNullable<BoardRootProps['onAdd']>>(\n async (anchor, position = DEFAULT_POSITION) => {\n const space = getSpace(board);\n invariant(space);\n addTriggerRef.current = anchor;\n setPickerState({\n position,\n });\n },\n [board],\n );\n\n const handleSelect = useCallback(\n (id: string) => {\n if (!pickerState) return;\n\n // Find the selected object by id from the space.\n const selectedObject = allObjects.find((obj) => obj.id === id);\n if (!selectedObject) return;\n\n // Create a reference to the selected object and add it to the board.\n const ref = Ref.make(selectedObject);\n board.items.push(ref);\n\n // Set the layout position for the new item.\n board.layout.cells[selectedObject.id.toString()] = pickerState.position;\n\n // Close the picker.\n setPickerState(null);\n },\n [pickerState, allObjects, board],\n );\n\n // TODO(burdon): Use intents so can be undone.\n const handleDelete = useCallback<NonNullable<BoardRootProps['onDelete']>>(\n (id) => {\n // TODO(burdon): Impl. DXN.equals and pass in DXN from `id`.\n const idx = board.items.findIndex((ref) => ref.dxn.asEchoDXN()?.echoId === id);\n if (idx !== -1) {\n board.items.splice(idx, 1);\n }\n delete board.layout.cells[id];\n },\n [board],\n );\n\n const handleMove = useCallback<NonNullable<BoardRootProps['onMove']>>(\n (id, position) => {\n const layout = board.layout.cells[id];\n board.layout.cells[id] = { ...layout, ...position };\n },\n [board],\n );\n\n return (\n <Board.Root ref={controller} layout={board.layout} onAdd={handleAdd} onDelete={handleDelete} onMove={handleMove}>\n <ObjectPicker.Root\n open={!!pickerState}\n onOpenChange={(nextOpen: boolean) => {\n setPickerState(\n nextOpen\n ? {\n position: DEFAULT_POSITION,\n }\n : null,\n );\n }}\n >\n <StackItem.Content toolbar>\n <Board.Toolbar />\n <Board.Container>\n <Board.Viewport classNames='border-none'>\n <Board.Backdrop />\n <Board.Content>\n {items?.map((item, index) => (\n <Board.Cell item={item} key={index} layout={board.layout?.cells[item.id] ?? { x: 0, y: 0 }}>\n <Surface role='card--extrinsic' data={{ subject: item }} limit={1} />\n </Board.Cell>\n ))}\n </Board.Content>\n </Board.Viewport>\n </Board.Container>\n </StackItem.Content>\n <ObjectPicker.Content options={options} onSelect={handleSelect} classNames='popover-card-width' />\n <ObjectPicker.VirtualTrigger virtualRef={addTriggerRef} />\n </ObjectPicker.Root>\n </Board.Root>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "useCallback", "useMemo", "useRef", "useState", "Surface", "Filter", "Ref", "getSpace", "invariant", "useQuery", "useSignalsMemo", "Board", "ObjectPicker", "StackItem", "isNonNullable", "DEFAULT_POSITION", "x", "y", "BoardContainer", "board", "controller", "items", "map", "ref", "target", "filter", "addTriggerRef", "pickerState", "setPickerState", "allObjects", "everything", "options", "obj", "id", "label", "name", "title", "hue", "handleAdd", "anchor", "position", "space", "current", "handleSelect", "selectedObject", "find", "make", "push", "layout", "cells", "toString", "handleDelete", "idx", "findIndex", "dxn", "asEchoDXN", "echoId", "splice", "handleMove", "Root", "onAdd", "onDelete", "onMove", "open", "onOpenChange", "nextOpen", "Content", "toolbar", "Toolbar", "Container", "Viewport", "classNames", "Backdrop", "item", "index", "Cell", "key", "role", "data", "subject", "limit", "onSelect", "VirtualTrigger", "virtualRef"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types/Board.ts", "../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Obj, Type } from '@dxos/echo';\nimport { LabelAnnotation } from '@dxos/echo/internal';\nimport { BoardLayout, defaultLayout } from '@dxos/react-ui-board';\n\nimport { meta } from '../meta';\n\n/**\n * Board and layout.\n */\nexport const Board = Schema.Struct({\n name: Schema.optional(Schema.String),\n items: Schema.mutable(Schema.Array(Type.Ref(Type.Expando))),\n layout: Schema.mutable(BoardLayout),\n}).pipe(\n Type.Obj({\n typename: 'dxos.org/type/Board',\n version: '0.1.0',\n }),\n LabelAnnotation.set(['name']),\n);\n\nexport interface Board extends Schema.Schema.Type<typeof Board> {}\n\nexport const makeBoard = (props: Partial<Obj.MakeProps<typeof Board>> = {}) =>\n Obj.make(Board, {\n items: [],\n layout: defaultLayout,\n ...props,\n });\n\n/**\n * Create board.\n */\nexport class Create extends Schema.TaggedClass<Create>()(`${meta.id}/action/create`, {\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n }),\n output: Schema.Struct({\n object: Board,\n }),\n}) {}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/board',\n name: 'Board',\n description:\n 'A spatial, infinite canvas app combining notes, media, and whiteboarding in a tactile, visual interface.',\n icon: 'ph--squares-four--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-board',\n screenshots: [],\n};\n"],
5
- "mappings": ";;;;;;;AAAA;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,KAAKC,YAAY;AAC1B,SAASC,uBAAuB;AAChC,SAASC,aAAaC,qBAAqB;;;ACFpC,IAAMC,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,aAAa,CAAA;AACf;;;ADCO,IAAMC,QAAeC,cAAO;EACjCC,MAAaC,gBAAgBC,aAAM;EACnCC,OAAcC,eAAeC,aAAMC,KAAKC,IAAID,KAAKE,OAAO,CAAA,CAAA;EACxDC,QAAeL,eAAQM,WAAAA;AACzB,CAAA,EAAGC,KACDL,KAAKM,IAAI;EACPC,UAAU;EACVC,SAAS;AACX,CAAA,GACAC,gBAAgBC,IAAI;EAAC;CAAO,CAAA;AAKvB,IAAMC,YAAY,CAACC,QAA8C,CAAC,MACvEN,IAAIO,KAAKrB,OAAO;EACdK,OAAO,CAAA;EACPM,QAAQW;EACR,GAAGF;AACL,CAAA;AAKK,IAAMG,SAAN,cAA4BC,mBAAW,EAAW,GAAGC,KAAKC,EAAE,kBAAkB;EACnFC,OAAc1B,cAAO;IACnBC,MAAaC,gBAAgBC,aAAM;EACrC,CAAA;EACAwB,QAAe3B,cAAO;IACpB4B,QAAQ7B;EACV,CAAA;AACF,CAAA,EAAA;AAAI;",
6
- "names": ["Schema", "Obj", "Type", "LabelAnnotation", "BoardLayout", "defaultLayout", "meta", "id", "name", "description", "icon", "source", "screenshots", "Board", "Struct", "name", "optional", "String", "items", "mutable", "Array", "Type", "Ref", "Expando", "layout", "BoardLayout", "pipe", "Obj", "typename", "version", "LabelAnnotation", "set", "makeBoard", "props", "make", "defaultLayout", "Create", "TaggedClass", "meta", "id", "input", "output", "object"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types/Board.ts", "../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Obj, Type } from '@dxos/echo';\nimport { LabelAnnotation } from '@dxos/echo/internal';\nimport { BoardLayout, defaultLayout } from '@dxos/react-ui-board';\n\nimport { meta } from '../meta';\n\n/**\n * Board and layout.\n */\nexport const Board = Schema.Struct({\n name: Schema.optional(Schema.String),\n items: Schema.mutable(Schema.Array(Type.Ref(Type.Expando))),\n layout: Schema.mutable(BoardLayout),\n}).pipe(\n Type.Obj({\n typename: 'dxos.org/type/Board',\n version: '0.1.0',\n }),\n LabelAnnotation.set(['name']),\n);\n\nexport interface Board extends Schema.Schema.Type<typeof Board> {}\n\nexport const makeBoard = (props: Partial<Obj.MakeProps<typeof Board>> = {}) =>\n Obj.make(Board, {\n items: [],\n layout: defaultLayout,\n ...props,\n });\n\n/**\n * Create board.\n */\nexport class Create extends Schema.TaggedClass<Create>()(`${meta.id}/action/create`, {\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n }),\n output: Schema.Struct({\n object: Board,\n }),\n}) {}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/board',\n name: 'Board',\n description:\n 'A spatial, infinite canvas app combining notes, media, and whiteboarding in a tactile, visual interface.',\n icon: 'ph--squares-four--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-board',\n screenshots: [],\n};\n"],
5
- "mappings": ";;;;;;;;AAAA;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,KAAKC,YAAY;AAC1B,SAASC,uBAAuB;AAChC,SAASC,aAAaC,qBAAqB;;;ACFpC,IAAMC,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,aAAa,CAAA;AACf;;;ADCO,IAAMC,QAAeC,cAAO;EACjCC,MAAaC,gBAAgBC,aAAM;EACnCC,OAAcC,eAAeC,aAAMC,KAAKC,IAAID,KAAKE,OAAO,CAAA,CAAA;EACxDC,QAAeL,eAAQM,WAAAA;AACzB,CAAA,EAAGC,KACDL,KAAKM,IAAI;EACPC,UAAU;EACVC,SAAS;AACX,CAAA,GACAC,gBAAgBC,IAAI;EAAC;CAAO,CAAA;AAKvB,IAAMC,YAAY,CAACC,QAA8C,CAAC,MACvEN,IAAIO,KAAKrB,OAAO;EACdK,OAAO,CAAA;EACPM,QAAQW;EACR,GAAGF;AACL,CAAA;AAKK,IAAMG,SAAN,cAA4BC,mBAAW,EAAW,GAAGC,KAAKC,EAAE,kBAAkB;EACnFC,OAAc1B,cAAO;IACnBC,MAAaC,gBAAgBC,aAAM;EACrC,CAAA;EACAwB,QAAe3B,cAAO;IACpB4B,QAAQ7B;EACV,CAAA;AACF,CAAA,EAAA;AAAI;",
6
- "names": ["Schema", "Obj", "Type", "LabelAnnotation", "BoardLayout", "defaultLayout", "meta", "id", "name", "description", "icon", "source", "screenshots", "Board", "Struct", "name", "optional", "String", "items", "mutable", "Array", "Type", "Ref", "Expando", "layout", "BoardLayout", "pipe", "Obj", "typename", "version", "LabelAnnotation", "set", "makeBoard", "props", "make", "defaultLayout", "Create", "TaggedClass", "meta", "id", "input", "output", "object"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/BoardContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { Filter, Ref, getSpace } from '@dxos/client/echo';\nimport { invariant } from '@dxos/invariant';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { useSignalsMemo } from '@dxos/react-ui';\nimport { Board, type BoardController, type BoardRootProps, type Position } from '@dxos/react-ui-board';\nimport { ObjectPicker } from '@dxos/react-ui-form';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type Board as BoardType } from '../types';\n\nexport type BoardContainerProps = {\n role?: string;\n board: BoardType.Board;\n};\n\nconst DEFAULT_POSITION = { x: 0, y: 0 } satisfies Position;\n\ntype PickerState = {\n position: Position;\n};\n\nexport const BoardContainer = ({ board }: BoardContainerProps) => {\n const controller = useRef<BoardController>(null);\n const items = useSignalsMemo(() => board.items.map((ref) => ref.target).filter(isNonNullable), [board]);\n const addTriggerRef = useRef<HTMLButtonElement | null>(null);\n const [pickerState, setPickerState] = useState<PickerState | null>(null);\n\n // Memoize options for ObjectPicker containing all ECHO objects in the same space as the Board.\n const allObjects = useQuery(getSpace(board), Filter.everything());\n const options = useMemo(\n () =>\n allObjects.map((obj) => ({\n id: obj.id,\n label: obj.name || obj.title || obj.id,\n hue: 'neutral' as const,\n })),\n [allObjects],\n );\n\n const handleAdd = useCallback<NonNullable<BoardRootProps['onAdd']>>(\n async (anchor, position = DEFAULT_POSITION) => {\n const space = getSpace(board);\n invariant(space);\n addTriggerRef.current = anchor;\n setPickerState({\n position,\n });\n },\n [board],\n );\n\n const handleSelect = useCallback(\n (id: string) => {\n if (!pickerState) return;\n\n // Find the selected object by id from the space.\n const selectedObject = allObjects.find((obj) => obj.id === id);\n if (!selectedObject) return;\n\n // Create a reference to the selected object and add it to the board.\n const ref = Ref.make(selectedObject);\n board.items.push(ref);\n\n // Set the layout position for the new item.\n board.layout.cells[selectedObject.id.toString()] = pickerState.position;\n\n // Close the picker.\n setPickerState(null);\n },\n [pickerState, allObjects, board],\n );\n\n // TODO(burdon): Use intents so can be undone.\n const handleDelete = useCallback<NonNullable<BoardRootProps['onDelete']>>(\n (id) => {\n // TODO(burdon): Impl. DXN.equals and pass in DXN from `id`.\n const idx = board.items.findIndex((ref) => ref.dxn.asEchoDXN()?.echoId === id);\n if (idx !== -1) {\n board.items.splice(idx, 1);\n }\n delete board.layout.cells[id];\n },\n [board],\n );\n\n const handleMove = useCallback<NonNullable<BoardRootProps['onMove']>>(\n (id, position) => {\n const layout = board.layout.cells[id];\n board.layout.cells[id] = { ...layout, ...position };\n },\n [board],\n );\n\n return (\n <Board.Root ref={controller} layout={board.layout} onAdd={handleAdd} onDelete={handleDelete} onMove={handleMove}>\n <ObjectPicker.Root\n open={!!pickerState}\n onOpenChange={(nextOpen: boolean) => {\n setPickerState(\n nextOpen\n ? {\n position: DEFAULT_POSITION,\n }\n : null,\n );\n }}\n >\n <StackItem.Content toolbar>\n <Board.Toolbar />\n <Board.Container>\n <Board.Viewport classNames='border-none'>\n <Board.Backdrop />\n <Board.Content>\n {items?.map((item, index) => (\n <Board.Cell item={item} key={index} layout={board.layout?.cells[item.id] ?? { x: 0, y: 0 }}>\n <Surface role='card--extrinsic' data={{ subject: item }} limit={1} />\n </Board.Cell>\n ))}\n </Board.Content>\n </Board.Viewport>\n </Board.Container>\n </StackItem.Content>\n <ObjectPicker.Content options={options} onSelect={handleSelect} classNames='popover-card-width' />\n <ObjectPicker.VirtualTrigger virtualRef={addTriggerRef} />\n </ObjectPicker.Root>\n </Board.Root>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "useCallback", "useMemo", "useRef", "useState", "Surface", "Filter", "Ref", "getSpace", "invariant", "useQuery", "useSignalsMemo", "Board", "ObjectPicker", "StackItem", "isNonNullable", "DEFAULT_POSITION", "x", "y", "BoardContainer", "board", "controller", "items", "map", "ref", "target", "filter", "addTriggerRef", "pickerState", "setPickerState", "allObjects", "everything", "options", "obj", "id", "label", "name", "title", "hue", "handleAdd", "anchor", "position", "space", "current", "handleSelect", "selectedObject", "find", "make", "push", "layout", "cells", "toString", "handleDelete", "idx", "findIndex", "dxn", "asEchoDXN", "echoId", "splice", "handleMove", "Root", "onAdd", "onDelete", "onMove", "open", "onOpenChange", "nextOpen", "Content", "toolbar", "Toolbar", "Container", "Viewport", "classNames", "Backdrop", "item", "index", "Cell", "key", "role", "data", "subject", "limit", "onSelect", "VirtualTrigger", "virtualRef"]
7
- }