@dxos/plugin-kanban 0.8.4-main.67995b8 → 0.8.4-main.70d3990

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 (78) hide show
  1. package/dist/lib/browser/blueprint-definition-UYVX622Q.mjs +28 -0
  2. package/dist/lib/browser/blueprint-definition-UYVX622Q.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-MUK4JV7A.mjs → chunk-B7EZTXV2.mjs} +35 -42
  4. package/dist/lib/browser/chunk-B7EZTXV2.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +31 -33
  6. package/dist/lib/browser/index.mjs.map +3 -3
  7. package/dist/lib/browser/{intent-resolver-6GPK64NB.mjs → intent-resolver-ANBDVEJ2.mjs} +20 -17
  8. package/dist/lib/browser/intent-resolver-ANBDVEJ2.mjs.map +7 -0
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/{react-surface-Y2GO6B24.mjs → react-surface-7ONRKYBB.mjs} +66 -80
  11. package/dist/lib/browser/react-surface-7ONRKYBB.mjs.map +7 -0
  12. package/dist/lib/browser/types/index.mjs +3 -3
  13. package/dist/lib/node-esm/blueprint-definition-42P47FUY.mjs +30 -0
  14. package/dist/lib/node-esm/blueprint-definition-42P47FUY.mjs.map +7 -0
  15. package/dist/lib/node-esm/{chunk-2GCFRKS2.mjs → chunk-WBN5YQGD.mjs} +35 -42
  16. package/dist/lib/node-esm/chunk-WBN5YQGD.mjs.map +7 -0
  17. package/dist/lib/node-esm/index.mjs +31 -33
  18. package/dist/lib/node-esm/index.mjs.map +3 -3
  19. package/dist/lib/node-esm/{intent-resolver-CXHLNVEN.mjs → intent-resolver-X4UZDRI7.mjs} +20 -17
  20. package/dist/lib/node-esm/intent-resolver-X4UZDRI7.mjs.map +7 -0
  21. package/dist/lib/node-esm/meta.json +1 -1
  22. package/dist/lib/node-esm/{react-surface-UEQNH6S4.mjs → react-surface-D7XTGTZL.mjs} +66 -80
  23. package/dist/lib/node-esm/react-surface-D7XTGTZL.mjs.map +7 -0
  24. package/dist/lib/node-esm/types/index.mjs +3 -3
  25. package/dist/types/src/KanbanPlugin.d.ts +1 -1
  26. package/dist/types/src/KanbanPlugin.d.ts.map +1 -1
  27. package/dist/types/src/capabilities/artifact-definition.d.ts +1 -1
  28. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  29. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  30. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  31. package/dist/types/src/capabilities/index.d.ts +3 -3
  32. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  33. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  34. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  35. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  36. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  37. package/dist/types/src/components/KanbanContainer.d.ts +3 -3
  38. package/dist/types/src/components/KanbanContainer.d.ts.map +1 -1
  39. package/dist/types/src/components/KanbanContainer.stories.d.ts +50 -6
  40. package/dist/types/src/components/KanbanContainer.stories.d.ts.map +1 -1
  41. package/dist/types/src/components/KanbanViewEditor.d.ts +3 -3
  42. package/dist/types/src/components/KanbanViewEditor.d.ts.map +1 -1
  43. package/dist/types/src/meta.d.ts +0 -1
  44. package/dist/types/src/meta.d.ts.map +1 -1
  45. package/dist/types/src/translations.d.ts +21 -9
  46. package/dist/types/src/translations.d.ts.map +1 -1
  47. package/dist/types/src/types/index.d.ts +0 -1
  48. package/dist/types/src/types/index.d.ts.map +1 -1
  49. package/dist/types/src/types/schema.d.ts +15 -54
  50. package/dist/types/src/types/schema.d.ts.map +1 -1
  51. package/dist/types/tsconfig.tsbuildinfo +1 -1
  52. package/package.json +45 -44
  53. package/src/KanbanPlugin.tsx +49 -54
  54. package/src/capabilities/artifact-definition.ts +15 -11
  55. package/src/capabilities/blueprint-definition.ts +30 -0
  56. package/src/capabilities/index.ts +1 -1
  57. package/src/capabilities/intent-resolver.ts +11 -15
  58. package/src/capabilities/react-surface.tsx +21 -22
  59. package/src/components/KanbanContainer.stories.tsx +50 -62
  60. package/src/components/KanbanContainer.tsx +15 -28
  61. package/src/components/KanbanViewEditor.tsx +23 -22
  62. package/src/meta.ts +7 -5
  63. package/src/translations.ts +6 -6
  64. package/src/types/index.ts +0 -1
  65. package/src/types/schema.ts +22 -10
  66. package/dist/lib/browser/artifact-definition-NIFSAHUK.mjs +0 -174
  67. package/dist/lib/browser/artifact-definition-NIFSAHUK.mjs.map +0 -7
  68. package/dist/lib/browser/chunk-MUK4JV7A.mjs.map +0 -7
  69. package/dist/lib/browser/intent-resolver-6GPK64NB.mjs.map +0 -7
  70. package/dist/lib/browser/react-surface-Y2GO6B24.mjs.map +0 -7
  71. package/dist/lib/node-esm/artifact-definition-NACXLTWB.mjs +0 -175
  72. package/dist/lib/node-esm/artifact-definition-NACXLTWB.mjs.map +0 -7
  73. package/dist/lib/node-esm/chunk-2GCFRKS2.mjs.map +0 -7
  74. package/dist/lib/node-esm/intent-resolver-CXHLNVEN.mjs.map +0 -7
  75. package/dist/lib/node-esm/react-surface-UEQNH6S4.mjs.map +0 -7
  76. package/dist/types/src/types/kanban.d.ts +0 -11
  77. package/dist/types/src/types/kanban.d.ts.map +0 -1
  78. package/src/types/kanban.ts +0 -29
@@ -1,50 +1,40 @@
1
1
  import {
2
2
  KanbanAction,
3
3
  PivotColumnAnnotationId,
4
+ SettingsSchema,
4
5
  meta
5
- } from "./chunk-MUK4JV7A.mjs";
6
+ } from "./chunk-B7EZTXV2.mjs";
6
7
 
7
8
  // src/capabilities/react-surface.tsx
8
- import React3, { useMemo as useMemo3 } from "react";
9
- import { Capabilities, contributes, createSurface, useCapabilities } from "@dxos/app-framework";
10
- import { Obj as Obj2, Type as Type3 } from "@dxos/echo";
9
+ import React3, { useMemo as useMemo2 } from "react";
10
+ import { Capabilities, contributes, createSurface } from "@dxos/app-framework";
11
+ import { Obj as Obj2, Type as Type2 } from "@dxos/echo";
11
12
  import { findAnnotation } from "@dxos/effect";
12
- import { ClientCapabilities } from "@dxos/plugin-client";
13
13
  import { getSpace as getSpace3, isSpace } from "@dxos/react-client/echo";
14
14
  import { SelectInput as SelectInput2, useFormValues } from "@dxos/react-ui-form";
15
- import { KanbanView } from "@dxos/react-ui-kanban";
16
- import { DataType } from "@dxos/schema";
15
+ import { Kanban } from "@dxos/react-ui-kanban/types";
17
16
 
18
17
  // src/components/KanbanContainer.tsx
19
18
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
20
- import React, { useCallback, useEffect, useMemo, useState } from "react";
21
- import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
19
+ import React, { useCallback, useEffect, useState } from "react";
20
+ import { createIntent } from "@dxos/app-framework";
21
+ import { useIntentDispatcher } from "@dxos/app-framework/react";
22
22
  import { Filter, Obj, Type } from "@dxos/echo";
23
- import { EchoSchema } from "@dxos/echo-schema";
24
23
  import { useGlobalFilteredObjects } from "@dxos/plugin-search";
25
24
  import { useClient } from "@dxos/react-client";
26
- import { useQuery, getSpace } from "@dxos/react-client/echo";
27
- import { useKanbanModel, Kanban } from "@dxos/react-ui-kanban";
25
+ import { getSpace, useQuery } from "@dxos/react-client/echo";
26
+ import { Kanban as KanbanComponent, useKanbanModel, useProjectionModel } from "@dxos/react-ui-kanban";
28
27
  import { StackItem } from "@dxos/react-ui-stack";
29
- import { ProjectionModel } from "@dxos/schema";
30
- var KanbanContainer = ({ view }) => {
28
+ import { getTypenameFromQuery } from "@dxos/schema";
29
+ var KanbanContainer = ({ object }) => {
31
30
  var _effect = _useSignals();
32
31
  try {
33
32
  const client = useClient();
34
33
  const [cardSchema, setCardSchema] = useState();
35
- const [projection, setProjection] = useState();
36
- const space = getSpace(view);
34
+ const space = getSpace(object);
37
35
  const { dispatchPromise: dispatch } = useIntentDispatcher();
38
- const jsonSchema = useMemo(() => {
39
- if (!cardSchema) {
40
- return void 0;
41
- }
42
- return cardSchema instanceof EchoSchema ? cardSchema.jsonSchema : Type.toJsonSchema(cardSchema);
43
- }, [
44
- cardSchema
45
- ]);
36
+ const typename = object.view.target?.query ? getTypenameFromQuery(object.view.target.query.ast) : void 0;
46
37
  useEffect(() => {
47
- const typename = view.query.typename;
48
38
  const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename);
49
39
  if (staticSchema) {
50
40
  setCardSchema(() => staticSchema);
@@ -64,22 +54,14 @@ var KanbanContainer = ({ view }) => {
64
54
  return unsubscribe;
65
55
  }
66
56
  }, [
67
- view.query.typename,
57
+ typename,
68
58
  space
69
59
  ]);
70
- useEffect(() => {
71
- if (jsonSchema) {
72
- setProjection(new ProjectionModel(jsonSchema, view.projection));
73
- }
74
- }, [
75
- view.projection,
76
- JSON.stringify(jsonSchema)
77
- ]);
78
60
  const objects = useQuery(space, cardSchema ? Filter.type(cardSchema) : Filter.nothing());
79
61
  const filteredObjects = useGlobalFilteredObjects(objects);
62
+ const projection = useProjectionModel(cardSchema, object);
80
63
  const model = useKanbanModel({
81
- view,
82
- schema: cardSchema,
64
+ object,
83
65
  projection,
84
66
  items: filteredObjects
85
67
  });
@@ -104,7 +86,7 @@ var KanbanContainer = ({ view }) => {
104
86
  }, [
105
87
  dispatch
106
88
  ]);
107
- return /* @__PURE__ */ React.createElement(StackItem.Content, null, model && /* @__PURE__ */ React.createElement(Kanban, {
89
+ return /* @__PURE__ */ React.createElement(StackItem.Content, null, model && /* @__PURE__ */ React.createElement(KanbanComponent, {
108
90
  model,
109
91
  onAddCard: handleAddCard,
110
92
  onRemoveCard: handleRemoveCard
@@ -116,49 +98,49 @@ var KanbanContainer = ({ view }) => {
116
98
 
117
99
  // src/components/KanbanViewEditor.tsx
118
100
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
119
- import React2, { useCallback as useCallback2, useMemo as useMemo2 } from "react";
120
- import { Type as Type2 } from "@dxos/echo";
121
- import { EchoSchema as EchoSchema2, FormatEnum } from "@dxos/echo-schema";
101
+ import React2, { useCallback as useCallback2, useMemo } from "react";
102
+ import { Format } from "@dxos/echo/internal";
103
+ import { invariant } from "@dxos/invariant";
122
104
  import { useClient as useClient2 } from "@dxos/react-client";
123
105
  import { getSpace as getSpace2, useSchema } from "@dxos/react-client/echo";
124
106
  import { Form, SelectInput } from "@dxos/react-ui-form";
125
- import { KanbanSettingsSchema } from "@dxos/react-ui-kanban";
126
- import { ProjectionModel as ProjectionModel2 } from "@dxos/schema";
127
- var KanbanViewEditor = ({ view }) => {
107
+ import { useProjectionModel as useProjectionModel2 } from "@dxos/react-ui-kanban";
108
+ import { getTypenameFromQuery as getTypenameFromQuery2 } from "@dxos/schema";
109
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-kanban/src/components/KanbanViewEditor.tsx";
110
+ var KanbanViewEditor = ({ object }) => {
128
111
  var _effect = _useSignals2();
129
112
  try {
130
113
  const client = useClient2();
131
- const space = getSpace2(view);
132
- const kanban = view.presentation.target;
133
- const currentTypename = useMemo2(() => view.query.typename, [
134
- view.query.typename
135
- ]);
114
+ const space = getSpace2(object);
115
+ const view = object.view.target;
116
+ const currentTypename = view?.query ? getTypenameFromQuery2(view.query.ast) : void 0;
136
117
  const schema = useSchema(client, space, currentTypename);
137
- const projection = useMemo2(() => {
138
- if (schema) {
139
- const jsonSchema = schema instanceof EchoSchema2 ? schema.jsonSchema : Type2.toJsonSchema(schema);
140
- return new ProjectionModel2(jsonSchema, view.projection);
141
- }
142
- }, [
143
- view.projection,
144
- JSON.stringify(schema)
145
- ]);
118
+ const projection = useProjectionModel2(schema, object);
146
119
  const fieldProjections = projection?.getFieldProjections() || [];
147
- const selectFields = fieldProjections.filter((field) => field.props.format === FormatEnum.SingleSelect).map(({ field }) => ({
120
+ const selectFields = fieldProjections.filter((field) => field.props.format === Format.TypeFormat.SingleSelect).map(({ field }) => ({
148
121
  value: field.id,
149
122
  label: field.path
150
123
  }));
151
124
  const handleSave = useCallback2((values) => {
152
- kanban.columnFieldId = values.columnFieldId;
125
+ invariant(view, void 0, {
126
+ F: __dxlog_file,
127
+ L: 35,
128
+ S: void 0,
129
+ A: [
130
+ "view",
131
+ ""
132
+ ]
133
+ });
134
+ view.projection.pivotFieldId = values.columnFieldId;
153
135
  }, [
154
- kanban
136
+ view
155
137
  ]);
156
- const initialValues = useMemo2(() => ({
157
- columnFieldId: kanban.columnFieldId
138
+ const initialValues = useMemo(() => ({
139
+ columnFieldId: view?.projection.pivotFieldId
158
140
  }), [
159
- kanban.columnFieldId
141
+ view?.projection.pivotFieldId
160
142
  ]);
161
- const custom = useMemo2(() => ({
143
+ const custom = useMemo(() => ({
162
144
  columnFieldId: (props) => /* @__PURE__ */ React2.createElement(SelectInput, {
163
145
  ...props,
164
146
  options: selectFields
@@ -168,7 +150,7 @@ var KanbanViewEditor = ({ view }) => {
168
150
  ]);
169
151
  return /* @__PURE__ */ React2.createElement(Form, {
170
152
  Custom: custom,
171
- schema: KanbanSettingsSchema,
153
+ schema: SettingsSchema,
172
154
  values: initialValues,
173
155
  onSave: handleSave,
174
156
  autoSave: true,
@@ -181,16 +163,16 @@ var KanbanViewEditor = ({ view }) => {
181
163
  };
182
164
 
183
165
  // src/capabilities/react-surface.tsx
184
- var react_surface_default = () => contributes(Capabilities.ReactSurface, [
166
+ var react_surface_default = (() => contributes(Capabilities.ReactSurface, [
185
167
  createSurface({
186
168
  id: meta.id,
187
169
  role: [
188
170
  "article",
189
171
  "section"
190
172
  ],
191
- filter: (data) => Obj2.instanceOf(DataType.View, data.subject) && Obj2.instanceOf(KanbanView, data.subject.presentation.target),
173
+ filter: (data) => Obj2.instanceOf(Kanban.Kanban, data.subject),
192
174
  component: ({ data, role }) => /* @__PURE__ */ React3.createElement(KanbanContainer, {
193
- view: data.subject,
175
+ object: data.subject,
194
176
  role
195
177
  })
196
178
  }),
@@ -198,9 +180,9 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
198
180
  id: `${meta.id}/object-settings`,
199
181
  role: "object-settings",
200
182
  position: "hoist",
201
- filter: (data) => Obj2.instanceOf(DataType.View, data.subject) && Obj2.instanceOf(KanbanView, data.subject.presentation.target),
183
+ filter: (data) => Obj2.instanceOf(Kanban.Kanban, data.subject),
202
184
  component: ({ data }) => /* @__PURE__ */ React3.createElement(KanbanViewEditor, {
203
- view: data.subject
185
+ object: data.subject
204
186
  })
205
187
  }),
206
188
  createSurface({
@@ -217,13 +199,18 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
217
199
  return null;
218
200
  }
219
201
  const { typename } = useFormValues();
220
- const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
221
- const staticSchema = schemaWhitelists.flat().find((schema) => Type3.getTypename(schema) === typename);
222
- const [selectedSchema] = space?.db.schemaRegistry.query({
202
+ const [selectedSchema] = useMemo2(() => space?.db.schemaRegistry.query({
203
+ location: [
204
+ "database",
205
+ "runtime"
206
+ ],
207
+ typename
208
+ }).runSync(), [
209
+ space,
223
210
  typename
224
- }).runSync();
225
- const singleSelectColumns = useMemo3(() => {
226
- const properties = staticSchema ? Type3.toJsonSchema(staticSchema).properties : selectedSchema?.jsonSchema?.properties;
211
+ ]);
212
+ const singleSelectColumns = useMemo2(() => {
213
+ const properties = Type2.toJsonSchema(selectedSchema).properties;
227
214
  if (!properties) {
228
215
  return [];
229
216
  }
@@ -235,8 +222,7 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
235
222
  }, []);
236
223
  return columns;
237
224
  }, [
238
- selectedSchema?.jsonSchema,
239
- staticSchema
225
+ selectedSchema
240
226
  ]);
241
227
  if (!typename) {
242
228
  return null;
@@ -249,8 +235,8 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
249
235
  });
250
236
  }
251
237
  })
252
- ]);
238
+ ]));
253
239
  export {
254
240
  react_surface_default as default
255
241
  };
256
- //# sourceMappingURL=react-surface-Y2GO6B24.mjs.map
242
+ //# sourceMappingURL=react-surface-7ONRKYBB.mjs.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 type * as Schema from 'effect/Schema';\nimport React, { useMemo } from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { Obj, Type } from '@dxos/echo';\nimport { findAnnotation } from '@dxos/effect';\nimport { type Space, getSpace, isSpace } from '@dxos/react-client/echo';\nimport { type InputProps, SelectInput, useFormValues } from '@dxos/react-ui-form';\nimport { Kanban } from '@dxos/react-ui-kanban/types';\nimport { type Collection } from '@dxos/schema';\n\nimport { KanbanContainer, KanbanViewEditor } from '../components';\nimport { meta } from '../meta';\nimport { PivotColumnAnnotationId } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: meta.id,\n role: ['article', 'section'],\n filter: (data): data is { subject: Kanban.Kanban } => Obj.instanceOf(Kanban.Kanban, data.subject),\n component: ({ data, role }) => <KanbanContainer object={data.subject} role={role} />,\n }),\n createSurface({\n id: `${meta.id}/object-settings`,\n role: 'object-settings',\n position: 'hoist',\n filter: (data): data is { subject: Kanban.Kanban } => Obj.instanceOf(Kanban.Kanban, data.subject),\n component: ({ data }) => <KanbanViewEditor object={data.subject} />,\n }),\n createSurface({\n id: `${meta.id}/create-initial-schema-form-[pivot-column]`,\n role: 'form-input',\n filter: (\n data,\n ): data is {\n prop: string;\n schema: Schema.Schema<any>;\n target: Space | Collection.Collection | undefined;\n } => {\n const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, PivotColumnAnnotationId);\n return !!annotation;\n },\n component: ({ data: { target }, ...inputProps }) => {\n const props = inputProps as any as InputProps;\n const space = isSpace(target) ? target : getSpace(target);\n if (!space) {\n return null;\n }\n\n const { typename } = useFormValues();\n const [selectedSchema] = useMemo(\n () => space?.db.schemaRegistry.query({ location: ['database', 'runtime'], typename }).runSync(),\n [space, typename],\n );\n const singleSelectColumns = useMemo(() => {\n const properties = Type.toJsonSchema(selectedSchema).properties;\n if (!properties) {\n return [];\n }\n\n const columns = Object.entries(properties).reduce<string[]>((acc, [key, value]) => {\n if (typeof value === 'object' && value?.format === 'single-select') {\n acc.push(key);\n }\n return acc;\n }, []);\n\n return columns;\n }, [selectedSchema]);\n\n if (!typename) {\n return null;\n }\n\n return <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 } from '@dxos/app-framework';\nimport { useIntentDispatcher } from '@dxos/app-framework/react';\nimport { Filter, Obj, Type } from '@dxos/echo';\nimport { type TypedObject } from '@dxos/echo/internal';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { useClient } from '@dxos/react-client';\nimport { getSpace, useQuery } from '@dxos/react-client/echo';\nimport { Kanban as KanbanComponent, useKanbanModel, useProjectionModel } from '@dxos/react-ui-kanban';\nimport { type Kanban } from '@dxos/react-ui-kanban/types';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { getTypenameFromQuery } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\nexport const KanbanContainer = ({ object }: { object: Kanban.Kanban; role: string }) => {\n const client = useClient();\n const [cardSchema, setCardSchema] = useState<TypedObject<any, any>>();\n const space = getSpace(object);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const typename = object.view.target?.query ? getTypenameFromQuery(object.view.target.query.ast) : undefined;\n\n useEffect(() => {\n const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(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 }, [typename, space]);\n\n const objects = useQuery(space, cardSchema ? Filter.type(cardSchema) : Filter.nothing());\n const filteredObjects = useGlobalFilteredObjects(objects);\n\n const projection = useProjectionModel(cardSchema, object);\n const model = useKanbanModel({\n object,\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 = Obj.make(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 && <KanbanComponent 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 { Format } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { useClient } from '@dxos/react-client';\nimport { getSpace, useSchema } from '@dxos/react-client/echo';\nimport { type CustomInputMap, Form, SelectInput } from '@dxos/react-ui-form';\nimport { useProjectionModel } from '@dxos/react-ui-kanban';\nimport { type Kanban } from '@dxos/react-ui-kanban/types';\nimport { getTypenameFromQuery } from '@dxos/schema';\n\nimport { SettingsSchema } from '../types';\n\ntype KanbanViewEditorProps = { object: Kanban.Kanban };\n\nexport const KanbanViewEditor = ({ object }: KanbanViewEditorProps) => {\n const client = useClient();\n const space = getSpace(object);\n const view = object.view.target;\n const currentTypename = view?.query ? getTypenameFromQuery(view.query.ast) : undefined;\n const schema = useSchema(client, space, currentTypename);\n const projection = useProjectionModel(schema, object);\n\n const fieldProjections = projection?.getFieldProjections() || [];\n const selectFields = fieldProjections\n .filter((field) => field.props.format === Format.TypeFormat.SingleSelect)\n .map(({ field }) => ({ value: field.id, label: field.path }));\n\n const handleSave = useCallback(\n (values: Partial<{ columnFieldId: string }>) => {\n invariant(view);\n view.projection.pivotFieldId = values.columnFieldId;\n },\n [view],\n );\n\n const initialValues = useMemo(\n () => ({ columnFieldId: view?.projection.pivotFieldId }),\n [view?.projection.pivotFieldId],\n );\n const custom: CustomInputMap = useMemo(\n () => ({ columnFieldId: (props) => <SelectInput {...props} options={selectFields} /> }),\n [selectFields],\n );\n\n return (\n <Form\n Custom={custom}\n schema={SettingsSchema}\n values={initialValues}\n onSave={handleSave}\n autoSave\n outerSpacing={false}\n classNames='pbs-inputSpacingBlock'\n />\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useMemo", "Capabilities", "contributes", "createSurface", "Obj", "Type", "findAnnotation", "getSpace", "isSpace", "SelectInput", "useFormValues", "Kanban", "React", "useCallback", "useEffect", "useState", "createIntent", "useIntentDispatcher", "Filter", "Obj", "Type", "useGlobalFilteredObjects", "useClient", "getSpace", "useQuery", "Kanban", "KanbanComponent", "useKanbanModel", "useProjectionModel", "StackItem", "getTypenameFromQuery", "KanbanContainer", "object", "client", "useClient", "cardSchema", "setCardSchema", "useState", "space", "getSpace", "dispatchPromise", "dispatch", "useIntentDispatcher", "typename", "view", "target", "query", "getTypenameFromQuery", "ast", "undefined", "useEffect", "staticSchema", "graph", "schemaRegistry", "schemas", "find", "schema", "Type", "getTypename", "db", "unsubscribe", "subscribe", "results", "fire", "objects", "useQuery", "Filter", "type", "nothing", "filteredObjects", "useGlobalFilteredObjects", "projection", "useProjectionModel", "model", "useKanbanModel", "items", "handleAddCard", "useCallback", "columnValue", "path", "columnFieldPath", "card", "Obj", "make", "add", "id", "handleRemoveCard", "createIntent", "KanbanAction", "DeleteCard", "StackItem", "Content", "KanbanComponent", "onAddCard", "onRemoveCard", "React", "useCallback", "useMemo", "Format", "invariant", "useClient", "getSpace", "useSchema", "Form", "SelectInput", "useProjectionModel", "getTypenameFromQuery", "KanbanViewEditor", "object", "client", "useClient", "space", "getSpace", "view", "target", "currentTypename", "query", "getTypenameFromQuery", "ast", "undefined", "schema", "useSchema", "projection", "useProjectionModel", "fieldProjections", "getFieldProjections", "selectFields", "filter", "field", "props", "format", "Format", "TypeFormat", "SingleSelect", "map", "value", "id", "label", "path", "handleSave", "useCallback", "values", "invariant", "pivotFieldId", "columnFieldId", "initialValues", "useMemo", "custom", "React", "SelectInput", "options", "Form", "Custom", "SettingsSchema", "onSave", "autoSave", "outerSpacing", "classNames", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "Obj", "instanceOf", "Kanban", "subject", "component", "React", "KanbanContainer", "object", "position", "KanbanViewEditor", "annotation", "findAnnotation", "schema", "ast", "PivotColumnAnnotationId", "target", "inputProps", "props", "space", "isSpace", "getSpace", "typename", "useFormValues", "selectedSchema", "useMemo", "db", "schemaRegistry", "query", "location", "runSync", "singleSelectColumns", "properties", "Type", "toJsonSchema", "columns", "Object", "entries", "reduce", "acc", "key", "value", "format", "push", "SelectInput", "options", "map", "column"]
7
+ }
@@ -2,12 +2,12 @@ import {
2
2
  CreateKanbanSchema,
3
3
  KanbanAction,
4
4
  PivotColumnAnnotationId,
5
- createKanban
6
- } from "../chunk-MUK4JV7A.mjs";
5
+ SettingsSchema
6
+ } from "../chunk-B7EZTXV2.mjs";
7
7
  export {
8
8
  CreateKanbanSchema,
9
9
  KanbanAction,
10
10
  PivotColumnAnnotationId,
11
- createKanban
11
+ SettingsSchema
12
12
  };
13
13
  //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,30 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // src/capabilities/blueprint-definition.ts
4
+ import { Capabilities, contributes } from "@dxos/app-framework";
5
+ import { Blueprint, Template } from "@dxos/blueprints";
6
+ import { trim } from "@dxos/util";
7
+ var functions = [];
8
+ var tools = [];
9
+ var blueprint_definition_default = (() => {
10
+ return [
11
+ contributes(Capabilities.Functions, functions),
12
+ contributes(Capabilities.BlueprintDefinition, Blueprint.make({
13
+ key: "dxos.org/blueprint/kanban",
14
+ name: "Kanban",
15
+ tools: Blueprint.toolDefinitions({
16
+ functions,
17
+ tools
18
+ }),
19
+ instructions: Template.make({
20
+ source: trim`
21
+ You can create and update kanban boards to show data in sorted columns defined by schema.
22
+ `
23
+ })
24
+ }))
25
+ ];
26
+ });
27
+ export {
28
+ blueprint_definition_default as default
29
+ };
30
+ //# sourceMappingURL=blueprint-definition-42P47FUY.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/blueprint-definition.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { Blueprint, Template } from '@dxos/blueprints';\nimport { type FunctionDefinition } from '@dxos/functions';\nimport { trim } from '@dxos/util';\n\nconst functions: FunctionDefinition[] = [];\nconst tools: string[] = [];\n\nexport default () => {\n return [\n contributes(Capabilities.Functions, functions),\n contributes(\n Capabilities.BlueprintDefinition,\n Blueprint.make({\n key: 'dxos.org/blueprint/kanban',\n name: 'Kanban',\n tools: Blueprint.toolDefinitions({ functions, tools }),\n instructions: Template.make({\n source: trim`\n You can create and update kanban boards to show data in sorted columns defined by schema.\n `,\n }),\n }),\n ),\n ];\n};\n"],
5
+ "mappings": ";;;AAIA,SAASA,cAAcC,mBAAmB;AAC1C,SAASC,WAAWC,gBAAgB;AAEpC,SAASC,YAAY;AAErB,IAAMC,YAAkC,CAAA;AACxC,IAAMC,QAAkB,CAAA;AAExB,IAAA,gCAAe,MAAA;AACb,SAAO;IACLC,YAAYC,aAAaC,WAAWJ,SAAAA;IACpCE,YACEC,aAAaE,qBACbC,UAAUC,KAAK;MACbC,KAAK;MACLC,MAAM;MACNR,OAAOK,UAAUI,gBAAgB;QAAEV;QAAWC;MAAM,CAAA;MACpDU,cAAcC,SAASL,KAAK;QAC1BM,QAAQC;;;MAGV,CAAA;IACF,CAAA,CAAA;;AAGN;",
6
+ "names": ["Capabilities", "contributes", "Blueprint", "Template", "trim", "functions", "tools", "contributes", "Capabilities", "Functions", "BlueprintDefinition", "Blueprint", "make", "key", "name", "toolDefinitions", "instructions", "Template", "source", "trim"]
7
+ }
@@ -1,42 +1,23 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
 
3
- // src/types/kanban.ts
4
- import { Obj } from "@dxos/echo";
5
- import { KanbanView } from "@dxos/react-ui-kanban";
6
- import { createViewFromSpace, ProjectionModel } from "@dxos/schema";
7
- var createKanban = async ({ initialPivotColumn, ...props }) => {
8
- const kanban = Obj.make(KanbanView, {
9
- columnFieldId: void 0
10
- });
11
- const { jsonSchema, view } = await createViewFromSpace({
12
- ...props,
13
- presentation: kanban
14
- });
15
- if (initialPivotColumn) {
16
- const projection = new ProjectionModel(jsonSchema, view.projection);
17
- const fieldId = projection.getFieldId(initialPivotColumn);
18
- if (fieldId) {
19
- kanban.columnFieldId = fieldId;
20
- }
21
- }
22
- return {
23
- jsonSchema,
24
- view
25
- };
26
- };
27
-
28
3
  // src/types/schema.ts
29
- import { Schema } from "effect";
4
+ import * as Schema from "effect/Schema";
5
+ import { TypeInputOptionsAnnotation } from "@dxos/plugin-space/types";
30
6
  import { SpaceSchema } from "@dxos/react-client/echo";
31
- import { DataType, FieldSchema, TypenameAnnotationId } from "@dxos/schema";
7
+ import { Kanban } from "@dxos/react-ui-kanban/types";
8
+ import { FieldSchema, View } from "@dxos/schema";
32
9
 
33
10
  // src/meta.ts
34
- var KANBAN_PLUGIN = "dxos.org/plugin/kanban";
11
+ import { trim } from "@dxos/util";
35
12
  var meta = {
36
- id: KANBAN_PLUGIN,
13
+ id: "dxos.org/plugin/kanban",
37
14
  name: "Kanban",
38
- description: "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.",
15
+ description: trim`
16
+ Visual project management using customizable kanban boards to track workflow progress.
17
+ Organize table data into columns, drag and drop items between stages, and trigger automations based on status changes.
18
+ `,
39
19
  icon: "ph--kanban--regular",
20
+ iconHue: "green",
40
21
  source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-kanban",
41
22
  screenshots: [
42
23
  "https://dxos.network/plugin-details-kanban-dark.png"
@@ -45,35 +26,48 @@ var meta = {
45
26
 
46
27
  // src/types/schema.ts
47
28
  var PivotColumnAnnotationId = Symbol.for("@dxos/plugin-kanban/annotation/PivotColumn");
29
+ var SettingsSchema = Schema.Struct({
30
+ columnFieldId: Schema.String.annotations({
31
+ title: "Column field identifier"
32
+ })
33
+ });
48
34
  var CreateKanbanSchema = Schema.Struct({
49
35
  name: Schema.optional(Schema.String),
50
- typename: Schema.optional(Schema.String.annotations({
51
- [TypenameAnnotationId]: [
52
- "used-static",
53
- "dynamic"
36
+ // TODO(wittjosiah): This should be a query input instead.
37
+ typename: Schema.String.pipe(Schema.annotations({
38
+ title: "Select card type"
39
+ }), TypeInputOptionsAnnotation.set({
40
+ location: [
41
+ "database",
42
+ "runtime"
43
+ ],
44
+ kind: [
45
+ "user"
54
46
  ],
55
- title: "Select card schema (leave empty to start fresh)"
56
- })),
47
+ registered: [
48
+ "registered"
49
+ ]
50
+ }), Schema.optional),
57
51
  initialPivotColumn: Schema.optional(Schema.String.annotations({
58
52
  [PivotColumnAnnotationId]: true,
59
53
  title: "Pivot column"
60
54
  }))
61
55
  });
62
56
  (function(KanbanAction2) {
63
- const KANBAN_ACTION = `${KANBAN_PLUGIN}/action`;
57
+ const KANBAN_ACTION = `${meta.id}/action`;
64
58
  class Create extends Schema.TaggedClass()(`${KANBAN_ACTION}/create`, {
65
59
  input: Schema.extend(Schema.Struct({
66
60
  space: SpaceSchema
67
61
  }), CreateKanbanSchema),
68
62
  output: Schema.Struct({
69
- object: DataType.View
63
+ object: Kanban.Kanban
70
64
  })
71
65
  }) {
72
66
  }
73
67
  KanbanAction2.Create = Create;
74
68
  class DeleteCardField extends Schema.TaggedClass()(`${KANBAN_ACTION}/delete-card-field`, {
75
69
  input: Schema.Struct({
76
- view: DataType.View,
70
+ view: View.View,
77
71
  fieldId: Schema.String,
78
72
  // TODO(wittjosiah): Separate fields for undo data?
79
73
  deletionData: Schema.optional(Schema.Struct({
@@ -100,11 +94,10 @@ var CreateKanbanSchema = Schema.Struct({
100
94
  var KanbanAction;
101
95
 
102
96
  export {
103
- KANBAN_PLUGIN,
104
97
  meta,
105
- createKanban,
106
98
  PivotColumnAnnotationId,
99
+ SettingsSchema,
107
100
  CreateKanbanSchema,
108
101
  KanbanAction
109
102
  };
110
- //# sourceMappingURL=chunk-2GCFRKS2.mjs.map
103
+ //# sourceMappingURL=chunk-WBN5YQGD.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/schema.ts", "../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { TypeInputOptionsAnnotation } from '@dxos/plugin-space/types';\nimport { SpaceSchema } from '@dxos/react-client/echo';\nimport { Kanban } from '@dxos/react-ui-kanban/types';\nimport { FieldSchema, View } from '@dxos/schema';\n\nimport { meta } 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(wittjosiah): Factor out?\nexport const PivotColumnAnnotationId = Symbol.for('@dxos/plugin-kanban/annotation/PivotColumn');\n\nexport const SettingsSchema = Schema.Struct({\n columnFieldId: Schema.String.annotations({\n title: 'Column field identifier',\n }),\n});\n\nexport const CreateKanbanSchema = Schema.Struct({\n name: Schema.optional(Schema.String),\n // TODO(wittjosiah): This should be a query input instead.\n typename: Schema.String.pipe(\n Schema.annotations({ title: 'Select card type' }),\n TypeInputOptionsAnnotation.set({\n location: ['database', 'runtime'],\n kind: ['user'],\n registered: ['registered'],\n }),\n Schema.optional,\n ),\n initialPivotColumn: Schema.optional(\n Schema.String.annotations({\n [PivotColumnAnnotationId]: true,\n title: 'Pivot column',\n }),\n ),\n});\n\nexport namespace KanbanAction {\n const KANBAN_ACTION = `${meta.id}/action`;\n\n export class Create extends Schema.TaggedClass<Create>()(`${KANBAN_ACTION}/create`, {\n input: Schema.extend(Schema.Struct({ space: SpaceSchema }), CreateKanbanSchema),\n output: Schema.Struct({\n object: Kanban.Kanban,\n }),\n }) {}\n\n export class DeleteCardField extends Schema.TaggedClass<DeleteCardField>()(`${KANBAN_ACTION}/delete-card-field`, {\n input: Schema.Struct({\n view: View.View,\n fieldId: Schema.String,\n // TODO(wittjosiah): Separate fields for undo data?\n deletionData: Schema.optional(\n Schema.Struct({\n field: FieldSchema,\n // TODO(wittjosiah): This creates a type error.\n // props: PropertySchema,\n props: Schema.Any,\n index: Schema.Number,\n }),\n ),\n }),\n output: Schema.Void,\n }) {}\n\n export class DeleteCard extends Schema.TaggedClass<DeleteCard>()(`${KANBAN_ACTION}/delete-card`, {\n input: Schema.Struct({\n card: Schema.Any, // The card object to delete\n }),\n output: Schema.Void,\n }) {}\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/kanban',\n name: 'Kanban',\n description: trim`\n Visual project management using customizable kanban boards to track workflow progress.\n Organize table data into columns, drag and drop items between stages, and trigger automations based on status changes.\n `,\n icon: 'ph--kanban--regular',\n iconHue: 'green',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-kanban',\n screenshots: ['https://dxos.network/plugin-details-kanban-dark.png'],\n};\n"],
5
+ "mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,kCAAkC;AAC3C,SAASC,mBAAmB;AAC5B,SAASC,cAAc;AACvB,SAASC,aAAaC,YAAY;;;ACJlC,SAASC,YAAY;AAEd,IAAMC,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,aAAa;IAAC;;AAChB;;;ADKO,IAAMC,0BAA0BC,OAAOC,IAAI,4CAAA;AAE3C,IAAMC,iBAAwBC,cAAO;EAC1CC,eAAsBC,cAAOC,YAAY;IACvCC,OAAO;EACT,CAAA;AACF,CAAA;AAEO,IAAMC,qBAA4BL,cAAO;EAC9CM,MAAaC,gBAAgBL,aAAM;;EAEnCM,UAAiBN,cAAOO,KACfN,mBAAY;IAAEC,OAAO;EAAmB,CAAA,GAC/CM,2BAA2BC,IAAI;IAC7BC,UAAU;MAAC;MAAY;;IACvBC,MAAM;MAAC;;IACPC,YAAY;MAAC;;EACf,CAAA,GACOP,eAAQ;EAEjBQ,oBAA2BR,gBAClBL,cAAOC,YAAY;IACxB,CAACP,uBAAAA,GAA0B;IAC3BQ,OAAO;EACT,CAAA,CAAA;AAEJ,CAAA;UAEiBY,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,KAAKC,EAAE;EAEzB,MAAMC,eAAsBC,mBAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAClFK,OAAcC,cAAcvB,cAAO;MAAEwB,OAAOC;IAAY,CAAA,GAAIpB,kBAAAA;IAC5DqB,QAAe1B,cAAO;MACpB2B,QAAQC,OAAOA;IACjB,CAAA;EACF,CAAA,EAAA;EAAI;gBALSR,SAAAA;EAON,MAAMS,wBAA+BR,mBAAW,EAAoB,GAAGJ,aAAAA,sBAAmC;IAC/GK,OAActB,cAAO;MACnB8B,MAAMC,KAAKA;MACXC,SAAgB9B;;MAEhB+B,cAAqB1B,gBACZP,cAAO;QACZkC,OAAOC;;;QAGPC,OAAcC;QACdC,OAAcC;MAChB,CAAA,CAAA;IAEJ,CAAA;IACAb,QAAec;EACjB,CAAA,EAAA;EAAI;gBAhBSX,kBAAAA;EAkBN,MAAMY,mBAA0BpB,mBAAW,EAAe,GAAGJ,aAAAA,gBAA6B;IAC/FK,OAActB,cAAO;MACnB0C,MAAaL;IACf,CAAA;IACAX,QAAec;EACjB,CAAA,EAAA;EAAI;gBALSC,aAAAA;AAMf,GAlCiBzB,iBAAAA,eAAAA,CAAAA,EAAAA;;",
6
+ "names": ["Schema", "TypeInputOptionsAnnotation", "SpaceSchema", "Kanban", "FieldSchema", "View", "trim", "meta", "id", "name", "description", "trim", "icon", "iconHue", "source", "screenshots", "PivotColumnAnnotationId", "Symbol", "for", "SettingsSchema", "Struct", "columnFieldId", "String", "annotations", "title", "CreateKanbanSchema", "name", "optional", "typename", "pipe", "TypeInputOptionsAnnotation", "set", "location", "kind", "registered", "initialPivotColumn", "KanbanAction", "KANBAN_ACTION", "meta", "id", "Create", "TaggedClass", "input", "extend", "space", "SpaceSchema", "output", "object", "Kanban", "DeleteCardField", "view", "View", "fieldId", "deletionData", "field", "FieldSchema", "props", "Any", "index", "Number", "Void", "DeleteCard", "card"]
7
+ }
@@ -1,47 +1,46 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  CreateKanbanSchema,
4
- KANBAN_PLUGIN,
5
4
  KanbanAction,
6
5
  meta
7
- } from "./chunk-2GCFRKS2.mjs";
6
+ } from "./chunk-WBN5YQGD.mjs";
8
7
 
9
8
  // src/KanbanPlugin.tsx
10
- import { createIntent, defineModule, contributes, Capabilities, Events, definePlugin } from "@dxos/app-framework";
11
- import { ClientEvents } from "@dxos/plugin-client";
12
- import { SpaceCapabilities } from "@dxos/plugin-space";
13
- import { defineObjectForm } from "@dxos/plugin-space/types";
14
- import { KanbanView as KanbanView2, translations as kanbanTranslations } from "@dxos/react-ui-kanban";
9
+ import { Capabilities, Events, contributes, createIntent, defineModule, definePlugin } from "@dxos/app-framework";
10
+ import { Type as Type2 } from "@dxos/echo";
11
+ import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
12
+ import { translations as kanbanTranslations } from "@dxos/react-ui-kanban";
13
+ import { Kanban as Kanban2 } from "@dxos/react-ui-kanban/types";
15
14
 
16
15
  // src/capabilities/index.ts
17
16
  import { lazy } from "@dxos/app-framework";
18
- var ArtifactDefinition = lazy(() => import("./artifact-definition-NACXLTWB.mjs"));
19
- var IntentResolver = lazy(() => import("./intent-resolver-CXHLNVEN.mjs"));
20
- var ReactSurface = lazy(() => import("./react-surface-UEQNH6S4.mjs"));
17
+ var BlueprintDefinition = lazy(() => import("./blueprint-definition-42P47FUY.mjs"));
18
+ var IntentResolver = lazy(() => import("./intent-resolver-X4UZDRI7.mjs"));
19
+ var ReactSurface = lazy(() => import("./react-surface-D7XTGTZL.mjs"));
21
20
 
22
21
  // src/translations.ts
23
- import { KanbanView } from "@dxos/react-ui-kanban";
22
+ import { Type } from "@dxos/echo";
23
+ import { Kanban } from "@dxos/react-ui-kanban/types";
24
24
  var translations = [
25
25
  {
26
26
  "en-US": {
27
- [KanbanView.typename]: {
27
+ [Type.getTypename(Kanban.Kanban)]: {
28
28
  "typename label": "Kanban",
29
29
  "typename label_zero": "Kanbans",
30
30
  "typename label_one": "Kanban",
31
31
  "typename label_other": "Kanbans",
32
- "object name placeholder": "New kanban"
32
+ "object name placeholder": "New kanban",
33
+ "rename object label": "Rename kanban",
34
+ "delete object label": "Delete kanban",
35
+ "object deleted label": "Kanban deleted"
33
36
  },
34
37
  [meta.id]: {
35
38
  "plugin name": "Kanban",
36
39
  "kanban title label": "Title",
37
40
  "column title label": "Column title",
38
41
  "column title placeholder": "New column",
39
- "item title label": "Item title",
40
- "item title placeholder": "New item",
41
42
  "add column label": "Add column",
42
- "add item label": "Add card",
43
43
  "delete column label": "Delete column",
44
- "delete item label": "Delete card",
45
44
  "card field deleted label": "Card field deleted",
46
45
  "card deleted label": "Card deleted"
47
46
  }
@@ -50,7 +49,7 @@ var translations = [
50
49
  ];
51
50
 
52
51
  // src/KanbanPlugin.tsx
53
- var KanbanPlugin = () => definePlugin(meta, [
52
+ var KanbanPlugin = definePlugin(meta, () => [
54
53
  defineModule({
55
54
  id: `${meta.id}/module/translations`,
56
55
  activatesOn: Events.SetupTranslations,
@@ -63,24 +62,24 @@ var KanbanPlugin = () => definePlugin(meta, [
63
62
  id: `${meta.id}/module/metadata`,
64
63
  activatesOn: Events.SetupMetadata,
65
64
  activate: () => contributes(Capabilities.Metadata, {
66
- id: KanbanView2.typename,
65
+ id: Type2.getTypename(Kanban2.Kanban),
67
66
  metadata: {
68
- icon: "ph--kanban--regular"
67
+ icon: "ph--kanban--regular",
68
+ iconHue: "green",
69
+ inputSchema: CreateKanbanSchema,
70
+ createObjectIntent: (props, options) => createIntent(KanbanAction.Create, {
71
+ ...props,
72
+ space: options.space
73
+ })
69
74
  }
70
75
  })
71
76
  }),
72
77
  defineModule({
73
- id: `${meta.id}/module/object-form`,
78
+ id: `${meta.id}/module/schema`,
74
79
  activatesOn: ClientEvents.SetupSchema,
75
- activate: () => contributes(SpaceCapabilities.ObjectForm, defineObjectForm({
76
- objectSchema: KanbanView2,
77
- formSchema: CreateKanbanSchema,
78
- hidden: true,
79
- getIntent: (props, options) => createIntent(KanbanAction.Create, {
80
- ...props,
81
- space: options.space
82
- })
83
- }))
80
+ activate: () => contributes(ClientCapabilities.Schema, [
81
+ Kanban2.Kanban
82
+ ])
84
83
  }),
85
84
  defineModule({
86
85
  id: `${meta.id}/module/react-surface`,
@@ -93,13 +92,12 @@ var KanbanPlugin = () => definePlugin(meta, [
93
92
  activate: IntentResolver
94
93
  }),
95
94
  defineModule({
96
- id: `${meta.id}/module/artifact-definition`,
95
+ id: `${meta.id}/module/blueprint`,
97
96
  activatesOn: Events.SetupArtifactDefinition,
98
- activate: ArtifactDefinition
97
+ activate: BlueprintDefinition
99
98
  })
100
99
  ]);
101
100
  export {
102
- KANBAN_PLUGIN,
103
101
  KanbanPlugin,
104
102
  meta
105
103
  };