@dxos/plugin-kanban 0.8.2-main.f11618f → 0.8.2-staging.42af850
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-OSLO5B6P.mjs → artifact-definition-7AVKC5KJ.mjs} +24 -23
- package/dist/lib/browser/artifact-definition-7AVKC5KJ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-3MVG4VGQ.mjs → chunk-NJ6WHYLY.mjs} +26 -30
- package/dist/lib/browser/chunk-NJ6WHYLY.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +4 -4
- package/dist/lib/browser/{intent-resolver-OFEXRD4O.mjs → intent-resolver-2R6I36UA.mjs} +10 -9
- package/dist/lib/browser/intent-resolver-2R6I36UA.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-RJ5WMSWU.mjs → react-surface-W43CBHJ2.mjs} +174 -157
- package/dist/lib/browser/react-surface-W43CBHJ2.mjs.map +7 -0
- package/dist/lib/browser/types.mjs +1 -1
- package/dist/lib/node/{artifact-definition-ZOUZLESK.cjs → artifact-definition-GAKXWPS3.cjs} +32 -31
- package/dist/lib/node/artifact-definition-GAKXWPS3.cjs.map +7 -0
- package/dist/lib/node/{chunk-ZRCL6XVF.cjs → chunk-3BKBOGOH.cjs} +27 -31
- package/dist/lib/node/chunk-3BKBOGOH.cjs.map +7 -0
- package/dist/lib/node/index.cjs +16 -16
- package/dist/lib/node/{intent-resolver-BCCCN7LD.cjs → intent-resolver-3WEAK7UE.cjs} +17 -16
- package/dist/lib/node/intent-resolver-3WEAK7UE.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/react-surface-YEBNJKHD.cjs +344 -0
- package/dist/lib/node/react-surface-YEBNJKHD.cjs.map +7 -0
- package/dist/lib/node/types.cjs +6 -6
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{artifact-definition-A7GJP5BI.mjs → artifact-definition-RH5KY7FP.mjs} +24 -23
- package/dist/lib/node-esm/artifact-definition-RH5KY7FP.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ZJJYPR6C.mjs → chunk-4J76H6FE.mjs} +26 -30
- package/dist/lib/node-esm/chunk-4J76H6FE.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +4 -4
- package/dist/lib/node-esm/{intent-resolver-4LPFRDUP.mjs → intent-resolver-XHHFK6V7.mjs} +10 -9
- package/dist/lib/node-esm/intent-resolver-XHHFK6V7.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-C7CETLHO.mjs → react-surface-Q73OORPI.mjs} +174 -157
- package/dist/lib/node-esm/react-surface-Q73OORPI.mjs.map +7 -0
- package/dist/lib/node-esm/types.mjs +1 -1
- package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -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/KanbanContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/KanbanViewEditor.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing/initialize-kanban.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +2 -28
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +34 -34
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +33 -29
- package/src/capabilities/artifact-definition.ts +15 -14
- package/src/capabilities/intent-resolver.ts +3 -3
- package/src/capabilities/react-surface.tsx +10 -5
- package/src/components/KanbanContainer.stories.tsx +18 -13
- package/src/components/KanbanContainer.tsx +1 -1
- package/src/components/KanbanViewEditor.tsx +12 -8
- package/src/meta.ts +1 -2
- package/src/testing/initialize-kanban.ts +7 -7
- package/src/types.ts +25 -26
- package/dist/lib/browser/artifact-definition-OSLO5B6P.mjs.map +0 -7
- package/dist/lib/browser/chunk-3MVG4VGQ.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-OFEXRD4O.mjs.map +0 -7
- package/dist/lib/browser/react-surface-RJ5WMSWU.mjs.map +0 -7
- package/dist/lib/node/artifact-definition-ZOUZLESK.cjs.map +0 -7
- package/dist/lib/node/chunk-ZRCL6XVF.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-BCCCN7LD.cjs.map +0 -7
- package/dist/lib/node/react-surface-LQ7CQFWF.cjs +0 -327
- package/dist/lib/node/react-surface-LQ7CQFWF.cjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-A7GJP5BI.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZJJYPR6C.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-4LPFRDUP.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-C7CETLHO.mjs.map +0 -7
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
PivotColumnAnnotationId,
|
|
5
5
|
TypenameAnnotationId,
|
|
6
6
|
isKanban
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-NJ6WHYLY.mjs";
|
|
8
8
|
|
|
9
9
|
// packages/plugins/plugin-kanban/src/capabilities/react-surface.tsx
|
|
10
10
|
import React3, { useMemo as useMemo3 } from "react";
|
|
@@ -17,6 +17,7 @@ import { getSpace as getSpace3, isSpace } from "@dxos/react-client/echo";
|
|
|
17
17
|
import { SelectInput as SelectInput2, useFormValues } from "@dxos/react-ui-form";
|
|
18
18
|
|
|
19
19
|
// packages/plugins/plugin-kanban/src/components/KanbanContainer.tsx
|
|
20
|
+
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
20
21
|
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
21
22
|
import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
|
|
22
23
|
import { EchoSchema, getTypenameOrThrow, toJsonSchema } from "@dxos/echo-schema";
|
|
@@ -27,86 +28,93 @@ import { useKanbanModel, Kanban } from "@dxos/react-ui-kanban";
|
|
|
27
28
|
import { StackItem } from "@dxos/react-ui-stack";
|
|
28
29
|
import { ViewProjection } from "@dxos/schema";
|
|
29
30
|
var KanbanContainer = ({ kanban }) => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
31
|
+
var _effect = _useSignals();
|
|
32
|
+
try {
|
|
33
|
+
const client = useClient();
|
|
34
|
+
const [cardSchema, setCardSchema] = useState();
|
|
35
|
+
const [projection, setProjection] = useState();
|
|
36
|
+
const space = getSpace(kanban);
|
|
37
|
+
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
38
|
+
const jsonSchema = useMemo(() => cardSchema instanceof EchoSchema ? cardSchema.jsonSchema : cardSchema ? toJsonSchema(cardSchema) : void 0, [
|
|
39
|
+
cardSchema
|
|
40
|
+
]);
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
const typename = kanban.cardView?.target?.query?.typename;
|
|
43
|
+
const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => getTypenameOrThrow(schema) === typename);
|
|
44
|
+
if (staticSchema) {
|
|
45
|
+
setCardSchema(() => staticSchema);
|
|
46
|
+
}
|
|
47
|
+
if (!staticSchema && typename && space) {
|
|
48
|
+
const query = space.db.schemaRegistry.query({
|
|
49
|
+
typename
|
|
50
|
+
});
|
|
51
|
+
const unsubscribe = query.subscribe(() => {
|
|
52
|
+
const [schema] = query.results;
|
|
53
|
+
if (schema) {
|
|
54
|
+
setCardSchema(schema);
|
|
55
|
+
}
|
|
56
|
+
}, {
|
|
57
|
+
fire: true
|
|
58
|
+
});
|
|
59
|
+
return unsubscribe;
|
|
60
|
+
}
|
|
61
|
+
}, [
|
|
62
|
+
kanban.cardView?.target?.query,
|
|
63
|
+
space
|
|
64
|
+
]);
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (kanban.cardView?.target && jsonSchema) {
|
|
67
|
+
setProjection(new ViewProjection(jsonSchema, kanban.cardView.target));
|
|
68
|
+
}
|
|
69
|
+
}, [
|
|
70
|
+
kanban.cardView?.target,
|
|
71
|
+
JSON.stringify(jsonSchema)
|
|
72
|
+
]);
|
|
73
|
+
const objects = useQuery(space, cardSchema ? Filter.type(cardSchema) : Filter.nothing());
|
|
74
|
+
const filteredObjects = useGlobalFilteredObjects(objects);
|
|
75
|
+
const model = useKanbanModel({
|
|
76
|
+
kanban,
|
|
77
|
+
schema: cardSchema,
|
|
78
|
+
projection,
|
|
79
|
+
items: filteredObjects
|
|
80
|
+
});
|
|
81
|
+
const handleAddCard = useCallback((columnValue) => {
|
|
82
|
+
const path = model?.columnFieldPath;
|
|
83
|
+
if (space && cardSchema && path) {
|
|
84
|
+
const card = live(cardSchema, {
|
|
85
|
+
[path]: columnValue
|
|
86
|
+
});
|
|
87
|
+
space.db.add(card);
|
|
88
|
+
return card.id;
|
|
89
|
+
}
|
|
90
|
+
}, [
|
|
91
|
+
space,
|
|
92
|
+
cardSchema,
|
|
93
|
+
model
|
|
94
|
+
]);
|
|
95
|
+
const handleRemoveCard = useCallback((card) => {
|
|
96
|
+
void dispatch(createIntent(KanbanAction.DeleteCard, {
|
|
97
|
+
card
|
|
98
|
+
}));
|
|
99
|
+
}, [
|
|
100
|
+
dispatch
|
|
101
|
+
]);
|
|
102
|
+
return /* @__PURE__ */ React.createElement(StackItem.Content, null, model && /* @__PURE__ */ React.createElement(Kanban, {
|
|
103
|
+
model,
|
|
104
|
+
onAddCard: handleAddCard,
|
|
105
|
+
onRemoveCard: handleRemoveCard
|
|
95
106
|
}));
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
return /* @__PURE__ */ React.createElement(StackItem.Content, null, model && /* @__PURE__ */ React.createElement(Kanban, {
|
|
100
|
-
model,
|
|
101
|
-
onAddCard: handleAddCard,
|
|
102
|
-
onRemoveCard: handleRemoveCard
|
|
103
|
-
}));
|
|
107
|
+
} finally {
|
|
108
|
+
_effect.f();
|
|
109
|
+
}
|
|
104
110
|
};
|
|
105
111
|
|
|
106
112
|
// packages/plugins/plugin-kanban/src/components/KanbanViewEditor.tsx
|
|
113
|
+
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
107
114
|
import React2, { useCallback as useCallback2, useMemo as useMemo2 } from "react";
|
|
108
115
|
import { createIntent as createIntent2, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
|
|
109
|
-
import {
|
|
116
|
+
import { Type } from "@dxos/echo";
|
|
117
|
+
import { assertEchoSchema, FormatEnum, isMutable } from "@dxos/echo-schema";
|
|
110
118
|
import { invariant } from "@dxos/invariant";
|
|
111
119
|
import { useClient as useClient2 } from "@dxos/react-client";
|
|
112
120
|
import { Filter as Filter2, getSpace as getSpace2, useQuery as useQuery2, useSchema } from "@dxos/react-client/echo";
|
|
@@ -115,90 +123,99 @@ import { KanbanSettingsSchema } from "@dxos/react-ui-kanban";
|
|
|
115
123
|
import { ViewType, ViewProjection as ViewProjection2 } from "@dxos/schema";
|
|
116
124
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-kanban/src/components/KanbanViewEditor.tsx";
|
|
117
125
|
var KanbanViewEditor = ({ kanban }) => {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
kanban
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
view.query.typename
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
126
|
+
var _effect = _useSignals2();
|
|
127
|
+
try {
|
|
128
|
+
const { dispatchPromise: dispatch } = useIntentDispatcher2();
|
|
129
|
+
const client = useClient2();
|
|
130
|
+
const space = getSpace2(kanban);
|
|
131
|
+
const currentTypename = useMemo2(() => kanban?.cardView?.target?.query?.typename, [
|
|
132
|
+
kanban?.cardView?.target?.query?.typename
|
|
133
|
+
]);
|
|
134
|
+
const schema = useSchema(client, space, currentTypename);
|
|
135
|
+
const views = useQuery2(space, Filter2.type(ViewType));
|
|
136
|
+
const handleUpdateTypename = useCallback2((newTypename) => {
|
|
137
|
+
invariant(schema, void 0, {
|
|
138
|
+
F: __dxlog_file,
|
|
139
|
+
L: 34,
|
|
140
|
+
S: void 0,
|
|
141
|
+
A: [
|
|
142
|
+
"schema",
|
|
143
|
+
""
|
|
144
|
+
]
|
|
145
|
+
});
|
|
146
|
+
const matchingViews = views.filter((view) => view.query.typename === currentTypename);
|
|
147
|
+
for (const view of matchingViews) {
|
|
148
|
+
view.query.typename = newTypename;
|
|
149
|
+
}
|
|
150
|
+
assertEchoSchema(schema).updateTypename(newTypename);
|
|
151
|
+
}, [
|
|
152
|
+
views,
|
|
153
|
+
schema
|
|
154
|
+
]);
|
|
155
|
+
const handleDelete = useCallback2((fieldId) => {
|
|
156
|
+
void dispatch?.(createIntent2(KanbanAction.DeleteCardField, {
|
|
157
|
+
kanban,
|
|
158
|
+
fieldId
|
|
159
|
+
}));
|
|
160
|
+
}, [
|
|
161
|
+
dispatch,
|
|
162
|
+
kanban
|
|
163
|
+
]);
|
|
164
|
+
const projection = useMemo2(() => {
|
|
165
|
+
if (kanban?.cardView?.target && schema) {
|
|
166
|
+
const jsonSchema = Type.toJsonSchema(schema);
|
|
167
|
+
return new ViewProjection2(jsonSchema, kanban.cardView.target);
|
|
168
|
+
}
|
|
169
|
+
}, [
|
|
170
|
+
kanban?.cardView?.target,
|
|
171
|
+
schema,
|
|
172
|
+
JSON.stringify(schema ? Type.toJsonSchema(schema) : {})
|
|
173
|
+
]);
|
|
174
|
+
const fieldProjections = projection?.getFieldProjections() || [];
|
|
175
|
+
const selectFields = fieldProjections.filter((field) => field.props.format === FormatEnum.SingleSelect).map(({ field }) => ({
|
|
176
|
+
value: field.id,
|
|
177
|
+
label: field.path
|
|
149
178
|
}));
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
179
|
+
const onSave = useCallback2((values) => {
|
|
180
|
+
kanban.columnFieldId = values.columnFieldId;
|
|
181
|
+
}, [
|
|
182
|
+
kanban
|
|
183
|
+
]);
|
|
184
|
+
const initialValues = useMemo2(() => ({
|
|
185
|
+
columnFieldId: kanban.columnFieldId
|
|
186
|
+
}), [
|
|
187
|
+
kanban.columnFieldId
|
|
188
|
+
]);
|
|
189
|
+
const custom = useMemo2(() => ({
|
|
190
|
+
columnFieldId: (props) => /* @__PURE__ */ React2.createElement(SelectInput, {
|
|
191
|
+
...props,
|
|
192
|
+
options: selectFields
|
|
193
|
+
})
|
|
194
|
+
}), [
|
|
195
|
+
selectFields
|
|
196
|
+
]);
|
|
197
|
+
if (!space || !schema || !kanban.cardView?.target) {
|
|
198
|
+
return null;
|
|
157
199
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
kanban.columnFieldId
|
|
177
|
-
]);
|
|
178
|
-
const custom = useMemo2(() => ({
|
|
179
|
-
columnFieldId: (props) => /* @__PURE__ */ React2.createElement(SelectInput, {
|
|
180
|
-
...props,
|
|
181
|
-
options: selectFields
|
|
182
|
-
})
|
|
183
|
-
}), [
|
|
184
|
-
selectFields
|
|
185
|
-
]);
|
|
186
|
-
if (!space || !schema || !kanban.cardView?.target) {
|
|
187
|
-
return null;
|
|
200
|
+
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("div", {
|
|
201
|
+
role: "none",
|
|
202
|
+
className: "p-2"
|
|
203
|
+
}, /* @__PURE__ */ React2.createElement(Form, {
|
|
204
|
+
schema: KanbanSettingsSchema,
|
|
205
|
+
values: initialValues,
|
|
206
|
+
onSave,
|
|
207
|
+
autoSave: true,
|
|
208
|
+
Custom: custom
|
|
209
|
+
})), /* @__PURE__ */ React2.createElement(ViewEditor, {
|
|
210
|
+
registry: space.db.schemaRegistry,
|
|
211
|
+
schema,
|
|
212
|
+
view: kanban.cardView.target,
|
|
213
|
+
onTypenameChanged: isMutable(schema) ? handleUpdateTypename : void 0,
|
|
214
|
+
onDelete: isMutable(schema) ? handleDelete : void 0
|
|
215
|
+
}));
|
|
216
|
+
} finally {
|
|
217
|
+
_effect.f();
|
|
188
218
|
}
|
|
189
|
-
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(Form, {
|
|
190
|
-
schema: KanbanSettingsSchema,
|
|
191
|
-
values: initialValues,
|
|
192
|
-
onSave,
|
|
193
|
-
autoSave: true,
|
|
194
|
-
Custom: custom
|
|
195
|
-
}), /* @__PURE__ */ React2.createElement(ViewEditor, {
|
|
196
|
-
registry: space.db.schemaRegistry,
|
|
197
|
-
schema,
|
|
198
|
-
view: kanban.cardView.target,
|
|
199
|
-
onTypenameChanged: schema.readonly ? void 0 : handleUpdateTypename,
|
|
200
|
-
onDelete: schema.readonly ? void 0 : handleDelete
|
|
201
|
-
}));
|
|
202
219
|
};
|
|
203
220
|
|
|
204
221
|
// packages/plugins/plugin-kanban/src/capabilities/react-surface.tsx
|
|
@@ -308,4 +325,4 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
|
|
|
308
325
|
export {
|
|
309
326
|
react_surface_default as default
|
|
310
327
|
};
|
|
311
|
-
//# sourceMappingURL=react-surface-
|
|
328
|
+
//# sourceMappingURL=react-surface-W43CBHJ2.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 Schema } from 'effect';\nimport React, { useMemo } from 'react';\n\nimport { Capabilities, contributes, createSurface, useCapabilities } from '@dxos/app-framework';\nimport { getTypenameOrThrow, toJsonSchema } from '@dxos/echo-schema';\nimport { findAnnotation } from '@dxos/effect';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { type CollectionType } from '@dxos/plugin-space/types';\nimport { useClient } from '@dxos/react-client';\nimport { getSpace, isSpace, type Space } from '@dxos/react-client/echo';\nimport { type InputProps, SelectInput, useFormValues } from '@dxos/react-ui-form';\nimport { type KanbanType } from '@dxos/react-ui-kanban';\n\nimport { KanbanContainer, KanbanViewEditor } from '../components';\nimport { KANBAN_PLUGIN } from '../meta';\nimport { isKanban, TypenameAnnotationId, PivotColumnAnnotationId } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${KANBAN_PLUGIN}/kanban`,\n role: ['article', 'section'],\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data, role }) => <KanbanContainer kanban={data.subject} role={role} />,\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/object-settings`,\n role: 'object-settings',\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data }) => <KanbanViewEditor kanban={data.subject} />,\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/create-initial-schema-form`,\n role: 'form-input',\n filter: (\n data,\n ): data is { prop: string; schema: Schema.Schema<any>; target: Space | CollectionType | undefined } => {\n if (data.prop !== 'typename') {\n return false;\n }\n\n const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, TypenameAnnotationId);\n return !!annotation;\n },\n component: ({ data: { target }, ...inputProps }) => {\n const client = useClient();\n const props = inputProps as any as InputProps;\n const space = isSpace(target) ? target : getSpace(target);\n if (!space) {\n return null;\n }\n\n const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);\n const whitelistedTypenames = useMemo(\n () => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => type.typename))),\n [schemaWhitelists],\n );\n\n const fixed = client.graph.schemaRegistry.schemas.filter((schema) =>\n whitelistedTypenames.has(getTypenameOrThrow(schema)),\n );\n const dynamic = space?.db.schemaRegistry.query().runSync();\n const typenames = Array.from(\n new Set<string>([\n ...fixed.map((schema) => getTypenameOrThrow(schema)),\n ...dynamic.map((schema) => schema.typename),\n ]),\n ).sort();\n\n return <SelectInput {...props} options={typenames.map((typename) => ({ value: typename }))} />;\n },\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/create-initial-schema-form-[pivot-column]`,\n role: 'form-input',\n filter: (\n data,\n ): data is { prop: string; schema: Schema.Schema<any>; target: Space | CollectionType | undefined } => {\n const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, PivotColumnAnnotationId);\n return !!annotation;\n },\n component: ({ data: { target }, ...inputProps }) => {\n const props = inputProps as any as InputProps;\n const space = isSpace(target) ? target : getSpace(target);\n if (!space) {\n return null;\n }\n const { typename } = useFormValues();\n // TODO(wittjosiah): Unify this schema lookup.\n const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);\n const staticSchema = schemaWhitelists.flat().find((schema) => getTypenameOrThrow(schema) === typename);\n const [selectedSchema] = space?.db.schemaRegistry.query({ typename }).runSync();\n\n const singleSelectColumns = useMemo(() => {\n const properties = staticSchema\n ? toJsonSchema(staticSchema).properties\n : selectedSchema?.jsonSchema?.properties;\n if (!properties) {\n return [];\n }\n\n const columns = Object.entries(properties).reduce<string[]>((acc, [key, value]) => {\n if (typeof value === 'object' && value?.format === 'single-select') {\n acc.push(key);\n }\n return acc;\n }, []);\n\n return columns;\n }, [selectedSchema?.jsonSchema, staticSchema]);\n\n if (!typename) {\n return null;\n }\n\n return <SelectInput {...props} options={singleSelectColumns.map((column) => ({ value: column }))} />;\n },\n }),\n ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { EchoSchema, getTypenameOrThrow, toJsonSchema, type TypedObject } from '@dxos/echo-schema';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, useQuery, getSpace, live } from '@dxos/react-client/echo';\nimport { type KanbanType, useKanbanModel, Kanban } from '@dxos/react-ui-kanban';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { ViewProjection } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\nexport const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {\n const client = useClient();\n const [cardSchema, setCardSchema] = useState<TypedObject<any, any>>();\n const [projection, setProjection] = useState<ViewProjection>();\n const space = getSpace(kanban);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const jsonSchema = useMemo(\n () =>\n cardSchema instanceof EchoSchema ? cardSchema.jsonSchema : cardSchema ? toJsonSchema(cardSchema) : undefined,\n [cardSchema],\n );\n\n useEffect(() => {\n const typename = kanban.cardView?.target?.query?.typename;\n const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => getTypenameOrThrow(schema) === typename);\n if (staticSchema) {\n setCardSchema(() => staticSchema as TypedObject<any, any>);\n }\n if (!staticSchema && typename && space) {\n const query = space.db.schemaRegistry.query({ typename });\n const unsubscribe = query.subscribe(\n () => {\n const [schema] = query.results;\n if (schema) {\n setCardSchema(schema);\n }\n },\n { fire: true },\n );\n return unsubscribe;\n }\n }, [kanban.cardView?.target?.query, space]);\n\n useEffect(() => {\n if (kanban.cardView?.target && jsonSchema) {\n setProjection(new ViewProjection(jsonSchema, kanban.cardView.target));\n }\n // TODO(ZaymonFC): Is there a better way to get notified about deep changes in the json schema?\n }, [kanban.cardView?.target, JSON.stringify(jsonSchema)]);\n\n const objects = useQuery(space, cardSchema ? Filter.type(cardSchema) : Filter.nothing());\n const filteredObjects = useGlobalFilteredObjects(objects);\n\n const model = useKanbanModel({\n kanban,\n schema: cardSchema,\n projection,\n items: filteredObjects,\n });\n\n const handleAddCard = useCallback(\n (columnValue: string | undefined) => {\n const path = model?.columnFieldPath;\n if (space && cardSchema && path) {\n const card = live(cardSchema, { [path]: columnValue });\n space.db.add(card);\n return card.id;\n }\n },\n [space, cardSchema, model],\n );\n\n const handleRemoveCard = useCallback(\n (card: { id: string }) => {\n void dispatch(createIntent(KanbanAction.DeleteCard, { card }));\n },\n [dispatch],\n );\n\n return (\n <StackItem.Content>\n {model && <Kanban model={model} onAddCard={handleAddCard} onRemoveCard={handleRemoveCard} />}\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Type } from '@dxos/echo';\nimport { assertEchoSchema, FormatEnum, isMutable } 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.type(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 assertEchoSchema(schema).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 const jsonSchema = Type.toJsonSchema(schema);\n return new ViewProjection(jsonSchema, kanban.cardView.target);\n }\n }, [kanban?.cardView?.target, schema, JSON.stringify(schema ? Type.toJsonSchema(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 <div role='none' className='p-2'>\n <Form schema={KanbanSettingsSchema} values={initialValues} onSave={onSave} autoSave Custom={custom} />\n </div>\n <ViewEditor\n registry={space.db.schemaRegistry}\n schema={schema}\n view={kanban.cardView.target}\n onTypenameChanged={isMutable(schema) ? handleUpdateTypename : undefined}\n onDelete={isMutable(schema) ? handleDelete : undefined}\n />\n </>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useMemo", "Capabilities", "contributes", "createSurface", "useCapabilities", "getTypenameOrThrow", "toJsonSchema", "findAnnotation", "ClientCapabilities", "useClient", "getSpace", "isSpace", "SelectInput", "useFormValues", "React", "useCallback", "useEffect", "useMemo", "useState", "createIntent", "useIntentDispatcher", "EchoSchema", "getTypenameOrThrow", "toJsonSchema", "useGlobalFilteredObjects", "useClient", "Filter", "useQuery", "getSpace", "live", "useKanbanModel", "Kanban", "StackItem", "ViewProjection", "KanbanContainer", "kanban", "client", "useClient", "cardSchema", "setCardSchema", "useState", "projection", "setProjection", "space", "getSpace", "dispatchPromise", "dispatch", "useIntentDispatcher", "jsonSchema", "useMemo", "EchoSchema", "toJsonSchema", "undefined", "useEffect", "typename", "cardView", "target", "query", "staticSchema", "graph", "schemaRegistry", "schemas", "find", "schema", "getTypenameOrThrow", "db", "unsubscribe", "subscribe", "results", "fire", "ViewProjection", "JSON", "stringify", "objects", "useQuery", "Filter", "type", "nothing", "filteredObjects", "useGlobalFilteredObjects", "model", "useKanbanModel", "items", "handleAddCard", "useCallback", "columnValue", "path", "columnFieldPath", "card", "live", "add", "id", "handleRemoveCard", "createIntent", "KanbanAction", "DeleteCard", "StackItem", "Content", "Kanban", "onAddCard", "onRemoveCard", "React", "useCallback", "useMemo", "createIntent", "useIntentDispatcher", "Type", "assertEchoSchema", "FormatEnum", "isMutable", "invariant", "useClient", "Filter", "getSpace", "useQuery", "useSchema", "ViewEditor", "Form", "SelectInput", "KanbanSettingsSchema", "ViewType", "ViewProjection", "KanbanViewEditor", "kanban", "dispatchPromise", "dispatch", "useIntentDispatcher", "client", "useClient", "space", "getSpace", "currentTypename", "useMemo", "cardView", "target", "query", "typename", "schema", "useSchema", "views", "useQuery", "Filter", "type", "ViewType", "handleUpdateTypename", "useCallback", "newTypename", "invariant", "matchingViews", "filter", "view", "assertEchoSchema", "updateTypename", "handleDelete", "fieldId", "createIntent", "KanbanAction", "DeleteCardField", "projection", "jsonSchema", "Type", "toJsonSchema", "ViewProjection", "JSON", "stringify", "fieldProjections", "getFieldProjections", "selectFields", "field", "props", "format", "FormatEnum", "SingleSelect", "map", "value", "id", "label", "path", "onSave", "values", "columnFieldId", "initialValues", "custom", "React", "SelectInput", "options", "div", "role", "className", "Form", "KanbanSettingsSchema", "autoSave", "Custom", "ViewEditor", "registry", "db", "schemaRegistry", "onTypenameChanged", "isMutable", "undefined", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "KANBAN_PLUGIN", "role", "filter", "data", "isKanban", "subject", "component", "React", "KanbanContainer", "kanban", "KanbanViewEditor", "prop", "annotation", "findAnnotation", "schema", "ast", "TypenameAnnotationId", "target", "inputProps", "client", "useClient", "props", "space", "isSpace", "getSpace", "schemaWhitelists", "useCapabilities", "ClientCapabilities", "SchemaWhiteList", "whitelistedTypenames", "useMemo", "Set", "flatMap", "typeArray", "map", "type", "typename", "fixed", "graph", "schemaRegistry", "schemas", "has", "getTypenameOrThrow", "dynamic", "db", "query", "runSync", "typenames", "Array", "from", "sort", "SelectInput", "options", "value", "PivotColumnAnnotationId", "useFormValues", "staticSchema", "flat", "find", "selectedSchema", "singleSelectColumns", "properties", "toJsonSchema", "jsonSchema", "columns", "Object", "entries", "reduce", "acc", "key", "format", "push", "column"]
|
|
7
|
+
}
|
|
@@ -16,13 +16,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
19
|
+
var artifact_definition_GAKXWPS3_exports = {};
|
|
20
|
+
__export(artifact_definition_GAKXWPS3_exports, {
|
|
21
21
|
default: () => artifact_definition_default
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
24
|
-
var
|
|
23
|
+
module.exports = __toCommonJS(artifact_definition_GAKXWPS3_exports);
|
|
24
|
+
var import_chunk_3BKBOGOH = require("./chunk-3BKBOGOH.cjs");
|
|
25
25
|
var import_effect = require("effect");
|
|
26
|
+
var import_ai = require("@dxos/ai");
|
|
26
27
|
var import_app_framework = require("@dxos/app-framework");
|
|
27
28
|
var import_artifact = require("@dxos/artifact");
|
|
28
29
|
var import_assistant = require("@dxos/assistant");
|
|
@@ -32,13 +33,13 @@ var import_types = require("@dxos/plugin-space/types");
|
|
|
32
33
|
var import_echo = require("@dxos/react-client/echo");
|
|
33
34
|
var import_react_ui_kanban = require("@dxos/react-ui-kanban");
|
|
34
35
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-kanban/src/capabilities/artifact-definition.ts";
|
|
35
|
-
var QualifiedId =
|
|
36
|
+
var QualifiedId = import_effect.Schema.String.annotations({
|
|
36
37
|
description: "The fully qualified ID of the kanban `spaceID:objectID`"
|
|
37
38
|
});
|
|
38
39
|
var artifact_definition_default = () => {
|
|
39
40
|
const definition = (0, import_artifact.defineArtifact)({
|
|
40
|
-
id: `artifact:${
|
|
41
|
-
name:
|
|
41
|
+
id: `artifact:${import_chunk_3BKBOGOH.meta.id}`,
|
|
42
|
+
name: import_chunk_3BKBOGOH.meta.name,
|
|
42
43
|
instructions: `
|
|
43
44
|
- Before adding items to a kanban board, inspect the board to see its schema
|
|
44
45
|
- When adding items, you must not include the 'id' field -- it is automatically generated
|
|
@@ -46,24 +47,24 @@ var artifact_definition_default = () => {
|
|
|
46
47
|
`,
|
|
47
48
|
schema: import_react_ui_kanban.KanbanType,
|
|
48
49
|
tools: [
|
|
49
|
-
(0,
|
|
50
|
+
(0, import_ai.createTool)(import_chunk_3BKBOGOH.meta.id, {
|
|
50
51
|
name: "create",
|
|
51
52
|
description: `
|
|
52
53
|
Create a new kanban board using an existing schema.
|
|
53
54
|
Use schema_create first to create a schema, or schema_list to choose an existing one.`,
|
|
54
55
|
caption: "Creating kanban board...",
|
|
55
|
-
schema:
|
|
56
|
-
typename:
|
|
56
|
+
schema: import_effect.Schema.Struct({
|
|
57
|
+
typename: import_effect.Schema.String.annotations({
|
|
57
58
|
description: "The fully qualified typename of the schema to use for the kanban cards."
|
|
58
59
|
}),
|
|
59
|
-
pivotColumn:
|
|
60
|
+
pivotColumn: import_effect.Schema.optional(import_effect.Schema.String).annotations({
|
|
60
61
|
description: "Optional field name to use as the column pivot."
|
|
61
62
|
})
|
|
62
63
|
}),
|
|
63
64
|
execute: async ({ typename, pivotColumn }, { extensions }) => {
|
|
64
65
|
(0, import_invariant.invariant)(extensions?.space, "No space", {
|
|
65
66
|
F: __dxlog_file,
|
|
66
|
-
L:
|
|
67
|
+
L: 57,
|
|
67
68
|
S: void 0,
|
|
68
69
|
A: [
|
|
69
70
|
"extensions?.space",
|
|
@@ -72,7 +73,7 @@ var artifact_definition_default = () => {
|
|
|
72
73
|
});
|
|
73
74
|
(0, import_invariant.invariant)(extensions?.dispatch, "No intent dispatcher", {
|
|
74
75
|
F: __dxlog_file,
|
|
75
|
-
L:
|
|
76
|
+
L: 58,
|
|
76
77
|
S: void 0,
|
|
77
78
|
A: [
|
|
78
79
|
"extensions?.dispatch",
|
|
@@ -83,9 +84,9 @@ var artifact_definition_default = () => {
|
|
|
83
84
|
typename
|
|
84
85
|
}).firstOrUndefined();
|
|
85
86
|
if (!schema) {
|
|
86
|
-
return
|
|
87
|
+
return import_ai.ToolResult.Error(`Schema not found: ${typename}`);
|
|
87
88
|
}
|
|
88
|
-
const intent = (0, import_effect.pipe)((0, import_app_framework.createIntent)(
|
|
89
|
+
const intent = (0, import_effect.pipe)((0, import_app_framework.createIntent)(import_chunk_3BKBOGOH.KanbanAction.Create, {
|
|
89
90
|
space: extensions.space,
|
|
90
91
|
typename,
|
|
91
92
|
initialPivotColumn: pivotColumn
|
|
@@ -94,20 +95,20 @@ var artifact_definition_default = () => {
|
|
|
94
95
|
}));
|
|
95
96
|
const { data, error } = await extensions.dispatch(intent);
|
|
96
97
|
if (!data || error) {
|
|
97
|
-
return
|
|
98
|
+
return import_ai.ToolResult.Error(error?.message ?? "Failed to create kanban board");
|
|
98
99
|
}
|
|
99
|
-
return
|
|
100
|
+
return import_ai.ToolResult.Success((0, import_assistant.createArtifactElement)(data.id));
|
|
100
101
|
}
|
|
101
102
|
}),
|
|
102
|
-
(0,
|
|
103
|
+
(0, import_ai.createTool)(import_chunk_3BKBOGOH.meta.id, {
|
|
103
104
|
name: "list",
|
|
104
105
|
description: "List all kanban boards in the current space.",
|
|
105
106
|
caption: "Listing kanban boards...",
|
|
106
|
-
schema:
|
|
107
|
+
schema: import_effect.Schema.Struct({}),
|
|
107
108
|
execute: async (_input, { extensions }) => {
|
|
108
109
|
(0, import_invariant.invariant)(extensions?.space, "No space", {
|
|
109
110
|
F: __dxlog_file,
|
|
110
|
-
L:
|
|
111
|
+
L: 89,
|
|
111
112
|
S: void 0,
|
|
112
113
|
A: [
|
|
113
114
|
"extensions?.space",
|
|
@@ -115,7 +116,7 @@ var artifact_definition_default = () => {
|
|
|
115
116
|
]
|
|
116
117
|
});
|
|
117
118
|
const space = extensions.space;
|
|
118
|
-
const { objects: boards } = await space.db.query(import_echo.Filter.
|
|
119
|
+
const { objects: boards } = await space.db.query(import_echo.Filter.type(import_react_ui_kanban.KanbanType)).run();
|
|
119
120
|
const boardInfo = await Promise.all(boards.map(async (board) => {
|
|
120
121
|
const view = await board.cardView?.load();
|
|
121
122
|
return {
|
|
@@ -123,20 +124,20 @@ var artifact_definition_default = () => {
|
|
|
123
124
|
typename: view?.query.typename
|
|
124
125
|
};
|
|
125
126
|
}));
|
|
126
|
-
return
|
|
127
|
+
return import_ai.ToolResult.Success(boardInfo);
|
|
127
128
|
}
|
|
128
129
|
}),
|
|
129
|
-
(0,
|
|
130
|
+
(0, import_ai.createTool)(import_chunk_3BKBOGOH.meta.id, {
|
|
130
131
|
name: "inspect",
|
|
131
132
|
description: "Get details about a specific kanban board.",
|
|
132
133
|
caption: "Inspecting kanban board...",
|
|
133
|
-
schema:
|
|
134
|
+
schema: import_effect.Schema.Struct({
|
|
134
135
|
id: QualifiedId
|
|
135
136
|
}),
|
|
136
137
|
execute: async ({ id }, { extensions }) => {
|
|
137
138
|
(0, import_invariant.invariant)(extensions?.space, "No space", {
|
|
138
139
|
F: __dxlog_file,
|
|
139
|
-
L:
|
|
140
|
+
L: 112,
|
|
140
141
|
S: void 0,
|
|
141
142
|
A: [
|
|
142
143
|
"extensions?.space",
|
|
@@ -144,11 +145,11 @@ var artifact_definition_default = () => {
|
|
|
144
145
|
]
|
|
145
146
|
});
|
|
146
147
|
const space = extensions.space;
|
|
147
|
-
const { objects: boards } = await space.db.query(import_echo.Filter.
|
|
148
|
+
const { objects: boards } = await space.db.query(import_echo.Filter.type(import_react_ui_kanban.KanbanType)).run();
|
|
148
149
|
const board = boards.find((board2) => (0, import_echo.fullyQualifiedId)(board2) === id);
|
|
149
150
|
(0, import_invariant.invariant)((0, import_echo_schema.isInstanceOf)(import_react_ui_kanban.KanbanType, board), void 0, {
|
|
150
151
|
F: __dxlog_file,
|
|
151
|
-
L:
|
|
152
|
+
L: 116,
|
|
152
153
|
S: void 0,
|
|
153
154
|
A: [
|
|
154
155
|
"isInstanceOf(KanbanType, board)",
|
|
@@ -158,7 +159,7 @@ var artifact_definition_default = () => {
|
|
|
158
159
|
const view = await board.cardView?.load();
|
|
159
160
|
(0, import_invariant.invariant)(view, void 0, {
|
|
160
161
|
F: __dxlog_file,
|
|
161
|
-
L:
|
|
162
|
+
L: 119,
|
|
162
163
|
S: void 0,
|
|
163
164
|
A: [
|
|
164
165
|
"view",
|
|
@@ -171,14 +172,14 @@ var artifact_definition_default = () => {
|
|
|
171
172
|
}).firstOrUndefined();
|
|
172
173
|
(0, import_invariant.invariant)(schema, void 0, {
|
|
173
174
|
F: __dxlog_file,
|
|
174
|
-
L:
|
|
175
|
+
L: 123,
|
|
175
176
|
S: void 0,
|
|
176
177
|
A: [
|
|
177
178
|
"schema",
|
|
178
179
|
""
|
|
179
180
|
]
|
|
180
181
|
});
|
|
181
|
-
return
|
|
182
|
+
return import_ai.ToolResult.Success({
|
|
182
183
|
schema,
|
|
183
184
|
columnField: board.columnFieldId,
|
|
184
185
|
viewFields: view.fields
|
|
@@ -189,4 +190,4 @@ var artifact_definition_default = () => {
|
|
|
189
190
|
});
|
|
190
191
|
return (0, import_app_framework.contributes)(import_app_framework.Capabilities.ArtifactDefinition, definition);
|
|
191
192
|
};
|
|
192
|
-
//# sourceMappingURL=artifact-definition-
|
|
193
|
+
//# sourceMappingURL=artifact-definition-GAKXWPS3.cjs.map
|