@dxos/plugin-kanban 0.7.5-main.9cb18ac → 0.7.5-main.9d2a38b

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 (75) hide show
  1. package/dist/lib/browser/{chunk-JZBAL6SW.mjs → chunk-L4PZ5BVV.mjs} +18 -5
  2. package/dist/lib/browser/chunk-L4PZ5BVV.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +55 -243
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/intent-resolver-ILMGO3TT.mjs +70 -0
  6. package/dist/lib/browser/intent-resolver-ILMGO3TT.mjs.map +7 -0
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/react-surface-KCOBVPKL.mjs +180 -0
  9. package/dist/lib/browser/react-surface-KCOBVPKL.mjs.map +7 -0
  10. package/dist/lib/browser/types.mjs +1 -2
  11. package/dist/lib/node/{chunk-BE2FRW7E.cjs → chunk-QCB2U2J2.cjs} +22 -8
  12. package/dist/lib/node/chunk-QCB2U2J2.cjs.map +7 -0
  13. package/dist/lib/node/index.cjs +56 -235
  14. package/dist/lib/node/index.cjs.map +4 -4
  15. package/dist/lib/node/intent-resolver-6QZ6AMZF.cjs +84 -0
  16. package/dist/lib/node/intent-resolver-6QZ6AMZF.cjs.map +7 -0
  17. package/dist/lib/node/meta.json +1 -1
  18. package/dist/lib/node/react-surface-MOZ2OTXW.cjs +198 -0
  19. package/dist/lib/node/react-surface-MOZ2OTXW.cjs.map +7 -0
  20. package/dist/lib/node/types.cjs +4 -5
  21. package/dist/lib/node/types.cjs.map +2 -2
  22. package/dist/lib/node-esm/{chunk-L7JM7LGJ.mjs → chunk-PNSRVZBP.mjs} +18 -4
  23. package/dist/lib/node-esm/chunk-PNSRVZBP.mjs.map +7 -0
  24. package/dist/lib/node-esm/index.mjs +55 -243
  25. package/dist/lib/node-esm/index.mjs.map +4 -4
  26. package/dist/lib/node-esm/intent-resolver-LRZVOK2C.mjs +71 -0
  27. package/dist/lib/node-esm/intent-resolver-LRZVOK2C.mjs.map +7 -0
  28. package/dist/lib/node-esm/meta.json +1 -1
  29. package/dist/lib/node-esm/react-surface-HNVSKYHF.mjs +181 -0
  30. package/dist/lib/node-esm/react-surface-HNVSKYHF.mjs.map +7 -0
  31. package/dist/lib/node-esm/types.mjs +1 -2
  32. package/dist/types/src/KanbanPlugin.d.ts +1 -3
  33. package/dist/types/src/KanbanPlugin.d.ts.map +1 -1
  34. package/dist/types/src/capabilities/index.d.ts +3 -0
  35. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  36. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
  37. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  38. package/dist/types/src/capabilities/react-surface.d.ts +4 -0
  39. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  40. package/dist/types/src/components/KanbanViewEditor.d.ts +2 -2
  41. package/dist/types/src/components/KanbanViewEditor.d.ts.map +1 -1
  42. package/dist/types/src/components/index.d.ts +1 -0
  43. package/dist/types/src/components/index.d.ts.map +1 -1
  44. package/dist/types/src/index.d.ts +1 -2
  45. package/dist/types/src/index.d.ts.map +1 -1
  46. package/dist/types/src/meta.d.ts +1 -2
  47. package/dist/types/src/meta.d.ts.map +1 -1
  48. package/dist/types/src/types.d.ts +10 -4
  49. package/dist/types/src/types.d.ts.map +1 -1
  50. package/dist/types/tsconfig.tsbuildinfo +1 -1
  51. package/package.json +21 -29
  52. package/src/KanbanPlugin.tsx +48 -72
  53. package/src/capabilities/index.ts +8 -0
  54. package/src/capabilities/intent-resolver.ts +39 -0
  55. package/src/capabilities/react-surface.tsx +28 -0
  56. package/src/components/KanbanViewEditor.tsx +21 -5
  57. package/src/components/index.ts +1 -0
  58. package/src/index.ts +1 -4
  59. package/src/meta.ts +1 -1
  60. package/src/types.ts +0 -13
  61. package/dist/lib/browser/chunk-JZBAL6SW.mjs.map +0 -7
  62. package/dist/lib/browser/chunk-LG4OMN5S.mjs +0 -18
  63. package/dist/lib/browser/chunk-LG4OMN5S.mjs.map +0 -7
  64. package/dist/lib/browser/meta.mjs +0 -9
  65. package/dist/lib/browser/meta.mjs.map +0 -7
  66. package/dist/lib/node/chunk-BE2FRW7E.cjs.map +0 -7
  67. package/dist/lib/node/chunk-MBAGHRFM.cjs +0 -41
  68. package/dist/lib/node/chunk-MBAGHRFM.cjs.map +0 -7
  69. package/dist/lib/node/meta.cjs +0 -30
  70. package/dist/lib/node/meta.cjs.map +0 -7
  71. package/dist/lib/node-esm/chunk-L7JM7LGJ.mjs.map +0 -7
  72. package/dist/lib/node-esm/chunk-OTZHYV3S.mjs +0 -20
  73. package/dist/lib/node-esm/chunk-OTZHYV3S.mjs.map +0 -7
  74. package/dist/lib/node-esm/meta.mjs +0 -10
  75. package/dist/lib/node-esm/meta.mjs.map +0 -7
@@ -0,0 +1,181 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ KANBAN_PLUGIN,
4
+ KanbanAction,
5
+ isKanban
6
+ } from "./chunk-PNSRVZBP.mjs";
7
+
8
+ // packages/plugins/experimental/plugin-kanban/src/capabilities/react-surface.tsx
9
+ import React3 from "react";
10
+ import { Capabilities, contributes, createSurface } from "@dxos/app-framework";
11
+
12
+ // packages/plugins/experimental/plugin-kanban/src/components/KanbanContainer.tsx
13
+ import React, { useCallback, useEffect, useState } from "react";
14
+ import { invariant } from "@dxos/invariant";
15
+ import { useGlobalFilteredObjects } from "@dxos/plugin-search";
16
+ import { Filter, useQuery, getSpace, create } from "@dxos/react-client/echo";
17
+ import { useKanbanModel, Kanban } from "@dxos/react-ui-kanban";
18
+ import { StackItem } from "@dxos/react-ui-stack";
19
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-kanban/src/components/KanbanContainer.tsx";
20
+ var KanbanContainer = ({ kanban }) => {
21
+ const [cardSchema, setCardSchema] = useState();
22
+ const space = getSpace(kanban);
23
+ useEffect(() => {
24
+ if (kanban.cardView && space) {
25
+ setCardSchema(space.db.schemaRegistry.getSchema(kanban.cardView.target.query.type));
26
+ }
27
+ }, [
28
+ kanban.cardView,
29
+ space
30
+ ]);
31
+ const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());
32
+ const filteredObjects = useGlobalFilteredObjects(objects);
33
+ const model = useKanbanModel({
34
+ kanban,
35
+ cardSchema,
36
+ items: filteredObjects
37
+ });
38
+ const handleAddColumn = useCallback((columnValue) => model?.addEmptyColumn(columnValue), [
39
+ model
40
+ ]);
41
+ const handleAddCard = useCallback((columnValue) => {
42
+ if (space && cardSchema) {
43
+ space.db.add(create(cardSchema, {
44
+ title: "",
45
+ description: "",
46
+ state: columnValue
47
+ }));
48
+ }
49
+ }, [
50
+ space,
51
+ cardSchema
52
+ ]);
53
+ const handleRemoveCard = useCallback((card) => {
54
+ invariant(space, void 0, {
55
+ F: __dxlog_file,
56
+ L: 51,
57
+ S: void 0,
58
+ A: [
59
+ "space",
60
+ ""
61
+ ]
62
+ });
63
+ space.db.remove(card);
64
+ }, [
65
+ space
66
+ ]);
67
+ const handleRemoveEmptyColumn = useCallback((columnValue) => {
68
+ model?.removeColumnFromArrangement(columnValue);
69
+ }, [
70
+ model
71
+ ]);
72
+ return /* @__PURE__ */ React.createElement(StackItem.Content, {
73
+ toolbar: false
74
+ }, model ? /* @__PURE__ */ React.createElement(Kanban, {
75
+ model,
76
+ onAddCard: handleAddCard,
77
+ onAddColumn: handleAddColumn,
78
+ onRemoveCard: handleRemoveCard,
79
+ onRemoveEmptyColumn: handleRemoveEmptyColumn
80
+ }) : /* @__PURE__ */ React.createElement("span", null, "Loading"));
81
+ };
82
+
83
+ // packages/plugins/experimental/plugin-kanban/src/components/KanbanViewEditor.tsx
84
+ import React2, { useCallback as useCallback2, useEffect as useEffect2, useMemo, useState as useState2 } from "react";
85
+ import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
86
+ import { Filter as Filter2, getSpace as getSpace2, useQuery as useQuery2 } from "@dxos/react-client/echo";
87
+ import { ViewEditor, Form } from "@dxos/react-ui-form";
88
+ import { KanbanPropsSchema } from "@dxos/react-ui-kanban";
89
+ import { ViewType } from "@dxos/schema";
90
+ var KanbanViewEditor = ({ kanban }) => {
91
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
92
+ const space = getSpace2(kanban);
93
+ const [schema, setSchema] = useState2(space && kanban?.cardView?.target?.query?.type ? space.db.schemaRegistry.getSchema(kanban.cardView.target.query.type) : void 0);
94
+ const views = useQuery2(space, Filter2.schema(ViewType));
95
+ const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.type, [
96
+ kanban?.cardView?.target?.query?.type
97
+ ]);
98
+ const updateViewTypename = useCallback2((newTypename) => {
99
+ if (!schema) {
100
+ return;
101
+ }
102
+ const matchingViews = views.filter((view) => view.query.type === currentTypename);
103
+ for (const view of matchingViews) {
104
+ view.query.type = newTypename;
105
+ }
106
+ schema.updateTypename(newTypename);
107
+ }, [
108
+ views,
109
+ schema
110
+ ]);
111
+ useEffect2(() => {
112
+ if (space && kanban?.cardView?.target?.query?.type) {
113
+ const unsubscribe = space.db.schemaRegistry.query({
114
+ typename: kanban?.cardView?.target?.query?.type
115
+ }).subscribe((query) => {
116
+ const [schema2] = query.results;
117
+ if (schema2) {
118
+ setSchema(schema2);
119
+ }
120
+ });
121
+ return unsubscribe;
122
+ }
123
+ }, [
124
+ space,
125
+ kanban?.cardView?.target?.query?.type
126
+ ]);
127
+ const handleDelete = useCallback2((fieldId) => dispatch?.(createIntent(KanbanAction.DeleteCardField, {
128
+ kanban,
129
+ fieldId
130
+ })), [
131
+ dispatch,
132
+ kanban
133
+ ]);
134
+ if (!space || !schema || !kanban.cardView?.target) {
135
+ return null;
136
+ }
137
+ return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(Form, {
138
+ schema: KanbanPropsSchema,
139
+ values: {
140
+ columnField: kanban.columnField
141
+ },
142
+ onSave: ({ columnField }) => {
143
+ kanban.columnField = columnField;
144
+ kanban.arrangement = void 0;
145
+ }
146
+ }), /* @__PURE__ */ React2.createElement(ViewEditor, {
147
+ registry: space.db.schemaRegistry,
148
+ schema,
149
+ view: kanban.cardView.target,
150
+ onTypenameChanged: updateViewTypename,
151
+ onDelete: handleDelete
152
+ }));
153
+ };
154
+
155
+ // packages/plugins/experimental/plugin-kanban/src/capabilities/react-surface.tsx
156
+ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
157
+ createSurface({
158
+ id: `${KANBAN_PLUGIN}/kanban`,
159
+ role: [
160
+ "article",
161
+ "section"
162
+ ],
163
+ filter: (data) => isKanban(data.subject),
164
+ component: ({ data, role }) => /* @__PURE__ */ React3.createElement(KanbanContainer, {
165
+ kanban: data.subject,
166
+ role
167
+ })
168
+ }),
169
+ createSurface({
170
+ id: `${KANBAN_PLUGIN}/settings`,
171
+ role: "complementary--settings",
172
+ filter: (data) => isKanban(data.subject),
173
+ component: ({ data }) => /* @__PURE__ */ React3.createElement(KanbanViewEditor, {
174
+ kanban: data.subject
175
+ })
176
+ })
177
+ ]);
178
+ export {
179
+ react_surface_default as default
180
+ };
181
+ //# sourceMappingURL=react-surface-HNVSKYHF.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 from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { type KanbanType } from '@dxos/react-ui-kanban';\n\nimport { KanbanContainer, KanbanViewEditor } from '../components';\nimport { KANBAN_PLUGIN } from '../meta';\nimport { isKanban } 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 ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { type EchoSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\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';\n\nexport const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {\n const [cardSchema, setCardSchema] = useState<EchoSchema>();\n const space = getSpace(kanban);\n useEffect(() => {\n if (kanban.cardView && space) {\n setCardSchema(space.db.schemaRegistry.getSchema(kanban.cardView.target!.query.type));\n }\n }, [kanban.cardView, space]);\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 items: filteredObjects,\n });\n\n const handleAddColumn = useCallback((columnValue: string) => model?.addEmptyColumn(columnValue), [model]);\n\n const handleAddCard = useCallback(\n (columnValue: string) => {\n if (space && cardSchema) {\n space.db.add(\n create(cardSchema, {\n title: '',\n description: '',\n state: columnValue,\n }),\n );\n }\n },\n [space, cardSchema],\n );\n\n const handleRemoveCard = useCallback(\n (card: { id: string }) => {\n invariant(space);\n space.db.remove(card);\n },\n [space],\n );\n\n const handleRemoveEmptyColumn = useCallback(\n (columnValue: string) => {\n model?.removeColumnFromArrangement(columnValue);\n },\n [model],\n );\n\n return (\n <StackItem.Content toolbar={false}>\n {model ? (\n <Kanban\n model={model}\n onAddCard={handleAddCard}\n onAddColumn={handleAddColumn}\n onRemoveCard={handleRemoveCard}\n onRemoveEmptyColumn={handleRemoveEmptyColumn}\n />\n ) : (\n <span>Loading</span>\n )}\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Filter, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { ViewEditor, Form } from '@dxos/react-ui-form';\nimport { type KanbanType, KanbanPropsSchema } from '@dxos/react-ui-kanban';\nimport { ViewType } 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\n // TODO(ZaymonFC): The schema registry needs an API where we can query with initial value and\n // endure typename changes. We shouldn't need to manage a subscription at this layer.\n const [schema, setSchema] = useState(\n space && kanban?.cardView?.target?.query?.type\n ? space.db.schemaRegistry.getSchema(kanban.cardView.target.query.type)\n : undefined,\n );\n\n const views = useQuery(space, Filter.schema(ViewType));\n const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.type, [kanban?.cardView?.target?.query?.type]);\n const updateViewTypename = useCallback(\n (newTypename: string) => {\n if (!schema) {\n return;\n }\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 useEffect(() => {\n if (space && kanban?.cardView?.target?.query?.type) {\n const unsubscribe = space.db.schemaRegistry\n .query({ typename: kanban?.cardView?.target?.query?.type })\n .subscribe((query) => {\n const [schema] = query.results;\n if (schema) {\n setSchema(schema);\n }\n });\n\n return unsubscribe;\n }\n }, [space, kanban?.cardView?.target?.query?.type]);\n\n const handleDelete = useCallback(\n (fieldId: string) => dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId })),\n [dispatch, kanban],\n );\n\n if (!space || !schema || !kanban.cardView?.target) {\n return null;\n }\n\n return (\n <>\n <Form\n schema={KanbanPropsSchema}\n values={{ columnField: kanban.columnField }}\n onSave={({ columnField }) => {\n kanban.columnField = columnField;\n kanban.arrangement = undefined;\n }}\n />\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", "Capabilities", "contributes", "createSurface", "React", "useCallback", "useEffect", "useState", "invariant", "useGlobalFilteredObjects", "Filter", "useQuery", "getSpace", "create", "useKanbanModel", "Kanban", "StackItem", "KanbanContainer", "kanban", "cardSchema", "setCardSchema", "space", "cardView", "db", "schemaRegistry", "getSchema", "target", "query", "type", "objects", "schema", "nothing", "filteredObjects", "model", "items", "handleAddColumn", "columnValue", "addEmptyColumn", "handleAddCard", "add", "title", "description", "state", "handleRemoveCard", "card", "remove", "handleRemoveEmptyColumn", "removeColumnFromArrangement", "Content", "toolbar", "onAddCard", "onAddColumn", "onRemoveCard", "onRemoveEmptyColumn", "span", "React", "useCallback", "useEffect", "useMemo", "useState", "createIntent", "useIntentDispatcher", "Filter", "getSpace", "useQuery", "ViewEditor", "Form", "KanbanPropsSchema", "ViewType", "KanbanViewEditor", "kanban", "dispatchPromise", "dispatch", "useIntentDispatcher", "space", "getSpace", "schema", "setSchema", "useState", "cardView", "target", "query", "type", "db", "schemaRegistry", "getSchema", "undefined", "views", "useQuery", "Filter", "ViewType", "currentTypename", "useMemo", "updateViewTypename", "useCallback", "newTypename", "matchingViews", "filter", "view", "updateTypename", "useEffect", "unsubscribe", "typename", "subscribe", "results", "handleDelete", "fieldId", "createIntent", "KanbanAction", "DeleteCardField", "React", "Form", "KanbanPropsSchema", "values", "columnField", "onSave", "arrangement", "ViewEditor", "registry", "onTypenameChanged", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "KANBAN_PLUGIN", "role", "filter", "data", "isKanban", "subject", "component", "React", "KanbanContainer", "kanban", "KanbanViewEditor"]
7
+ }
@@ -3,8 +3,7 @@ import {
3
3
  KanbanAction,
4
4
  createKanban,
5
5
  isKanban
6
- } from "./chunk-L7JM7LGJ.mjs";
7
- import "./chunk-OTZHYV3S.mjs";
6
+ } from "./chunk-PNSRVZBP.mjs";
8
7
  export {
9
8
  KanbanAction,
10
9
  createKanban,
@@ -1,4 +1,2 @@
1
- import { type PluginDefinition } from '@dxos/app-framework';
2
- import { type KanbanPluginProvides } from './types';
3
- export declare const KanbanPlugin: () => PluginDefinition<KanbanPluginProvides>;
1
+ export declare const KanbanPlugin: () => import("@dxos/app-framework").Plugin;
4
2
  //# sourceMappingURL=KanbanPlugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"KanbanPlugin.d.ts","sourceRoot":"","sources":["../../../src/KanbanPlugin.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,gBAAgB,EAA+C,MAAM,qBAAqB,CAAC;AAUzG,OAAO,EAA0B,KAAK,oBAAoB,EAAgB,MAAM,SAAS,CAAC;AAE1F,eAAO,MAAM,YAAY,QAAO,gBAAgB,CAAC,oBAAoB,CAgEpE,CAAC"}
1
+ {"version":3,"file":"KanbanPlugin.d.ts","sourceRoot":"","sources":["../../../src/KanbanPlugin.tsx"],"names":[],"mappings":"AAsBA,eAAO,MAAM,YAAY,4CAoCrB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const IntentResolver: (props?: unknown) => Promise<import("@dxos/app-framework").Capability<import("@dxos/app-framework").Capabilities.IntentResolver>>;
2
+ export declare const ReactSurface: (props?: unknown) => Promise<import("@dxos/app-framework").Capability<import("@dxos/app-framework").Capabilities.ReactSurface>>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc,mIAA0C,CAAC;AACtE,eAAO,MAAM,YAAY,iIAAwC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Capabilities } from '@dxos/app-framework';
2
+ declare const _default: () => import("@dxos/app-framework").Capability<Capabilities.IntentResolver>;
3
+ export default _default;
4
+ //# sourceMappingURL=intent-resolver.d.ts.map
@@ -0,0 +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,wBA0BK"}
@@ -0,0 +1,4 @@
1
+ import { Capabilities } from '@dxos/app-framework';
2
+ declare const _default: () => import("@dxos/app-framework").Capability<Capabilities.ReactSurface>;
3
+ export default _default;
4
+ //# sourceMappingURL=react-surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-surface.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/react-surface.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAA8B,MAAM,qBAAqB,CAAC;;AAO/E,wBAcK"}
@@ -3,6 +3,6 @@ import { type KanbanType } from '@dxos/react-ui-kanban';
3
3
  type KanbanViewEditorProps = {
4
4
  kanban: KanbanType;
5
5
  };
6
- declare const KanbanViewEditor: ({ kanban }: KanbanViewEditorProps) => React.JSX.Element | null;
7
- export default KanbanViewEditor;
6
+ export declare const KanbanViewEditor: ({ kanban }: KanbanViewEditorProps) => React.JSX.Element | null;
7
+ export {};
8
8
  //# sourceMappingURL=KanbanViewEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"KanbanViewEditor.d.ts","sourceRoot":"","sources":["../../../../src/components/KanbanViewEditor.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAKhE,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,uBAAuB,CAAC;AAI3E,KAAK,qBAAqB,GAAG;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAEpD,QAAA,MAAM,gBAAgB,eAAgB,qBAAqB,6BAsD1D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"KanbanViewEditor.d.ts","sourceRoot":"","sources":["../../../../src/components/KanbanViewEditor.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAKzE,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,uBAAuB,CAAC;AAK3E,KAAK,qBAAqB,GAAG;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAEpD,eAAO,MAAM,gBAAgB,eAAgB,qBAAqB,6BAuEjE,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from './KanbanContainer';
2
+ export * from './KanbanViewEditor';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
@@ -1,4 +1,3 @@
1
- import { KanbanPlugin } from './KanbanPlugin';
2
- export default KanbanPlugin;
3
1
  export * from './KanbanPlugin';
2
+ export * from './meta';
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAe,YAAY,CAAC;AAE5B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export declare const KANBAN_PLUGIN = "dxos.org/plugin/kanban";
2
- declare const _default: {
2
+ export declare const meta: {
3
3
  id: string;
4
4
  name: string;
5
5
  description: string;
@@ -7,5 +7,4 @@ declare const _default: {
7
7
  source: string;
8
8
  tags: string[];
9
9
  };
10
- export default _default;
11
10
  //# sourceMappingURL=meta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/meta.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,2BAA2B,CAAC;;;;;;;;;AAEtD,wBAOuB"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/meta.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,2BAA2B,CAAC;AAEtD,eAAO,MAAM,IAAI;;;;;;;CAOK,CAAC"}
@@ -1,6 +1,4 @@
1
- import type { IntentResolverProvides, MetadataRecordsProvides, SurfaceProvides, TranslationsProvides } from '@dxos/app-framework';
2
1
  import { S } from '@dxos/echo-schema';
3
- import { type SchemaProvides } from '@dxos/plugin-space';
4
2
  import { type Space } from '@dxos/react-client/echo';
5
3
  import { KanbanType } from '@dxos/react-ui-kanban';
6
4
  /**
@@ -35,7 +33,16 @@ export declare namespace KanbanAction {
35
33
  field: S.mutable<S.Struct<{
36
34
  id: typeof S.String;
37
35
  path: S.Schema<import("@dxos/echo-schema").JsonPath, import("@dxos/echo-schema").JsonPath, never>;
38
- visible: S.optional<typeof S.Boolean>;
36
+ visible: S.optional<typeof S.
37
+ /**
38
+ * Kanban data model.
39
+ * A Kanban board is a collection of columns, each of which contains a collection of items.
40
+ * The layout of columns and items is controlled by models.
41
+ * The underlying data model may be represented by direct object relationships
42
+ * (e.g., a column object containing an array of ordered items) or projections constructed
43
+ * by the model (e.g., a query of items based on metadata within a column object).
44
+ */
45
+ Boolean>;
39
46
  size: S.optional<typeof S.Number>;
40
47
  referencePath: S.optional<S.Schema<import("@dxos/echo-schema").JsonPath, import("@dxos/echo-schema").JsonPath, never>>;
41
48
  }>>;
@@ -49,7 +56,6 @@ export declare namespace KanbanAction {
49
56
  }
50
57
  export {};
51
58
  }
52
- export type KanbanPluginProvides = SurfaceProvides & IntentResolverProvides & MetadataRecordsProvides & TranslationsProvides & SchemaProvides;
53
59
  export interface KanbanModel {
54
60
  root: KanbanType;
55
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,KAAK,KAAK,EAAe,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAMnD;;;;;;;GAOG;AAEH,yBAAiB,YAAY,CAAC;;;;;;;;;;;;IAG5B,MAAM,OAAO,MAAO,SAAQ,WAQ1B;KAAG;;;;;;;;;+BA5B+B,EAAG,MAAM;0BAC/C,EAAG,MAAM;6BAAyC,EAAG,QAAQ,QAC5D,EAAG,OAAO;0BAAY,EAAI,QAAO,QAAO,EAAG,MAAM;mCAC/B,EAAG,QAAQ,CAAC,EAAE,MAAM;;;;;;;;IA2BrC,MAAM,OAAO,eAAgB,SAAQ,oBAgBnC;KAAG;;CACN;AAED,MAAM,MAAM,oBAAoB,GAAG,eAAe,GAChD,sBAAsB,GACtB,uBAAuB,GACvB,oBAAoB,GACpB,cAAc,CAAC;AAUjB,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,KAAK,wBAG9C,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,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,yBAAiB,YAAY,CAAC;;;;;;;;;;;;IAG5B,MAAM,OAAO,MAAO,SAAQ,WAQ1B;KAAG;;;;;;;;;+BAzBoD,EAAG,MAC5D;0BAAW,EAAG,MAAM;6BAEJ,EAAG,QAAQ,QAAO;oBAEpC;;;;;;;uBAOG;oBAEH,OARC;0BAAY,EAAG,QACd,QAAO,EAAG,MAAM;mCAAqB,EAAG,QAAQ,CAAC,EAAG,MAAK;;;;;;;;IAoBzD,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,KAAK,wBAG9C,CAAC"}
@@ -1 +1 @@
1
- {"version":"5.7.2"}
1
+ {"version":"5.7.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-kanban",
3
- "version": "0.7.5-main.9cb18ac",
3
+ "version": "0.7.5-main.9d2a38b",
4
4
  "description": "Kanban DXOS Surface plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -13,11 +13,6 @@
13
13
  "browser": "./dist/lib/browser/index.mjs",
14
14
  "node": "./dist/lib/node-esm/index.mjs"
15
15
  },
16
- "./meta": {
17
- "types": "./dist/types/src/meta.d.ts",
18
- "browser": "./dist/lib/browser/meta.mjs",
19
- "node": "./dist/lib/node-esm/meta.mjs"
20
- },
21
16
  "./types": {
22
17
  "types": "./dist/types/src/types/index.d.ts",
23
18
  "browser": "./dist/lib/browser/types/index.mjs",
@@ -27,9 +22,6 @@
27
22
  "types": "dist/types/src/index.d.ts",
28
23
  "typesVersions": {
29
24
  "*": {
30
- "meta": [
31
- "dist/types/src/meta.d.ts"
32
- ],
33
25
  "types": [
34
26
  "dist/types/src/types/index.d.ts"
35
27
  ]
@@ -42,21 +34,21 @@
42
34
  "dependencies": {
43
35
  "@effect/schema": "^0.75.5",
44
36
  "@preact/signals-core": "^1.6.0",
45
- "@dxos/app-framework": "0.7.5-main.9cb18ac",
46
- "@dxos/async": "0.7.5-main.9cb18ac",
47
- "@dxos/invariant": "0.7.5-main.9cb18ac",
48
- "@dxos/plugin-client": "0.7.5-main.9cb18ac",
49
- "@dxos/echo-schema": "0.7.5-main.9cb18ac",
50
- "@dxos/plugin-graph": "0.7.5-main.9cb18ac",
51
- "@dxos/plugin-search": "0.7.5-main.9cb18ac",
52
- "@dxos/plugin-space": "0.7.5-main.9cb18ac",
53
- "@dxos/react-client": "0.7.5-main.9cb18ac",
54
- "@dxos/random": "0.7.5-main.9cb18ac",
55
- "@dxos/react-ui-form": "0.7.5-main.9cb18ac",
56
- "@dxos/react-ui-kanban": "0.7.5-main.9cb18ac",
57
- "@dxos/util": "0.7.5-main.9cb18ac",
58
- "@dxos/schema": "0.7.5-main.9cb18ac",
59
- "@dxos/react-ui-stack": "0.7.5-main.9cb18ac"
37
+ "@dxos/app-framework": "0.7.5-main.9d2a38b",
38
+ "@dxos/echo-schema": "0.7.5-main.9d2a38b",
39
+ "@dxos/async": "0.7.5-main.9d2a38b",
40
+ "@dxos/invariant": "0.7.5-main.9d2a38b",
41
+ "@dxos/plugin-client": "0.7.5-main.9d2a38b",
42
+ "@dxos/plugin-search": "0.7.5-main.9d2a38b",
43
+ "@dxos/plugin-graph": "0.7.5-main.9d2a38b",
44
+ "@dxos/plugin-space": "0.7.5-main.9d2a38b",
45
+ "@dxos/random": "0.7.5-main.9d2a38b",
46
+ "@dxos/react-client": "0.7.5-main.9d2a38b",
47
+ "@dxos/react-ui-form": "0.7.5-main.9d2a38b",
48
+ "@dxos/react-ui-kanban": "0.7.5-main.9d2a38b",
49
+ "@dxos/react-ui-stack": "0.7.5-main.9d2a38b",
50
+ "@dxos/schema": "0.7.5-main.9d2a38b",
51
+ "@dxos/util": "0.7.5-main.9d2a38b"
60
52
  },
61
53
  "devDependencies": {
62
54
  "@types/react": "~18.2.0",
@@ -64,15 +56,15 @@
64
56
  "react": "~18.2.0",
65
57
  "react-dom": "~18.2.0",
66
58
  "vite": "5.4.7",
67
- "@dxos/react-ui-theme": "0.7.5-main.9cb18ac",
68
- "@dxos/storybook-utils": "0.7.5-main.9cb18ac",
69
- "@dxos/react-ui": "0.7.5-main.9cb18ac"
59
+ "@dxos/react-ui": "0.7.5-main.9d2a38b",
60
+ "@dxos/storybook-utils": "0.7.5-main.9d2a38b",
61
+ "@dxos/react-ui-theme": "0.7.5-main.9d2a38b"
70
62
  },
71
63
  "peerDependencies": {
72
64
  "react": "~18.2.0",
73
65
  "react-dom": "~18.2.0",
74
- "@dxos/react-ui": "0.7.5-main.9cb18ac",
75
- "@dxos/react-ui-theme": "0.7.5-main.9cb18ac"
66
+ "@dxos/react-ui": "0.7.5-main.9d2a38b",
67
+ "@dxos/react-ui-theme": "0.7.5-main.9d2a38b"
76
68
  },
77
69
  "publishConfig": {
78
70
  "access": "public"
@@ -2,82 +2,58 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import React from 'react';
6
-
7
- import { type PluginDefinition, createSurface, createIntent, createResolver } from '@dxos/app-framework';
8
- import { invariant } from '@dxos/invariant';
9
- import { getSpace, type Space } from '@dxos/react-client/echo';
5
+ import {
6
+ createIntent,
7
+ defineModule,
8
+ contributes,
9
+ Capabilities,
10
+ Events,
11
+ definePlugin,
12
+ oneOf,
13
+ } from '@dxos/app-framework';
14
+ import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
15
+ import { type Space } from '@dxos/react-client/echo';
10
16
  import { KanbanType, translations as kanbanTranslations } from '@dxos/react-ui-kanban';
11
- import { ViewProjection } from '@dxos/schema';
12
17
 
13
- import { KanbanContainer } from './components';
14
- import KanbanViewEditor from './components/KanbanViewEditor';
15
- import meta, { KANBAN_PLUGIN } from './meta';
18
+ import { IntentResolver, ReactSurface } from './capabilities';
19
+ import { KANBAN_PLUGIN, meta } from './meta';
16
20
  import translations from './translations';
17
- import { isKanban, KanbanAction, type KanbanPluginProvides, createKanban } from './types';
21
+ import { KanbanAction } from './types';
18
22
 
19
- export const KanbanPlugin = (): PluginDefinition<KanbanPluginProvides> => {
20
- return {
21
- meta,
22
- provides: {
23
- metadata: {
24
- records: {
25
- [KanbanType.typename]: {
26
- createObject: (props: { name?: string; space: Space }) => createIntent(KanbanAction.Create, props),
23
+ export const KanbanPlugin = () =>
24
+ definePlugin(meta, [
25
+ defineModule({
26
+ id: `${meta.id}/module/translations`,
27
+ activatesOn: Events.SetupTranslations,
28
+ activate: () => contributes(Capabilities.Translations, [...translations, ...kanbanTranslations]),
29
+ }),
30
+ defineModule({
31
+ id: `${meta.id}/module/metadata`,
32
+ activatesOn: oneOf(Events.Startup, Events.SetupAppGraph),
33
+ activate: () =>
34
+ contributes(Capabilities.Metadata, {
35
+ id: KanbanType.typename,
36
+ metadata: {
37
+ createObject: (props: { name?: string }, options: { space: Space }) =>
38
+ createIntent(KanbanAction.Create, { ...props, space: options.space }),
27
39
  placeholder: ['kanban title placeholder', { ns: KANBAN_PLUGIN }],
28
40
  icon: 'ph--kanban--regular',
29
41
  },
30
- },
31
- },
32
- echo: {
33
- schema: [KanbanType],
34
- },
35
- translations: [...translations, ...kanbanTranslations],
36
- surface: {
37
- definitions: () => [
38
- createSurface({
39
- id: `${KANBAN_PLUGIN}/kanban`,
40
- role: ['article', 'section'],
41
- filter: (data): data is { subject: KanbanType } => isKanban(data.subject),
42
- component: ({ data, role }) => <KanbanContainer kanban={data.subject} role={role} />,
43
- }),
44
- createSurface({
45
- id: `${KANBAN_PLUGIN}/settings`,
46
- role: 'complementary--settings',
47
- filter: (data): data is { subject: KanbanType } => isKanban(data.subject),
48
- component: ({ data }) => <KanbanViewEditor kanban={data.subject} />,
49
- }),
50
- ],
51
- },
52
- intent: {
53
- resolvers: () => [
54
- createResolver(KanbanAction.Create, async ({ space }) => ({
55
- data: { object: await createKanban(space) },
56
- })),
57
- createResolver(KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {
58
- invariant(kanban.cardView);
59
-
60
- const schema =
61
- kanban.cardView.target &&
62
- getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);
63
- invariant(schema);
64
- const projection = new ViewProjection(schema, kanban.cardView.target!);
65
-
66
- if (!undo) {
67
- const { deleted, index } = projection.deleteFieldProjection(fieldId);
68
- return {
69
- undoable: {
70
- message: translations[0]['en-US'][KANBAN_PLUGIN]['card field deleted label'],
71
- data: { deletionData: { ...deleted, index } },
72
- },
73
- };
74
- } else if (undo && deletionData) {
75
- const { field, props, index } = deletionData;
76
- projection.setFieldProjection({ field, props }, index);
77
- }
78
- }),
79
- ],
80
- },
81
- },
82
- };
83
- };
42
+ }),
43
+ }),
44
+ defineModule({
45
+ id: `${meta.id}/module/schema`,
46
+ activatesOn: ClientEvents.SetupClient,
47
+ activate: () => contributes(ClientCapabilities.Schema, [KanbanType]),
48
+ }),
49
+ defineModule({
50
+ id: `${meta.id}/module/react-surface`,
51
+ activatesOn: Events.Startup,
52
+ activate: ReactSurface,
53
+ }),
54
+ defineModule({
55
+ id: `${meta.id}/module/intent-resolver`,
56
+ activatesOn: Events.SetupIntents,
57
+ activate: IntentResolver,
58
+ }),
59
+ ]);
@@ -0,0 +1,8 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { lazy } from '@dxos/app-framework';
6
+
7
+ export const IntentResolver = lazy(() => import('./intent-resolver'));
8
+ export const ReactSurface = lazy(() => import('./react-surface'));
@@ -0,0 +1,39 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { contributes, Capabilities, createResolver } from '@dxos/app-framework';
6
+ import { invariant } from '@dxos/invariant';
7
+ import { getSpace } from '@dxos/react-client/echo';
8
+ import { ViewProjection } from '@dxos/schema';
9
+
10
+ import { KANBAN_PLUGIN } from '../meta';
11
+ import { createKanban, KanbanAction } from '../types';
12
+
13
+ export default () =>
14
+ contributes(Capabilities.IntentResolver, [
15
+ createResolver(KanbanAction.Create, async ({ space }) => ({
16
+ data: { object: await createKanban(space) },
17
+ })),
18
+ createResolver(KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {
19
+ invariant(kanban.cardView);
20
+
21
+ const schema =
22
+ kanban.cardView.target && getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);
23
+ invariant(schema);
24
+ const projection = new ViewProjection(schema, kanban.cardView.target!);
25
+
26
+ if (!undo) {
27
+ const { deleted, index } = projection.deleteFieldProjection(fieldId);
28
+ return {
29
+ undoable: {
30
+ message: ['card field deleted label', { ns: KANBAN_PLUGIN }],
31
+ data: { deletionData: { ...deleted, index } },
32
+ },
33
+ };
34
+ } else if (undo && deletionData) {
35
+ const { field, props, index } = deletionData;
36
+ projection.setFieldProjection({ field, props }, index);
37
+ }
38
+ }),
39
+ ]);