@dxos/plugin-kanban 0.8.4-main.bc674ce → 0.8.4-main.bcb3aa67d6
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/blueprints/index.mjs +23 -4
- package/dist/lib/browser/blueprints/index.mjs.map +4 -4
- package/dist/lib/browser/chunk-A3PBV3S5.mjs +105 -0
- package/dist/lib/browser/chunk-A3PBV3S5.mjs.map +7 -0
- package/dist/lib/browser/delete-card-VPNVIWOA.mjs +32 -0
- package/dist/lib/browser/delete-card-VPNVIWOA.mjs.map +7 -0
- package/dist/lib/browser/delete-card-field-4HHF2GYX.mjs +50 -0
- package/dist/lib/browser/delete-card-field-4HHF2GYX.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +84 -61
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/operations/index.mjs +13 -0
- package/dist/lib/browser/operations/index.mjs.map +7 -0
- package/dist/lib/browser/restore-card-4GG2RYKR.mjs +29 -0
- package/dist/lib/browser/restore-card-4GG2RYKR.mjs.map +7 -0
- package/dist/lib/browser/restore-card-field-3T26ACYX.mjs +48 -0
- package/dist/lib/browser/restore-card-field-3T26ACYX.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +94 -8
- package/dist/lib/browser/types/index.mjs.map +4 -4
- package/dist/lib/node-esm/blueprints/index.mjs +23 -4
- package/dist/lib/node-esm/blueprints/index.mjs.map +4 -4
- package/dist/lib/node-esm/chunk-6LELYA2G.mjs +106 -0
- package/dist/lib/node-esm/chunk-6LELYA2G.mjs.map +7 -0
- package/dist/lib/node-esm/delete-card-5PW5OMFN.mjs +33 -0
- package/dist/lib/node-esm/delete-card-5PW5OMFN.mjs.map +7 -0
- package/dist/lib/node-esm/delete-card-field-KPJU2AQ3.mjs +51 -0
- package/dist/lib/node-esm/delete-card-field-KPJU2AQ3.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +84 -61
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/operations/index.mjs +14 -0
- package/dist/lib/node-esm/operations/index.mjs.map +7 -0
- package/dist/lib/node-esm/restore-card-X2TKMU5A.mjs +30 -0
- package/dist/lib/node-esm/restore-card-X2TKMU5A.mjs.map +7 -0
- package/dist/lib/node-esm/restore-card-field-IUTL4RTR.mjs +49 -0
- package/dist/lib/node-esm/restore-card-field-IUTL4RTR.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +94 -8
- package/dist/lib/node-esm/types/index.mjs.map +4 -4
- package/dist/types/src/KanbanPlugin.d.ts.map +1 -1
- package/dist/types/src/blueprints/index.d.ts +1 -1
- package/dist/types/src/blueprints/index.d.ts.map +1 -1
- package/dist/types/src/blueprints/kanban-blueprint.d.ts +3 -21
- package/dist/types/src/blueprints/kanban-blueprint.d.ts.map +1 -1
- package/dist/types/src/capabilities/{artifact-definition/artifact-definition.d.ts → artifact-definition.d.ts} +1 -1
- package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/blueprint-definition.d.ts +6 -0
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +6 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts +5 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/undo-mappings.d.ts +5 -0
- package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -0
- package/dist/types/src/components/KanbanBoard/KanbanBoard.d.ts +65 -0
- package/dist/types/src/components/KanbanBoard/KanbanBoard.d.ts.map +1 -0
- package/dist/types/src/components/KanbanBoard/KanbanBoard.stories.d.ts +72 -0
- package/dist/types/src/components/KanbanBoard/KanbanBoard.stories.d.ts.map +1 -0
- package/dist/types/src/components/KanbanBoard/KanbanCard.d.ts +10 -0
- package/dist/types/src/components/KanbanBoard/KanbanCard.d.ts.map +1 -0
- package/dist/types/src/components/KanbanBoard/KanbanColumn.d.ts +9 -0
- package/dist/types/src/components/KanbanBoard/KanbanColumn.d.ts.map +1 -0
- package/dist/types/src/components/KanbanBoard/index.d.ts +2 -0
- package/dist/types/src/components/KanbanBoard/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +1 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/KanbanContainer/KanbanContainer.d.ts +6 -0
- package/dist/types/src/containers/KanbanContainer/KanbanContainer.d.ts.map +1 -0
- package/dist/types/src/containers/KanbanContainer/KanbanContainer.stories.d.ts +79 -0
- package/dist/types/src/containers/KanbanContainer/KanbanContainer.stories.d.ts.map +1 -0
- package/dist/types/src/containers/KanbanContainer/index.d.ts +3 -0
- package/dist/types/src/containers/KanbanContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/KanbanViewEditor/KanbanViewEditor.d.ts +6 -0
- package/dist/types/src/containers/KanbanViewEditor/KanbanViewEditor.d.ts.map +1 -0
- package/dist/types/src/containers/KanbanViewEditor/index.d.ts +3 -0
- package/dist/types/src/containers/KanbanViewEditor/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +4 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +6 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -0
- package/dist/types/src/hooks/useEchoChangeCallback.d.ts +13 -0
- package/dist/types/src/hooks/useEchoChangeCallback.d.ts.map +1 -0
- package/dist/types/src/hooks/useKanbanBoardModel.d.ts +16 -0
- package/dist/types/src/hooks/useKanbanBoardModel.d.ts.map +1 -0
- package/dist/types/src/hooks/useKanbanBoardModel.test.d.ts +2 -0
- package/dist/types/src/hooks/useKanbanBoardModel.test.d.ts.map +1 -0
- package/dist/types/src/hooks/useKanbanColumnEventHandler.d.ts +22 -0
- package/dist/types/src/hooks/useKanbanColumnEventHandler.d.ts.map +1 -0
- package/dist/types/src/hooks/useKanbanItemEventHandler.d.ts +19 -0
- package/dist/types/src/hooks/useKanbanItemEventHandler.d.ts.map +1 -0
- package/dist/types/src/hooks/useProjectionModel.d.ts +15 -0
- package/dist/types/src/hooks/useProjectionModel.d.ts.map +1 -0
- package/dist/types/src/operations/definitions.d.ts +52 -0
- package/dist/types/src/operations/definitions.d.ts.map +1 -0
- package/dist/types/src/operations/delete-card-field.d.ts +5 -0
- package/dist/types/src/operations/delete-card-field.d.ts.map +1 -0
- package/dist/types/src/operations/delete-card.d.ts +5 -0
- package/dist/types/src/operations/delete-card.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts +4 -0
- package/dist/types/src/operations/index.d.ts.map +1 -0
- package/dist/types/src/operations/restore-card-field.d.ts +5 -0
- package/dist/types/src/operations/restore-card-field.d.ts.map +1 -0
- package/dist/types/src/operations/restore-card.d.ts +5 -0
- package/dist/types/src/operations/restore-card.d.ts.map +1 -0
- package/dist/types/src/playwright/board-manager.d.ts +5 -0
- package/dist/types/src/playwright/board-manager.d.ts.map +1 -0
- package/dist/types/src/playwright/playwright.config.d.ts +3 -0
- package/dist/types/src/playwright/playwright.config.d.ts.map +1 -0
- package/dist/types/src/playwright/smoke.spec.d.ts +2 -0
- package/dist/types/src/playwright/smoke.spec.d.ts.map +1 -0
- package/dist/types/src/testing/KanbanCardTileSimple.d.ts +7 -0
- package/dist/types/src/testing/KanbanCardTileSimple.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +2 -0
- package/dist/types/src/testing/index.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +48 -32
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Kanban.d.ts +37 -0
- package/dist/types/src/types/Kanban.d.ts.map +1 -0
- package/dist/types/src/types/constants.d.ts +6 -0
- package/dist/types/src/types/constants.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +2 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +0 -103
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +28 -0
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util/arrangement.d.ts +68 -0
- package/dist/types/src/util/arrangement.d.ts.map +1 -0
- package/dist/types/src/util/arrangement.test.d.ts +2 -0
- package/dist/types/src/util/arrangement.test.d.ts.map +1 -0
- package/dist/types/src/util/index.d.ts +2 -0
- package/dist/types/src/util/index.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +64 -42
- package/src/KanbanPlugin.tsx +35 -23
- package/src/blueprints/index.ts +1 -1
- package/src/blueprints/kanban-blueprint.ts +12 -8
- package/src/capabilities/{artifact-definition/artifact-definition.ts → artifact-definition.ts} +10 -9
- package/src/capabilities/blueprint-definition.ts +17 -0
- package/src/capabilities/index.ts +10 -3
- package/src/capabilities/operation-handler.ts +14 -0
- package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +15 -15
- package/src/capabilities/undo-mappings.ts +34 -0
- package/src/components/KanbanBoard/KanbanBoard.stories.tsx +142 -0
- package/src/components/KanbanBoard/KanbanBoard.tsx +193 -0
- package/src/components/KanbanBoard/KanbanCard.tsx +86 -0
- package/src/components/KanbanBoard/KanbanColumn.tsx +69 -0
- package/src/components/KanbanBoard/index.ts +5 -0
- package/src/components/index.ts +1 -2
- package/src/{components → containers/KanbanContainer}/KanbanContainer.stories.tsx +70 -87
- package/src/containers/KanbanContainer/KanbanContainer.tsx +96 -0
- package/src/containers/KanbanContainer/index.ts +7 -0
- package/src/{components → containers/KanbanViewEditor}/KanbanViewEditor.tsx +23 -19
- package/src/containers/KanbanViewEditor/index.ts +7 -0
- package/src/containers/index.ts +8 -0
- package/src/hooks/index.ts +9 -0
- package/src/hooks/useEchoChangeCallback.ts +30 -0
- package/src/hooks/useKanbanBoardModel.test.ts +235 -0
- package/src/hooks/useKanbanBoardModel.ts +143 -0
- package/src/hooks/useKanbanColumnEventHandler.ts +106 -0
- package/src/hooks/useKanbanItemEventHandler.ts +133 -0
- package/src/hooks/useProjectionModel.ts +58 -0
- package/src/meta.ts +1 -1
- package/src/operations/definitions.ts +63 -0
- package/src/operations/delete-card-field.ts +47 -0
- package/src/operations/delete-card.ts +23 -0
- package/src/operations/index.ts +12 -0
- package/src/operations/restore-card-field.ts +41 -0
- package/src/operations/restore-card.ts +21 -0
- package/src/playwright/board-manager.ts +13 -0
- package/src/playwright/playwright.config.ts +19 -0
- package/src/playwright/smoke.spec.ts +107 -0
- package/src/testing/KanbanCardTileSimple.tsx +82 -0
- package/src/testing/index.ts +5 -0
- package/src/translations.ts +26 -18
- package/src/types/Kanban.ts +71 -0
- package/src/types/constants.ts +9 -0
- package/src/types/index.ts +2 -0
- package/src/types/schema.ts +0 -76
- package/src/types/types.ts +35 -0
- package/src/util/arrangement.test.ts +208 -0
- package/src/util/arrangement.ts +167 -0
- package/src/util/index.ts +5 -0
- package/dist/lib/browser/blueprint-definition-T2544VMJ.mjs +0 -17
- package/dist/lib/browser/blueprint-definition-T2544VMJ.mjs.map +0 -7
- package/dist/lib/browser/chunk-L6N4ZDZ7.mjs +0 -35
- package/dist/lib/browser/chunk-L6N4ZDZ7.mjs.map +0 -7
- package/dist/lib/browser/chunk-XYQO4VL7.mjs +0 -150
- package/dist/lib/browser/chunk-XYQO4VL7.mjs.map +0 -7
- package/dist/lib/browser/operation-resolver-UEJHX42A.mjs +0 -162
- package/dist/lib/browser/operation-resolver-UEJHX42A.mjs.map +0 -7
- package/dist/lib/browser/react-surface-LFUJAPRL.mjs +0 -236
- package/dist/lib/browser/react-surface-LFUJAPRL.mjs.map +0 -7
- package/dist/lib/node-esm/blueprint-definition-APJQFSHJ.mjs +0 -18
- package/dist/lib/node-esm/blueprint-definition-APJQFSHJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NN6JMKIT.mjs +0 -152
- package/dist/lib/node-esm/chunk-NN6JMKIT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZHRMUKTF.mjs +0 -36
- package/dist/lib/node-esm/chunk-ZHRMUKTF.mjs.map +0 -7
- package/dist/lib/node-esm/operation-resolver-5RPWHZCF.mjs +0 -163
- package/dist/lib/node-esm/operation-resolver-5RPWHZCF.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-7TSGBRJL.mjs +0 -237
- package/dist/lib/node-esm/react-surface-7TSGBRJL.mjs.map +0 -7
- package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +0 -1
- package/dist/types/src/capabilities/artifact-definition/index.d.ts +0 -3
- package/dist/types/src/capabilities/artifact-definition/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +0 -9
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +0 -1
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts +0 -3
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +0 -5
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
- package/dist/types/src/components/KanbanContainer.d.ts +0 -6
- package/dist/types/src/components/KanbanContainer.d.ts.map +0 -1
- package/dist/types/src/components/KanbanContainer.stories.d.ts +0 -75
- package/dist/types/src/components/KanbanContainer.stories.d.ts.map +0 -1
- package/dist/types/src/components/KanbanViewEditor.d.ts +0 -8
- package/dist/types/src/components/KanbanViewEditor.d.ts.map +0 -1
- package/src/capabilities/artifact-definition/index.ts +0 -7
- package/src/capabilities/blueprint-definition/blueprint-definition.ts +0 -23
- package/src/capabilities/blueprint-definition/index.ts +0 -7
- package/src/capabilities/operation-resolver/index.ts +0 -7
- package/src/capabilities/operation-resolver/operation-resolver.ts +0 -133
- package/src/capabilities/react-surface/index.ts +0 -7
- package/src/components/KanbanContainer.tsx +0 -86
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type SelectOption } from '@dxos/echo/internal';
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
type ArrangedCards,
|
|
9
|
+
type BaseKanbanItem,
|
|
10
|
+
type ColumnStructure,
|
|
11
|
+
type Kanban,
|
|
12
|
+
UNCATEGORIZED_VALUE,
|
|
13
|
+
} from '#types';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Column order from a raw arrangement object (e.g. when working with arrangement only).
|
|
17
|
+
*
|
|
18
|
+
* @param arrangement - Optional arrangement; reads order.
|
|
19
|
+
* @returns Mutable copy of order array, or empty if arrangement/order missing or empty.
|
|
20
|
+
*/
|
|
21
|
+
export const getOrderFromArrangement = (arrangement?: Kanban.Arrangement): string[] => {
|
|
22
|
+
const order = arrangement?.order;
|
|
23
|
+
if (order != null && order.length > 0) {
|
|
24
|
+
return [...order];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return [];
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Per-column card id order and optional hidden flag from a raw arrangement object.
|
|
32
|
+
*
|
|
33
|
+
* Returns mutable copies so schema readonly does not leak to callers.
|
|
34
|
+
*
|
|
35
|
+
* @param arrangement - Optional arrangement; reads columns.
|
|
36
|
+
* @returns Map of column value → { ids, hidden? }; empty object if not set.
|
|
37
|
+
*/
|
|
38
|
+
export const getOrderByColumnFromArrangement = (
|
|
39
|
+
arrangement?: Kanban.Arrangement,
|
|
40
|
+
): Record<string, { ids: string[]; hidden?: boolean }> => {
|
|
41
|
+
const columns = arrangement?.columns;
|
|
42
|
+
if (columns != null && Object.keys(columns).length > 0) {
|
|
43
|
+
return Object.fromEntries(
|
|
44
|
+
Object.entries(columns).map(([key, entry]) => [
|
|
45
|
+
key,
|
|
46
|
+
{ ids: [...(entry.ids ?? [])], ...(entry.hidden !== undefined && { hidden: entry.hidden }) },
|
|
47
|
+
]),
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return {};
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Builds the ordered list of columns (value + ids) for the board model.
|
|
56
|
+
*
|
|
57
|
+
* Column order: uncategorized first, then effectiveOrder, then any selectOption ids not yet in order.
|
|
58
|
+
* Each entry gets the ids from effectiveByColumn for that column (or empty).
|
|
59
|
+
*
|
|
60
|
+
* @param effectiveOrder - Column order from arrangement (or previous merge).
|
|
61
|
+
* @param effectiveByColumn - Per-column card id order from arrangement.
|
|
62
|
+
* @param selectOptions - Defines valid column ids; any missing from order are appended.
|
|
63
|
+
* @returns ColumnStructure array in display order.
|
|
64
|
+
*/
|
|
65
|
+
export const computeColumnStructure = (
|
|
66
|
+
effectiveOrder: string[],
|
|
67
|
+
effectiveByColumn: Record<string, { ids: string[]; hidden?: boolean }>,
|
|
68
|
+
selectOptions: SelectOption[],
|
|
69
|
+
): ColumnStructure[] => {
|
|
70
|
+
const order = [...effectiveOrder];
|
|
71
|
+
if (!order.includes(UNCATEGORIZED_VALUE)) {
|
|
72
|
+
order.unshift(UNCATEGORIZED_VALUE);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
for (const opt of selectOptions) {
|
|
76
|
+
if (opt.id !== UNCATEGORIZED_VALUE && !order.includes(opt.id)) {
|
|
77
|
+
order.push(opt.id);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return order.map((columnValue) => ({
|
|
82
|
+
columnValue,
|
|
83
|
+
ids: effectiveByColumn[columnValue]?.ids ?? [],
|
|
84
|
+
}));
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Orders items for a single column: partition by saved order vs new, sort by orderMap, concatenate.
|
|
89
|
+
* Uses explicit null/undefined check for itemColumn so empty string is handled consistently.
|
|
90
|
+
*
|
|
91
|
+
* @param items - All items to filter.
|
|
92
|
+
* @param ids - Saved id order for this column.
|
|
93
|
+
* @param columnValue - Column id (e.g. UNCATEGORIZED_VALUE or option id).
|
|
94
|
+
* @param pivotPath - Item property key for column value (undefined = no pivot).
|
|
95
|
+
* @param validColumnValues - Set of valid option ids.
|
|
96
|
+
* @returns Items belonging to this column in display order.
|
|
97
|
+
*/
|
|
98
|
+
export const orderItemsInColumn = <T extends BaseKanbanItem>(
|
|
99
|
+
items: T[],
|
|
100
|
+
ids: string[],
|
|
101
|
+
columnValue: string,
|
|
102
|
+
pivotPath: string | undefined,
|
|
103
|
+
validColumnValues: Set<string>,
|
|
104
|
+
): T[] => {
|
|
105
|
+
const orderMap = new Map(ids.map((id, index) => [id, index]));
|
|
106
|
+
const cardsWithExistingOrder: T[] = [];
|
|
107
|
+
const newCards: T[] = [];
|
|
108
|
+
|
|
109
|
+
for (const item of items) {
|
|
110
|
+
const itemColumn = pivotPath !== undefined ? (item[pivotPath as keyof T] as string | undefined) : undefined;
|
|
111
|
+
const isValidColumn = itemColumn != null && validColumnValues.has(itemColumn);
|
|
112
|
+
const belongsInColumn = columnValue === UNCATEGORIZED_VALUE ? !isValidColumn : itemColumn === columnValue;
|
|
113
|
+
|
|
114
|
+
if (belongsInColumn) {
|
|
115
|
+
(orderMap.has(item.id) ? cardsWithExistingOrder : newCards).push(item);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
cardsWithExistingOrder.sort((a, b) => {
|
|
120
|
+
const indexA = orderMap.get(a.id) ?? Infinity;
|
|
121
|
+
const indexB = orderMap.get(b.id) ?? Infinity;
|
|
122
|
+
return indexA - indexB;
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
return [...cardsWithExistingOrder, ...newCards];
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Computes the full item arrangement for the board: one entry per column with items in display order.
|
|
130
|
+
*
|
|
131
|
+
* Columns follow selectOptions order (uncategorized first, then each option). Within each column,
|
|
132
|
+
* cards that appear in the kanban's saved arrangement keep that order; any other cards in that
|
|
133
|
+
* column are appended after them.
|
|
134
|
+
*
|
|
135
|
+
* @param object - Kanban object whose arrangement holds per-column id order.
|
|
136
|
+
* @param items - All items to distribute into columns.
|
|
137
|
+
* @param pivotPath - Optional item property key whose value is the column id (e.g. status, priority).
|
|
138
|
+
* @param selectOptions - Defines valid column ids and their display order.
|
|
139
|
+
* @returns Array of { columnValue, cards } in column order, with cards ordered as above.
|
|
140
|
+
*/
|
|
141
|
+
export const computeItemArrangement = <T extends BaseKanbanItem = BaseKanbanItem>({
|
|
142
|
+
object,
|
|
143
|
+
items,
|
|
144
|
+
pivotPath,
|
|
145
|
+
selectOptions,
|
|
146
|
+
}: {
|
|
147
|
+
object: Kanban.Kanban;
|
|
148
|
+
items: T[];
|
|
149
|
+
pivotPath?: string;
|
|
150
|
+
selectOptions: SelectOption[];
|
|
151
|
+
}): ArrangedCards<T> => {
|
|
152
|
+
const validColumnValues = new Set(selectOptions.map((opt) => opt.id));
|
|
153
|
+
const byColumn = getOrderByColumnFromArrangement(object?.arrangement);
|
|
154
|
+
|
|
155
|
+
// Column order: uncategorized first, then each select option (skip uncategorized if duplicated).
|
|
156
|
+
const columnEntries = [
|
|
157
|
+
{ columnValue: UNCATEGORIZED_VALUE, ids: byColumn[UNCATEGORIZED_VALUE]?.ids ?? [] },
|
|
158
|
+
...selectOptions
|
|
159
|
+
.filter((opt) => opt.id !== UNCATEGORIZED_VALUE)
|
|
160
|
+
.map((opt) => ({ columnValue: opt.id, ids: byColumn[opt.id]?.ids ?? [] })),
|
|
161
|
+
];
|
|
162
|
+
|
|
163
|
+
return columnEntries.map(({ columnValue, ids }) => ({
|
|
164
|
+
columnValue,
|
|
165
|
+
cards: orderItemsInColumn(items, ids, columnValue, pivotPath, validColumnValues),
|
|
166
|
+
}));
|
|
167
|
+
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
kanban_blueprint_exports
|
|
3
|
-
} from "./chunk-L6N4ZDZ7.mjs";
|
|
4
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
5
|
-
|
|
6
|
-
// src/capabilities/blueprint-definition/blueprint-definition.ts
|
|
7
|
-
import * as Effect from "effect/Effect";
|
|
8
|
-
import { Capability, Common } from "@dxos/app-framework";
|
|
9
|
-
var blueprintDefinition = Capability.makeModule(() => Effect.succeed([
|
|
10
|
-
Capability.contributes(Common.Capability.Functions, kanban_blueprint_exports.functions),
|
|
11
|
-
Capability.contributes(Common.Capability.BlueprintDefinition, kanban_blueprint_exports.make())
|
|
12
|
-
]));
|
|
13
|
-
var blueprint_definition_default = blueprintDefinition;
|
|
14
|
-
export {
|
|
15
|
-
blueprint_definition_default as default
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=blueprint-definition-T2544VMJ.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/blueprint-definition/blueprint-definition.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common } from '@dxos/app-framework';\n\nimport { KanbanBlueprint } from '../../blueprints';\n\nexport type BlueprintCapabilities = [\n Capability.Capability<typeof Common.Capability.Functions>,\n Capability.Capability<typeof Common.Capability.BlueprintDefinition>,\n];\n\nconst blueprintDefinition = Capability.makeModule<[], BlueprintCapabilities>(() =>\n Effect.succeed([\n Capability.contributes(Common.Capability.Functions, KanbanBlueprint.functions),\n Capability.contributes(Common.Capability.BlueprintDefinition, KanbanBlueprint.make()),\n ]),\n);\n\nexport default blueprintDefinition;\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,YAAYC,cAAc;AASnC,IAAMC,sBAAsBC,WAAWC,WAAsC,MACpEC,eAAQ;EACbF,WAAWG,YAAYC,OAAOJ,WAAWK,WAAWC,yBAAgBC,SAAS;EAC7EP,WAAWG,YAAYC,OAAOJ,WAAWQ,qBAAqBF,yBAAgBG,KAAI,CAAA;CACnF,CAAA;AAGH,IAAA,+BAAeV;",
|
|
6
|
-
"names": ["Effect", "Capability", "Common", "blueprintDefinition", "Capability", "makeModule", "succeed", "contributes", "Common", "Functions", "KanbanBlueprint", "functions", "BlueprintDefinition", "make"]
|
|
7
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
__export
|
|
3
|
-
} from "./chunk-J5LGTIGS.mjs";
|
|
4
|
-
|
|
5
|
-
// src/blueprints/kanban-blueprint.ts
|
|
6
|
-
var kanban_blueprint_exports = {};
|
|
7
|
-
__export(kanban_blueprint_exports, {
|
|
8
|
-
Key: () => Key,
|
|
9
|
-
functions: () => functions,
|
|
10
|
-
make: () => make,
|
|
11
|
-
tools: () => tools
|
|
12
|
-
});
|
|
13
|
-
import { Blueprint, Template } from "@dxos/blueprints";
|
|
14
|
-
import { trim } from "@dxos/util";
|
|
15
|
-
var functions = [];
|
|
16
|
-
var tools = [];
|
|
17
|
-
var Key = "dxos.org/blueprint/kanban";
|
|
18
|
-
var make = () => Blueprint.make({
|
|
19
|
-
key: Key,
|
|
20
|
-
name: "Kanban",
|
|
21
|
-
tools: Blueprint.toolDefinitions({
|
|
22
|
-
functions,
|
|
23
|
-
tools
|
|
24
|
-
}),
|
|
25
|
-
instructions: Template.make({
|
|
26
|
-
source: trim`
|
|
27
|
-
You can create and update kanban boards to show data in sorted columns defined by schema.
|
|
28
|
-
`
|
|
29
|
-
})
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
export {
|
|
33
|
-
kanban_blueprint_exports
|
|
34
|
-
};
|
|
35
|
-
//# sourceMappingURL=chunk-L6N4ZDZ7.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/blueprints/kanban-blueprint.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Blueprint, Template } from '@dxos/blueprints';\nimport { type FunctionDefinition } from '@dxos/functions';\nimport { trim } from '@dxos/util';\n\nexport const functions: FunctionDefinition[] = [];\nexport const tools: string[] = [];\n\nexport const Key = 'dxos.org/blueprint/kanban';\n\nexport const make = () =>\n Blueprint.make({\n key: Key,\n name: 'Kanban',\n tools: Blueprint.toolDefinitions({ functions, 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"],
|
|
5
|
-
"mappings": ";;;;;AAAA;;;;;;;AAIA,SAASA,WAAWC,gBAAgB;AAEpC,SAASC,YAAY;AAEd,IAAMC,YAAkC,CAAA;AACxC,IAAMC,QAAkB,CAAA;AAExB,IAAMC,MAAM;AAEZ,IAAMC,OAAO,MAClBC,UAAUD,KAAK;EACbE,KAAKH;EACLI,MAAM;EACNL,OAAOG,UAAUG,gBAAgB;IAAEP;IAAWC;EAAM,CAAA;EACpDO,cAAcC,SAASN,KAAK;IAC1BO,QAAQC;;;EAGV,CAAA;AACF,CAAA;",
|
|
6
|
-
"names": ["Blueprint", "Template", "trim", "functions", "tools", "Key", "make", "Blueprint", "key", "name", "toolDefinitions", "instructions", "Template", "source", "trim"]
|
|
7
|
-
}
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
// src/types/schema.ts
|
|
2
|
-
import * as Schema from "effect/Schema";
|
|
3
|
-
import { Capability } from "@dxos/app-framework";
|
|
4
|
-
import { Operation } from "@dxos/operation";
|
|
5
|
-
import { TypeInputOptionsAnnotation } from "@dxos/plugin-space/types";
|
|
6
|
-
import { FieldSchema, View } from "@dxos/schema";
|
|
7
|
-
|
|
8
|
-
// src/meta.ts
|
|
9
|
-
import { trim } from "@dxos/util";
|
|
10
|
-
var meta = {
|
|
11
|
-
id: "dxos.org/plugin/kanban",
|
|
12
|
-
name: "Kanban",
|
|
13
|
-
description: trim`
|
|
14
|
-
Visual project management using customizable kanban boards to track workflow progress.
|
|
15
|
-
Organize table data into columns, drag and drop items between stages, and trigger automations based on status changes.
|
|
16
|
-
`,
|
|
17
|
-
icon: "ph--kanban--regular",
|
|
18
|
-
iconHue: "green",
|
|
19
|
-
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-kanban",
|
|
20
|
-
screenshots: [
|
|
21
|
-
"https://dxos.network/plugin-details-kanban-dark.png"
|
|
22
|
-
]
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
// src/types/schema.ts
|
|
26
|
-
var PivotColumnAnnotationId = Symbol.for("@dxos/plugin-kanban/annotation/PivotColumn");
|
|
27
|
-
var SettingsSchema = Schema.Struct({
|
|
28
|
-
columnFieldId: Schema.String.annotations({
|
|
29
|
-
title: "Column field"
|
|
30
|
-
})
|
|
31
|
-
});
|
|
32
|
-
var CreateKanbanSchema = Schema.Struct({
|
|
33
|
-
name: Schema.optional(Schema.String),
|
|
34
|
-
// TODO(wittjosiah): This should be a query input instead.
|
|
35
|
-
typename: Schema.String.pipe(Schema.annotations({
|
|
36
|
-
title: "Select card type"
|
|
37
|
-
}), TypeInputOptionsAnnotation.set({
|
|
38
|
-
location: [
|
|
39
|
-
"database",
|
|
40
|
-
"runtime"
|
|
41
|
-
],
|
|
42
|
-
kind: [
|
|
43
|
-
"user"
|
|
44
|
-
],
|
|
45
|
-
registered: [
|
|
46
|
-
"registered"
|
|
47
|
-
]
|
|
48
|
-
}), Schema.optional),
|
|
49
|
-
initialPivotColumn: Schema.optional(Schema.String.annotations({
|
|
50
|
-
[PivotColumnAnnotationId]: true,
|
|
51
|
-
title: "Pivot column"
|
|
52
|
-
}))
|
|
53
|
-
});
|
|
54
|
-
var KANBAN_OPERATION = `${meta.id}/operation`;
|
|
55
|
-
(function(KanbanOperation2) {
|
|
56
|
-
KanbanOperation2.DeleteCardFieldOutput = Schema.Struct({
|
|
57
|
-
field: FieldSchema.annotations({
|
|
58
|
-
description: "The deleted field schema."
|
|
59
|
-
}),
|
|
60
|
-
props: Schema.Any.annotations({
|
|
61
|
-
description: "The deleted field properties."
|
|
62
|
-
}),
|
|
63
|
-
index: Schema.Number.annotations({
|
|
64
|
-
description: "The index the field was at."
|
|
65
|
-
})
|
|
66
|
-
});
|
|
67
|
-
KanbanOperation2.DeleteCardField = Operation.make({
|
|
68
|
-
meta: {
|
|
69
|
-
key: `${KANBAN_OPERATION}/delete-card-field`,
|
|
70
|
-
name: "Delete Card Field"
|
|
71
|
-
},
|
|
72
|
-
services: [
|
|
73
|
-
Capability.Service
|
|
74
|
-
],
|
|
75
|
-
schema: {
|
|
76
|
-
input: Schema.Struct({
|
|
77
|
-
view: View.View,
|
|
78
|
-
fieldId: Schema.String
|
|
79
|
-
}),
|
|
80
|
-
output: KanbanOperation2.DeleteCardFieldOutput
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
KanbanOperation2.DeleteCardOutput = Schema.Struct({
|
|
84
|
-
card: Schema.Any.annotations({
|
|
85
|
-
description: "The deleted card."
|
|
86
|
-
})
|
|
87
|
-
});
|
|
88
|
-
KanbanOperation2.DeleteCard = Operation.make({
|
|
89
|
-
meta: {
|
|
90
|
-
key: `${KANBAN_OPERATION}/delete-card`,
|
|
91
|
-
name: "Delete Card"
|
|
92
|
-
},
|
|
93
|
-
schema: {
|
|
94
|
-
input: Schema.Struct({
|
|
95
|
-
card: Schema.Any
|
|
96
|
-
}),
|
|
97
|
-
output: KanbanOperation2.DeleteCardOutput
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
KanbanOperation2.RestoreCardField = Operation.make({
|
|
101
|
-
meta: {
|
|
102
|
-
key: `${KANBAN_OPERATION}/restore-card-field`,
|
|
103
|
-
name: "Restore Card Field"
|
|
104
|
-
},
|
|
105
|
-
services: [
|
|
106
|
-
Capability.Service
|
|
107
|
-
],
|
|
108
|
-
schema: {
|
|
109
|
-
input: Schema.Struct({
|
|
110
|
-
view: View.View.annotations({
|
|
111
|
-
description: "The view to restore the field to."
|
|
112
|
-
}),
|
|
113
|
-
field: FieldSchema.annotations({
|
|
114
|
-
description: "The field schema to restore."
|
|
115
|
-
}),
|
|
116
|
-
props: Schema.Any.annotations({
|
|
117
|
-
description: "The field properties to restore."
|
|
118
|
-
}),
|
|
119
|
-
index: Schema.Number.annotations({
|
|
120
|
-
description: "The index to restore the field at."
|
|
121
|
-
})
|
|
122
|
-
}),
|
|
123
|
-
output: Schema.Void
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
KanbanOperation2.RestoreCard = Operation.make({
|
|
127
|
-
meta: {
|
|
128
|
-
key: `${KANBAN_OPERATION}/restore-card`,
|
|
129
|
-
name: "Restore Card"
|
|
130
|
-
},
|
|
131
|
-
schema: {
|
|
132
|
-
input: Schema.Struct({
|
|
133
|
-
card: Schema.Any.annotations({
|
|
134
|
-
description: "The card to restore."
|
|
135
|
-
})
|
|
136
|
-
}),
|
|
137
|
-
output: Schema.Void
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
})(KanbanOperation || (KanbanOperation = {}));
|
|
141
|
-
var KanbanOperation;
|
|
142
|
-
|
|
143
|
-
export {
|
|
144
|
-
meta,
|
|
145
|
-
PivotColumnAnnotationId,
|
|
146
|
-
SettingsSchema,
|
|
147
|
-
CreateKanbanSchema,
|
|
148
|
-
KanbanOperation
|
|
149
|
-
};
|
|
150
|
-
//# sourceMappingURL=chunk-XYQO4VL7.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/types/schema.ts", "../../../src/meta.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/operation';\nimport { TypeInputOptionsAnnotation } from '@dxos/plugin-space/types';\nimport { FieldSchema, View } from '@dxos/schema';\n\nimport { meta } 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(wittjosiah): Factor out?\nexport const PivotColumnAnnotationId = Symbol.for('@dxos/plugin-kanban/annotation/PivotColumn');\n\nexport const SettingsSchema = Schema.Struct({\n columnFieldId: Schema.String.annotations({\n title: 'Column field',\n }),\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 registered: ['registered'],\n }),\n Schema.optional,\n ),\n initialPivotColumn: Schema.optional(\n Schema.String.annotations({\n [PivotColumnAnnotationId]: true,\n title: 'Pivot column',\n }),\n ),\n});\n\nconst KANBAN_OPERATION = `${meta.id}/operation`;\n\nexport namespace KanbanOperation {\n export const DeleteCardFieldOutput = Schema.Struct({\n field: 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\n export type DeleteCardFieldOutput = Schema.Schema.Type<typeof DeleteCardFieldOutput>;\n\n export const DeleteCardField = Operation.make({\n meta: { key: `${KANBAN_OPERATION}/delete-card-field`, name: 'Delete Card Field' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n view: View.View,\n fieldId: Schema.String,\n }),\n output: DeleteCardFieldOutput,\n },\n });\n\n export const DeleteCardOutput = Schema.Struct({\n card: Schema.Any.annotations({ description: 'The deleted card.' }),\n });\n\n export type DeleteCardOutput = Schema.Schema.Type<typeof DeleteCardOutput>;\n\n export const DeleteCard = Operation.make({\n meta: { key: `${KANBAN_OPERATION}/delete-card`, name: 'Delete Card' },\n schema: {\n input: Schema.Struct({\n card: Schema.Any,\n }),\n output: DeleteCardOutput,\n },\n });\n\n /**\n * Restore a deleted card field (inverse of DeleteCardField).\n */\n export const RestoreCardField = Operation.make({\n meta: { key: `${KANBAN_OPERATION}/restore-card-field`, name: 'Restore Card Field' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n view: View.View.annotations({ description: 'The view to restore the field to.' }),\n field: 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 });\n\n /**\n * Restore a deleted card (inverse of DeleteCard).\n */\n export const RestoreCard = Operation.make({\n meta: { key: `${KANBAN_OPERATION}/restore-card`, name: 'Restore Card' },\n schema: {\n input: Schema.Struct({\n card: Schema.Any.annotations({ description: 'The card to restore.' }),\n }),\n output: Schema.Void,\n },\n });\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'dxos.org/plugin/kanban',\n name: 'Kanban',\n description: trim`\n Visual project management using customizable kanban boards to track workflow progress.\n Organize table data into columns, drag and drop items between stages, and trigger automations based on status changes.\n `,\n icon: 'ph--kanban--regular',\n iconHue: 'green',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-kanban',\n screenshots: ['https://dxos.network/plugin-details-kanban-dark.png'],\n};\n"],
|
|
5
|
-
"mappings": ";AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,iBAAiB;AAC1B,SAASC,kCAAkC;AAC3C,SAASC,aAAaC,YAAY;;;ACJlC,SAASC,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,aAAa;IAAC;;AAChB;;;ADKO,IAAMC,0BAA0BC,OAAOC,IAAI,4CAAA;AAE3C,IAAMC,iBAAwBC,cAAO;EAC1CC,eAAsBC,cAAOC,YAAY;IACvCC,OAAO;EACT,CAAA;AACF,CAAA;AAEO,IAAMC,qBAA4BL,cAAO;EAC9CM,MAAaC,gBAAgBL,aAAM;;EAEnCM,UAAiBN,cAAOO,KACfN,mBAAY;IAAEC,OAAO;EAAmB,CAAA,GAC/CM,2BAA2BC,IAAI;IAC7BC,UAAU;MAAC;MAAY;;IACvBC,MAAM;MAAC;;IACPC,YAAY;MAAC;;EACf,CAAA,GACOP,eAAQ;EAEjBQ,oBAA2BR,gBAClBL,cAAOC,YAAY;IACxB,CAACP,uBAAAA,GAA0B;IAC3BQ,OAAO;EACT,CAAA,CAAA;AAEJ,CAAA;AAEA,IAAMY,mBAAmB,GAAGC,KAAKC,EAAE;UAElBC,kBAAAA;mBACFC,wBAA+BpB,cAAO;IACjDqB,OAAOC,YAAYnB,YAAY;MAAEoB,aAAa;IAA4B,CAAA;IAC1EC,OAAcC,WAAItB,YAAY;MAAEoB,aAAa;IAAgC,CAAA;IAC7EG,OAAcC,cAAOxB,YAAY;MAAEoB,aAAa;IAA8B,CAAA;EAChF,CAAA;mBAIaK,kBAAkBC,UAAUC,KAAK;IAC5Cb,MAAM;MAAEc,KAAK,GAAGf,gBAAAA;MAAsCV,MAAM;IAAoB;IAChF0B,UAAU;MAACC,WAAWC;;IACtBC,QAAQ;MACNC,OAAcpC,cAAO;QACnBqC,MAAMC,KAAKA;QACXC,SAAgBrC;MAClB,CAAA;MACAsC,QAAMrB,iBAAEC;IACV;EACF,CAAA;mBAEaqB,mBAA0BzC,cAAO;IAC5C0C,MAAajB,WAAItB,YAAY;MAAEoB,aAAa;IAAoB,CAAA;EAClE,CAAA;mBAIaoB,aAAad,UAAUC,KAAK;IACvCb,MAAM;MAAEc,KAAK,GAAGf,gBAAAA;MAAgCV,MAAM;IAAc;IACpE6B,QAAQ;MACNC,OAAcpC,cAAO;QACnB0C,MAAajB;MACf,CAAA;MACAe,QAAMrB,iBAAEsB;IACV;EACF,CAAA;mBAKaG,mBAAmBf,UAAUC,KAAK;IAC7Cb,MAAM;MAAEc,KAAK,GAAGf,gBAAAA;MAAuCV,MAAM;IAAqB;IAClF0B,UAAU;MAACC,WAAWC;;IACtBC,QAAQ;MACNC,OAAcpC,cAAO;QACnBqC,MAAMC,KAAKA,KAAKnC,YAAY;UAAEoB,aAAa;QAAoC,CAAA;QAC/EF,OAAOC,YAAYnB,YAAY;UAAEoB,aAAa;QAA+B,CAAA;QAC7EC,OAAcC,WAAItB,YAAY;UAAEoB,aAAa;QAAmC,CAAA;QAChFG,OAAcC,cAAOxB,YAAY;UAAEoB,aAAa;QAAqC,CAAA;MACvF,CAAA;MACAiB,QAAeK;IACjB;EACF,CAAA;mBAKaC,cAAcjB,UAAUC,KAAK;IACxCb,MAAM;MAAEc,KAAK,GAAGf,gBAAAA;MAAiCV,MAAM;IAAe;IACtE6B,QAAQ;MACNC,OAAcpC,cAAO;QACnB0C,MAAajB,WAAItB,YAAY;UAAEoB,aAAa;QAAuB,CAAA;MACrE,CAAA;MACAiB,QAAeK;IACjB;EACF,CAAA;AACF,GAlEiB1B,oBAAAA,kBAAAA,CAAAA,EAAAA;;",
|
|
6
|
-
"names": ["Schema", "Capability", "Operation", "TypeInputOptionsAnnotation", "FieldSchema", "View", "trim", "meta", "id", "name", "description", "trim", "icon", "iconHue", "source", "screenshots", "PivotColumnAnnotationId", "Symbol", "for", "SettingsSchema", "Struct", "columnFieldId", "String", "annotations", "title", "CreateKanbanSchema", "name", "optional", "typename", "pipe", "TypeInputOptionsAnnotation", "set", "location", "kind", "registered", "initialPivotColumn", "KANBAN_OPERATION", "meta", "id", "KanbanOperation", "DeleteCardFieldOutput", "field", "FieldSchema", "description", "props", "Any", "index", "Number", "DeleteCardField", "Operation", "make", "key", "services", "Capability", "Service", "schema", "input", "view", "View", "fieldId", "output", "DeleteCardOutput", "card", "DeleteCard", "RestoreCardField", "Void", "RestoreCard"]
|
|
7
|
-
}
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
KanbanOperation,
|
|
3
|
-
meta
|
|
4
|
-
} from "./chunk-XYQO4VL7.mjs";
|
|
5
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
6
|
-
|
|
7
|
-
// src/capabilities/operation-resolver/operation-resolver.ts
|
|
8
|
-
import * as Effect from "effect/Effect";
|
|
9
|
-
import { Capability, Common, UndoMapping } from "@dxos/app-framework";
|
|
10
|
-
import { JsonSchema, Obj } from "@dxos/echo";
|
|
11
|
-
import { invariant } from "@dxos/invariant";
|
|
12
|
-
import { OperationResolver } from "@dxos/operation";
|
|
13
|
-
import { ProjectionModel, createEchoChangeCallback, getTypenameFromQuery } from "@dxos/schema";
|
|
14
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-kanban/src/capabilities/operation-resolver/operation-resolver.ts";
|
|
15
|
-
var operation_resolver_default = Capability.makeModule(() => Effect.succeed([
|
|
16
|
-
Capability.contributes(Common.Capability.UndoMapping, [
|
|
17
|
-
UndoMapping.make({
|
|
18
|
-
operation: KanbanOperation.DeleteCardField,
|
|
19
|
-
inverse: KanbanOperation.RestoreCardField,
|
|
20
|
-
deriveContext: (input, output) => ({
|
|
21
|
-
view: input.view,
|
|
22
|
-
field: output.field,
|
|
23
|
-
props: output.props,
|
|
24
|
-
index: output.index
|
|
25
|
-
}),
|
|
26
|
-
message: [
|
|
27
|
-
"card field deleted label",
|
|
28
|
-
{
|
|
29
|
-
ns: meta.id
|
|
30
|
-
}
|
|
31
|
-
]
|
|
32
|
-
}),
|
|
33
|
-
UndoMapping.make({
|
|
34
|
-
operation: KanbanOperation.DeleteCard,
|
|
35
|
-
inverse: KanbanOperation.RestoreCard,
|
|
36
|
-
deriveContext: (_input, output) => ({
|
|
37
|
-
card: output.card
|
|
38
|
-
}),
|
|
39
|
-
message: [
|
|
40
|
-
"card deleted label",
|
|
41
|
-
{
|
|
42
|
-
ns: meta.id
|
|
43
|
-
}
|
|
44
|
-
]
|
|
45
|
-
})
|
|
46
|
-
]),
|
|
47
|
-
Capability.contributes(Common.Capability.OperationResolver, [
|
|
48
|
-
OperationResolver.make({
|
|
49
|
-
operation: KanbanOperation.DeleteCardField,
|
|
50
|
-
handler: Effect.fnUntraced(function* ({ view, fieldId }) {
|
|
51
|
-
const registry = yield* Capability.get(Common.Capability.AtomRegistry);
|
|
52
|
-
const db = Obj.getDatabase(view);
|
|
53
|
-
invariant(db, "Database not found", {
|
|
54
|
-
F: __dxlog_file,
|
|
55
|
-
L: 46,
|
|
56
|
-
S: this,
|
|
57
|
-
A: [
|
|
58
|
-
"db",
|
|
59
|
-
"'Database not found'"
|
|
60
|
-
]
|
|
61
|
-
});
|
|
62
|
-
const schema = yield* Effect.promise(() => db.schemaRegistry.query({
|
|
63
|
-
typename: getTypenameFromQuery(view.query.ast),
|
|
64
|
-
location: [
|
|
65
|
-
"database",
|
|
66
|
-
"runtime"
|
|
67
|
-
]
|
|
68
|
-
}).first());
|
|
69
|
-
const projection = new ProjectionModel({
|
|
70
|
-
registry,
|
|
71
|
-
view,
|
|
72
|
-
baseSchema: JsonSchema.toJsonSchema(schema),
|
|
73
|
-
change: createEchoChangeCallback(view, schema)
|
|
74
|
-
});
|
|
75
|
-
const result = projection.deleteFieldProjection(fieldId);
|
|
76
|
-
return {
|
|
77
|
-
field: result.deleted.field,
|
|
78
|
-
props: result.deleted.props,
|
|
79
|
-
index: result.index
|
|
80
|
-
};
|
|
81
|
-
})
|
|
82
|
-
}),
|
|
83
|
-
OperationResolver.make({
|
|
84
|
-
operation: KanbanOperation.DeleteCard,
|
|
85
|
-
handler: ({ card }) => Effect.sync(() => {
|
|
86
|
-
const db = Obj.getDatabase(card);
|
|
87
|
-
invariant(db, void 0, {
|
|
88
|
-
F: __dxlog_file,
|
|
89
|
-
L: 80,
|
|
90
|
-
S: void 0,
|
|
91
|
-
A: [
|
|
92
|
-
"db",
|
|
93
|
-
""
|
|
94
|
-
]
|
|
95
|
-
});
|
|
96
|
-
db.remove(card);
|
|
97
|
-
return {
|
|
98
|
-
card
|
|
99
|
-
};
|
|
100
|
-
})
|
|
101
|
-
}),
|
|
102
|
-
//
|
|
103
|
-
// RestoreCardField (inverse of DeleteCardField)
|
|
104
|
-
//
|
|
105
|
-
OperationResolver.make({
|
|
106
|
-
operation: KanbanOperation.RestoreCardField,
|
|
107
|
-
handler: Effect.fnUntraced(function* ({ view, field, props, index }) {
|
|
108
|
-
const registry = yield* Capability.get(Common.Capability.AtomRegistry);
|
|
109
|
-
const db = Obj.getDatabase(view);
|
|
110
|
-
invariant(db, "Database not found", {
|
|
111
|
-
F: __dxlog_file,
|
|
112
|
-
L: 96,
|
|
113
|
-
S: this,
|
|
114
|
-
A: [
|
|
115
|
-
"db",
|
|
116
|
-
"'Database not found'"
|
|
117
|
-
]
|
|
118
|
-
});
|
|
119
|
-
const schema = yield* Effect.promise(() => db.schemaRegistry.query({
|
|
120
|
-
typename: getTypenameFromQuery(view.query.ast),
|
|
121
|
-
location: [
|
|
122
|
-
"database",
|
|
123
|
-
"runtime"
|
|
124
|
-
]
|
|
125
|
-
}).first());
|
|
126
|
-
const projection = new ProjectionModel({
|
|
127
|
-
registry,
|
|
128
|
-
view,
|
|
129
|
-
baseSchema: JsonSchema.toJsonSchema(schema),
|
|
130
|
-
change: createEchoChangeCallback(view, schema)
|
|
131
|
-
});
|
|
132
|
-
projection.setFieldProjection({
|
|
133
|
-
field,
|
|
134
|
-
props
|
|
135
|
-
}, index);
|
|
136
|
-
})
|
|
137
|
-
}),
|
|
138
|
-
//
|
|
139
|
-
// RestoreCard (inverse of DeleteCard)
|
|
140
|
-
//
|
|
141
|
-
OperationResolver.make({
|
|
142
|
-
operation: KanbanOperation.RestoreCard,
|
|
143
|
-
handler: ({ card }) => Effect.sync(() => {
|
|
144
|
-
const db = Obj.getDatabase(card);
|
|
145
|
-
invariant(db, void 0, {
|
|
146
|
-
F: __dxlog_file,
|
|
147
|
-
L: 127,
|
|
148
|
-
S: void 0,
|
|
149
|
-
A: [
|
|
150
|
-
"db",
|
|
151
|
-
""
|
|
152
|
-
]
|
|
153
|
-
});
|
|
154
|
-
db.add(card);
|
|
155
|
-
})
|
|
156
|
-
})
|
|
157
|
-
])
|
|
158
|
-
]));
|
|
159
|
-
export {
|
|
160
|
-
operation_resolver_default as default
|
|
161
|
-
};
|
|
162
|
-
//# sourceMappingURL=operation-resolver-UEJHX42A.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/operation-resolver/operation-resolver.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common, UndoMapping } from '@dxos/app-framework';\nimport { JsonSchema, Obj } from '@dxos/echo';\nimport { type EchoSchema } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { OperationResolver } from '@dxos/operation';\nimport { ProjectionModel, createEchoChangeCallback, getTypenameFromQuery } from '@dxos/schema';\n\nimport { meta } from '../../meta';\nimport { KanbanOperation } from '../../types';\n\nexport default Capability.makeModule(() =>\n Effect.succeed([\n Capability.contributes(Common.Capability.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.id }],\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.id }],\n }),\n ]),\n Capability.contributes(Common.Capability.OperationResolver, [\n OperationResolver.make({\n operation: KanbanOperation.DeleteCardField,\n handler: Effect.fnUntraced(function* ({ view, fieldId }) {\n const registry = yield* Capability.get(Common.Capability.AtomRegistry);\n const db = Obj.getDatabase(view);\n invariant(db, 'Database not found');\n const schema = yield* Effect.promise(() =>\n db.schemaRegistry\n .query({\n typename: getTypenameFromQuery(view.query.ast)!,\n location: ['database', 'runtime'],\n })\n .first(),\n );\n\n // Create projection with change callbacks that wrap in Obj.change().\n // Schema from registry is an EchoSchema at runtime.\n const projection = new ProjectionModel({\n registry,\n view,\n baseSchema: JsonSchema.toJsonSchema(schema),\n change: createEchoChangeCallback(view, schema as EchoSchema),\n });\n\n const result = projection.deleteFieldProjection(fieldId);\n\n // Return data needed for undo.\n return {\n field: result.deleted.field,\n props: result.deleted.props,\n index: result.index,\n };\n }),\n }),\n OperationResolver.make({\n operation: KanbanOperation.DeleteCard,\n handler: ({ card }) =>\n Effect.sync(() => {\n const db = Obj.getDatabase(card);\n invariant(db);\n db.remove(card);\n\n // Return data needed for undo.\n return { card };\n }),\n }),\n\n //\n // RestoreCardField (inverse of DeleteCardField)\n //\n OperationResolver.make({\n operation: KanbanOperation.RestoreCardField,\n handler: Effect.fnUntraced(function* ({ view, field, props, index }) {\n const registry = yield* Capability.get(Common.Capability.AtomRegistry);\n const db = Obj.getDatabase(view);\n invariant(db, 'Database not found');\n const schema = yield* Effect.promise(() =>\n db.schemaRegistry\n .query({\n typename: getTypenameFromQuery(view.query.ast)!,\n location: ['database', 'runtime'],\n })\n .first(),\n );\n\n // Create projection with change callbacks that wrap in Obj.change().\n // Schema from registry is an EchoSchema at runtime.\n const projection = new ProjectionModel({\n registry,\n view,\n baseSchema: JsonSchema.toJsonSchema(schema),\n change: createEchoChangeCallback(view, schema as EchoSchema),\n });\n\n projection.setFieldProjection({ field, props }, index);\n }),\n }),\n\n //\n // RestoreCard (inverse of DeleteCard)\n //\n OperationResolver.make({\n operation: KanbanOperation.RestoreCard,\n handler: ({ card }) =>\n Effect.sync(() => {\n const db = Obj.getDatabase(card);\n invariant(db);\n db.add(card);\n }),\n }),\n ]),\n ]),\n);\n"],
|
|
5
|
-
"mappings": ";;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,YAAYC,QAAQC,mBAAmB;AAChD,SAASC,YAAYC,WAAW;AAEhC,SAASC,iBAAiB;AAC1B,SAASC,yBAAyB;AAClC,SAASC,iBAAiBC,0BAA0BC,4BAA4B;;AAKhF,IAAA,6BAAeC,WAAWC,WAAW,MAC5BC,eAAQ;EACbF,WAAWG,YAAYC,OAAOJ,WAAWK,aAAa;IACpDA,YAAYC,KAAK;MACfC,WAAWC,gBAAgBC;MAC3BC,SAASF,gBAAgBG;MACzBC,eAAe,CAACC,OAAOC,YAAY;QACjCC,MAAMF,MAAME;QACZC,OAAOF,OAAOE;QACdC,OAAOH,OAAOG;QACdC,OAAOJ,OAAOI;MAChB;MACAC,SAAS;QAAC;QAA4B;UAAEC,IAAIC,KAAKC;QAAG;;IACtD,CAAA;IACAjB,YAAYC,KAAK;MACfC,WAAWC,gBAAgBe;MAC3Bb,SAASF,gBAAgBgB;MACzBZ,eAAe,CAACa,QAAQX,YAAY;QAClCY,MAAMZ,OAAOY;MACf;MACAP,SAAS;QAAC;QAAsB;UAAEC,IAAIC,KAAKC;QAAG;;IAChD,CAAA;GACD;EACDtB,WAAWG,YAAYC,OAAOJ,WAAW2B,mBAAmB;IAC1DA,kBAAkBrB,KAAK;MACrBC,WAAWC,gBAAgBC;MAC3BmB,SAAgBC,kBAAW,WAAW,EAAEd,MAAMe,QAAO,GAAE;AACrD,cAAMC,WAAW,OAAO/B,WAAWgC,IAAI5B,OAAOJ,WAAWiC,YAAY;AACrE,cAAMC,KAAKC,IAAIC,YAAYrB,IAAAA;AAC3BsB,kBAAUH,IAAI,sBAAA;;;;;;;;;AACd,cAAMI,SAAS,OAAcC,eAAQ,MACnCL,GAAGM,eACAC,MAAM;UACLC,UAAUC,qBAAqB5B,KAAK0B,MAAMG,GAAG;UAC7CC,UAAU;YAAC;YAAY;;QACzB,CAAA,EACCC,MAAK,CAAA;AAKV,cAAMC,aAAa,IAAIC,gBAAgB;UACrCjB;UACAhB;UACAkC,YAAYC,WAAWC,aAAab,MAAAA;UACpCc,QAAQC,yBAAyBtC,MAAMuB,MAAAA;QACzC,CAAA;AAEA,cAAMgB,SAASP,WAAWQ,sBAAsBzB,OAAAA;AAGhD,eAAO;UACLd,OAAOsC,OAAOE,QAAQxC;UACtBC,OAAOqC,OAAOE,QAAQvC;UACtBC,OAAOoC,OAAOpC;QAChB;MACF,CAAA;IACF,CAAA;IACAS,kBAAkBrB,KAAK;MACrBC,WAAWC,gBAAgBe;MAC3BK,SAAS,CAAC,EAAEF,KAAI,MACP+B,YAAK,MAAA;AACV,cAAMvB,KAAKC,IAAIC,YAAYV,IAAAA;AAC3BW,kBAAUH,IAAAA,QAAAA;;;;;;;;;AACVA,WAAGwB,OAAOhC,IAAAA;AAGV,eAAO;UAAEA;QAAK;MAChB,CAAA;IACJ,CAAA;;;;IAKAC,kBAAkBrB,KAAK;MACrBC,WAAWC,gBAAgBG;MAC3BiB,SAAgBC,kBAAW,WAAW,EAAEd,MAAMC,OAAOC,OAAOC,MAAK,GAAE;AACjE,cAAMa,WAAW,OAAO/B,WAAWgC,IAAI5B,OAAOJ,WAAWiC,YAAY;AACrE,cAAMC,KAAKC,IAAIC,YAAYrB,IAAAA;AAC3BsB,kBAAUH,IAAI,sBAAA;;;;;;;;;AACd,cAAMI,SAAS,OAAcC,eAAQ,MACnCL,GAAGM,eACAC,MAAM;UACLC,UAAUC,qBAAqB5B,KAAK0B,MAAMG,GAAG;UAC7CC,UAAU;YAAC;YAAY;;QACzB,CAAA,EACCC,MAAK,CAAA;AAKV,cAAMC,aAAa,IAAIC,gBAAgB;UACrCjB;UACAhB;UACAkC,YAAYC,WAAWC,aAAab,MAAAA;UACpCc,QAAQC,yBAAyBtC,MAAMuB,MAAAA;QACzC,CAAA;AAEAS,mBAAWY,mBAAmB;UAAE3C;UAAOC;QAAM,GAAGC,KAAAA;MAClD,CAAA;IACF,CAAA;;;;IAKAS,kBAAkBrB,KAAK;MACrBC,WAAWC,gBAAgBgB;MAC3BI,SAAS,CAAC,EAAEF,KAAI,MACP+B,YAAK,MAAA;AACV,cAAMvB,KAAKC,IAAIC,YAAYV,IAAAA;AAC3BW,kBAAUH,IAAAA,QAAAA;;;;;;;;;AACVA,WAAG0B,IAAIlC,IAAAA;MACT,CAAA;IACJ,CAAA;GACD;CACF,CAAA;",
|
|
6
|
-
"names": ["Effect", "Capability", "Common", "UndoMapping", "JsonSchema", "Obj", "invariant", "OperationResolver", "ProjectionModel", "createEchoChangeCallback", "getTypenameFromQuery", "Capability", "makeModule", "succeed", "contributes", "Common", "UndoMapping", "make", "operation", "KanbanOperation", "DeleteCardField", "inverse", "RestoreCardField", "deriveContext", "input", "output", "view", "field", "props", "index", "message", "ns", "meta", "id", "DeleteCard", "RestoreCard", "_input", "card", "OperationResolver", "handler", "fnUntraced", "fieldId", "registry", "get", "AtomRegistry", "db", "Obj", "getDatabase", "invariant", "schema", "promise", "schemaRegistry", "query", "typename", "getTypenameFromQuery", "ast", "location", "first", "projection", "ProjectionModel", "baseSchema", "JsonSchema", "toJsonSchema", "change", "createEchoChangeCallback", "result", "deleteFieldProjection", "deleted", "sync", "remove", "setFieldProjection", "add"]
|
|
7
|
-
}
|