@dxos/plugin-kanban 0.8.2-main.36232bc → 0.8.2-main.5885341

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 (75) hide show
  1. package/dist/lib/browser/{artifact-definition-SVNHDJQT.mjs → artifact-definition-OSLO5B6P.mjs} +2 -2
  2. package/dist/lib/browser/{chunk-K5BYEZ4Z.mjs → chunk-3MVG4VGQ.mjs} +2 -13
  3. package/dist/lib/browser/chunk-3MVG4VGQ.mjs.map +7 -0
  4. package/dist/lib/browser/index.mjs +4 -4
  5. package/dist/lib/browser/intent-resolver-OFEXRD4O.mjs +296 -0
  6. package/dist/lib/browser/intent-resolver-OFEXRD4O.mjs.map +7 -0
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/{react-surface-R25PYWQV.mjs → react-surface-RJ5WMSWU.mjs} +56 -26
  9. package/dist/lib/browser/react-surface-RJ5WMSWU.mjs.map +7 -0
  10. package/dist/lib/browser/types.mjs +1 -3
  11. package/dist/lib/node/{artifact-definition-M2XAYUI2.cjs → artifact-definition-ZOUZLESK.cjs} +11 -11
  12. package/dist/lib/node/{chunk-3EUR6ZR2.cjs → chunk-ZRCL6XVF.cjs} +4 -16
  13. package/dist/lib/node/chunk-ZRCL6XVF.cjs.map +7 -0
  14. package/dist/lib/node/index.cjs +16 -16
  15. package/dist/lib/node/intent-resolver-BCCCN7LD.cjs +307 -0
  16. package/dist/lib/node/intent-resolver-BCCCN7LD.cjs.map +7 -0
  17. package/dist/lib/node/meta.json +1 -1
  18. package/dist/lib/node/{react-surface-FVM64YAQ.cjs → react-surface-LQ7CQFWF.cjs} +61 -31
  19. package/dist/lib/node/react-surface-LQ7CQFWF.cjs.map +7 -0
  20. package/dist/lib/node/types.cjs +6 -8
  21. package/dist/lib/node/types.cjs.map +2 -2
  22. package/dist/lib/node-esm/{artifact-definition-HQ5I2OO5.mjs → artifact-definition-A7GJP5BI.mjs} +2 -2
  23. package/dist/lib/node-esm/{chunk-2N7CO3DI.mjs → chunk-ZJJYPR6C.mjs} +2 -13
  24. package/dist/lib/node-esm/chunk-ZJJYPR6C.mjs.map +7 -0
  25. package/dist/lib/node-esm/index.mjs +4 -4
  26. package/dist/lib/node-esm/intent-resolver-4LPFRDUP.mjs +297 -0
  27. package/dist/lib/node-esm/intent-resolver-4LPFRDUP.mjs.map +7 -0
  28. package/dist/lib/node-esm/meta.json +1 -1
  29. package/dist/lib/node-esm/{react-surface-LZ7MP3CQ.mjs → react-surface-C7CETLHO.mjs} +56 -26
  30. package/dist/lib/node-esm/react-surface-C7CETLHO.mjs.map +7 -0
  31. package/dist/lib/node-esm/types.mjs +1 -3
  32. package/dist/types/src/capabilities/index.d.ts +1 -1
  33. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  34. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  35. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  36. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  37. package/dist/types/src/components/KanbanContainer.d.ts.map +1 -1
  38. package/dist/types/src/components/KanbanContainer.stories.d.ts +10 -0
  39. package/dist/types/src/components/KanbanContainer.stories.d.ts.map +1 -0
  40. package/dist/types/src/testing/index.d.ts +3 -0
  41. package/dist/types/src/testing/index.d.ts.map +1 -0
  42. package/dist/types/src/testing/initialize-kanban.d.ts +17 -0
  43. package/dist/types/src/testing/initialize-kanban.d.ts.map +1 -0
  44. package/dist/types/src/testing/kanban-manager.d.ts +7 -0
  45. package/dist/types/src/testing/kanban-manager.d.ts.map +1 -0
  46. package/dist/types/src/testing/playwright/smoke.spec.d.ts +2 -0
  47. package/dist/types/src/testing/playwright/smoke.spec.d.ts.map +1 -0
  48. package/dist/types/src/types.d.ts +1 -8
  49. package/dist/types/src/types.d.ts.map +1 -1
  50. package/package.json +27 -24
  51. package/src/capabilities/intent-resolver.ts +10 -6
  52. package/src/capabilities/react-surface.tsx +37 -8
  53. package/src/components/KanbanContainer.stories.tsx +186 -0
  54. package/src/components/KanbanContainer.tsx +21 -8
  55. package/src/testing/index.ts +6 -0
  56. package/src/testing/initialize-kanban.ts +139 -0
  57. package/src/testing/kanban-manager.ts +13 -0
  58. package/src/testing/playwright/playwright.config.cts +18 -0
  59. package/src/testing/playwright/smoke.spec.ts +7 -0
  60. package/src/types.ts +1 -17
  61. package/dist/lib/browser/chunk-K5BYEZ4Z.mjs.map +0 -7
  62. package/dist/lib/browser/intent-resolver-XCDQ5N3Q.mjs +0 -132
  63. package/dist/lib/browser/intent-resolver-XCDQ5N3Q.mjs.map +0 -7
  64. package/dist/lib/browser/react-surface-R25PYWQV.mjs.map +0 -7
  65. package/dist/lib/node/chunk-3EUR6ZR2.cjs.map +0 -7
  66. package/dist/lib/node/intent-resolver-P3PSZO7H.cjs +0 -146
  67. package/dist/lib/node/intent-resolver-P3PSZO7H.cjs.map +0 -7
  68. package/dist/lib/node/react-surface-FVM64YAQ.cjs.map +0 -7
  69. package/dist/lib/node-esm/chunk-2N7CO3DI.mjs.map +0 -7
  70. package/dist/lib/node-esm/intent-resolver-4G47V67J.mjs +0 -133
  71. package/dist/lib/node-esm/intent-resolver-4G47V67J.mjs.map +0 -7
  72. package/dist/lib/node-esm/react-surface-LZ7MP3CQ.mjs.map +0 -7
  73. /package/dist/lib/browser/{artifact-definition-SVNHDJQT.mjs.map → artifact-definition-OSLO5B6P.mjs.map} +0 -0
  74. /package/dist/lib/node/{artifact-definition-M2XAYUI2.cjs.map → artifact-definition-ZOUZLESK.cjs.map} +0 -0
  75. /package/dist/lib/node-esm/{artifact-definition-HQ5I2OO5.mjs.map → artifact-definition-A7GJP5BI.mjs.map} +0 -0
@@ -26,42 +26,56 @@ 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_FVM64YAQ_exports = {};
30
- __export(react_surface_FVM64YAQ_exports, {
29
+ var react_surface_LQ7CQFWF_exports = {};
30
+ __export(react_surface_LQ7CQFWF_exports, {
31
31
  default: () => react_surface_default
32
32
  });
33
- module.exports = __toCommonJS(react_surface_FVM64YAQ_exports);
34
- var import_chunk_3EUR6ZR2 = require("./chunk-3EUR6ZR2.cjs");
33
+ module.exports = __toCommonJS(react_surface_LQ7CQFWF_exports);
34
+ var import_chunk_ZRCL6XVF = require("./chunk-ZRCL6XVF.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");
37
38
  var import_effect = require("@dxos/effect");
39
+ var import_plugin_client = require("@dxos/plugin-client");
40
+ var import_react_client = require("@dxos/react-client");
38
41
  var import_echo = require("@dxos/react-client/echo");
39
42
  var import_react_ui_form = require("@dxos/react-ui-form");
40
43
  var import_react2 = __toESM(require("react"));
41
44
  var import_app_framework2 = require("@dxos/app-framework");
45
+ var import_echo_schema2 = require("@dxos/echo-schema");
42
46
  var import_plugin_search = require("@dxos/plugin-search");
47
+ var import_react_client2 = require("@dxos/react-client");
43
48
  var import_echo2 = require("@dxos/react-client/echo");
44
49
  var import_react_ui_kanban = require("@dxos/react-ui-kanban");
45
50
  var import_react_ui_stack = require("@dxos/react-ui-stack");
46
51
  var import_schema = require("@dxos/schema");
47
52
  var import_react3 = __toESM(require("react"));
48
53
  var import_app_framework3 = require("@dxos/app-framework");
49
- var import_echo_schema = require("@dxos/echo-schema");
54
+ var import_echo_schema3 = require("@dxos/echo-schema");
50
55
  var import_invariant = require("@dxos/invariant");
51
- var import_react_client = require("@dxos/react-client");
56
+ var import_react_client3 = require("@dxos/react-client");
52
57
  var import_echo3 = require("@dxos/react-client/echo");
53
58
  var import_react_ui_form2 = require("@dxos/react-ui-form");
54
59
  var import_react_ui_kanban2 = require("@dxos/react-ui-kanban");
55
60
  var import_schema2 = require("@dxos/schema");
56
61
  var KanbanContainer = ({ kanban }) => {
62
+ const client = (0, import_react_client2.useClient)();
57
63
  const [cardSchema, setCardSchema] = (0, import_react2.useState)();
58
64
  const [projection, setProjection] = (0, import_react2.useState)();
59
65
  const space = (0, import_echo2.getSpace)(kanban);
60
66
  const { dispatchPromise: dispatch } = (0, import_app_framework2.useIntentDispatcher)();
67
+ const jsonSchema = (0, import_react2.useMemo)(() => cardSchema instanceof import_echo_schema2.EchoSchema ? cardSchema.jsonSchema : cardSchema ? (0, import_echo_schema2.toJsonSchema)(cardSchema) : void 0, [
68
+ cardSchema
69
+ ]);
61
70
  (0, import_react2.useEffect)(() => {
62
- if (kanban.cardView?.target?.query?.typename && space) {
71
+ const typename = kanban.cardView?.target?.query?.typename;
72
+ const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => (0, import_echo_schema2.getTypenameOrThrow)(schema) === typename);
73
+ if (staticSchema) {
74
+ setCardSchema(() => staticSchema);
75
+ }
76
+ if (!staticSchema && typename && space) {
63
77
  const query = space.db.schemaRegistry.query({
64
- typename: kanban.cardView.target.query.typename
78
+ typename
65
79
  });
66
80
  const unsubscribe = query.subscribe(() => {
67
81
  const [schema] = query.results;
@@ -78,13 +92,12 @@ var KanbanContainer = ({ kanban }) => {
78
92
  space
79
93
  ]);
80
94
  (0, import_react2.useEffect)(() => {
81
- if (kanban.cardView?.target && cardSchema) {
82
- setProjection(new import_schema.ViewProjection(cardSchema.jsonSchema, kanban.cardView.target));
95
+ if (kanban.cardView?.target && jsonSchema) {
96
+ setProjection(new import_schema.ViewProjection(jsonSchema, kanban.cardView.target));
83
97
  }
84
98
  }, [
85
99
  kanban.cardView?.target,
86
- cardSchema,
87
- JSON.stringify(cardSchema?.jsonSchema)
100
+ JSON.stringify(jsonSchema)
88
101
  ]);
89
102
  const objects = (0, import_echo2.useQuery)(space, cardSchema ? import_echo2.Filter.schema(cardSchema) : import_echo2.Filter.nothing());
90
103
  const filteredObjects = (0, import_plugin_search.useGlobalFilteredObjects)(objects);
@@ -109,7 +122,7 @@ var KanbanContainer = ({ kanban }) => {
109
122
  model
110
123
  ]);
111
124
  const handleRemoveCard = (0, import_react2.useCallback)((card) => {
112
- void dispatch((0, import_app_framework2.createIntent)(import_chunk_3EUR6ZR2.KanbanAction.DeleteCard, {
125
+ void dispatch((0, import_app_framework2.createIntent)(import_chunk_ZRCL6XVF.KanbanAction.DeleteCard, {
113
126
  card
114
127
  }));
115
128
  }, [
@@ -124,7 +137,7 @@ var KanbanContainer = ({ kanban }) => {
124
137
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-kanban/src/components/KanbanViewEditor.tsx";
125
138
  var KanbanViewEditor = ({ kanban }) => {
126
139
  const { dispatchPromise: dispatch } = (0, import_app_framework3.useIntentDispatcher)();
127
- const client = (0, import_react_client.useClient)();
140
+ const client = (0, import_react_client3.useClient)();
128
141
  const space = (0, import_echo3.getSpace)(kanban);
129
142
  const currentTypename = (0, import_react3.useMemo)(() => kanban?.cardView?.target?.query?.typename, [
130
143
  kanban?.cardView?.target?.query?.typename
@@ -151,7 +164,7 @@ var KanbanViewEditor = ({ kanban }) => {
151
164
  schema
152
165
  ]);
153
166
  const handleDelete = (0, import_react3.useCallback)((fieldId) => {
154
- void dispatch?.((0, import_app_framework3.createIntent)(import_chunk_3EUR6ZR2.KanbanAction.DeleteCardField, {
167
+ void dispatch?.((0, import_app_framework3.createIntent)(import_chunk_ZRCL6XVF.KanbanAction.DeleteCardField, {
155
168
  kanban,
156
169
  fieldId
157
170
  }));
@@ -169,7 +182,7 @@ var KanbanViewEditor = ({ kanban }) => {
169
182
  JSON.stringify(schema)
170
183
  ]);
171
184
  const fieldProjections = projection?.getFieldProjections() || [];
172
- const selectFields = fieldProjections.filter((field) => field.props.format === import_echo_schema.FormatEnum.SingleSelect).map(({ field }) => ({
185
+ const selectFields = fieldProjections.filter((field) => field.props.format === import_echo_schema3.FormatEnum.SingleSelect).map(({ field }) => ({
173
186
  value: field.id,
174
187
  label: field.path
175
188
  }));
@@ -210,52 +223,65 @@ var KanbanViewEditor = ({ kanban }) => {
210
223
  };
211
224
  var react_surface_default = () => (0, import_app_framework.contributes)(import_app_framework.Capabilities.ReactSurface, [
212
225
  (0, import_app_framework.createSurface)({
213
- id: `${import_chunk_3EUR6ZR2.KANBAN_PLUGIN}/kanban`,
226
+ id: `${import_chunk_ZRCL6XVF.KANBAN_PLUGIN}/kanban`,
214
227
  role: [
215
228
  "article",
216
229
  "section"
217
230
  ],
218
- filter: (data) => (0, import_chunk_3EUR6ZR2.isKanban)(data.subject),
231
+ filter: (data) => (0, import_chunk_ZRCL6XVF.isKanban)(data.subject),
219
232
  component: ({ data, role }) => /* @__PURE__ */ import_react.default.createElement(KanbanContainer, {
220
233
  kanban: data.subject,
221
234
  role
222
235
  })
223
236
  }),
224
237
  (0, import_app_framework.createSurface)({
225
- id: `${import_chunk_3EUR6ZR2.KANBAN_PLUGIN}/object-settings`,
238
+ id: `${import_chunk_ZRCL6XVF.KANBAN_PLUGIN}/object-settings`,
226
239
  role: "object-settings",
227
- filter: (data) => (0, import_chunk_3EUR6ZR2.isKanban)(data.subject),
240
+ filter: (data) => (0, import_chunk_ZRCL6XVF.isKanban)(data.subject),
228
241
  component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(KanbanViewEditor, {
229
242
  kanban: data.subject
230
243
  })
231
244
  }),
232
245
  (0, import_app_framework.createSurface)({
233
- id: `${import_chunk_3EUR6ZR2.KANBAN_PLUGIN}/create-initial-schema-form-[schema]`,
246
+ id: `${import_chunk_ZRCL6XVF.KANBAN_PLUGIN}/create-initial-schema-form`,
234
247
  role: "form-input",
235
248
  filter: (data) => {
236
- const annotation = (0, import_effect.findAnnotation)(data.schema.ast, import_chunk_3EUR6ZR2.TypenameAnnotationId);
249
+ if (data.prop !== "typename") {
250
+ return false;
251
+ }
252
+ const annotation = (0, import_effect.findAnnotation)(data.schema.ast, import_chunk_ZRCL6XVF.TypenameAnnotationId);
237
253
  return !!annotation;
238
254
  },
239
255
  component: ({ data: { target }, ...inputProps }) => {
256
+ const client = (0, import_react_client.useClient)();
240
257
  const props = inputProps;
241
258
  const space = (0, import_echo.isSpace)(target) ? target : (0, import_echo.getSpace)(target);
242
259
  if (!space) {
243
260
  return null;
244
261
  }
245
- const schemata = space?.db.schemaRegistry.query().runSync();
262
+ const schemaWhitelists = (0, import_app_framework.useCapabilities)(import_plugin_client.ClientCapabilities.SchemaWhiteList);
263
+ const whitelistedTypenames = (0, import_react.useMemo)(() => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => type.typename))), [
264
+ schemaWhitelists
265
+ ]);
266
+ const fixed = client.graph.schemaRegistry.schemas.filter((schema) => whitelistedTypenames.has((0, import_echo_schema.getTypenameOrThrow)(schema)));
267
+ const dynamic = space?.db.schemaRegistry.query().runSync();
268
+ const typenames = Array.from(/* @__PURE__ */ new Set([
269
+ ...fixed.map((schema) => (0, import_echo_schema.getTypenameOrThrow)(schema)),
270
+ ...dynamic.map((schema) => schema.typename)
271
+ ])).sort();
246
272
  return /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.SelectInput, {
247
273
  ...props,
248
- options: schemata.map((schema) => ({
249
- value: schema.typename
274
+ options: typenames.map((typename) => ({
275
+ value: typename
250
276
  }))
251
277
  });
252
278
  }
253
279
  }),
254
280
  (0, import_app_framework.createSurface)({
255
- id: `${import_chunk_3EUR6ZR2.KANBAN_PLUGIN}/create-initial-schema-form-[pivot-column]`,
281
+ id: `${import_chunk_ZRCL6XVF.KANBAN_PLUGIN}/create-initial-schema-form-[pivot-column]`,
256
282
  role: "form-input",
257
283
  filter: (data) => {
258
- const annotation = (0, import_effect.findAnnotation)(data.schema.ast, import_chunk_3EUR6ZR2.PivotColumnAnnotationId);
284
+ const annotation = (0, import_effect.findAnnotation)(data.schema.ast, import_chunk_ZRCL6XVF.PivotColumnAnnotationId);
259
285
  return !!annotation;
260
286
  },
261
287
  component: ({ data: { target }, ...inputProps }) => {
@@ -265,14 +291,17 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
265
291
  return null;
266
292
  }
267
293
  const { typename } = (0, import_react_ui_form.useFormValues)();
294
+ const schemaWhitelists = (0, import_app_framework.useCapabilities)(import_plugin_client.ClientCapabilities.SchemaWhiteList);
295
+ const staticSchema = schemaWhitelists.flat().find((schema) => (0, import_echo_schema.getTypenameOrThrow)(schema) === typename);
268
296
  const [selectedSchema] = space?.db.schemaRegistry.query({
269
297
  typename
270
298
  }).runSync();
271
299
  const singleSelectColumns = (0, import_react.useMemo)(() => {
272
- if (!selectedSchema?.jsonSchema?.properties) {
300
+ const properties = staticSchema ? (0, import_echo_schema.toJsonSchema)(staticSchema).properties : selectedSchema?.jsonSchema?.properties;
301
+ if (!properties) {
273
302
  return [];
274
303
  }
275
- const columns = Object.entries(selectedSchema.jsonSchema.properties).reduce((acc, [key, value]) => {
304
+ const columns = Object.entries(properties).reduce((acc, [key, value]) => {
276
305
  if (typeof value === "object" && value?.format === "single-select") {
277
306
  acc.push(key);
278
307
  }
@@ -280,7 +309,8 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
280
309
  }, []);
281
310
  return columns;
282
311
  }, [
283
- selectedSchema?.jsonSchema
312
+ selectedSchema?.jsonSchema,
313
+ staticSchema
284
314
  ]);
285
315
  if (!typename) {
286
316
  return null;
@@ -294,4 +324,4 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
294
324
  }
295
325
  })
296
326
  ]);
297
- //# sourceMappingURL=react-surface-FVM64YAQ.cjs.map
327
+ //# sourceMappingURL=react-surface-LQ7CQFWF.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, useCapabilities } from '@dxos/app-framework';\nimport { getTypenameOrThrow, toJsonSchema, type S } from '@dxos/echo-schema';\nimport { findAnnotation } from '@dxos/effect';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { type CollectionType } from '@dxos/plugin-space/types';\nimport { useClient } from '@dxos/react-client';\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`,\n role: 'form-input',\n filter: (data): data is { prop: string; schema: S.Schema<any>; target: Space | CollectionType | undefined } => {\n if (data.prop !== 'typename') {\n return false;\n }\n\n const annotation = findAnnotation<boolean>((data.schema as S.Schema.All).ast, TypenameAnnotationId);\n return !!annotation;\n },\n component: ({ data: { target }, ...inputProps }) => {\n const client = useClient();\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 schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);\n const whitelistedTypenames = useMemo(\n () => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => type.typename))),\n [schemaWhitelists],\n );\n\n const fixed = client.graph.schemaRegistry.schemas.filter((schema) =>\n whitelistedTypenames.has(getTypenameOrThrow(schema)),\n );\n const dynamic = space?.db.schemaRegistry.query().runSync();\n const typenames = Array.from(\n new Set<string>([\n ...fixed.map((schema) => getTypenameOrThrow(schema)),\n ...dynamic.map((schema) => schema.typename),\n ]),\n ).sort();\n\n return <SelectInput {...props} options={typenames.map((typename) => ({ value: 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 // TODO(wittjosiah): Unify this schema lookup.\n const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);\n const staticSchema = schemaWhitelists.flat().find((schema) => getTypenameOrThrow(schema) === typename);\n const [selectedSchema] = space?.db.schemaRegistry.query({ typename }).runSync();\n\n const singleSelectColumns = useMemo(() => {\n const properties = staticSchema\n ? toJsonSchema(staticSchema).properties\n : selectedSchema?.jsonSchema?.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?.jsonSchema, staticSchema]);\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, useMemo, useState } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { EchoSchema, getTypenameOrThrow, toJsonSchema, type TypedObject } from '@dxos/echo-schema';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, useQuery, getSpace, live } 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 client = useClient();\n const [cardSchema, setCardSchema] = useState<TypedObject<any, any>>();\n const [projection, setProjection] = useState<ViewProjection>();\n const space = getSpace(kanban);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const jsonSchema = useMemo(\n () =>\n cardSchema instanceof EchoSchema ? cardSchema.jsonSchema : cardSchema ? toJsonSchema(cardSchema) : undefined,\n [cardSchema],\n );\n\n useEffect(() => {\n const typename = kanban.cardView?.target?.query?.typename;\n const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => getTypenameOrThrow(schema) === typename);\n if (staticSchema) {\n setCardSchema(() => staticSchema as TypedObject<any, any>);\n }\n if (!staticSchema && typename && space) {\n const query = space.db.schemaRegistry.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 && jsonSchema) {\n setProjection(new ViewProjection(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, JSON.stringify(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 = live(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_schema", "import_react_client", "import_echo", "import_react_ui_form", "import_react_ui_kanban", "import_schema", "KanbanContainer", "kanban", "client", "useClient", "cardSchema", "setCardSchema", "useState", "projection", "setProjection", "space", "getSpace", "dispatchPromise", "dispatch", "useIntentDispatcher", "jsonSchema", "useMemo", "EchoSchema", "toJsonSchema", "undefined", "useEffect", "typename", "cardView", "target", "query", "staticSchema", "graph", "schemaRegistry", "schemas", "find", "schema", "getTypenameOrThrow", "db", "unsubscribe", "subscribe", "results", "fire", "ViewProjection", "JSON", "stringify", "objects", "useQuery", "Filter", "nothing", "filteredObjects", "useGlobalFilteredObjects", "model", "useKanbanModel", "items", "handleAddCard", "useCallback", "columnValue", "path", "columnFieldPath", "card", "live", "add", "id", "handleRemoveCard", "createIntent", "KanbanAction", "DeleteCard", "React", "StackItem", "Content", "Kanban", "onAddCard", "onRemoveCard", "KanbanViewEditor", "currentTypename", "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", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "KANBAN_PLUGIN", "role", "data", "isKanban", "subject", "component", "prop", "annotation", "findAnnotation", "ast", "TypenameAnnotationId", "inputProps", "isSpace", "schemaWhitelists", "useCapabilities", "ClientCapabilities", "SchemaWhiteList", "whitelistedTypenames", "Set", "flatMap", "typeArray", "type", "fixed", "has", "dynamic", "runSync", "typenames", "Array", "from", "sort", "PivotColumnAnnotationId", "useFormValues", "flat", "selectedSchema", "singleSelectColumns", "properties", "columns", "Object", "entries", "reduce", "acc", "key", "push", "column"]
7
+ }
@@ -18,22 +18,20 @@ 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_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
21
+ CreateKanbanSchema: () => import_chunk_ZRCL6XVF.CreateKanbanSchema,
22
+ KanbanAction: () => import_chunk_ZRCL6XVF.KanbanAction,
23
+ PivotColumnAnnotationId: () => import_chunk_ZRCL6XVF.PivotColumnAnnotationId,
24
+ TypenameAnnotationId: () => import_chunk_ZRCL6XVF.TypenameAnnotationId,
25
+ isKanban: () => import_chunk_ZRCL6XVF.isKanban
27
26
  });
28
27
  module.exports = __toCommonJS(types_exports);
29
- var import_chunk_3EUR6ZR2 = require("./chunk-3EUR6ZR2.cjs");
28
+ var import_chunk_ZRCL6XVF = require("./chunk-ZRCL6XVF.cjs");
30
29
  // Annotate the CommonJS export names for ESM import in node:
31
30
  0 && (module.exports = {
32
31
  CreateKanbanSchema,
33
32
  KanbanAction,
34
33
  PivotColumnAnnotationId,
35
34
  TypenameAnnotationId,
36
- createKanban,
37
35
  isKanban
38
36
  });
39
37
  //# 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 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;",
4
+ "sourcesContent": ["import {\n CreateKanbanSchema,\n KanbanAction,\n PivotColumnAnnotationId,\n TypenameAnnotationId,\n isKanban\n} from \"./chunk-ZRCL6XVF.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;",
6
6
  "names": []
7
7
  }
@@ -2,7 +2,7 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  KanbanAction,
4
4
  meta
5
- } from "./chunk-2N7CO3DI.mjs";
5
+ } from "./chunk-ZJJYPR6C.mjs";
6
6
 
7
7
  // packages/plugins/plugin-kanban/src/capabilities/artifact-definition.ts
8
8
  import { pipe } from "effect";
@@ -175,4 +175,4 @@ var artifact_definition_default = () => {
175
175
  export {
176
176
  artifact_definition_default as default
177
177
  };
178
- //# sourceMappingURL=artifact-definition-HQ5I2OO5.mjs.map
178
+ //# sourceMappingURL=artifact-definition-A7GJP5BI.mjs.map
@@ -5,7 +5,6 @@ import { TitleAnnotationId } from "effect/SchemaAST";
5
5
  import { S } from "@dxos/echo-schema";
6
6
  import { SpaceSchema } from "@dxos/react-client/echo";
7
7
  import { KanbanType } from "@dxos/react-ui-kanban";
8
- import { initializeKanban } from "@dxos/react-ui-kanban/testing";
9
8
  import { FieldSchema } from "@dxos/schema";
10
9
 
11
10
  // packages/plugins/plugin-kanban/src/meta.ts
@@ -78,15 +77,6 @@ var KanbanAction;
78
77
  KanbanAction2.DeleteCard = DeleteCard;
79
78
  })(KanbanAction || (KanbanAction = {}));
80
79
  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
- };
90
80
 
91
81
  export {
92
82
  KANBAN_PLUGIN,
@@ -95,7 +85,6 @@ export {
95
85
  PivotColumnAnnotationId,
96
86
  CreateKanbanSchema,
97
87
  KanbanAction,
98
- isKanban,
99
- createKanban
88
+ isKanban
100
89
  };
101
- //# sourceMappingURL=chunk-2N7CO3DI.mjs.map
90
+ //# sourceMappingURL=chunk-ZJJYPR6C.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 { SpaceSchema } from '@dxos/react-client/echo';\nimport { KanbanType } from '@dxos/react-ui-kanban';\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", "//\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,SAASC,mBAAmB;AAC5B,SAASC,kBAAkB;AAC3B,SAASC,mBAAmB;;;ACHrB,IAAMC,gBAAgB;AAEtB,IAAMC,OAAmB;EAC9BC,IAAIF;EACJG,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;;;ADMO,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;",
6
+ "names": ["TitleAnnotationId", "S", "SpaceSchema", "KanbanType", "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"]
7
+ }
@@ -4,7 +4,7 @@ import {
4
4
  KANBAN_PLUGIN,
5
5
  KanbanAction,
6
6
  meta
7
- } from "./chunk-2N7CO3DI.mjs";
7
+ } from "./chunk-ZJJYPR6C.mjs";
8
8
 
9
9
  // packages/plugins/plugin-kanban/src/KanbanPlugin.tsx
10
10
  import { createIntent, defineModule, contributes, Capabilities, Events, definePlugin } from "@dxos/app-framework";
@@ -15,9 +15,9 @@ import { KanbanType as KanbanType2, translations as kanbanTranslations } from "@
15
15
 
16
16
  // packages/plugins/plugin-kanban/src/capabilities/index.ts
17
17
  import { lazy } from "@dxos/app-framework";
18
- var ArtifactDefinition = lazy(() => import("./artifact-definition-HQ5I2OO5.mjs"));
19
- var IntentResolver = lazy(() => import("./intent-resolver-4G47V67J.mjs"));
20
- var ReactSurface = lazy(() => import("./react-surface-LZ7MP3CQ.mjs"));
18
+ var ArtifactDefinition = lazy(() => import("./artifact-definition-A7GJP5BI.mjs"));
19
+ var IntentResolver = lazy(() => import("./intent-resolver-4LPFRDUP.mjs"));
20
+ var ReactSurface = lazy(() => import("./react-surface-C7CETLHO.mjs"));
21
21
 
22
22
  // packages/plugins/plugin-kanban/src/translations.ts
23
23
  import { KanbanType } from "@dxos/react-ui-kanban";