@dxos/plugin-kanban 0.7.5-labs.ea4b4c2 → 0.7.5-labs.f400bbc

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 (65) hide show
  1. package/dist/lib/browser/artifact-definition-NJGTNX74.mjs +177 -0
  2. package/dist/lib/browser/artifact-definition-NJGTNX74.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-LM23M5YY.mjs → chunk-ILL6UKZE.mjs} +9 -1
  4. package/dist/lib/browser/{chunk-LM23M5YY.mjs.map → chunk-ILL6UKZE.mjs.map} +3 -3
  5. package/dist/lib/browser/index.mjs +25 -16
  6. package/dist/lib/browser/index.mjs.map +3 -3
  7. package/dist/lib/browser/{intent-resolver-HGOXP6M3.mjs → intent-resolver-6BD4KUAU.mjs} +45 -3
  8. package/dist/lib/browser/intent-resolver-6BD4KUAU.mjs.map +7 -0
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/{react-surface-MNZFIIM2.mjs → react-surface-6NYIVXVG.mjs} +21 -26
  11. package/dist/lib/browser/react-surface-6NYIVXVG.mjs.map +7 -0
  12. package/dist/lib/browser/types.mjs +1 -1
  13. package/dist/lib/node/artifact-definition-FDZAT4PG.cjs +192 -0
  14. package/dist/lib/node/artifact-definition-FDZAT4PG.cjs.map +7 -0
  15. package/dist/lib/node/{chunk-CRATKLIX.cjs → chunk-63KJGDFJ.cjs} +12 -4
  16. package/dist/lib/node/{chunk-CRATKLIX.cjs.map → chunk-63KJGDFJ.cjs.map} +3 -3
  17. package/dist/lib/node/index.cjs +33 -24
  18. package/dist/lib/node/index.cjs.map +3 -3
  19. package/dist/lib/node/{intent-resolver-6TF2SNKG.cjs → intent-resolver-DHL5HBJM.cjs} +52 -10
  20. package/dist/lib/node/intent-resolver-DHL5HBJM.cjs.map +7 -0
  21. package/dist/lib/node/meta.json +1 -1
  22. package/dist/lib/node/{react-surface-BJ3LTXIE.cjs → react-surface-65D6R6Z7.cjs} +32 -37
  23. package/dist/lib/node/react-surface-65D6R6Z7.cjs.map +7 -0
  24. package/dist/lib/node/types.cjs +7 -7
  25. package/dist/lib/node/types.cjs.map +1 -1
  26. package/dist/lib/node-esm/artifact-definition-OD3OJAWN.mjs +178 -0
  27. package/dist/lib/node-esm/artifact-definition-OD3OJAWN.mjs.map +7 -0
  28. package/dist/lib/node-esm/{chunk-VHIH5KA2.mjs → chunk-TZ3QKBLD.mjs} +9 -1
  29. package/dist/lib/node-esm/{chunk-VHIH5KA2.mjs.map → chunk-TZ3QKBLD.mjs.map} +3 -3
  30. package/dist/lib/node-esm/index.mjs +25 -16
  31. package/dist/lib/node-esm/index.mjs.map +3 -3
  32. package/dist/lib/node-esm/{intent-resolver-PS5JDFZ6.mjs → intent-resolver-QQWZXC5O.mjs} +45 -3
  33. package/dist/lib/node-esm/intent-resolver-QQWZXC5O.mjs.map +7 -0
  34. package/dist/lib/node-esm/meta.json +1 -1
  35. package/dist/lib/node-esm/{react-surface-RGWXTQPZ.mjs → react-surface-4JPB2SZX.mjs} +21 -26
  36. package/dist/lib/node-esm/react-surface-4JPB2SZX.mjs.map +7 -0
  37. package/dist/lib/node-esm/types.mjs +1 -1
  38. package/dist/types/src/KanbanPlugin.d.ts.map +1 -1
  39. package/dist/types/src/capabilities/artifact-definition.d.ts +11 -0
  40. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -0
  41. package/dist/types/src/capabilities/index.d.ts +1 -0
  42. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  43. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  44. package/dist/types/src/components/KanbanContainer.d.ts +1 -2
  45. package/dist/types/src/components/KanbanContainer.d.ts.map +1 -1
  46. package/dist/types/src/components/KanbanViewEditor.d.ts +1 -2
  47. package/dist/types/src/components/KanbanViewEditor.d.ts.map +1 -1
  48. package/dist/types/src/translations.d.ts +3 -0
  49. package/dist/types/src/translations.d.ts.map +1 -1
  50. package/dist/types/src/types.d.ts +12 -2
  51. package/dist/types/src/types.d.ts.map +1 -1
  52. package/package.json +26 -22
  53. package/src/KanbanPlugin.tsx +22 -11
  54. package/src/capabilities/artifact-definition.ts +135 -0
  55. package/src/capabilities/index.ts +1 -0
  56. package/src/capabilities/intent-resolver.ts +20 -0
  57. package/src/components/KanbanContainer.tsx +10 -10
  58. package/src/translations.ts +1 -0
  59. package/src/types.ts +7 -0
  60. package/dist/lib/browser/intent-resolver-HGOXP6M3.mjs.map +0 -7
  61. package/dist/lib/browser/react-surface-MNZFIIM2.mjs.map +0 -7
  62. package/dist/lib/node/intent-resolver-6TF2SNKG.cjs.map +0 -7
  63. package/dist/lib/node/react-surface-BJ3LTXIE.cjs.map +0 -7
  64. package/dist/lib/node-esm/intent-resolver-PS5JDFZ6.mjs.map +0 -7
  65. package/dist/lib/node-esm/react-surface-RGWXTQPZ.mjs.map +0 -7
@@ -5,7 +5,7 @@ import {
5
5
  KANBAN_PLUGIN,
6
6
  KanbanAction,
7
7
  isKanban
8
- } from "./chunk-VHIH5KA2.mjs";
8
+ } from "./chunk-TZ3QKBLD.mjs";
9
9
 
10
10
  // packages/plugins/plugin-kanban/src/capabilities/react-surface.tsx
11
11
  import React3, { useMemo as useMemo2 } from "react";
@@ -16,17 +16,17 @@ import { SelectInput as SelectInput2, useFormValues } from "@dxos/react-ui-form"
16
16
 
17
17
  // packages/plugins/plugin-kanban/src/components/KanbanContainer.tsx
18
18
  import React, { useCallback, useEffect, useState } from "react";
19
- import { invariant } from "@dxos/invariant";
19
+ import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
20
20
  import { useGlobalFilteredObjects } from "@dxos/plugin-search";
21
21
  import { Filter, useQuery, getSpace, create } from "@dxos/react-client/echo";
22
22
  import { useKanbanModel, Kanban } from "@dxos/react-ui-kanban";
23
23
  import { StackItem } from "@dxos/react-ui-stack";
24
24
  import { ViewProjection } from "@dxos/schema";
25
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-kanban/src/components/KanbanContainer.tsx";
26
25
  var KanbanContainer = ({ kanban }) => {
27
26
  const [cardSchema, setCardSchema] = useState();
28
27
  const [projection, setProjection] = useState();
29
28
  const space = getSpace(kanban);
29
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
30
30
  useEffect(() => {
31
31
  if (kanban.cardView?.target?.query?.type && space) {
32
32
  const query = space.db.schemaRegistry.query({
@@ -66,9 +66,11 @@ var KanbanContainer = ({ kanban }) => {
66
66
  const handleAddCard = useCallback((columnValue) => {
67
67
  const path = model?.columnFieldPath;
68
68
  if (space && cardSchema && path) {
69
- space.db.add(create(cardSchema, {
69
+ const card = create(cardSchema, {
70
70
  [path]: columnValue
71
- }));
71
+ });
72
+ space.db.add(card);
73
+ return card.id;
72
74
  }
73
75
  }, [
74
76
  space,
@@ -76,40 +78,33 @@ var KanbanContainer = ({ kanban }) => {
76
78
  model
77
79
  ]);
78
80
  const handleRemoveCard = useCallback((card) => {
79
- invariant(space, void 0, {
80
- F: __dxlog_file,
81
- L: 65,
82
- S: void 0,
83
- A: [
84
- "space",
85
- ""
86
- ]
87
- });
88
- space.db.remove(card);
81
+ void dispatch(createIntent(KanbanAction.DeleteCard, {
82
+ card
83
+ }));
89
84
  }, [
90
- space
85
+ dispatch
91
86
  ]);
92
87
  return /* @__PURE__ */ React.createElement(StackItem.Content, {
93
88
  toolbar: false
94
- }, model ? /* @__PURE__ */ React.createElement(Kanban, {
89
+ }, model && /* @__PURE__ */ React.createElement(Kanban, {
95
90
  model,
96
91
  onAddCard: handleAddCard,
97
92
  onRemoveCard: handleRemoveCard
98
- }) : /* @__PURE__ */ React.createElement("span", null, "Loading"));
93
+ }));
99
94
  };
100
95
 
101
96
  // packages/plugins/plugin-kanban/src/components/KanbanViewEditor.tsx
102
97
  import React2, { useCallback as useCallback2, useMemo } from "react";
103
- import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
98
+ import { createIntent as createIntent2, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
104
99
  import { FormatEnum } from "@dxos/echo-schema";
105
- import { invariant as invariant2 } from "@dxos/invariant";
100
+ import { invariant } from "@dxos/invariant";
106
101
  import { Filter as Filter2, getSpace as getSpace2, useQuery as useQuery2, useSchema } from "@dxos/react-client/echo";
107
102
  import { ViewEditor, Form, SelectInput } from "@dxos/react-ui-form";
108
103
  import { KanbanSettingsSchema } from "@dxos/react-ui-kanban";
109
104
  import { ViewType, ViewProjection as ViewProjection2 } from "@dxos/schema";
110
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-kanban/src/components/KanbanViewEditor.tsx";
105
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-kanban/src/components/KanbanViewEditor.tsx";
111
106
  var KanbanViewEditor = ({ kanban }) => {
112
- const { dispatchPromise: dispatch } = useIntentDispatcher();
107
+ const { dispatchPromise: dispatch } = useIntentDispatcher2();
113
108
  const space = getSpace2(kanban);
114
109
  const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.type, [
115
110
  kanban?.cardView?.target?.query?.type
@@ -117,8 +112,8 @@ var KanbanViewEditor = ({ kanban }) => {
117
112
  const schema = useSchema(space, currentTypename);
118
113
  const views = useQuery2(space, Filter2.schema(ViewType));
119
114
  const updateViewTypename = useCallback2((newTypename) => {
120
- invariant2(schema, void 0, {
121
- F: __dxlog_file2,
115
+ invariant(schema, void 0, {
116
+ F: __dxlog_file,
122
117
  L: 28,
123
118
  S: void 0,
124
119
  A: [
@@ -135,7 +130,7 @@ var KanbanViewEditor = ({ kanban }) => {
135
130
  views,
136
131
  schema
137
132
  ]);
138
- const handleDelete = useCallback2((fieldId) => dispatch?.(createIntent(KanbanAction.DeleteCardField, {
133
+ const handleDelete = useCallback2((fieldId) => dispatch?.(createIntent2(KanbanAction.DeleteCardField, {
139
134
  kanban,
140
135
  fieldId
141
136
  })), [
@@ -288,4 +283,4 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
288
283
  export {
289
284
  react_surface_default as default
290
285
  };
291
- //# sourceMappingURL=react-surface-RGWXTQPZ.mjs.map
286
+ //# sourceMappingURL=react-surface-4JPB2SZX.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, InitialSchemaAnnotationId, InitialPivotColumnAnnotationId } 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}/settings`,\n role: 'complementary--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, InitialSchemaAnnotationId);\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 schemata = space?.db.schemaRegistry.query().runSync();\n\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, InitialPivotColumnAnnotationId);\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 { initialSchema } = useFormValues();\n const [selectedSchema] = space?.db.schemaRegistry.query({ typename: initialSchema }).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 (!initialSchema) {\n return null;\n }\n\n return <SelectInput {...props} options={singleSelectColumns.map((column) => ({ value: column }))} />;\n },\n }),\n ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type EchoSchema } from '@dxos/echo-schema';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { Filter, useQuery, getSpace, create } from '@dxos/react-client/echo';\nimport { type KanbanType, useKanbanModel, Kanban } from '@dxos/react-ui-kanban';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { ViewProjection } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\nexport const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {\n const [cardSchema, setCardSchema] = useState<EchoSchema>();\n const [projection, setProjection] = useState<ViewProjection>();\n const space = getSpace(kanban);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n useEffect(() => {\n if (kanban.cardView?.target?.query?.type && space) {\n const query = space.db.schemaRegistry.query({ typename: kanban.cardView.target.query.type });\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, 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 cardSchema,\n projection,\n items: filteredObjects,\n });\n\n const handleAddCard = useCallback(\n (columnValue: string | undefined) => {\n const path = model?.columnFieldPath;\n if (space && cardSchema && path) {\n const card = create(cardSchema, { [path]: columnValue });\n space.db.add(card);\n return card.id;\n }\n },\n [space, cardSchema, model],\n );\n\n const handleRemoveCard = useCallback(\n (card: { id: string }) => {\n void dispatch(createIntent(KanbanAction.DeleteCard, { card }));\n },\n [dispatch],\n );\n\n return (\n <StackItem.Content toolbar={false}>\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 { 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 space = getSpace(kanban);\n const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.type, [kanban?.cardView?.target?.query?.type]);\n const schema = useSchema(space, currentTypename);\n const views = useQuery(space, Filter.schema(ViewType));\n\n const updateViewTypename = useCallback(\n (newTypename: string) => {\n invariant(schema);\n const matchingViews = views.filter((view) => view.query.type === currentTypename);\n for (const view of matchingViews) {\n view.query.type = newTypename;\n }\n schema.updateTypename(newTypename);\n },\n [views, schema],\n );\n\n const handleDelete = useCallback(\n (fieldId: string) => dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId })),\n [dispatch, kanban],\n );\n\n const projection = useMemo(() => {\n if (kanban?.cardView?.target && schema) {\n return new ViewProjection(schema, kanban.cardView.target);\n }\n }, [kanban?.cardView?.target, schema, JSON.stringify(schema)]);\n\n const selectFields = useMemo(() => {\n if (!projection) {\n return [];\n }\n\n return projection\n .getFieldProjections()\n .filter((field) => field.props.format === FormatEnum.SingleSelect)\n .map(({ field }) => ({ value: field.id, label: field.path }));\n }, [projection]);\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]);\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={updateViewTypename}\n onDelete={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", "create", "useKanbanModel", "Kanban", "StackItem", "ViewProjection", "KanbanContainer", "kanban", "cardSchema", "setCardSchema", "useState", "projection", "setProjection", "space", "getSpace", "dispatchPromise", "dispatch", "useIntentDispatcher", "useEffect", "cardView", "target", "query", "type", "db", "schemaRegistry", "typename", "unsubscribe", "subscribe", "schema", "results", "fire", "ViewProjection", "JSON", "stringify", "jsonSchema", "objects", "useQuery", "Filter", "nothing", "filteredObjects", "useGlobalFilteredObjects", "model", "useKanbanModel", "items", "handleAddCard", "useCallback", "columnValue", "path", "columnFieldPath", "card", "create", "add", "id", "handleRemoveCard", "createIntent", "KanbanAction", "DeleteCard", "StackItem", "Content", "toolbar", "Kanban", "onAddCard", "onRemoveCard", "React", "useCallback", "useMemo", "createIntent", "useIntentDispatcher", "FormatEnum", "invariant", "Filter", "getSpace", "useQuery", "useSchema", "ViewEditor", "Form", "SelectInput", "KanbanSettingsSchema", "ViewType", "ViewProjection", "KanbanViewEditor", "kanban", "dispatchPromise", "dispatch", "useIntentDispatcher", "space", "getSpace", "currentTypename", "useMemo", "cardView", "target", "query", "type", "schema", "useSchema", "views", "useQuery", "Filter", "ViewType", "updateViewTypename", "useCallback", "newTypename", "invariant", "matchingViews", "filter", "view", "updateTypename", "handleDelete", "fieldId", "createIntent", "KanbanAction", "DeleteCardField", "projection", "ViewProjection", "JSON", "stringify", "selectFields", "getFieldProjections", "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", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "KANBAN_PLUGIN", "role", "filter", "data", "isKanban", "subject", "component", "React", "KanbanContainer", "kanban", "KanbanViewEditor", "annotation", "findAnnotation", "schema", "ast", "InitialSchemaAnnotationId", "target", "inputProps", "props", "space", "isSpace", "getSpace", "schemata", "db", "schemaRegistry", "query", "runSync", "SelectInput", "options", "map", "value", "typename", "InitialPivotColumnAnnotationId", "initialSchema", "useFormValues", "selectedSchema", "singleSelectColumns", "useMemo", "jsonSchema", "properties", "columns", "Object", "entries", "reduce", "acc", "key", "format", "push", "column"]
7
+ }
@@ -6,7 +6,7 @@ import {
6
6
  KanbanAction,
7
7
  createKanban,
8
8
  isKanban
9
- } from "./chunk-VHIH5KA2.mjs";
9
+ } from "./chunk-TZ3QKBLD.mjs";
10
10
  export {
11
11
  CreateKanbanSchema,
12
12
  InitialPivotColumnAnnotationId,
@@ -1 +1 @@
1
- {"version":3,"file":"KanbanPlugin.d.ts","sourceRoot":"","sources":["../../../src/KanbanPlugin.tsx"],"names":[],"mappings":"AAcA,eAAO,MAAM,YAAY,4CAqCrB,CAAC"}
1
+ {"version":3,"file":"KanbanPlugin.d.ts","sourceRoot":"","sources":["../../../src/KanbanPlugin.tsx"],"names":[],"mappings":"AAeA,eAAO,MAAM,YAAY,4CA+CrB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type PromiseIntentDispatcher } from '@dxos/app-framework';
2
+ import { type Space } from '@dxos/react-client/echo';
3
+ declare global {
4
+ interface ToolContextExtensions {
5
+ space?: Space;
6
+ dispatch?: PromiseIntentDispatcher;
7
+ }
8
+ }
9
+ declare const _default: () => import("@dxos/app-framework").Capability<import("@dxos/artifact").ArtifactDefinition>;
10
+ export default _default;
11
+ //# sourceMappingURL=artifact-definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-definition.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/artifact-definition.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkD,KAAK,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAMnH,OAAO,EAA4B,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAU/E,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,QAAQ,CAAC,EAAE,uBAAuB,CAAC;KACpC;CACF;;AAED,wBAyGE"}
@@ -1,3 +1,4 @@
1
+ export declare const ArtifactDefinition: (props?: unknown) => Promise<() => Promise<import("@dxos/app-framework").Capability<import("@dxos/artifact").ArtifactDefinition> | import("@dxos/app-framework").AnyCapability[]>>;
1
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[]>>;
2
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[]>>;
3
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,cAAc,kMAA0C,CAAC;AACtE,eAAO,MAAM,YAAY,gMAAwC,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 +1 @@
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,wBAgCK"}
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,wBAoDK"}
@@ -1,7 +1,6 @@
1
- import React from 'react';
2
1
  import { type KanbanType } from '@dxos/react-ui-kanban';
3
2
  export declare const KanbanContainer: ({ kanban }: {
4
3
  kanban: KanbanType;
5
4
  role: string;
6
- }) => React.JSX.Element;
5
+ }) => import("react/jsx-runtime").JSX.Element;
7
6
  //# sourceMappingURL=KanbanContainer.d.ts.map
@@ -1 +1 @@
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;AAIhF,eAAO,MAAM,eAAe,eAAgB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,sBAiE/E,CAAC"}
1
+ {"version":3,"file":"KanbanContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/KanbanContainer.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,UAAU,EAA0B,MAAM,uBAAuB,CAAC;AAMhF,eAAO,MAAM,eAAe,eAAgB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,4CA+D/E,CAAC"}
@@ -1,8 +1,7 @@
1
- import React from 'react';
2
1
  import { type KanbanType } from '@dxos/react-ui-kanban';
3
2
  type KanbanViewEditorProps = {
4
3
  kanban: KanbanType;
5
4
  };
6
- export declare const KanbanViewEditor: ({ kanban }: KanbanViewEditorProps) => React.JSX.Element | null;
5
+ export declare const KanbanViewEditor: ({ kanban }: KanbanViewEditorProps) => import("react/jsx-runtime").JSX.Element | null;
7
6
  export {};
8
7
  //# sourceMappingURL=KanbanViewEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"KanbanViewEditor.d.ts","sourceRoot":"","sources":["../../../../src/components/KanbanViewEditor.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAOpD,OAAO,EAAE,KAAK,UAAU,EAAwB,MAAM,uBAAuB,CAAC;AAK9E,KAAK,qBAAqB,GAAG;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAEpD,eAAO,MAAM,gBAAgB,eAAgB,qBAAqB,6BAsEjE,CAAC"}
1
+ {"version":3,"file":"KanbanViewEditor.d.ts","sourceRoot":"","sources":["../../../../src/components/KanbanViewEditor.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,UAAU,EAAwB,MAAM,uBAAuB,CAAC;AAK9E,KAAK,qBAAqB,GAAG;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAEpD,eAAO,MAAM,gBAAgB,eAAgB,qBAAqB,mDAsEjE,CAAC"}
@@ -15,6 +15,7 @@ declare const _default: {
15
15
  'delete item label'?: undefined;
16
16
  'create kanban label'?: undefined;
17
17
  'card field deleted label'?: undefined;
18
+ 'card deleted label'?: undefined;
18
19
  } | {
19
20
  'plugin name': string;
20
21
  'kanban title label': string;
@@ -29,6 +30,7 @@ declare const _default: {
29
30
  'delete item label': string;
30
31
  'create kanban label': string;
31
32
  'card field deleted label': string;
33
+ 'card deleted label': string;
32
34
  'typename label'?: undefined;
33
35
  };
34
36
  "dxos.org/plugin/kanban": {
@@ -45,6 +47,7 @@ declare const _default: {
45
47
  'delete item label': string;
46
48
  'create kanban label': string;
47
49
  'card field deleted label': string;
50
+ 'card deleted label': string;
48
51
  };
49
52
  };
50
53
  }[];
@@ -1 +1 @@
1
- {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/translations.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,wBAuBE"}
1
+ {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/translations.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,wBAwBE"}
@@ -43,10 +43,10 @@ export declare namespace KanbanAction {
43
43
  deletionData: S.optional<S.Struct<{
44
44
  field: S.mutable<S.Struct<{
45
45
  id: typeof S.String;
46
- path: S.Schema<import("@dxos/echo-schema").JsonPath, import("@dxos/echo-schema").JsonPath, never>;
46
+ path: S.Schema<import("@dxos/effect").JsonPath, import("@dxos/effect").JsonPath, never>;
47
47
  visible: S.optional<typeof S.Boolean>;
48
48
  size: S.optional<typeof S.Number>;
49
- referencePath: S.optional<S.Schema<import("@dxos/echo-schema").JsonPath, import("@dxos/echo-schema").JsonPath, never>>;
49
+ referencePath: S.optional<S.Schema<import("@dxos/effect").JsonPath, import("@dxos/effect").JsonPath, never>>;
50
50
  }>>;
51
51
  props: typeof S.Any;
52
52
  index: typeof S.Number;
@@ -56,6 +56,16 @@ export declare namespace KanbanAction {
56
56
  }>;
57
57
  export class DeleteCardField extends DeleteCardField_base {
58
58
  }
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">;
61
+ } & {
62
+ input: S.Struct<{
63
+ card: typeof S.Any;
64
+ }>;
65
+ output: typeof S.Void;
66
+ }>;
67
+ export class DeleteCard extends DeleteCard_base {
68
+ }
59
69
  export {};
60
70
  }
61
71
  export interface KanbanModel {
@@ -1 +1 @@
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;AAEH,eAAO,MAAM,yBAAyB,eAA6D,CAAC;AACpG,eAAO,MAAM,8BAA8B,eAAkE,CAAC;AAE9G,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;;;;;;;;;+BA3CL,EAAG,MAAM;0BAAW,EAAI,MAAK;6BACxB,EAAE,QAAQ,QAAO,EAAI,OAAM;0BAEjC,EAAG,QAAQ,QAAO,EAAI,MAAK;mCAGxB,EAAG,QAAQ,CAAC,EAAE,MAChB;;;;;;;;IAsCA,MAAM,OAAO,eAAgB,SAAQ,oBAgBnC;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,UAAiB;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,wBAG9G,CAAC"}
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;AAEH,eAAO,MAAM,yBAAyB,eAA6D,CAAC;AACpG,eAAO,MAAM,8BAA8B,eAAkE,CAAC;AAE9G,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;;;;;;;;;+BA3CL,EAAG,MAAM;0BAAW,EAAI,MAAK;6BACxB,EAAE,QAAQ,QAAO,EAAI,OAAM;0BAEjC,EAAG,QAAQ,QAAO,EAAI,MAAK;mCAGxB,EAAG,QAAQ,CAAC,EAAE,MAChB;;;;;;;;IAsCA,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,UAAiB;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,wBAG9G,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@dxos/plugin-kanban",
3
- "version": "0.7.5-labs.ea4b4c2",
3
+ "version": "0.7.5-labs.f400bbc",
4
4
  "description": "Kanban DXOS Surface plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
7
7
  "license": "MIT",
8
8
  "author": "DXOS.org",
9
9
  "sideEffects": true,
10
+ "type": "module",
10
11
  "exports": {
11
12
  ".": {
12
13
  "types": "./dist/types/src/index.d.ts",
@@ -34,22 +35,24 @@
34
35
  "dependencies": {
35
36
  "@effect/schema": "^0.75.5",
36
37
  "@preact/signals-core": "^1.6.0",
37
- "@dxos/app-framework": "0.7.5-labs.ea4b4c2",
38
- "@dxos/async": "0.7.5-labs.ea4b4c2",
39
- "@dxos/effect": "0.7.5-labs.ea4b4c2",
40
- "@dxos/echo-schema": "0.7.5-labs.ea4b4c2",
41
- "@dxos/plugin-graph": "0.7.5-labs.ea4b4c2",
42
- "@dxos/plugin-client": "0.7.5-labs.ea4b4c2",
43
- "@dxos/plugin-space": "0.7.5-labs.ea4b4c2",
44
- "@dxos/plugin-search": "0.7.5-labs.ea4b4c2",
45
- "@dxos/random": "0.7.5-labs.ea4b4c2",
46
- "@dxos/react-ui-form": "0.7.5-labs.ea4b4c2",
47
- "@dxos/react-client": "0.7.5-labs.ea4b4c2",
48
- "@dxos/schema": "0.7.5-labs.ea4b4c2",
49
- "@dxos/util": "0.7.5-labs.ea4b4c2",
50
- "@dxos/react-ui-stack": "0.7.5-labs.ea4b4c2",
51
- "@dxos/invariant": "0.7.5-labs.ea4b4c2",
52
- "@dxos/react-ui-kanban": "0.7.5-labs.ea4b4c2"
38
+ "@dxos/app-framework": "0.7.5-labs.f400bbc",
39
+ "@dxos/assistant": "0.7.5-labs.f400bbc",
40
+ "@dxos/artifact": "0.7.5-labs.f400bbc",
41
+ "@dxos/echo-schema": "0.7.5-labs.f400bbc",
42
+ "@dxos/effect": "0.7.5-labs.f400bbc",
43
+ "@dxos/async": "0.7.5-labs.f400bbc",
44
+ "@dxos/invariant": "0.7.5-labs.f400bbc",
45
+ "@dxos/plugin-client": "0.7.5-labs.f400bbc",
46
+ "@dxos/plugin-graph": "0.7.5-labs.f400bbc",
47
+ "@dxos/plugin-search": "0.7.5-labs.f400bbc",
48
+ "@dxos/plugin-space": "0.7.5-labs.f400bbc",
49
+ "@dxos/random": "0.7.5-labs.f400bbc",
50
+ "@dxos/react-client": "0.7.5-labs.f400bbc",
51
+ "@dxos/react-ui-form": "0.7.5-labs.f400bbc",
52
+ "@dxos/react-ui-kanban": "0.7.5-labs.f400bbc",
53
+ "@dxos/schema": "0.7.5-labs.f400bbc",
54
+ "@dxos/react-ui-stack": "0.7.5-labs.f400bbc",
55
+ "@dxos/util": "0.7.5-labs.f400bbc"
53
56
  },
54
57
  "devDependencies": {
55
58
  "@types/react": "~18.2.0",
@@ -57,15 +60,16 @@
57
60
  "react": "~18.2.0",
58
61
  "react-dom": "~18.2.0",
59
62
  "vite": "5.4.7",
60
- "@dxos/react-ui": "0.7.5-labs.ea4b4c2",
61
- "@dxos/react-ui-theme": "0.7.5-labs.ea4b4c2",
62
- "@dxos/storybook-utils": "0.7.5-labs.ea4b4c2"
63
+ "@dxos/react-ui-theme": "0.7.5-labs.f400bbc",
64
+ "@dxos/storybook-utils": "0.7.5-labs.f400bbc",
65
+ "@dxos/react-ui": "0.7.5-labs.f400bbc"
63
66
  },
64
67
  "peerDependencies": {
68
+ "effect": "^3.12.3",
65
69
  "react": "~18.2.0",
66
70
  "react-dom": "~18.2.0",
67
- "@dxos/react-ui-theme": "0.7.5-labs.ea4b4c2",
68
- "@dxos/react-ui": "0.7.5-labs.ea4b4c2"
71
+ "@dxos/react-ui": "0.7.5-labs.f400bbc",
72
+ "@dxos/react-ui-theme": "0.7.5-labs.f400bbc"
69
73
  },
70
74
  "publishConfig": {
71
75
  "access": "public"
@@ -3,14 +3,15 @@
3
3
  //
4
4
 
5
5
  import { createIntent, defineModule, contributes, Capabilities, Events, definePlugin } from '@dxos/app-framework';
6
- import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
7
- import { type Space } from '@dxos/react-client/echo';
6
+ import { ClientEvents } from '@dxos/plugin-client';
7
+ import { SpaceCapabilities } from '@dxos/plugin-space';
8
+ import { defineObjectForm } from '@dxos/plugin-space/types';
8
9
  import { KanbanType, translations as kanbanTranslations } from '@dxos/react-ui-kanban';
9
10
 
10
- import { IntentResolver, ReactSurface } from './capabilities';
11
+ import { ArtifactDefinition, IntentResolver, ReactSurface } from './capabilities';
11
12
  import { KANBAN_PLUGIN, meta } from './meta';
12
13
  import translations from './translations';
13
- import { CreateKanbanSchema, type CreateKanbanType, KanbanAction } from './types';
14
+ import { CreateKanbanSchema, KanbanAction } from './types';
14
15
 
15
16
  export const KanbanPlugin = () =>
16
17
  definePlugin(meta, [
@@ -26,27 +27,37 @@ export const KanbanPlugin = () =>
26
27
  contributes(Capabilities.Metadata, {
27
28
  id: KanbanType.typename,
28
29
  metadata: {
29
- creationSchema: CreateKanbanSchema,
30
- createObject: (props: CreateKanbanType, options: { space: Space }) =>
31
- createIntent(KanbanAction.Create, { ...props, space: options.space }),
32
30
  placeholder: ['kanban title placeholder', { ns: KANBAN_PLUGIN }],
33
31
  icon: 'ph--kanban--regular',
34
32
  },
35
33
  }),
36
34
  }),
37
35
  defineModule({
38
- id: `${meta.id}/module/schema`,
36
+ id: `${meta.id}/module/object-form`,
39
37
  activatesOn: ClientEvents.SetupSchema,
40
- activate: () => contributes(ClientCapabilities.Schema, [KanbanType]),
38
+ activate: () =>
39
+ contributes(
40
+ SpaceCapabilities.ObjectForm,
41
+ defineObjectForm({
42
+ objectSchema: KanbanType,
43
+ formSchema: CreateKanbanSchema,
44
+ getIntent: (props, options) => createIntent(KanbanAction.Create, { ...props, space: options.space }),
45
+ }),
46
+ ),
41
47
  }),
42
48
  defineModule({
43
49
  id: `${meta.id}/module/react-surface`,
44
- activatesOn: Events.SetupSurfaces,
50
+ activatesOn: Events.SetupReactSurface,
45
51
  activate: ReactSurface,
46
52
  }),
47
53
  defineModule({
48
54
  id: `${meta.id}/module/intent-resolver`,
49
- activatesOn: Events.SetupIntents,
55
+ activatesOn: Events.SetupIntentResolver,
50
56
  activate: IntentResolver,
51
57
  }),
58
+ defineModule({
59
+ id: `${meta.id}/module/artifact-definition`,
60
+ activatesOn: Events.SetupArtifactDefinition,
61
+ activate: ArtifactDefinition,
62
+ }),
52
63
  ]);
@@ -0,0 +1,135 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { pipe } from 'effect';
6
+
7
+ import { Capabilities, chain, contributes, createIntent, type PromiseIntentDispatcher } from '@dxos/app-framework';
8
+ import { defineArtifact, defineTool, ToolResult } from '@dxos/artifact';
9
+ import { createArtifactElement } from '@dxos/assistant';
10
+ import { isInstanceOf, S } from '@dxos/echo-schema';
11
+ import { invariant } from '@dxos/invariant';
12
+ import { SpaceAction } from '@dxos/plugin-space/types';
13
+ import { Filter, fullyQualifiedId, type Space } from '@dxos/react-client/echo';
14
+ import { KanbanType } from '@dxos/react-ui-kanban';
15
+
16
+ import { meta } from '../meta';
17
+ import { KanbanAction } from '../types';
18
+
19
+ const QualifiedId = S.String.annotations({
20
+ description: 'The fully qualified ID of the kanban `spaceID:objectID`',
21
+ });
22
+
23
+ declare global {
24
+ interface ToolContextExtensions {
25
+ space?: Space;
26
+ dispatch?: PromiseIntentDispatcher;
27
+ }
28
+ }
29
+
30
+ export default () => {
31
+ const definition = defineArtifact({
32
+ id: meta.id,
33
+ name: meta.name,
34
+ instructions: `
35
+ - Before adding items to a kanban board, inspect the board to see its schema
36
+ - When adding items, you must not include the 'id' field -- it is automatically generated
37
+ - BEFORE adding items, always make sure the board has been shown to the user!
38
+ `,
39
+ schema: KanbanType,
40
+ tools: [
41
+ defineTool(meta.id, {
42
+ name: 'create',
43
+ description: `
44
+ Create a new kanban board using an existing schema.
45
+ Use schema_create first to create a schema, or schema_list to choose an existing one.`,
46
+ caption: 'Creating kanban board...',
47
+ schema: S.Struct({
48
+ typename: S.String.annotations({
49
+ description: 'The fully qualified typename of the schema to use for the kanban cards.',
50
+ }),
51
+ pivotColumn: S.optional(S.String).annotations({
52
+ description: 'Optional field name to use as the column pivot.',
53
+ }),
54
+ }),
55
+ execute: async ({ typename, pivotColumn }, { extensions }) => {
56
+ invariant(extensions?.space, 'No space');
57
+ invariant(extensions?.dispatch, 'No intent dispatcher');
58
+
59
+ // Validate schema exists first
60
+ const schema = await extensions.space.db.schemaRegistry.query({ typename }).firstOrUndefined();
61
+ if (!schema) {
62
+ return ToolResult.Error(`Schema not found: ${typename}`);
63
+ }
64
+
65
+ const intent = pipe(
66
+ createIntent(KanbanAction.Create, {
67
+ space: extensions.space,
68
+ initialSchema: typename,
69
+ initialPivotColumn: pivotColumn,
70
+ }),
71
+ chain(SpaceAction.AddObject, { target: extensions.space }),
72
+ );
73
+
74
+ const { data, error } = await extensions.dispatch(intent);
75
+ if (!data || error) {
76
+ return ToolResult.Error(error?.message ?? 'Failed to create kanban board');
77
+ }
78
+
79
+ return ToolResult.Success(createArtifactElement(data.id));
80
+ },
81
+ }),
82
+ defineTool(meta.id, {
83
+ name: 'list',
84
+ description: 'List all kanban boards in the current space.',
85
+ caption: 'Listing kanban boards...',
86
+ schema: S.Struct({}),
87
+ execute: async (_input, { extensions }) => {
88
+ invariant(extensions?.space, 'No space');
89
+ const space = extensions.space;
90
+ const { objects: boards } = await space.db.query(Filter.schema(KanbanType)).run();
91
+
92
+ const boardInfo = await Promise.all(
93
+ boards.map(async (board: KanbanType) => {
94
+ const view = await board.cardView?.load();
95
+ return {
96
+ id: fullyQualifiedId(board),
97
+ typename: view?.query.type,
98
+ };
99
+ }),
100
+ );
101
+
102
+ return ToolResult.Success(boardInfo);
103
+ },
104
+ }),
105
+ defineTool(meta.id, {
106
+ name: 'inspect',
107
+ description: 'Get details about a specific kanban board.',
108
+ caption: 'Inspecting kanban board...',
109
+ schema: S.Struct({ id: QualifiedId }),
110
+ execute: async ({ id }, { extensions }) => {
111
+ invariant(extensions?.space, 'No space');
112
+ const space = extensions.space;
113
+ const { objects: boards } = await space.db.query(Filter.schema(KanbanType)).run();
114
+ const board = boards.find((board: KanbanType) => fullyQualifiedId(board) === id);
115
+ invariant(isInstanceOf(KanbanType, board));
116
+
117
+ const view = await board.cardView?.load();
118
+ invariant(view);
119
+
120
+ const typename = view.query.type;
121
+ const schema = await space.db.schemaRegistry.query({ typename }).firstOrUndefined();
122
+ invariant(schema);
123
+
124
+ return ToolResult.Success({
125
+ schema,
126
+ columnField: board.columnFieldId,
127
+ viewFields: view.fields,
128
+ });
129
+ },
130
+ }),
131
+ ],
132
+ });
133
+
134
+ return contributes(Capabilities.ArtifactDefinition, definition);
135
+ };
@@ -4,5 +4,6 @@
4
4
 
5
5
  import { lazy } from '@dxos/app-framework';
6
6
 
7
+ export const ArtifactDefinition = lazy(() => import('./artifact-definition'));
7
8
  export const IntentResolver = lazy(() => import('./intent-resolver'));
8
9
  export const ReactSurface = lazy(() => import('./react-surface'));
@@ -22,6 +22,7 @@ export default () =>
22
22
  intent: KanbanAction.DeleteCardField,
23
23
  resolve: ({ kanban, fieldId, deletionData }, undo) => {
24
24
  invariant(kanban.cardView);
25
+ invariant(kanban.cardView.target?.query.type);
25
26
 
26
27
  const schema =
27
28
  kanban.cardView.target && getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);
@@ -42,4 +43,23 @@ export default () =>
42
43
  }
43
44
  },
44
45
  }),
46
+ createResolver({
47
+ intent: KanbanAction.DeleteCard,
48
+ resolve: ({ card }, undo) => {
49
+ const space = getSpace(card);
50
+ invariant(space);
51
+
52
+ if (!undo) {
53
+ space.db.remove(card);
54
+ return {
55
+ undoable: {
56
+ message: ['card deleted label', { ns: KANBAN_PLUGIN }],
57
+ data: { card },
58
+ },
59
+ };
60
+ } else {
61
+ space.db.add(card);
62
+ }
63
+ },
64
+ }),
45
65
  ]);