@dxos/plugin-kanban 0.8.2-main.36232bc → 0.8.2-main.5885341
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-SVNHDJQT.mjs → artifact-definition-OSLO5B6P.mjs} +2 -2
- package/dist/lib/browser/{chunk-K5BYEZ4Z.mjs → chunk-3MVG4VGQ.mjs} +2 -13
- package/dist/lib/browser/chunk-3MVG4VGQ.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +4 -4
- package/dist/lib/browser/intent-resolver-OFEXRD4O.mjs +296 -0
- package/dist/lib/browser/intent-resolver-OFEXRD4O.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-R25PYWQV.mjs → react-surface-RJ5WMSWU.mjs} +56 -26
- package/dist/lib/browser/react-surface-RJ5WMSWU.mjs.map +7 -0
- package/dist/lib/browser/types.mjs +1 -3
- package/dist/lib/node/{artifact-definition-M2XAYUI2.cjs → artifact-definition-ZOUZLESK.cjs} +11 -11
- package/dist/lib/node/{chunk-3EUR6ZR2.cjs → chunk-ZRCL6XVF.cjs} +4 -16
- package/dist/lib/node/chunk-ZRCL6XVF.cjs.map +7 -0
- package/dist/lib/node/index.cjs +16 -16
- package/dist/lib/node/intent-resolver-BCCCN7LD.cjs +307 -0
- package/dist/lib/node/intent-resolver-BCCCN7LD.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-FVM64YAQ.cjs → react-surface-LQ7CQFWF.cjs} +61 -31
- package/dist/lib/node/react-surface-LQ7CQFWF.cjs.map +7 -0
- package/dist/lib/node/types.cjs +6 -8
- package/dist/lib/node/types.cjs.map +2 -2
- package/dist/lib/node-esm/{artifact-definition-HQ5I2OO5.mjs → artifact-definition-A7GJP5BI.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-2N7CO3DI.mjs → chunk-ZJJYPR6C.mjs} +2 -13
- package/dist/lib/node-esm/chunk-ZJJYPR6C.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +4 -4
- package/dist/lib/node-esm/intent-resolver-4LPFRDUP.mjs +297 -0
- package/dist/lib/node-esm/intent-resolver-4LPFRDUP.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-LZ7MP3CQ.mjs → react-surface-C7CETLHO.mjs} +56 -26
- package/dist/lib/node-esm/react-surface-C7CETLHO.mjs.map +7 -0
- package/dist/lib/node-esm/types.mjs +1 -3
- 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 +10 -0
- package/dist/types/src/components/KanbanContainer.stories.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +3 -0
- package/dist/types/src/testing/index.d.ts.map +1 -0
- package/dist/types/src/testing/initialize-kanban.d.ts +17 -0
- package/dist/types/src/testing/initialize-kanban.d.ts.map +1 -0
- package/dist/types/src/testing/kanban-manager.d.ts +7 -0
- package/dist/types/src/testing/kanban-manager.d.ts.map +1 -0
- package/dist/types/src/testing/playwright/smoke.spec.d.ts +2 -0
- package/dist/types/src/testing/playwright/smoke.spec.d.ts.map +1 -0
- package/dist/types/src/types.d.ts +1 -8
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +27 -24
- package/src/capabilities/intent-resolver.ts +10 -6
- package/src/capabilities/react-surface.tsx +37 -8
- package/src/components/KanbanContainer.stories.tsx +186 -0
- package/src/components/KanbanContainer.tsx +21 -8
- package/src/testing/index.ts +6 -0
- package/src/testing/initialize-kanban.ts +139 -0
- package/src/testing/kanban-manager.ts +13 -0
- package/src/testing/playwright/playwright.config.cts +18 -0
- package/src/testing/playwright/smoke.spec.ts +7 -0
- package/src/types.ts +1 -17
- package/dist/lib/browser/chunk-K5BYEZ4Z.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-XCDQ5N3Q.mjs +0 -132
- package/dist/lib/browser/intent-resolver-XCDQ5N3Q.mjs.map +0 -7
- package/dist/lib/browser/react-surface-R25PYWQV.mjs.map +0 -7
- package/dist/lib/node/chunk-3EUR6ZR2.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-P3PSZO7H.cjs +0 -146
- package/dist/lib/node/intent-resolver-P3PSZO7H.cjs.map +0 -7
- package/dist/lib/node/react-surface-FVM64YAQ.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-2N7CO3DI.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-4G47V67J.mjs +0 -133
- package/dist/lib/node-esm/intent-resolver-4G47V67J.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-LZ7MP3CQ.mjs.map +0 -7
- /package/dist/lib/browser/{artifact-definition-SVNHDJQT.mjs.map → artifact-definition-OSLO5B6P.mjs.map} +0 -0
- /package/dist/lib/node/{artifact-definition-M2XAYUI2.cjs.map → artifact-definition-ZOUZLESK.cjs.map} +0 -0
- /package/dist/lib/node-esm/{artifact-definition-HQ5I2OO5.mjs.map → artifact-definition-A7GJP5BI.mjs.map} +0 -0
|
@@ -26,42 +26,56 @@ 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_LQ7CQFWF_exports = {};
|
|
30
|
+
__export(react_surface_LQ7CQFWF_exports, {
|
|
31
31
|
default: () => react_surface_default
|
|
32
32
|
});
|
|
33
|
-
module.exports = __toCommonJS(
|
|
34
|
-
var
|
|
33
|
+
module.exports = __toCommonJS(react_surface_LQ7CQFWF_exports);
|
|
34
|
+
var import_chunk_ZRCL6XVF = require("./chunk-ZRCL6XVF.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");
|
|
37
38
|
var import_effect = require("@dxos/effect");
|
|
39
|
+
var import_plugin_client = require("@dxos/plugin-client");
|
|
40
|
+
var import_react_client = require("@dxos/react-client");
|
|
38
41
|
var import_echo = require("@dxos/react-client/echo");
|
|
39
42
|
var import_react_ui_form = require("@dxos/react-ui-form");
|
|
40
43
|
var import_react2 = __toESM(require("react"));
|
|
41
44
|
var import_app_framework2 = require("@dxos/app-framework");
|
|
45
|
+
var import_echo_schema2 = require("@dxos/echo-schema");
|
|
42
46
|
var import_plugin_search = require("@dxos/plugin-search");
|
|
47
|
+
var import_react_client2 = require("@dxos/react-client");
|
|
43
48
|
var import_echo2 = require("@dxos/react-client/echo");
|
|
44
49
|
var import_react_ui_kanban = require("@dxos/react-ui-kanban");
|
|
45
50
|
var import_react_ui_stack = require("@dxos/react-ui-stack");
|
|
46
51
|
var import_schema = require("@dxos/schema");
|
|
47
52
|
var import_react3 = __toESM(require("react"));
|
|
48
53
|
var import_app_framework3 = require("@dxos/app-framework");
|
|
49
|
-
var
|
|
54
|
+
var import_echo_schema3 = require("@dxos/echo-schema");
|
|
50
55
|
var import_invariant = require("@dxos/invariant");
|
|
51
|
-
var
|
|
56
|
+
var import_react_client3 = require("@dxos/react-client");
|
|
52
57
|
var import_echo3 = require("@dxos/react-client/echo");
|
|
53
58
|
var import_react_ui_form2 = require("@dxos/react-ui-form");
|
|
54
59
|
var import_react_ui_kanban2 = require("@dxos/react-ui-kanban");
|
|
55
60
|
var import_schema2 = require("@dxos/schema");
|
|
56
61
|
var KanbanContainer = ({ kanban }) => {
|
|
62
|
+
const client = (0, import_react_client2.useClient)();
|
|
57
63
|
const [cardSchema, setCardSchema] = (0, import_react2.useState)();
|
|
58
64
|
const [projection, setProjection] = (0, import_react2.useState)();
|
|
59
65
|
const space = (0, import_echo2.getSpace)(kanban);
|
|
60
66
|
const { dispatchPromise: dispatch } = (0, import_app_framework2.useIntentDispatcher)();
|
|
67
|
+
const jsonSchema = (0, import_react2.useMemo)(() => cardSchema instanceof import_echo_schema2.EchoSchema ? cardSchema.jsonSchema : cardSchema ? (0, import_echo_schema2.toJsonSchema)(cardSchema) : void 0, [
|
|
68
|
+
cardSchema
|
|
69
|
+
]);
|
|
61
70
|
(0, import_react2.useEffect)(() => {
|
|
62
|
-
|
|
71
|
+
const typename = kanban.cardView?.target?.query?.typename;
|
|
72
|
+
const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => (0, import_echo_schema2.getTypenameOrThrow)(schema) === typename);
|
|
73
|
+
if (staticSchema) {
|
|
74
|
+
setCardSchema(() => staticSchema);
|
|
75
|
+
}
|
|
76
|
+
if (!staticSchema && typename && space) {
|
|
63
77
|
const query = space.db.schemaRegistry.query({
|
|
64
|
-
typename
|
|
78
|
+
typename
|
|
65
79
|
});
|
|
66
80
|
const unsubscribe = query.subscribe(() => {
|
|
67
81
|
const [schema] = query.results;
|
|
@@ -78,13 +92,12 @@ var KanbanContainer = ({ kanban }) => {
|
|
|
78
92
|
space
|
|
79
93
|
]);
|
|
80
94
|
(0, import_react2.useEffect)(() => {
|
|
81
|
-
if (kanban.cardView?.target &&
|
|
82
|
-
setProjection(new import_schema.ViewProjection(
|
|
95
|
+
if (kanban.cardView?.target && jsonSchema) {
|
|
96
|
+
setProjection(new import_schema.ViewProjection(jsonSchema, kanban.cardView.target));
|
|
83
97
|
}
|
|
84
98
|
}, [
|
|
85
99
|
kanban.cardView?.target,
|
|
86
|
-
|
|
87
|
-
JSON.stringify(cardSchema?.jsonSchema)
|
|
100
|
+
JSON.stringify(jsonSchema)
|
|
88
101
|
]);
|
|
89
102
|
const objects = (0, import_echo2.useQuery)(space, cardSchema ? import_echo2.Filter.schema(cardSchema) : import_echo2.Filter.nothing());
|
|
90
103
|
const filteredObjects = (0, import_plugin_search.useGlobalFilteredObjects)(objects);
|
|
@@ -109,7 +122,7 @@ var KanbanContainer = ({ kanban }) => {
|
|
|
109
122
|
model
|
|
110
123
|
]);
|
|
111
124
|
const handleRemoveCard = (0, import_react2.useCallback)((card) => {
|
|
112
|
-
void dispatch((0, import_app_framework2.createIntent)(
|
|
125
|
+
void dispatch((0, import_app_framework2.createIntent)(import_chunk_ZRCL6XVF.KanbanAction.DeleteCard, {
|
|
113
126
|
card
|
|
114
127
|
}));
|
|
115
128
|
}, [
|
|
@@ -124,7 +137,7 @@ var KanbanContainer = ({ kanban }) => {
|
|
|
124
137
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-kanban/src/components/KanbanViewEditor.tsx";
|
|
125
138
|
var KanbanViewEditor = ({ kanban }) => {
|
|
126
139
|
const { dispatchPromise: dispatch } = (0, import_app_framework3.useIntentDispatcher)();
|
|
127
|
-
const client = (0,
|
|
140
|
+
const client = (0, import_react_client3.useClient)();
|
|
128
141
|
const space = (0, import_echo3.getSpace)(kanban);
|
|
129
142
|
const currentTypename = (0, import_react3.useMemo)(() => kanban?.cardView?.target?.query?.typename, [
|
|
130
143
|
kanban?.cardView?.target?.query?.typename
|
|
@@ -151,7 +164,7 @@ var KanbanViewEditor = ({ kanban }) => {
|
|
|
151
164
|
schema
|
|
152
165
|
]);
|
|
153
166
|
const handleDelete = (0, import_react3.useCallback)((fieldId) => {
|
|
154
|
-
void dispatch?.((0, import_app_framework3.createIntent)(
|
|
167
|
+
void dispatch?.((0, import_app_framework3.createIntent)(import_chunk_ZRCL6XVF.KanbanAction.DeleteCardField, {
|
|
155
168
|
kanban,
|
|
156
169
|
fieldId
|
|
157
170
|
}));
|
|
@@ -169,7 +182,7 @@ var KanbanViewEditor = ({ kanban }) => {
|
|
|
169
182
|
JSON.stringify(schema)
|
|
170
183
|
]);
|
|
171
184
|
const fieldProjections = projection?.getFieldProjections() || [];
|
|
172
|
-
const selectFields = fieldProjections.filter((field) => field.props.format ===
|
|
185
|
+
const selectFields = fieldProjections.filter((field) => field.props.format === import_echo_schema3.FormatEnum.SingleSelect).map(({ field }) => ({
|
|
173
186
|
value: field.id,
|
|
174
187
|
label: field.path
|
|
175
188
|
}));
|
|
@@ -210,52 +223,65 @@ var KanbanViewEditor = ({ kanban }) => {
|
|
|
210
223
|
};
|
|
211
224
|
var react_surface_default = () => (0, import_app_framework.contributes)(import_app_framework.Capabilities.ReactSurface, [
|
|
212
225
|
(0, import_app_framework.createSurface)({
|
|
213
|
-
id: `${
|
|
226
|
+
id: `${import_chunk_ZRCL6XVF.KANBAN_PLUGIN}/kanban`,
|
|
214
227
|
role: [
|
|
215
228
|
"article",
|
|
216
229
|
"section"
|
|
217
230
|
],
|
|
218
|
-
filter: (data) => (0,
|
|
231
|
+
filter: (data) => (0, import_chunk_ZRCL6XVF.isKanban)(data.subject),
|
|
219
232
|
component: ({ data, role }) => /* @__PURE__ */ import_react.default.createElement(KanbanContainer, {
|
|
220
233
|
kanban: data.subject,
|
|
221
234
|
role
|
|
222
235
|
})
|
|
223
236
|
}),
|
|
224
237
|
(0, import_app_framework.createSurface)({
|
|
225
|
-
id: `${
|
|
238
|
+
id: `${import_chunk_ZRCL6XVF.KANBAN_PLUGIN}/object-settings`,
|
|
226
239
|
role: "object-settings",
|
|
227
|
-
filter: (data) => (0,
|
|
240
|
+
filter: (data) => (0, import_chunk_ZRCL6XVF.isKanban)(data.subject),
|
|
228
241
|
component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(KanbanViewEditor, {
|
|
229
242
|
kanban: data.subject
|
|
230
243
|
})
|
|
231
244
|
}),
|
|
232
245
|
(0, import_app_framework.createSurface)({
|
|
233
|
-
id: `${
|
|
246
|
+
id: `${import_chunk_ZRCL6XVF.KANBAN_PLUGIN}/create-initial-schema-form`,
|
|
234
247
|
role: "form-input",
|
|
235
248
|
filter: (data) => {
|
|
236
|
-
|
|
249
|
+
if (data.prop !== "typename") {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
const annotation = (0, import_effect.findAnnotation)(data.schema.ast, import_chunk_ZRCL6XVF.TypenameAnnotationId);
|
|
237
253
|
return !!annotation;
|
|
238
254
|
},
|
|
239
255
|
component: ({ data: { target }, ...inputProps }) => {
|
|
256
|
+
const client = (0, import_react_client.useClient)();
|
|
240
257
|
const props = inputProps;
|
|
241
258
|
const space = (0, import_echo.isSpace)(target) ? target : (0, import_echo.getSpace)(target);
|
|
242
259
|
if (!space) {
|
|
243
260
|
return null;
|
|
244
261
|
}
|
|
245
|
-
const
|
|
262
|
+
const schemaWhitelists = (0, import_app_framework.useCapabilities)(import_plugin_client.ClientCapabilities.SchemaWhiteList);
|
|
263
|
+
const whitelistedTypenames = (0, import_react.useMemo)(() => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => type.typename))), [
|
|
264
|
+
schemaWhitelists
|
|
265
|
+
]);
|
|
266
|
+
const fixed = client.graph.schemaRegistry.schemas.filter((schema) => whitelistedTypenames.has((0, import_echo_schema.getTypenameOrThrow)(schema)));
|
|
267
|
+
const dynamic = space?.db.schemaRegistry.query().runSync();
|
|
268
|
+
const typenames = Array.from(/* @__PURE__ */ new Set([
|
|
269
|
+
...fixed.map((schema) => (0, import_echo_schema.getTypenameOrThrow)(schema)),
|
|
270
|
+
...dynamic.map((schema) => schema.typename)
|
|
271
|
+
])).sort();
|
|
246
272
|
return /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.SelectInput, {
|
|
247
273
|
...props,
|
|
248
|
-
options:
|
|
249
|
-
value:
|
|
274
|
+
options: typenames.map((typename) => ({
|
|
275
|
+
value: typename
|
|
250
276
|
}))
|
|
251
277
|
});
|
|
252
278
|
}
|
|
253
279
|
}),
|
|
254
280
|
(0, import_app_framework.createSurface)({
|
|
255
|
-
id: `${
|
|
281
|
+
id: `${import_chunk_ZRCL6XVF.KANBAN_PLUGIN}/create-initial-schema-form-[pivot-column]`,
|
|
256
282
|
role: "form-input",
|
|
257
283
|
filter: (data) => {
|
|
258
|
-
const annotation = (0, import_effect.findAnnotation)(data.schema.ast,
|
|
284
|
+
const annotation = (0, import_effect.findAnnotation)(data.schema.ast, import_chunk_ZRCL6XVF.PivotColumnAnnotationId);
|
|
259
285
|
return !!annotation;
|
|
260
286
|
},
|
|
261
287
|
component: ({ data: { target }, ...inputProps }) => {
|
|
@@ -265,14 +291,17 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
|
|
|
265
291
|
return null;
|
|
266
292
|
}
|
|
267
293
|
const { typename } = (0, import_react_ui_form.useFormValues)();
|
|
294
|
+
const schemaWhitelists = (0, import_app_framework.useCapabilities)(import_plugin_client.ClientCapabilities.SchemaWhiteList);
|
|
295
|
+
const staticSchema = schemaWhitelists.flat().find((schema) => (0, import_echo_schema.getTypenameOrThrow)(schema) === typename);
|
|
268
296
|
const [selectedSchema] = space?.db.schemaRegistry.query({
|
|
269
297
|
typename
|
|
270
298
|
}).runSync();
|
|
271
299
|
const singleSelectColumns = (0, import_react.useMemo)(() => {
|
|
272
|
-
|
|
300
|
+
const properties = staticSchema ? (0, import_echo_schema.toJsonSchema)(staticSchema).properties : selectedSchema?.jsonSchema?.properties;
|
|
301
|
+
if (!properties) {
|
|
273
302
|
return [];
|
|
274
303
|
}
|
|
275
|
-
const columns = Object.entries(
|
|
304
|
+
const columns = Object.entries(properties).reduce((acc, [key, value]) => {
|
|
276
305
|
if (typeof value === "object" && value?.format === "single-select") {
|
|
277
306
|
acc.push(key);
|
|
278
307
|
}
|
|
@@ -280,7 +309,8 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
|
|
|
280
309
|
}, []);
|
|
281
310
|
return columns;
|
|
282
311
|
}, [
|
|
283
|
-
selectedSchema?.jsonSchema
|
|
312
|
+
selectedSchema?.jsonSchema,
|
|
313
|
+
staticSchema
|
|
284
314
|
]);
|
|
285
315
|
if (!typename) {
|
|
286
316
|
return null;
|
|
@@ -294,4 +324,4 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
|
|
|
294
324
|
}
|
|
295
325
|
})
|
|
296
326
|
]);
|
|
297
|
-
//# sourceMappingURL=react-surface-
|
|
327
|
+
//# sourceMappingURL=react-surface-LQ7CQFWF.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, useCapabilities } from '@dxos/app-framework';\nimport { getTypenameOrThrow, toJsonSchema, type S } 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: (data): data is { prop: string; schema: S.Schema<any>; target: Space | CollectionType | undefined } => {\n if (data.prop !== 'typename') {\n return false;\n }\n\n const annotation = findAnnotation<boolean>((data.schema as S.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: (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 // 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.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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAA+B;AAE/B,2BAA0E;AAC1E,yBAAyD;AACzD,oBAA+B;AAC/B,2BAAmC;AAEnC,0BAA0B;AAC1B,kBAA8C;AAC9C,2BAA4D;ACT5D,IAAAA,gBAAiE;AAEjE,IAAAC,wBAAkD;AAClD,IAAAC,sBAA+E;AAC/E,2BAAyC;AACzC,IAAAC,uBAA0B;AAC1B,IAAAC,eAAiD;AACjD,6BAAwD;AACxD,4BAA0B;AAC1B,oBAA+B;ACT/B,IAAAJ,gBAA4C;AAE5C,IAAAC,wBAAkD;AAClD,IAAAC,sBAA2B;AAC3B,uBAA0B;AAC1B,IAAAC,uBAA0B;AAC1B,IAAAC,eAAsD;AACtD,IAAAC,wBAAmE;AACnE,IAAAC,0BAAsD;AACtD,IAAAC,iBAAyC;ADIlC,IAAMC,kBAAkB,CAAC,EAAEC,OAAM,MAAwC;AAC9E,QAAMC,aAASC,gCAAAA;AACf,QAAM,CAACC,YAAYC,aAAAA,QAAiBC,wBAAAA;AACpC,QAAM,CAACC,YAAYC,aAAAA,QAAiBF,wBAAAA;AACpC,QAAMG,YAAQC,uBAAST,MAAAA;AACvB,QAAM,EAAEU,iBAAiBC,SAAQ,QAAKC,2CAAAA;AAEtC,QAAMC,iBAAaC,uBACjB,MACEX,sBAAsBY,iCAAaZ,WAAWU,aAAaV,iBAAaa,kCAAab,UAAAA,IAAcc,QACrG;IAACd;GAAW;AAGde,+BAAU,MAAA;AACR,UAAMC,WAAWnB,OAAOoB,UAAUC,QAAQC,OAAOH;AACjD,UAAMI,eAAetB,OAAOuB,MAAMC,eAAeC,QAAQC,KAAK,CAACC,eAAWC,wCAAmBD,MAAAA,MAAYT,QAAAA;AACzG,QAAII,cAAc;AAChBnB,oBAAc,MAAMmB,YAAAA;IACtB;AACA,QAAI,CAACA,gBAAgBJ,YAAYX,OAAO;AACtC,YAAMc,QAAQd,MAAMsB,GAAGL,eAAeH,MAAM;QAAEH;MAAS,CAAA;AACvD,YAAMY,cAAcT,MAAMU,UACxB,MAAA;AACE,cAAM,CAACJ,MAAAA,IAAUN,MAAMW;AACvB,YAAIL,QAAQ;AACVxB,wBAAcwB,MAAAA;QAChB;MACF,GACA;QAAEM,MAAM;MAAK,CAAA;AAEf,aAAOH;IACT;EACF,GAAG;IAAC/B,OAAOoB,UAAUC,QAAQC;IAAOd;GAAM;AAE1CU,+BAAU,MAAA;AACR,QAAIlB,OAAOoB,UAAUC,UAAUR,YAAY;AACzCN,oBAAc,IAAI4B,6BAAetB,YAAYb,OAAOoB,SAASC,MAAM,CAAA;IACrE;EAEF,GAAG;IAACrB,OAAOoB,UAAUC;IAAQe,KAAKC,UAAUxB,UAAAA;GAAY;AAExD,QAAMyB,cAAUC,uBAAS/B,OAAOL,aAAaqC,oBAAOZ,OAAOzB,UAAAA,IAAcqC,oBAAOC,QAAO,CAAA;AACvF,QAAMC,sBAAkBC,+CAAyBL,OAAAA;AAEjD,QAAMM,YAAQC,uCAAe;IAC3B7C;IACA4B,QAAQzB;IACRG;IACAwC,OAAOJ;EACT,CAAA;AAEA,QAAMK,oBAAgBC,2BACpB,CAACC,gBAAAA;AACC,UAAMC,OAAON,OAAOO;AACpB,QAAI3C,SAASL,cAAc+C,MAAM;AAC/B,YAAME,WAAOC,mBAAKlD,YAAY;QAAE,CAAC+C,IAAAA,GAAOD;MAAY,CAAA;AACpDzC,YAAMsB,GAAGwB,IAAIF,IAAAA;AACb,aAAOA,KAAKG;IACd;EACF,GACA;IAAC/C;IAAOL;IAAYyC;GAAM;AAG5B,QAAMY,uBAAmBR,2BACvB,CAACI,SAAAA;AACC,SAAKzC,aAAS8C,oCAAaC,mCAAaC,YAAY;MAAEP;IAAK,CAAA,CAAA;EAC7D,GACA;IAACzC;GAAS;AAGZ,SACE,8BAAAiD,QAAA,cAACC,gCAAUC,SAAO,MACflB,SAAS,8BAAAgB,QAAA,cAACG,+BAAAA;IAAOnB;IAAcoB,WAAWjB;IAAekB,cAAcT;;AAG9E;;ACzEO,IAAMU,mBAAmB,CAAC,EAAElE,OAAM,MAAyB;AAChE,QAAM,EAAEU,iBAAiBC,SAAQ,QAAKC,sBAAAA,qBAAAA;AACtC,QAAMX,aAASC,qBAAAA,WAAAA;AACf,QAAMM,YAAQC,aAAAA,UAAST,MAAAA;AACvB,QAAMmE,sBAAkBrD,cAAAA,SACtB,MAAMd,QAAQoB,UAAUC,QAAQC,OAAOH,UACvC;IAACnB,QAAQoB,UAAUC,QAAQC,OAAOH;GAAS;AAE7C,QAAMS,aAASwC,wBAAUnE,QAAQO,OAAO2D,eAAAA;AACxC,QAAME,YAAQ9B,aAAAA,UAAS/B,OAAOgC,aAAAA,OAAOZ,OAAO0C,uBAAAA,CAAAA;AAE5C,QAAMC,2BAAuBvB,cAAAA,aAC3B,CAACwB,gBAAAA;AACCC,oCAAU7C,QAAAA,QAAAA;;;;;;;;;AACV,UAAM8C,gBAAgBL,MAAMM,OAAO,CAACC,SAASA,KAAKtD,MAAMH,aAAagD,eAAAA;AACrE,eAAWS,QAAQF,eAAe;AAChCE,WAAKtD,MAAMH,WAAWqD;IACxB;AAEA5C,WAAOiD,QAAQC,eAAeN,WAAAA;EAChC,GACA;IAACH;IAAOzC;GAAO;AAGjB,QAAMmD,mBAAe/B,cAAAA,aACnB,CAACgC,YAAAA;AACC,SAAKrE,eAAW8C,sBAAAA,cAAaC,mCAAauB,iBAAiB;MAAEjF;MAAQgF;IAAQ,CAAA,CAAA;EAC/E,GACA;IAACrE;IAAUX;GAAO;AAGpB,QAAMM,iBAAaQ,cAAAA,SAAQ,MAAA;AACzB,QAAId,QAAQoB,UAAUC,UAAUO,QAAQ;AACtC,aAAO,IAAIO,eAAAA,eAAeP,OAAOf,YAAYb,OAAOoB,SAASC,MAAM;IACrE;EACF,GAAG;IAACrB,QAAQoB,UAAUC;IAAQO;IAAQQ,KAAKC,UAAUT,MAAAA;GAAQ;AAE7D,QAAMsD,mBAAmB5E,YAAY6E,oBAAAA,KAAyB,CAAA;AAC9D,QAAMC,eAAeF,iBAClBP,OAAO,CAACU,UAAUA,MAAMC,MAAMC,WAAWC,+BAAWC,YAAY,EAChEC,IAAI,CAAC,EAAEL,MAAK,OAAQ;IAAEM,OAAON,MAAM9B;IAAIqC,OAAOP,MAAMnC;EAAK,EAAA;AAE5D,QAAM2C,aAAS7C,cAAAA,aACb,CAAC8C,WAAAA;AACC9F,WAAO+F,gBAAgBD,OAAOC;EAChC,GACA;IAAC/F;GAAO;AAGV,QAAMgG,oBAAgBlF,cAAAA,SAAQ,OAAO;IAAEiF,eAAe/F,OAAO+F;EAAc,IAAI;IAAC/F,OAAO+F;GAAc;AACrG,QAAME,aAAyBnF,cAAAA,SAC7B,OAAO;IAAEiF,eAAe,CAACT,UAAU1B,8BAAAA,QAAA,cAACsC,mCAAAA;MAAa,GAAGZ;MAAOa,SAASf;;EAAiB,IACrF;IAACA;GAAa;AAGhB,MAAI,CAAC5E,SAAS,CAACoB,UAAU,CAAC5B,OAAOoB,UAAUC,QAAQ;AACjD,WAAO;EACT;AAEA,SACEuC,8BAAAA,QAAA,cAAAA,cAAAA,QAAA,UAAA,MACEA,8BAAAA,QAAA,cAACwC,4BAAAA;IAAKxE,QAAQyE;IAAsBP,QAAQE;IAAeH;IAAgBS,UAAAA;IAASC,QAAQN;MAC5FrC,8BAAAA,QAAA,cAAC4C,kCAAAA;IACCC,UAAUjG,MAAMsB,GAAGL;IACnBG;IACAgD,MAAM5E,OAAOoB,SAASC;IACtBqF,mBAAmB9E,OAAO+E,WAAW1F,SAAYsD;IACjDqC,UAAUhF,OAAO+E,WAAW1F,SAAY8D;;AAIhD;AFtEA,IAAA,wBAAe,UACb8B,kCAAYC,kCAAaC,cAAc;MACrCC,oCAAc;IACZzD,IAAI,GAAG0D,mCAAAA;IACPC,MAAM;MAAC;MAAW;;IAClBvC,QAAQ,CAACwC,aAA0CC,gCAASD,KAAKE,OAAO;IACxEC,WAAW,CAAC,EAAEH,MAAMD,KAAI,MAAOtD,6BAAAA,QAAA,cAAC7D,iBAAAA;MAAgBC,QAAQmH,KAAKE;MAASH;;EACxE,CAAA;MACAF,oCAAc;IACZzD,IAAI,GAAG0D,mCAAAA;IACPC,MAAM;IACNvC,QAAQ,CAACwC,aAA0CC,gCAASD,KAAKE,OAAO;IACxEC,WAAW,CAAC,EAAEH,KAAI,MAAOvD,6BAAAA,QAAA,cAACM,kBAAAA;MAAiBlE,QAAQmH,KAAKE;;EAC1D,CAAA;MACAL,oCAAc;IACZzD,IAAI,GAAG0D,mCAAAA;IACPC,MAAM;IACNvC,QAAQ,CAACwC,SAAAA;AACP,UAAIA,KAAKI,SAAS,YAAY;AAC5B,eAAO;MACT;AAEA,YAAMC,iBAAaC,8BAAyBN,KAAKvF,OAAwB8F,KAAKC,0CAAAA;AAC9E,aAAO,CAAC,CAACH;IACX;IACAF,WAAW,CAAC,EAAEH,MAAM,EAAE9F,OAAM,GAAI,GAAGuG,WAAAA,MAAY;AAC7C,YAAM3H,aAASC,oBAAAA,WAAAA;AACf,YAAMoF,QAAQsC;AACd,YAAMpH,YAAQqH,qBAAQxG,MAAAA,IAAUA,aAASZ,YAAAA,UAASY,MAAAA;AAClD,UAAI,CAACb,OAAO;AACV,eAAO;MACT;AAEA,YAAMsH,uBAAmBC,sCAAgBC,wCAAmBC,eAAe;AAC3E,YAAMC,2BAAuBpH,aAAAA,SAC3B,MAAM,IAAIqH,IAAIL,iBAAiBM,QAAQ,CAACC,cAAcA,UAAU3C,IAAI,CAAC4C,SAASA,KAAKnH,QAAQ,CAAA,CAAA,GAC3F;QAAC2G;OAAiB;AAGpB,YAAMS,QAAQtI,OAAOuB,MAAMC,eAAeC,QAAQiD,OAAO,CAAC/C,WACxDsG,qBAAqBM,QAAI3G,mBAAAA,oBAAmBD,MAAAA,CAAAA,CAAAA;AAE9C,YAAM6G,UAAUjI,OAAOsB,GAAGL,eAAeH,MAAAA,EAAQoH,QAAAA;AACjD,YAAMC,YAAYC,MAAMC,KACtB,oBAAIV,IAAY;WACXI,MAAM7C,IAAI,CAAC9D,eAAWC,mBAAAA,oBAAmBD,MAAAA,CAAAA;WACzC6G,QAAQ/C,IAAI,CAAC9D,WAAWA,OAAOT,QAAQ;OAC3C,CAAA,EACD2H,KAAI;AAEN,aAAOlF,6BAAAA,QAAA,cAACsC,qBAAAA,aAAAA;QAAa,GAAGZ;QAAOa,SAASwC,UAAUjD,IAAI,CAACvE,cAAc;UAAEwE,OAAOxE;QAAS,EAAA;;IACzF;EACF,CAAA;MACA6F,oCAAc;IACZzD,IAAI,GAAG0D,mCAAAA;IACPC,MAAM;IACNvC,QAAQ,CAACwC,SAAAA;AACP,YAAMK,iBAAaC,8BAAyBN,KAAKvF,OAAwB8F,KAAKqB,6CAAAA;AAC9E,aAAO,CAAC,CAACvB;IACX;IACAF,WAAW,CAAC,EAAEH,MAAM,EAAE9F,OAAM,GAAI,GAAGuG,WAAAA,MAAY;AAC7C,YAAMtC,QAAQsC;AACd,YAAMpH,YAAQqH,qBAAQxG,MAAAA,IAAUA,aAASZ,YAAAA,UAASY,MAAAA;AAClD,UAAI,CAACb,OAAO;AACV,eAAO;MACT;AACA,YAAM,EAAEW,SAAQ,QAAK6H,oCAAAA;AAErB,YAAMlB,uBAAmBC,sCAAgBC,wCAAmBC,eAAe;AAC3E,YAAM1G,eAAeuG,iBAAiBmB,KAAI,EAAGtH,KAAK,CAACC,eAAWC,mBAAAA,oBAAmBD,MAAAA,MAAYT,QAAAA;AAC7F,YAAM,CAAC+H,cAAAA,IAAkB1I,OAAOsB,GAAGL,eAAeH,MAAM;QAAEH;MAAS,CAAA,EAAGuH,QAAAA;AAEtE,YAAMS,0BAAsBrI,aAAAA,SAAQ,MAAA;AAClC,cAAMsI,aAAa7H,mBACfP,mBAAAA,cAAaO,YAAAA,EAAc6H,aAC3BF,gBAAgBrI,YAAYuI;AAChC,YAAI,CAACA,YAAY;AACf,iBAAO,CAAA;QACT;AAEA,cAAMC,UAAUC,OAAOC,QAAQH,UAAAA,EAAYI,OAAiB,CAACC,KAAK,CAACC,KAAK/D,KAAAA,MAAM;AAC5E,cAAI,OAAOA,UAAU,YAAYA,OAAOJ,WAAW,iBAAiB;AAClEkE,gBAAIE,KAAKD,GAAAA;UACX;AACA,iBAAOD;QACT,GAAG,CAAA,CAAE;AAEL,eAAOJ;MACT,GAAG;QAACH,gBAAgBrI;QAAYU;OAAa;AAE7C,UAAI,CAACJ,UAAU;AACb,eAAO;MACT;AAEA,aAAOyC,6BAAAA,QAAA,cAACsC,qBAAAA,aAAAA;QAAa,GAAGZ;QAAOa,SAASgD,oBAAoBzD,IAAI,CAACkE,YAAY;UAAEjE,OAAOiE;QAAO,EAAA;;IAC/F;EACF,CAAA;CACD;",
|
|
6
|
+
"names": ["import_react", "import_app_framework", "import_echo_schema", "import_react_client", "import_echo", "import_react_ui_form", "import_react_ui_kanban", "import_schema", "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", "nothing", "filteredObjects", "useGlobalFilteredObjects", "model", "useKanbanModel", "items", "handleAddCard", "useCallback", "columnValue", "path", "columnFieldPath", "card", "live", "add", "id", "handleRemoveCard", "createIntent", "KanbanAction", "DeleteCard", "React", "StackItem", "Content", "Kanban", "onAddCard", "onRemoveCard", "KanbanViewEditor", "currentTypename", "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", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "KANBAN_PLUGIN", "role", "data", "isKanban", "subject", "component", "prop", "annotation", "findAnnotation", "ast", "TypenameAnnotationId", "inputProps", "isSpace", "schemaWhitelists", "useCapabilities", "ClientCapabilities", "SchemaWhiteList", "whitelistedTypenames", "Set", "flatMap", "typeArray", "type", "fixed", "has", "dynamic", "runSync", "typenames", "Array", "from", "sort", "PivotColumnAnnotationId", "useFormValues", "flat", "selectedSchema", "singleSelectColumns", "properties", "columns", "Object", "entries", "reduce", "acc", "key", "push", "column"]
|
|
7
|
+
}
|
package/dist/lib/node/types.cjs
CHANGED
|
@@ -18,22 +18,20 @@ 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
|
-
|
|
26
|
-
isKanban: () => import_chunk_3EUR6ZR2.isKanban
|
|
21
|
+
CreateKanbanSchema: () => import_chunk_ZRCL6XVF.CreateKanbanSchema,
|
|
22
|
+
KanbanAction: () => import_chunk_ZRCL6XVF.KanbanAction,
|
|
23
|
+
PivotColumnAnnotationId: () => import_chunk_ZRCL6XVF.PivotColumnAnnotationId,
|
|
24
|
+
TypenameAnnotationId: () => import_chunk_ZRCL6XVF.TypenameAnnotationId,
|
|
25
|
+
isKanban: () => import_chunk_ZRCL6XVF.isKanban
|
|
27
26
|
});
|
|
28
27
|
module.exports = __toCommonJS(types_exports);
|
|
29
|
-
var
|
|
28
|
+
var import_chunk_ZRCL6XVF = require("./chunk-ZRCL6XVF.cjs");
|
|
30
29
|
// Annotate the CommonJS export names for ESM import in node:
|
|
31
30
|
0 && (module.exports = {
|
|
32
31
|
CreateKanbanSchema,
|
|
33
32
|
KanbanAction,
|
|
34
33
|
PivotColumnAnnotationId,
|
|
35
34
|
TypenameAnnotationId,
|
|
36
|
-
createKanban,
|
|
37
35
|
isKanban
|
|
38
36
|
});
|
|
39
37
|
//# 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
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA
|
|
4
|
+
"sourcesContent": ["import {\n CreateKanbanSchema,\n KanbanAction,\n PivotColumnAnnotationId,\n TypenameAnnotationId,\n isKanban\n} from \"./chunk-ZRCL6XVF.cjs\";\nexport {\n CreateKanbanSchema,\n KanbanAction,\n PivotColumnAnnotationId,\n TypenameAnnotationId,\n isKanban\n};\n//# sourceMappingURL=types.cjs.map\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAMO;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/lib/node-esm/{artifact-definition-HQ5I2OO5.mjs → artifact-definition-A7GJP5BI.mjs}
RENAMED
|
@@ -2,7 +2,7 @@ import { createRequire } from 'node:module';const require = createRequire(import
|
|
|
2
2
|
import {
|
|
3
3
|
KanbanAction,
|
|
4
4
|
meta
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ZJJYPR6C.mjs";
|
|
6
6
|
|
|
7
7
|
// packages/plugins/plugin-kanban/src/capabilities/artifact-definition.ts
|
|
8
8
|
import { pipe } from "effect";
|
|
@@ -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-A7GJP5BI.mjs.map
|
|
@@ -5,7 +5,6 @@ import { TitleAnnotationId } from "effect/SchemaAST";
|
|
|
5
5
|
import { S } from "@dxos/echo-schema";
|
|
6
6
|
import { SpaceSchema } from "@dxos/react-client/echo";
|
|
7
7
|
import { KanbanType } from "@dxos/react-ui-kanban";
|
|
8
|
-
import { initializeKanban } from "@dxos/react-ui-kanban/testing";
|
|
9
8
|
import { FieldSchema } from "@dxos/schema";
|
|
10
9
|
|
|
11
10
|
// packages/plugins/plugin-kanban/src/meta.ts
|
|
@@ -78,15 +77,6 @@ var KanbanAction;
|
|
|
78
77
|
KanbanAction2.DeleteCard = DeleteCard;
|
|
79
78
|
})(KanbanAction || (KanbanAction = {}));
|
|
80
79
|
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
|
-
};
|
|
90
80
|
|
|
91
81
|
export {
|
|
92
82
|
KANBAN_PLUGIN,
|
|
@@ -95,7 +85,6 @@ export {
|
|
|
95
85
|
PivotColumnAnnotationId,
|
|
96
86
|
CreateKanbanSchema,
|
|
97
87
|
KanbanAction,
|
|
98
|
-
isKanban
|
|
99
|
-
createKanban
|
|
88
|
+
isKanban
|
|
100
89
|
};
|
|
101
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
//# sourceMappingURL=chunk-ZJJYPR6C.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 { SpaceSchema } from '@dxos/react-client/echo';\nimport { KanbanType } from '@dxos/react-ui-kanban';\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", "//\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,SAASC,mBAAmB;AAC5B,SAASC,kBAAkB;AAC3B,SAASC,mBAAmB;;;ACHrB,IAAMC,gBAAgB;AAEtB,IAAMC,OAAmB;EAC9BC,IAAIF;EACJG,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;;;ADMO,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;",
|
|
6
|
+
"names": ["TitleAnnotationId", "S", "SpaceSchema", "KanbanType", "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"]
|
|
7
|
+
}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
KANBAN_PLUGIN,
|
|
5
5
|
KanbanAction,
|
|
6
6
|
meta
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ZJJYPR6C.mjs";
|
|
8
8
|
|
|
9
9
|
// packages/plugins/plugin-kanban/src/KanbanPlugin.tsx
|
|
10
10
|
import { createIntent, defineModule, contributes, Capabilities, Events, definePlugin } from "@dxos/app-framework";
|
|
@@ -15,9 +15,9 @@ import { KanbanType as KanbanType2, translations as kanbanTranslations } from "@
|
|
|
15
15
|
|
|
16
16
|
// packages/plugins/plugin-kanban/src/capabilities/index.ts
|
|
17
17
|
import { lazy } from "@dxos/app-framework";
|
|
18
|
-
var ArtifactDefinition = lazy(() => import("./artifact-definition-
|
|
19
|
-
var IntentResolver = lazy(() => import("./intent-resolver-
|
|
20
|
-
var ReactSurface = lazy(() => import("./react-surface-
|
|
18
|
+
var ArtifactDefinition = lazy(() => import("./artifact-definition-A7GJP5BI.mjs"));
|
|
19
|
+
var IntentResolver = lazy(() => import("./intent-resolver-4LPFRDUP.mjs"));
|
|
20
|
+
var ReactSurface = lazy(() => import("./react-surface-C7CETLHO.mjs"));
|
|
21
21
|
|
|
22
22
|
// packages/plugins/plugin-kanban/src/translations.ts
|
|
23
23
|
import { KanbanType } from "@dxos/react-ui-kanban";
|