@dxos/plugin-kanban 0.9.1-staging.ee54ba693a → 0.11.0
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/KanbanPlugin.mjs +18 -0
- package/dist/lib/KanbanPlugin.mjs.map +1 -0
- package/dist/lib/KanbanPlugin.node.mjs +11 -0
- package/dist/lib/KanbanPlugin.node.mjs.map +1 -0
- package/dist/lib/KanbanPlugin.workerd.mjs +11 -0
- package/dist/lib/KanbanPlugin.workerd.mjs.map +1 -0
- package/dist/lib/capabilities/node.mjs +10 -0
- package/dist/lib/capabilities/node.mjs.map +1 -0
- package/dist/lib/capabilities.mjs +11 -0
- package/dist/lib/capabilities.mjs.map +1 -0
- package/dist/lib/chunk-KanbanArticle.mjs +121 -0
- package/dist/lib/chunk-KanbanArticle.mjs.map +1 -0
- package/dist/lib/chunk-KanbanProperties.mjs +73 -0
- package/dist/lib/chunk-KanbanProperties.mjs.map +1 -0
- package/dist/lib/chunk-create-object.mjs +42 -0
- package/dist/lib/chunk-create-object.mjs.map +1 -0
- package/dist/lib/chunk-delete-card-field.mjs +50 -0
- package/dist/lib/chunk-delete-card-field.mjs.map +1 -0
- package/dist/lib/chunk-delete-card.mjs +23 -0
- package/dist/lib/chunk-delete-card.mjs.map +1 -0
- package/dist/lib/{neutral/chunk-V4AVOJVU.mjs → chunk-meta.mjs} +21 -29
- package/dist/lib/chunk-meta.mjs.map +1 -0
- package/dist/lib/chunk-operation-handler.mjs +11 -0
- package/dist/lib/chunk-operation-handler.mjs.map +1 -0
- package/dist/lib/chunk-react-surface.mjs +67 -0
- package/dist/lib/chunk-react-surface.mjs.map +1 -0
- package/dist/lib/chunk-restore-card-field.mjs +48 -0
- package/dist/lib/chunk-restore-card-field.mjs.map +1 -0
- package/dist/lib/chunk-restore-card.mjs +22 -0
- package/dist/lib/chunk-restore-card.mjs.map +1 -0
- package/dist/lib/chunk-skill-definition.mjs +10 -0
- package/dist/lib/chunk-skill-definition.mjs.map +1 -0
- package/dist/lib/chunk-skills.mjs +20 -0
- package/dist/lib/chunk-skills.mjs.map +1 -0
- package/dist/lib/chunk-types.mjs +231 -0
- package/dist/lib/chunk-types.mjs.map +1 -0
- package/dist/lib/chunk-undo-mappings.mjs +25 -0
- package/dist/lib/chunk-undo-mappings.mjs.map +1 -0
- package/dist/lib/components.mjs +227 -0
- package/dist/lib/components.mjs.map +1 -0
- package/dist/lib/containers.mjs +8 -0
- package/dist/lib/containers.mjs.map +1 -0
- package/dist/lib/hooks.mjs +394 -0
- package/dist/lib/hooks.mjs.map +1 -0
- package/dist/lib/index.mjs +5 -0
- package/dist/lib/meta.mjs +2 -0
- package/dist/lib/operations.mjs +7 -0
- package/dist/lib/operations.mjs.map +1 -0
- package/dist/lib/plugin.mjs +9 -0
- package/dist/lib/plugin.mjs.map +1 -0
- package/dist/lib/skills.mjs +2 -0
- package/dist/lib/testing.mjs +72 -0
- package/dist/lib/testing.mjs.map +1 -0
- package/dist/lib/translations.mjs +38 -0
- package/dist/lib/translations.mjs.map +1 -0
- package/dist/lib/types.mjs +2 -0
- package/dist/types/src/capabilities/PivotColumnField.d.ts +12 -0
- package/dist/types/src/capabilities/PivotColumnField.d.ts.map +1 -0
- package/dist/types/src/capabilities/artifact-definition.d.ts +1 -1
- package/dist/types/src/capabilities/create-object.d.ts +1 -1
- package/dist/types/src/capabilities/node.d.ts +7 -0
- package/dist/types/src/capabilities/node.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/undo-mappings.d.ts +1 -1
- package/dist/types/src/components/KanbanBoard/KanbanBoard.d.ts +3 -4
- package/dist/types/src/components/KanbanBoard/KanbanBoard.d.ts.map +1 -1
- package/dist/types/src/components/KanbanBoard/KanbanBoard.stories.d.ts.map +1 -1
- package/dist/types/src/components/KanbanBoard/KanbanCard.d.ts.map +1 -1
- package/dist/types/src/components/KanbanBoard/index.d.ts +1 -0
- package/dist/types/src/components/KanbanBoard/index.d.ts.map +1 -1
- package/dist/types/src/containers/KanbanArticle/KanbanArticle.d.ts +4 -1
- package/dist/types/src/containers/KanbanArticle/KanbanArticle.d.ts.map +1 -1
- package/dist/types/src/containers/KanbanArticle/KanbanArticle.stories.d.ts.map +1 -1
- package/dist/types/src/containers/KanbanProperties/KanbanProperties.d.ts +4 -8
- package/dist/types/src/containers/KanbanProperties/KanbanProperties.d.ts.map +1 -1
- package/dist/types/src/hooks/useKanbanBoardModel.d.ts +1 -1
- package/dist/types/src/hooks/useKanbanBoardModel.d.ts.map +1 -1
- package/dist/types/src/hooks/useKanbanColumnEventHandler.d.ts +4 -3
- package/dist/types/src/hooks/useKanbanColumnEventHandler.d.ts.map +1 -1
- package/dist/types/src/hooks/useKanbanItemEventHandler.d.ts +4 -3
- package/dist/types/src/hooks/useKanbanItemEventHandler.d.ts.map +1 -1
- package/dist/types/src/hooks/useProjectionModel.d.ts +1 -1
- package/dist/types/src/hooks/useProjectionModel.d.ts.map +1 -1
- package/dist/types/src/testing/KanbanCardTileSimple.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dx.config.ts +1 -0
- package/package.json +58 -51
- package/src/capabilities/PivotColumnField.tsx +56 -0
- package/src/capabilities/node.ts +18 -0
- package/src/capabilities/react-surface.ts +45 -0
- package/src/components/KanbanBoard/KanbanBoard.stories.tsx +15 -4
- package/src/components/KanbanBoard/KanbanBoard.tsx +0 -3
- package/src/components/KanbanBoard/KanbanCard.tsx +5 -3
- package/src/components/KanbanBoard/index.ts +2 -0
- package/src/containers/KanbanArticle/KanbanArticle.stories.tsx +2 -1
- package/src/containers/KanbanArticle/KanbanArticle.tsx +3 -1
- package/src/containers/KanbanProperties/KanbanProperties.tsx +3 -1
- package/src/hooks/useItemsProjection.ts +1 -1
- package/src/hooks/useKanbanBoardModel.browser.test.ts +1 -1
- package/src/hooks/useKanbanBoardModel.ts +1 -1
- package/src/hooks/useKanbanColumnEventHandler.ts +6 -5
- package/src/hooks/useKanbanItemEventHandler.ts +6 -7
- package/src/hooks/useProjectionModel.ts +1 -1
- package/src/testing/KanbanCardTileSimple.tsx +2 -1
- package/dist/lib/neutral/KanbanArticle-JQMQQHRB.mjs +0 -132
- package/dist/lib/neutral/KanbanArticle-JQMQQHRB.mjs.map +0 -7
- package/dist/lib/neutral/KanbanPlugin.mjs +0 -44
- package/dist/lib/neutral/KanbanPlugin.mjs.map +0 -7
- package/dist/lib/neutral/KanbanPlugin.node.mjs +0 -27
- package/dist/lib/neutral/KanbanPlugin.node.mjs.map +0 -7
- package/dist/lib/neutral/KanbanPlugin.workerd.mjs +0 -21
- package/dist/lib/neutral/KanbanPlugin.workerd.mjs.map +0 -7
- package/dist/lib/neutral/KanbanProperties-W7MZNZVJ.mjs +0 -83
- package/dist/lib/neutral/KanbanProperties-W7MZNZVJ.mjs.map +0 -7
- package/dist/lib/neutral/capabilities/index.mjs +0 -17
- package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
- package/dist/lib/neutral/chunk-7TVVF45P.mjs +0 -247
- package/dist/lib/neutral/chunk-7TVVF45P.mjs.map +0 -7
- package/dist/lib/neutral/chunk-7YLGUKDJ.mjs +0 -8
- package/dist/lib/neutral/chunk-7YLGUKDJ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-CFPH5R6P.mjs +0 -26
- package/dist/lib/neutral/chunk-CFPH5R6P.mjs.map +0 -7
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-V4AVOJVU.mjs.map +0 -7
- package/dist/lib/neutral/components/index.mjs +0 -245
- package/dist/lib/neutral/components/index.mjs.map +0 -7
- package/dist/lib/neutral/containers/index.mjs +0 -11
- package/dist/lib/neutral/containers/index.mjs.map +0 -7
- package/dist/lib/neutral/create-object-DIIFRS57.mjs +0 -45
- package/dist/lib/neutral/create-object-DIIFRS57.mjs.map +0 -7
- package/dist/lib/neutral/delete-card-TK2G6YHX.mjs +0 -24
- package/dist/lib/neutral/delete-card-TK2G6YHX.mjs.map +0 -7
- package/dist/lib/neutral/delete-card-field-LGWPBOUW.mjs +0 -39
- package/dist/lib/neutral/delete-card-field-LGWPBOUW.mjs.map +0 -7
- package/dist/lib/neutral/hooks/index.mjs +0 -431
- package/dist/lib/neutral/hooks/index.mjs.map +0 -7
- package/dist/lib/neutral/index.mjs +0 -34
- package/dist/lib/neutral/index.mjs.map +0 -7
- package/dist/lib/neutral/meta.json +0 -1
- package/dist/lib/neutral/meta.mjs +0 -8
- package/dist/lib/neutral/meta.mjs.map +0 -7
- package/dist/lib/neutral/operation-handler-B7IW6MXU.mjs +0 -13
- package/dist/lib/neutral/operation-handler-B7IW6MXU.mjs.map +0 -7
- package/dist/lib/neutral/operations/index.mjs +0 -8
- package/dist/lib/neutral/operations/index.mjs.map +0 -7
- package/dist/lib/neutral/plugin.mjs +0 -16
- package/dist/lib/neutral/plugin.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-FQGXRR3X.mjs +0 -89
- package/dist/lib/neutral/react-surface-FQGXRR3X.mjs.map +0 -7
- package/dist/lib/neutral/restore-card-3O6PVN7J.mjs +0 -21
- package/dist/lib/neutral/restore-card-3O6PVN7J.mjs.map +0 -7
- package/dist/lib/neutral/restore-card-field-5G4DVYYY.mjs +0 -37
- package/dist/lib/neutral/restore-card-field-5G4DVYYY.mjs.map +0 -7
- package/dist/lib/neutral/skill-definition-YGTCKXGP.mjs +0 -15
- package/dist/lib/neutral/skill-definition-YGTCKXGP.mjs.map +0 -7
- package/dist/lib/neutral/skills/index.mjs +0 -8
- package/dist/lib/neutral/skills/index.mjs.map +0 -7
- package/dist/lib/neutral/testing/index.mjs +0 -64
- package/dist/lib/neutral/testing/index.mjs.map +0 -7
- package/dist/lib/neutral/translations.mjs +0 -44
- package/dist/lib/neutral/translations.mjs.map +0 -7
- package/dist/lib/neutral/types/index.mjs +0 -22
- package/dist/lib/neutral/types/index.mjs.map +0 -7
- package/dist/lib/neutral/undo-mappings-EZTHO4UL.mjs +0 -42
- package/dist/lib/neutral/undo-mappings-EZTHO4UL.mjs.map +0 -7
- package/src/capabilities/react-surface.tsx +0 -95
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Position } from "@dxos/util";
|
|
2
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
3
|
+
import { Database, Obj, Type } from "@dxos/echo";
|
|
4
|
+
import { Kanban, PivotColumnAnnotationId } from "#types";
|
|
5
|
+
import { useMemo } from "react";
|
|
6
|
+
import { Surface } from "@dxos/app-framework/ui";
|
|
7
|
+
import { AppSurface } from "@dxos/app-toolkit/ui";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
import * as Effect from "effect/Effect";
|
|
10
|
+
import { SchemaEx } from "@dxos/effect";
|
|
11
|
+
import { KanbanArticle, KanbanProperties } from "#containers";
|
|
12
|
+
import { SelectField, useFormValues } from "@dxos/react-ui-form";
|
|
13
|
+
//#region src/capabilities/PivotColumnField.tsx
|
|
14
|
+
/**
|
|
15
|
+
* Form field offering the single-select properties of the form's currently chosen typename as the
|
|
16
|
+
* kanban's pivot column. It consumes the whole surface envelope, so it takes no `props` mapper.
|
|
17
|
+
*/
|
|
18
|
+
var PivotColumnField = ({ data, ...inputProps }) => {
|
|
19
|
+
const ast = data.fieldPropertyAst;
|
|
20
|
+
const target = data.target;
|
|
21
|
+
const db = Database.isDatabase(target) ? target : Obj.isObject(target) ? Obj.getDatabase(target) : void 0;
|
|
22
|
+
const { typename } = useFormValues("KanbanForm");
|
|
23
|
+
const [selectedSchema] = useMemo(() => db ? db.graph.registry.list().filter(Type.isType).filter((type) => Type.getTypename(type) === typename) : [], [db, typename]);
|
|
24
|
+
const singleSelectColumns = useMemo(() => {
|
|
25
|
+
const properties = selectedSchema?.jsonSchema.properties;
|
|
26
|
+
if (!properties) return [];
|
|
27
|
+
return Object.entries(properties).reduce((acc, [key, value]) => {
|
|
28
|
+
if (typeof value === "object" && value !== null && value.format === "single-select") acc.push(key);
|
|
29
|
+
return acc;
|
|
30
|
+
}, []);
|
|
31
|
+
}, [selectedSchema]);
|
|
32
|
+
if (!ast || !db || !typename) return null;
|
|
33
|
+
return /* @__PURE__ */ jsx(SelectField, {
|
|
34
|
+
...inputProps,
|
|
35
|
+
type: ast,
|
|
36
|
+
options: singleSelectColumns.map((column) => ({ value: column }))
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
//#endregion
|
|
40
|
+
//#region src/capabilities/react-surface.ts
|
|
41
|
+
var react_surface_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Capabilities.ReactSurface, [
|
|
42
|
+
Surface.create({
|
|
43
|
+
id: "root",
|
|
44
|
+
filter: AppSurface.oneOf(AppSurface.object(AppSurface.Article, Kanban.Kanban), AppSurface.object(AppSurface.Section, Kanban.Kanban)),
|
|
45
|
+
component: KanbanArticle,
|
|
46
|
+
props: ({ role, data: { subject } }) => ({
|
|
47
|
+
role,
|
|
48
|
+
subject
|
|
49
|
+
})
|
|
50
|
+
}),
|
|
51
|
+
Surface.create({
|
|
52
|
+
id: "objectProperties",
|
|
53
|
+
position: Position.first,
|
|
54
|
+
filter: AppSurface.object(AppSurface.ObjectProperties, Kanban.Kanban),
|
|
55
|
+
component: KanbanProperties,
|
|
56
|
+
props: ({ data: { subject } }) => ({ subject })
|
|
57
|
+
}),
|
|
58
|
+
Surface.create({
|
|
59
|
+
id: "createInitialSchemaForm",
|
|
60
|
+
filter: AppSurface.formInputBySchema((ast) => !!SchemaEx.findAnnotation(ast, PivotColumnAnnotationId)),
|
|
61
|
+
component: PivotColumnField
|
|
62
|
+
})
|
|
63
|
+
])));
|
|
64
|
+
//#endregion
|
|
65
|
+
export { react_surface_default as default };
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=chunk-react-surface.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-react-surface.mjs","names":[],"sources":["../../src/capabilities/PivotColumnField.tsx","../../src/capabilities/react-surface.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type Surface } from '@dxos/app-framework/ui';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Database, Obj, Type } from '@dxos/echo';\nimport { type FormFieldRendererProps, SelectField, useFormValues } from '@dxos/react-ui-form';\n\n/** The form renderer's own props ride alongside `data` on the surface envelope; `type` comes from the field AST. */\nexport type PivotColumnFieldProps = Surface.ComponentProps<AppSurface.FormInputData> &\n Omit<FormFieldRendererProps, 'type'>;\n\n/**\n * Form field offering the single-select properties of the form's currently chosen typename as the\n * kanban's pivot column. It consumes the whole surface envelope, so it takes no `props` mapper.\n */\nexport const PivotColumnField = ({ data, ...inputProps }: PivotColumnFieldProps) => {\n const ast = data.fieldPropertyAst;\n const target = data.target;\n const db = Database.isDatabase(target) ? target : Obj.isObject(target) ? Obj.getDatabase(target) : undefined;\n const { typename } = useFormValues('KanbanForm');\n const [selectedSchema] = useMemo(\n () =>\n db\n ? db.graph.registry\n .list()\n .filter(Type.isType)\n .filter((type) => Type.getTypename(type) === typename)\n : [],\n [db, typename],\n );\n const singleSelectColumns = useMemo(() => {\n const properties = selectedSchema?.jsonSchema.properties;\n if (!properties) {\n return [];\n }\n\n return Object.entries(properties).reduce<string[]>((acc, [key, value]) => {\n if (typeof value === 'object' && value !== null && (value as { format?: string }).format === 'single-select') {\n acc.push(key);\n }\n return acc;\n }, []);\n }, [selectedSchema]);\n\n if (!ast || !db || !typename) {\n return null;\n }\n\n const props: FormFieldRendererProps = { ...inputProps, type: ast };\n\n return <SelectField {...props} options={singleSelectColumns.map((column) => ({ value: column }))} />;\n};\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { SchemaEx } from '@dxos/effect';\nimport { Position } from '@dxos/util';\n\nimport { KanbanArticle, KanbanProperties } from '#containers';\nimport { Kanban, PivotColumnAnnotationId } from '#types';\n\nimport { PivotColumnField } from './PivotColumnField';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactSurface, [\n Surface.create({\n id: 'root',\n // TODO(wittjosiah): Split into multiple surfaces if this filter proves too strict for non-article roles.\n filter: AppSurface.oneOf(\n AppSurface.object(AppSurface.Article, Kanban.Kanban),\n AppSurface.object(AppSurface.Section, Kanban.Kanban),\n ),\n component: KanbanArticle,\n props: ({ role, data: { subject } }) => ({ role, subject }),\n }),\n Surface.create({\n id: 'objectProperties',\n position: Position.first,\n filter: AppSurface.object(AppSurface.ObjectProperties, Kanban.Kanban),\n component: KanbanProperties,\n props: ({ data: { subject } }) => ({ subject }),\n }),\n Surface.create({\n id: 'createInitialSchemaForm',\n filter: AppSurface.formInputBySchema((ast) => !!SchemaEx.findAnnotation<boolean>(ast, PivotColumnAnnotationId)),\n component: PivotColumnField,\n }),\n ]),\n ),\n);\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,IAAa,oBAAoB,EAAE,MAAM,GAAG,iBAAwC;CAClF,MAAM,MAAM,KAAK;CACjB,MAAM,SAAS,KAAK;CACpB,MAAM,KAAK,SAAS,WAAW,MAAM,IAAI,SAAS,IAAI,SAAS,MAAM,IAAI,IAAI,YAAY,MAAM,IAAI,KAAA;CACnG,MAAM,EAAE,aAAa,cAAc,YAAY;CAC/C,MAAM,CAAC,kBAAkB,cAErB,KACI,GAAG,MAAM,SACN,KAAK,CAAA,CACL,OAAO,KAAK,MAAM,CAAA,CAClB,QAAQ,SAAS,KAAK,YAAY,IAAI,MAAM,QAAQ,IACvD,CAAC,GACP,CAAC,IAAI,QAAQ,CACf;CACA,MAAM,sBAAsB,cAAc;EACxC,MAAM,aAAa,gBAAgB,WAAW;EAC9C,IAAI,CAAC,YACH,OAAO,CAAC;EAGV,OAAO,OAAO,QAAQ,UAAU,CAAC,CAAC,QAAkB,KAAK,CAAC,KAAK,WAAW;GACxE,IAAI,OAAO,UAAU,YAAY,UAAU,QAAS,MAA8B,WAAW,iBAC3F,IAAI,KAAK,GAAG;GAEd,OAAO;EACT,GAAG,CAAC,CAAC;CACP,GAAG,CAAC,cAAc,CAAC;CAEnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAClB,OAAO;CAKT,OAAO,oBAAC,aAAD;EAFiC,GAAG;EAAY,MAAM;EAE9B,SAAS,oBAAoB,KAAK,YAAY,EAAE,OAAO,OAAO,EAAE;CAAI,CAAA;AACrG;;;ACtCA,IAAA,wBAAe,WAAW,iBACxB,OAAO,QACL,WAAW,YAAY,aAAa,cAAc;CAChD,QAAQ,OAAO;EACb,IAAI;EAEJ,QAAQ,WAAW,MACjB,WAAW,OAAO,WAAW,SAAS,OAAO,MAAM,GACnD,WAAW,OAAO,WAAW,SAAS,OAAO,MAAM,CACrD;EACA,WAAW;EACX,QAAQ,EAAE,MAAM,MAAM,EAAE,iBAAiB;GAAE;GAAM;EAAQ;CAC3D,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EACJ,UAAU,SAAS;EACnB,QAAQ,WAAW,OAAO,WAAW,kBAAkB,OAAO,MAAM;EACpE,WAAW;EACX,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ;CAC/C,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,mBAAmB,QAAQ,CAAC,CAAC,SAAS,eAAwB,KAAK,uBAAuB,CAAC;EAC9G,WAAW;CACb,CAAC;AACH,CAAC,CACH,CACF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { a as RestoreCardField } from "./chunk-types.mjs";
|
|
2
|
+
import { Operation } from "@dxos/compute";
|
|
3
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
4
|
+
import { Obj, Type } from "@dxos/echo";
|
|
5
|
+
import { ProjectionModel, createEchoChangeCallback, getTypeURIFromQuery } from "@dxos/schema";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import { invariant } from "@dxos/invariant";
|
|
8
|
+
//#region src/operations/restore-card-field.ts
|
|
9
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-kanban/src/operations/restore-card-field.ts";
|
|
10
|
+
var handler = RestoreCardField.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ view, field, props, index }) {
|
|
11
|
+
const registry = yield* Capability.get(Capabilities.AtomRegistry);
|
|
12
|
+
const db = Obj.getDatabase(view);
|
|
13
|
+
invariant(db, "Database not found", {
|
|
14
|
+
"~LogMeta": "~LogMeta",
|
|
15
|
+
F: __dxlog_file,
|
|
16
|
+
L: 18,
|
|
17
|
+
S: this,
|
|
18
|
+
A: ["db", "'Database not found'"]
|
|
19
|
+
});
|
|
20
|
+
const type = db.graph.registry.list().filter(Type.isType).find((t) => Type.getURI(t) === getTypeURIFromQuery(view.query.ast));
|
|
21
|
+
invariant(type, "Schema not found", {
|
|
22
|
+
"~LogMeta": "~LogMeta",
|
|
23
|
+
F: __dxlog_file,
|
|
24
|
+
L: 21,
|
|
25
|
+
S: this,
|
|
26
|
+
A: ["type", "'Schema not found'"]
|
|
27
|
+
});
|
|
28
|
+
invariant(Type.isType(type), "expected stored Type.Type for card schema", {
|
|
29
|
+
"~LogMeta": "~LogMeta",
|
|
30
|
+
F: __dxlog_file,
|
|
31
|
+
L: 23,
|
|
32
|
+
S: this,
|
|
33
|
+
A: ["Type.isType(type)", "'expected stored Type.Type for card schema'"]
|
|
34
|
+
});
|
|
35
|
+
new ProjectionModel({
|
|
36
|
+
registry,
|
|
37
|
+
view,
|
|
38
|
+
baseSchema: type.jsonSchema,
|
|
39
|
+
change: createEchoChangeCallback(view, type)
|
|
40
|
+
}).setFieldProjection({
|
|
41
|
+
field,
|
|
42
|
+
props
|
|
43
|
+
}, index);
|
|
44
|
+
})));
|
|
45
|
+
//#endregion
|
|
46
|
+
export { handler as default };
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=chunk-restore-card-field.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-restore-card-field.mjs","names":[],"sources":["../../src/operations/restore-card-field.ts"],"sourcesContent":["// Copyright 2025 DXOS.org\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\nimport { Obj, Type } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { ProjectionModel, createEchoChangeCallback, getTypeURIFromQuery } from '@dxos/schema';\n\nimport { KanbanOperation } from '../types';\n\nconst handler: Operation.WithHandler<typeof KanbanOperation.RestoreCardField> = KanbanOperation.RestoreCardField.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ view, field, props, index }) {\n const registry = yield* Capability.get(Capabilities.AtomRegistry);\n const db = Obj.getDatabase(view);\n invariant(db, 'Database not found');\n const types = db.graph.registry.list().filter(Type.isType);\n const type = types.find((t) => Type.getURI(t) === getTypeURIFromQuery(view.query.ast));\n invariant(type, 'Schema not found');\n\n invariant(Type.isType(type), 'expected stored Type.Type for card schema');\n const projection = new ProjectionModel({\n registry,\n view,\n baseSchema: type.jsonSchema,\n change: createEchoChangeCallback(view, type),\n });\n\n projection.setFieldProjection({ field, props }, index);\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;;;;;AAYA,IAAM,UAAA,iBAA2G,KAC/G,UAAU,YACR,OAAO,WAAW,WAAW,EAAE,MAAM,OAAO,OAAO,SAAS;CAC1D,MAAM,WAAW,OAAO,WAAW,IAAI,aAAa,YAAY;CAChE,MAAM,KAAK,IAAI,YAAY,IAAI;CAC/B,UAAU,IAAI,sBAAmB;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA,CAAA,MAAA,sBAAA;CAAA,CAAC;CAElC,MAAM,OADQ,GAAG,MAAM,SAAS,KAAK,CAAC,CAAC,OAAO,KAAK,MACtC,CAAA,CAAM,MAAM,MAAM,KAAK,OAAO,CAAC,MAAM,oBAAoB,KAAK,MAAM,GAAG,CAAC;CACrF,UAAU,MAAM,oBAAiB;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA,CAAA,QAAA,oBAAA;CAAA,CAAC;CAElC,UAAU,KAAK,OAAO,IAAI,GAAG,6CAA0C;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA,CAAA,qBAAA,6CAAA;CAAA,CAAC;CAQxE,IAPuB,gBAAgB;EACrC;EACA;EACA,YAAY,KAAK;EACjB,QAAQ,yBAAyB,MAAM,IAAI;CAC7C,CAEA,CAAA,CAAW,mBAAmB;EAAE;EAAO;CAAM,GAAG,KAAK;AACvD,CAAC,CACH,CACF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { i as RestoreCard } from "./chunk-types.mjs";
|
|
2
|
+
import { Operation } from "@dxos/compute";
|
|
3
|
+
import { Obj } from "@dxos/echo";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import { invariant } from "@dxos/invariant";
|
|
6
|
+
//#region src/operations/restore-card.ts
|
|
7
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-kanban/src/operations/restore-card.ts";
|
|
8
|
+
var handler = RestoreCard.pipe(Operation.withHandler(({ card }) => Effect.sync(() => {
|
|
9
|
+
const db = Obj.getDatabase(card);
|
|
10
|
+
invariant(db, void 0, {
|
|
11
|
+
"~LogMeta": "~LogMeta",
|
|
12
|
+
F: __dxlog_file,
|
|
13
|
+
L: 15,
|
|
14
|
+
S: void 0,
|
|
15
|
+
A: ["db", ""]
|
|
16
|
+
});
|
|
17
|
+
db.add(card);
|
|
18
|
+
})));
|
|
19
|
+
//#endregion
|
|
20
|
+
export { handler as default };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=chunk-restore-card.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-restore-card.mjs","names":[],"sources":["../../src/operations/restore-card.ts"],"sourcesContent":["// Copyright 2025 DXOS.org\n\nimport * as Effect from 'effect/Effect';\n\nimport { Operation } from '@dxos/compute';\nimport { Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\n\nimport { KanbanOperation } from '../types';\n\nconst handler: Operation.WithHandler<typeof KanbanOperation.RestoreCard> = KanbanOperation.RestoreCard.pipe(\n Operation.withHandler(({ card }) =>\n Effect.sync(() => {\n const db = Obj.getDatabase(card);\n invariant(db);\n db.add(card);\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;;;AAUA,IAAM,UAAA,YAAiG,KACrG,UAAU,aAAa,EAAE,WACvB,OAAO,WAAW;CAChB,MAAM,KAAK,IAAI,YAAY,IAAI;CAC/B,UAAU,IAAC,KAAA,GAAA;EAAA,YAAA;EAAA,GAAA;EAAA,GAAA;EAAA,GAAA,KAAA;EAAA,GAAA,CAAA,MAAA,EAAA;CAAA,CAAC;CACZ,GAAG,IAAI,IAAI;AACb,CAAC,CACH,CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Capability } from "@dxos/app-framework";
|
|
2
|
+
import { AppCapabilities } from "@dxos/app-toolkit";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import { KanbanSkill } from "#skills";
|
|
5
|
+
//#region src/capabilities/skill-definition.ts
|
|
6
|
+
var skillDefinition = () => Effect.succeed([Capability.contributes(AppCapabilities.SkillDefinition, KanbanSkill)]);
|
|
7
|
+
//#endregion
|
|
8
|
+
export { skillDefinition as default };
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=chunk-skill-definition.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-skill-definition.mjs","names":[],"sources":["../../src/capabilities/skill-definition.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\n\nimport { KanbanSkill } from '#skills';\n\nconst skillDefinition = () => Effect.succeed([Capability.contributes(AppCapabilities.SkillDefinition, KanbanSkill)]);\n\nexport default skillDefinition;\n"],"mappings":";;;;;AAWA,IAAM,wBAAwB,OAAO,QAAQ,CAAC,WAAW,YAAY,gBAAgB,iBAAiB,WAAW,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Skill, Template } from "@dxos/compute";
|
|
2
|
+
import { trim } from "@dxos/util";
|
|
3
|
+
//#region src/skills/kanban-skill.ts
|
|
4
|
+
var SKILL_KEY = "org.dxos.skill.kanban";
|
|
5
|
+
var make = () => Skill.make({
|
|
6
|
+
key: SKILL_KEY,
|
|
7
|
+
name: "Kanban",
|
|
8
|
+
tools: Skill.toolDefinitions({ tools: [] }),
|
|
9
|
+
instructions: Template.make({ source: trim`
|
|
10
|
+
You can create and update kanban boards to show data in sorted columns defined by schema.
|
|
11
|
+
` })
|
|
12
|
+
});
|
|
13
|
+
var skill = {
|
|
14
|
+
key: SKILL_KEY,
|
|
15
|
+
make
|
|
16
|
+
};
|
|
17
|
+
//#endregion
|
|
18
|
+
export { skill as t };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=chunk-skills.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-skills.mjs","names":[],"sources":["../../src/skills/kanban-skill.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Skill, Template } from '@dxos/compute';\nimport { trim } from '@dxos/util';\n\nconst SKILL_KEY = 'org.dxos.skill.kanban';\n\nconst make = () =>\n Skill.make({\n key: SKILL_KEY,\n name: 'Kanban',\n tools: Skill.toolDefinitions({ tools: [] }),\n instructions: Template.make({\n source: trim`\n You can create and update kanban boards to show data in sorted columns defined by schema.\n `,\n }),\n });\n\nconst skill: Skill.Definition = {\n key: SKILL_KEY,\n make,\n};\n\nexport default skill;\n"],"mappings":";;;AAOA,IAAM,YAAY;AAElB,IAAM,aACJ,MAAM,KAAK;CACT,KAAK;CACL,MAAM;CACN,OAAO,MAAM,gBAAgB,EAAE,OAAO,CAAC,EAAE,CAAC;CAC1C,cAAc,SAAS,KAAK,EAC1B,QAAQ,IAAI;;QAGd,CAAC;AACH,CAAC;AAEH,IAAM,QAA0B;CAC9B,KAAK;CACL;AACF"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { Operation } from "@dxos/compute";
|
|
2
|
+
import { Capability } from "@dxos/app-framework";
|
|
3
|
+
import * as Schema from "effect/Schema";
|
|
4
|
+
import { TypeInputOptionsAnnotation } from "@dxos/plugin-space";
|
|
5
|
+
import { Annotation, DXN, Obj, Ref, Type, View } from "@dxos/echo";
|
|
6
|
+
import { FormInputAnnotation, LabelAnnotation } from "@dxos/echo/Annotation";
|
|
7
|
+
import { ViewAnnotation } from "@dxos/schema";
|
|
8
|
+
import { meta } from "#meta";
|
|
9
|
+
//#region \0rolldown/runtime.js
|
|
10
|
+
var __defProp = Object.defineProperty;
|
|
11
|
+
var __exportAll = (all, no_symbols) => {
|
|
12
|
+
let target = {};
|
|
13
|
+
for (var name in all) __defProp(target, name, {
|
|
14
|
+
get: all[name],
|
|
15
|
+
enumerable: true
|
|
16
|
+
});
|
|
17
|
+
if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
18
|
+
return target;
|
|
19
|
+
};
|
|
20
|
+
//#endregion
|
|
21
|
+
//#region src/types/constants.ts
|
|
22
|
+
var UNCATEGORIZED_VALUE = "__uncategorized__";
|
|
23
|
+
var UNCATEGORIZED_ATTRIBUTES = {
|
|
24
|
+
title: "Uncategorized",
|
|
25
|
+
color: "neutral"
|
|
26
|
+
};
|
|
27
|
+
//#endregion
|
|
28
|
+
//#region src/types/schema.ts
|
|
29
|
+
/**
|
|
30
|
+
* Kanban data model.
|
|
31
|
+
* A Kanban board is a collection of columns, each of which contains a collection of items.
|
|
32
|
+
* The layout of columns and items is controlled by models.
|
|
33
|
+
* The underlying data model may be represented by direct object relationships
|
|
34
|
+
* (e.g., a column object containing an array of ordered items) or projections constructed
|
|
35
|
+
* by the model (e.g., a query of items based on metadata within a column object).
|
|
36
|
+
*/
|
|
37
|
+
var PivotColumnAnnotationId = Symbol.for("@dxos/plugin-kanban/annotation/PivotColumn");
|
|
38
|
+
/**
|
|
39
|
+
* Settings common to every Kanban (view or items). Rendered as form fields
|
|
40
|
+
* by `KanbanProperties`.
|
|
41
|
+
*/
|
|
42
|
+
var KanbanSettingsSchema = Schema.Struct({ hideUncategorized: Schema.Boolean.annotations({
|
|
43
|
+
title: "Hide uncategorized column",
|
|
44
|
+
description: "When enabled, items without a pivot value won’t be shown as a column."
|
|
45
|
+
}).pipe(Schema.optional) });
|
|
46
|
+
/**
|
|
47
|
+
* Settings for view-variant Kanbans only. Spreads {@link KanbanSettingsSchema}'s
|
|
48
|
+
* fields and adds a column-field picker that binds the View’s pivot field.
|
|
49
|
+
* Items-variant kanbans use a hardcoded `spec.pivotField` and don’t expose
|
|
50
|
+
* this control.
|
|
51
|
+
*/
|
|
52
|
+
var KanbanViewSettingsSchema = Schema.Struct({
|
|
53
|
+
columnFieldId: Schema.String.annotations({ title: "Column field" }),
|
|
54
|
+
...KanbanSettingsSchema.fields
|
|
55
|
+
});
|
|
56
|
+
var CreateKanbanSchema = Schema.Struct({
|
|
57
|
+
name: Schema.optional(Schema.String),
|
|
58
|
+
typename: Schema.String.pipe(Schema.annotations({ title: "Select card type" }), TypeInputOptionsAnnotation.set({
|
|
59
|
+
location: ["database", "runtime"],
|
|
60
|
+
kind: ["user"]
|
|
61
|
+
}), Schema.optional),
|
|
62
|
+
initialPivotColumn: Schema.optional(Schema.String.annotations({
|
|
63
|
+
[PivotColumnAnnotationId]: true,
|
|
64
|
+
title: "Pivot column"
|
|
65
|
+
}))
|
|
66
|
+
});
|
|
67
|
+
//#endregion
|
|
68
|
+
//#region src/types/Kanban.ts
|
|
69
|
+
var Kanban_exports = /* @__PURE__ */ __exportAll({
|
|
70
|
+
Arrangement: () => Arrangement,
|
|
71
|
+
Kanban: () => Kanban,
|
|
72
|
+
KanbanItemsSpec: () => KanbanItemsSpec,
|
|
73
|
+
KanbanSpec: () => KanbanSpec,
|
|
74
|
+
KanbanViewSpec: () => KanbanViewSpec,
|
|
75
|
+
isKanbanItems: () => isKanbanItems,
|
|
76
|
+
isKanbanView: () => isKanbanView,
|
|
77
|
+
make: () => make,
|
|
78
|
+
makeItems: () => makeItems
|
|
79
|
+
});
|
|
80
|
+
/**
|
|
81
|
+
* Per-column entry: ordered card ids plus an optional `hidden` flag that
|
|
82
|
+
* removes the column from the rendered board (and from the model's column
|
|
83
|
+
* list). Today only the uncategorized column is exposed in settings, but
|
|
84
|
+
* the data structure supports per-column hiding generally.
|
|
85
|
+
*/
|
|
86
|
+
var ArrangementColumnEntry = Schema.Struct({
|
|
87
|
+
ids: Schema.Array(Obj.ID),
|
|
88
|
+
hidden: Schema.Boolean.pipe(Schema.optional)
|
|
89
|
+
});
|
|
90
|
+
/** Keyed by columnValue. */
|
|
91
|
+
var ArrangementColumns = Schema.Record({
|
|
92
|
+
key: Schema.String,
|
|
93
|
+
value: ArrangementColumnEntry
|
|
94
|
+
}).pipe(FormInputAnnotation.set(false));
|
|
95
|
+
/** Column order and per-column card ids. */
|
|
96
|
+
var Arrangement = Schema.Struct({
|
|
97
|
+
order: Schema.Array(Schema.String).pipe(FormInputAnnotation.set(false)),
|
|
98
|
+
columns: ArrangementColumns
|
|
99
|
+
}).pipe(FormInputAnnotation.set(false));
|
|
100
|
+
/** View-variant: items come from running the View's query (the original behaviour). */
|
|
101
|
+
var KanbanViewSpec = Schema.Struct({
|
|
102
|
+
kind: Schema.Literal("view").pipe(FormInputAnnotation.set(false)),
|
|
103
|
+
view: Ref.Ref(View.View).pipe(FormInputAnnotation.set(false))
|
|
104
|
+
});
|
|
105
|
+
/** Items-variant: kanban owns its items as an explicit ref array (used by externally-synced kanbans). */
|
|
106
|
+
var KanbanItemsSpec = Schema.Struct({
|
|
107
|
+
kind: Schema.Literal("items").pipe(FormInputAnnotation.set(false)),
|
|
108
|
+
/** Property path on each item that drives column membership (e.g. `'listName'`). */
|
|
109
|
+
pivotField: Schema.String,
|
|
110
|
+
/** Items owned directly by the kanban. */
|
|
111
|
+
items: Schema.Array(Ref.Ref(Obj.Unknown)).pipe(FormInputAnnotation.set(false))
|
|
112
|
+
});
|
|
113
|
+
/** Discriminated union of source specs. Distinguished by `kind`. */
|
|
114
|
+
var KanbanSpec = Schema.Union(KanbanViewSpec, KanbanItemsSpec);
|
|
115
|
+
var Kanban = class extends Type.makeObject(DXN.make("org.dxos.type.kanban", "0.2.0"))(Schema.Struct({
|
|
116
|
+
name: Schema.String.pipe(Schema.optional),
|
|
117
|
+
arrangement: Arrangement,
|
|
118
|
+
/** How this kanban sources its items. Discriminated by `spec.kind`. */
|
|
119
|
+
spec: KanbanSpec
|
|
120
|
+
}).pipe(LabelAnnotation.set(["name"]), ViewAnnotation.set(["spec", "view"]), Annotation.IconAnnotation.set({
|
|
121
|
+
icon: "ph--kanban--regular",
|
|
122
|
+
hue: "green"
|
|
123
|
+
}))) {};
|
|
124
|
+
var isKanbanView = (kanban) => kanban.spec.kind === "view";
|
|
125
|
+
var isKanbanItems = (kanban) => kanban.spec.kind === "items";
|
|
126
|
+
/**
|
|
127
|
+
* Make a view-variant kanban (items sourced via the View's query).
|
|
128
|
+
*/
|
|
129
|
+
var make = (props) => {
|
|
130
|
+
const { name, view, arrangement } = props;
|
|
131
|
+
const order = arrangement?.order ?? [];
|
|
132
|
+
const columns = arrangement?.columns ?? {};
|
|
133
|
+
return Obj.make(Kanban, {
|
|
134
|
+
name,
|
|
135
|
+
arrangement: {
|
|
136
|
+
order,
|
|
137
|
+
columns
|
|
138
|
+
},
|
|
139
|
+
spec: {
|
|
140
|
+
kind: "view",
|
|
141
|
+
view: Ref.make(view)
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Make an items-variant kanban (items list owned by the kanban itself, e.g. populated by a sync integration).
|
|
147
|
+
*/
|
|
148
|
+
var makeItems = (props) => {
|
|
149
|
+
const { name, arrangement, pivotField, items = [] } = props;
|
|
150
|
+
const order = arrangement?.order ?? [];
|
|
151
|
+
const columns = arrangement?.columns ?? {};
|
|
152
|
+
return Obj.make(Kanban, {
|
|
153
|
+
name,
|
|
154
|
+
arrangement: {
|
|
155
|
+
order,
|
|
156
|
+
columns
|
|
157
|
+
},
|
|
158
|
+
spec: {
|
|
159
|
+
kind: "items",
|
|
160
|
+
pivotField,
|
|
161
|
+
items
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
};
|
|
165
|
+
//#endregion
|
|
166
|
+
//#region src/types/KanbanOperation.ts
|
|
167
|
+
var KanbanOperation_exports = /* @__PURE__ */ __exportAll({
|
|
168
|
+
DeleteCard: () => DeleteCard,
|
|
169
|
+
DeleteCardField: () => DeleteCardField,
|
|
170
|
+
DeleteCardFieldOutput: () => DeleteCardFieldOutput,
|
|
171
|
+
DeleteCardOutput: () => DeleteCardOutput,
|
|
172
|
+
RestoreCard: () => RestoreCard,
|
|
173
|
+
RestoreCardField: () => RestoreCardField
|
|
174
|
+
});
|
|
175
|
+
var makeKey = (name) => DXN.make(`${meta.profile.key}.operation.${name}`);
|
|
176
|
+
var DeleteCardFieldOutput = Schema.Struct({
|
|
177
|
+
field: View.FieldSchema.annotations({ description: "The deleted field schema." }),
|
|
178
|
+
props: Schema.Any.annotations({ description: "The deleted field properties." }),
|
|
179
|
+
index: Schema.Number.annotations({ description: "The index the field was at." })
|
|
180
|
+
});
|
|
181
|
+
var DeleteCardField = Operation.make({
|
|
182
|
+
meta: {
|
|
183
|
+
key: makeKey("deleteCardField"),
|
|
184
|
+
name: "Delete Card Field",
|
|
185
|
+
icon: "ph--minus-circle--regular"
|
|
186
|
+
},
|
|
187
|
+
services: [Capability.Service],
|
|
188
|
+
input: Schema.Struct({
|
|
189
|
+
view: Type.getSchema(View.View),
|
|
190
|
+
fieldId: Schema.String
|
|
191
|
+
}),
|
|
192
|
+
output: DeleteCardFieldOutput
|
|
193
|
+
});
|
|
194
|
+
var DeleteCardOutput = Schema.Struct({ card: Schema.Any.annotations({ description: "The deleted card." }) });
|
|
195
|
+
var DeleteCard = Operation.make({
|
|
196
|
+
meta: {
|
|
197
|
+
key: makeKey("deleteCard"),
|
|
198
|
+
name: "Delete Card",
|
|
199
|
+
icon: "ph--trash--regular"
|
|
200
|
+
},
|
|
201
|
+
input: Schema.Struct({ card: Schema.Any }),
|
|
202
|
+
output: DeleteCardOutput
|
|
203
|
+
});
|
|
204
|
+
var RestoreCardField = Operation.make({
|
|
205
|
+
meta: {
|
|
206
|
+
key: makeKey("restoreCardField"),
|
|
207
|
+
name: "Restore Card Field",
|
|
208
|
+
icon: "ph--clock-counter-clockwise--regular"
|
|
209
|
+
},
|
|
210
|
+
services: [Capability.Service],
|
|
211
|
+
input: Schema.Struct({
|
|
212
|
+
view: Type.getSchema(View.View).annotations({ description: "The view to restore the field to." }),
|
|
213
|
+
field: View.FieldSchema.annotations({ description: "The field schema to restore." }),
|
|
214
|
+
props: Schema.Any.annotations({ description: "The field properties to restore." }),
|
|
215
|
+
index: Schema.Number.annotations({ description: "The index to restore the field at." })
|
|
216
|
+
}),
|
|
217
|
+
output: Schema.Void
|
|
218
|
+
});
|
|
219
|
+
var RestoreCard = Operation.make({
|
|
220
|
+
meta: {
|
|
221
|
+
key: makeKey("restoreCard"),
|
|
222
|
+
name: "Restore Card",
|
|
223
|
+
icon: "ph--clock-counter-clockwise--regular"
|
|
224
|
+
},
|
|
225
|
+
input: Schema.Struct({ card: Schema.Any.annotations({ description: "The card to restore." }) }),
|
|
226
|
+
output: Schema.Void
|
|
227
|
+
});
|
|
228
|
+
//#endregion
|
|
229
|
+
export { RestoreCardField as a, KanbanSettingsSchema as c, UNCATEGORIZED_ATTRIBUTES as d, UNCATEGORIZED_VALUE as f, RestoreCard as i, KanbanViewSettingsSchema as l, DeleteCardField as n, Kanban_exports as o, KanbanOperation_exports as r, CreateKanbanSchema as s, DeleteCard as t, PivotColumnAnnotationId as u };
|
|
230
|
+
|
|
231
|
+
//# sourceMappingURL=chunk-types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-types.mjs","names":[],"sources":["../../src/types/constants.ts","../../src/types/schema.ts","../../src/types/Kanban.ts","../../src/types/KanbanOperation.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nexport const UNCATEGORIZED_VALUE = '__uncategorized__' as const;\nexport const UNCATEGORIZED_ATTRIBUTES = {\n title: 'Uncategorized',\n color: 'neutral',\n} as const;\n","//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { TypeInputOptionsAnnotation } from '@dxos/plugin-space';\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(wittjosiah): Factor out?\nexport const PivotColumnAnnotationId = Symbol.for('@dxos/plugin-kanban/annotation/PivotColumn');\n\n/**\n * Settings common to every Kanban (view or items). Rendered as form fields\n * by `KanbanProperties`.\n */\nexport const KanbanSettingsSchema = Schema.Struct({\n hideUncategorized: Schema.Boolean.annotations({\n title: 'Hide uncategorized column',\n description: 'When enabled, items without a pivot value won’t be shown as a column.',\n }).pipe(Schema.optional),\n});\n\n/**\n * Settings for view-variant Kanbans only. Spreads {@link KanbanSettingsSchema}'s\n * fields and adds a column-field picker that binds the View’s pivot field.\n * Items-variant kanbans use a hardcoded `spec.pivotField` and don’t expose\n * this control.\n */\nexport const KanbanViewSettingsSchema = Schema.Struct({\n columnFieldId: Schema.String.annotations({\n title: 'Column field',\n }),\n ...KanbanSettingsSchema.fields,\n});\n\nexport const CreateKanbanSchema = Schema.Struct({\n name: Schema.optional(Schema.String),\n // TODO(wittjosiah): This should be a query input instead.\n typename: Schema.String.pipe(\n Schema.annotations({ title: 'Select card type' }),\n TypeInputOptionsAnnotation.set({\n location: ['database', 'runtime'],\n kind: ['user'],\n }),\n Schema.optional,\n ),\n initialPivotColumn: Schema.optional(\n Schema.String.annotations({\n [PivotColumnAnnotationId]: true,\n title: 'Pivot column',\n }),\n ),\n});\n","//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\n// QueryAST is referenced indirectly through `Type.InstanceType<typeof ...Schema>`\n// (Ref.Ref(View.View) → View.View → QueryAST.Query) in the emitted .d.ts; the\n// namespace import keeps the inferred types portable.\n// eslint-disable-next-line unused-imports/no-unused-imports\nimport { Annotation, DXN, Obj, QueryAST, Ref, Type, View } from '@dxos/echo';\nimport { FormInputAnnotation, LabelAnnotation } from '@dxos/echo/Annotation';\nimport { ViewAnnotation } from '@dxos/schema';\n\n/**\n * Per-column entry: ordered card ids plus an optional `hidden` flag that\n * removes the column from the rendered board (and from the model's column\n * list). Today only the uncategorized column is exposed in settings, but\n * the data structure supports per-column hiding generally.\n */\nconst ArrangementColumnEntry = Schema.Struct({\n ids: Schema.Array(Obj.ID),\n hidden: Schema.Boolean.pipe(Schema.optional),\n});\n\n/** Keyed by columnValue. */\nconst ArrangementColumns = Schema.Record({\n key: Schema.String,\n value: ArrangementColumnEntry,\n}).pipe(FormInputAnnotation.set(false));\n\n/** Column order and per-column card ids. */\nexport const Arrangement = Schema.Struct({\n order: Schema.Array(Schema.String).pipe(FormInputAnnotation.set(false)),\n columns: ArrangementColumns,\n}).pipe(FormInputAnnotation.set(false));\n\nexport type Arrangement = Schema.Schema.Type<typeof Arrangement>;\n\n//\n// Mirrors the canonical DXOS pattern (see `Trigger.Spec` in\n// `@dxos/functions/src/types/Trigger.ts` and `Sequence.Source` in\n// `@dxos/plugin-zen`): the `Type.makeObject` schema is a flat `Schema.Struct`,\n// and the discriminated union lives one level down as a single field whose\n// variants are tagged with a `kind` literal.\n//\n\n/** View-variant: items come from running the View's query (the original behaviour). */\nexport const KanbanViewSpec = Schema.Struct({\n kind: Schema.Literal('view').pipe(FormInputAnnotation.set(false)),\n view: Ref.Ref(View.View).pipe(FormInputAnnotation.set(false)),\n});\nexport type KanbanViewSpec = Schema.Schema.Type<typeof KanbanViewSpec>;\n\n/** Items-variant: kanban owns its items as an explicit ref array (used by externally-synced kanbans). */\nexport const KanbanItemsSpec = Schema.Struct({\n kind: Schema.Literal('items').pipe(FormInputAnnotation.set(false)),\n /** Property path on each item that drives column membership (e.g. `'listName'`). */\n pivotField: Schema.String,\n /** Items owned directly by the kanban. */\n items: Schema.Array(Ref.Ref(Obj.Unknown)).pipe(FormInputAnnotation.set(false)),\n});\nexport type KanbanItemsSpec = Schema.Schema.Type<typeof KanbanItemsSpec>;\n\n/** Discriminated union of source specs. Distinguished by `kind`. */\nexport const KanbanSpec = Schema.Union(KanbanViewSpec, KanbanItemsSpec);\nexport type KanbanSpec = Schema.Schema.Type<typeof KanbanSpec>;\n\nexport class Kanban extends Type.makeObject<Kanban>(DXN.make('org.dxos.type.kanban', '0.2.0'))(\n Schema.Struct({\n name: Schema.String.pipe(Schema.optional),\n arrangement: Arrangement,\n /** How this kanban sources its items. Discriminated by `spec.kind`. */\n spec: KanbanSpec,\n }).pipe(\n LabelAnnotation.set(['name']),\n ViewAnnotation.set(['spec', 'view']),\n Annotation.IconAnnotation.set({ icon: 'ph--kanban--regular', hue: 'green' }),\n ),\n) {}\n\n/** Narrowed view-variant kanban. */\nexport type KanbanView = Kanban & { spec: KanbanViewSpec };\n\n/** Narrowed items-variant kanban. */\nexport type KanbanItems = Kanban & { spec: KanbanItemsSpec };\n\nexport const isKanbanView = (kanban: Kanban): kanban is KanbanView => kanban.spec.kind === 'view';\nexport const isKanbanItems = (kanban: Kanban): kanban is KanbanItems => kanban.spec.kind === 'items';\n\ntype MakeViewProps = {\n name?: string;\n view: View.View;\n arrangement?: Arrangement;\n};\n\n/**\n * Make a view-variant kanban (items sourced via the View's query).\n */\nexport const make = (props: MakeViewProps): Kanban => {\n const { name, view, arrangement } = props;\n const order = arrangement?.order ?? [];\n const columns = arrangement?.columns ?? {};\n return Obj.make(Kanban, {\n name,\n arrangement: { order, columns },\n spec: { kind: 'view' as const, view: Ref.make(view) },\n });\n};\n\ntype MakeItemsProps = {\n name?: string;\n arrangement?: Arrangement;\n pivotField: string;\n items?: ReadonlyArray<Ref.Ref<Obj.Unknown>>;\n};\n\n/**\n * Make an items-variant kanban (items list owned by the kanban itself, e.g. populated by a sync integration).\n */\nexport const makeItems = (props: MakeItemsProps): Kanban => {\n const { name, arrangement, pivotField, items = [] } = props;\n const order = arrangement?.order ?? [];\n const columns = arrangement?.columns ?? {};\n return Obj.make(Kanban, {\n name,\n arrangement: { order, columns },\n spec: { kind: 'items' as const, pivotField, items },\n });\n};\n","//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\nimport { DXN, Type, View } from '@dxos/echo';\n\nimport { meta } from '#meta';\n\nconst makeKey = (name: string) => DXN.make(`${meta.profile.key}.operation.${name}`);\n\nexport const DeleteCardFieldOutput = Schema.Struct({\n field: View.FieldSchema.annotations({ description: 'The deleted field schema.' }),\n props: Schema.Any.annotations({ description: 'The deleted field properties.' }),\n index: Schema.Number.annotations({ description: 'The index the field was at.' }),\n});\n\nexport type DeleteCardFieldOutput = Schema.Schema.Type<typeof DeleteCardFieldOutput>;\n\nexport const DeleteCardField = Operation.make({\n meta: {\n key: makeKey('deleteCardField'),\n name: 'Delete Card Field',\n icon: 'ph--minus-circle--regular',\n },\n services: [Capability.Service],\n input: Schema.Struct({\n view: Type.getSchema(View.View),\n fieldId: Schema.String,\n }),\n output: DeleteCardFieldOutput,\n});\n\nexport const DeleteCardOutput = Schema.Struct({\n card: Schema.Any.annotations({ description: 'The deleted card.' }),\n});\n\nexport type DeleteCardOutput = Schema.Schema.Type<typeof DeleteCardOutput>;\n\nexport const DeleteCard = Operation.make({\n meta: { key: makeKey('deleteCard'), name: 'Delete Card', icon: 'ph--trash--regular' },\n input: Schema.Struct({\n card: Schema.Any,\n }),\n output: DeleteCardOutput,\n});\n\nexport const RestoreCardField = Operation.make({\n meta: {\n key: makeKey('restoreCardField'),\n name: 'Restore Card Field',\n icon: 'ph--clock-counter-clockwise--regular',\n },\n services: [Capability.Service],\n input: Schema.Struct({\n view: Type.getSchema(View.View).annotations({ description: 'The view to restore the field to.' }),\n field: View.FieldSchema.annotations({ description: 'The field schema to restore.' }),\n props: Schema.Any.annotations({ description: 'The field properties to restore.' }),\n index: Schema.Number.annotations({ description: 'The index to restore the field at.' }),\n }),\n output: Schema.Void,\n});\n\nexport const RestoreCard = Operation.make({\n meta: {\n key: makeKey('restoreCard'),\n name: 'Restore Card',\n icon: 'ph--clock-counter-clockwise--regular',\n },\n input: Schema.Struct({\n card: Schema.Any.annotations({ description: 'The card to restore.' }),\n }),\n output: Schema.Void,\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAIA,IAAa,sBAAsB;AACnC,IAAa,2BAA2B;CACtC,OAAO;CACP,OAAO;AACT;;;;;;;;;;;ACUA,IAAa,0BAA0B,OAAO,IAAI,4CAA4C;;;;;AAM9F,IAAa,uBAAuB,OAAO,OAAO,EAChD,mBAAmB,OAAO,QAAQ,YAAY;CAC5C,OAAO;CACP,aAAa;AACf,CAAC,CAAC,CAAC,KAAK,OAAO,QAAQ,EACzB,CAAC;;;;;;;AAQD,IAAa,2BAA2B,OAAO,OAAO;CACpD,eAAe,OAAO,OAAO,YAAY,EACvC,OAAO,eACT,CAAC;CACD,GAAG,qBAAqB;AAC1B,CAAC;AAED,IAAa,qBAAqB,OAAO,OAAO;CAC9C,MAAM,OAAO,SAAS,OAAO,MAAM;CAEnC,UAAU,OAAO,OAAO,KACtB,OAAO,YAAY,EAAE,OAAO,mBAAmB,CAAC,GAChD,2BAA2B,IAAI;EAC7B,UAAU,CAAC,YAAY,SAAS;EAChC,MAAM,CAAC,MAAM;CACf,CAAC,GACD,OAAO,QACT;CACA,oBAAoB,OAAO,SACzB,OAAO,OAAO,YAAY;GACvB,0BAA0B;EAC3B,OAAO;CACT,CAAC,CACH;AACF,CAAC;;;;;;;;;;;;;;;;;;;;ACzCD,IAAM,yBAAyB,OAAO,OAAO;CAC3C,KAAK,OAAO,MAAM,IAAI,EAAE;CACxB,QAAQ,OAAO,QAAQ,KAAK,OAAO,QAAQ;AAC7C,CAAC;;AAGD,IAAM,qBAAqB,OAAO,OAAO;CACvC,KAAK,OAAO;CACZ,OAAO;AACT,CAAC,CAAC,CAAC,KAAK,oBAAoB,IAAI,KAAK,CAAC;;AAGtC,IAAa,cAAc,OAAO,OAAO;CACvC,OAAO,OAAO,MAAM,OAAO,MAAM,CAAC,CAAC,KAAK,oBAAoB,IAAI,KAAK,CAAC;CACtE,SAAS;AACX,CAAC,CAAC,CAAC,KAAK,oBAAoB,IAAI,KAAK,CAAC;;AAatC,IAAa,iBAAiB,OAAO,OAAO;CAC1C,MAAM,OAAO,QAAQ,MAAM,CAAC,CAAC,KAAK,oBAAoB,IAAI,KAAK,CAAC;CAChE,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,KAAK,oBAAoB,IAAI,KAAK,CAAC;AAC9D,CAAC;;AAID,IAAa,kBAAkB,OAAO,OAAO;CAC3C,MAAM,OAAO,QAAQ,OAAO,CAAC,CAAC,KAAK,oBAAoB,IAAI,KAAK,CAAC;;CAEjE,YAAY,OAAO;;CAEnB,OAAO,OAAO,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,oBAAoB,IAAI,KAAK,CAAC;AAC/E,CAAC;;AAID,IAAa,aAAa,OAAO,MAAM,gBAAgB,eAAe;AAGtE,IAAa,SAAb,cAA4B,KAAK,WAAmB,IAAI,KAAK,wBAAwB,OAAO,CAAC,CAAC,CAC5F,OAAO,OAAO;CACZ,MAAM,OAAO,OAAO,KAAK,OAAO,QAAQ;CACxC,aAAa;;CAEb,MAAM;AACR,CAAC,CAAC,CAAC,KACD,gBAAgB,IAAI,CAAC,MAAM,CAAC,GAC5B,eAAe,IAAI,CAAC,QAAQ,MAAM,CAAC,GACnC,WAAW,eAAe,IAAI;CAAE,MAAM;CAAuB,KAAK;AAAQ,CAAC,CAC7E,CACF,CAAC,CAAC,CAAC;AAQH,IAAa,gBAAgB,WAAyC,OAAO,KAAK,SAAS;AAC3F,IAAa,iBAAiB,WAA0C,OAAO,KAAK,SAAS;;;;AAW7F,IAAa,QAAQ,UAAiC;CACpD,MAAM,EAAE,MAAM,MAAM,gBAAgB;CACpC,MAAM,QAAQ,aAAa,SAAS,CAAC;CACrC,MAAM,UAAU,aAAa,WAAW,CAAC;CACzC,OAAO,IAAI,KAAK,QAAQ;EACtB;EACA,aAAa;GAAE;GAAO;EAAQ;EAC9B,MAAM;GAAE,MAAM;GAAiB,MAAM,IAAI,KAAK,IAAI;EAAE;CACtD,CAAC;AACH;;;;AAYA,IAAa,aAAa,UAAkC;CAC1D,MAAM,EAAE,MAAM,aAAa,YAAY,QAAQ,CAAC,MAAM;CACtD,MAAM,QAAQ,aAAa,SAAS,CAAC;CACrC,MAAM,UAAU,aAAa,WAAW,CAAC;CACzC,OAAO,IAAI,KAAK,QAAQ;EACtB;EACA,aAAa;GAAE;GAAO;EAAQ;EAC9B,MAAM;GAAE,MAAM;GAAkB;GAAY;EAAM;CACpD,CAAC;AACH;;;;;;;;;;;ACnHA,IAAM,WAAW,SAAiB,IAAI,KAAK,GAAG,KAAK,QAAQ,IAAI,aAAa,MAAM;AAElF,IAAa,wBAAwB,OAAO,OAAO;CACjD,OAAO,KAAK,YAAY,YAAY,EAAE,aAAa,4BAA4B,CAAC;CAChF,OAAO,OAAO,IAAI,YAAY,EAAE,aAAa,gCAAgC,CAAC;CAC9E,OAAO,OAAO,OAAO,YAAY,EAAE,aAAa,8BAA8B,CAAC;AACjF,CAAC;AAID,IAAa,kBAAkB,UAAU,KAAK;CAC5C,MAAM;EACJ,KAAK,QAAQ,iBAAiB;EAC9B,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,OAAO;CAC7B,OAAO,OAAO,OAAO;EACnB,MAAM,KAAK,UAAU,KAAK,IAAI;EAC9B,SAAS,OAAO;CAClB,CAAC;CACD,QAAQ;AACV,CAAC;AAED,IAAa,mBAAmB,OAAO,OAAO,EAC5C,MAAM,OAAO,IAAI,YAAY,EAAE,aAAa,oBAAoB,CAAC,EACnE,CAAC;AAID,IAAa,aAAa,UAAU,KAAK;CACvC,MAAM;EAAE,KAAK,QAAQ,YAAY;EAAG,MAAM;EAAe,MAAM;CAAqB;CACpF,OAAO,OAAO,OAAO,EACnB,MAAM,OAAO,IACf,CAAC;CACD,QAAQ;AACV,CAAC;AAED,IAAa,mBAAmB,UAAU,KAAK;CAC7C,MAAM;EACJ,KAAK,QAAQ,kBAAkB;EAC/B,MAAM;EACN,MAAM;CACR;CACA,UAAU,CAAC,WAAW,OAAO;CAC7B,OAAO,OAAO,OAAO;EACnB,MAAM,KAAK,UAAU,KAAK,IAAI,CAAC,CAAC,YAAY,EAAE,aAAa,oCAAoC,CAAC;EAChG,OAAO,KAAK,YAAY,YAAY,EAAE,aAAa,+BAA+B,CAAC;EACnF,OAAO,OAAO,IAAI,YAAY,EAAE,aAAa,mCAAmC,CAAC;EACjF,OAAO,OAAO,OAAO,YAAY,EAAE,aAAa,qCAAqC,CAAC;CACxF,CAAC;CACD,QAAQ,OAAO;AACjB,CAAC;AAED,IAAa,cAAc,UAAU,KAAK;CACxC,MAAM;EACJ,KAAK,QAAQ,aAAa;EAC1B,MAAM;EACN,MAAM;CACR;CACA,OAAO,OAAO,OAAO,EACnB,MAAM,OAAO,IAAI,YAAY,EAAE,aAAa,uBAAuB,CAAC,EACtE,CAAC;CACD,QAAQ,OAAO;AACjB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Capabilities, Capability, UndoMapping } from "@dxos/app-framework";
|
|
2
|
+
import { meta } from "#meta";
|
|
3
|
+
import { KanbanOperation } from "#types";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
//#region src/capabilities/undo-mappings.ts
|
|
6
|
+
var undo_mappings_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Capabilities.UndoMapping, [UndoMapping.make({
|
|
7
|
+
operation: KanbanOperation.DeleteCardField,
|
|
8
|
+
inverse: KanbanOperation.RestoreCardField,
|
|
9
|
+
deriveContext: (input, output) => ({
|
|
10
|
+
view: input.view,
|
|
11
|
+
field: output.field,
|
|
12
|
+
props: output.props,
|
|
13
|
+
index: output.index
|
|
14
|
+
}),
|
|
15
|
+
message: ["card-field-deleted.label", { ns: meta.profile.key }]
|
|
16
|
+
}), UndoMapping.make({
|
|
17
|
+
operation: KanbanOperation.DeleteCard,
|
|
18
|
+
inverse: KanbanOperation.RestoreCard,
|
|
19
|
+
deriveContext: (_input, output) => ({ card: output.card }),
|
|
20
|
+
message: ["card-deleted.label", { ns: meta.profile.key }]
|
|
21
|
+
})])));
|
|
22
|
+
//#endregion
|
|
23
|
+
export { undo_mappings_default as default };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=chunk-undo-mappings.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-undo-mappings.mjs","names":[],"sources":["../../src/capabilities/undo-mappings.ts"],"sourcesContent":["// Copyright 2025 DXOS.org\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability, UndoMapping } from '@dxos/app-framework';\n\nimport { meta } from '#meta';\nimport { KanbanOperation } from '#types';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.UndoMapping, [\n UndoMapping.make({\n operation: KanbanOperation.DeleteCardField,\n inverse: KanbanOperation.RestoreCardField,\n deriveContext: (input, output) => ({\n view: input.view,\n field: output.field,\n props: output.props,\n index: output.index,\n }),\n message: ['card-field-deleted.label', { ns: meta.profile.key }],\n }),\n UndoMapping.make({\n operation: KanbanOperation.DeleteCard,\n inverse: KanbanOperation.RestoreCard,\n deriveContext: (_input, output) => ({\n card: output.card,\n }),\n message: ['card-deleted.label', { ns: meta.profile.key }],\n }),\n ]),\n ),\n);\n"],"mappings":";;;;;AASA,IAAA,wBAAe,WAAW,iBACxB,OAAO,QACL,WAAW,YAAY,aAAa,aAAa,CAC/C,YAAY,KAAK;CACf,WAAW,gBAAgB;CAC3B,SAAS,gBAAgB;CACzB,gBAAgB,OAAO,YAAY;EACjC,MAAM,MAAM;EACZ,OAAO,OAAO;EACd,OAAO,OAAO;EACd,OAAO,OAAO;CAChB;CACA,SAAS,CAAC,4BAA4B,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC;AAChE,CAAC,GACD,YAAY,KAAK;CACf,WAAW,gBAAgB;CAC3B,SAAS,gBAAgB;CACzB,gBAAgB,QAAQ,YAAY,EAClC,MAAM,OAAO,KACf;CACA,SAAS,CAAC,sBAAsB,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC;AAC1D,CAAC,CACH,CAAC,CACH,CACF"}
|