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