@dxos/plugin-kanban 0.8.2-main.36232bc → 0.8.2-main.5ca3450
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{artifact-definition-SVNHDJQT.mjs → artifact-definition-VGRBHXJ6.mjs} +10 -10
- package/dist/lib/browser/artifact-definition-VGRBHXJ6.mjs.map +7 -0
- package/dist/lib/browser/{chunk-K5BYEZ4Z.mjs → chunk-6JAA7YSW.mjs} +23 -35
- package/dist/lib/browser/chunk-6JAA7YSW.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +4 -4
- package/dist/lib/browser/intent-resolver-44SXCRIH.mjs +297 -0
- package/dist/lib/browser/intent-resolver-44SXCRIH.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-R25PYWQV.mjs → react-surface-H5UD7LKX.mjs} +56 -26
- package/dist/lib/browser/react-surface-H5UD7LKX.mjs.map +7 -0
- package/dist/lib/browser/types.mjs +1 -3
- package/dist/lib/node/{artifact-definition-M2XAYUI2.cjs → artifact-definition-KDTULJLX.cjs} +17 -17
- package/dist/lib/node/artifact-definition-KDTULJLX.cjs.map +7 -0
- package/dist/lib/node/{chunk-3EUR6ZR2.cjs → chunk-O4U7ZQ2I.cjs} +25 -38
- package/dist/lib/node/chunk-O4U7ZQ2I.cjs.map +7 -0
- package/dist/lib/node/index.cjs +16 -16
- package/dist/lib/node/intent-resolver-23TVN46D.cjs +308 -0
- package/dist/lib/node/intent-resolver-23TVN46D.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-FVM64YAQ.cjs → react-surface-LKFQ3TZH.cjs} +61 -31
- package/dist/lib/node/react-surface-LKFQ3TZH.cjs.map +7 -0
- package/dist/lib/node/types.cjs +6 -8
- package/dist/lib/node/types.cjs.map +2 -2
- package/dist/lib/node-esm/{artifact-definition-HQ5I2OO5.mjs → artifact-definition-G2R5LF26.mjs} +10 -10
- package/dist/lib/node-esm/artifact-definition-G2R5LF26.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-2N7CO3DI.mjs → chunk-NOC32MF5.mjs} +23 -35
- package/dist/lib/node-esm/chunk-NOC32MF5.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +4 -4
- package/dist/lib/node-esm/intent-resolver-SUADAOIJ.mjs +298 -0
- package/dist/lib/node-esm/intent-resolver-SUADAOIJ.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-LZ7MP3CQ.mjs → react-surface-TUKDSY4T.mjs} +56 -26
- package/dist/lib/node-esm/react-surface-TUKDSY4T.mjs.map +7 -0
- package/dist/lib/node-esm/types.mjs +1 -3
- package/dist/types/src/capabilities/index.d.ts +1 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/KanbanContainer.d.ts.map +1 -1
- package/dist/types/src/components/KanbanContainer.stories.d.ts +10 -0
- package/dist/types/src/components/KanbanContainer.stories.d.ts.map +1 -0
- package/dist/types/src/components/KanbanViewEditor.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +3 -0
- package/dist/types/src/testing/index.d.ts.map +1 -0
- package/dist/types/src/testing/initialize-kanban.d.ts +17 -0
- package/dist/types/src/testing/initialize-kanban.d.ts.map +1 -0
- package/dist/types/src/testing/kanban-manager.d.ts +7 -0
- package/dist/types/src/testing/kanban-manager.d.ts.map +1 -0
- package/dist/types/src/testing/playwright/smoke.spec.d.ts +2 -0
- package/dist/types/src/testing/playwright/smoke.spec.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +2 -28
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +34 -41
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +29 -25
- package/src/capabilities/artifact-definition.ts +8 -8
- package/src/capabilities/intent-resolver.ts +10 -6
- package/src/capabilities/react-surface.tsx +46 -12
- package/src/components/KanbanContainer.stories.tsx +186 -0
- package/src/components/KanbanContainer.tsx +21 -8
- package/src/testing/index.ts +6 -0
- package/src/testing/initialize-kanban.ts +139 -0
- package/src/testing/kanban-manager.ts +13 -0
- package/src/testing/playwright/playwright.config.cts +18 -0
- package/src/testing/playwright/smoke.spec.ts +7 -0
- package/src/types.ts +26 -43
- package/dist/lib/browser/artifact-definition-SVNHDJQT.mjs.map +0 -7
- package/dist/lib/browser/chunk-K5BYEZ4Z.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-XCDQ5N3Q.mjs +0 -132
- package/dist/lib/browser/intent-resolver-XCDQ5N3Q.mjs.map +0 -7
- package/dist/lib/browser/react-surface-R25PYWQV.mjs.map +0 -7
- package/dist/lib/node/artifact-definition-M2XAYUI2.cjs.map +0 -7
- package/dist/lib/node/chunk-3EUR6ZR2.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-P3PSZO7H.cjs +0 -146
- package/dist/lib/node/intent-resolver-P3PSZO7H.cjs.map +0 -7
- package/dist/lib/node/react-surface-FVM64YAQ.cjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-HQ5I2OO5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2N7CO3DI.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-4G47V67J.mjs +0 -133
- package/dist/lib/node-esm/intent-resolver-4G47V67J.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-LZ7MP3CQ.mjs.map +0 -7
|
@@ -16,23 +16,20 @@ 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
|
|
20
|
-
__export(
|
|
19
|
+
var chunk_O4U7ZQ2I_exports = {};
|
|
20
|
+
__export(chunk_O4U7ZQ2I_exports, {
|
|
21
21
|
CreateKanbanSchema: () => CreateKanbanSchema,
|
|
22
22
|
KANBAN_PLUGIN: () => KANBAN_PLUGIN,
|
|
23
23
|
KanbanAction: () => KanbanAction,
|
|
24
24
|
PivotColumnAnnotationId: () => PivotColumnAnnotationId,
|
|
25
25
|
TypenameAnnotationId: () => TypenameAnnotationId,
|
|
26
|
-
createKanban: () => createKanban,
|
|
27
26
|
isKanban: () => isKanban,
|
|
28
27
|
meta: () => meta
|
|
29
28
|
});
|
|
30
|
-
module.exports = __toCommonJS(
|
|
31
|
-
var
|
|
32
|
-
var import_echo_schema = require("@dxos/echo-schema");
|
|
29
|
+
module.exports = __toCommonJS(chunk_O4U7ZQ2I_exports);
|
|
30
|
+
var import_effect = require("effect");
|
|
33
31
|
var import_echo = require("@dxos/react-client/echo");
|
|
34
32
|
var import_react_ui_kanban = require("@dxos/react-ui-kanban");
|
|
35
|
-
var import_testing = require("@dxos/react-ui-kanban/testing");
|
|
36
33
|
var import_schema = require("@dxos/schema");
|
|
37
34
|
var KANBAN_PLUGIN = "dxos.org/plugin/kanban";
|
|
38
35
|
var meta = {
|
|
@@ -50,66 +47,57 @@ var meta = {
|
|
|
50
47
|
};
|
|
51
48
|
var TypenameAnnotationId = Symbol.for("@dxos/plugin-kanban/annotation/Typename");
|
|
52
49
|
var PivotColumnAnnotationId = Symbol.for("@dxos/plugin-kanban/annotation/PivotColumn");
|
|
53
|
-
var CreateKanbanSchema =
|
|
54
|
-
name:
|
|
55
|
-
typename:
|
|
50
|
+
var CreateKanbanSchema = import_effect.Schema.Struct({
|
|
51
|
+
name: import_effect.Schema.optional(import_effect.Schema.String),
|
|
52
|
+
typename: import_effect.Schema.optional(import_effect.Schema.String.annotations({
|
|
56
53
|
[TypenameAnnotationId]: true,
|
|
57
|
-
[
|
|
54
|
+
[import_effect.SchemaAST.TitleAnnotationId]: "Select card schema (leave empty to start fresh)"
|
|
58
55
|
})),
|
|
59
|
-
initialPivotColumn:
|
|
56
|
+
initialPivotColumn: import_effect.Schema.optional(import_effect.Schema.String.annotations({
|
|
60
57
|
[PivotColumnAnnotationId]: true,
|
|
61
|
-
[
|
|
58
|
+
[import_effect.SchemaAST.TitleAnnotationId]: "Pivot column"
|
|
62
59
|
}))
|
|
63
60
|
});
|
|
64
61
|
var KanbanAction;
|
|
65
62
|
(function(KanbanAction2) {
|
|
66
63
|
const KANBAN_ACTION = `${KANBAN_PLUGIN}/action`;
|
|
67
|
-
class Create extends
|
|
68
|
-
input:
|
|
64
|
+
class Create extends import_effect.Schema.TaggedClass()(`${KANBAN_ACTION}/create`, {
|
|
65
|
+
input: import_effect.Schema.extend(import_effect.Schema.Struct({
|
|
69
66
|
space: import_echo.SpaceSchema
|
|
70
67
|
}), CreateKanbanSchema),
|
|
71
|
-
output:
|
|
68
|
+
output: import_effect.Schema.Struct({
|
|
72
69
|
object: import_react_ui_kanban.KanbanType
|
|
73
70
|
})
|
|
74
71
|
}) {
|
|
75
72
|
}
|
|
76
73
|
KanbanAction2.Create = Create;
|
|
77
|
-
class DeleteCardField extends
|
|
78
|
-
input:
|
|
74
|
+
class DeleteCardField extends import_effect.Schema.TaggedClass()(`${KANBAN_ACTION}/delete-card-field`, {
|
|
75
|
+
input: import_effect.Schema.Struct({
|
|
79
76
|
kanban: import_react_ui_kanban.KanbanType,
|
|
80
|
-
fieldId:
|
|
77
|
+
fieldId: import_effect.Schema.String,
|
|
81
78
|
// TODO(wittjosiah): Separate fields for undo data?
|
|
82
|
-
deletionData:
|
|
79
|
+
deletionData: import_effect.Schema.optional(import_effect.Schema.Struct({
|
|
83
80
|
field: import_schema.FieldSchema,
|
|
84
81
|
// TODO(wittjosiah): This creates a type error.
|
|
85
82
|
// props: PropertySchema,
|
|
86
|
-
props:
|
|
87
|
-
index:
|
|
83
|
+
props: import_effect.Schema.Any,
|
|
84
|
+
index: import_effect.Schema.Number
|
|
88
85
|
}))
|
|
89
86
|
}),
|
|
90
|
-
output:
|
|
87
|
+
output: import_effect.Schema.Void
|
|
91
88
|
}) {
|
|
92
89
|
}
|
|
93
90
|
KanbanAction2.DeleteCardField = DeleteCardField;
|
|
94
|
-
class DeleteCard extends
|
|
95
|
-
input:
|
|
96
|
-
card:
|
|
91
|
+
class DeleteCard extends import_effect.Schema.TaggedClass()(`${KANBAN_ACTION}/delete-card`, {
|
|
92
|
+
input: import_effect.Schema.Struct({
|
|
93
|
+
card: import_effect.Schema.Any
|
|
97
94
|
}),
|
|
98
|
-
output:
|
|
95
|
+
output: import_effect.Schema.Void
|
|
99
96
|
}) {
|
|
100
97
|
}
|
|
101
98
|
KanbanAction2.DeleteCard = DeleteCard;
|
|
102
99
|
})(KanbanAction || (KanbanAction = {}));
|
|
103
100
|
var isKanban = (object) => object != null && object instanceof import_react_ui_kanban.KanbanType;
|
|
104
|
-
var createKanban = async ({ space, name, typename, initialPivotColumn }) => {
|
|
105
|
-
const { kanban } = await (0, import_testing.initializeKanban)({
|
|
106
|
-
space,
|
|
107
|
-
name,
|
|
108
|
-
typename,
|
|
109
|
-
initialPivotColumn
|
|
110
|
-
});
|
|
111
|
-
return kanban;
|
|
112
|
-
};
|
|
113
101
|
// Annotate the CommonJS export names for ESM import in node:
|
|
114
102
|
0 && (module.exports = {
|
|
115
103
|
CreateKanbanSchema,
|
|
@@ -117,8 +105,7 @@ var createKanban = async ({ space, name, typename, initialPivotColumn }) => {
|
|
|
117
105
|
KanbanAction,
|
|
118
106
|
PivotColumnAnnotationId,
|
|
119
107
|
TypenameAnnotationId,
|
|
120
|
-
createKanban,
|
|
121
108
|
isKanban,
|
|
122
109
|
meta
|
|
123
110
|
});
|
|
124
|
-
//# sourceMappingURL=chunk-
|
|
111
|
+
//# sourceMappingURL=chunk-O4U7ZQ2I.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types.ts", "../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema, SchemaAST } from 'effect';\n\nimport { SpaceSchema } from '@dxos/react-client/echo';\nimport { KanbanType } from '@dxos/react-ui-kanban';\nimport { FieldSchema } from '@dxos/schema';\n\nimport { KANBAN_PLUGIN } from './meta';\n\n/**\n * Kanban data model.\n * A Kanban board is a collection of columns, each of which contains a collection of items.\n * The layout of columns and items is controlled by models.\n * The underlying data model may be represented by direct object relationships\n * (e.g., a column object containing an array of ordered items) or projections constructed\n * by the model (e.g., a query of items based on metadata within a column object).\n */\n\n// TODO(burdon): Move to FormatEnum or SDK.\nexport const TypenameAnnotationId = Symbol.for('@dxos/plugin-kanban/annotation/Typename');\nexport const PivotColumnAnnotationId = Symbol.for('@dxos/plugin-kanban/annotation/PivotColumn');\n\nexport const CreateKanbanSchema = Schema.Struct({\n name: Schema.optional(Schema.String),\n typename: Schema.optional(\n Schema.String.annotations({\n [TypenameAnnotationId]: true,\n [SchemaAST.TitleAnnotationId]: 'Select card schema (leave empty to start fresh)',\n }),\n ),\n initialPivotColumn: Schema.optional(\n Schema.String.annotations({\n [PivotColumnAnnotationId]: true,\n [SchemaAST.TitleAnnotationId]: 'Pivot column',\n }),\n ),\n});\n\nexport type CreateKanbanType = Schema.Schema.Type<typeof CreateKanbanSchema>;\n\nexport namespace KanbanAction {\n const KANBAN_ACTION = `${KANBAN_PLUGIN}/action`;\n\n export class Create extends Schema.TaggedClass<Create>()(`${KANBAN_ACTION}/create`, {\n input: Schema.extend(Schema.Struct({ space: SpaceSchema }), CreateKanbanSchema),\n output: Schema.Struct({\n object: KanbanType,\n }),\n }) {}\n\n export class DeleteCardField extends Schema.TaggedClass<DeleteCardField>()(`${KANBAN_ACTION}/delete-card-field`, {\n input: Schema.Struct({\n kanban: KanbanType,\n fieldId: Schema.String,\n // TODO(wittjosiah): Separate fields for undo data?\n deletionData: Schema.optional(\n Schema.Struct({\n field: FieldSchema,\n // TODO(wittjosiah): This creates a type error.\n // props: PropertySchema,\n props: Schema.Any,\n index: Schema.Number,\n }),\n ),\n }),\n output: Schema.Void,\n }) {}\n\n export class DeleteCard extends Schema.TaggedClass<DeleteCard>()(`${KANBAN_ACTION}/delete-card`, {\n input: Schema.Struct({\n card: Schema.Any, // The card object to delete\n }),\n output: Schema.Void,\n }) {}\n}\n\n// TODO(burdon): Undo?\n// TODO(burdon): Typescript types (replace proto with annotations?)\n// TODO(burdon): Should pure components depend on ECHO? Relationship between ECHO object/array and Observable.\n// TODO(burdon): Can the plugin configure the object based on the data? E.g., how are the models constructed?\n// TODO(burdon): Create models. Simple first based on actual data.\n// Model is always a projection since the dragging state is tentative.\n\n// TODO(burdon): Extend model for moving items (in and across columns).\nexport interface KanbanModel {\n root: KanbanType;\n}\n\nexport type Location = {\n idx?: number;\n};\n\nexport const isKanban = (object: unknown): object is KanbanType => object != null && object instanceof KanbanType;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const KANBAN_PLUGIN = 'dxos.org/plugin/kanban';\n\nexport const meta: PluginMeta = {\n id: KANBAN_PLUGIN,\n name: 'Kanban',\n description:\n 'Kanban allows you to explore Table data in sorted columns defined by your custom schema. You can use Kanbans to track progress or trigger custom automations when cards are moved from one state to another.',\n icon: 'ph--kanban--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-kanban',\n tags: ['experimental'],\n screenshots: ['https://dxos.network/plugin-details-kanban-dark.png'],\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,oBAAkC;AAElC,kBAA4B;AAC5B,6BAA2B;AAC3B,oBAA4B;ACFrB,IAAMA,gBAAgB;AAEtB,IAAMC,OAAmB;EAC9BC,IAAIF;EACJG,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;ADKO,IAAMC,uBAAuBC,OAAOC,IAAI,yCAAA;AACxC,IAAMC,0BAA0BF,OAAOC,IAAI,4CAAA;AAE3C,IAAME,qBAAqBC,qBAAOC,OAAO;EAC9CZ,MAAMW,qBAAOE,SAASF,qBAAOG,MAAM;EACnCC,UAAUJ,qBAAOE,SACfF,qBAAOG,OAAOE,YAAY;IACxB,CAACV,oBAAAA,GAAuB;IACxB,CAACW,wBAAUC,iBAAiB,GAAG;EACjC,CAAA,CAAA;EAEFC,oBAAoBR,qBAAOE,SACzBF,qBAAOG,OAAOE,YAAY;IACxB,CAACP,uBAAAA,GAA0B;IAC3B,CAACQ,wBAAUC,iBAAiB,GAAG;EACjC,CAAA,CAAA;AAEJ,CAAA;;UAIiBE,eAAAA;AACf,QAAMC,gBAAgB,GAAGxB,aAAAA;EAElB,MAAMyB,eAAeX,qBAAOY,YAAW,EAAW,GAAGF,aAAAA,WAAwB;IAClFG,OAAOb,qBAAOc,OAAOd,qBAAOC,OAAO;MAAEc,OAAOC;IAAY,CAAA,GAAIjB,kBAAAA;IAC5DkB,QAAQjB,qBAAOC,OAAO;MACpBiB,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBALSR,SAAAA;EAON,MAAMS,wBAAwBpB,qBAAOY,YAAW,EAAoB,GAAGF,aAAAA,sBAAmC;IAC/GG,OAAOb,qBAAOC,OAAO;MACnBoB,QAAQF;MACRG,SAAStB,qBAAOG;;MAEhBoB,cAAcvB,qBAAOE,SACnBF,qBAAOC,OAAO;QACZuB,OAAOC;;;QAGPC,OAAO1B,qBAAO2B;QACdC,OAAO5B,qBAAO6B;MAChB,CAAA,CAAA;IAEJ,CAAA;IACAZ,QAAQjB,qBAAO8B;EACjB,CAAA,EAAA;EAAI;gBAhBSV,kBAAAA;EAkBN,MAAMW,mBAAmB/B,qBAAOY,YAAW,EAAe,GAAGF,aAAAA,gBAA6B;IAC/FG,OAAOb,qBAAOC,OAAO;MACnB+B,MAAMhC,qBAAO2B;IACf,CAAA;IACAV,QAAQjB,qBAAO8B;EACjB,CAAA,EAAA;EAAI;gBALSC,aAAAA;AAMf,GAlCiBtB,iBAAAA,eAAAA,CAAAA,EAAAA;AAoDV,IAAMwB,WAAW,CAACf,WAA0CA,UAAU,QAAQA,kBAAkBC;",
|
|
6
|
+
"names": ["KANBAN_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags", "screenshots", "TypenameAnnotationId", "Symbol", "for", "PivotColumnAnnotationId", "CreateKanbanSchema", "Schema", "Struct", "optional", "String", "typename", "annotations", "SchemaAST", "TitleAnnotationId", "initialPivotColumn", "KanbanAction", "KANBAN_ACTION", "Create", "TaggedClass", "input", "extend", "space", "SpaceSchema", "output", "object", "KanbanType", "DeleteCardField", "kanban", "fieldId", "deletionData", "field", "FieldSchema", "props", "Any", "index", "Number", "Void", "DeleteCard", "card", "isKanban"]
|
|
7
|
+
}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -28,12 +28,12 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
var node_exports = {};
|
|
30
30
|
__export(node_exports, {
|
|
31
|
-
KANBAN_PLUGIN: () =>
|
|
31
|
+
KANBAN_PLUGIN: () => import_chunk_O4U7ZQ2I.KANBAN_PLUGIN,
|
|
32
32
|
KanbanPlugin: () => KanbanPlugin,
|
|
33
|
-
meta: () =>
|
|
33
|
+
meta: () => import_chunk_O4U7ZQ2I.meta
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(node_exports);
|
|
36
|
-
var
|
|
36
|
+
var import_chunk_O4U7ZQ2I = require("./chunk-O4U7ZQ2I.cjs");
|
|
37
37
|
var import_app_framework = require("@dxos/app-framework");
|
|
38
38
|
var import_plugin_client = require("@dxos/plugin-client");
|
|
39
39
|
var import_plugin_space = require("@dxos/plugin-space");
|
|
@@ -41,9 +41,9 @@ var import_types = require("@dxos/plugin-space/types");
|
|
|
41
41
|
var import_react_ui_kanban = require("@dxos/react-ui-kanban");
|
|
42
42
|
var import_app_framework2 = require("@dxos/app-framework");
|
|
43
43
|
var import_react_ui_kanban2 = require("@dxos/react-ui-kanban");
|
|
44
|
-
var ArtifactDefinition = (0, import_app_framework2.lazy)(() => import("./artifact-definition-
|
|
45
|
-
var IntentResolver = (0, import_app_framework2.lazy)(() => import("./intent-resolver-
|
|
46
|
-
var ReactSurface = (0, import_app_framework2.lazy)(() => import("./react-surface-
|
|
44
|
+
var ArtifactDefinition = (0, import_app_framework2.lazy)(() => import("./artifact-definition-KDTULJLX.cjs"));
|
|
45
|
+
var IntentResolver = (0, import_app_framework2.lazy)(() => import("./intent-resolver-23TVN46D.cjs"));
|
|
46
|
+
var ReactSurface = (0, import_app_framework2.lazy)(() => import("./react-surface-LKFQ3TZH.cjs"));
|
|
47
47
|
var translations_default = [
|
|
48
48
|
{
|
|
49
49
|
"en-US": {
|
|
@@ -51,7 +51,7 @@ var translations_default = [
|
|
|
51
51
|
"typename label": "Kanban",
|
|
52
52
|
"object name placeholder": "New kanban"
|
|
53
53
|
},
|
|
54
|
-
[
|
|
54
|
+
[import_chunk_O4U7ZQ2I.KANBAN_PLUGIN]: {
|
|
55
55
|
"plugin name": "Kanban",
|
|
56
56
|
"kanban title label": "Title",
|
|
57
57
|
"column title label": "Column title",
|
|
@@ -68,9 +68,9 @@ var translations_default = [
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
];
|
|
71
|
-
var KanbanPlugin = () => (0, import_app_framework.definePlugin)(
|
|
71
|
+
var KanbanPlugin = () => (0, import_app_framework.definePlugin)(import_chunk_O4U7ZQ2I.meta, [
|
|
72
72
|
(0, import_app_framework.defineModule)({
|
|
73
|
-
id: `${
|
|
73
|
+
id: `${import_chunk_O4U7ZQ2I.meta.id}/module/translations`,
|
|
74
74
|
activatesOn: import_app_framework.Events.SetupTranslations,
|
|
75
75
|
activate: () => (0, import_app_framework.contributes)(import_app_framework.Capabilities.Translations, [
|
|
76
76
|
...translations_default,
|
|
@@ -78,7 +78,7 @@ var KanbanPlugin = () => (0, import_app_framework.definePlugin)(import_chunk_3EU
|
|
|
78
78
|
])
|
|
79
79
|
}),
|
|
80
80
|
(0, import_app_framework.defineModule)({
|
|
81
|
-
id: `${
|
|
81
|
+
id: `${import_chunk_O4U7ZQ2I.meta.id}/module/metadata`,
|
|
82
82
|
activatesOn: import_app_framework.Events.SetupMetadata,
|
|
83
83
|
activate: () => (0, import_app_framework.contributes)(import_app_framework.Capabilities.Metadata, {
|
|
84
84
|
id: import_react_ui_kanban.KanbanType.typename,
|
|
@@ -88,29 +88,29 @@ var KanbanPlugin = () => (0, import_app_framework.definePlugin)(import_chunk_3EU
|
|
|
88
88
|
})
|
|
89
89
|
}),
|
|
90
90
|
(0, import_app_framework.defineModule)({
|
|
91
|
-
id: `${
|
|
91
|
+
id: `${import_chunk_O4U7ZQ2I.meta.id}/module/object-form`,
|
|
92
92
|
activatesOn: import_plugin_client.ClientEvents.SetupSchema,
|
|
93
93
|
activate: () => (0, import_app_framework.contributes)(import_plugin_space.SpaceCapabilities.ObjectForm, (0, import_types.defineObjectForm)({
|
|
94
94
|
objectSchema: import_react_ui_kanban.KanbanType,
|
|
95
|
-
formSchema:
|
|
96
|
-
getIntent: (props, options) => (0, import_app_framework.createIntent)(
|
|
95
|
+
formSchema: import_chunk_O4U7ZQ2I.CreateKanbanSchema,
|
|
96
|
+
getIntent: (props, options) => (0, import_app_framework.createIntent)(import_chunk_O4U7ZQ2I.KanbanAction.Create, {
|
|
97
97
|
...props,
|
|
98
98
|
space: options.space
|
|
99
99
|
})
|
|
100
100
|
}))
|
|
101
101
|
}),
|
|
102
102
|
(0, import_app_framework.defineModule)({
|
|
103
|
-
id: `${
|
|
103
|
+
id: `${import_chunk_O4U7ZQ2I.meta.id}/module/react-surface`,
|
|
104
104
|
activatesOn: import_app_framework.Events.SetupReactSurface,
|
|
105
105
|
activate: ReactSurface
|
|
106
106
|
}),
|
|
107
107
|
(0, import_app_framework.defineModule)({
|
|
108
|
-
id: `${
|
|
108
|
+
id: `${import_chunk_O4U7ZQ2I.meta.id}/module/intent-resolver`,
|
|
109
109
|
activatesOn: import_app_framework.Events.SetupIntentResolver,
|
|
110
110
|
activate: IntentResolver
|
|
111
111
|
}),
|
|
112
112
|
(0, import_app_framework.defineModule)({
|
|
113
|
-
id: `${
|
|
113
|
+
id: `${import_chunk_O4U7ZQ2I.meta.id}/module/artifact-definition`,
|
|
114
114
|
activatesOn: import_app_framework.Events.SetupArtifactDefinition,
|
|
115
115
|
activate: ArtifactDefinition
|
|
116
116
|
})
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var intent_resolver_23TVN46D_exports = {};
|
|
20
|
+
__export(intent_resolver_23TVN46D_exports, {
|
|
21
|
+
default: () => intent_resolver_default
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(intent_resolver_23TVN46D_exports);
|
|
24
|
+
var import_chunk_O4U7ZQ2I = require("./chunk-O4U7ZQ2I.cjs");
|
|
25
|
+
var import_app_framework = require("@dxos/app-framework");
|
|
26
|
+
var import_invariant = require("@dxos/invariant");
|
|
27
|
+
var import_plugin_client = require("@dxos/plugin-client");
|
|
28
|
+
var import_echo = require("@dxos/react-client/echo");
|
|
29
|
+
var import_schema = require("@dxos/schema");
|
|
30
|
+
var import_effect = require("effect");
|
|
31
|
+
var import_echo_schema = require("@dxos/echo-schema");
|
|
32
|
+
var import_invariant2 = require("@dxos/invariant");
|
|
33
|
+
var import_react_client = require("@dxos/react-client");
|
|
34
|
+
var import_echo2 = require("@dxos/react-client/echo");
|
|
35
|
+
var import_react_ui_kanban = require("@dxos/react-ui-kanban");
|
|
36
|
+
var import_schema2 = require("@dxos/schema");
|
|
37
|
+
var import_util = require("@dxos/util");
|
|
38
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-kanban/src/testing/initialize-kanban.ts";
|
|
39
|
+
var createDefaultTaskSchema = () => {
|
|
40
|
+
const stateOptions = [
|
|
41
|
+
{
|
|
42
|
+
id: import_react_client.PublicKey.random().truncate(),
|
|
43
|
+
title: "Draft",
|
|
44
|
+
color: "indigo"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: import_react_client.PublicKey.random().truncate(),
|
|
48
|
+
title: "Active",
|
|
49
|
+
color: "cyan"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: import_react_client.PublicKey.random().truncate(),
|
|
53
|
+
title: "Completed",
|
|
54
|
+
color: "emerald"
|
|
55
|
+
}
|
|
56
|
+
];
|
|
57
|
+
const schema = (0, import_echo_schema.TypedObject)({
|
|
58
|
+
typename: `example.com/type/${import_react_client.PublicKey.random().truncate()}`,
|
|
59
|
+
version: "0.1.0"
|
|
60
|
+
})({
|
|
61
|
+
title: import_effect.Schema.optional(import_effect.Schema.String).annotations({
|
|
62
|
+
[import_effect.SchemaAST.TitleAnnotationId]: "Title"
|
|
63
|
+
}),
|
|
64
|
+
description: import_effect.Schema.optional(import_effect.Schema.String).annotations({
|
|
65
|
+
[import_effect.SchemaAST.TitleAnnotationId]: "Description"
|
|
66
|
+
}),
|
|
67
|
+
state: import_effect.Schema.optional(import_effect.Schema.String)
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
schema,
|
|
71
|
+
stateOptions
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
var initializeKanban = async ({ client, space, name, typename, initialPivotColumn }) => {
|
|
75
|
+
if (typename) {
|
|
76
|
+
const staticSchema = client.graph.schemaRegistry.schemas.find((schema2) => (0, import_echo_schema.getTypenameOrThrow)(schema2) === typename);
|
|
77
|
+
const schema = await space.db.schemaRegistry.query({
|
|
78
|
+
typename
|
|
79
|
+
}).firstOrUndefined();
|
|
80
|
+
const ast = staticSchema?.ast ?? schema?.ast;
|
|
81
|
+
const jsonSchema = staticSchema ? (0, import_echo_schema.toJsonSchema)(staticSchema) : schema?.jsonSchema;
|
|
82
|
+
(0, import_invariant2.invariant)(ast, `Schema not found: ${typename}`, {
|
|
83
|
+
F: __dxlog_file,
|
|
84
|
+
L: 69,
|
|
85
|
+
S: void 0,
|
|
86
|
+
A: [
|
|
87
|
+
"ast",
|
|
88
|
+
"`Schema not found: ${typename}`"
|
|
89
|
+
]
|
|
90
|
+
});
|
|
91
|
+
(0, import_invariant2.invariant)(jsonSchema, `Schema not found: ${typename}`, {
|
|
92
|
+
F: __dxlog_file,
|
|
93
|
+
L: 70,
|
|
94
|
+
S: void 0,
|
|
95
|
+
A: [
|
|
96
|
+
"jsonSchema",
|
|
97
|
+
"`Schema not found: ${typename}`"
|
|
98
|
+
]
|
|
99
|
+
});
|
|
100
|
+
const fields = (0, import_schema2.getSchemaProperties)(ast).filter((prop) => prop.type !== "object" || prop.format === import_echo_schema.FormatEnum.Ref).map((prop) => prop.name);
|
|
101
|
+
const view = (0, import_schema2.createView)({
|
|
102
|
+
name: "Kanban's card view",
|
|
103
|
+
typename,
|
|
104
|
+
jsonSchema,
|
|
105
|
+
fields
|
|
106
|
+
});
|
|
107
|
+
const kanban = (0, import_echo2.live)(import_react_ui_kanban.KanbanType, {
|
|
108
|
+
cardView: (0, import_echo2.makeRef)(view),
|
|
109
|
+
columnFieldId: void 0,
|
|
110
|
+
name
|
|
111
|
+
});
|
|
112
|
+
if (initialPivotColumn) {
|
|
113
|
+
const viewProjection = new import_schema2.ViewProjection(jsonSchema, view);
|
|
114
|
+
const fieldId = viewProjection.getFieldId(initialPivotColumn);
|
|
115
|
+
if (fieldId) {
|
|
116
|
+
kanban.columnFieldId = fieldId;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
kanban,
|
|
121
|
+
schema
|
|
122
|
+
};
|
|
123
|
+
} else {
|
|
124
|
+
const { schema: taskSchema, stateOptions } = createDefaultTaskSchema();
|
|
125
|
+
const [schema] = await space.db.schemaRegistry.register([
|
|
126
|
+
taskSchema
|
|
127
|
+
]);
|
|
128
|
+
const view = (0, import_schema2.createView)({
|
|
129
|
+
name: "Kanban's card view",
|
|
130
|
+
typename: schema.typename,
|
|
131
|
+
jsonSchema: schema.jsonSchema,
|
|
132
|
+
fields: [
|
|
133
|
+
"title",
|
|
134
|
+
"description"
|
|
135
|
+
]
|
|
136
|
+
});
|
|
137
|
+
const viewProjection = new import_schema2.ViewProjection(schema.jsonSchema, view);
|
|
138
|
+
const descriptionFieldId = viewProjection.getFieldId("description");
|
|
139
|
+
if (descriptionFieldId) {
|
|
140
|
+
const fieldProjection = viewProjection.getFieldProjection(descriptionFieldId);
|
|
141
|
+
if (fieldProjection) {
|
|
142
|
+
viewProjection.setFieldProjection({
|
|
143
|
+
...fieldProjection,
|
|
144
|
+
props: {
|
|
145
|
+
...fieldProjection.props,
|
|
146
|
+
format: import_echo_schema.FormatEnum.Markdown
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const initialPivotField = "state";
|
|
152
|
+
viewProjection.setFieldProjection({
|
|
153
|
+
field: {
|
|
154
|
+
id: (0, import_schema2.createFieldId)(),
|
|
155
|
+
path: initialPivotField,
|
|
156
|
+
size: 150
|
|
157
|
+
},
|
|
158
|
+
props: {
|
|
159
|
+
property: initialPivotField,
|
|
160
|
+
type: import_echo_schema.TypeEnum.String,
|
|
161
|
+
format: import_echo_schema.FormatEnum.SingleSelect,
|
|
162
|
+
title: (0, import_util.capitalize)(initialPivotField),
|
|
163
|
+
options: stateOptions
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
const fieldId = viewProjection.getFieldId(initialPivotField);
|
|
167
|
+
(0, import_invariant2.invariant)(fieldId, void 0, {
|
|
168
|
+
F: __dxlog_file,
|
|
169
|
+
L: 134,
|
|
170
|
+
S: void 0,
|
|
171
|
+
A: [
|
|
172
|
+
"fieldId",
|
|
173
|
+
""
|
|
174
|
+
]
|
|
175
|
+
});
|
|
176
|
+
const kanban = (0, import_echo2.live)(import_react_ui_kanban.KanbanType, {
|
|
177
|
+
cardView: (0, import_echo2.makeRef)(view),
|
|
178
|
+
columnFieldId: fieldId
|
|
179
|
+
});
|
|
180
|
+
return {
|
|
181
|
+
kanban,
|
|
182
|
+
schema
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-kanban/src/capabilities/intent-resolver.ts";
|
|
187
|
+
var intent_resolver_default = (context) => (0, import_app_framework.contributes)(import_app_framework.Capabilities.IntentResolver, [
|
|
188
|
+
(0, import_app_framework.createResolver)({
|
|
189
|
+
intent: import_chunk_O4U7ZQ2I.KanbanAction.Create,
|
|
190
|
+
resolve: async ({ space, name, typename, initialPivotColumn }) => {
|
|
191
|
+
const client = context.requestCapability(import_plugin_client.ClientCapabilities.Client);
|
|
192
|
+
const { kanban } = await initializeKanban({
|
|
193
|
+
client,
|
|
194
|
+
space,
|
|
195
|
+
name,
|
|
196
|
+
typename,
|
|
197
|
+
initialPivotColumn
|
|
198
|
+
});
|
|
199
|
+
return {
|
|
200
|
+
data: {
|
|
201
|
+
object: kanban
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}),
|
|
206
|
+
(0, import_app_framework.createResolver)({
|
|
207
|
+
intent: import_chunk_O4U7ZQ2I.KanbanAction.DeleteCardField,
|
|
208
|
+
resolve: ({ kanban, fieldId, deletionData }, undo) => {
|
|
209
|
+
(0, import_invariant.invariant)(kanban.cardView, void 0, {
|
|
210
|
+
F: __dxlog_file2,
|
|
211
|
+
L: 28,
|
|
212
|
+
S: void 0,
|
|
213
|
+
A: [
|
|
214
|
+
"kanban.cardView",
|
|
215
|
+
""
|
|
216
|
+
]
|
|
217
|
+
});
|
|
218
|
+
(0, import_invariant.invariant)(kanban.cardView.target?.query.typename, void 0, {
|
|
219
|
+
F: __dxlog_file2,
|
|
220
|
+
L: 29,
|
|
221
|
+
S: void 0,
|
|
222
|
+
A: [
|
|
223
|
+
"kanban.cardView.target?.query.typename",
|
|
224
|
+
""
|
|
225
|
+
]
|
|
226
|
+
});
|
|
227
|
+
const schema = kanban.cardView.target && (0, import_echo.getSpace)(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.typename);
|
|
228
|
+
(0, import_invariant.invariant)(schema, void 0, {
|
|
229
|
+
F: __dxlog_file2,
|
|
230
|
+
L: 34,
|
|
231
|
+
S: void 0,
|
|
232
|
+
A: [
|
|
233
|
+
"schema",
|
|
234
|
+
""
|
|
235
|
+
]
|
|
236
|
+
});
|
|
237
|
+
(0, import_invariant.invariant)(kanban.cardView.target, void 0, {
|
|
238
|
+
F: __dxlog_file2,
|
|
239
|
+
L: 35,
|
|
240
|
+
S: void 0,
|
|
241
|
+
A: [
|
|
242
|
+
"kanban.cardView.target",
|
|
243
|
+
""
|
|
244
|
+
]
|
|
245
|
+
});
|
|
246
|
+
const projection = new import_schema.ViewProjection(schema.jsonSchema, kanban.cardView.target);
|
|
247
|
+
if (!undo) {
|
|
248
|
+
const { deleted, index } = projection.deleteFieldProjection(fieldId);
|
|
249
|
+
return {
|
|
250
|
+
undoable: {
|
|
251
|
+
message: [
|
|
252
|
+
"card field deleted label",
|
|
253
|
+
{
|
|
254
|
+
ns: import_chunk_O4U7ZQ2I.KANBAN_PLUGIN
|
|
255
|
+
}
|
|
256
|
+
],
|
|
257
|
+
data: {
|
|
258
|
+
deletionData: {
|
|
259
|
+
...deleted,
|
|
260
|
+
index
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
} else if (undo && deletionData) {
|
|
266
|
+
const { field, props, index } = deletionData;
|
|
267
|
+
projection.setFieldProjection({
|
|
268
|
+
field,
|
|
269
|
+
props
|
|
270
|
+
}, index);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}),
|
|
274
|
+
(0, import_app_framework.createResolver)({
|
|
275
|
+
intent: import_chunk_O4U7ZQ2I.KanbanAction.DeleteCard,
|
|
276
|
+
resolve: ({ card }, undo) => {
|
|
277
|
+
const space = (0, import_echo.getSpace)(card);
|
|
278
|
+
(0, import_invariant.invariant)(space, void 0, {
|
|
279
|
+
F: __dxlog_file2,
|
|
280
|
+
L: 56,
|
|
281
|
+
S: void 0,
|
|
282
|
+
A: [
|
|
283
|
+
"space",
|
|
284
|
+
""
|
|
285
|
+
]
|
|
286
|
+
});
|
|
287
|
+
if (!undo) {
|
|
288
|
+
space.db.remove(card);
|
|
289
|
+
return {
|
|
290
|
+
undoable: {
|
|
291
|
+
message: [
|
|
292
|
+
"card deleted label",
|
|
293
|
+
{
|
|
294
|
+
ns: import_chunk_O4U7ZQ2I.KANBAN_PLUGIN
|
|
295
|
+
}
|
|
296
|
+
],
|
|
297
|
+
data: {
|
|
298
|
+
card
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
} else {
|
|
303
|
+
space.db.add(card);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
})
|
|
307
|
+
]);
|
|
308
|
+
//# sourceMappingURL=intent-resolver-23TVN46D.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/intent-resolver.ts", "../../../src/testing/initialize-kanban.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, Capabilities, createResolver, type PluginsContext } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { ViewProjection } from '@dxos/schema';\n\nimport { KANBAN_PLUGIN } from '../meta';\nimport { initializeKanban } from '../testing';\nimport { KanbanAction } from '../types';\n\nexport default (context: PluginsContext) =>\n contributes(Capabilities.IntentResolver, [\n createResolver({\n intent: KanbanAction.Create,\n resolve: async ({ space, name, typename, initialPivotColumn }) => {\n const client = context.requestCapability(ClientCapabilities.Client);\n const { kanban } = await initializeKanban({ client, space, name, typename, initialPivotColumn });\n return { data: { object: kanban } };\n },\n }),\n createResolver({\n intent: KanbanAction.DeleteCardField,\n resolve: ({ kanban, fieldId, deletionData }, undo) => {\n invariant(kanban.cardView);\n invariant(kanban.cardView.target?.query.typename);\n\n const schema =\n kanban.cardView.target &&\n getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.typename);\n invariant(schema);\n invariant(kanban.cardView.target);\n const projection = new ViewProjection(schema.jsonSchema, kanban.cardView.target);\n\n if (!undo) {\n const { deleted, index } = projection.deleteFieldProjection(fieldId);\n return {\n undoable: {\n message: ['card field deleted label', { ns: KANBAN_PLUGIN }],\n data: { deletionData: { ...deleted, index } },\n },\n };\n } else if (undo && deletionData) {\n const { field, props, index } = deletionData;\n projection.setFieldProjection({ field, props }, index);\n }\n },\n }),\n createResolver({\n intent: KanbanAction.DeleteCard,\n resolve: ({ card }, undo) => {\n const space = getSpace(card);\n invariant(space);\n\n if (!undo) {\n space.db.remove(card);\n return {\n undoable: {\n message: ['card deleted label', { ns: KANBAN_PLUGIN }],\n data: { card },\n },\n };\n } else {\n space.db.add(card);\n }\n },\n }),\n ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema, SchemaAST } from 'effect';\n\nimport {\n TypedObject,\n FormatEnum,\n TypeEnum,\n type JsonProp,\n type EchoSchema,\n getTypenameOrThrow,\n toJsonSchema,\n} from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { type Client, PublicKey } from '@dxos/react-client';\nimport { type Space, live, makeRef } from '@dxos/react-client/echo';\nimport { KanbanType } from '@dxos/react-ui-kanban';\nimport { createView, ViewProjection, createFieldId, getSchemaProperties } from '@dxos/schema';\nimport { capitalize } from '@dxos/util';\n\n// TODO(wittjosiah): UI package shouldn't depend on client.\n\ntype InitializeKanbanProps = {\n client: Client;\n space: Space;\n name?: string;\n typename?: string;\n initialPivotColumn?: string;\n};\n\nconst createDefaultTaskSchema = () => {\n const stateOptions = [\n { id: PublicKey.random().truncate(), title: 'Draft', color: 'indigo' },\n { id: PublicKey.random().truncate(), title: 'Active', color: 'cyan' },\n { id: PublicKey.random().truncate(), title: 'Completed', color: 'emerald' },\n ];\n\n const schema = TypedObject({\n typename: `example.com/type/${PublicKey.random().truncate()}`,\n version: '0.1.0',\n })({\n title: Schema.optional(Schema.String).annotations({\n [SchemaAST.TitleAnnotationId]: 'Title',\n }),\n description: Schema.optional(Schema.String).annotations({\n [SchemaAST.TitleAnnotationId]: 'Description',\n }),\n state: Schema.optional(Schema.String),\n });\n\n return { schema, stateOptions };\n};\n\nexport const initializeKanban = async ({\n client,\n space,\n name,\n typename,\n initialPivotColumn,\n}: InitializeKanbanProps): Promise<{ kanban: KanbanType; schema?: EchoSchema }> => {\n if (typename) {\n const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => getTypenameOrThrow(schema) === typename);\n const schema = await space.db.schemaRegistry.query({ typename }).firstOrUndefined();\n\n const ast = staticSchema?.ast ?? schema?.ast;\n const jsonSchema = staticSchema ? toJsonSchema(staticSchema) : schema?.jsonSchema;\n invariant(ast, `Schema not found: ${typename}`);\n invariant(jsonSchema, `Schema not found: ${typename}`);\n\n const fields = getSchemaProperties(ast)\n .filter((prop) => prop.type !== 'object' || prop.format === FormatEnum.Ref)\n .map((prop) => prop.name);\n\n const view = createView({\n name: \"Kanban's card view\",\n typename,\n jsonSchema,\n fields,\n });\n\n const kanban = live(KanbanType, { cardView: makeRef(view), columnFieldId: undefined, name });\n if (initialPivotColumn) {\n const viewProjection = new ViewProjection(jsonSchema, view);\n const fieldId = viewProjection.getFieldId(initialPivotColumn);\n if (fieldId) {\n kanban.columnFieldId = fieldId;\n }\n }\n return { kanban, schema };\n } else {\n const { schema: taskSchema, stateOptions } = createDefaultTaskSchema();\n const [schema] = await space.db.schemaRegistry.register([taskSchema]);\n\n const view = createView({\n name: \"Kanban's card view\",\n typename: schema.typename,\n jsonSchema: schema.jsonSchema,\n fields: ['title', 'description'],\n });\n\n const viewProjection = new ViewProjection(schema.jsonSchema, view);\n\n // Set description field to Markdown format.\n const descriptionFieldId = viewProjection.getFieldId('description');\n if (descriptionFieldId) {\n const fieldProjection = viewProjection.getFieldProjection(descriptionFieldId);\n if (fieldProjection) {\n viewProjection.setFieldProjection({\n ...fieldProjection,\n props: { ...fieldProjection.props, format: FormatEnum.Markdown },\n });\n }\n }\n\n const initialPivotField = 'state';\n viewProjection.setFieldProjection({\n field: {\n id: createFieldId(),\n path: initialPivotField as JsonProp,\n size: 150,\n },\n props: {\n property: initialPivotField as JsonProp,\n type: TypeEnum.String,\n format: FormatEnum.SingleSelect,\n title: capitalize(initialPivotField),\n options: stateOptions,\n },\n });\n\n const fieldId = viewProjection.getFieldId(initialPivotField);\n invariant(fieldId);\n\n const kanban = live(KanbanType, { cardView: makeRef(view), columnFieldId: fieldId });\n return { kanban, schema };\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_invariant", "import_echo", "import_schema", "createDefaultTaskSchema", "stateOptions", "id", "PublicKey", "random", "truncate", "title", "color", "schema", "TypedObject", "typename", "version", "Schema", "optional", "String", "annotations", "SchemaAST", "TitleAnnotationId", "description", "state", "initializeKanban", "client", "space", "name", "initialPivotColumn", "staticSchema", "graph", "schemaRegistry", "schemas", "find", "getTypenameOrThrow", "db", "query", "firstOrUndefined", "ast", "jsonSchema", "toJsonSchema", "invariant", "fields", "getSchemaProperties", "filter", "prop", "type", "format", "FormatEnum", "Ref", "map", "view", "createView", "kanban", "live", "KanbanType", "cardView", "makeRef", "columnFieldId", "undefined", "viewProjection", "ViewProjection", "fieldId", "getFieldId", "taskSchema", "register", "descriptionFieldId", "fieldProjection", "getFieldProjection", "setFieldProjection", "props", "Markdown", "initialPivotField", "field", "createFieldId", "path", "size", "property", "TypeEnum", "SingleSelect", "capitalize", "options", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "KanbanAction", "Create", "resolve", "requestCapability", "ClientCapabilities", "Client", "data", "object", "DeleteCardField", "deletionData", "undo", "target", "getSpace", "getSchema", "projection", "deleted", "index", "deleteFieldProjection", "undoable", "message", "ns", "KANBAN_PLUGIN", "DeleteCard", "card", "remove", "add"]
|
|
7
|
+
}
|