@dxos/plugin-kanban 0.8.2-main.2f9c567 → 0.8.2-main.36232bc
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-VGRBHXJ6.mjs → artifact-definition-SVNHDJQT.mjs} +10 -10
- 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-H5UD7LKX.mjs → react-surface-R25PYWQV.mjs} +26 -56
- package/dist/lib/browser/react-surface-R25PYWQV.mjs.map +7 -0
- package/dist/lib/browser/types.mjs +3 -1
- package/dist/lib/node/{artifact-definition-KDTULJLX.cjs → artifact-definition-M2XAYUI2.cjs} +17 -17
- 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-LKFQ3TZH.cjs → react-surface-FVM64YAQ.cjs} +31 -61
- package/dist/lib/node/react-surface-FVM64YAQ.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-G2R5LF26.mjs → artifact-definition-HQ5I2OO5.mjs} +10 -10
- 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-TUKDSY4T.mjs → react-surface-LZ7MP3CQ.mjs} +26 -56
- package/dist/lib/node-esm/react-surface-LZ7MP3CQ.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/types.d.ts +41 -34
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +25 -29
- package/src/capabilities/artifact-definition.ts +8 -8
- package/src/capabilities/intent-resolver.ts +6 -10
- package/src/capabilities/react-surface.tsx +12 -46
- package/src/components/KanbanContainer.tsx +8 -21
- package/src/types.ts +43 -26
- package/dist/lib/browser/artifact-definition-VGRBHXJ6.mjs.map +0 -7
- package/dist/lib/browser/chunk-6JAA7YSW.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-44SXCRIH.mjs +0 -297
- package/dist/lib/browser/intent-resolver-44SXCRIH.mjs.map +0 -7
- package/dist/lib/browser/react-surface-H5UD7LKX.mjs.map +0 -7
- package/dist/lib/node/artifact-definition-KDTULJLX.cjs.map +0 -7
- package/dist/lib/node/chunk-O4U7ZQ2I.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-23TVN46D.cjs +0 -308
- package/dist/lib/node/intent-resolver-23TVN46D.cjs.map +0 -7
- package/dist/lib/node/react-surface-LKFQ3TZH.cjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-G2R5LF26.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NOC32MF5.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-SUADAOIJ.mjs +0 -298
- package/dist/lib/node-esm/intent-resolver-SUADAOIJ.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-TUKDSY4T.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 -186
- 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
|
@@ -5,46 +5,32 @@ import {
|
|
|
5
5
|
PivotColumnAnnotationId,
|
|
6
6
|
TypenameAnnotationId,
|
|
7
7
|
isKanban
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-2N7CO3DI.mjs";
|
|
9
9
|
|
|
10
10
|
// packages/plugins/plugin-kanban/src/capabilities/react-surface.tsx
|
|
11
|
-
import React3, { useMemo as
|
|
12
|
-
import { Capabilities, contributes, createSurface
|
|
13
|
-
import { getTypenameOrThrow as getTypenameOrThrow2, toJsonSchema as toJsonSchema2 } from "@dxos/echo-schema";
|
|
11
|
+
import React3, { useMemo as useMemo2 } from "react";
|
|
12
|
+
import { Capabilities, contributes, createSurface } from "@dxos/app-framework";
|
|
14
13
|
import { findAnnotation } from "@dxos/effect";
|
|
15
|
-
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
16
|
-
import { useClient as useClient3 } from "@dxos/react-client";
|
|
17
14
|
import { getSpace as getSpace3, isSpace } from "@dxos/react-client/echo";
|
|
18
15
|
import { SelectInput as SelectInput2, useFormValues } from "@dxos/react-ui-form";
|
|
19
16
|
|
|
20
17
|
// packages/plugins/plugin-kanban/src/components/KanbanContainer.tsx
|
|
21
|
-
import React, { useCallback, useEffect,
|
|
18
|
+
import React, { useCallback, useEffect, useState } from "react";
|
|
22
19
|
import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
|
|
23
|
-
import { EchoSchema, getTypenameOrThrow, toJsonSchema } from "@dxos/echo-schema";
|
|
24
20
|
import { useGlobalFilteredObjects } from "@dxos/plugin-search";
|
|
25
|
-
import { useClient } from "@dxos/react-client";
|
|
26
21
|
import { Filter, useQuery, getSpace, live } from "@dxos/react-client/echo";
|
|
27
22
|
import { useKanbanModel, Kanban } from "@dxos/react-ui-kanban";
|
|
28
23
|
import { StackItem } from "@dxos/react-ui-stack";
|
|
29
24
|
import { ViewProjection } from "@dxos/schema";
|
|
30
25
|
var KanbanContainer = ({ kanban }) => {
|
|
31
|
-
const client = useClient();
|
|
32
26
|
const [cardSchema, setCardSchema] = useState();
|
|
33
27
|
const [projection, setProjection] = useState();
|
|
34
28
|
const space = getSpace(kanban);
|
|
35
29
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
36
|
-
const jsonSchema = useMemo(() => cardSchema instanceof EchoSchema ? cardSchema.jsonSchema : cardSchema ? toJsonSchema(cardSchema) : void 0, [
|
|
37
|
-
cardSchema
|
|
38
|
-
]);
|
|
39
30
|
useEffect(() => {
|
|
40
|
-
|
|
41
|
-
const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => getTypenameOrThrow(schema) === typename);
|
|
42
|
-
if (staticSchema) {
|
|
43
|
-
setCardSchema(() => staticSchema);
|
|
44
|
-
}
|
|
45
|
-
if (!staticSchema && typename && space) {
|
|
31
|
+
if (kanban.cardView?.target?.query?.typename && space) {
|
|
46
32
|
const query = space.db.schemaRegistry.query({
|
|
47
|
-
typename
|
|
33
|
+
typename: kanban.cardView.target.query.typename
|
|
48
34
|
});
|
|
49
35
|
const unsubscribe = query.subscribe(() => {
|
|
50
36
|
const [schema] = query.results;
|
|
@@ -61,12 +47,13 @@ var KanbanContainer = ({ kanban }) => {
|
|
|
61
47
|
space
|
|
62
48
|
]);
|
|
63
49
|
useEffect(() => {
|
|
64
|
-
if (kanban.cardView?.target &&
|
|
65
|
-
setProjection(new ViewProjection(jsonSchema, kanban.cardView.target));
|
|
50
|
+
if (kanban.cardView?.target && cardSchema) {
|
|
51
|
+
setProjection(new ViewProjection(cardSchema.jsonSchema, kanban.cardView.target));
|
|
66
52
|
}
|
|
67
53
|
}, [
|
|
68
54
|
kanban.cardView?.target,
|
|
69
|
-
|
|
55
|
+
cardSchema,
|
|
56
|
+
JSON.stringify(cardSchema?.jsonSchema)
|
|
70
57
|
]);
|
|
71
58
|
const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());
|
|
72
59
|
const filteredObjects = useGlobalFilteredObjects(objects);
|
|
@@ -105,11 +92,11 @@ var KanbanContainer = ({ kanban }) => {
|
|
|
105
92
|
};
|
|
106
93
|
|
|
107
94
|
// packages/plugins/plugin-kanban/src/components/KanbanViewEditor.tsx
|
|
108
|
-
import React2, { useCallback as useCallback2, useMemo
|
|
95
|
+
import React2, { useCallback as useCallback2, useMemo } from "react";
|
|
109
96
|
import { createIntent as createIntent2, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
|
|
110
97
|
import { FormatEnum } from "@dxos/echo-schema";
|
|
111
98
|
import { invariant } from "@dxos/invariant";
|
|
112
|
-
import { useClient
|
|
99
|
+
import { useClient } from "@dxos/react-client";
|
|
113
100
|
import { Filter as Filter2, getSpace as getSpace2, useQuery as useQuery2, useSchema } from "@dxos/react-client/echo";
|
|
114
101
|
import { ViewEditor, Form, SelectInput } from "@dxos/react-ui-form";
|
|
115
102
|
import { KanbanSettingsSchema } from "@dxos/react-ui-kanban";
|
|
@@ -117,9 +104,9 @@ import { ViewType, ViewProjection as ViewProjection2 } from "@dxos/schema";
|
|
|
117
104
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-kanban/src/components/KanbanViewEditor.tsx";
|
|
118
105
|
var KanbanViewEditor = ({ kanban }) => {
|
|
119
106
|
const { dispatchPromise: dispatch } = useIntentDispatcher2();
|
|
120
|
-
const client =
|
|
107
|
+
const client = useClient();
|
|
121
108
|
const space = getSpace2(kanban);
|
|
122
|
-
const currentTypename =
|
|
109
|
+
const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.typename, [
|
|
123
110
|
kanban?.cardView?.target?.query?.typename
|
|
124
111
|
]);
|
|
125
112
|
const schema = useSchema(client, space, currentTypename);
|
|
@@ -152,7 +139,7 @@ var KanbanViewEditor = ({ kanban }) => {
|
|
|
152
139
|
dispatch,
|
|
153
140
|
kanban
|
|
154
141
|
]);
|
|
155
|
-
const projection =
|
|
142
|
+
const projection = useMemo(() => {
|
|
156
143
|
if (kanban?.cardView?.target && schema) {
|
|
157
144
|
return new ViewProjection2(schema.jsonSchema, kanban.cardView.target);
|
|
158
145
|
}
|
|
@@ -171,12 +158,12 @@ var KanbanViewEditor = ({ kanban }) => {
|
|
|
171
158
|
}, [
|
|
172
159
|
kanban
|
|
173
160
|
]);
|
|
174
|
-
const initialValues =
|
|
161
|
+
const initialValues = useMemo(() => ({
|
|
175
162
|
columnFieldId: kanban.columnFieldId
|
|
176
163
|
}), [
|
|
177
164
|
kanban.columnFieldId
|
|
178
165
|
]);
|
|
179
|
-
const custom =
|
|
166
|
+
const custom = useMemo(() => ({
|
|
180
167
|
columnFieldId: (props) => /* @__PURE__ */ React2.createElement(SelectInput, {
|
|
181
168
|
...props,
|
|
182
169
|
options: selectFields
|
|
@@ -225,36 +212,23 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
|
|
|
225
212
|
})
|
|
226
213
|
}),
|
|
227
214
|
createSurface({
|
|
228
|
-
id: `${KANBAN_PLUGIN}/create-initial-schema-form`,
|
|
215
|
+
id: `${KANBAN_PLUGIN}/create-initial-schema-form-[schema]`,
|
|
229
216
|
role: "form-input",
|
|
230
217
|
filter: (data) => {
|
|
231
|
-
if (data.prop !== "typename") {
|
|
232
|
-
return false;
|
|
233
|
-
}
|
|
234
218
|
const annotation = findAnnotation(data.schema.ast, TypenameAnnotationId);
|
|
235
219
|
return !!annotation;
|
|
236
220
|
},
|
|
237
221
|
component: ({ data: { target }, ...inputProps }) => {
|
|
238
|
-
const client = useClient3();
|
|
239
222
|
const props = inputProps;
|
|
240
223
|
const space = isSpace(target) ? target : getSpace3(target);
|
|
241
224
|
if (!space) {
|
|
242
225
|
return null;
|
|
243
226
|
}
|
|
244
|
-
const
|
|
245
|
-
const whitelistedTypenames = useMemo3(() => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => type.typename))), [
|
|
246
|
-
schemaWhitelists
|
|
247
|
-
]);
|
|
248
|
-
const fixed = client.graph.schemaRegistry.schemas.filter((schema) => whitelistedTypenames.has(getTypenameOrThrow2(schema)));
|
|
249
|
-
const dynamic = space?.db.schemaRegistry.query().runSync();
|
|
250
|
-
const typenames = Array.from(/* @__PURE__ */ new Set([
|
|
251
|
-
...fixed.map((schema) => getTypenameOrThrow2(schema)),
|
|
252
|
-
...dynamic.map((schema) => schema.typename)
|
|
253
|
-
])).sort();
|
|
227
|
+
const schemata = space?.db.schemaRegistry.query().runSync();
|
|
254
228
|
return /* @__PURE__ */ React3.createElement(SelectInput2, {
|
|
255
229
|
...props,
|
|
256
|
-
options:
|
|
257
|
-
value: typename
|
|
230
|
+
options: schemata.map((schema) => ({
|
|
231
|
+
value: schema.typename
|
|
258
232
|
}))
|
|
259
233
|
});
|
|
260
234
|
}
|
|
@@ -273,17 +247,14 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
|
|
|
273
247
|
return null;
|
|
274
248
|
}
|
|
275
249
|
const { typename } = useFormValues();
|
|
276
|
-
const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
|
|
277
|
-
const staticSchema = schemaWhitelists.flat().find((schema) => getTypenameOrThrow2(schema) === typename);
|
|
278
250
|
const [selectedSchema] = space?.db.schemaRegistry.query({
|
|
279
251
|
typename
|
|
280
252
|
}).runSync();
|
|
281
|
-
const singleSelectColumns =
|
|
282
|
-
|
|
283
|
-
if (!properties) {
|
|
253
|
+
const singleSelectColumns = useMemo2(() => {
|
|
254
|
+
if (!selectedSchema?.jsonSchema?.properties) {
|
|
284
255
|
return [];
|
|
285
256
|
}
|
|
286
|
-
const columns = Object.entries(properties).reduce((acc, [key, value]) => {
|
|
257
|
+
const columns = Object.entries(selectedSchema.jsonSchema.properties).reduce((acc, [key, value]) => {
|
|
287
258
|
if (typeof value === "object" && value?.format === "single-select") {
|
|
288
259
|
acc.push(key);
|
|
289
260
|
}
|
|
@@ -291,8 +262,7 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
|
|
|
291
262
|
}, []);
|
|
292
263
|
return columns;
|
|
293
264
|
}, [
|
|
294
|
-
selectedSchema?.jsonSchema
|
|
295
|
-
staticSchema
|
|
265
|
+
selectedSchema?.jsonSchema
|
|
296
266
|
]);
|
|
297
267
|
if (!typename) {
|
|
298
268
|
return null;
|
|
@@ -309,4 +279,4 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
|
|
|
309
279
|
export {
|
|
310
280
|
react_surface_default as default
|
|
311
281
|
};
|
|
312
|
-
//# sourceMappingURL=react-surface-
|
|
282
|
+
//# sourceMappingURL=react-surface-LZ7MP3CQ.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 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, 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 [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 = live(cardSchema, { [path]: columnValue });\n space.db.add(card);\n return card.id;\n }\n },\n [space, cardSchema, model],\n );\n\n const handleRemoveCard = useCallback(\n (card: { id: string }) => {\n void dispatch(createIntent(KanbanAction.DeleteCard, { card }));\n },\n [dispatch],\n );\n\n return (\n <StackItem.Content>\n {model && <Kanban model={model} onAddCard={handleAddCard} onRemoveCard={handleRemoveCard} />}\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { FormatEnum } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, getSpace, useQuery, useSchema } from '@dxos/react-client/echo';\nimport { ViewEditor, Form, SelectInput, type CustomInputMap } from '@dxos/react-ui-form';\nimport { type KanbanType, KanbanSettingsSchema } from '@dxos/react-ui-kanban';\nimport { ViewType, ViewProjection } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\ntype KanbanViewEditorProps = { kanban: KanbanType };\n\nexport const KanbanViewEditor = ({ kanban }: KanbanViewEditorProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const client = useClient();\n const space = getSpace(kanban);\n const currentTypename = useMemo(\n () => kanban?.cardView?.target?.query?.typename,\n [kanban?.cardView?.target?.query?.typename],\n );\n const schema = useSchema(client, space, currentTypename);\n const views = useQuery(space, Filter.schema(ViewType));\n\n const handleUpdateTypename = useCallback(\n (newTypename: string) => {\n invariant(schema);\n const matchingViews = views.filter((view) => view.query.typename === currentTypename);\n for (const view of matchingViews) {\n view.query.typename = newTypename;\n }\n\n schema.mutable.updateTypename(newTypename);\n },\n [views, schema],\n );\n\n const handleDelete = useCallback(\n (fieldId: string) => {\n void dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId }));\n },\n [dispatch, kanban],\n );\n\n const projection = useMemo(() => {\n if (kanban?.cardView?.target && schema) {\n return new ViewProjection(schema.jsonSchema, kanban.cardView.target);\n }\n }, [kanban?.cardView?.target, schema, JSON.stringify(schema)]);\n\n const fieldProjections = projection?.getFieldProjections() || [];\n const selectFields = fieldProjections\n .filter((field) => field.props.format === FormatEnum.SingleSelect)\n .map(({ field }) => ({ value: field.id, label: field.path }));\n\n const onSave = useCallback(\n (values: Partial<{ columnFieldId: string }>) => {\n kanban.columnFieldId = values.columnFieldId;\n },\n [kanban],\n );\n\n const initialValues = useMemo(() => ({ columnFieldId: kanban.columnFieldId }), [kanban.columnFieldId]);\n const custom: CustomInputMap = useMemo(\n () => ({ columnFieldId: (props) => <SelectInput {...props} options={selectFields} /> }),\n [selectFields],\n );\n\n if (!space || !schema || !kanban.cardView?.target) {\n return null;\n }\n\n return (\n <>\n <Form schema={KanbanSettingsSchema} values={initialValues} onSave={onSave} autoSave Custom={custom} />\n <ViewEditor\n registry={space.db.schemaRegistry}\n schema={schema}\n view={kanban.cardView.target}\n onTypenameChanged={schema.readonly ? undefined : handleUpdateTypename}\n onDelete={schema.readonly ? undefined : handleDelete}\n />\n </>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useMemo", "Capabilities", "contributes", "createSurface", "findAnnotation", "getSpace", "isSpace", "SelectInput", "useFormValues", "React", "useCallback", "useEffect", "useState", "createIntent", "useIntentDispatcher", "useGlobalFilteredObjects", "Filter", "useQuery", "getSpace", "live", "useKanbanModel", "Kanban", "StackItem", "ViewProjection", "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", "live", "add", "id", "handleRemoveCard", "createIntent", "KanbanAction", "DeleteCard", "StackItem", "Content", "Kanban", "onAddCard", "onRemoveCard", "React", "useCallback", "useMemo", "createIntent", "useIntentDispatcher", "FormatEnum", "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", "ViewType", "handleUpdateTypename", "useCallback", "newTypename", "invariant", "matchingViews", "filter", "view", "mutable", "updateTypename", "handleDelete", "fieldId", "createIntent", "KanbanAction", "DeleteCardField", "projection", "ViewProjection", "jsonSchema", "JSON", "stringify", "fieldProjections", "getFieldProjections", "selectFields", "field", "props", "format", "FormatEnum", "SingleSelect", "map", "value", "id", "label", "path", "onSave", "values", "columnFieldId", "initialValues", "custom", "React", "SelectInput", "options", "Form", "KanbanSettingsSchema", "autoSave", "Custom", "ViewEditor", "registry", "db", "schemaRegistry", "onTypenameChanged", "readonly", "undefined", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "KANBAN_PLUGIN", "role", "filter", "data", "isKanban", "subject", "component", "React", "KanbanContainer", "kanban", "KanbanViewEditor", "annotation", "findAnnotation", "schema", "ast", "TypenameAnnotationId", "target", "inputProps", "props", "space", "isSpace", "getSpace", "schemata", "db", "schemaRegistry", "query", "runSync", "SelectInput", "options", "map", "value", "typename", "PivotColumnAnnotationId", "useFormValues", "selectedSchema", "singleSelectColumns", "useMemo", "jsonSchema", "properties", "columns", "Object", "entries", "reduce", "acc", "key", "format", "push", "column"]
|
|
7
|
+
}
|
|
@@ -4,13 +4,15 @@ import {
|
|
|
4
4
|
KanbanAction,
|
|
5
5
|
PivotColumnAnnotationId,
|
|
6
6
|
TypenameAnnotationId,
|
|
7
|
+
createKanban,
|
|
7
8
|
isKanban
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-2N7CO3DI.mjs";
|
|
9
10
|
export {
|
|
10
11
|
CreateKanbanSchema,
|
|
11
12
|
KanbanAction,
|
|
12
13
|
PivotColumnAnnotationId,
|
|
13
14
|
TypenameAnnotationId,
|
|
15
|
+
createKanban,
|
|
14
16
|
isKanban
|
|
15
17
|
};
|
|
16
18
|
//# sourceMappingURL=types.mjs.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export declare const ArtifactDefinition: (props?: unknown) => Promise<() => Promise<import("@dxos/app-framework").Capability<import("@dxos/artifact").ArtifactDefinition> | import("@dxos/app-framework").AnyCapability[]>>;
|
|
2
|
-
export declare const IntentResolver: (props?:
|
|
2
|
+
export declare const IntentResolver: (props?: unknown) => Promise<() => Promise<import("@dxos/app-framework").Capability<import("@dxos/app-framework").Capabilities.IntentResolver> | import("@dxos/app-framework").AnyCapability[]>>;
|
|
3
3
|
export declare const ReactSurface: (props?: unknown) => Promise<() => Promise<import("@dxos/app-framework").Capability<import("@dxos/app-framework").Capabilities.ReactSurface> | import("@dxos/app-framework").AnyCapability[]>>;
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,oLAA8C,CAAC;AAC9E,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,kBAAkB,oLAA8C,CAAC;AAC9E,eAAO,MAAM,cAAc,kMAA0C,CAAC;AACtE,eAAO,MAAM,YAAY,gMAAwC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Capabilities
|
|
2
|
-
declare const _default: (
|
|
1
|
+
import { Capabilities } from '@dxos/app-framework';
|
|
2
|
+
declare const _default: () => import("@dxos/app-framework").Capability<Capabilities.IntentResolver>;
|
|
3
3
|
export default _default;
|
|
4
4
|
//# sourceMappingURL=intent-resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent-resolver.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/intent-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,YAAY,EAAkB,
|
|
1
|
+
{"version":3,"file":"intent-resolver.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/intent-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,YAAY,EAAkB,MAAM,qBAAqB,CAAC;;AAQhF,wBAsDK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-surface.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/react-surface.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"react-surface.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/react-surface.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAA8B,MAAM,qBAAqB,CAAC;;AAY/E,wBAsEK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KanbanContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/KanbanContainer.tsx"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"KanbanContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/KanbanContainer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAMhE,OAAO,EAAE,KAAK,UAAU,EAA0B,MAAM,uBAAuB,CAAC;AAMhF,eAAO,MAAM,eAAe,eAAgB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,sBA+D/E,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { S } from '@dxos/echo-schema';
|
|
2
|
+
import { type Space } from '@dxos/react-client/echo';
|
|
2
3
|
import { KanbanType } from '@dxos/react-ui-kanban';
|
|
3
4
|
/**
|
|
4
5
|
* Kanban data model.
|
|
@@ -10,58 +11,58 @@ import { KanbanType } from '@dxos/react-ui-kanban';
|
|
|
10
11
|
*/
|
|
11
12
|
export declare const TypenameAnnotationId: unique symbol;
|
|
12
13
|
export declare const PivotColumnAnnotationId: unique symbol;
|
|
13
|
-
export declare const CreateKanbanSchema:
|
|
14
|
-
name:
|
|
15
|
-
typename:
|
|
16
|
-
initialPivotColumn:
|
|
14
|
+
export declare const CreateKanbanSchema: S.Struct<{
|
|
15
|
+
name: S.optional<typeof S.String>;
|
|
16
|
+
typename: S.optional<S.SchemaClass<string, string, never>>;
|
|
17
|
+
initialPivotColumn: S.optional<S.SchemaClass<string, string, never>>;
|
|
17
18
|
}>;
|
|
18
|
-
export type CreateKanbanType =
|
|
19
|
+
export type CreateKanbanType = S.Schema.Type<typeof CreateKanbanSchema>;
|
|
19
20
|
export declare namespace KanbanAction {
|
|
20
|
-
const Create_base:
|
|
21
|
-
readonly _tag:
|
|
21
|
+
const Create_base: S.TaggedClass<Create, "dxos.org/plugin/kanban/action/create", {
|
|
22
|
+
readonly _tag: S.tag<"dxos.org/plugin/kanban/action/create">;
|
|
22
23
|
} & {
|
|
23
|
-
input:
|
|
24
|
-
space:
|
|
25
|
-
}>,
|
|
26
|
-
name:
|
|
27
|
-
typename:
|
|
28
|
-
initialPivotColumn:
|
|
24
|
+
input: S.extend<S.Struct<{
|
|
25
|
+
space: S.Schema<Space, Space, never>;
|
|
26
|
+
}>, S.Struct<{
|
|
27
|
+
name: S.optional<typeof S.String>;
|
|
28
|
+
typename: S.optional<S.SchemaClass<string, string, never>>;
|
|
29
|
+
initialPivotColumn: S.optional<S.SchemaClass<string, string, never>>;
|
|
29
30
|
}>>;
|
|
30
|
-
output:
|
|
31
|
+
output: S.Struct<{
|
|
31
32
|
object: typeof KanbanType;
|
|
32
33
|
}>;
|
|
33
34
|
}>;
|
|
34
35
|
export class Create extends Create_base {
|
|
35
36
|
}
|
|
36
|
-
const DeleteCardField_base:
|
|
37
|
-
readonly _tag:
|
|
37
|
+
const DeleteCardField_base: S.TaggedClass<DeleteCardField, "dxos.org/plugin/kanban/action/delete-card-field", {
|
|
38
|
+
readonly _tag: S.tag<"dxos.org/plugin/kanban/action/delete-card-field">;
|
|
38
39
|
} & {
|
|
39
|
-
input:
|
|
40
|
+
input: S.Struct<{
|
|
40
41
|
kanban: typeof KanbanType;
|
|
41
|
-
fieldId: typeof
|
|
42
|
-
deletionData:
|
|
43
|
-
field:
|
|
44
|
-
id: typeof
|
|
45
|
-
path:
|
|
46
|
-
visible:
|
|
47
|
-
size:
|
|
48
|
-
referencePath:
|
|
42
|
+
fieldId: typeof S.String;
|
|
43
|
+
deletionData: S.optional<S.Struct<{
|
|
44
|
+
field: S.mutable<S.Struct<{
|
|
45
|
+
id: typeof S.String;
|
|
46
|
+
path: S.Schema<import("@dxos/effect").JsonPath, import("@dxos/effect").JsonPath, never>;
|
|
47
|
+
visible: S.optional<typeof S.Boolean>;
|
|
48
|
+
size: S.optional<typeof S.Number>;
|
|
49
|
+
referencePath: S.optional<S.Schema<import("@dxos/effect").JsonPath, import("@dxos/effect").JsonPath, never>>;
|
|
49
50
|
}>>;
|
|
50
|
-
props: typeof
|
|
51
|
-
index: typeof
|
|
51
|
+
props: typeof S.Any;
|
|
52
|
+
index: typeof S.Number;
|
|
52
53
|
}>>;
|
|
53
54
|
}>;
|
|
54
|
-
output: typeof
|
|
55
|
+
output: typeof S.Void;
|
|
55
56
|
}>;
|
|
56
57
|
export class DeleteCardField extends DeleteCardField_base {
|
|
57
58
|
}
|
|
58
|
-
const DeleteCard_base:
|
|
59
|
-
readonly _tag:
|
|
59
|
+
const DeleteCard_base: S.TaggedClass<DeleteCard, "dxos.org/plugin/kanban/action/delete-card", {
|
|
60
|
+
readonly _tag: S.tag<"dxos.org/plugin/kanban/action/delete-card">;
|
|
60
61
|
} & {
|
|
61
|
-
input:
|
|
62
|
-
card: typeof
|
|
62
|
+
input: S.Struct<{
|
|
63
|
+
card: typeof S.Any;
|
|
63
64
|
}>;
|
|
64
|
-
output: typeof
|
|
65
|
+
output: typeof S.Void;
|
|
65
66
|
}>;
|
|
66
67
|
export class DeleteCard extends DeleteCard_base {
|
|
67
68
|
}
|
|
@@ -74,4 +75,10 @@ export type Location = {
|
|
|
74
75
|
idx?: number;
|
|
75
76
|
};
|
|
76
77
|
export declare const isKanban: (object: unknown) => object is KanbanType;
|
|
78
|
+
export declare const createKanban: ({ space, name, typename, initialPivotColumn, }: {
|
|
79
|
+
space: Space;
|
|
80
|
+
name?: string;
|
|
81
|
+
typename?: string;
|
|
82
|
+
initialPivotColumn?: string;
|
|
83
|
+
}) => Promise<KanbanType>;
|
|
77
84
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,KAAK,KAAK,EAAe,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAMnD;;;;;;;GAOG;AAGH,eAAO,MAAM,oBAAoB,eAAwD,CAAC;AAC1F,eAAO,MAAM,uBAAuB,eAA2D,CAAC;AAEhG,eAAO,MAAM,kBAAkB;;;;EAc7B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAExE,yBAAiB,YAAY,CAAC;;;;;;;;;;;;;;;IAG5B,MAAM,OAAO,MAAO,SAAQ,WAK1B;KAAG;;;;;;;;;+BA5CE,EAAG,MAAM;0BAAW,EAAI,MAAK;6BACzB,EAAG,QAAQ,QAAO,EAAG,OAAO;0BAEhC,EAAE,QAAQ,QAAO,EAAI,MAAK;mCAGxB,EAAI,QACf,CAAC,EAAE,MAAM;;;;;;;;IAuCP,MAAM,OAAO,eAAgB,SAAQ,oBAgBnC;KAAG;;;;;;;;;IAEL,MAAM,OAAO,UAAW,SAAQ,eAK9B;KAAG;;CACN;AAUD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,QAAQ,WAAY,OAAO,KAAG,MAAM,IAAI,UAA4D,CAAC;AAElH,eAAO,MAAM,YAAY,mDAKtB;IACD,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,wBAGA,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/plugin-kanban",
|
|
3
|
-
"version": "0.8.2-main.
|
|
3
|
+
"version": "0.8.2-main.36232bc",
|
|
4
4
|
"description": "Kanban DXOS Surface plugin",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -34,25 +34,24 @@
|
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@preact/signals-core": "^1.6.0",
|
|
37
|
-
"
|
|
38
|
-
"@dxos/
|
|
39
|
-
"@dxos/
|
|
40
|
-
"@dxos/
|
|
41
|
-
"@dxos/
|
|
42
|
-
"@dxos/invariant": "0.8.2-main.
|
|
43
|
-
"@dxos/
|
|
44
|
-
"@dxos/
|
|
45
|
-
"@dxos/plugin-
|
|
46
|
-
"@dxos/plugin-
|
|
47
|
-
"@dxos/plugin-
|
|
48
|
-
"@dxos/
|
|
49
|
-
"@dxos/
|
|
50
|
-
"@dxos/react-ui-form": "0.8.2-main.
|
|
51
|
-
"@dxos/react-
|
|
52
|
-
"@dxos/react-ui-stack": "0.8.2-main.
|
|
53
|
-
"@dxos/schema": "0.8.2-main.
|
|
54
|
-
"@dxos/util": "0.8.2-main.
|
|
55
|
-
"@dxos/react-ui-kanban": "0.8.2-main.2f9c567"
|
|
37
|
+
"@dxos/app-framework": "0.8.2-main.36232bc",
|
|
38
|
+
"@dxos/assistant": "0.8.2-main.36232bc",
|
|
39
|
+
"@dxos/async": "0.8.2-main.36232bc",
|
|
40
|
+
"@dxos/artifact": "0.8.2-main.36232bc",
|
|
41
|
+
"@dxos/echo-schema": "0.8.2-main.36232bc",
|
|
42
|
+
"@dxos/invariant": "0.8.2-main.36232bc",
|
|
43
|
+
"@dxos/effect": "0.8.2-main.36232bc",
|
|
44
|
+
"@dxos/plugin-graph": "0.8.2-main.36232bc",
|
|
45
|
+
"@dxos/plugin-search": "0.8.2-main.36232bc",
|
|
46
|
+
"@dxos/plugin-space": "0.8.2-main.36232bc",
|
|
47
|
+
"@dxos/plugin-client": "0.8.2-main.36232bc",
|
|
48
|
+
"@dxos/random": "0.8.2-main.36232bc",
|
|
49
|
+
"@dxos/react-client": "0.8.2-main.36232bc",
|
|
50
|
+
"@dxos/react-ui-form": "0.8.2-main.36232bc",
|
|
51
|
+
"@dxos/react-ui-kanban": "0.8.2-main.36232bc",
|
|
52
|
+
"@dxos/react-ui-stack": "0.8.2-main.36232bc",
|
|
53
|
+
"@dxos/schema": "0.8.2-main.36232bc",
|
|
54
|
+
"@dxos/util": "0.8.2-main.36232bc"
|
|
56
55
|
},
|
|
57
56
|
"devDependencies": {
|
|
58
57
|
"@types/react": "~18.2.0",
|
|
@@ -60,19 +59,16 @@
|
|
|
60
59
|
"react": "~18.2.0",
|
|
61
60
|
"react-dom": "~18.2.0",
|
|
62
61
|
"vite": "5.4.7",
|
|
63
|
-
"@dxos/
|
|
64
|
-
"@dxos/
|
|
65
|
-
"@dxos/react-ui": "0.8.2-main.
|
|
66
|
-
"@dxos/react-ui-syntax-highlighter": "0.8.2-main.2f9c567",
|
|
67
|
-
"@dxos/react-ui-theme": "0.8.2-main.2f9c567",
|
|
68
|
-
"@dxos/storybook-utils": "0.8.2-main.2f9c567"
|
|
62
|
+
"@dxos/react-ui-theme": "0.8.2-main.36232bc",
|
|
63
|
+
"@dxos/storybook-utils": "0.8.2-main.36232bc",
|
|
64
|
+
"@dxos/react-ui": "0.8.2-main.36232bc"
|
|
69
65
|
},
|
|
70
66
|
"peerDependencies": {
|
|
71
|
-
"effect": "
|
|
67
|
+
"effect": "3.13.3",
|
|
72
68
|
"react": "~18.2.0",
|
|
73
69
|
"react-dom": "~18.2.0",
|
|
74
|
-
"@dxos/react-ui": "0.8.2-main.
|
|
75
|
-
"@dxos/react-ui-theme": "0.8.2-main.
|
|
70
|
+
"@dxos/react-ui": "0.8.2-main.36232bc",
|
|
71
|
+
"@dxos/react-ui-theme": "0.8.2-main.36232bc"
|
|
76
72
|
},
|
|
77
73
|
"publishConfig": {
|
|
78
74
|
"access": "public"
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { pipe } from 'effect';
|
|
6
6
|
|
|
7
7
|
import { Capabilities, chain, contributes, createIntent, type PromiseIntentDispatcher } from '@dxos/app-framework';
|
|
8
8
|
import { defineArtifact, defineTool, ToolResult } from '@dxos/artifact';
|
|
9
9
|
import { createArtifactElement } from '@dxos/assistant';
|
|
10
|
-
import { isInstanceOf } from '@dxos/echo-schema';
|
|
10
|
+
import { isInstanceOf, S } from '@dxos/echo-schema';
|
|
11
11
|
import { invariant } from '@dxos/invariant';
|
|
12
12
|
import { SpaceAction } from '@dxos/plugin-space/types';
|
|
13
13
|
import { Filter, fullyQualifiedId, type Space } from '@dxos/react-client/echo';
|
|
@@ -16,7 +16,7 @@ import { KanbanType } from '@dxos/react-ui-kanban';
|
|
|
16
16
|
import { meta } from '../meta';
|
|
17
17
|
import { KanbanAction } from '../types';
|
|
18
18
|
|
|
19
|
-
const QualifiedId =
|
|
19
|
+
const QualifiedId = S.String.annotations({
|
|
20
20
|
description: 'The fully qualified ID of the kanban `spaceID:objectID`',
|
|
21
21
|
});
|
|
22
22
|
|
|
@@ -44,11 +44,11 @@ export default () => {
|
|
|
44
44
|
Create a new kanban board using an existing schema.
|
|
45
45
|
Use schema_create first to create a schema, or schema_list to choose an existing one.`,
|
|
46
46
|
caption: 'Creating kanban board...',
|
|
47
|
-
schema:
|
|
48
|
-
typename:
|
|
47
|
+
schema: S.Struct({
|
|
48
|
+
typename: S.String.annotations({
|
|
49
49
|
description: 'The fully qualified typename of the schema to use for the kanban cards.',
|
|
50
50
|
}),
|
|
51
|
-
pivotColumn:
|
|
51
|
+
pivotColumn: S.optional(S.String).annotations({
|
|
52
52
|
description: 'Optional field name to use as the column pivot.',
|
|
53
53
|
}),
|
|
54
54
|
}),
|
|
@@ -83,7 +83,7 @@ export default () => {
|
|
|
83
83
|
name: 'list',
|
|
84
84
|
description: 'List all kanban boards in the current space.',
|
|
85
85
|
caption: 'Listing kanban boards...',
|
|
86
|
-
schema:
|
|
86
|
+
schema: S.Struct({}),
|
|
87
87
|
execute: async (_input, { extensions }) => {
|
|
88
88
|
invariant(extensions?.space, 'No space');
|
|
89
89
|
const space = extensions.space;
|
|
@@ -106,7 +106,7 @@ export default () => {
|
|
|
106
106
|
name: 'inspect',
|
|
107
107
|
description: 'Get details about a specific kanban board.',
|
|
108
108
|
caption: 'Inspecting kanban board...',
|
|
109
|
-
schema:
|
|
109
|
+
schema: S.Struct({ id: QualifiedId }),
|
|
110
110
|
execute: async ({ id }, { extensions }) => {
|
|
111
111
|
invariant(extensions?.space, 'No space');
|
|
112
112
|
const space = extensions.space;
|
|
@@ -2,25 +2,21 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { contributes, Capabilities, createResolver
|
|
5
|
+
import { contributes, Capabilities, createResolver } from '@dxos/app-framework';
|
|
6
6
|
import { invariant } from '@dxos/invariant';
|
|
7
|
-
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
8
7
|
import { getSpace } from '@dxos/react-client/echo';
|
|
9
8
|
import { ViewProjection } from '@dxos/schema';
|
|
10
9
|
|
|
11
10
|
import { KANBAN_PLUGIN } from '../meta';
|
|
12
|
-
import {
|
|
13
|
-
import { KanbanAction } from '../types';
|
|
11
|
+
import { createKanban, KanbanAction } from '../types';
|
|
14
12
|
|
|
15
|
-
export default (
|
|
13
|
+
export default () =>
|
|
16
14
|
contributes(Capabilities.IntentResolver, [
|
|
17
15
|
createResolver({
|
|
18
16
|
intent: KanbanAction.Create,
|
|
19
|
-
resolve: async ({ space, name, typename, initialPivotColumn }) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return { data: { object: kanban } };
|
|
23
|
-
},
|
|
17
|
+
resolve: async ({ space, name, typename, initialPivotColumn }) => ({
|
|
18
|
+
data: { object: await createKanban({ space, name, typename, initialPivotColumn }) },
|
|
19
|
+
}),
|
|
24
20
|
}),
|
|
25
21
|
createResolver({
|
|
26
22
|
intent: KanbanAction.DeleteCardField,
|