@dxos/plugin-kanban 0.8.4-main.2e9d522 → 0.8.4-main.3c1ae3b

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-X44RHBZK.mjs → chunk-PEQVHFOX.mjs} +35 -42
  4. package/dist/lib/browser/chunk-PEQVHFOX.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-E6O3LBAB.mjs → intent-resolver-NHCWHMPW.mjs} +20 -20
  8. package/dist/lib/browser/intent-resolver-NHCWHMPW.mjs.map +7 -0
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/{react-surface-MWNNZYMN.mjs → react-surface-NSCKM4QW.mjs} +81 -98
  11. package/dist/lib/browser/react-surface-NSCKM4QW.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-6WK5CGYY.mjs → chunk-LTCOYU73.mjs} +35 -42
  16. package/dist/lib/node-esm/chunk-LTCOYU73.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-LPASDELU.mjs → intent-resolver-L2OEBOJW.mjs} +20 -20
  20. package/dist/lib/node-esm/intent-resolver-L2OEBOJW.mjs.map +7 -0
  21. package/dist/lib/node-esm/meta.json +1 -1
  22. package/dist/lib/node-esm/{react-surface-T52BBG45.mjs → react-surface-WXYTWOY2.mjs} +81 -98
  23. package/dist/lib/node-esm/react-surface-WXYTWOY2.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 +43 -40
  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 -17
  58. package/src/capabilities/react-surface.tsx +24 -25
  59. package/src/components/KanbanContainer.stories.tsx +52 -73
  60. package/src/components/KanbanContainer.tsx +18 -31
  61. package/src/components/KanbanViewEditor.tsx +31 -37
  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-WMSZK3RW.mjs +0 -174
  67. package/dist/lib/browser/artifact-definition-WMSZK3RW.mjs.map +0 -7
  68. package/dist/lib/browser/chunk-X44RHBZK.mjs.map +0 -7
  69. package/dist/lib/browser/intent-resolver-E6O3LBAB.mjs.map +0 -7
  70. package/dist/lib/browser/react-surface-MWNNZYMN.mjs.map +0 -7
  71. package/dist/lib/node-esm/artifact-definition-QVZXPDXK.mjs +0 -175
  72. package/dist/lib/node-esm/artifact-definition-QVZXPDXK.mjs.map +0 -7
  73. package/dist/lib/node-esm/chunk-6WK5CGYY.mjs.map +0 -7
  74. package/dist/lib/node-esm/intent-resolver-LPASDELU.mjs.map +0 -7
  75. package/dist/lib/node-esm/react-surface-T52BBG45.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,51 +1,41 @@
1
1
  import {
2
2
  KanbanAction,
3
3
  PivotColumnAnnotationId,
4
+ SettingsSchema,
4
5
  meta
5
- } from "./chunk-X44RHBZK.mjs";
6
+ } from "./chunk-PEQVHFOX.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
- import { SelectInput as SelectInput2, useFormValues } from "@dxos/react-ui-form";
15
- import { KanbanView } from "@dxos/react-ui-kanban";
16
- import { DataType } from "@dxos/schema";
14
+ import { SelectField as SelectField2, useFormValues } from "@dxos/react-ui-form";
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 { useCapabilities, useIntentDispatcher } from "@dxos/app-framework/react";
22
22
  import { Filter, Obj, Type } from "@dxos/echo";
23
- import { EchoSchema } from "@dxos/echo-schema";
23
+ import { ClientCapabilities } from "@dxos/plugin-client";
24
24
  import { useGlobalFilteredObjects } from "@dxos/plugin-search";
25
- 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
- const client = useClient();
32
+ const schemas = useCapabilities(ClientCapabilities.Schema);
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
- const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename);
38
+ const staticSchema = schemas.flat().find((schema) => Type.getTypename(schema) === typename);
49
39
  if (staticSchema) {
50
40
  setCardSchema(() => staticSchema);
51
41
  }
@@ -64,22 +54,15 @@ var KanbanContainer = ({ view }) => {
64
54
  return unsubscribe;
65
55
  }
66
56
  }, [
67
- view.query.typename,
68
- space
69
- ]);
70
- useEffect(() => {
71
- if (jsonSchema) {
72
- setProjection(new ProjectionModel(jsonSchema, view.projection));
73
- }
74
- }, [
75
- view.projection,
76
- JSON.stringify(jsonSchema)
57
+ schemas,
58
+ space,
59
+ typename
77
60
  ]);
78
61
  const objects = useQuery(space, cardSchema ? Filter.type(cardSchema) : Filter.nothing());
79
62
  const filteredObjects = useGlobalFilteredObjects(objects);
63
+ const projection = useProjectionModel(cardSchema, object);
80
64
  const model = useKanbanModel({
81
- view,
82
- schema: cardSchema,
65
+ object,
83
66
  projection,
84
67
  items: filteredObjects
85
68
  });
@@ -104,7 +87,7 @@ var KanbanContainer = ({ view }) => {
104
87
  }, [
105
88
  dispatch
106
89
  ]);
107
- return /* @__PURE__ */ React.createElement(StackItem.Content, null, model && /* @__PURE__ */ React.createElement(Kanban, {
90
+ return /* @__PURE__ */ React.createElement(StackItem.Content, null, model && /* @__PURE__ */ React.createElement(KanbanComponent, {
108
91
  model,
109
92
  onAddCard: handleAddCard,
110
93
  onRemoveCard: handleRemoveCard
@@ -116,81 +99,77 @@ var KanbanContainer = ({ view }) => {
116
99
 
117
100
  // src/components/KanbanViewEditor.tsx
118
101
  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";
122
- import { useClient as useClient2 } from "@dxos/react-client";
102
+ import React2, { useCallback as useCallback2, useMemo } from "react";
103
+ import { Format } from "@dxos/echo/internal";
104
+ import { invariant } from "@dxos/invariant";
123
105
  import { getSpace as getSpace2, useSchema } from "@dxos/react-client/echo";
124
- 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 }) => {
106
+ import { Form, SelectField } from "@dxos/react-ui-form";
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
- 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
- ]);
136
- 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
- ]);
113
+ const space = getSpace2(object);
114
+ const view = object.view.target;
115
+ const currentTypename = view?.query ? getTypenameFromQuery2(view.query.ast) : void 0;
116
+ const schema = useSchema(space, currentTypename);
117
+ const projection = useProjectionModel2(schema, object);
146
118
  const fieldProjections = projection?.getFieldProjections() || [];
147
- const selectFields = fieldProjections.filter((field) => field.props.format === FormatEnum.SingleSelect).map(({ field }) => ({
119
+ const selectFields = fieldProjections.filter((field) => field.props.format === Format.TypeFormat.SingleSelect).map(({ field }) => ({
148
120
  value: field.id,
149
121
  label: field.path
150
122
  }));
151
123
  const handleSave = useCallback2((values) => {
152
- kanban.columnFieldId = values.columnFieldId;
124
+ invariant(view, void 0, {
125
+ F: __dxlog_file,
126
+ L: 33,
127
+ S: void 0,
128
+ A: [
129
+ "view",
130
+ ""
131
+ ]
132
+ });
133
+ view.projection.pivotFieldId = values.columnFieldId;
153
134
  }, [
154
- kanban
135
+ view
155
136
  ]);
156
- const initialValues = useMemo2(() => ({
157
- columnFieldId: kanban.columnFieldId
137
+ const initialValues = useMemo(() => ({
138
+ columnFieldId: view?.projection.pivotFieldId
158
139
  }), [
159
- kanban.columnFieldId
140
+ view?.projection.pivotFieldId
160
141
  ]);
161
- const custom = useMemo2(() => ({
162
- columnFieldId: (props) => /* @__PURE__ */ React2.createElement(SelectInput, {
142
+ const fieldMap = useMemo(() => ({
143
+ columnFieldId: (props) => /* @__PURE__ */ React2.createElement(SelectField, {
163
144
  ...props,
164
145
  options: selectFields
165
146
  })
166
147
  }), [
167
148
  selectFields
168
149
  ]);
169
- return /* @__PURE__ */ React2.createElement(Form, {
170
- Custom: custom,
171
- schema: KanbanSettingsSchema,
150
+ return /* @__PURE__ */ React2.createElement(Form.Root, {
151
+ schema: SettingsSchema,
172
152
  values: initialValues,
173
- onSave: handleSave,
153
+ fieldMap,
174
154
  autoSave: true,
175
- outerSpacing: false,
176
- classNames: "pbs-inputSpacingBlock"
177
- });
155
+ onSave: handleSave
156
+ }, /* @__PURE__ */ React2.createElement(Form.FieldSet, null));
178
157
  } finally {
179
158
  _effect.f();
180
159
  }
181
160
  };
182
161
 
183
162
  // src/capabilities/react-surface.tsx
184
- var react_surface_default = () => contributes(Capabilities.ReactSurface, [
163
+ var react_surface_default = (() => contributes(Capabilities.ReactSurface, [
185
164
  createSurface({
186
165
  id: meta.id,
187
166
  role: [
188
167
  "article",
189
168
  "section"
190
169
  ],
191
- filter: (data) => Obj2.instanceOf(DataType.View, data.subject) && Obj2.instanceOf(KanbanView, data.subject.presentation.target),
170
+ filter: (data) => Obj2.instanceOf(Kanban.Kanban, data.subject),
192
171
  component: ({ data, role }) => /* @__PURE__ */ React3.createElement(KanbanContainer, {
193
- view: data.subject,
172
+ object: data.subject,
194
173
  role
195
174
  })
196
175
  }),
@@ -198,9 +177,9 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
198
177
  id: `${meta.id}/object-settings`,
199
178
  role: "object-settings",
200
179
  position: "hoist",
201
- filter: (data) => Obj2.instanceOf(DataType.View, data.subject) && Obj2.instanceOf(KanbanView, data.subject.presentation.target),
180
+ filter: (data) => Obj2.instanceOf(Kanban.Kanban, data.subject),
202
181
  component: ({ data }) => /* @__PURE__ */ React3.createElement(KanbanViewEditor, {
203
- view: data.subject
182
+ object: data.subject
204
183
  })
205
184
  }),
206
185
  createSurface({
@@ -216,14 +195,19 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
216
195
  if (!space) {
217
196
  return null;
218
197
  }
219
- 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({
198
+ const { typename } = useFormValues("KanbanForm");
199
+ const [selectedSchema] = useMemo2(() => space?.db.schemaRegistry.query({
200
+ location: [
201
+ "database",
202
+ "runtime"
203
+ ],
223
204
  typename
224
- }).runSync();
225
- const singleSelectColumns = useMemo3(() => {
226
- const properties = staticSchema ? Type3.toJsonSchema(staticSchema).properties : selectedSchema?.jsonSchema?.properties;
205
+ }).runSync(), [
206
+ space,
207
+ typename
208
+ ]);
209
+ const singleSelectColumns = useMemo2(() => {
210
+ const properties = Type2.toJsonSchema(selectedSchema).properties;
227
211
  if (!properties) {
228
212
  return [];
229
213
  }
@@ -235,13 +219,12 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
235
219
  }, []);
236
220
  return columns;
237
221
  }, [
238
- selectedSchema?.jsonSchema,
239
- staticSchema
222
+ selectedSchema
240
223
  ]);
241
224
  if (!typename) {
242
225
  return null;
243
226
  }
244
- return /* @__PURE__ */ React3.createElement(SelectInput2, {
227
+ return /* @__PURE__ */ React3.createElement(SelectField2, {
245
228
  ...props,
246
229
  options: singleSelectColumns.map((column) => ({
247
230
  value: column
@@ -249,8 +232,8 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
249
232
  });
250
233
  }
251
234
  })
252
- ]);
235
+ ]));
253
236
  export {
254
237
  react_surface_default as default
255
238
  };
256
- //# sourceMappingURL=react-surface-MWNNZYMN.mjs.map
239
+ //# sourceMappingURL=react-surface-NSCKM4QW.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 FormFieldComponentProps, SelectField, 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 FormFieldComponentProps;\n const space = isSpace(target) ? target : getSpace(target);\n if (!space) {\n return null;\n }\n\n const { typename } = useFormValues('KanbanForm');\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 <SelectField {...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 { useCapabilities, useIntentDispatcher } from '@dxos/app-framework/react';\nimport { Filter, Obj, Type } from '@dxos/echo';\nimport { type TypedObject } from '@dxos/echo/internal';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\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 schemas = useCapabilities(ClientCapabilities.Schema);\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 = schemas.flat().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 }, [schemas, space, typename]);\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 { getSpace, useSchema } from '@dxos/react-client/echo';\nimport { Form, type FormFieldMap, SelectField } 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 space = getSpace(object);\n const view = object.view.target;\n const currentTypename = view?.query ? getTypenameFromQuery(view.query.ast) : undefined;\n const schema = useSchema(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\n const fieldMap: FormFieldMap = useMemo(\n () => ({ columnFieldId: (props) => <SelectField {...props} options={selectFields} /> }),\n [selectFields],\n );\n\n return (\n <Form.Root schema={SettingsSchema} values={initialValues} fieldMap={fieldMap} autoSave onSave={handleSave}>\n <Form.FieldSet />\n </Form.Root>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useMemo", "Capabilities", "contributes", "createSurface", "Obj", "Type", "findAnnotation", "getSpace", "isSpace", "SelectField", "useFormValues", "Kanban", "React", "useCallback", "useEffect", "useState", "createIntent", "useCapabilities", "useIntentDispatcher", "Filter", "Obj", "Type", "ClientCapabilities", "useGlobalFilteredObjects", "getSpace", "useQuery", "Kanban", "KanbanComponent", "useKanbanModel", "useProjectionModel", "StackItem", "getTypenameFromQuery", "KanbanContainer", "object", "schemas", "useCapabilities", "ClientCapabilities", "Schema", "cardSchema", "setCardSchema", "useState", "space", "getSpace", "dispatchPromise", "dispatch", "useIntentDispatcher", "typename", "view", "target", "query", "getTypenameFromQuery", "ast", "undefined", "useEffect", "staticSchema", "flat", "find", "schema", "Type", "getTypename", "db", "schemaRegistry", "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", "getSpace", "useSchema", "Form", "SelectField", "useProjectionModel", "getTypenameFromQuery", "KanbanViewEditor", "object", "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", "fieldMap", "React", "SelectField", "options", "Form", "Root", "SettingsSchema", "autoSave", "onSave", "FieldSet", "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", "SelectField", "options", "map", "column"]
7
+ }
@@ -2,12 +2,12 @@ import {
2
2
  CreateKanbanSchema,
3
3
  KanbanAction,
4
4
  PivotColumnAnnotationId,
5
- createKanban
6
- } from "../chunk-X44RHBZK.mjs";
5
+ SettingsSchema
6
+ } from "../chunk-PEQVHFOX.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"
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
- "limited-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-6WK5CGYY.mjs.map
103
+ //# sourceMappingURL=chunk-LTCOYU73.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',\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
+ }