@dxos/plugin-kanban 0.8.2-main.f11618f → 0.8.2-staging.42af850

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