@dxos/plugin-board 0.8.4-main.c4373fc → 0.8.4-main.d9fc60f731

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 (114) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +337 -0
  3. package/README.md +1 -1
  4. package/dist/lib/neutral/BoardArticle-XCMTXRNW.mjs +168 -0
  5. package/dist/lib/neutral/BoardArticle-XCMTXRNW.mjs.map +7 -0
  6. package/dist/lib/neutral/BoardPlugin.mjs +42 -0
  7. package/dist/lib/neutral/BoardPlugin.mjs.map +7 -0
  8. package/dist/lib/neutral/capabilities/index.mjs +11 -0
  9. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  10. package/dist/lib/neutral/chunk-CY5X6YV4.mjs +34 -0
  11. package/dist/lib/neutral/chunk-CY5X6YV4.mjs.map +7 -0
  12. package/dist/lib/neutral/chunk-HUBZKCPA.mjs +32 -0
  13. package/dist/lib/neutral/chunk-HUBZKCPA.mjs.map +7 -0
  14. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  15. package/dist/lib/neutral/components/index.mjs +1 -0
  16. package/dist/lib/neutral/containers/index.mjs +9 -0
  17. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  18. package/dist/lib/neutral/create-object-BRISOU7F.mjs +28 -0
  19. package/dist/lib/neutral/create-object-BRISOU7F.mjs.map +7 -0
  20. package/dist/lib/neutral/index.mjs +12 -0
  21. package/dist/lib/neutral/index.mjs.map +7 -0
  22. package/dist/lib/neutral/meta.json +1 -0
  23. package/dist/lib/neutral/meta.mjs +8 -0
  24. package/dist/lib/neutral/meta.mjs.map +7 -0
  25. package/dist/lib/neutral/plugin.mjs +12 -0
  26. package/dist/lib/neutral/plugin.mjs.map +7 -0
  27. package/dist/lib/neutral/react-surface-M5JHK3ZQ.mjs +26 -0
  28. package/dist/lib/neutral/react-surface-M5JHK3ZQ.mjs.map +7 -0
  29. package/dist/lib/neutral/translations.mjs +30 -0
  30. package/dist/lib/neutral/translations.mjs.map +7 -0
  31. package/dist/lib/{browser → neutral}/types/index.mjs +2 -1
  32. package/dist/lib/neutral/types/index.mjs.map +7 -0
  33. package/dist/types/src/BoardPlugin.d.ts +3 -1
  34. package/dist/types/src/BoardPlugin.d.ts.map +1 -1
  35. package/dist/types/src/BoardPlugin.test.d.ts +2 -0
  36. package/dist/types/src/BoardPlugin.test.d.ts.map +1 -0
  37. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  38. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  39. package/dist/types/src/capabilities/index.d.ts +8 -2
  40. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  41. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  42. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  43. package/dist/types/src/components/index.d.ts +0 -1
  44. package/dist/types/src/components/index.d.ts.map +1 -1
  45. package/dist/types/src/containers/BoardArticle/BoardArticle.d.ts +6 -0
  46. package/dist/types/src/containers/BoardArticle/BoardArticle.d.ts.map +1 -0
  47. package/dist/types/src/containers/BoardArticle/BoardArticle.stories.d.ts +54 -0
  48. package/dist/types/src/containers/BoardArticle/BoardArticle.stories.d.ts.map +1 -0
  49. package/dist/types/src/containers/BoardArticle/index.d.ts +2 -0
  50. package/dist/types/src/containers/BoardArticle/index.d.ts.map +1 -0
  51. package/dist/types/src/containers/index.d.ts +3 -0
  52. package/dist/types/src/containers/index.d.ts.map +1 -0
  53. package/dist/types/src/index.d.ts +0 -2
  54. package/dist/types/src/index.d.ts.map +1 -1
  55. package/dist/types/src/meta.d.ts +2 -2
  56. package/dist/types/src/meta.d.ts.map +1 -1
  57. package/dist/types/src/plugin.d.ts +3 -0
  58. package/dist/types/src/plugin.d.ts.map +1 -0
  59. package/dist/types/src/translations.d.ts +22 -13
  60. package/dist/types/src/translations.d.ts.map +1 -1
  61. package/dist/types/src/types/Board.d.ts +27 -70
  62. package/dist/types/src/types/Board.d.ts.map +1 -1
  63. package/dist/types/tsconfig.tsbuildinfo +1 -1
  64. package/package.json +96 -59
  65. package/src/BoardPlugin.test.ts +27 -0
  66. package/src/BoardPlugin.tsx +21 -49
  67. package/src/capabilities/create-object.ts +31 -0
  68. package/src/capabilities/index.ts +3 -3
  69. package/src/capabilities/react-surface.tsx +23 -14
  70. package/src/components/index.ts +0 -2
  71. package/src/containers/BoardArticle/BoardArticle.stories.tsx +122 -0
  72. package/src/containers/BoardArticle/BoardArticle.tsx +186 -0
  73. package/src/containers/BoardArticle/index.ts +5 -0
  74. package/src/containers/index.ts +7 -0
  75. package/src/index.ts +0 -3
  76. package/src/meta.ts +20 -6
  77. package/src/plugin.ts +9 -0
  78. package/src/translations.ts +14 -11
  79. package/src/types/Board.ts +8 -24
  80. package/src/vite-env.d.ts +10 -0
  81. package/dist/lib/browser/chunk-RHMZXTJ7.mjs +0 -129
  82. package/dist/lib/browser/chunk-RHMZXTJ7.mjs.map +0 -7
  83. package/dist/lib/browser/chunk-Z6L4ZVCB.mjs +0 -59
  84. package/dist/lib/browser/chunk-Z6L4ZVCB.mjs.map +0 -7
  85. package/dist/lib/browser/index.mjs +0 -89
  86. package/dist/lib/browser/index.mjs.map +0 -7
  87. package/dist/lib/browser/intent-resolver-H6OF7V77.mjs +0 -33
  88. package/dist/lib/browser/intent-resolver-H6OF7V77.mjs.map +0 -7
  89. package/dist/lib/browser/meta.json +0 -1
  90. package/dist/lib/browser/react-surface-37LEVBKY.mjs +0 -30
  91. package/dist/lib/browser/react-surface-37LEVBKY.mjs.map +0 -7
  92. package/dist/lib/node-esm/chunk-AWLY252W.mjs +0 -60
  93. package/dist/lib/node-esm/chunk-AWLY252W.mjs.map +0 -7
  94. package/dist/lib/node-esm/chunk-XZA5WICX.mjs +0 -131
  95. package/dist/lib/node-esm/chunk-XZA5WICX.mjs.map +0 -7
  96. package/dist/lib/node-esm/index.mjs +0 -90
  97. package/dist/lib/node-esm/index.mjs.map +0 -7
  98. package/dist/lib/node-esm/intent-resolver-L534P6FM.mjs +0 -34
  99. package/dist/lib/node-esm/intent-resolver-L534P6FM.mjs.map +0 -7
  100. package/dist/lib/node-esm/meta.json +0 -1
  101. package/dist/lib/node-esm/react-surface-GVHSH2W2.mjs +0 -31
  102. package/dist/lib/node-esm/react-surface-GVHSH2W2.mjs.map +0 -7
  103. package/dist/lib/node-esm/types/index.mjs +0 -8
  104. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  105. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  106. package/dist/types/src/components/BoardContainer.d.ts +0 -8
  107. package/dist/types/src/components/BoardContainer.d.ts.map +0 -1
  108. package/dist/types/src/components/BoardContainer.stories.d.ts +0 -45
  109. package/dist/types/src/components/BoardContainer.stories.d.ts.map +0 -1
  110. package/src/capabilities/intent-resolver.ts +0 -34
  111. package/src/components/BoardContainer.stories.tsx +0 -125
  112. package/src/components/BoardContainer.tsx +0 -136
  113. /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  114. /package/dist/lib/{node-esm/types → neutral/components}/index.mjs.map +0 -0
@@ -0,0 +1,42 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/BoardPlugin.tsx
4
+ import { Plugin } from "@dxos/app-framework";
5
+ import { AppPlugin } from "@dxos/app-toolkit";
6
+ import { translations as boardTranslations } from "@dxos/react-ui-board/translations";
7
+ import { CreateObject, ReactSurface } from "#capabilities";
8
+ import { meta } from "#meta";
9
+ import { translations } from "#translations";
10
+ import { Board } from "#types";
11
+
12
+ // raw-loader:/__w/dxos/dxos/packages/plugins/plugin-board/PLUGIN.mdl?raw
13
+ var PLUGIN_default = '---\nid: org.dxos.plugin.board\nname: BoardPlugin\nversion: 0.1.0\n---\n\nA spatial canvas plugin for `DXOS` Composer that lets users arrange any ECHO objects on an infinite two-dimensional grid.\nItems can be placed freely, moved by dragging, and removed from the canvas without deleting the underlying objects.\n\n## Extensions\n\nThe following extension dialects are used in this document.\nEach extension is defined in the Appendix or resolved via its URI.\n\n| Term | URI |\n|-------------|--------------------------------|\n| `type` | `org.dxos.mdl.type@1.0` |\n| `feat` | `org.dxos.mdl.feat@1.0` |\n| `test` | `org.dxos.mdl.test@1.0` |\n| `component` | `org.dxos.mdl.component@1.0` |\n| `op` | `org.dxos.mdl.op@1.0` |\n\n## Types\n\n```mdl\ntype Position\n fields:\n x: number\n y: number\n w?: number\n h?: number\n```\n\n```mdl\ntype BoardLayout\n fields:\n cells: { [id: string]: Position }\n```\n\n```mdl\ntype Board\n desc: Root ECHO object (typename org.dxos.type.board).\n fields:\n name?: string\n items: Ref[] # ordered list of references to ECHO objects on the canvas\n layout: BoardLayout # position of every item keyed by object id\n```\n\n## Components\n\n```mdl\ncomponent BoardArticle\n desc: Full-canvas surface rendered for article and section roles.\n props:\n role: string # AppSurface role (article | section)\n subject: Board # ECHO Board object\n attendableId?: string # attention tracking id\n state:\n items: Obj.Unknown[] # resolved ECHO objects from board.items refs\n pickerState?: PickerState # null when picker closed; Position when open\n slots:\n toolbar?: ReactNode # Board.Toolbar (disabled when not focused)\n cell?: ReactNode # one Surface.Surface per item (Card role)\n actions:\n addItem(anchor, position?) \u2192 void\n deleteItem(id: string) \u2192 void\n moveItem(id: string, position: Position) \u2192 void\n selectFromPicker(id: string) \u2192 void\n emits:\n onAdd(anchor: HTMLButtonElement, position?: Position)\n onDelete(id: string)\n onMove(id: string, position: Position)\n layout: |\n \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 Board.Toolbar (attention-gated) \u2502\n \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 Board.Viewport \u2502\n \u2502 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\n \u2502 \u2502 Board.Backdrop (+) \u2502 \u2502\n \u2502 \u2502 \u2502 \u2502\n \u2502 \u2502 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502\n \u2502 \u2502 \u2502 Cell \u2502 \u2502 Cell \u2502 \u2026 \u2502 \u2502\n \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502\n \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\n \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 ObjectPicker (popover, when open) \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n## Operations\n\n```mdl\nop createBoard\n desc: Creates a new Board ECHO object and adds it to the target space.\n input:\n name?: string\n target?: Space\n targetNodeId?: string\n output: Board\n effects: [echo:write]\n note: Delegates to SpaceOperation.AddObject with hidden=true.\n```\n\n```mdl\nop addItem\n desc: Adds an ECHO object reference to the board at the given grid position.\n input:\n board: Board\n object: Obj.Unknown\n position: Position\n output: Board\n effects: [echo:write]\n note: |\n When a grid "+" is clicked with a position, a new Markdown document is\n created inline. When the toolbar "+" is clicked without a position, an\n ObjectPicker is shown and the user selects an existing object.\n```\n\n```mdl\nop removeItem\n desc: Removes an item reference and its layout entry from the board.\n input:\n board: Board\n id: string\n output: Board\n effects: [echo:write]\n note: Does not delete the underlying ECHO object; only removes it from the canvas.\n```\n\n```mdl\nop moveItem\n desc: Updates the grid position for an existing board item.\n input:\n board: Board\n id: string\n position: Position\n output: Board\n effects: [echo:write]\n```\n\n## Features\n\n```mdl\nfeat F-1: Create Board\n\n req F-1.1: A new Board is created with an empty items list and an empty layout.\n req F-1.2: The Board is added to the active space using SpaceOperation.AddObject.\n req F-1.3: The Board appears in the space object list immediately after creation.\n```\n\n```mdl\nfeat F-2: Add Item to Board\n\n req F-2.1:\n when: user clicks "+" on the grid backdrop at a specific position\n then: a new Markdown document is created and placed at that position\n\n req F-2.2:\n when: user clicks "+" on the toolbar (no position)\n then: ObjectPicker opens, listing all space objects that are not the board itself\n\n req F-2.3:\n when: user selects an object from the ObjectPicker\n then: a Ref to that object is appended to board.items; layout entry created at default position\n\n req F-2.4: Objects are sorted alphabetically by label in the ObjectPicker.\n```\n\n```mdl\nfeat F-3: Remove Item from Board\n\n req F-3.1:\n when: user deletes a cell\n then: the Ref is removed from board.items and the layout entry is deleted\n note: the referenced ECHO object is not deleted\n\n req F-3.2: Board is updated atomically via Obj.update.\n```\n\n```mdl\nfeat F-4: Move Item on Board\n\n req F-4.1:\n when: user drags a card to a new position\n then: board.layout.cells[id] is updated with the new Position\n\n req F-4.2: Other items are not affected by a move operation.\n```\n\n```mdl\nfeat F-5: Render Items\n\n req F-5.1: Each item in board.items is rendered as a Surface.Surface with the Card role.\n req F-5.2:\n when: an item\'s Ref cannot be resolved (deleted object)\n then: the cell is silently omitted from the rendered canvas\n\n req F-5.3: Items are rendered in board.items order; z-ordering follows index.\n```\n\n```mdl\nfeat F-6: Attention and Focus\n\n req F-6.1:\n when: the Board surface does not have attention\n then: Board.Toolbar is rendered in disabled state; drag and add interactions are suppressed\n\n req F-6.2:\n when: the Board surface gains attention\n then: Board.Toolbar becomes interactive\n```\n\n## Acceptance\n\n```mdl\ntest T-1: New board is empty\n given: a new Board has been created\n then:\n - board.items is empty\n - board.layout.cells is empty\n```\n\n```mdl\ntest T-2: Add item via grid backdrop\n given: an empty board is displayed\n when: user clicks the "+" hotspot at position (100, 200)\n then:\n - a Markdown document is created in the space\n - board.items contains a Ref to the new document\n - board.layout.cells[doc.id] === { x: 100, y: 200 }\n```\n\n```mdl\ntest T-3: Add existing object via picker\n given: the space contains a Document with label "Meeting notes"\n when: user opens the ObjectPicker from the toolbar and selects "Meeting notes"\n then:\n - board.items contains a Ref to the Document\n - board.layout.cells[doc.id] === { x: 0, y: 0 }\n - picker is closed\n```\n\n```mdl\ntest T-4: Remove item\n given: board has one item\n when: user deletes the cell\n then:\n - board.items is empty\n - board.layout.cells is empty\n - the referenced ECHO object still exists in the space\n```\n\n```mdl\ntest T-5: Move item\n given: board has one item at position { x: 0, y: 0 }\n when: user drags it to { x: 300, y: 150 }\n then:\n - board.layout.cells[item.id] === { x: 300, y: 150 }\n - board.items length is unchanged\n```\n\n```mdl\ntest T-6: Toolbar gated by attention\n given: board is rendered without focus\n then: Board.Toolbar is disabled\n when: board gains focus\n then: Board.Toolbar is interactive\n```\n\n---\n\n## Appendix: Extension Definitions\n\nExtension block types used in this document are defined below using\nthe core `ext` primitive \u2014 the only construct the base language provides.\n\n```mdl\next type\n uri: org.dxos.mdl.type@1.0\n desc: A named data structure with typed fields and optional literals.\n fields:\n desc?: Prose\n fields?: FieldMap # name[?]: TypeExpr (# inline comment)\n literals?: UnionList # a | b | c\n extends?: TypeRef[]\n```\n\n```mdl\next feat\n uri: org.dxos.mdl.feat@1.0\n desc: A named feature grouping one or more requirements.\n fields:\n desc?: Prose\n req: RequirementList\n nesting: self # feat blocks may contain feat blocks\n```\n\n```mdl\next test\n uri: org.dxos.mdl.test@1.0\n desc: An acceptance scenario expressed as given / when / then steps.\n fields:\n given?: Step | Step[]\n when?: Step | Step[]\n then: Step | Step[]\n tags?: TagList\n```\n\n```mdl\next component\n uri: org.dxos.mdl.component@1.0\n desc: A UI component with props, internal state, slots, actions, and events.\n fields:\n desc?: Prose\n props?: FieldMap # external inputs (immutable inside component)\n state?: FieldMap # internal reactive state\n slots?: FieldMap # named ReactNode injection points\n actions?: ActionMap # methods the component exposes or handles\n emits?: EventMap # events the component raises to its parent\n layout?: CodeBlock # ASCII sketch of visual structure (non-normative)\n```\n\n```mdl\next op\n uri: org.dxos.mdl.op@1.0\n desc: |\n A named operation with typed inputs, outputs, and declared errors.\n Pure ops have no effects or requires. Effectful ops declare both.\n fields:\n desc?: Prose\n input?: FieldMap # named input parameters\n output?: TypeExpr # return type\n errors?: ErrorMap # name: Prose (when this error occurs)\n effects?: EffectList # echo:read | echo:write | http | fs | ...\n requires?: ServiceList # injected service dependencies\n note?: Prose # implementation guidance (non-normative)\n```\n';
14
+
15
+ // src/BoardPlugin.tsx
16
+ var BoardPlugin = Plugin.define(meta).pipe(AppPlugin.addCreateObjectModule({
17
+ activate: CreateObject
18
+ }), AppPlugin.addSchemaModule({
19
+ schema: [
20
+ Board.Board
21
+ ]
22
+ }), AppPlugin.addSurfaceModule({
23
+ activate: ReactSurface
24
+ }), AppPlugin.addTranslationsModule({
25
+ translations: [
26
+ ...translations,
27
+ ...boardTranslations
28
+ ]
29
+ }), AppPlugin.addPluginAssetModule({
30
+ asset: {
31
+ pluginId: meta.id,
32
+ path: "PLUGIN.mdl",
33
+ content: PLUGIN_default,
34
+ mimeType: "application/x-mdl"
35
+ }
36
+ }), Plugin.make);
37
+ var BoardPlugin_default = BoardPlugin;
38
+ export {
39
+ BoardPlugin,
40
+ BoardPlugin_default as default
41
+ };
42
+ //# sourceMappingURL=BoardPlugin.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/BoardPlugin.tsx", "raw-loader:/__w/dxos/dxos/packages/plugins/plugin-board/PLUGIN.mdl?raw"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\nimport { translations as boardTranslations } from '@dxos/react-ui-board/translations';\n\nimport { CreateObject, ReactSurface } from '#capabilities';\nimport { meta } from '#meta';\nimport { translations } from '#translations';\nimport { Board } from '#types';\n\n// eslint-disable-next-line import/no-relative-packages\nimport pluginSpec from '../PLUGIN.mdl?raw';\n\nexport const BoardPlugin = Plugin.define(meta).pipe(\n AppPlugin.addCreateObjectModule({ activate: CreateObject }),\n AppPlugin.addSchemaModule({ schema: [Board.Board] }),\n AppPlugin.addSurfaceModule({ activate: ReactSurface }),\n AppPlugin.addTranslationsModule({ translations: [...translations, ...boardTranslations] }),\n AppPlugin.addPluginAssetModule({\n asset: { pluginId: meta.id, path: 'PLUGIN.mdl', content: pluginSpec, mimeType: 'application/x-mdl' },\n }),\n Plugin.make,\n);\n\nexport default BoardPlugin;\n", "---\nid: org.dxos.plugin.board\nname: BoardPlugin\nversion: 0.1.0\n---\n\nA spatial canvas plugin for `DXOS` Composer that lets users arrange any ECHO objects on an infinite two-dimensional grid.\nItems can be placed freely, moved by dragging, and removed from the canvas without deleting the underlying objects.\n\n## Extensions\n\nThe following extension dialects are used in this document.\nEach extension is defined in the Appendix or resolved via its URI.\n\n| Term | URI |\n|-------------|--------------------------------|\n| `type` | `org.dxos.mdl.type@1.0` |\n| `feat` | `org.dxos.mdl.feat@1.0` |\n| `test` | `org.dxos.mdl.test@1.0` |\n| `component` | `org.dxos.mdl.component@1.0` |\n| `op` | `org.dxos.mdl.op@1.0` |\n\n## Types\n\n```mdl\ntype Position\n fields:\n x: number\n y: number\n w?: number\n h?: number\n```\n\n```mdl\ntype BoardLayout\n fields:\n cells: { [id: string]: Position }\n```\n\n```mdl\ntype Board\n desc: Root ECHO object (typename org.dxos.type.board).\n fields:\n name?: string\n items: Ref[] # ordered list of references to ECHO objects on the canvas\n layout: BoardLayout # position of every item keyed by object id\n```\n\n## Components\n\n```mdl\ncomponent BoardArticle\n desc: Full-canvas surface rendered for article and section roles.\n props:\n role: string # AppSurface role (article | section)\n subject: Board # ECHO Board object\n attendableId?: string # attention tracking id\n state:\n items: Obj.Unknown[] # resolved ECHO objects from board.items refs\n pickerState?: PickerState # null when picker closed; Position when open\n slots:\n toolbar?: ReactNode # Board.Toolbar (disabled when not focused)\n cell?: ReactNode # one Surface.Surface per item (Card role)\n actions:\n addItem(anchor, position?) \u2192 void\n deleteItem(id: string) \u2192 void\n moveItem(id: string, position: Position) \u2192 void\n selectFromPicker(id: string) \u2192 void\n emits:\n onAdd(anchor: HTMLButtonElement, position?: Position)\n onDelete(id: string)\n onMove(id: string, position: Position)\n layout: |\n \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 Board.Toolbar (attention-gated) \u2502\n \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 Board.Viewport \u2502\n \u2502 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\n \u2502 \u2502 Board.Backdrop (+) \u2502 \u2502\n \u2502 \u2502 \u2502 \u2502\n \u2502 \u2502 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 \u2502\n \u2502 \u2502 \u2502 Cell \u2502 \u2502 Cell \u2502 \u2026 \u2502 \u2502\n \u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 \u2502\n \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\n \u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502 ObjectPicker (popover, when open) \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n## Operations\n\n```mdl\nop createBoard\n desc: Creates a new Board ECHO object and adds it to the target space.\n input:\n name?: string\n target?: Space\n targetNodeId?: string\n output: Board\n effects: [echo:write]\n note: Delegates to SpaceOperation.AddObject with hidden=true.\n```\n\n```mdl\nop addItem\n desc: Adds an ECHO object reference to the board at the given grid position.\n input:\n board: Board\n object: Obj.Unknown\n position: Position\n output: Board\n effects: [echo:write]\n note: |\n When a grid \"+\" is clicked with a position, a new Markdown document is\n created inline. When the toolbar \"+\" is clicked without a position, an\n ObjectPicker is shown and the user selects an existing object.\n```\n\n```mdl\nop removeItem\n desc: Removes an item reference and its layout entry from the board.\n input:\n board: Board\n id: string\n output: Board\n effects: [echo:write]\n note: Does not delete the underlying ECHO object; only removes it from the canvas.\n```\n\n```mdl\nop moveItem\n desc: Updates the grid position for an existing board item.\n input:\n board: Board\n id: string\n position: Position\n output: Board\n effects: [echo:write]\n```\n\n## Features\n\n```mdl\nfeat F-1: Create Board\n\n req F-1.1: A new Board is created with an empty items list and an empty layout.\n req F-1.2: The Board is added to the active space using SpaceOperation.AddObject.\n req F-1.3: The Board appears in the space object list immediately after creation.\n```\n\n```mdl\nfeat F-2: Add Item to Board\n\n req F-2.1:\n when: user clicks \"+\" on the grid backdrop at a specific position\n then: a new Markdown document is created and placed at that position\n\n req F-2.2:\n when: user clicks \"+\" on the toolbar (no position)\n then: ObjectPicker opens, listing all space objects that are not the board itself\n\n req F-2.3:\n when: user selects an object from the ObjectPicker\n then: a Ref to that object is appended to board.items; layout entry created at default position\n\n req F-2.4: Objects are sorted alphabetically by label in the ObjectPicker.\n```\n\n```mdl\nfeat F-3: Remove Item from Board\n\n req F-3.1:\n when: user deletes a cell\n then: the Ref is removed from board.items and the layout entry is deleted\n note: the referenced ECHO object is not deleted\n\n req F-3.2: Board is updated atomically via Obj.update.\n```\n\n```mdl\nfeat F-4: Move Item on Board\n\n req F-4.1:\n when: user drags a card to a new position\n then: board.layout.cells[id] is updated with the new Position\n\n req F-4.2: Other items are not affected by a move operation.\n```\n\n```mdl\nfeat F-5: Render Items\n\n req F-5.1: Each item in board.items is rendered as a Surface.Surface with the Card role.\n req F-5.2:\n when: an item's Ref cannot be resolved (deleted object)\n then: the cell is silently omitted from the rendered canvas\n\n req F-5.3: Items are rendered in board.items order; z-ordering follows index.\n```\n\n```mdl\nfeat F-6: Attention and Focus\n\n req F-6.1:\n when: the Board surface does not have attention\n then: Board.Toolbar is rendered in disabled state; drag and add interactions are suppressed\n\n req F-6.2:\n when: the Board surface gains attention\n then: Board.Toolbar becomes interactive\n```\n\n## Acceptance\n\n```mdl\ntest T-1: New board is empty\n given: a new Board has been created\n then:\n - board.items is empty\n - board.layout.cells is empty\n```\n\n```mdl\ntest T-2: Add item via grid backdrop\n given: an empty board is displayed\n when: user clicks the \"+\" hotspot at position (100, 200)\n then:\n - a Markdown document is created in the space\n - board.items contains a Ref to the new document\n - board.layout.cells[doc.id] === { x: 100, y: 200 }\n```\n\n```mdl\ntest T-3: Add existing object via picker\n given: the space contains a Document with label \"Meeting notes\"\n when: user opens the ObjectPicker from the toolbar and selects \"Meeting notes\"\n then:\n - board.items contains a Ref to the Document\n - board.layout.cells[doc.id] === { x: 0, y: 0 }\n - picker is closed\n```\n\n```mdl\ntest T-4: Remove item\n given: board has one item\n when: user deletes the cell\n then:\n - board.items is empty\n - board.layout.cells is empty\n - the referenced ECHO object still exists in the space\n```\n\n```mdl\ntest T-5: Move item\n given: board has one item at position { x: 0, y: 0 }\n when: user drags it to { x: 300, y: 150 }\n then:\n - board.layout.cells[item.id] === { x: 300, y: 150 }\n - board.items length is unchanged\n```\n\n```mdl\ntest T-6: Toolbar gated by attention\n given: board is rendered without focus\n then: Board.Toolbar is disabled\n when: board gains focus\n then: Board.Toolbar is interactive\n```\n\n---\n\n## Appendix: Extension Definitions\n\nExtension block types used in this document are defined below using\nthe core `ext` primitive \u2014 the only construct the base language provides.\n\n```mdl\next type\n uri: org.dxos.mdl.type@1.0\n desc: A named data structure with typed fields and optional literals.\n fields:\n desc?: Prose\n fields?: FieldMap # name[?]: TypeExpr (# inline comment)\n literals?: UnionList # a | b | c\n extends?: TypeRef[]\n```\n\n```mdl\next feat\n uri: org.dxos.mdl.feat@1.0\n desc: A named feature grouping one or more requirements.\n fields:\n desc?: Prose\n req: RequirementList\n nesting: self # feat blocks may contain feat blocks\n```\n\n```mdl\next test\n uri: org.dxos.mdl.test@1.0\n desc: An acceptance scenario expressed as given / when / then steps.\n fields:\n given?: Step | Step[]\n when?: Step | Step[]\n then: Step | Step[]\n tags?: TagList\n```\n\n```mdl\next component\n uri: org.dxos.mdl.component@1.0\n desc: A UI component with props, internal state, slots, actions, and events.\n fields:\n desc?: Prose\n props?: FieldMap # external inputs (immutable inside component)\n state?: FieldMap # internal reactive state\n slots?: FieldMap # named ReactNode injection points\n actions?: ActionMap # methods the component exposes or handles\n emits?: EventMap # events the component raises to its parent\n layout?: CodeBlock # ASCII sketch of visual structure (non-normative)\n```\n\n```mdl\next op\n uri: org.dxos.mdl.op@1.0\n desc: |\n A named operation with typed inputs, outputs, and declared errors.\n Pure ops have no effects or requires. Effectful ops declare both.\n fields:\n desc?: Prose\n input?: FieldMap # named input parameters\n output?: TypeExpr # return type\n errors?: ErrorMap # name: Prose (when this error occurs)\n effects?: EffectList # echo:read | echo:write | http | fs | ...\n requires?: ServiceList # injected service dependencies\n note?: Prose # implementation guidance (non-normative)\n```\n"],
5
+ "mappings": ";;;AAIA,SAASA,cAAc;AACvB,SAASC,iBAAiB;AAC1B,SAASC,gBAAgBC,yBAAyB;AAElD,SAASC,cAAcC,oBAAoB;AAC3C,SAASC,YAAY;AACrB,SAASJ,oBAAoB;AAC7B,SAASK,aAAa;;;ACXtB;;;ADgBO,IAAMC,cAAcC,OAAOC,OAAOC,IAAAA,EAAMC,KAC7CC,UAAUC,sBAAsB;EAAEC,UAAUC;AAAa,CAAA,GACzDH,UAAUI,gBAAgB;EAAEC,QAAQ;IAACC,MAAMA;;AAAO,CAAA,GAClDN,UAAUO,iBAAiB;EAAEL,UAAUM;AAAa,CAAA,GACpDR,UAAUS,sBAAsB;EAAEC,cAAc;OAAIA;OAAiBC;;AAAmB,CAAA,GACxFX,UAAUY,qBAAqB;EAC7BC,OAAO;IAAEC,UAAUhB,KAAKiB;IAAIC,MAAM;IAAcC,SAASC;IAAYC,UAAU;EAAoB;AACrG,CAAA,GACAvB,OAAOwB,IAAI;AAGb,IAAA,sBAAezB;",
6
+ "names": ["Plugin", "AppPlugin", "translations", "boardTranslations", "CreateObject", "ReactSurface", "meta", "Board", "BoardPlugin", "Plugin", "define", "meta", "pipe", "AppPlugin", "addCreateObjectModule", "activate", "CreateObject", "addSchemaModule", "schema", "Board", "addSurfaceModule", "ReactSurface", "addTranslationsModule", "translations", "boardTranslations", "addPluginAssetModule", "asset", "pluginId", "id", "path", "content", "pluginSpec", "mimeType", "make"]
7
+ }
@@ -0,0 +1,11 @@
1
+ import "../chunk-J5LGTIGS.mjs";
2
+
3
+ // src/capabilities/index.ts
4
+ import { Capability } from "@dxos/app-framework";
5
+ var CreateObject = Capability.lazy("CreateObject", () => import("../create-object-BRISOU7F.mjs"));
6
+ var ReactSurface = Capability.lazy("ReactSurface", () => import("../react-surface-M5JHK3ZQ.mjs"));
7
+ export {
8
+ CreateObject,
9
+ ReactSurface
10
+ };
11
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/capabilities/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\n\nexport const CreateObject = Capability.lazy('CreateObject', () => import('./create-object'));\nexport const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));\n"],
5
+ "mappings": ";;;AAIA,SAASA,kBAAkB;AAEpB,IAAMC,eAAeD,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMC,eAAeH,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;",
6
+ "names": ["Capability", "CreateObject", "lazy", "ReactSurface"]
7
+ }
@@ -0,0 +1,34 @@
1
+ import {
2
+ __export
3
+ } from "./chunk-J5LGTIGS.mjs";
4
+
5
+ // src/types/Board.ts
6
+ var Board_exports = {};
7
+ __export(Board_exports, {
8
+ Board: () => Board,
9
+ makeBoard: () => makeBoard
10
+ });
11
+ import * as Schema from "effect/Schema";
12
+ import { DXN, Annotation, Obj, Ref, Type } from "@dxos/echo";
13
+ import { FormInputAnnotation, LabelAnnotation } from "@dxos/echo/internal";
14
+ import { BoardLayout, defaultLayout } from "@dxos/react-ui-board";
15
+ var Board = Schema.Struct({
16
+ name: Schema.String.pipe(Schema.optional),
17
+ items: Ref.Ref(Obj.Unknown).pipe(Schema.Array, FormInputAnnotation.set(false)),
18
+ layout: BoardLayout.pipe(FormInputAnnotation.set(false))
19
+ }).pipe(LabelAnnotation.set([
20
+ "name"
21
+ ]), Annotation.IconAnnotation.set({
22
+ icon: "ph--squares-four--regular",
23
+ hue: "green"
24
+ }), Type.makeObject(DXN.make("org.dxos.type.board", "0.1.0")));
25
+ var makeBoard = (props = {}) => Obj.make(Board, {
26
+ items: [],
27
+ layout: defaultLayout,
28
+ ...props
29
+ });
30
+
31
+ export {
32
+ Board_exports
33
+ };
34
+ //# sourceMappingURL=chunk-CY5X6YV4.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/Board.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { DXN, Annotation, Obj, Ref, Type } from '@dxos/echo';\nimport { FormInputAnnotation, LabelAnnotation } from '@dxos/echo/internal';\nimport { BoardLayout, defaultLayout } from '@dxos/react-ui-board';\n\n/**\n * Board and layout.\n */\nexport const Board = Schema.Struct({\n name: Schema.String.pipe(Schema.optional),\n items: Ref.Ref(Obj.Unknown).pipe(Schema.Array, FormInputAnnotation.set(false)),\n layout: BoardLayout.pipe(FormInputAnnotation.set(false)),\n}).pipe(\n LabelAnnotation.set(['name']),\n Annotation.IconAnnotation.set({ icon: 'ph--squares-four--regular', hue: 'green' }),\n Type.makeObject(DXN.make('org.dxos.type.board', '0.1.0')),\n);\n\nexport type Board = Type.InstanceType<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"],
5
+ "mappings": ";;;;;AAAA;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,KAAKC,YAAYC,KAAKC,KAAKC,YAAY;AAChD,SAASC,qBAAqBC,uBAAuB;AACrD,SAASC,aAAaC,qBAAqB;AAKpC,IAAMC,QAAeC,cAAO;EACjCC,MAAaC,cAAOC,KAAYC,eAAQ;EACxCC,OAAOZ,IAAIA,IAAID,IAAIc,OAAO,EAAEH,KAAYI,cAAOZ,oBAAoBa,IAAI,KAAA,CAAA;EACvEC,QAAQZ,YAAYM,KAAKR,oBAAoBa,IAAI,KAAA,CAAA;AACnD,CAAA,EAAGL,KACDP,gBAAgBY,IAAI;EAAC;CAAO,GAC5BjB,WAAWmB,eAAeF,IAAI;EAAEG,MAAM;EAA6BC,KAAK;AAAQ,CAAA,GAChFlB,KAAKmB,WAAWvB,IAAIwB,KAAK,uBAAuB,OAAA,CAAA,CAAA;AAK3C,IAAMC,YAAY,CAACC,QAA8C,CAAC,MACvExB,IAAIsB,KAAKf,OAAO;EACdM,OAAO,CAAA;EACPI,QAAQX;EACR,GAAGkB;AACL,CAAA;",
6
+ "names": ["Schema", "DXN", "Annotation", "Obj", "Ref", "Type", "FormInputAnnotation", "LabelAnnotation", "BoardLayout", "defaultLayout", "Board", "Struct", "name", "String", "pipe", "optional", "items", "Unknown", "Array", "set", "layout", "IconAnnotation", "icon", "hue", "makeObject", "make", "makeBoard", "props"]
7
+ }
@@ -0,0 +1,32 @@
1
+ // src/meta.ts
2
+ import { Plugin } from "@dxos/app-framework";
3
+ import { DXN } from "@dxos/keys";
4
+ import { trim } from "@dxos/util";
5
+ var meta = Plugin.makeMeta({
6
+ key: DXN.make("org.dxos.plugin.board"),
7
+ name: "Board",
8
+ author: "DXOS",
9
+ description: trim`
10
+ Board is an infinite spatial canvas that lets you place any ECHO object — documents, tasks, notes, or rich media — anywhere on a two-dimensional grid.
11
+ Items are arranged by dragging, resized freely, and removed from the canvas without deleting the underlying data, so the same object can appear on multiple boards simultaneously.
12
+
13
+ Each board is itself an ECHO object, making it fully collaborative and conflict-free: all participants see live updates as peers add, move, or remove items in real time.
14
+ The canvas scales to any resolution, supports nested surfaces through the Composer slot system, and integrates naturally with other plugins via the shared ObjectPicker.
15
+
16
+ Board is designed as a lightweight composition layer: it imposes no schema on the objects it hosts and delegates rendering to each object's own Card surface, so every plugin contributes its own card representation automatically.
17
+ This makes it ideal for dashboards, mood boards, project overviews, or any context where spatial relationships between heterogeneous objects carry meaning.
18
+ `,
19
+ icon: "ph--squares-four--regular",
20
+ iconHue: "green",
21
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-board",
22
+ spec: "PLUGIN.mdl",
23
+ screenshots: [],
24
+ tags: [
25
+ "labs"
26
+ ]
27
+ });
28
+
29
+ export {
30
+ meta
31
+ };
32
+ //# sourceMappingURL=chunk-HUBZKCPA.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { DXN } from '@dxos/keys';\nimport { trim } from '@dxos/util';\n\nexport const meta = Plugin.makeMeta({\n key: DXN.make('org.dxos.plugin.board'),\n name: 'Board',\n author: 'DXOS',\n description: trim`\n Board is an infinite spatial canvas that lets you place any ECHO object — documents, tasks, notes, or rich media — anywhere on a two-dimensional grid.\n Items are arranged by dragging, resized freely, and removed from the canvas without deleting the underlying data, so the same object can appear on multiple boards simultaneously.\n\n Each board is itself an ECHO object, making it fully collaborative and conflict-free: all participants see live updates as peers add, move, or remove items in real time.\n The canvas scales to any resolution, supports nested surfaces through the Composer slot system, and integrates naturally with other plugins via the shared ObjectPicker.\n\n Board is designed as a lightweight composition layer: it imposes no schema on the objects it hosts and delegates rendering to each object's own Card surface, so every plugin contributes its own card representation automatically.\n This makes it ideal for dashboards, mood boards, project overviews, or any context where spatial relationships between heterogeneous objects carry meaning.\n `,\n icon: 'ph--squares-four--regular',\n iconHue: 'green',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-board',\n spec: 'PLUGIN.mdl',\n screenshots: [],\n tags: ['labs'],\n});\n"],
5
+ "mappings": ";AAIA,SAASA,cAAc;AACvB,SAASC,WAAW;AACpB,SAASC,YAAY;AAEd,IAAMC,OAAOH,OAAOI,SAAS;EAClCC,KAAKJ,IAAIK,KAAK,uBAAA;EACdC,MAAM;EACNC,QAAQ;EACRC,aAAaP;;;;;;;;;;EAUbQ,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,MAAM;EACNC,aAAa,CAAA;EACbC,MAAM;IAAC;;AACT,CAAA;",
6
+ "names": ["Plugin", "DXN", "trim", "meta", "makeMeta", "key", "make", "name", "author", "description", "icon", "iconHue", "source", "spec", "screenshots", "tags"]
7
+ }
@@ -0,0 +1,10 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, { get: all[name], enumerable: true });
5
+ };
6
+
7
+ export {
8
+ __export
9
+ };
10
+ //# sourceMappingURL=chunk-J5LGTIGS.mjs.map
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,9 @@
1
+ import "../chunk-J5LGTIGS.mjs";
2
+
3
+ // src/containers/index.ts
4
+ import { lazy } from "react";
5
+ var BoardArticle = lazy(() => import("../BoardArticle-XCMTXRNW.mjs"));
6
+ export {
7
+ BoardArticle
8
+ };
9
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/containers/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport const BoardArticle: ComponentType<any> = lazy(() => import('./BoardArticle'));\n"],
5
+ "mappings": ";;;AAIA,SAA6BA,YAAY;AAElC,IAAMC,eAAmCD,KAAK,MAAM,OAAO,8BAAA,CAAA;",
6
+ "names": ["lazy", "BoardArticle"]
7
+ }
@@ -0,0 +1,28 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/capabilities/create-object.ts
4
+ import * as Effect from "effect/Effect";
5
+ import { Capability } from "@dxos/app-framework";
6
+ import { Operation } from "@dxos/compute";
7
+ import { Type } from "@dxos/echo";
8
+ import { SpaceOperation } from "@dxos/plugin-space";
9
+ import { SpaceCapabilities } from "@dxos/plugin-space";
10
+ import { Board } from "#types";
11
+ var create_object_default = Capability.makeModule(Effect.fnUntraced(function* () {
12
+ return Capability.contributes(SpaceCapabilities.CreateObjectEntry, {
13
+ id: Type.getTypename(Board.Board),
14
+ createObject: (props, options) => Effect.gen(function* () {
15
+ const object = Board.makeBoard(props);
16
+ return yield* Operation.invoke(SpaceOperation.AddObject, {
17
+ object,
18
+ target: options.target,
19
+ hidden: true,
20
+ targetNodeId: options.targetNodeId
21
+ });
22
+ })
23
+ });
24
+ }));
25
+ export {
26
+ create_object_default as default
27
+ };
28
+ //# sourceMappingURL=create-object-BRISOU7F.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/create-object.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\nimport { Type } from '@dxos/echo';\nimport { SpaceOperation } from '@dxos/plugin-space';\nimport { SpaceCapabilities } from '@dxos/plugin-space';\n\nimport { Board } from '#types';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n return Capability.contributes(SpaceCapabilities.CreateObjectEntry, {\n id: Type.getTypename(Board.Board),\n createObject: (props, options) =>\n Effect.gen(function* () {\n const object = Board.makeBoard(props);\n return yield* Operation.invoke(SpaceOperation.AddObject, {\n object,\n target: options.target,\n hidden: true,\n targetNodeId: options.targetNodeId,\n });\n }),\n });\n }),\n);\n"],
5
+ "mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,iBAAiB;AAC1B,SAASC,YAAY;AACrB,SAASC,sBAAsB;AAC/B,SAASC,yBAAyB;AAElC,SAASC,aAAa;AAEtB,IAAA,wBAAeL,WAAWM,WACjBC,kBAAW,aAAA;AAChB,SAAOP,WAAWQ,YAAYJ,kBAAkBK,mBAAmB;IACjEC,IAAIR,KAAKS,YAAYN,MAAMA,KAAK;IAChCO,cAAc,CAACC,OAAOC,YACbC,WAAI,aAAA;AACT,YAAMC,SAASX,MAAMY,UAAUJ,KAAAA;AAC/B,aAAO,OAAOZ,UAAUiB,OAAOf,eAAegB,WAAW;QACvDH;QACAI,QAAQN,QAAQM;QAChBC,QAAQ;QACRC,cAAcR,QAAQQ;MACxB,CAAA;IACF,CAAA;EACJ,CAAA;AACF,CAAA,CAAA;",
6
+ "names": ["Effect", "Capability", "Operation", "Type", "SpaceOperation", "SpaceCapabilities", "Board", "makeModule", "fnUntraced", "contributes", "CreateObjectEntry", "id", "getTypename", "createObject", "props", "options", "gen", "object", "makeBoard", "invoke", "AddObject", "target", "hidden", "targetNodeId"]
7
+ }
@@ -0,0 +1,12 @@
1
+ import {
2
+ Board_exports
3
+ } from "./chunk-CY5X6YV4.mjs";
4
+ import {
5
+ meta
6
+ } from "./chunk-HUBZKCPA.mjs";
7
+ import "./chunk-J5LGTIGS.mjs";
8
+ export {
9
+ Board_exports as Board,
10
+ meta
11
+ };
12
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ {"inputs":{"src/meta.ts":{"bytes":4543,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/types/Board.ts":{"bytes":3701,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/react-ui-board","kind":"import-statement","external":true}],"format":"esm"},"src/types/index.ts":{"bytes":422,"imports":[{"path":"src/types/Board.ts","kind":"import-statement","original":"./Board"}],"format":"esm"},"src/index.ts":{"bytes":449,"imports":[{"path":"src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"src/types/index.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"raw-loader:/__w/dxos/dxos/packages/plugins/plugin-board/PLUGIN.mdl?raw":{"bytes":10172,"imports":[]},"src/BoardPlugin.tsx":{"bytes":3983,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/react-ui-board/translations","kind":"import-statement","external":true},{"path":"#capabilities","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#translations","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true},{"path":"raw-loader:/__w/dxos/dxos/packages/plugins/plugin-board/PLUGIN.mdl?raw","kind":"import-statement","original":"../PLUGIN.mdl?raw"}],"format":"esm"},"src/capabilities/create-object.ts":{"bytes":3511,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"format":"esm"},"src/capabilities/react-surface.tsx":{"bytes":3684,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-framework/ui","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit/ui","kind":"import-statement","external":true},{"path":"#containers","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"format":"esm"},"src/capabilities/index.ts":{"bytes":1130,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"src/capabilities/create-object.ts","kind":"dynamic-import","original":"./create-object"},{"path":"src/capabilities/react-surface.tsx","kind":"dynamic-import","original":"./react-surface"}],"format":"esm"},"src/components/index.ts":{"bytes":288,"imports":[],"format":"esm"},"src/containers/BoardArticle/BoardArticle.tsx":{"bytes":22385,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@effect-atom/atom/Atom","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework/ui","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit/ui","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-atom","kind":"import-statement","external":true},{"path":"@dxos/echo-react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-board","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/containers/BoardArticle/index.ts":{"bytes":506,"imports":[{"path":"src/containers/BoardArticle/BoardArticle.tsx","kind":"import-statement","original":"./BoardArticle"}],"format":"esm"},"src/containers/index.ts":{"bytes":702,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"src/containers/BoardArticle/index.ts","kind":"dynamic-import","original":"./BoardArticle"}],"format":"esm"},"src/plugin.ts":{"bytes":850,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"#plugin","kind":"dynamic-import","external":true}],"format":"esm"},"src/translations.ts":{"bytes":2655,"imports":[{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/lib/neutral/types/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/neutral/types/index.mjs":{"imports":[{"path":"dist/lib/neutral/chunk-CY5X6YV4.mjs","kind":"import-statement"},{"path":"dist/lib/neutral/chunk-J5LGTIGS.mjs","kind":"import-statement"}],"exports":["Board"],"entryPoint":"src/types/index.ts","inputs":{},"bytes":161},"dist/lib/neutral/create-object-BRISOU7F.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1834},"dist/lib/neutral/create-object-BRISOU7F.mjs":{"imports":[{"path":"dist/lib/neutral/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/compute","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/capabilities/create-object.ts","inputs":{"src/capabilities/create-object.ts":{"bytesInOutput":818}},"bytes":986},"dist/lib/neutral/react-surface-M5JHK3ZQ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1871},"dist/lib/neutral/react-surface-M5JHK3ZQ.mjs":{"imports":[{"path":"dist/lib/neutral/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-framework/ui","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit/ui","kind":"import-statement","external":true},{"path":"#containers","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/capabilities/react-surface.tsx","inputs":{"src/capabilities/react-surface.tsx":{"bytesInOutput":895}},"bytes":1064},"dist/lib/neutral/BoardArticle-XCMTXRNW.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":10909},"dist/lib/neutral/BoardArticle-XCMTXRNW.mjs":{"imports":[{"path":"dist/lib/neutral/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@effect-atom/atom/Atom","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework/ui","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit/ui","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo-atom","kind":"import-statement","external":true},{"path":"@dxos/echo-react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/plugin-markdown","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-board","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/containers/BoardArticle/index.ts","inputs":{"src/containers/BoardArticle/BoardArticle.tsx":{"bytesInOutput":5312},"src/containers/BoardArticle/index.ts":{"bytesInOutput":0}},"bytes":5481},"dist/lib/neutral/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/neutral/index.mjs":{"imports":[{"path":"dist/lib/neutral/chunk-CY5X6YV4.mjs","kind":"import-statement"},{"path":"dist/lib/neutral/chunk-HUBZKCPA.mjs","kind":"import-statement"},{"path":"dist/lib/neutral/chunk-J5LGTIGS.mjs","kind":"import-statement"}],"exports":["Board","meta"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":0}},"bytes":214},"dist/lib/neutral/chunk-CY5X6YV4.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1975},"dist/lib/neutral/chunk-CY5X6YV4.mjs":{"imports":[{"path":"dist/lib/neutral/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/echo/internal","kind":"import-statement","external":true},{"path":"@dxos/react-ui-board","kind":"import-statement","external":true}],"exports":["Board_exports"],"inputs":{"src/types/Board.ts":{"bytesInOutput":859},"src/types/index.ts":{"bytesInOutput":0}},"bytes":1006},"dist/lib/neutral/BoardPlugin.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":13614},"dist/lib/neutral/BoardPlugin.mjs":{"imports":[{"path":"dist/lib/neutral/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/react-ui-board/translations","kind":"import-statement","external":true},{"path":"#capabilities","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#translations","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"exports":["BoardPlugin","default"],"entryPoint":"src/BoardPlugin.tsx","inputs":{"src/BoardPlugin.tsx":{"bytesInOutput":897},"raw-loader:/__w/dxos/dxos/packages/plugins/plugin-board/PLUGIN.mdl?raw":{"bytesInOutput":11399}},"bytes":12551},"dist/lib/neutral/capabilities/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":602},"dist/lib/neutral/capabilities/index.mjs":{"imports":[{"path":"dist/lib/neutral/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"dist/lib/neutral/create-object-BRISOU7F.mjs","kind":"dynamic-import"},{"path":"dist/lib/neutral/react-surface-M5JHK3ZQ.mjs","kind":"dynamic-import"}],"exports":["CreateObject","ReactSurface"],"entryPoint":"src/capabilities/index.ts","inputs":{"src/capabilities/index.ts":{"bytesInOutput":248}},"bytes":388},"dist/lib/neutral/components/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/neutral/components/index.mjs":{"imports":[],"exports":[],"entryPoint":"src/components/index.ts","inputs":{"src/components/index.ts":{"bytesInOutput":0}},"bytes":35},"dist/lib/neutral/containers/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":397},"dist/lib/neutral/containers/index.mjs":{"imports":[{"path":"dist/lib/neutral/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"dist/lib/neutral/BoardArticle-XCMTXRNW.mjs","kind":"dynamic-import"}],"exports":["BoardArticle"],"entryPoint":"src/containers/index.ts","inputs":{"src/containers/index.ts":{"bytesInOutput":101}},"bytes":223},"dist/lib/neutral/meta.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/neutral/meta.mjs":{"imports":[{"path":"dist/lib/neutral/chunk-HUBZKCPA.mjs","kind":"import-statement"},{"path":"dist/lib/neutral/chunk-J5LGTIGS.mjs","kind":"import-statement"}],"exports":["meta"],"entryPoint":"src/meta.ts","inputs":{},"bytes":131},"dist/lib/neutral/plugin.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":438},"dist/lib/neutral/plugin.mjs":{"imports":[{"path":"dist/lib/neutral/chunk-HUBZKCPA.mjs","kind":"import-statement"},{"path":"dist/lib/neutral/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"#plugin","kind":"dynamic-import","external":true}],"exports":["BoardPlugin"],"entryPoint":"src/plugin.ts","inputs":{"src/plugin.ts":{"bytesInOutput":108}},"bytes":266},"dist/lib/neutral/chunk-HUBZKCPA.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2113},"dist/lib/neutral/chunk-HUBZKCPA.mjs":{"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["meta"],"inputs":{"src/meta.ts":{"bytesInOutput":1540}},"bytes":1619},"dist/lib/neutral/translations.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1295},"dist/lib/neutral/translations.mjs":{"imports":[{"path":"dist/lib/neutral/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"#meta","kind":"import-statement","external":true},{"path":"#types","kind":"import-statement","external":true}],"exports":["translations"],"entryPoint":"src/translations.ts","inputs":{"src/translations.ts":{"bytesInOutput":646}},"bytes":770},"dist/lib/neutral/chunk-J5LGTIGS.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/neutral/chunk-J5LGTIGS.mjs":{"imports":[],"exports":["__export"],"inputs":{},"bytes":235}}}
@@ -0,0 +1,8 @@
1
+ import {
2
+ meta
3
+ } from "./chunk-HUBZKCPA.mjs";
4
+ import "./chunk-J5LGTIGS.mjs";
5
+ export {
6
+ meta
7
+ };
8
+ //# sourceMappingURL=meta.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,12 @@
1
+ import {
2
+ meta
3
+ } from "./chunk-HUBZKCPA.mjs";
4
+ import "./chunk-J5LGTIGS.mjs";
5
+
6
+ // src/plugin.ts
7
+ import { Plugin } from "@dxos/app-framework";
8
+ var BoardPlugin = Plugin.lazy(meta, () => import("#plugin"));
9
+ export {
10
+ BoardPlugin
11
+ };
12
+ //# sourceMappingURL=plugin.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/plugin.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\n\nimport { meta } from './meta';\n\nexport const BoardPlugin = Plugin.lazy(meta, () => import('#plugin'));\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,cAAc;AAIhB,IAAMC,cAAcC,OAAOC,KAAKC,MAAM,MAAM,OAAO,SAAA,CAAA;",
6
+ "names": ["Plugin", "BoardPlugin", "Plugin", "lazy", "meta"]
7
+ }
@@ -0,0 +1,26 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/capabilities/react-surface.tsx
4
+ import * as Effect from "effect/Effect";
5
+ import React from "react";
6
+ import { Capabilities, Capability } from "@dxos/app-framework";
7
+ import { Surface } from "@dxos/app-framework/ui";
8
+ import { AppSurface } from "@dxos/app-toolkit/ui";
9
+ import { BoardArticle } from "#containers";
10
+ import { Board } from "#types";
11
+ var react_surface_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Capabilities.ReactSurface, [
12
+ Surface.create({
13
+ id: "root",
14
+ // TODO(wittjosiah): Split into multiple surfaces if this filter proves too strict for non-article roles.
15
+ filter: AppSurface.oneOf(AppSurface.object(AppSurface.Article, Board.Board), AppSurface.object(AppSurface.Section, Board.Board)),
16
+ component: ({ role, data }) => /* @__PURE__ */ React.createElement(BoardArticle, {
17
+ role,
18
+ subject: data.subject,
19
+ attendableId: data.attendableId
20
+ })
21
+ })
22
+ ])));
23
+ export {
24
+ react_surface_default as default
25
+ };
26
+ //# sourceMappingURL=react-surface-M5JHK3ZQ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React from 'react';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\n\nimport { BoardArticle } from '#containers';\nimport { Board } from '#types';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactSurface, [\n Surface.create({\n id: 'root',\n // TODO(wittjosiah): Split into multiple surfaces if this filter proves too strict for non-article roles.\n filter: AppSurface.oneOf(\n AppSurface.object(AppSurface.Article, Board.Board),\n AppSurface.object(AppSurface.Section, Board.Board),\n ),\n component: ({ role, data }) => (\n <BoardArticle role={role} subject={data.subject} attendableId={data.attendableId} />\n ),\n }),\n ]),\n ),\n);\n"],
5
+ "mappings": ";;;AAIA,YAAYA,YAAY;AACxB,OAAOC,WAAW;AAElB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,eAAe;AACxB,SAASC,kBAAkB;AAE3B,SAASC,oBAAoB;AAC7B,SAASC,aAAa;AAEtB,IAAA,wBAAeJ,WAAWK,WAAW,MAC5BC,eACLN,WAAWO,YAAYR,aAAaS,cAAc;EAChDP,QAAQQ,OAAO;IACbC,IAAI;;IAEJC,QAAQT,WAAWU,MACjBV,WAAWW,OAAOX,WAAWY,SAASV,MAAMA,KAAK,GACjDF,WAAWW,OAAOX,WAAWa,SAASX,MAAMA,KAAK,CAAA;IAEnDY,WAAW,CAAC,EAAEC,MAAMC,KAAI,MACtB,sBAAA,cAACf,cAAAA;MAAac;MAAYE,SAASD,KAAKC;MAASC,cAAcF,KAAKE;;EAExE,CAAA;CACD,CAAA,CAAA;",
6
+ "names": ["Effect", "React", "Capabilities", "Capability", "Surface", "AppSurface", "BoardArticle", "Board", "makeModule", "succeed", "contributes", "ReactSurface", "create", "id", "filter", "oneOf", "object", "Article", "Section", "component", "role", "data", "subject", "attendableId"]
7
+ }
@@ -0,0 +1,30 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/translations.ts
4
+ import { Type } from "@dxos/echo";
5
+ import { meta } from "#meta";
6
+ import { Board } from "#types";
7
+ var translations = [
8
+ {
9
+ "en-US": {
10
+ [Type.getTypename(Board.Board)]: {
11
+ "typename.label": "Board",
12
+ "typename.label_zero": "Boards",
13
+ "typename.label_one": "Board",
14
+ "typename.label_other": "Boards",
15
+ "object-name.placeholder": "New board",
16
+ "add-object.label": "Add board",
17
+ "rename-object.label": "Rename board",
18
+ "delete-object.label": "Delete board",
19
+ "object-deleted.label": "Board deleted"
20
+ },
21
+ [meta.id]: {
22
+ "plugin.name": "Board"
23
+ }
24
+ }
25
+ }
26
+ ];
27
+ export {
28
+ translations
29
+ };
30
+ //# sourceMappingURL=translations.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/translations.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Type } from '@dxos/echo';\nimport { type Resource } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\nimport { Board } from '#types';\n\nexport const translations = [\n {\n 'en-US': {\n [Type.getTypename(Board.Board)]: {\n 'typename.label': 'Board',\n 'typename.label_zero': 'Boards',\n 'typename.label_one': 'Board',\n 'typename.label_other': 'Boards',\n 'object-name.placeholder': 'New board',\n 'add-object.label': 'Add board',\n 'rename-object.label': 'Rename board',\n 'delete-object.label': 'Delete board',\n 'object-deleted.label': 'Board deleted',\n },\n [meta.id]: {\n 'plugin.name': 'Board',\n },\n },\n },\n] as const satisfies Resource[];\n"],
5
+ "mappings": ";;;AAIA,SAASA,YAAY;AAGrB,SAASC,YAAY;AACrB,SAASC,aAAa;AAEf,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACH,KAAKI,YAAYF,MAAMA,KAAK,CAAA,GAAI;QAC/B,kBAAkB;QAClB,uBAAuB;QACvB,sBAAsB;QACtB,wBAAwB;QACxB,2BAA2B;QAC3B,oBAAoB;QACpB,uBAAuB;QACvB,uBAAuB;QACvB,wBAAwB;MAC1B;MACA,CAACD,KAAKI,EAAE,GAAG;QACT,eAAe;MACjB;IACF;EACF;;",
6
+ "names": ["Type", "meta", "Board", "translations", "getTypename", "id"]
7
+ }
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  Board_exports
3
- } from "../chunk-Z6L4ZVCB.mjs";
3
+ } from "../chunk-CY5X6YV4.mjs";
4
+ import "../chunk-J5LGTIGS.mjs";
4
5
  export {
5
6
  Board_exports as Board
6
7
  };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -1,2 +1,4 @@
1
- export declare const BoardPlugin: import("@dxos/app-framework").PluginFactory<void>;
1
+ import { Plugin } from '@dxos/app-framework';
2
+ export declare const BoardPlugin: Plugin.PluginFactory<void>;
3
+ export default BoardPlugin;
2
4
  //# sourceMappingURL=BoardPlugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BoardPlugin.d.ts","sourceRoot":"","sources":["../../../src/BoardPlugin.tsx"],"names":[],"mappings":"AAeA,eAAO,MAAM,WAAW,mDAwCtB,CAAC"}
1
+ {"version":3,"file":"BoardPlugin.d.ts","sourceRoot":"","sources":["../../../src/BoardPlugin.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAY7C,eAAO,MAAM,WAAW,4BASvB,CAAC;eAEa,WAAW"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BoardPlugin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoardPlugin.test.d.ts","sourceRoot":"","sources":["../../../src/BoardPlugin.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { Capability } from '@dxos/app-framework';
3
+ import { SpaceCapabilities } from '@dxos/plugin-space';
4
+ declare const _default: (props: void) => Effect.Effect<Capability.Capability<Capability.InterfaceDef<Readonly<{
5
+ id: string;
6
+ createObject: import("@dxos/plugin-space").CreateObject;
7
+ inputSchema?: import("effect/Schema").Schema.AnyNoContext;
8
+ customPanel?: import("react").ComponentType<SpaceCapabilities.CreateObjectCustomPanelProps>;
9
+ }>>>, never, never>;
10
+ export default _default;
11
+ //# sourceMappingURL=create-object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-object.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/create-object.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,3 +1,9 @@
1
- export declare const IntentResolver: (props?: unknown) => Promise<() => Promise<import("@dxos/app-framework").AnyCapability[] | import("@dxos/app-framework").Capability<unknown>>>;
2
- export declare const ReactSurface: (props?: import("@dxos/app-framework").PluginContext | undefined) => Promise<() => Promise<import("@dxos/app-framework").Capability<import("@dxos/app-framework").InterfaceDef<import("@dxos/app-framework").Capabilities.ReactSurface>> | import("@dxos/app-framework").AnyCapability[]>>;
1
+ import { Capability } from '@dxos/app-framework';
2
+ export declare const CreateObject: Capability.LazyCapability<void, Capability.Capability<Capability.InterfaceDef<Readonly<{
3
+ id: string;
4
+ createObject: import("@dxos/plugin-space").CreateObject;
5
+ inputSchema?: import("effect/Schema").Schema.AnyNoContext;
6
+ customPanel?: import("react").ComponentType<import("@dxos/plugin-space").SpaceCapabilities.CreateObjectCustomPanelProps>;
7
+ }>>>, Error>;
8
+ export declare const ReactSurface: Capability.LazyCapability<void, Capability.Capability<Capability.InterfaceDef<import("@dxos/app-framework/Capabilities").ReactSurface>>, Error>;
3
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc,gJAA0C,CAAC;AACtE,eAAO,MAAM,YAAY,4RAAwC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,eAAO,MAAM,YAAY;;;;;YAAmE,CAAC;AAC7F,eAAO,MAAM,YAAY,iJAAmE,CAAC"}
@@ -1,4 +1,5 @@
1
- import { Capabilities, type PluginContext } from '@dxos/app-framework';
2
- declare const _default: (context: PluginContext) => import("@dxos/app-framework").Capability<import("@dxos/app-framework").InterfaceDef<Capabilities.ReactSurface>>;
1
+ import * as Effect from 'effect/Effect';
2
+ import { Capabilities, Capability } from '@dxos/app-framework';
3
+ declare const _default: (props: void) => Effect.Effect<Capability.Capability<Capability.InterfaceDef<Capabilities.ReactSurface>>, never, never>;
3
4
  export default _default;
4
5
  //# sourceMappingURL=react-surface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react-surface.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/react-surface.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAA8B,MAAM,qBAAqB,CAAC;yBAOnF,SAAS,aAAa;AAAtC,wBAQK"}
1
+ {"version":3,"file":"react-surface.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/react-surface.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,2 +1 @@
1
- export * from './BoardContainer';
2
1
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import { AppSurface } from '@dxos/app-toolkit/ui';
3
+ import { type Board as BoardType } from '#types';
4
+ export type BoardArticleProps = AppSurface.ObjectArticleProps<BoardType.Board>;
5
+ export declare const BoardArticle: ({ role, subject: board, attendableId }: BoardArticleProps) => React.JSX.Element;
6
+ //# sourceMappingURL=BoardArticle.d.ts.map