@dxos/plugin-kanban 0.8.2-main.fbd8ed0 → 0.8.2-staging.7ac8446

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 (84) hide show
  1. package/dist/lib/browser/{artifact-definition-HABFQLG4.mjs → artifact-definition-SVNHDJQT.mjs} +12 -12
  2. package/dist/lib/browser/artifact-definition-SVNHDJQT.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-6JAA7YSW.mjs → chunk-K5BYEZ4Z.mjs} +35 -23
  4. package/dist/lib/browser/chunk-K5BYEZ4Z.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +4 -4
  6. package/dist/lib/browser/intent-resolver-XCDQ5N3Q.mjs +132 -0
  7. package/dist/lib/browser/intent-resolver-XCDQ5N3Q.mjs.map +7 -0
  8. package/dist/lib/browser/meta.json +1 -1
  9. package/dist/lib/browser/{react-surface-BIBGD5OD.mjs → react-surface-5DLU7L63.mjs} +37 -69
  10. package/dist/lib/browser/react-surface-5DLU7L63.mjs.map +7 -0
  11. package/dist/lib/browser/types.mjs +3 -1
  12. package/dist/lib/node/{artifact-definition-M57SFWWP.cjs → artifact-definition-M2XAYUI2.cjs} +19 -19
  13. package/dist/lib/node/artifact-definition-M2XAYUI2.cjs.map +7 -0
  14. package/dist/lib/node/{chunk-O4U7ZQ2I.cjs → chunk-3EUR6ZR2.cjs} +38 -25
  15. package/dist/lib/node/chunk-3EUR6ZR2.cjs.map +7 -0
  16. package/dist/lib/node/index.cjs +16 -16
  17. package/dist/lib/node/intent-resolver-P3PSZO7H.cjs +146 -0
  18. package/dist/lib/node/intent-resolver-P3PSZO7H.cjs.map +7 -0
  19. package/dist/lib/node/meta.json +1 -1
  20. package/dist/lib/node/{react-surface-ZABOI7UC.cjs → react-surface-OWAYP7VQ.cjs} +43 -75
  21. package/dist/lib/node/react-surface-OWAYP7VQ.cjs.map +7 -0
  22. package/dist/lib/node/types.cjs +8 -6
  23. package/dist/lib/node/types.cjs.map +2 -2
  24. package/dist/lib/node-esm/{artifact-definition-OLVK4DCO.mjs → artifact-definition-HQ5I2OO5.mjs} +12 -12
  25. package/dist/lib/node-esm/artifact-definition-HQ5I2OO5.mjs.map +7 -0
  26. package/dist/lib/node-esm/{chunk-NOC32MF5.mjs → chunk-2N7CO3DI.mjs} +35 -23
  27. package/dist/lib/node-esm/chunk-2N7CO3DI.mjs.map +7 -0
  28. package/dist/lib/node-esm/index.mjs +4 -4
  29. package/dist/lib/node-esm/intent-resolver-4G47V67J.mjs +133 -0
  30. package/dist/lib/node-esm/intent-resolver-4G47V67J.mjs.map +7 -0
  31. package/dist/lib/node-esm/meta.json +1 -1
  32. package/dist/lib/node-esm/{react-surface-LDR423Y7.mjs → react-surface-CLEITUUD.mjs} +37 -69
  33. package/dist/lib/node-esm/react-surface-CLEITUUD.mjs.map +7 -0
  34. package/dist/lib/node-esm/types.mjs +3 -1
  35. package/dist/types/src/capabilities/index.d.ts +1 -1
  36. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  37. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  38. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  39. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  40. package/dist/types/src/components/KanbanContainer.d.ts.map +1 -1
  41. package/dist/types/src/components/KanbanViewEditor.d.ts.map +1 -1
  42. package/dist/types/src/translations.d.ts +28 -2
  43. package/dist/types/src/translations.d.ts.map +1 -1
  44. package/dist/types/src/types.d.ts +50 -34
  45. package/dist/types/src/types.d.ts.map +1 -1
  46. package/dist/types/tsconfig.tsbuildinfo +1 -1
  47. package/package.json +25 -30
  48. package/src/capabilities/artifact-definition.ts +10 -10
  49. package/src/capabilities/intent-resolver.ts +6 -10
  50. package/src/capabilities/react-surface.tsx +12 -46
  51. package/src/components/KanbanContainer.tsx +11 -24
  52. package/src/components/KanbanViewEditor.tsx +7 -9
  53. package/src/types.ts +43 -26
  54. package/dist/lib/browser/artifact-definition-HABFQLG4.mjs.map +0 -7
  55. package/dist/lib/browser/chunk-6JAA7YSW.mjs.map +0 -7
  56. package/dist/lib/browser/intent-resolver-G6H6HZRG.mjs +0 -297
  57. package/dist/lib/browser/intent-resolver-G6H6HZRG.mjs.map +0 -7
  58. package/dist/lib/browser/react-surface-BIBGD5OD.mjs.map +0 -7
  59. package/dist/lib/node/artifact-definition-M57SFWWP.cjs.map +0 -7
  60. package/dist/lib/node/chunk-O4U7ZQ2I.cjs.map +0 -7
  61. package/dist/lib/node/intent-resolver-IBMSLMHX.cjs +0 -308
  62. package/dist/lib/node/intent-resolver-IBMSLMHX.cjs.map +0 -7
  63. package/dist/lib/node/react-surface-ZABOI7UC.cjs.map +0 -7
  64. package/dist/lib/node-esm/artifact-definition-OLVK4DCO.mjs.map +0 -7
  65. package/dist/lib/node-esm/chunk-NOC32MF5.mjs.map +0 -7
  66. package/dist/lib/node-esm/intent-resolver-X66YN6H5.mjs +0 -298
  67. package/dist/lib/node-esm/intent-resolver-X66YN6H5.mjs.map +0 -7
  68. package/dist/lib/node-esm/react-surface-LDR423Y7.mjs.map +0 -7
  69. package/dist/types/src/components/KanbanContainer.stories.d.ts +0 -10
  70. package/dist/types/src/components/KanbanContainer.stories.d.ts.map +0 -1
  71. package/dist/types/src/testing/index.d.ts +0 -3
  72. package/dist/types/src/testing/index.d.ts.map +0 -1
  73. package/dist/types/src/testing/initialize-kanban.d.ts +0 -17
  74. package/dist/types/src/testing/initialize-kanban.d.ts.map +0 -1
  75. package/dist/types/src/testing/kanban-manager.d.ts +0 -7
  76. package/dist/types/src/testing/kanban-manager.d.ts.map +0 -1
  77. package/dist/types/src/testing/playwright/smoke.spec.d.ts +0 -2
  78. package/dist/types/src/testing/playwright/smoke.spec.d.ts.map +0 -1
  79. package/src/components/KanbanContainer.stories.tsx +0 -191
  80. package/src/testing/index.ts +0 -6
  81. package/src/testing/initialize-kanban.ts +0 -139
  82. package/src/testing/kanban-manager.ts +0 -13
  83. package/src/testing/playwright/playwright.config.cts +0 -18
  84. package/src/testing/playwright/smoke.spec.ts +0 -7
@@ -26,57 +26,42 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var react_surface_ZABOI7UC_exports = {};
30
- __export(react_surface_ZABOI7UC_exports, {
29
+ var react_surface_OWAYP7VQ_exports = {};
30
+ __export(react_surface_OWAYP7VQ_exports, {
31
31
  default: () => react_surface_default
32
32
  });
33
- module.exports = __toCommonJS(react_surface_ZABOI7UC_exports);
34
- var import_chunk_O4U7ZQ2I = require("./chunk-O4U7ZQ2I.cjs");
33
+ module.exports = __toCommonJS(react_surface_OWAYP7VQ_exports);
34
+ var import_chunk_3EUR6ZR2 = require("./chunk-3EUR6ZR2.cjs");
35
35
  var import_react = __toESM(require("react"));
36
36
  var import_app_framework = require("@dxos/app-framework");
37
- var import_echo_schema = require("@dxos/echo-schema");
38
37
  var import_effect = require("@dxos/effect");
39
- var import_plugin_client = require("@dxos/plugin-client");
40
- var import_react_client = require("@dxos/react-client");
41
38
  var import_echo = require("@dxos/react-client/echo");
42
39
  var import_react_ui_form = require("@dxos/react-ui-form");
43
40
  var import_react2 = __toESM(require("react"));
44
41
  var import_app_framework2 = require("@dxos/app-framework");
45
- var import_echo_schema2 = require("@dxos/echo-schema");
46
42
  var import_plugin_search = require("@dxos/plugin-search");
47
- var import_react_client2 = require("@dxos/react-client");
48
43
  var import_echo2 = require("@dxos/react-client/echo");
49
44
  var import_react_ui_kanban = require("@dxos/react-ui-kanban");
50
45
  var import_react_ui_stack = require("@dxos/react-ui-stack");
51
46
  var import_schema = require("@dxos/schema");
52
47
  var import_react3 = __toESM(require("react"));
53
48
  var import_app_framework3 = require("@dxos/app-framework");
54
- var import_echo3 = require("@dxos/echo");
55
- var import_echo_schema3 = require("@dxos/echo-schema");
49
+ var import_echo_schema = require("@dxos/echo-schema");
56
50
  var import_invariant = require("@dxos/invariant");
57
- var import_react_client3 = require("@dxos/react-client");
58
- var import_echo4 = require("@dxos/react-client/echo");
51
+ var import_react_client = require("@dxos/react-client");
52
+ var import_echo3 = require("@dxos/react-client/echo");
59
53
  var import_react_ui_form2 = require("@dxos/react-ui-form");
60
54
  var import_react_ui_kanban2 = require("@dxos/react-ui-kanban");
61
55
  var import_schema2 = require("@dxos/schema");
62
56
  var KanbanContainer = ({ kanban }) => {
63
- const client = (0, import_react_client2.useClient)();
64
57
  const [cardSchema, setCardSchema] = (0, import_react2.useState)();
65
58
  const [projection, setProjection] = (0, import_react2.useState)();
66
59
  const space = (0, import_echo2.getSpace)(kanban);
67
60
  const { dispatchPromise: dispatch } = (0, import_app_framework2.useIntentDispatcher)();
68
- const jsonSchema = (0, import_react2.useMemo)(() => cardSchema instanceof import_echo_schema2.EchoSchema ? cardSchema.jsonSchema : cardSchema ? (0, import_echo_schema2.toJsonSchema)(cardSchema) : void 0, [
69
- cardSchema
70
- ]);
71
61
  (0, import_react2.useEffect)(() => {
72
- const typename = kanban.cardView?.target?.query?.typename;
73
- const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => (0, import_echo_schema2.getTypenameOrThrow)(schema) === typename);
74
- if (staticSchema) {
75
- setCardSchema(() => staticSchema);
76
- }
77
- if (!staticSchema && typename && space) {
62
+ if (kanban.cardView?.target?.query?.typename && space) {
78
63
  const query = space.db.schemaRegistry.query({
79
- typename
64
+ typename: kanban.cardView.target.query.typename
80
65
  });
81
66
  const unsubscribe = query.subscribe(() => {
82
67
  const [schema] = query.results;
@@ -93,14 +78,15 @@ var KanbanContainer = ({ kanban }) => {
93
78
  space
94
79
  ]);
95
80
  (0, import_react2.useEffect)(() => {
96
- if (kanban.cardView?.target && jsonSchema) {
97
- setProjection(new import_schema.ViewProjection(jsonSchema, kanban.cardView.target));
81
+ if (kanban.cardView?.target && cardSchema) {
82
+ setProjection(new import_schema.ViewProjection(cardSchema.jsonSchema, kanban.cardView.target));
98
83
  }
99
84
  }, [
100
85
  kanban.cardView?.target,
101
- JSON.stringify(jsonSchema)
86
+ cardSchema,
87
+ JSON.stringify(cardSchema?.jsonSchema)
102
88
  ]);
103
- const objects = (0, import_echo2.useQuery)(space, cardSchema ? import_echo2.Filter.type(cardSchema) : import_echo2.Filter.nothing());
89
+ const objects = (0, import_echo2.useQuery)(space, cardSchema ? import_echo2.Filter.schema(cardSchema) : import_echo2.Filter.nothing());
104
90
  const filteredObjects = (0, import_plugin_search.useGlobalFilteredObjects)(objects);
105
91
  const model = (0, import_react_ui_kanban.useKanbanModel)({
106
92
  kanban,
@@ -111,7 +97,7 @@ var KanbanContainer = ({ kanban }) => {
111
97
  const handleAddCard = (0, import_react2.useCallback)((columnValue) => {
112
98
  const path = model?.columnFieldPath;
113
99
  if (space && cardSchema && path) {
114
- const card = (0, import_echo2.live)(cardSchema, {
100
+ const card = (0, import_echo2.create)(cardSchema, {
115
101
  [path]: columnValue
116
102
  });
117
103
  space.db.add(card);
@@ -123,7 +109,7 @@ var KanbanContainer = ({ kanban }) => {
123
109
  model
124
110
  ]);
125
111
  const handleRemoveCard = (0, import_react2.useCallback)((card) => {
126
- void dispatch((0, import_app_framework2.createIntent)(import_chunk_O4U7ZQ2I.KanbanAction.DeleteCard, {
112
+ void dispatch((0, import_app_framework2.createIntent)(import_chunk_3EUR6ZR2.KanbanAction.DeleteCard, {
127
113
  card
128
114
  }));
129
115
  }, [
@@ -138,17 +124,17 @@ var KanbanContainer = ({ kanban }) => {
138
124
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-kanban/src/components/KanbanViewEditor.tsx";
139
125
  var KanbanViewEditor = ({ kanban }) => {
140
126
  const { dispatchPromise: dispatch } = (0, import_app_framework3.useIntentDispatcher)();
141
- const client = (0, import_react_client3.useClient)();
142
- const space = (0, import_echo4.getSpace)(kanban);
127
+ const client = (0, import_react_client.useClient)();
128
+ const space = (0, import_echo3.getSpace)(kanban);
143
129
  const currentTypename = (0, import_react3.useMemo)(() => kanban?.cardView?.target?.query?.typename, [
144
130
  kanban?.cardView?.target?.query?.typename
145
131
  ]);
146
- const schema = (0, import_echo4.useSchema)(client, space, currentTypename);
147
- const views = (0, import_echo4.useQuery)(space, import_echo4.Filter.type(import_schema2.ViewType));
132
+ const schema = (0, import_echo3.useSchema)(client, space, currentTypename);
133
+ const views = (0, import_echo3.useQuery)(space, import_echo3.Filter.schema(import_schema2.ViewType));
148
134
  const handleUpdateTypename = (0, import_react3.useCallback)((newTypename) => {
149
135
  (0, import_invariant.invariant)(schema, void 0, {
150
136
  F: __dxlog_file,
151
- L: 34,
137
+ L: 33,
152
138
  S: void 0,
153
139
  A: [
154
140
  "schema",
@@ -159,13 +145,13 @@ var KanbanViewEditor = ({ kanban }) => {
159
145
  for (const view of matchingViews) {
160
146
  view.query.typename = newTypename;
161
147
  }
162
- (0, import_echo_schema3.assertEchoSchema)(schema).updateTypename(newTypename);
148
+ schema.mutable.updateTypename(newTypename);
163
149
  }, [
164
150
  views,
165
151
  schema
166
152
  ]);
167
153
  const handleDelete = (0, import_react3.useCallback)((fieldId) => {
168
- void dispatch?.((0, import_app_framework3.createIntent)(import_chunk_O4U7ZQ2I.KanbanAction.DeleteCardField, {
154
+ void dispatch?.((0, import_app_framework3.createIntent)(import_chunk_3EUR6ZR2.KanbanAction.DeleteCardField, {
169
155
  kanban,
170
156
  fieldId
171
157
  }));
@@ -175,16 +161,15 @@ var KanbanViewEditor = ({ kanban }) => {
175
161
  ]);
176
162
  const projection = (0, import_react3.useMemo)(() => {
177
163
  if (kanban?.cardView?.target && schema) {
178
- const jsonSchema = import_echo3.Type.toJsonSchema(schema);
179
- return new import_schema2.ViewProjection(jsonSchema, kanban.cardView.target);
164
+ return new import_schema2.ViewProjection(schema.jsonSchema, kanban.cardView.target);
180
165
  }
181
166
  }, [
182
167
  kanban?.cardView?.target,
183
168
  schema,
184
- JSON.stringify(schema ? import_echo3.Type.toJsonSchema(schema) : {})
169
+ JSON.stringify(schema)
185
170
  ]);
186
171
  const fieldProjections = projection?.getFieldProjections() || [];
187
- const selectFields = fieldProjections.filter((field) => field.props.format === import_echo_schema3.FormatEnum.SingleSelect).map(({ field }) => ({
172
+ const selectFields = fieldProjections.filter((field) => field.props.format === import_echo_schema.FormatEnum.SingleSelect).map(({ field }) => ({
188
173
  value: field.id,
189
174
  label: field.path
190
175
  }));
@@ -219,71 +204,58 @@ var KanbanViewEditor = ({ kanban }) => {
219
204
  registry: space.db.schemaRegistry,
220
205
  schema,
221
206
  view: kanban.cardView.target,
222
- onTypenameChanged: (0, import_echo_schema3.isMutable)(schema) ? handleUpdateTypename : void 0,
223
- onDelete: (0, import_echo_schema3.isMutable)(schema) ? handleDelete : void 0
207
+ onTypenameChanged: schema.readonly ? void 0 : handleUpdateTypename,
208
+ onDelete: schema.readonly ? void 0 : handleDelete
224
209
  }));
225
210
  };
226
211
  var react_surface_default = () => (0, import_app_framework.contributes)(import_app_framework.Capabilities.ReactSurface, [
227
212
  (0, import_app_framework.createSurface)({
228
- id: `${import_chunk_O4U7ZQ2I.KANBAN_PLUGIN}/kanban`,
213
+ id: `${import_chunk_3EUR6ZR2.KANBAN_PLUGIN}/kanban`,
229
214
  role: [
230
215
  "article",
231
216
  "section"
232
217
  ],
233
- filter: (data) => (0, import_chunk_O4U7ZQ2I.isKanban)(data.subject),
218
+ filter: (data) => (0, import_chunk_3EUR6ZR2.isKanban)(data.subject),
234
219
  component: ({ data, role }) => /* @__PURE__ */ import_react.default.createElement(KanbanContainer, {
235
220
  kanban: data.subject,
236
221
  role
237
222
  })
238
223
  }),
239
224
  (0, import_app_framework.createSurface)({
240
- id: `${import_chunk_O4U7ZQ2I.KANBAN_PLUGIN}/object-settings`,
225
+ id: `${import_chunk_3EUR6ZR2.KANBAN_PLUGIN}/object-settings`,
241
226
  role: "object-settings",
242
- filter: (data) => (0, import_chunk_O4U7ZQ2I.isKanban)(data.subject),
227
+ filter: (data) => (0, import_chunk_3EUR6ZR2.isKanban)(data.subject),
243
228
  component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(KanbanViewEditor, {
244
229
  kanban: data.subject
245
230
  })
246
231
  }),
247
232
  (0, import_app_framework.createSurface)({
248
- id: `${import_chunk_O4U7ZQ2I.KANBAN_PLUGIN}/create-initial-schema-form`,
233
+ id: `${import_chunk_3EUR6ZR2.KANBAN_PLUGIN}/create-initial-schema-form-[schema]`,
249
234
  role: "form-input",
250
235
  filter: (data) => {
251
- if (data.prop !== "typename") {
252
- return false;
253
- }
254
- const annotation = (0, import_effect.findAnnotation)(data.schema.ast, import_chunk_O4U7ZQ2I.TypenameAnnotationId);
236
+ const annotation = (0, import_effect.findAnnotation)(data.schema.ast, import_chunk_3EUR6ZR2.TypenameAnnotationId);
255
237
  return !!annotation;
256
238
  },
257
239
  component: ({ data: { target }, ...inputProps }) => {
258
- const client = (0, import_react_client.useClient)();
259
240
  const props = inputProps;
260
241
  const space = (0, import_echo.isSpace)(target) ? target : (0, import_echo.getSpace)(target);
261
242
  if (!space) {
262
243
  return null;
263
244
  }
264
- const schemaWhitelists = (0, import_app_framework.useCapabilities)(import_plugin_client.ClientCapabilities.SchemaWhiteList);
265
- const whitelistedTypenames = (0, import_react.useMemo)(() => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => type.typename))), [
266
- schemaWhitelists
267
- ]);
268
- const fixed = client.graph.schemaRegistry.schemas.filter((schema) => whitelistedTypenames.has((0, import_echo_schema.getTypenameOrThrow)(schema)));
269
- const dynamic = space?.db.schemaRegistry.query().runSync();
270
- const typenames = Array.from(/* @__PURE__ */ new Set([
271
- ...fixed.map((schema) => (0, import_echo_schema.getTypenameOrThrow)(schema)),
272
- ...dynamic.map((schema) => schema.typename)
273
- ])).sort();
245
+ const schemata = space?.db.schemaRegistry.query().runSync();
274
246
  return /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.SelectInput, {
275
247
  ...props,
276
- options: typenames.map((typename) => ({
277
- value: typename
248
+ options: schemata.map((schema) => ({
249
+ value: schema.typename
278
250
  }))
279
251
  });
280
252
  }
281
253
  }),
282
254
  (0, import_app_framework.createSurface)({
283
- id: `${import_chunk_O4U7ZQ2I.KANBAN_PLUGIN}/create-initial-schema-form-[pivot-column]`,
255
+ id: `${import_chunk_3EUR6ZR2.KANBAN_PLUGIN}/create-initial-schema-form-[pivot-column]`,
284
256
  role: "form-input",
285
257
  filter: (data) => {
286
- const annotation = (0, import_effect.findAnnotation)(data.schema.ast, import_chunk_O4U7ZQ2I.PivotColumnAnnotationId);
258
+ const annotation = (0, import_effect.findAnnotation)(data.schema.ast, import_chunk_3EUR6ZR2.PivotColumnAnnotationId);
287
259
  return !!annotation;
288
260
  },
289
261
  component: ({ data: { target }, ...inputProps }) => {
@@ -293,17 +265,14 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
293
265
  return null;
294
266
  }
295
267
  const { typename } = (0, import_react_ui_form.useFormValues)();
296
- const schemaWhitelists = (0, import_app_framework.useCapabilities)(import_plugin_client.ClientCapabilities.SchemaWhiteList);
297
- const staticSchema = schemaWhitelists.flat().find((schema) => (0, import_echo_schema.getTypenameOrThrow)(schema) === typename);
298
268
  const [selectedSchema] = space?.db.schemaRegistry.query({
299
269
  typename
300
270
  }).runSync();
301
271
  const singleSelectColumns = (0, import_react.useMemo)(() => {
302
- const properties = staticSchema ? (0, import_echo_schema.toJsonSchema)(staticSchema).properties : selectedSchema?.jsonSchema?.properties;
303
- if (!properties) {
272
+ if (!selectedSchema?.jsonSchema?.properties) {
304
273
  return [];
305
274
  }
306
- const columns = Object.entries(properties).reduce((acc, [key, value]) => {
275
+ const columns = Object.entries(selectedSchema.jsonSchema.properties).reduce((acc, [key, value]) => {
307
276
  if (typeof value === "object" && value?.format === "single-select") {
308
277
  acc.push(key);
309
278
  }
@@ -311,8 +280,7 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
311
280
  }, []);
312
281
  return columns;
313
282
  }, [
314
- selectedSchema?.jsonSchema,
315
- staticSchema
283
+ selectedSchema?.jsonSchema
316
284
  ]);
317
285
  if (!typename) {
318
286
  return null;
@@ -326,4 +294,4 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
326
294
  }
327
295
  })
328
296
  ]);
329
- //# sourceMappingURL=react-surface-ZABOI7UC.cjs.map
297
+ //# sourceMappingURL=react-surface-OWAYP7VQ.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/KanbanContainer.tsx", "../../../src/components/KanbanViewEditor.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { type S } from '@dxos/echo-schema';\nimport { findAnnotation } from '@dxos/effect';\nimport { type CollectionType } from '@dxos/plugin-space/types';\nimport { getSpace, isSpace, type Space } from '@dxos/react-client/echo';\nimport { type InputProps, SelectInput, useFormValues } from '@dxos/react-ui-form';\nimport { type KanbanType } from '@dxos/react-ui-kanban';\n\nimport { KanbanContainer, KanbanViewEditor } from '../components';\nimport { KANBAN_PLUGIN } from '../meta';\nimport { isKanban, TypenameAnnotationId, PivotColumnAnnotationId } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${KANBAN_PLUGIN}/kanban`,\n role: ['article', 'section'],\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data, role }) => <KanbanContainer kanban={data.subject} role={role} />,\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/object-settings`,\n role: 'object-settings',\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data }) => <KanbanViewEditor kanban={data.subject} />,\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/create-initial-schema-form-[schema]`,\n role: 'form-input',\n filter: (data): data is { prop: string; schema: S.Schema<any>; target: Space | CollectionType | undefined } => {\n const annotation = findAnnotation<boolean>((data.schema as S.Schema.All).ast, TypenameAnnotationId);\n return !!annotation;\n },\n component: ({ data: { target }, ...inputProps }) => {\n const props = inputProps as any as InputProps;\n const space = isSpace(target) ? target : getSpace(target);\n if (!space) {\n return null;\n }\n\n const schemata = space?.db.schemaRegistry.query().runSync();\n return <SelectInput {...props} options={schemata.map((schema) => ({ value: schema.typename }))} />;\n },\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/create-initial-schema-form-[pivot-column]`,\n role: 'form-input',\n filter: (data): data is { prop: string; schema: S.Schema<any>; target: Space | CollectionType | undefined } => {\n const annotation = findAnnotation<boolean>((data.schema as S.Schema.All).ast, PivotColumnAnnotationId);\n return !!annotation;\n },\n component: ({ data: { target }, ...inputProps }) => {\n const props = inputProps as any as InputProps;\n const space = isSpace(target) ? target : getSpace(target);\n if (!space) {\n return null;\n }\n const { typename } = useFormValues();\n const [selectedSchema] = space?.db.schemaRegistry.query({ typename }).runSync();\n\n const singleSelectColumns = useMemo(() => {\n if (!selectedSchema?.jsonSchema?.properties) {\n return [];\n }\n\n const columns = Object.entries(selectedSchema.jsonSchema.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?.jsonSchema]);\n\n if (!typename) {\n return null;\n }\n\n return <SelectInput {...props} options={singleSelectColumns.map((column) => ({ value: column }))} />;\n },\n }),\n ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type EchoSchema } from '@dxos/echo-schema';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { Filter, useQuery, getSpace, create } from '@dxos/react-client/echo';\nimport { type KanbanType, useKanbanModel, Kanban } from '@dxos/react-ui-kanban';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { ViewProjection } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\nexport const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {\n const [cardSchema, setCardSchema] = useState<EchoSchema>();\n const [projection, setProjection] = useState<ViewProjection>();\n const space = getSpace(kanban);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n useEffect(() => {\n if (kanban.cardView?.target?.query?.typename && space) {\n const query = space.db.schemaRegistry.query({ typename: kanban.cardView.target.query.typename });\n const unsubscribe = query.subscribe(\n () => {\n const [schema] = query.results;\n if (schema) {\n setCardSchema(schema);\n }\n },\n { fire: true },\n );\n return unsubscribe;\n }\n }, [kanban.cardView?.target?.query, space]);\n\n useEffect(() => {\n if (kanban.cardView?.target && cardSchema) {\n setProjection(new ViewProjection(cardSchema.jsonSchema, kanban.cardView.target));\n }\n // TODO(ZaymonFC): Is there a better way to get notified about deep changes in the json schema?\n }, [kanban.cardView?.target, cardSchema, JSON.stringify(cardSchema?.jsonSchema)]);\n\n const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());\n const filteredObjects = useGlobalFilteredObjects(objects);\n\n const model = useKanbanModel({\n kanban,\n schema: cardSchema,\n projection,\n items: filteredObjects,\n });\n\n const handleAddCard = useCallback(\n (columnValue: string | undefined) => {\n const path = model?.columnFieldPath;\n if (space && cardSchema && path) {\n const card = create(cardSchema, { [path]: columnValue });\n space.db.add(card);\n return card.id;\n }\n },\n [space, cardSchema, model],\n );\n\n const handleRemoveCard = useCallback(\n (card: { id: string }) => {\n void dispatch(createIntent(KanbanAction.DeleteCard, { card }));\n },\n [dispatch],\n );\n\n return (\n <StackItem.Content>\n {model && <Kanban model={model} onAddCard={handleAddCard} onRemoveCard={handleRemoveCard} />}\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { FormatEnum } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, getSpace, useQuery, useSchema } from '@dxos/react-client/echo';\nimport { ViewEditor, Form, SelectInput, type CustomInputMap } from '@dxos/react-ui-form';\nimport { type KanbanType, KanbanSettingsSchema } from '@dxos/react-ui-kanban';\nimport { ViewType, ViewProjection } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\ntype KanbanViewEditorProps = { kanban: KanbanType };\n\nexport const KanbanViewEditor = ({ kanban }: KanbanViewEditorProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const client = useClient();\n const space = getSpace(kanban);\n const currentTypename = useMemo(\n () => kanban?.cardView?.target?.query?.typename,\n [kanban?.cardView?.target?.query?.typename],\n );\n const schema = useSchema(client, space, currentTypename);\n const views = useQuery(space, Filter.schema(ViewType));\n\n const handleUpdateTypename = useCallback(\n (newTypename: string) => {\n invariant(schema);\n const matchingViews = views.filter((view) => view.query.typename === currentTypename);\n for (const view of matchingViews) {\n view.query.typename = newTypename;\n }\n\n schema.mutable.updateTypename(newTypename);\n },\n [views, schema],\n );\n\n const handleDelete = useCallback(\n (fieldId: string) => {\n void dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId }));\n },\n [dispatch, kanban],\n );\n\n const projection = useMemo(() => {\n if (kanban?.cardView?.target && schema) {\n return new ViewProjection(schema.jsonSchema, kanban.cardView.target);\n }\n }, [kanban?.cardView?.target, schema, JSON.stringify(schema)]);\n\n const fieldProjections = projection?.getFieldProjections() || [];\n const selectFields = fieldProjections\n .filter((field) => field.props.format === FormatEnum.SingleSelect)\n .map(({ field }) => ({ value: field.id, label: field.path }));\n\n const onSave = useCallback(\n (values: Partial<{ columnFieldId: string }>) => {\n kanban.columnFieldId = values.columnFieldId;\n },\n [kanban],\n );\n\n const initialValues = useMemo(() => ({ columnFieldId: kanban.columnFieldId }), [kanban.columnFieldId]);\n const custom: CustomInputMap = useMemo(\n () => ({ columnFieldId: (props) => <SelectInput {...props} options={selectFields} /> }),\n [selectFields],\n );\n\n if (!space || !schema || !kanban.cardView?.target) {\n return null;\n }\n\n return (\n <>\n <Form schema={KanbanSettingsSchema} values={initialValues} onSave={onSave} autoSave Custom={custom} />\n <ViewEditor\n registry={space.db.schemaRegistry}\n schema={schema}\n view={kanban.cardView.target}\n onTypenameChanged={schema.readonly ? undefined : handleUpdateTypename}\n onDelete={schema.readonly ? undefined : handleDelete}\n />\n </>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_app_framework", "import_echo", "import_react_ui_form", "import_react_ui_kanban", "import_schema", "KanbanContainer", "kanban", "cardSchema", "setCardSchema", "useState", "projection", "setProjection", "space", "getSpace", "dispatchPromise", "dispatch", "useIntentDispatcher", "useEffect", "cardView", "target", "query", "typename", "db", "schemaRegistry", "unsubscribe", "subscribe", "schema", "results", "fire", "ViewProjection", "jsonSchema", "JSON", "stringify", "objects", "useQuery", "Filter", "nothing", "filteredObjects", "useGlobalFilteredObjects", "model", "useKanbanModel", "items", "handleAddCard", "useCallback", "columnValue", "path", "columnFieldPath", "card", "create", "add", "id", "handleRemoveCard", "createIntent", "KanbanAction", "DeleteCard", "React", "StackItem", "Content", "Kanban", "onAddCard", "onRemoveCard", "KanbanViewEditor", "client", "useClient", "currentTypename", "useMemo", "useSchema", "views", "ViewType", "handleUpdateTypename", "newTypename", "invariant", "matchingViews", "filter", "view", "mutable", "updateTypename", "handleDelete", "fieldId", "DeleteCardField", "fieldProjections", "getFieldProjections", "selectFields", "field", "props", "format", "FormatEnum", "SingleSelect", "map", "value", "label", "onSave", "values", "columnFieldId", "initialValues", "custom", "SelectInput", "options", "Form", "KanbanSettingsSchema", "autoSave", "Custom", "ViewEditor", "registry", "onTypenameChanged", "readonly", "undefined", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "KANBAN_PLUGIN", "role", "data", "isKanban", "subject", "component", "annotation", "findAnnotation", "ast", "TypenameAnnotationId", "inputProps", "isSpace", "schemata", "runSync", "PivotColumnAnnotationId", "useFormValues", "selectedSchema", "singleSelectColumns", "properties", "columns", "Object", "entries", "reduce", "acc", "key", "push", "column"]
7
+ }
@@ -18,20 +18,22 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var types_exports = {};
20
20
  __export(types_exports, {
21
- CreateKanbanSchema: () => import_chunk_O4U7ZQ2I.CreateKanbanSchema,
22
- KanbanAction: () => import_chunk_O4U7ZQ2I.KanbanAction,
23
- PivotColumnAnnotationId: () => import_chunk_O4U7ZQ2I.PivotColumnAnnotationId,
24
- TypenameAnnotationId: () => import_chunk_O4U7ZQ2I.TypenameAnnotationId,
25
- isKanban: () => import_chunk_O4U7ZQ2I.isKanban
21
+ CreateKanbanSchema: () => import_chunk_3EUR6ZR2.CreateKanbanSchema,
22
+ KanbanAction: () => import_chunk_3EUR6ZR2.KanbanAction,
23
+ PivotColumnAnnotationId: () => import_chunk_3EUR6ZR2.PivotColumnAnnotationId,
24
+ TypenameAnnotationId: () => import_chunk_3EUR6ZR2.TypenameAnnotationId,
25
+ createKanban: () => import_chunk_3EUR6ZR2.createKanban,
26
+ isKanban: () => import_chunk_3EUR6ZR2.isKanban
26
27
  });
27
28
  module.exports = __toCommonJS(types_exports);
28
- var import_chunk_O4U7ZQ2I = require("./chunk-O4U7ZQ2I.cjs");
29
+ var import_chunk_3EUR6ZR2 = require("./chunk-3EUR6ZR2.cjs");
29
30
  // Annotate the CommonJS export names for ESM import in node:
30
31
  0 && (module.exports = {
31
32
  CreateKanbanSchema,
32
33
  KanbanAction,
33
34
  PivotColumnAnnotationId,
34
35
  TypenameAnnotationId,
36
+ createKanban,
35
37
  isKanban
36
38
  });
37
39
  //# sourceMappingURL=types.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["types.cjs"],
4
- "sourcesContent": ["import {\n CreateKanbanSchema,\n KanbanAction,\n PivotColumnAnnotationId,\n TypenameAnnotationId,\n isKanban\n} from \"./chunk-O4U7ZQ2I.cjs\";\nexport {\n CreateKanbanSchema,\n KanbanAction,\n PivotColumnAnnotationId,\n TypenameAnnotationId,\n isKanban\n};\n//# sourceMappingURL=types.cjs.map\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAMO;",
4
+ "sourcesContent": ["import {\n CreateKanbanSchema,\n KanbanAction,\n PivotColumnAnnotationId,\n TypenameAnnotationId,\n createKanban,\n isKanban\n} from \"./chunk-3EUR6ZR2.cjs\";\nexport {\n CreateKanbanSchema,\n KanbanAction,\n PivotColumnAnnotationId,\n TypenameAnnotationId,\n createKanban,\n isKanban\n};\n//# sourceMappingURL=types.cjs.map\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAOO;",
6
6
  "names": []
7
7
  }
@@ -2,20 +2,20 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  KanbanAction,
4
4
  meta
5
- } from "./chunk-NOC32MF5.mjs";
5
+ } from "./chunk-2N7CO3DI.mjs";
6
6
 
7
7
  // packages/plugins/plugin-kanban/src/capabilities/artifact-definition.ts
8
- import { Schema, pipe } from "effect";
8
+ import { pipe } from "effect";
9
9
  import { Capabilities, chain, contributes, createIntent } from "@dxos/app-framework";
10
10
  import { defineArtifact, defineTool, ToolResult } from "@dxos/artifact";
11
11
  import { createArtifactElement } from "@dxos/assistant";
12
- import { isInstanceOf } from "@dxos/echo-schema";
12
+ import { isInstanceOf, S } from "@dxos/echo-schema";
13
13
  import { invariant } from "@dxos/invariant";
14
14
  import { SpaceAction } from "@dxos/plugin-space/types";
15
15
  import { Filter, fullyQualifiedId } from "@dxos/react-client/echo";
16
16
  import { KanbanType } from "@dxos/react-ui-kanban";
17
17
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-kanban/src/capabilities/artifact-definition.ts";
18
- var QualifiedId = Schema.String.annotations({
18
+ var QualifiedId = S.String.annotations({
19
19
  description: "The fully qualified ID of the kanban `spaceID:objectID`"
20
20
  });
21
21
  var artifact_definition_default = () => {
@@ -35,11 +35,11 @@ var artifact_definition_default = () => {
35
35
  Create a new kanban board using an existing schema.
36
36
  Use schema_create first to create a schema, or schema_list to choose an existing one.`,
37
37
  caption: "Creating kanban board...",
38
- schema: Schema.Struct({
39
- typename: Schema.String.annotations({
38
+ schema: S.Struct({
39
+ typename: S.String.annotations({
40
40
  description: "The fully qualified typename of the schema to use for the kanban cards."
41
41
  }),
42
- pivotColumn: Schema.optional(Schema.String).annotations({
42
+ pivotColumn: S.optional(S.String).annotations({
43
43
  description: "Optional field name to use as the column pivot."
44
44
  })
45
45
  }),
@@ -86,7 +86,7 @@ var artifact_definition_default = () => {
86
86
  name: "list",
87
87
  description: "List all kanban boards in the current space.",
88
88
  caption: "Listing kanban boards...",
89
- schema: Schema.Struct({}),
89
+ schema: S.Struct({}),
90
90
  execute: async (_input, { extensions }) => {
91
91
  invariant(extensions?.space, "No space", {
92
92
  F: __dxlog_file,
@@ -98,7 +98,7 @@ var artifact_definition_default = () => {
98
98
  ]
99
99
  });
100
100
  const space = extensions.space;
101
- const { objects: boards } = await space.db.query(Filter.type(KanbanType)).run();
101
+ const { objects: boards } = await space.db.query(Filter.schema(KanbanType)).run();
102
102
  const boardInfo = await Promise.all(boards.map(async (board) => {
103
103
  const view = await board.cardView?.load();
104
104
  return {
@@ -113,7 +113,7 @@ var artifact_definition_default = () => {
113
113
  name: "inspect",
114
114
  description: "Get details about a specific kanban board.",
115
115
  caption: "Inspecting kanban board...",
116
- schema: Schema.Struct({
116
+ schema: S.Struct({
117
117
  id: QualifiedId
118
118
  }),
119
119
  execute: async ({ id }, { extensions }) => {
@@ -127,7 +127,7 @@ var artifact_definition_default = () => {
127
127
  ]
128
128
  });
129
129
  const space = extensions.space;
130
- const { objects: boards } = await space.db.query(Filter.type(KanbanType)).run();
130
+ const { objects: boards } = await space.db.query(Filter.schema(KanbanType)).run();
131
131
  const board = boards.find((board2) => fullyQualifiedId(board2) === id);
132
132
  invariant(isInstanceOf(KanbanType, board), void 0, {
133
133
  F: __dxlog_file,
@@ -175,4 +175,4 @@ var artifact_definition_default = () => {
175
175
  export {
176
176
  artifact_definition_default as default
177
177
  };
178
- //# sourceMappingURL=artifact-definition-OLVK4DCO.mjs.map
178
+ //# sourceMappingURL=artifact-definition-HQ5I2OO5.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/artifact-definition.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { pipe } from 'effect';\n\nimport { Capabilities, chain, contributes, createIntent, type PromiseIntentDispatcher } from '@dxos/app-framework';\nimport { defineArtifact, defineTool, ToolResult } from '@dxos/artifact';\nimport { createArtifactElement } from '@dxos/assistant';\nimport { isInstanceOf, S } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { Filter, fullyQualifiedId, type Space } from '@dxos/react-client/echo';\nimport { KanbanType } from '@dxos/react-ui-kanban';\n\nimport { meta } from '../meta';\nimport { KanbanAction } from '../types';\n\nconst QualifiedId = S.String.annotations({\n description: 'The fully qualified ID of the kanban `spaceID:objectID`',\n});\n\ndeclare global {\n interface ToolContextExtensions {\n space?: Space;\n dispatch?: PromiseIntentDispatcher;\n }\n}\n\nexport default () => {\n const definition = defineArtifact({\n id: `artifact:${meta.id}`,\n name: meta.name,\n instructions: `\n - Before adding items to a kanban board, inspect the board to see its schema\n - When adding items, you must not include the 'id' field -- it is automatically generated\n - BEFORE adding items, always make sure the board has been shown to the user!\n `,\n schema: KanbanType,\n tools: [\n defineTool(meta.id, {\n name: 'create',\n description: `\n Create a new kanban board using an existing schema.\n Use schema_create first to create a schema, or schema_list to choose an existing one.`,\n caption: 'Creating kanban board...',\n schema: S.Struct({\n typename: S.String.annotations({\n description: 'The fully qualified typename of the schema to use for the kanban cards.',\n }),\n pivotColumn: S.optional(S.String).annotations({\n description: 'Optional field name to use as the column pivot.',\n }),\n }),\n execute: async ({ typename, pivotColumn }, { extensions }) => {\n invariant(extensions?.space, 'No space');\n invariant(extensions?.dispatch, 'No intent dispatcher');\n\n // Validate schema exists first\n const schema = await extensions.space.db.schemaRegistry.query({ typename }).firstOrUndefined();\n if (!schema) {\n return ToolResult.Error(`Schema not found: ${typename}`);\n }\n\n const intent = pipe(\n createIntent(KanbanAction.Create, {\n space: extensions.space,\n typename,\n initialPivotColumn: pivotColumn,\n }),\n chain(SpaceAction.AddObject, { target: extensions.space }),\n );\n\n const { data, error } = await extensions.dispatch(intent);\n if (!data || error) {\n return ToolResult.Error(error?.message ?? 'Failed to create kanban board');\n }\n\n return ToolResult.Success(createArtifactElement(data.id));\n },\n }),\n defineTool(meta.id, {\n name: 'list',\n description: 'List all kanban boards in the current space.',\n caption: 'Listing kanban boards...',\n schema: S.Struct({}),\n execute: async (_input, { extensions }) => {\n invariant(extensions?.space, 'No space');\n const space = extensions.space;\n const { objects: boards } = await space.db.query(Filter.schema(KanbanType)).run();\n\n const boardInfo = await Promise.all(\n boards.map(async (board: KanbanType) => {\n const view = await board.cardView?.load();\n return {\n id: fullyQualifiedId(board),\n typename: view?.query.typename,\n };\n }),\n );\n\n return ToolResult.Success(boardInfo);\n },\n }),\n defineTool(meta.id, {\n name: 'inspect',\n description: 'Get details about a specific kanban board.',\n caption: 'Inspecting kanban board...',\n schema: S.Struct({ id: QualifiedId }),\n execute: async ({ id }, { extensions }) => {\n invariant(extensions?.space, 'No space');\n const space = extensions.space;\n const { objects: boards } = await space.db.query(Filter.schema(KanbanType)).run();\n const board = boards.find((board: KanbanType) => fullyQualifiedId(board) === id);\n invariant(isInstanceOf(KanbanType, board));\n\n const view = await board.cardView?.load();\n invariant(view);\n\n const typename = view.query.typename;\n const schema = await space.db.schemaRegistry.query({ typename }).firstOrUndefined();\n invariant(schema);\n\n return ToolResult.Success({\n schema,\n columnField: board.columnFieldId,\n viewFields: view.fields,\n });\n },\n }),\n ],\n });\n\n return contributes(Capabilities.ArtifactDefinition, definition);\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["pipe", "Capabilities", "chain", "contributes", "createIntent", "defineArtifact", "defineTool", "ToolResult", "createArtifactElement", "isInstanceOf", "S", "invariant", "SpaceAction", "Filter", "fullyQualifiedId", "KanbanType", "QualifiedId", "S", "String", "annotations", "description", "definition", "defineArtifact", "id", "meta", "name", "instructions", "schema", "KanbanType", "tools", "defineTool", "caption", "Struct", "typename", "pivotColumn", "optional", "execute", "extensions", "invariant", "space", "dispatch", "db", "schemaRegistry", "query", "firstOrUndefined", "ToolResult", "Error", "intent", "pipe", "createIntent", "KanbanAction", "Create", "initialPivotColumn", "chain", "SpaceAction", "AddObject", "target", "data", "error", "message", "Success", "createArtifactElement", "_input", "objects", "boards", "Filter", "run", "boardInfo", "Promise", "all", "map", "board", "view", "cardView", "load", "fullyQualifiedId", "find", "isInstanceOf", "columnField", "columnFieldId", "viewFields", "fields", "contributes", "Capabilities", "ArtifactDefinition"]
7
+ }
@@ -1,9 +1,11 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
 
3
3
  // packages/plugins/plugin-kanban/src/types.ts
4
- import { Schema, SchemaAST } from "effect";
4
+ import { TitleAnnotationId } from "effect/SchemaAST";
5
+ import { S } from "@dxos/echo-schema";
5
6
  import { SpaceSchema } from "@dxos/react-client/echo";
6
7
  import { KanbanType } from "@dxos/react-ui-kanban";
8
+ import { initializeKanban } from "@dxos/react-ui-kanban/testing";
7
9
  import { FieldSchema } from "@dxos/schema";
8
10
 
9
11
  // packages/plugins/plugin-kanban/src/meta.ts
@@ -25,57 +27,66 @@ var meta = {
25
27
  // packages/plugins/plugin-kanban/src/types.ts
26
28
  var TypenameAnnotationId = Symbol.for("@dxos/plugin-kanban/annotation/Typename");
27
29
  var PivotColumnAnnotationId = Symbol.for("@dxos/plugin-kanban/annotation/PivotColumn");
28
- var CreateKanbanSchema = Schema.Struct({
29
- name: Schema.optional(Schema.String),
30
- typename: Schema.optional(Schema.String.annotations({
30
+ var CreateKanbanSchema = S.Struct({
31
+ name: S.optional(S.String),
32
+ typename: S.optional(S.String.annotations({
31
33
  [TypenameAnnotationId]: true,
32
- [SchemaAST.TitleAnnotationId]: "Select card schema (leave empty to start fresh)"
34
+ [TitleAnnotationId]: "Select card schema (leave empty to start fresh)"
33
35
  })),
34
- initialPivotColumn: Schema.optional(Schema.String.annotations({
36
+ initialPivotColumn: S.optional(S.String.annotations({
35
37
  [PivotColumnAnnotationId]: true,
36
- [SchemaAST.TitleAnnotationId]: "Pivot column"
38
+ [TitleAnnotationId]: "Pivot column"
37
39
  }))
38
40
  });
39
41
  var KanbanAction;
40
42
  (function(KanbanAction2) {
41
43
  const KANBAN_ACTION = `${KANBAN_PLUGIN}/action`;
42
- class Create extends Schema.TaggedClass()(`${KANBAN_ACTION}/create`, {
43
- input: Schema.extend(Schema.Struct({
44
+ class Create extends S.TaggedClass()(`${KANBAN_ACTION}/create`, {
45
+ input: S.extend(S.Struct({
44
46
  space: SpaceSchema
45
47
  }), CreateKanbanSchema),
46
- output: Schema.Struct({
48
+ output: S.Struct({
47
49
  object: KanbanType
48
50
  })
49
51
  }) {
50
52
  }
51
53
  KanbanAction2.Create = Create;
52
- class DeleteCardField extends Schema.TaggedClass()(`${KANBAN_ACTION}/delete-card-field`, {
53
- input: Schema.Struct({
54
+ class DeleteCardField extends S.TaggedClass()(`${KANBAN_ACTION}/delete-card-field`, {
55
+ input: S.Struct({
54
56
  kanban: KanbanType,
55
- fieldId: Schema.String,
57
+ fieldId: S.String,
56
58
  // TODO(wittjosiah): Separate fields for undo data?
57
- deletionData: Schema.optional(Schema.Struct({
59
+ deletionData: S.optional(S.Struct({
58
60
  field: FieldSchema,
59
61
  // TODO(wittjosiah): This creates a type error.
60
62
  // props: PropertySchema,
61
- props: Schema.Any,
62
- index: Schema.Number
63
+ props: S.Any,
64
+ index: S.Number
63
65
  }))
64
66
  }),
65
- output: Schema.Void
67
+ output: S.Void
66
68
  }) {
67
69
  }
68
70
  KanbanAction2.DeleteCardField = DeleteCardField;
69
- class DeleteCard extends Schema.TaggedClass()(`${KANBAN_ACTION}/delete-card`, {
70
- input: Schema.Struct({
71
- card: Schema.Any
71
+ class DeleteCard extends S.TaggedClass()(`${KANBAN_ACTION}/delete-card`, {
72
+ input: S.Struct({
73
+ card: S.Any
72
74
  }),
73
- output: Schema.Void
75
+ output: S.Void
74
76
  }) {
75
77
  }
76
78
  KanbanAction2.DeleteCard = DeleteCard;
77
79
  })(KanbanAction || (KanbanAction = {}));
78
80
  var isKanban = (object) => object != null && object instanceof KanbanType;
81
+ var createKanban = async ({ space, name, typename, initialPivotColumn }) => {
82
+ const { kanban } = await initializeKanban({
83
+ space,
84
+ name,
85
+ typename,
86
+ initialPivotColumn
87
+ });
88
+ return kanban;
89
+ };
79
90
 
80
91
  export {
81
92
  KANBAN_PLUGIN,
@@ -84,6 +95,7 @@ export {
84
95
  PivotColumnAnnotationId,
85
96
  CreateKanbanSchema,
86
97
  KanbanAction,
87
- isKanban
98
+ isKanban,
99
+ createKanban
88
100
  };
89
- //# sourceMappingURL=chunk-NOC32MF5.mjs.map
101
+ //# sourceMappingURL=chunk-2N7CO3DI.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types.ts", "../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { TitleAnnotationId } from 'effect/SchemaAST';\n\nimport { S } from '@dxos/echo-schema';\nimport { type Space, SpaceSchema } from '@dxos/react-client/echo';\nimport { KanbanType } from '@dxos/react-ui-kanban';\nimport { initializeKanban } from '@dxos/react-ui-kanban/testing';\nimport { FieldSchema } from '@dxos/schema';\n\nimport { KANBAN_PLUGIN } from './meta';\n\n/**\n * Kanban data model.\n * A Kanban board is a collection of columns, each of which contains a collection of items.\n * The layout of columns and items is controlled by models.\n * The underlying data model may be represented by direct object relationships\n * (e.g., a column object containing an array of ordered items) or projections constructed\n * by the model (e.g., a query of items based on metadata within a column object).\n */\n\n// TODO(burdon): Move to FormatEnum or SDK.\nexport const TypenameAnnotationId = Symbol.for('@dxos/plugin-kanban/annotation/Typename');\nexport const PivotColumnAnnotationId = Symbol.for('@dxos/plugin-kanban/annotation/PivotColumn');\n\nexport const CreateKanbanSchema = S.Struct({\n name: S.optional(S.String),\n typename: S.optional(\n S.String.annotations({\n [TypenameAnnotationId]: true,\n [TitleAnnotationId]: 'Select card schema (leave empty to start fresh)',\n }),\n ),\n initialPivotColumn: S.optional(\n S.String.annotations({\n [PivotColumnAnnotationId]: true,\n [TitleAnnotationId]: 'Pivot column',\n }),\n ),\n});\n\nexport type CreateKanbanType = S.Schema.Type<typeof CreateKanbanSchema>;\n\nexport namespace KanbanAction {\n const KANBAN_ACTION = `${KANBAN_PLUGIN}/action`;\n\n export class Create extends S.TaggedClass<Create>()(`${KANBAN_ACTION}/create`, {\n input: S.extend(S.Struct({ space: SpaceSchema }), CreateKanbanSchema),\n output: S.Struct({\n object: KanbanType,\n }),\n }) {}\n\n export class DeleteCardField extends S.TaggedClass<DeleteCardField>()(`${KANBAN_ACTION}/delete-card-field`, {\n input: S.Struct({\n kanban: KanbanType,\n fieldId: S.String,\n // TODO(wittjosiah): Separate fields for undo data?\n deletionData: S.optional(\n S.Struct({\n field: FieldSchema,\n // TODO(wittjosiah): This creates a type error.\n // props: PropertySchema,\n props: S.Any,\n index: S.Number,\n }),\n ),\n }),\n output: S.Void,\n }) {}\n\n export class DeleteCard extends S.TaggedClass<DeleteCard>()(`${KANBAN_ACTION}/delete-card`, {\n input: S.Struct({\n card: S.Any, // The card object to delete\n }),\n output: S.Void,\n }) {}\n}\n\n// TODO(burdon): Undo?\n// TODO(burdon): Typescript types (replace proto with annotations?)\n// TODO(burdon): Should pure components depend on ECHO? Relationship between ECHO object/array and Observable.\n// TODO(burdon): Can the plugin configure the object based on the data? E.g., how are the models constructed?\n// TODO(burdon): Create models. Simple first based on actual data.\n// Model is always a projection since the dragging state is tentative.\n\n// TODO(burdon): Extend model for moving items (in and across columns).\nexport interface KanbanModel {\n root: KanbanType;\n}\n\nexport type Location = {\n idx?: number;\n};\n\nexport const isKanban = (object: unknown): object is KanbanType => object != null && object instanceof KanbanType;\n\nexport const createKanban = async ({\n space,\n name,\n typename,\n initialPivotColumn,\n}: {\n space: Space;\n name?: string;\n typename?: string;\n initialPivotColumn?: string;\n}) => {\n const { kanban } = await initializeKanban({ space, name, typename, initialPivotColumn });\n return kanban;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const KANBAN_PLUGIN = 'dxos.org/plugin/kanban';\n\nexport const meta: PluginMeta = {\n id: KANBAN_PLUGIN,\n name: 'Kanban',\n description:\n 'Kanban allows you to explore Table data in sorted columns defined by your custom schema. You can use Kanbans to track progress or trigger custom automations when cards are moved from one state to another.',\n icon: 'ph--kanban--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-kanban',\n tags: ['experimental'],\n screenshots: ['https://dxos.network/plugin-details-kanban-dark.png'],\n};\n"],
5
+ "mappings": ";;;AAIA,SAASA,yBAAyB;AAElC,SAASC,SAAS;AAClB,SAAqBC,mBAAmB;AACxC,SAASC,kBAAkB;AAC3B,SAASC,wBAAwB;AACjC,SAASC,mBAAmB;;;ACJrB,IAAMC,gBAAgB;AAEtB,IAAMC,OAAmB;EAC9BC,IAAIF;EACJG,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;;;ADOO,IAAMC,uBAAuBC,OAAOC,IAAI,yCAAA;AACxC,IAAMC,0BAA0BF,OAAOC,IAAI,4CAAA;AAE3C,IAAME,qBAAqBC,EAAEC,OAAO;EACzCC,MAAMF,EAAEG,SAASH,EAAEI,MAAM;EACzBC,UAAUL,EAAEG,SACVH,EAAEI,OAAOE,YAAY;IACnB,CAACX,oBAAAA,GAAuB;IACxB,CAACY,iBAAAA,GAAoB;EACvB,CAAA,CAAA;EAEFC,oBAAoBR,EAAEG,SACpBH,EAAEI,OAAOE,YAAY;IACnB,CAACR,uBAAAA,GAA0B;IAC3B,CAACS,iBAAAA,GAAoB;EACvB,CAAA,CAAA;AAEJ,CAAA;;UAIiBE,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,aAAAA;EAElB,MAAMC,eAAeZ,EAAEa,YAAW,EAAW,GAAGH,aAAAA,WAAwB;IAC7EI,OAAOd,EAAEe,OAAOf,EAAEC,OAAO;MAAEe,OAAOC;IAAY,CAAA,GAAIlB,kBAAAA;IAClDmB,QAAQlB,EAAEC,OAAO;MACfkB,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBALSR,SAAAA;EAON,MAAMS,wBAAwBrB,EAAEa,YAAW,EAAoB,GAAGH,aAAAA,sBAAmC;IAC1GI,OAAOd,EAAEC,OAAO;MACdqB,QAAQF;MACRG,SAASvB,EAAEI;;MAEXoB,cAAcxB,EAAEG,SACdH,EAAEC,OAAO;QACPwB,OAAOC;;;QAGPC,OAAO3B,EAAE4B;QACTC,OAAO7B,EAAE8B;MACX,CAAA,CAAA;IAEJ,CAAA;IACAZ,QAAQlB,EAAE+B;EACZ,CAAA,EAAA;EAAI;gBAhBSV,kBAAAA;EAkBN,MAAMW,mBAAmBhC,EAAEa,YAAW,EAAe,GAAGH,aAAAA,gBAA6B;IAC1FI,OAAOd,EAAEC,OAAO;MACdgC,MAAMjC,EAAE4B;IACV,CAAA;IACAV,QAAQlB,EAAE+B;EACZ,CAAA,EAAA;EAAI;gBALSC,aAAAA;AAMf,GAlCiBvB,iBAAAA,eAAAA,CAAAA,EAAAA;AAoDV,IAAMyB,WAAW,CAACf,WAA0CA,UAAU,QAAQA,kBAAkBC;AAEhG,IAAMe,eAAe,OAAO,EACjCnB,OACAd,MACAG,UACAG,mBAAkB,MAMnB;AACC,QAAM,EAAEc,OAAM,IAAK,MAAMc,iBAAiB;IAAEpB;IAAOd;IAAMG;IAAUG;EAAmB,CAAA;AACtF,SAAOc;AACT;",
6
+ "names": ["TitleAnnotationId", "S", "SpaceSchema", "KanbanType", "initializeKanban", "FieldSchema", "KANBAN_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags", "screenshots", "TypenameAnnotationId", "Symbol", "for", "PivotColumnAnnotationId", "CreateKanbanSchema", "S", "Struct", "name", "optional", "String", "typename", "annotations", "TitleAnnotationId", "initialPivotColumn", "KanbanAction", "KANBAN_ACTION", "KANBAN_PLUGIN", "Create", "TaggedClass", "input", "extend", "space", "SpaceSchema", "output", "object", "KanbanType", "DeleteCardField", "kanban", "fieldId", "deletionData", "field", "FieldSchema", "props", "Any", "index", "Number", "Void", "DeleteCard", "card", "isKanban", "createKanban", "initializeKanban"]
7
+ }