@dxos/plugin-kanban 0.8.4-main.bc674ce → 0.8.4-main.c351d160a8

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 (191) hide show
  1. package/dist/lib/browser/KanbanContainer-N532FS3F.mjs +300 -0
  2. package/dist/lib/browser/KanbanContainer-N532FS3F.mjs.map +7 -0
  3. package/dist/lib/browser/KanbanViewEditor-W7E4RAK2.mjs +66 -0
  4. package/dist/lib/browser/KanbanViewEditor-W7E4RAK2.mjs.map +7 -0
  5. package/dist/lib/browser/blueprint-definition-2NNRB2ZQ.mjs +17 -0
  6. package/dist/lib/browser/blueprint-definition-2NNRB2ZQ.mjs.map +7 -0
  7. package/dist/lib/browser/blueprints/index.mjs +3 -3
  8. package/dist/lib/browser/{chunk-L6N4ZDZ7.mjs → chunk-B6RIAQMI.mjs} +11 -17
  9. package/dist/lib/browser/chunk-B6RIAQMI.mjs.map +7 -0
  10. package/dist/lib/browser/chunk-PCKA5REX.mjs +385 -0
  11. package/dist/lib/browser/chunk-PCKA5REX.mjs.map +7 -0
  12. package/dist/lib/browser/chunk-Z2ZFDWCK.mjs +213 -0
  13. package/dist/lib/browser/chunk-Z2ZFDWCK.mjs.map +7 -0
  14. package/dist/lib/browser/index.mjs +35 -30
  15. package/dist/lib/browser/index.mjs.map +3 -3
  16. package/dist/lib/browser/meta.json +1 -1
  17. package/dist/lib/browser/{operation-resolver-UEJHX42A.mjs → operation-resolver-ZWJLPKQB.mjs} +7 -7
  18. package/dist/lib/browser/operation-resolver-ZWJLPKQB.mjs.map +7 -0
  19. package/dist/lib/browser/react-surface-OIP6KXQK.mjs +99 -0
  20. package/dist/lib/browser/react-surface-OIP6KXQK.mjs.map +7 -0
  21. package/dist/lib/browser/types/index.mjs +9 -3
  22. package/dist/lib/node-esm/KanbanContainer-DQ7XDXB4.mjs +301 -0
  23. package/dist/lib/node-esm/KanbanContainer-DQ7XDXB4.mjs.map +7 -0
  24. package/dist/lib/node-esm/KanbanViewEditor-JPV2II5P.mjs +67 -0
  25. package/dist/lib/node-esm/KanbanViewEditor-JPV2II5P.mjs.map +7 -0
  26. package/dist/lib/node-esm/{blueprint-definition-APJQFSHJ.mjs → blueprint-definition-5GWECQLZ.mjs} +6 -6
  27. package/dist/lib/node-esm/blueprint-definition-5GWECQLZ.mjs.map +7 -0
  28. package/dist/lib/node-esm/blueprints/index.mjs +3 -3
  29. package/dist/lib/node-esm/chunk-HL3BNZKP.mjs +214 -0
  30. package/dist/lib/node-esm/chunk-HL3BNZKP.mjs.map +7 -0
  31. package/dist/lib/node-esm/chunk-P4RSMGOS.mjs +386 -0
  32. package/dist/lib/node-esm/chunk-P4RSMGOS.mjs.map +7 -0
  33. package/dist/lib/node-esm/{chunk-ZHRMUKTF.mjs → chunk-SD555I65.mjs} +11 -16
  34. package/dist/lib/node-esm/chunk-SD555I65.mjs.map +7 -0
  35. package/dist/lib/node-esm/index.mjs +35 -30
  36. package/dist/lib/node-esm/index.mjs.map +3 -3
  37. package/dist/lib/node-esm/meta.json +1 -1
  38. package/dist/lib/node-esm/{operation-resolver-5RPWHZCF.mjs → operation-resolver-YJKEXUHT.mjs} +7 -7
  39. package/dist/lib/node-esm/operation-resolver-YJKEXUHT.mjs.map +7 -0
  40. package/dist/lib/node-esm/react-surface-ZBPEPHZO.mjs +100 -0
  41. package/dist/lib/node-esm/react-surface-ZBPEPHZO.mjs.map +7 -0
  42. package/dist/lib/node-esm/types/index.mjs +9 -3
  43. package/dist/types/src/KanbanPlugin.d.ts.map +1 -1
  44. package/dist/types/src/blueprints/index.d.ts +1 -1
  45. package/dist/types/src/blueprints/index.d.ts.map +1 -1
  46. package/dist/types/src/blueprints/kanban-blueprint.d.ts +3 -21
  47. package/dist/types/src/blueprints/kanban-blueprint.d.ts.map +1 -1
  48. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts +1 -1
  49. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +1 -1
  50. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +3 -6
  51. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -1
  52. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +1 -1
  53. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -1
  54. package/dist/types/src/capabilities/operation-resolver/index.d.ts +1 -1
  55. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -1
  56. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
  57. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
  58. package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
  59. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
  61. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
  62. package/dist/types/src/components/KanbanBoard/KanbanBoard.d.ts +59 -0
  63. package/dist/types/src/components/KanbanBoard/KanbanBoard.d.ts.map +1 -0
  64. package/dist/types/src/components/KanbanBoard/KanbanBoard.stories.d.ts +72 -0
  65. package/dist/types/src/components/KanbanBoard/KanbanBoard.stories.d.ts.map +1 -0
  66. package/dist/types/src/components/KanbanBoard/KanbanCard.d.ts +10 -0
  67. package/dist/types/src/components/KanbanBoard/KanbanCard.d.ts.map +1 -0
  68. package/dist/types/src/components/KanbanBoard/KanbanColumn.d.ts +9 -0
  69. package/dist/types/src/components/KanbanBoard/KanbanColumn.d.ts.map +1 -0
  70. package/dist/types/src/components/KanbanBoard/index.d.ts +2 -0
  71. package/dist/types/src/components/KanbanBoard/index.d.ts.map +1 -0
  72. package/dist/types/src/components/index.d.ts +1 -2
  73. package/dist/types/src/components/index.d.ts.map +1 -1
  74. package/dist/types/src/containers/KanbanContainer/KanbanContainer.d.ts +6 -0
  75. package/dist/types/src/containers/KanbanContainer/KanbanContainer.d.ts.map +1 -0
  76. package/dist/types/src/{components → containers/KanbanContainer}/KanbanContainer.stories.d.ts +18 -14
  77. package/dist/types/src/containers/KanbanContainer/KanbanContainer.stories.d.ts.map +1 -0
  78. package/dist/types/src/containers/KanbanContainer/index.d.ts +3 -0
  79. package/dist/types/src/containers/KanbanContainer/index.d.ts.map +1 -0
  80. package/dist/types/src/containers/KanbanViewEditor/KanbanViewEditor.d.ts +6 -0
  81. package/dist/types/src/containers/KanbanViewEditor/KanbanViewEditor.d.ts.map +1 -0
  82. package/dist/types/src/containers/KanbanViewEditor/index.d.ts +3 -0
  83. package/dist/types/src/containers/KanbanViewEditor/index.d.ts.map +1 -0
  84. package/dist/types/src/containers/index.d.ts +4 -0
  85. package/dist/types/src/containers/index.d.ts.map +1 -0
  86. package/dist/types/src/hooks/index.d.ts +6 -0
  87. package/dist/types/src/hooks/index.d.ts.map +1 -0
  88. package/dist/types/src/hooks/useEchoChangeCallback.d.ts +13 -0
  89. package/dist/types/src/hooks/useEchoChangeCallback.d.ts.map +1 -0
  90. package/dist/types/src/hooks/useKanbanBoardModel.d.ts +16 -0
  91. package/dist/types/src/hooks/useKanbanBoardModel.d.ts.map +1 -0
  92. package/dist/types/src/hooks/useKanbanBoardModel.test.d.ts +2 -0
  93. package/dist/types/src/hooks/useKanbanBoardModel.test.d.ts.map +1 -0
  94. package/dist/types/src/hooks/useKanbanColumnEventHandler.d.ts +22 -0
  95. package/dist/types/src/hooks/useKanbanColumnEventHandler.d.ts.map +1 -0
  96. package/dist/types/src/hooks/useKanbanItemEventHandler.d.ts +19 -0
  97. package/dist/types/src/hooks/useKanbanItemEventHandler.d.ts.map +1 -0
  98. package/dist/types/src/hooks/useProjectionModel.d.ts +15 -0
  99. package/dist/types/src/hooks/useProjectionModel.d.ts.map +1 -0
  100. package/dist/types/src/playwright/board-manager.d.ts +5 -0
  101. package/dist/types/src/playwright/board-manager.d.ts.map +1 -0
  102. package/dist/types/src/playwright/playwright.config.d.ts +3 -0
  103. package/dist/types/src/playwright/playwright.config.d.ts.map +1 -0
  104. package/dist/types/src/playwright/smoke.spec.d.ts +2 -0
  105. package/dist/types/src/playwright/smoke.spec.d.ts.map +1 -0
  106. package/dist/types/src/testing/KanbanCardTileSimple.d.ts +5 -0
  107. package/dist/types/src/testing/KanbanCardTileSimple.d.ts.map +1 -0
  108. package/dist/types/src/testing/index.d.ts +2 -0
  109. package/dist/types/src/testing/index.d.ts.map +1 -0
  110. package/dist/types/src/translations.d.ts +16 -0
  111. package/dist/types/src/translations.d.ts.map +1 -1
  112. package/dist/types/src/types/Kanban.d.ts +37 -0
  113. package/dist/types/src/types/Kanban.d.ts.map +1 -0
  114. package/dist/types/src/types/constants.d.ts +6 -0
  115. package/dist/types/src/types/constants.d.ts.map +1 -0
  116. package/dist/types/src/types/index.d.ts +2 -0
  117. package/dist/types/src/types/index.d.ts.map +1 -1
  118. package/dist/types/src/types/schema.d.ts +5 -5
  119. package/dist/types/src/types/schema.d.ts.map +1 -1
  120. package/dist/types/src/types/types.d.ts +28 -0
  121. package/dist/types/src/types/types.d.ts.map +1 -1
  122. package/dist/types/src/util/arrangement.d.ts +68 -0
  123. package/dist/types/src/util/arrangement.d.ts.map +1 -0
  124. package/dist/types/src/util/arrangement.test.d.ts +2 -0
  125. package/dist/types/src/util/arrangement.test.d.ts.map +1 -0
  126. package/dist/types/src/util/index.d.ts +2 -0
  127. package/dist/types/src/util/index.d.ts.map +1 -0
  128. package/dist/types/tsconfig.tsbuildinfo +1 -1
  129. package/package.json +47 -42
  130. package/src/KanbanPlugin.tsx +15 -15
  131. package/src/blueprints/index.ts +1 -1
  132. package/src/blueprints/kanban-blueprint.ts +14 -7
  133. package/src/capabilities/artifact-definition/artifact-definition.ts +8 -7
  134. package/src/capabilities/blueprint-definition/blueprint-definition.ts +6 -12
  135. package/src/capabilities/operation-resolver/operation-resolver.ts +5 -5
  136. package/src/capabilities/react-surface/react-surface.tsx +14 -14
  137. package/src/components/KanbanBoard/KanbanBoard.stories.tsx +142 -0
  138. package/src/components/KanbanBoard/KanbanBoard.tsx +183 -0
  139. package/src/components/KanbanBoard/KanbanCard.tsx +86 -0
  140. package/src/components/KanbanBoard/KanbanColumn.tsx +69 -0
  141. package/src/components/KanbanBoard/index.ts +5 -0
  142. package/src/components/index.ts +1 -2
  143. package/src/{components → containers/KanbanContainer}/KanbanContainer.stories.tsx +62 -85
  144. package/src/containers/KanbanContainer/KanbanContainer.tsx +87 -0
  145. package/src/containers/KanbanContainer/index.ts +7 -0
  146. package/src/{components → containers/KanbanViewEditor}/KanbanViewEditor.tsx +23 -19
  147. package/src/containers/KanbanViewEditor/index.ts +7 -0
  148. package/src/containers/index.ts +8 -0
  149. package/src/hooks/index.ts +9 -0
  150. package/src/hooks/useEchoChangeCallback.ts +30 -0
  151. package/src/hooks/useKanbanBoardModel.test.ts +235 -0
  152. package/src/hooks/useKanbanBoardModel.ts +143 -0
  153. package/src/hooks/useKanbanColumnEventHandler.ts +106 -0
  154. package/src/hooks/useKanbanItemEventHandler.ts +133 -0
  155. package/src/hooks/useProjectionModel.ts +58 -0
  156. package/src/meta.ts +1 -1
  157. package/src/playwright/board-manager.ts +13 -0
  158. package/src/playwright/playwright.config.ts +19 -0
  159. package/src/playwright/smoke.spec.ts +107 -0
  160. package/src/testing/KanbanCardTileSimple.tsx +76 -0
  161. package/src/testing/index.ts +5 -0
  162. package/src/translations.ts +9 -1
  163. package/src/types/Kanban.ts +71 -0
  164. package/src/types/constants.ts +9 -0
  165. package/src/types/index.ts +2 -0
  166. package/src/types/schema.ts +8 -9
  167. package/src/types/types.ts +35 -0
  168. package/src/util/arrangement.test.ts +208 -0
  169. package/src/util/arrangement.ts +167 -0
  170. package/src/util/index.ts +5 -0
  171. package/dist/lib/browser/blueprint-definition-T2544VMJ.mjs +0 -17
  172. package/dist/lib/browser/blueprint-definition-T2544VMJ.mjs.map +0 -7
  173. package/dist/lib/browser/chunk-L6N4ZDZ7.mjs.map +0 -7
  174. package/dist/lib/browser/chunk-XYQO4VL7.mjs +0 -150
  175. package/dist/lib/browser/chunk-XYQO4VL7.mjs.map +0 -7
  176. package/dist/lib/browser/operation-resolver-UEJHX42A.mjs.map +0 -7
  177. package/dist/lib/browser/react-surface-LFUJAPRL.mjs +0 -236
  178. package/dist/lib/browser/react-surface-LFUJAPRL.mjs.map +0 -7
  179. package/dist/lib/node-esm/blueprint-definition-APJQFSHJ.mjs.map +0 -7
  180. package/dist/lib/node-esm/chunk-NN6JMKIT.mjs +0 -152
  181. package/dist/lib/node-esm/chunk-NN6JMKIT.mjs.map +0 -7
  182. package/dist/lib/node-esm/chunk-ZHRMUKTF.mjs.map +0 -7
  183. package/dist/lib/node-esm/operation-resolver-5RPWHZCF.mjs.map +0 -7
  184. package/dist/lib/node-esm/react-surface-7TSGBRJL.mjs +0 -237
  185. package/dist/lib/node-esm/react-surface-7TSGBRJL.mjs.map +0 -7
  186. package/dist/types/src/components/KanbanContainer.d.ts +0 -6
  187. package/dist/types/src/components/KanbanContainer.d.ts.map +0 -1
  188. package/dist/types/src/components/KanbanContainer.stories.d.ts.map +0 -1
  189. package/dist/types/src/components/KanbanViewEditor.d.ts +0 -8
  190. package/dist/types/src/components/KanbanViewEditor.d.ts.map +0 -1
  191. package/src/components/KanbanContainer.tsx +0 -86
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  KanbanOperation,
3
3
  meta
4
- } from "./chunk-XYQO4VL7.mjs";
4
+ } from "./chunk-Z2ZFDWCK.mjs";
5
5
  import "./chunk-J5LGTIGS.mjs";
6
6
 
7
7
  // src/capabilities/operation-resolver/operation-resolver.ts
8
8
  import * as Effect from "effect/Effect";
9
- import { Capability, Common, UndoMapping } from "@dxos/app-framework";
9
+ import { Capabilities, Capability, UndoMapping } from "@dxos/app-framework";
10
10
  import { JsonSchema, Obj } from "@dxos/echo";
11
11
  import { invariant } from "@dxos/invariant";
12
12
  import { OperationResolver } from "@dxos/operation";
13
13
  import { ProjectionModel, createEchoChangeCallback, getTypenameFromQuery } from "@dxos/schema";
14
14
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-kanban/src/capabilities/operation-resolver/operation-resolver.ts";
15
15
  var operation_resolver_default = Capability.makeModule(() => Effect.succeed([
16
- Capability.contributes(Common.Capability.UndoMapping, [
16
+ Capability.contributes(Capabilities.UndoMapping, [
17
17
  UndoMapping.make({
18
18
  operation: KanbanOperation.DeleteCardField,
19
19
  inverse: KanbanOperation.RestoreCardField,
@@ -44,11 +44,11 @@ var operation_resolver_default = Capability.makeModule(() => Effect.succeed([
44
44
  ]
45
45
  })
46
46
  ]),
47
- Capability.contributes(Common.Capability.OperationResolver, [
47
+ Capability.contributes(Capabilities.OperationResolver, [
48
48
  OperationResolver.make({
49
49
  operation: KanbanOperation.DeleteCardField,
50
50
  handler: Effect.fnUntraced(function* ({ view, fieldId }) {
51
- const registry = yield* Capability.get(Common.Capability.AtomRegistry);
51
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
52
52
  const db = Obj.getDatabase(view);
53
53
  invariant(db, "Database not found", {
54
54
  F: __dxlog_file,
@@ -105,7 +105,7 @@ var operation_resolver_default = Capability.makeModule(() => Effect.succeed([
105
105
  OperationResolver.make({
106
106
  operation: KanbanOperation.RestoreCardField,
107
107
  handler: Effect.fnUntraced(function* ({ view, field, props, index }) {
108
- const registry = yield* Capability.get(Common.Capability.AtomRegistry);
108
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
109
109
  const db = Obj.getDatabase(view);
110
110
  invariant(db, "Database not found", {
111
111
  F: __dxlog_file,
@@ -159,4 +159,4 @@ var operation_resolver_default = Capability.makeModule(() => Effect.succeed([
159
159
  export {
160
160
  operation_resolver_default as default
161
161
  };
162
- //# sourceMappingURL=operation-resolver-UEJHX42A.mjs.map
162
+ //# sourceMappingURL=operation-resolver-ZWJLPKQB.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/operation-resolver/operation-resolver.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability, UndoMapping } from '@dxos/app-framework';\nimport { JsonSchema, Obj } from '@dxos/echo';\nimport { type EchoSchema } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { OperationResolver } from '@dxos/operation';\nimport { ProjectionModel, createEchoChangeCallback, getTypenameFromQuery } from '@dxos/schema';\n\nimport { meta } from '../../meta';\nimport { KanbanOperation } from '../../types';\n\nexport default Capability.makeModule(() =>\n Effect.succeed([\n Capability.contributes(Capabilities.UndoMapping, [\n UndoMapping.make({\n operation: KanbanOperation.DeleteCardField,\n inverse: KanbanOperation.RestoreCardField,\n deriveContext: (input, output) => ({\n view: input.view,\n field: output.field,\n props: output.props,\n index: output.index,\n }),\n message: ['card field deleted label', { ns: meta.id }],\n }),\n UndoMapping.make({\n operation: KanbanOperation.DeleteCard,\n inverse: KanbanOperation.RestoreCard,\n deriveContext: (_input, output) => ({\n card: output.card,\n }),\n message: ['card deleted label', { ns: meta.id }],\n }),\n ]),\n Capability.contributes(Capabilities.OperationResolver, [\n OperationResolver.make({\n operation: KanbanOperation.DeleteCardField,\n handler: Effect.fnUntraced(function* ({ view, fieldId }) {\n const registry = yield* Capability.get(Capabilities.AtomRegistry);\n const db = Obj.getDatabase(view);\n invariant(db, 'Database not found');\n const schema = yield* Effect.promise(() =>\n db.schemaRegistry\n .query({\n typename: getTypenameFromQuery(view.query.ast)!,\n location: ['database', 'runtime'],\n })\n .first(),\n );\n\n // Create projection with change callbacks that wrap in Obj.change().\n // Schema from registry is an EchoSchema at runtime.\n const projection = new ProjectionModel({\n registry,\n view,\n baseSchema: JsonSchema.toJsonSchema(schema),\n change: createEchoChangeCallback(view, schema as EchoSchema),\n });\n\n const result = projection.deleteFieldProjection(fieldId);\n\n // Return data needed for undo.\n return {\n field: result.deleted.field,\n props: result.deleted.props,\n index: result.index,\n };\n }),\n }),\n OperationResolver.make({\n operation: KanbanOperation.DeleteCard,\n handler: ({ card }) =>\n Effect.sync(() => {\n const db = Obj.getDatabase(card);\n invariant(db);\n db.remove(card);\n\n // Return data needed for undo.\n return { card };\n }),\n }),\n\n //\n // RestoreCardField (inverse of DeleteCardField)\n //\n OperationResolver.make({\n operation: KanbanOperation.RestoreCardField,\n handler: Effect.fnUntraced(function* ({ view, field, props, index }) {\n const registry = yield* Capability.get(Capabilities.AtomRegistry);\n const db = Obj.getDatabase(view);\n invariant(db, 'Database not found');\n const schema = yield* Effect.promise(() =>\n db.schemaRegistry\n .query({\n typename: getTypenameFromQuery(view.query.ast)!,\n location: ['database', 'runtime'],\n })\n .first(),\n );\n\n // Create projection with change callbacks that wrap in Obj.change().\n // Schema from registry is an EchoSchema at runtime.\n const projection = new ProjectionModel({\n registry,\n view,\n baseSchema: JsonSchema.toJsonSchema(schema),\n change: createEchoChangeCallback(view, schema as EchoSchema),\n });\n\n projection.setFieldProjection({ field, props }, index);\n }),\n }),\n\n //\n // RestoreCard (inverse of DeleteCard)\n //\n OperationResolver.make({\n operation: KanbanOperation.RestoreCard,\n handler: ({ card }) =>\n Effect.sync(() => {\n const db = Obj.getDatabase(card);\n invariant(db);\n db.add(card);\n }),\n }),\n ]),\n ]),\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["Effect", "Capabilities", "Capability", "UndoMapping", "JsonSchema", "Obj", "invariant", "OperationResolver", "ProjectionModel", "createEchoChangeCallback", "getTypenameFromQuery", "Capability", "makeModule", "succeed", "contributes", "Capabilities", "UndoMapping", "make", "operation", "KanbanOperation", "DeleteCardField", "inverse", "RestoreCardField", "deriveContext", "input", "output", "view", "field", "props", "index", "message", "ns", "meta", "id", "DeleteCard", "RestoreCard", "_input", "card", "OperationResolver", "handler", "fnUntraced", "fieldId", "registry", "get", "AtomRegistry", "db", "Obj", "getDatabase", "invariant", "schema", "promise", "schemaRegistry", "query", "typename", "getTypenameFromQuery", "ast", "location", "first", "projection", "ProjectionModel", "baseSchema", "JsonSchema", "toJsonSchema", "change", "createEchoChangeCallback", "result", "deleteFieldProjection", "deleted", "sync", "remove", "setFieldProjection", "add"]
7
+ }
@@ -0,0 +1,99 @@
1
+ import {
2
+ Kanban_exports,
3
+ PivotColumnAnnotationId,
4
+ meta
5
+ } from "./chunk-Z2ZFDWCK.mjs";
6
+ import "./chunk-J5LGTIGS.mjs";
7
+
8
+ // src/capabilities/react-surface/react-surface.tsx
9
+ import * as Effect from "effect/Effect";
10
+ import React, { useMemo } from "react";
11
+ import { Capabilities, Capability } from "@dxos/app-framework";
12
+ import { Surface } from "@dxos/app-framework/ui";
13
+ import { Database, JsonSchema, Obj } from "@dxos/echo";
14
+ import { findAnnotation } from "@dxos/effect";
15
+ import { SelectField, useFormValues } from "@dxos/react-ui-form";
16
+
17
+ // src/containers/index.ts
18
+ import { lazy } from "react";
19
+ var KanbanContainer = lazy(() => import("./KanbanContainer-N532FS3F.mjs"));
20
+ var KanbanViewEditor = lazy(() => import("./KanbanViewEditor-W7E4RAK2.mjs"));
21
+
22
+ // src/capabilities/react-surface/react-surface.tsx
23
+ var react_surface_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Capabilities.ReactSurface, [
24
+ Surface.create({
25
+ id: meta.id,
26
+ role: [
27
+ "article",
28
+ "section"
29
+ ],
30
+ filter: (data) => Obj.instanceOf(Kanban_exports.Kanban, data.subject),
31
+ component: ({ data, role }) => /* @__PURE__ */ React.createElement(KanbanContainer, {
32
+ role,
33
+ subject: data.subject
34
+ })
35
+ }),
36
+ Surface.create({
37
+ id: `${meta.id}.object-settings`,
38
+ role: "object-settings",
39
+ position: "hoist",
40
+ filter: (data) => Obj.instanceOf(Kanban_exports.Kanban, data.subject),
41
+ component: ({ data }) => /* @__PURE__ */ React.createElement(KanbanViewEditor, {
42
+ subject: data.subject
43
+ })
44
+ }),
45
+ Surface.create({
46
+ id: `${meta.id}.create-initial-schema-form-[pivot-column]`,
47
+ role: "form-input",
48
+ filter: (data) => {
49
+ const annotation = findAnnotation(data.schema.ast, PivotColumnAnnotationId);
50
+ return !!annotation;
51
+ },
52
+ component: ({ data: { target }, ...inputProps }) => {
53
+ const props = inputProps;
54
+ const db = Database.isDatabase(target) ? target : target && Obj.getDatabase(target);
55
+ if (!db) {
56
+ return null;
57
+ }
58
+ const { typename } = useFormValues("KanbanForm");
59
+ const [selectedSchema] = useMemo(() => db.schemaRegistry.query({
60
+ location: [
61
+ "database",
62
+ "runtime"
63
+ ],
64
+ typename
65
+ }).runSync(), [
66
+ db,
67
+ typename
68
+ ]);
69
+ const singleSelectColumns = useMemo(() => {
70
+ const properties = JsonSchema.toJsonSchema(selectedSchema).properties;
71
+ if (!properties) {
72
+ return [];
73
+ }
74
+ const columns = Object.entries(properties).reduce((acc, [key, value]) => {
75
+ if (typeof value === "object" && value?.format === "single-select") {
76
+ acc.push(key);
77
+ }
78
+ return acc;
79
+ }, []);
80
+ return columns;
81
+ }, [
82
+ selectedSchema
83
+ ]);
84
+ if (!typename) {
85
+ return null;
86
+ }
87
+ return /* @__PURE__ */ React.createElement(SelectField, {
88
+ ...props,
89
+ options: singleSelectColumns.map((column) => ({
90
+ value: column
91
+ }))
92
+ });
93
+ }
94
+ })
95
+ ])));
96
+ export {
97
+ react_surface_default as default
98
+ };
99
+ //# sourceMappingURL=react-surface-OIP6KXQK.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface/react-surface.tsx", "../../../src/containers/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport type * as Schema from 'effect/Schema';\nimport React, { useMemo } from 'react';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Surface } from '@dxos/app-framework/ui';\nimport { Database, JsonSchema, Obj } from '@dxos/echo';\nimport { type Collection } from '@dxos/echo';\nimport { findAnnotation } from '@dxos/effect';\nimport { type FormFieldComponentProps, SelectField, useFormValues } from '@dxos/react-ui-form';\n\nimport { KanbanContainer, KanbanViewEditor } from '../../containers';\nimport { meta } from '../../meta';\nimport { Kanban, PivotColumnAnnotationId } from '../../types';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactSurface, [\n Surface.create({\n id: meta.id,\n role: ['article', 'section'],\n filter: (data): data is { subject: Kanban.Kanban } => Obj.instanceOf(Kanban.Kanban, data.subject),\n component: ({ data, role }) => <KanbanContainer role={role} subject={data.subject} />,\n }),\n Surface.create({\n id: `${meta.id}.object-settings`,\n role: 'object-settings',\n position: 'hoist',\n filter: (data): data is { subject: Kanban.Kanban } => Obj.instanceOf(Kanban.Kanban, data.subject),\n component: ({ data }) => <KanbanViewEditor subject={data.subject} />,\n }),\n Surface.create({\n id: `${meta.id}.create-initial-schema-form-[pivot-column]`,\n role: 'form-input',\n filter: (\n data,\n ): data is {\n prop: string;\n schema: Schema.Schema<any>;\n target: Database.Database | Collection.Collection | undefined;\n } => {\n const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, PivotColumnAnnotationId);\n return !!annotation;\n },\n component: ({ data: { target }, ...inputProps }) => {\n const props = inputProps as any as FormFieldComponentProps;\n const db = Database.isDatabase(target) ? target : target && Obj.getDatabase(target);\n if (!db) {\n return null;\n }\n\n const { typename } = useFormValues('KanbanForm');\n const [selectedSchema] = useMemo(\n () => db.schemaRegistry.query({ location: ['database', 'runtime'], typename }).runSync(),\n [db, typename],\n );\n const singleSelectColumns = useMemo(() => {\n const properties = JsonSchema.toJsonSchema(selectedSchema).properties;\n if (!properties) {\n return [];\n }\n\n const columns = Object.entries(properties).reduce<string[]>((acc, [key, value]) => {\n if (typeof value === 'object' && value?.format === 'single-select') {\n acc.push(key);\n }\n return acc;\n }, []);\n\n return columns;\n }, [selectedSchema]);\n\n if (!typename) {\n return null;\n }\n\n return <SelectField {...props} options={singleSelectColumns.map((column) => ({ value: column }))} />;\n },\n }),\n ]),\n ),\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport const KanbanContainer: ComponentType<any> = lazy(() => import('./KanbanContainer'));\nexport const KanbanViewEditor: ComponentType<any> = lazy(() => import('./KanbanViewEditor'));\n"],
5
+ "mappings": ";;;;;;;;AAIA,YAAYA,YAAY;AAExB,OAAOC,SAASC,eAAe;AAE/B,SAASC,cAAcC,kBAAkB;AACzC,SAASC,eAAe;AACxB,SAASC,UAAUC,YAAYC,WAAW;AAE1C,SAASC,sBAAsB;AAC/B,SAAuCC,aAAaC,qBAAqB;;;ACTzE,SAA6BC,YAAY;AAElC,IAAMC,kBAAsCC,KAAK,MAAM,OAAO,gCAAA,CAAA;AAC9D,IAAMC,mBAAuCD,KAAK,MAAM,OAAO,iCAAA,CAAA;;;ADYtE,IAAA,wBAAeE,WAAWC,WAAW,MAC5BC,eACLF,WAAWG,YAAYC,aAAaC,cAAc;EAChDC,QAAQC,OAAO;IACbC,IAAIC,KAAKD;IACTE,MAAM;MAAC;MAAW;;IAClBC,QAAQ,CAACC,SAA6CC,IAAIC,WAAWC,eAAOA,QAAQH,KAAKI,OAAO;IAChGC,WAAW,CAAC,EAAEL,MAAMF,KAAI,MAAO,sBAAA,cAACQ,iBAAAA;MAAgBR;MAAYM,SAASJ,KAAKI;;EAC5E,CAAA;EACAV,QAAQC,OAAO;IACbC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNS,UAAU;IACVR,QAAQ,CAACC,SAA6CC,IAAIC,WAAWC,eAAOA,QAAQH,KAAKI,OAAO;IAChGC,WAAW,CAAC,EAAEL,KAAI,MAAO,sBAAA,cAACQ,kBAAAA;MAAiBJ,SAASJ,KAAKI;;EAC3D,CAAA;EACAV,QAAQC,OAAO;IACbC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CACNC,SAAAA;AAMA,YAAMS,aAAaC,eAAyBV,KAAKW,OAA6BC,KAAKC,uBAAAA;AACnF,aAAO,CAAC,CAACJ;IACX;IACAJ,WAAW,CAAC,EAAEL,MAAM,EAAEc,OAAM,GAAI,GAAGC,WAAAA,MAAY;AAC7C,YAAMC,QAAQD;AACd,YAAME,KAAKC,SAASC,WAAWL,MAAAA,IAAUA,SAASA,UAAUb,IAAImB,YAAYN,MAAAA;AAC5E,UAAI,CAACG,IAAI;AACP,eAAO;MACT;AAEA,YAAM,EAAEI,SAAQ,IAAKC,cAAc,YAAA;AACnC,YAAM,CAACC,cAAAA,IAAkBC,QACvB,MAAMP,GAAGQ,eAAeC,MAAM;QAAEC,UAAU;UAAC;UAAY;;QAAYN;MAAS,CAAA,EAAGO,QAAO,GACtF;QAACX;QAAII;OAAS;AAEhB,YAAMQ,sBAAsBL,QAAQ,MAAA;AAClC,cAAMM,aAAaC,WAAWC,aAAaT,cAAAA,EAAgBO;AAC3D,YAAI,CAACA,YAAY;AACf,iBAAO,CAAA;QACT;AAEA,cAAMG,UAAUC,OAAOC,QAAQL,UAAAA,EAAYM,OAAiB,CAACC,KAAK,CAACC,KAAKC,KAAAA,MAAM;AAC5E,cAAI,OAAOA,UAAU,YAAYA,OAAOC,WAAW,iBAAiB;AAClEH,gBAAII,KAAKH,GAAAA;UACX;AACA,iBAAOD;QACT,GAAG,CAAA,CAAE;AAEL,eAAOJ;MACT,GAAG;QAACV;OAAe;AAEnB,UAAI,CAACF,UAAU;AACb,eAAO;MACT;AAEA,aAAO,sBAAA,cAACqB,aAAAA;QAAa,GAAG1B;QAAO2B,SAASd,oBAAoBe,IAAI,CAACC,YAAY;UAAEN,OAAOM;QAAO,EAAA;;IAC/F;EACF,CAAA;CACD,CAAA,CAAA;",
6
+ "names": ["Effect", "React", "useMemo", "Capabilities", "Capability", "Surface", "Database", "JsonSchema", "Obj", "findAnnotation", "SelectField", "useFormValues", "lazy", "KanbanContainer", "lazy", "KanbanViewEditor", "Capability", "makeModule", "succeed", "contributes", "Capabilities", "ReactSurface", "Surface", "create", "id", "meta", "role", "filter", "data", "Obj", "instanceOf", "Kanban", "subject", "component", "KanbanContainer", "position", "KanbanViewEditor", "annotation", "findAnnotation", "schema", "ast", "PivotColumnAnnotationId", "target", "inputProps", "props", "db", "Database", "isDatabase", "getDatabase", "typename", "useFormValues", "selectedSchema", "useMemo", "schemaRegistry", "query", "location", "runSync", "singleSelectColumns", "properties", "JsonSchema", "toJsonSchema", "columns", "Object", "entries", "reduce", "acc", "key", "value", "format", "push", "SelectField", "options", "map", "column"]
7
+ }
@@ -1,14 +1,20 @@
1
1
  import {
2
2
  CreateKanbanSchema,
3
3
  KanbanOperation,
4
+ Kanban_exports,
4
5
  PivotColumnAnnotationId,
5
- SettingsSchema
6
- } from "../chunk-XYQO4VL7.mjs";
6
+ SettingsSchema,
7
+ UNCATEGORIZED_ATTRIBUTES,
8
+ UNCATEGORIZED_VALUE
9
+ } from "../chunk-Z2ZFDWCK.mjs";
7
10
  import "../chunk-J5LGTIGS.mjs";
8
11
  export {
9
12
  CreateKanbanSchema,
13
+ Kanban_exports as Kanban,
10
14
  KanbanOperation,
11
15
  PivotColumnAnnotationId,
12
- SettingsSchema
16
+ SettingsSchema,
17
+ UNCATEGORIZED_ATTRIBUTES,
18
+ UNCATEGORIZED_VALUE
13
19
  };
14
20
  //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,301 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ useEchoChangeCallback,
4
+ useKanbanBoardModel,
5
+ useKanbanColumnEventHandler,
6
+ useKanbanItemEventHandler,
7
+ useProjectionModel
8
+ } from "./chunk-P4RSMGOS.mjs";
9
+ import {
10
+ KanbanOperation,
11
+ UNCATEGORIZED_ATTRIBUTES,
12
+ UNCATEGORIZED_VALUE,
13
+ meta
14
+ } from "./chunk-HL3BNZKP.mjs";
15
+ import "./chunk-HSLMI22Q.mjs";
16
+
17
+ // src/containers/KanbanContainer/KanbanContainer.tsx
18
+ import { RegistryContext as RegistryContext2 } from "@effect-atom/atom-react";
19
+ import React4, { useCallback as useCallback3, useContext as useContext2, useMemo as useMemo3 } from "react";
20
+ import { useCapabilities, useOperationInvoker } from "@dxos/app-framework/ui";
21
+ import { AppCapabilities } from "@dxos/app-toolkit";
22
+ import { Filter, Obj as Obj3, Type } from "@dxos/echo";
23
+ import { AtomQuery } from "@dxos/echo-atom";
24
+ import { useObject, useSchema } from "@dxos/react-client/echo";
25
+ import { Panel } from "@dxos/react-ui";
26
+ import { getTypenameFromQuery } from "@dxos/schema";
27
+
28
+ // src/components/KanbanBoard/KanbanBoard.tsx
29
+ import { RegistryContext } from "@effect-atom/atom-react";
30
+ import { createContext } from "@radix-ui/react-context";
31
+ import React3, { useCallback as useCallback2, useContext, useMemo as useMemo2 } from "react";
32
+ import { Obj as Obj2 } from "@dxos/echo";
33
+ import { useTranslation as useTranslation2 } from "@dxos/react-ui";
34
+ import { Board as Board2, useBoard as useBoard3 } from "@dxos/react-ui-mosaic";
35
+
36
+ // src/components/KanbanBoard/KanbanCard.tsx
37
+ import React, { forwardRef, useCallback, useMemo, useState } from "react";
38
+ import { Surface } from "@dxos/app-framework/ui";
39
+ import { useObjectMenuItems } from "@dxos/app-toolkit/ui";
40
+ import { Obj } from "@dxos/echo";
41
+ import { Card, Toolbar, useTranslation } from "@dxos/react-ui";
42
+ import { Menu, createMenuAction } from "@dxos/react-ui-menu";
43
+ import { Focus, Mosaic, useBoard } from "@dxos/react-ui-mosaic";
44
+ var KANBAN_CARD_TILE_NAME = "KanbanBoard.Card";
45
+ var KanbanCard = /* @__PURE__ */ forwardRef(({ data, location, debug }, forwardedRef) => {
46
+ const { t } = useTranslation(meta.id);
47
+ const { model } = useBoard(KANBAN_CARD_TILE_NAME);
48
+ const { projection, onCardRemove } = useKanbanBoard(KANBAN_CARD_TILE_NAME);
49
+ const [dragHandle, setDragHandle] = useState(null);
50
+ const dragHandleRef = useCallback((el) => setDragHandle(el), []);
51
+ const objectMenuItems = useObjectMenuItems(data);
52
+ const menuItems = useMemo(() => [
53
+ ...objectMenuItems,
54
+ ...onCardRemove ? [
55
+ createMenuAction("remove", () => onCardRemove(data), {
56
+ label: t("remove card label"),
57
+ icon: "ph--trash--regular"
58
+ })
59
+ ] : []
60
+ ], [
61
+ objectMenuItems,
62
+ onCardRemove,
63
+ data,
64
+ t
65
+ ]);
66
+ return /* @__PURE__ */ React.createElement(Mosaic.Tile, {
67
+ asChild: true,
68
+ id: model.getItemId(data),
69
+ data,
70
+ location,
71
+ debug,
72
+ dragHandle
73
+ }, /* @__PURE__ */ React.createElement(Focus.Group, {
74
+ asChild: true
75
+ }, /* @__PURE__ */ React.createElement(Menu.Root, null, /* @__PURE__ */ React.createElement(Card.Root, {
76
+ ref: forwardedRef,
77
+ "data-testid": "board-item"
78
+ }, /* @__PURE__ */ React.createElement(Card.Toolbar, null, /* @__PURE__ */ React.createElement(Card.DragHandle, {
79
+ ref: dragHandleRef
80
+ }), /* @__PURE__ */ React.createElement(Card.Title, null, Obj.getLabel(data)), /* @__PURE__ */ React.createElement(Menu.Trigger, {
81
+ asChild: true,
82
+ disabled: !menuItems?.length
83
+ }, /* @__PURE__ */ React.createElement(Toolbar.IconButton, {
84
+ iconOnly: true,
85
+ variant: "ghost",
86
+ icon: "ph--dots-three-vertical--regular",
87
+ label: t("action menu label")
88
+ })), /* @__PURE__ */ React.createElement(Menu.Content, {
89
+ items: menuItems
90
+ })), /* @__PURE__ */ React.createElement(Card.Content, null, projection && /* @__PURE__ */ React.createElement(Surface.Surface, {
91
+ role: "card--content",
92
+ limit: 1,
93
+ data: {
94
+ subject: data,
95
+ projection
96
+ }
97
+ }))))));
98
+ });
99
+ KanbanCard.displayName = KANBAN_CARD_TILE_NAME;
100
+
101
+ // src/components/KanbanBoard/KanbanColumn.tsx
102
+ import React2, { forwardRef as forwardRef2, useRef } from "react";
103
+ import { Board, useBoard as useBoard2 } from "@dxos/react-ui-mosaic";
104
+ var KANBAN_COLUMN_NAME = "KanbanBoard.Column";
105
+ var KanbanColumn = /* @__PURE__ */ forwardRef2(({ data: column, location, debug }, forwardedRef) => {
106
+ const { model } = useBoard2(KANBAN_COLUMN_NAME);
107
+ const { columnFieldPath, change, onCardAdd, getPivotAttributes, itemTile } = useKanbanBoard(KANBAN_COLUMN_NAME);
108
+ const { title } = getPivotAttributes(column.columnValue);
109
+ const uncategorized = column.columnValue === UNCATEGORIZED_VALUE;
110
+ const dragHandleRef = useRef(null);
111
+ const eventHandler = useKanbanItemEventHandler({
112
+ column,
113
+ columnFieldPath,
114
+ model,
115
+ change
116
+ });
117
+ return /* @__PURE__ */ React2.createElement(Board.Column.Root, {
118
+ data: column,
119
+ location,
120
+ classNames: "grid grid-rows-[var(--dx-rail-action)_1fr_var(--dx-rail-action)]",
121
+ debug,
122
+ dragHandleRef,
123
+ ref: forwardedRef
124
+ }, uncategorized ? /* @__PURE__ */ React2.createElement("div", {
125
+ className: "border-b border-separator p-2",
126
+ "data-testid": "board-column-header"
127
+ }, /* @__PURE__ */ React2.createElement("span", {
128
+ className: "font-medium"
129
+ }, title)) : /* @__PURE__ */ React2.createElement(Board.Column.Header, {
130
+ label: title,
131
+ dragHandleRef
132
+ }), /* @__PURE__ */ React2.createElement(Board.Column.Body, {
133
+ data: column,
134
+ eventHandler,
135
+ Tile: itemTile
136
+ }), onCardAdd && /* @__PURE__ */ React2.createElement(Board.Column.Footer, {
137
+ onAdd: () => onCardAdd(column.columnValue === UNCATEGORIZED_VALUE ? void 0 : column.columnValue)
138
+ }));
139
+ });
140
+ KanbanColumn.displayName = KANBAN_COLUMN_NAME;
141
+
142
+ // src/components/KanbanBoard/KanbanBoard.tsx
143
+ var KANBAN_BOARD_NAME = "KanbanBoard.Context";
144
+ var [KanbanBoardContext, useKanbanBoard] = createContext(KANBAN_BOARD_NAME, {
145
+ kanbanId: "never",
146
+ projection: void 0,
147
+ columnFieldPath: void 0,
148
+ change: {
149
+ kanban: () => {
150
+ },
151
+ setItemField: () => {
152
+ }
153
+ },
154
+ pivotFieldId: void 0,
155
+ getPivotAttributes: (id) => id === UNCATEGORIZED_VALUE ? UNCATEGORIZED_ATTRIBUTES : {
156
+ title: id,
157
+ color: "neutral"
158
+ },
159
+ itemTile: () => null
160
+ });
161
+ var KANBAN_BOARD_ROOT = "KanbanBoard.Root";
162
+ var KanbanBoardRoot = ({ children, change, itemTile = KanbanCard, kanban, projection, items, onCardAdd, onCardRemove }) => {
163
+ const registry = useContext(RegistryContext);
164
+ const { t } = useTranslation2(meta.id);
165
+ const model = useKanbanBoardModel(kanban, projection, items, registry);
166
+ const columns = model?.getColumns?.() ?? [];
167
+ const view = kanban?.view?.target;
168
+ const pivotFieldId = view?.projection?.pivotFieldId;
169
+ const columnFieldPath = useMemo2(() => {
170
+ if (pivotFieldId === void 0 || !projection) {
171
+ return void 0;
172
+ }
173
+ return projection.tryGetFieldProjection(pivotFieldId)?.props.property;
174
+ }, [
175
+ projection,
176
+ pivotFieldId
177
+ ]);
178
+ const getPivotAttributes = useCallback2((columnValue) => {
179
+ if (columnValue === UNCATEGORIZED_VALUE) {
180
+ return UNCATEGORIZED_ATTRIBUTES;
181
+ }
182
+ const options = projection?.tryGetFieldProjection(pivotFieldId ?? "")?.props.options ?? [];
183
+ const option = options.find((option2) => option2.id === columnValue);
184
+ return option ?? {
185
+ title: columnValue,
186
+ color: "neutral"
187
+ };
188
+ }, [
189
+ projection,
190
+ pivotFieldId
191
+ ]);
192
+ if (columns.length === 0) {
193
+ return /* @__PURE__ */ React3.createElement("div", {
194
+ className: "flex flex-1 items-center justify-center p-8 text-center text-description"
195
+ }, t("select pivot placeholder"));
196
+ }
197
+ return /* @__PURE__ */ React3.createElement(KanbanBoardContext, {
198
+ kanbanId: Obj2.getDXN(kanban).toString(),
199
+ projection,
200
+ columnFieldPath,
201
+ pivotFieldId,
202
+ getPivotAttributes,
203
+ itemTile,
204
+ change,
205
+ onCardAdd,
206
+ onCardRemove
207
+ }, /* @__PURE__ */ React3.createElement(Board2.Root, {
208
+ model
209
+ }, children));
210
+ };
211
+ KanbanBoardRoot.displayName = KANBAN_BOARD_ROOT;
212
+ var KANBAN_BOARD_CONTENT = "KanbanBoard.Content";
213
+ var KanbanBoardContent = (props) => {
214
+ const { model } = useBoard3(KANBAN_BOARD_CONTENT);
215
+ const { kanbanId, projection, pivotFieldId, change } = useKanbanBoard(KANBAN_BOARD_CONTENT);
216
+ const columnEventHandler = useKanbanColumnEventHandler({
217
+ id: `${kanbanId}-columns`,
218
+ model,
219
+ projection: projection ?? void 0,
220
+ pivotFieldId: pivotFieldId ?? void 0,
221
+ change
222
+ });
223
+ return /* @__PURE__ */ React3.createElement(Board2.Content, {
224
+ id: kanbanId,
225
+ eventHandler: columnEventHandler,
226
+ Tile: KanbanColumn
227
+ });
228
+ };
229
+ KanbanBoardContent.displayName = KANBAN_BOARD_CONTENT;
230
+ var KanbanBoard = {
231
+ Root: KanbanBoardRoot,
232
+ Content: KanbanBoardContent,
233
+ Column: KanbanColumn,
234
+ Card: KanbanCard
235
+ };
236
+
237
+ // src/containers/KanbanContainer/KanbanContainer.tsx
238
+ var KanbanContainer = ({ role, subject: object }) => {
239
+ const registry = useContext2(RegistryContext2);
240
+ const schemas = useCapabilities(AppCapabilities.Schema);
241
+ const db = Obj3.getDatabase(object);
242
+ const { invokePromise } = useOperationInvoker();
243
+ const [view] = useObject(object.view);
244
+ const typename = view?.query ? getTypenameFromQuery(view.query.ast) : void 0;
245
+ const schemaFromDb = useSchema(db, typename);
246
+ const cardSchema = useMemo3(() => schemaFromDb ?? schemas.flat().find((schema) => Type.getTypename(schema) === typename), [
247
+ schemaFromDb,
248
+ schemas,
249
+ typename
250
+ ]);
251
+ const items = useMemo3(() => db ? AtomQuery.make(db, cardSchema ? Filter.type(cardSchema) : Filter.nothing()) : null, [
252
+ db,
253
+ cardSchema
254
+ ]);
255
+ const projection = useProjectionModel(cardSchema, object, registry);
256
+ const change = useEchoChangeCallback(object);
257
+ const pivotFieldId = view?.projection?.pivotFieldId;
258
+ const columnFieldPath = projection && pivotFieldId ? projection.tryGetFieldProjection(pivotFieldId)?.props.property : void 0;
259
+ const handleCardAdd = useCallback3((columnValue) => {
260
+ if (db && cardSchema && columnFieldPath) {
261
+ const card = Obj3.make(cardSchema, {
262
+ [columnFieldPath]: columnValue
263
+ });
264
+ db.add(card);
265
+ return card.id;
266
+ }
267
+ }, [
268
+ db,
269
+ cardSchema,
270
+ columnFieldPath
271
+ ]);
272
+ const handleCardRemove = useCallback3((card) => {
273
+ void invokePromise(KanbanOperation.DeleteCard, {
274
+ card
275
+ });
276
+ }, [
277
+ invokePromise
278
+ ]);
279
+ if (!object || !db || !items || !projection || !change) {
280
+ return null;
281
+ }
282
+ return /* @__PURE__ */ React4.createElement(Panel.Root, {
283
+ role
284
+ }, /* @__PURE__ */ React4.createElement(KanbanBoard.Root, {
285
+ kanban: object,
286
+ projection,
287
+ items,
288
+ change,
289
+ onCardAdd: handleCardAdd,
290
+ onCardRemove: handleCardRemove
291
+ }, /* @__PURE__ */ React4.createElement(Panel.Content, {
292
+ asChild: true
293
+ }, /* @__PURE__ */ React4.createElement(KanbanBoard.Content, null))));
294
+ };
295
+
296
+ // src/containers/KanbanContainer/index.ts
297
+ var KanbanContainer_default = KanbanContainer;
298
+ export {
299
+ KanbanContainer_default as default
300
+ };
301
+ //# sourceMappingURL=KanbanContainer-DQ7XDXB4.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/KanbanContainer/KanbanContainer.tsx", "../../../src/components/KanbanBoard/KanbanBoard.tsx", "../../../src/components/KanbanBoard/KanbanCard.tsx", "../../../src/components/KanbanBoard/KanbanColumn.tsx", "../../../src/containers/KanbanContainer/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { RegistryContext } from '@effect-atom/atom-react';\nimport React, { useCallback, useContext, useMemo } from 'react';\n\nimport { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { Filter, Obj, Type } from '@dxos/echo';\nimport { AtomQuery } from '@dxos/echo-atom';\nimport { useObject, useSchema } from '@dxos/react-client/echo';\nimport { Panel } from '@dxos/react-ui';\nimport { getTypenameFromQuery } from '@dxos/schema';\n\nimport { KanbanBoard } from '../../components';\nimport { useEchoChangeCallback, useProjectionModel } from '../../hooks';\nimport { type Kanban, KanbanOperation } from '../../types';\n\nexport type KanbanContainerProps = SurfaceComponentProps<Kanban.Kanban>;\n\nexport const KanbanContainer = ({ role, subject: object }: KanbanContainerProps) => {\n const registry = useContext(RegistryContext);\n const schemas = useCapabilities(AppCapabilities.Schema);\n const db = Obj.getDatabase(object);\n const { invokePromise } = useOperationInvoker();\n const [view] = useObject(object.view);\n const typename = view?.query ? getTypenameFromQuery(view.query.ast) : undefined;\n\n const schemaFromDb = useSchema(db, typename);\n const cardSchema = useMemo(\n () => schemaFromDb ?? schemas.flat().find((schema) => Type.getTypename(schema) === typename),\n [schemaFromDb, schemas, typename],\n );\n\n const items = useMemo(\n () => (db ? AtomQuery.make(db, cardSchema ? Filter.type(cardSchema) : Filter.nothing()) : null),\n [db, cardSchema],\n );\n\n const projection = useProjectionModel(cardSchema, object, registry);\n const change = useEchoChangeCallback(object);\n\n const pivotFieldId = view?.projection?.pivotFieldId;\n const columnFieldPath =\n projection && pivotFieldId ? projection.tryGetFieldProjection(pivotFieldId)?.props.property : undefined;\n\n const handleCardAdd = useCallback(\n (columnValue: string | undefined) => {\n if (db && cardSchema && columnFieldPath) {\n const card = Obj.make(cardSchema, { [columnFieldPath]: columnValue });\n db.add(card);\n return card.id;\n }\n },\n [db, cardSchema, columnFieldPath],\n );\n\n const handleCardRemove = useCallback(\n (card: { id: string }) => {\n void invokePromise(KanbanOperation.DeleteCard, { card });\n },\n [invokePromise],\n );\n\n if (!object || !db || !items || !projection || !change) {\n return null;\n }\n\n return (\n <Panel.Root role={role}>\n <KanbanBoard.Root\n kanban={object}\n projection={projection}\n items={items}\n change={change}\n onCardAdd={handleCardAdd}\n onCardRemove={handleCardRemove}\n >\n <Panel.Content asChild>\n <KanbanBoard.Content />\n </Panel.Content>\n </KanbanBoard.Root>\n </Panel.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom, RegistryContext } from '@effect-atom/atom-react';\nimport { createContext } from '@radix-ui/react-context';\nimport React, {\n type ComponentPropsWithoutRef,\n type ComponentType,\n type PropsWithChildren,\n useCallback,\n useContext,\n useMemo,\n} from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Board, useBoard } from '@dxos/react-ui-mosaic';\nimport type { ProjectionModel } from '@dxos/schema';\n\nimport { useKanbanBoardModel, useKanbanColumnEventHandler } from '../../hooks';\nimport { meta } from '../../meta';\nimport { type Kanban, type KanbanChangeCallback, UNCATEGORIZED_ATTRIBUTES, UNCATEGORIZED_VALUE } from '../../types';\n\nimport { KanbanCard, type KanbanCardProps } from './KanbanCard';\nimport { KanbanColumn, type KanbanColumnProps } from './KanbanColumn';\n\n// TODO(burdon): Rename Kanban.\n\n//\n// Context\n//\n\nconst KANBAN_BOARD_NAME = 'KanbanBoard.Context';\n\n/**\n * Context value for the Kanban board.\n * Items are Echo objects (Obj.Unknown).\n */\ntype KanbanBoardContextValue = {\n kanbanId: string;\n projection: ProjectionModel | undefined;\n columnFieldPath: string | undefined;\n change: KanbanChangeCallback<Obj.Unknown>;\n pivotFieldId: string | undefined;\n getPivotAttributes: (columnValue: string) => { title: string; color: string };\n itemTile?: ComponentType<KanbanCardProps>; // TODO(burdon): Prop.\n onCardAdd?: (columnValue: string | undefined) => string | undefined;\n onCardRemove?: (card: Obj.Unknown) => void;\n};\n\nconst [KanbanBoardContext, useKanbanBoard] = createContext<KanbanBoardContextValue>(KANBAN_BOARD_NAME, {\n kanbanId: 'never',\n projection: undefined,\n columnFieldPath: undefined,\n change: { kanban: () => {}, setItemField: () => {} },\n pivotFieldId: undefined,\n getPivotAttributes: (id: string) =>\n id === UNCATEGORIZED_VALUE ? UNCATEGORIZED_ATTRIBUTES : { title: id, color: 'neutral' },\n itemTile: (() => null) as ComponentType<KanbanCardProps>,\n});\n\n//\n// Root\n//\n\nconst KANBAN_BOARD_ROOT = 'KanbanBoard.Root';\n\ntype KanbanBoardRootProps = PropsWithChildren<\n Pick<KanbanBoardContextValue, 'change' | 'itemTile'> & {\n kanban: Kanban.Kanban;\n /** Required when providing context; Root derives columnFieldPath, pivotFieldId, getPivotAttributes from kanban + projection. */\n projection: ProjectionModel;\n /** Atom of items (e.g. from AtomQuery for DB, or Atom.make([]) for in-memory). */\n items: Atom.Atom<Obj.Unknown[]>;\n onCardAdd?: (columnValue: string | undefined) => string | undefined;\n onCardRemove?: (card: Obj.Unknown) => void;\n } & ComponentPropsWithoutRef<'div'>\n>;\n\nexport const KanbanBoardRoot = ({\n children,\n change,\n itemTile = KanbanCard,\n kanban,\n projection,\n items,\n onCardAdd,\n onCardRemove,\n}: KanbanBoardRootProps) => {\n const registry = useContext(RegistryContext);\n const { t } = useTranslation(meta.id);\n const model = useKanbanBoardModel(kanban, projection, items, registry);\n const columns = model?.getColumns?.() ?? [];\n const view = kanban?.view?.target;\n const pivotFieldId = view?.projection?.pivotFieldId;\n const columnFieldPath = useMemo(() => {\n if (pivotFieldId === undefined || !projection) {\n return undefined;\n }\n\n return projection.tryGetFieldProjection(pivotFieldId)?.props.property;\n }, [projection, pivotFieldId]);\n\n const getPivotAttributes = useCallback<KanbanBoardContextValue['getPivotAttributes']>(\n (columnValue) => {\n if (columnValue === UNCATEGORIZED_VALUE) {\n return UNCATEGORIZED_ATTRIBUTES;\n }\n\n const options = projection?.tryGetFieldProjection(pivotFieldId ?? '')?.props.options ?? [];\n const option = options.find((option) => option.id === columnValue);\n return option ?? ({ title: columnValue, color: 'neutral' } as const);\n },\n [projection, pivotFieldId],\n );\n\n if (columns.length === 0) {\n return (\n <div className='flex flex-1 items-center justify-center p-8 text-center text-description'>\n {t('select pivot placeholder')}\n </div>\n );\n }\n\n return (\n <KanbanBoardContext\n kanbanId={Obj.getDXN(kanban).toString()}\n projection={projection}\n columnFieldPath={columnFieldPath}\n pivotFieldId={pivotFieldId}\n getPivotAttributes={getPivotAttributes}\n itemTile={itemTile}\n change={change}\n onCardAdd={onCardAdd}\n onCardRemove={onCardRemove}\n >\n <Board.Root model={model}>{children}</Board.Root>\n </KanbanBoardContext>\n );\n};\n\nKanbanBoardRoot.displayName = KANBAN_BOARD_ROOT;\n\n//\n// KanbanBoardContent\n//\n\nconst KANBAN_BOARD_CONTENT = 'KanbanBoard.Content';\n\ntype KanbanBoardContentProps = {};\n\nexport const KanbanBoardContent = (props: KanbanBoardContentProps) => {\n const { model } = useBoard(KANBAN_BOARD_CONTENT);\n const { kanbanId, projection, pivotFieldId, change } = useKanbanBoard(KANBAN_BOARD_CONTENT);\n\n const columnEventHandler = useKanbanColumnEventHandler({\n id: `${kanbanId}-columns`,\n model,\n projection: projection ?? undefined,\n pivotFieldId: pivotFieldId ?? undefined,\n change,\n });\n\n return <Board.Content id={kanbanId} eventHandler={columnEventHandler} Tile={KanbanColumn} />;\n};\n\nKanbanBoardContent.displayName = KANBAN_BOARD_CONTENT;\n\n//\n// KanbanBoard\n//\n\nexport const KanbanBoard = {\n Root: KanbanBoardRoot,\n Content: KanbanBoardContent,\n Column: KanbanColumn,\n Card: KanbanCard,\n};\n\nexport { useKanbanBoard };\n\nexport type { KanbanBoardRootProps as KanbanBoardProps, KanbanCardProps, KanbanColumnProps };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef, useCallback, useMemo, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { useObjectMenuItems } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { Card, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { Menu, createMenuAction } from '@dxos/react-ui-menu';\nimport { Focus, Mosaic, type MosaicTileProps, useBoard } from '@dxos/react-ui-mosaic';\n\nimport { meta } from '../../meta';\n\nimport { useKanbanBoard } from './KanbanBoard';\n\nconst KANBAN_CARD_TILE_NAME = 'KanbanBoard.Card';\n\nexport type KanbanCardProps = Pick<MosaicTileProps<Obj.Unknown>, 'location' | 'data' | 'debug'>;\n\n/**\n * Mosaic Tile for Kanban card.\n * Uses Surface for content; requires plugin manager context.\n */\nexport const KanbanCard = forwardRef<HTMLDivElement, KanbanCardProps>(({ data, location, debug }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n const { model } = useBoard(KANBAN_CARD_TILE_NAME);\n const { projection, onCardRemove } = useKanbanBoard(KANBAN_CARD_TILE_NAME);\n const [dragHandle, setDragHandle] = useState<HTMLButtonElement | null>(null);\n const dragHandleRef = useCallback((el: HTMLButtonElement | null) => setDragHandle(el), []);\n\n const objectMenuItems = useObjectMenuItems(data);\n\n const menuItems = useMemo(\n () => [\n ...objectMenuItems,\n ...(onCardRemove\n ? [\n createMenuAction('remove', () => onCardRemove(data), {\n label: t('remove card label'),\n icon: 'ph--trash--regular',\n }),\n ]\n : []),\n ],\n [objectMenuItems, onCardRemove, data, t],\n );\n\n return (\n <Mosaic.Tile\n asChild\n id={model.getItemId(data)}\n data={data}\n location={location}\n debug={debug}\n dragHandle={dragHandle}\n >\n <Focus.Group asChild>\n <Menu.Root>\n <Card.Root ref={forwardedRef} data-testid='board-item'>\n <Card.Toolbar>\n <Card.DragHandle ref={dragHandleRef} />\n <Card.Title>{Obj.getLabel(data)}</Card.Title>\n {/* TODO(wittjosiah): Reconcile with Card.Menu. */}\n <Menu.Trigger asChild disabled={!menuItems?.length}>\n <Toolbar.IconButton\n iconOnly\n variant='ghost'\n icon='ph--dots-three-vertical--regular'\n label={t('action menu label')}\n />\n </Menu.Trigger>\n <Menu.Content items={menuItems} />\n </Card.Toolbar>\n <Card.Content>\n {projection && <Surface.Surface role='card--content' limit={1} data={{ subject: data, projection }} />}\n </Card.Content>\n </Card.Root>\n </Menu.Root>\n </Focus.Group>\n </Mosaic.Tile>\n );\n});\n\nKanbanCard.displayName = KANBAN_CARD_TILE_NAME;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef, useRef } from 'react';\n\nimport type { Obj } from '@dxos/echo';\nimport { Board, type MosaicTileProps, useBoard } from '@dxos/react-ui-mosaic';\n\nimport { useKanbanItemEventHandler } from '../../hooks';\nimport { type ColumnStructure, UNCATEGORIZED_VALUE } from '../../types';\n\nimport { useKanbanBoard } from './KanbanBoard';\n\nconst KANBAN_COLUMN_NAME = 'KanbanBoard.Column';\n\nexport type KanbanColumnProps = Pick<MosaicTileProps<ColumnStructure>, 'location' | 'data' | 'debug'>;\n\n/**\n * Mosaic Tile for Kanban column.\n */\nexport const KanbanColumn = forwardRef<HTMLDivElement, KanbanColumnProps>(\n ({ data: column, location, debug }, forwardedRef) => {\n const { model } = useBoard<ColumnStructure, Obj.Unknown>(KANBAN_COLUMN_NAME);\n const { columnFieldPath, change, onCardAdd, getPivotAttributes, itemTile } = useKanbanBoard(KANBAN_COLUMN_NAME);\n\n const { title } = getPivotAttributes(column.columnValue);\n const uncategorized = column.columnValue === UNCATEGORIZED_VALUE;\n const dragHandleRef = useRef<HTMLButtonElement | null>(null);\n\n const eventHandler = useKanbanItemEventHandler({\n column,\n columnFieldPath,\n model,\n change,\n });\n\n return (\n <Board.Column.Root\n data={column}\n location={location}\n classNames='grid grid-rows-[var(--dx-rail-action)_1fr_var(--dx-rail-action)]'\n debug={debug}\n dragHandleRef={dragHandleRef}\n ref={forwardedRef}\n >\n {uncategorized ? (\n <div className='border-b border-separator p-2' data-testid='board-column-header'>\n <span className='font-medium'>{title}</span>\n </div>\n ) : (\n <Board.Column.Header label={title} dragHandleRef={dragHandleRef as React.RefObject<HTMLButtonElement>} />\n )}\n <Board.Column.Body\n data={column}\n eventHandler={eventHandler}\n Tile={itemTile as React.FC<MosaicTileProps<Obj.Unknown>>}\n />\n {onCardAdd && (\n <Board.Column.Footer\n onAdd={() => onCardAdd(column.columnValue === UNCATEGORIZED_VALUE ? undefined : column.columnValue)}\n />\n )}\n </Board.Column.Root>\n );\n },\n);\n\nKanbanColumn.displayName = KANBAN_COLUMN_NAME;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { KanbanContainer } from './KanbanContainer';\n\nexport default KanbanContainer;\n"],
5
+ "mappings": "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",
6
+ "names": ["RegistryContext", "React", "useCallback", "useContext", "useMemo", "useCapabilities", "useOperationInvoker", "AppCapabilities", "Filter", "Obj", "Type", "AtomQuery", "useObject", "useSchema", "Panel", "getTypenameFromQuery", "RegistryContext", "createContext", "React", "useCallback", "useContext", "useMemo", "Obj", "useTranslation", "Board", "useBoard", "React", "forwardRef", "useCallback", "useMemo", "useState", "Surface", "useObjectMenuItems", "Obj", "Card", "Toolbar", "useTranslation", "Menu", "createMenuAction", "Focus", "Mosaic", "useBoard", "KANBAN_CARD_TILE_NAME", "KanbanCard", "forwardRef", "data", "location", "debug", "forwardedRef", "t", "useTranslation", "meta", "id", "model", "useBoard", "projection", "onCardRemove", "useKanbanBoard", "dragHandle", "setDragHandle", "useState", "dragHandleRef", "useCallback", "el", "objectMenuItems", "useObjectMenuItems", "menuItems", "useMemo", "createMenuAction", "label", "icon", "Mosaic", "Tile", "asChild", "getItemId", "Focus", "Group", "Menu", "Root", "Card", "ref", "data-testid", "Toolbar", "DragHandle", "Title", "Obj", "getLabel", "Trigger", "disabled", "length", "IconButton", "iconOnly", "variant", "Content", "items", "Surface", "role", "limit", "subject", "displayName", "React", "forwardRef", "useRef", "Board", "useBoard", "KANBAN_COLUMN_NAME", "KanbanColumn", "forwardRef", "data", "column", "location", "debug", "forwardedRef", "model", "useBoard", "columnFieldPath", "change", "onCardAdd", "getPivotAttributes", "itemTile", "useKanbanBoard", "title", "columnValue", "uncategorized", "UNCATEGORIZED_VALUE", "dragHandleRef", "useRef", "eventHandler", "useKanbanItemEventHandler", "React", "Board", "Column", "Root", "classNames", "ref", "div", "className", "data-testid", "span", "Header", "label", "Body", "Tile", "Footer", "onAdd", "undefined", "displayName", "KANBAN_BOARD_NAME", "KanbanBoardContext", "useKanbanBoard", "createContext", "kanbanId", "projection", "undefined", "columnFieldPath", "change", "kanban", "setItemField", "pivotFieldId", "getPivotAttributes", "id", "UNCATEGORIZED_VALUE", "UNCATEGORIZED_ATTRIBUTES", "title", "color", "itemTile", "KANBAN_BOARD_ROOT", "KanbanBoardRoot", "children", "KanbanCard", "items", "onCardAdd", "onCardRemove", "registry", "useContext", "RegistryContext", "t", "useTranslation", "meta", "model", "useKanbanBoardModel", "columns", "getColumns", "view", "target", "useMemo", "tryGetFieldProjection", "props", "property", "useCallback", "columnValue", "options", "option", "find", "length", "React", "div", "className", "Obj", "getDXN", "toString", "Board", "Root", "displayName", "KANBAN_BOARD_CONTENT", "KanbanBoardContent", "useBoard", "columnEventHandler", "useKanbanColumnEventHandler", "Content", "eventHandler", "Tile", "KanbanColumn", "KanbanBoard", "Column", "Card", "KanbanContainer", "role", "subject", "object", "registry", "useContext", "RegistryContext", "schemas", "useCapabilities", "AppCapabilities", "Schema", "db", "Obj", "getDatabase", "invokePromise", "useOperationInvoker", "view", "useObject", "typename", "query", "getTypenameFromQuery", "ast", "undefined", "schemaFromDb", "useSchema", "cardSchema", "useMemo", "flat", "find", "schema", "Type", "getTypename", "items", "AtomQuery", "make", "Filter", "type", "nothing", "projection", "useProjectionModel", "change", "useEchoChangeCallback", "pivotFieldId", "columnFieldPath", "tryGetFieldProjection", "props", "property", "handleCardAdd", "useCallback", "columnValue", "card", "add", "id", "handleCardRemove", "KanbanOperation", "DeleteCard", "React", "Panel", "Root", "KanbanBoard", "kanban", "onCardAdd", "onCardRemove", "Content", "asChild", "KanbanContainer"]
7
+ }
@@ -0,0 +1,67 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ useProjectionModel
4
+ } from "./chunk-P4RSMGOS.mjs";
5
+ import {
6
+ SettingsSchema
7
+ } from "./chunk-HL3BNZKP.mjs";
8
+ import "./chunk-HSLMI22Q.mjs";
9
+
10
+ // src/containers/KanbanViewEditor/KanbanViewEditor.tsx
11
+ import { RegistryContext } from "@effect-atom/atom-react";
12
+ import React, { useCallback, useContext, useMemo } from "react";
13
+ import { Obj } from "@dxos/echo";
14
+ import { Format } from "@dxos/echo/internal";
15
+ import { useObject, useSchema } from "@dxos/react-client/echo";
16
+ import { Form, SelectField } from "@dxos/react-ui-form";
17
+ import { getTypenameFromQuery } from "@dxos/schema";
18
+ var KanbanViewEditor = ({ subject: object }) => {
19
+ const registry = useContext(RegistryContext);
20
+ const db = Obj.getDatabase(object);
21
+ const [view, updateView] = useObject(object.view);
22
+ const currentTypename = view?.query ? getTypenameFromQuery(view.query.ast) : void 0;
23
+ const schema = useSchema(db, currentTypename);
24
+ const projection = useProjectionModel(schema, object, registry);
25
+ const fieldProjections = projection?.getFieldProjections() ?? [];
26
+ const selectFields = useMemo(() => fieldProjections.filter((field) => field.props.format === Format.TypeFormat.SingleSelect).map(({ field }) => ({
27
+ value: field.id,
28
+ label: field.path
29
+ })), [
30
+ fieldProjections
31
+ ]);
32
+ const handleValuesChanged = useCallback((values) => {
33
+ if (values.columnFieldId != null) {
34
+ updateView((view2) => {
35
+ view2.projection.pivotFieldId = values.columnFieldId;
36
+ });
37
+ }
38
+ }, [
39
+ updateView
40
+ ]);
41
+ const initialValues = useMemo(() => ({
42
+ columnFieldId: view?.projection.pivotFieldId
43
+ }), [
44
+ view?.projection.pivotFieldId
45
+ ]);
46
+ const fieldMap = useMemo(() => ({
47
+ columnFieldId: (props) => /* @__PURE__ */ React.createElement(SelectField, {
48
+ ...props,
49
+ options: selectFields
50
+ })
51
+ }), [
52
+ selectFields
53
+ ]);
54
+ return /* @__PURE__ */ React.createElement(Form.Root, {
55
+ schema: SettingsSchema,
56
+ values: initialValues,
57
+ fieldMap,
58
+ onValuesChanged: handleValuesChanged
59
+ }, /* @__PURE__ */ React.createElement(Form.FieldSet, null));
60
+ };
61
+
62
+ // src/containers/KanbanViewEditor/index.ts
63
+ var KanbanViewEditor_default = KanbanViewEditor;
64
+ export {
65
+ KanbanViewEditor_default as default
66
+ };
67
+ //# sourceMappingURL=KanbanViewEditor-JPV2II5P.mjs.map