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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/lib/browser/{chunk-L4PZ5BVV.mjs → chunk-CX6EJQUM.mjs} +5 -2
  2. package/dist/lib/browser/{chunk-L4PZ5BVV.mjs.map → chunk-CX6EJQUM.mjs.map} +3 -3
  3. package/dist/lib/browser/index.mjs +7 -7
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/intent-resolver-WZK6U7AV.mjs +76 -0
  6. package/dist/lib/browser/intent-resolver-WZK6U7AV.mjs.map +7 -0
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/{react-surface-KCOBVPKL.mjs → react-surface-23WY6Y2I.mjs} +113 -53
  9. package/dist/lib/browser/react-surface-23WY6Y2I.mjs.map +7 -0
  10. package/dist/lib/browser/types.mjs +1 -1
  11. package/dist/lib/node/{chunk-QCB2U2J2.cjs → chunk-LCX4U4ES.cjs} +8 -5
  12. package/dist/lib/node/{chunk-QCB2U2J2.cjs.map → chunk-LCX4U4ES.cjs.map} +3 -3
  13. package/dist/lib/node/index.cjs +17 -17
  14. package/dist/lib/node/index.cjs.map +3 -3
  15. package/dist/lib/node/intent-resolver-FJATJZJ7.cjs +90 -0
  16. package/dist/lib/node/intent-resolver-FJATJZJ7.cjs.map +7 -0
  17. package/dist/lib/node/meta.json +1 -1
  18. package/dist/lib/node/{react-surface-MOZ2OTXW.cjs → react-surface-DYOAOKIF.cjs} +120 -60
  19. package/dist/lib/node/react-surface-DYOAOKIF.cjs.map +7 -0
  20. package/dist/lib/node/types.cjs +4 -4
  21. package/dist/lib/node/types.cjs.map +1 -1
  22. package/dist/lib/node-esm/{chunk-PNSRVZBP.mjs → chunk-D3NDCI33.mjs} +5 -2
  23. package/dist/lib/node-esm/{chunk-PNSRVZBP.mjs.map → chunk-D3NDCI33.mjs.map} +3 -3
  24. package/dist/lib/node-esm/index.mjs +7 -7
  25. package/dist/lib/node-esm/index.mjs.map +3 -3
  26. package/dist/lib/node-esm/intent-resolver-MBXQL2BL.mjs +77 -0
  27. package/dist/lib/node-esm/intent-resolver-MBXQL2BL.mjs.map +7 -0
  28. package/dist/lib/node-esm/meta.json +1 -1
  29. package/dist/lib/node-esm/{react-surface-HNVSKYHF.mjs → react-surface-P6FJM7SN.mjs} +113 -53
  30. package/dist/lib/node-esm/react-surface-P6FJM7SN.mjs.map +7 -0
  31. package/dist/lib/node-esm/types.mjs +1 -1
  32. package/dist/types/src/KanbanPlugin.d.ts.map +1 -1
  33. package/dist/types/src/capabilities/index.d.ts +2 -2
  34. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  35. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  36. package/dist/types/src/components/KanbanContainer.d.ts.map +1 -1
  37. package/dist/types/src/components/KanbanViewEditor.d.ts.map +1 -1
  38. package/dist/types/src/meta.d.ts +1 -0
  39. package/dist/types/src/meta.d.ts.map +1 -1
  40. package/package.json +21 -21
  41. package/src/KanbanPlugin.tsx +4 -12
  42. package/src/capabilities/intent-resolver.ts +27 -21
  43. package/src/components/KanbanContainer.tsx +30 -29
  44. package/src/components/KanbanViewEditor.tsx +55 -37
  45. package/src/meta.ts +3 -1
  46. package/dist/lib/browser/intent-resolver-ILMGO3TT.mjs +0 -70
  47. package/dist/lib/browser/intent-resolver-ILMGO3TT.mjs.map +0 -7
  48. package/dist/lib/browser/react-surface-KCOBVPKL.mjs.map +0 -7
  49. package/dist/lib/node/intent-resolver-6QZ6AMZF.cjs +0 -84
  50. package/dist/lib/node/intent-resolver-6QZ6AMZF.cjs.map +0 -7
  51. package/dist/lib/node/react-surface-MOZ2OTXW.cjs.map +0 -7
  52. package/dist/lib/node-esm/intent-resolver-LRZVOK2C.mjs +0 -71
  53. package/dist/lib/node-esm/intent-resolver-LRZVOK2C.mjs.map +0 -7
  54. package/dist/lib/node-esm/react-surface-HNVSKYHF.mjs.map +0 -7
@@ -10,15 +10,35 @@ import { useGlobalFilteredObjects } from '@dxos/plugin-search';
10
10
  import { Filter, useQuery, getSpace, create } from '@dxos/react-client/echo';
11
11
  import { type KanbanType, useKanbanModel, Kanban } from '@dxos/react-ui-kanban';
12
12
  import { StackItem } from '@dxos/react-ui-stack';
13
+ import { ViewProjection } from '@dxos/schema';
13
14
 
14
15
  export const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {
15
16
  const [cardSchema, setCardSchema] = useState<EchoSchema>();
17
+ const [projection, setProjection] = useState<ViewProjection>();
16
18
  const space = getSpace(kanban);
19
+
20
+ useEffect(() => {
21
+ if (kanban.cardView?.target?.query?.type && space) {
22
+ const query = space.db.schemaRegistry.query({ typename: kanban.cardView.target.query.type });
23
+ const unsubscribe = query.subscribe(
24
+ () => {
25
+ const [schema] = query.results;
26
+ if (schema) {
27
+ setCardSchema(schema);
28
+ }
29
+ },
30
+ { fire: true },
31
+ );
32
+ return unsubscribe;
33
+ }
34
+ }, [kanban.cardView?.target?.query, space]);
35
+
17
36
  useEffect(() => {
18
- if (kanban.cardView && space) {
19
- setCardSchema(space.db.schemaRegistry.getSchema(kanban.cardView.target!.query.type));
37
+ if (kanban.cardView?.target && cardSchema) {
38
+ setProjection(new ViewProjection(cardSchema, kanban.cardView.target));
20
39
  }
21
- }, [kanban.cardView, space]);
40
+ // TODO(ZaymonFC): Is there a better way to get notified about deep changes in the json schema?
41
+ }, [kanban.cardView?.target, cardSchema, JSON.stringify(cardSchema?.jsonSchema)]);
22
42
 
23
43
  const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());
24
44
  const filteredObjects = useGlobalFilteredObjects(objects);
@@ -26,24 +46,18 @@ export const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }
26
46
  const model = useKanbanModel({
27
47
  kanban,
28
48
  cardSchema,
49
+ projection,
29
50
  items: filteredObjects,
30
51
  });
31
52
 
32
- const handleAddColumn = useCallback((columnValue: string) => model?.addEmptyColumn(columnValue), [model]);
33
-
34
53
  const handleAddCard = useCallback(
35
- (columnValue: string) => {
36
- if (space && cardSchema) {
37
- space.db.add(
38
- create(cardSchema, {
39
- title: '',
40
- description: '',
41
- state: columnValue,
42
- }),
43
- );
54
+ (columnValue: string | undefined) => {
55
+ const path = model?.columnFieldPath;
56
+ if (space && cardSchema && path) {
57
+ space.db.add(create(cardSchema, { [path]: columnValue }));
44
58
  }
45
59
  },
46
- [space, cardSchema],
60
+ [space, cardSchema, model],
47
61
  );
48
62
 
49
63
  const handleRemoveCard = useCallback(
@@ -54,23 +68,10 @@ export const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }
54
68
  [space],
55
69
  );
56
70
 
57
- const handleRemoveEmptyColumn = useCallback(
58
- (columnValue: string) => {
59
- model?.removeColumnFromArrangement(columnValue);
60
- },
61
- [model],
62
- );
63
-
64
71
  return (
65
72
  <StackItem.Content toolbar={false}>
66
73
  {model ? (
67
- <Kanban
68
- model={model}
69
- onAddCard={handleAddCard}
70
- onAddColumn={handleAddColumn}
71
- onRemoveCard={handleRemoveCard}
72
- onRemoveEmptyColumn={handleRemoveEmptyColumn}
73
- />
74
+ <Kanban model={model} onAddCard={handleAddCard} onRemoveCard={handleRemoveCard} />
74
75
  ) : (
75
76
  <span>Loading</span>
76
77
  )}
@@ -1,14 +1,16 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
5
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
6
6
 
7
7
  import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { type EchoSchema, FormatEnum } from '@dxos/echo-schema';
9
+ import { invariant } from '@dxos/invariant';
8
10
  import { Filter, getSpace, useQuery } from '@dxos/react-client/echo';
9
- import { ViewEditor, Form } from '@dxos/react-ui-form';
10
- import { type KanbanType, KanbanPropsSchema } from '@dxos/react-ui-kanban';
11
- import { ViewType } from '@dxos/schema';
11
+ import { ViewEditor, Form, SelectInput, type CustomInputMap } from '@dxos/react-ui-form';
12
+ import { type KanbanType, KanbanSettingsSchema } from '@dxos/react-ui-kanban';
13
+ import { ViewType, ViewProjection } from '@dxos/schema';
12
14
 
13
15
  import { KanbanAction } from '../types';
14
16
 
@@ -18,21 +20,29 @@ export const KanbanViewEditor = ({ kanban }: KanbanViewEditorProps) => {
18
20
  const { dispatchPromise: dispatch } = useIntentDispatcher();
19
21
  const space = getSpace(kanban);
20
22
 
21
- // TODO(ZaymonFC): The schema registry needs an API where we can query with initial value and
22
- // endure typename changes. We shouldn't need to manage a subscription at this layer.
23
- const [schema, setSchema] = useState(
24
- space && kanban?.cardView?.target?.query?.type
25
- ? space.db.schemaRegistry.getSchema(kanban.cardView.target.query.type)
26
- : undefined,
27
- );
23
+ const [schema, setSchema] = useState<EchoSchema | undefined>();
24
+
25
+ useEffect(() => {
26
+ if (space && kanban?.cardView?.target?.query?.type) {
27
+ const query = space.db.schemaRegistry.query({ typename: kanban.cardView.target.query.type });
28
+ const unsubscribe = query.subscribe(
29
+ () => {
30
+ const [schema] = query.results;
31
+ if (schema) {
32
+ setSchema(schema);
33
+ }
34
+ },
35
+ { fire: true },
36
+ );
37
+ return unsubscribe;
38
+ }
39
+ }, [space, kanban?.cardView?.target?.query?.type]);
28
40
 
29
41
  const views = useQuery(space, Filter.schema(ViewType));
30
42
  const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.type, [kanban?.cardView?.target?.query?.type]);
31
43
  const updateViewTypename = useCallback(
32
44
  (newTypename: string) => {
33
- if (!schema) {
34
- return;
35
- }
45
+ invariant(schema);
36
46
  const matchingViews = views.filter((view) => view.query.type === currentTypename);
37
47
  for (const view of matchingViews) {
38
48
  view.query.type = newTypename;
@@ -42,40 +52,48 @@ export const KanbanViewEditor = ({ kanban }: KanbanViewEditorProps) => {
42
52
  [views, schema],
43
53
  );
44
54
 
45
- useEffect(() => {
46
- if (space && kanban?.cardView?.target?.query?.type) {
47
- const unsubscribe = space.db.schemaRegistry
48
- .query({ typename: kanban?.cardView?.target?.query?.type })
49
- .subscribe((query) => {
50
- const [schema] = query.results;
51
- if (schema) {
52
- setSchema(schema);
53
- }
54
- });
55
-
56
- return unsubscribe;
57
- }
58
- }, [space, kanban?.cardView?.target?.query?.type]);
59
-
60
55
  const handleDelete = useCallback(
61
56
  (fieldId: string) => dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId })),
62
57
  [dispatch, kanban],
63
58
  );
64
59
 
60
+ const projection = useMemo(() => {
61
+ if (kanban?.cardView?.target && schema) {
62
+ return new ViewProjection(schema, kanban.cardView.target);
63
+ }
64
+ }, [kanban?.cardView?.target, schema, JSON.stringify(schema)]);
65
+
66
+ const selectFields = useMemo(() => {
67
+ if (!projection) {
68
+ return [];
69
+ }
70
+
71
+ return projection
72
+ .getFieldProjections()
73
+ .filter((field) => field.props.format === FormatEnum.SingleSelect)
74
+ .map(({ field }) => ({ value: field.id, label: field.path }));
75
+ }, [projection]);
76
+
77
+ const onSave = useCallback(
78
+ (values: Partial<{ columnFieldId: string }>) => {
79
+ kanban.columnFieldId = values.columnFieldId;
80
+ },
81
+ [kanban],
82
+ );
83
+
84
+ const initialValues = useMemo(() => ({ columnFieldId: kanban.columnFieldId }), [kanban]);
85
+ const custom: CustomInputMap = useMemo(
86
+ () => ({ columnFieldId: (props) => <SelectInput {...props} options={selectFields} /> }),
87
+ [selectFields],
88
+ );
89
+
65
90
  if (!space || !schema || !kanban.cardView?.target) {
66
91
  return null;
67
92
  }
68
93
 
69
94
  return (
70
95
  <>
71
- <Form
72
- schema={KanbanPropsSchema}
73
- values={{ columnField: kanban.columnField }}
74
- onSave={({ columnField }) => {
75
- kanban.columnField = columnField;
76
- kanban.arrangement = undefined;
77
- }}
78
- />
96
+ <Form schema={KanbanSettingsSchema} values={initialValues} onSave={onSave} autoSave Custom={custom} />
79
97
  <ViewEditor
80
98
  registry={space.db.schemaRegistry}
81
99
  schema={schema}
package/src/meta.ts CHANGED
@@ -9,8 +9,10 @@ export const KANBAN_PLUGIN = 'dxos.org/plugin/kanban';
9
9
  export const meta = {
10
10
  id: KANBAN_PLUGIN,
11
11
  name: 'Kanban',
12
- description: 'Kanban board for managing tasks.',
12
+ description:
13
+ 'Kanban allows you to explore Table data in sorted columns defined by your custom schema. You can use Kanbans to track progress or trigger custom automations when cards are moved from one state to another.',
13
14
  icon: 'ph--kanban--regular',
14
15
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-kanban',
15
16
  tags: ['experimental'],
17
+ screenshots: ['https://dxos.network/plugin-details-kanban-dark.png'],
16
18
  } satisfies PluginMeta;
@@ -1,70 +0,0 @@
1
- import {
2
- KANBAN_PLUGIN,
3
- KanbanAction,
4
- createKanban
5
- } from "./chunk-L4PZ5BVV.mjs";
6
-
7
- // packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts
8
- import { contributes, Capabilities, createResolver } from "@dxos/app-framework";
9
- import { invariant } from "@dxos/invariant";
10
- import { getSpace } from "@dxos/react-client/echo";
11
- import { ViewProjection } from "@dxos/schema";
12
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts";
13
- var intent_resolver_default = () => contributes(Capabilities.IntentResolver, [
14
- createResolver(KanbanAction.Create, async ({ space }) => ({
15
- data: {
16
- object: await createKanban(space)
17
- }
18
- })),
19
- createResolver(KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {
20
- invariant(kanban.cardView, void 0, {
21
- F: __dxlog_file,
22
- L: 19,
23
- S: void 0,
24
- A: [
25
- "kanban.cardView",
26
- ""
27
- ]
28
- });
29
- const schema = kanban.cardView.target && getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);
30
- invariant(schema, void 0, {
31
- F: __dxlog_file,
32
- L: 23,
33
- S: void 0,
34
- A: [
35
- "schema",
36
- ""
37
- ]
38
- });
39
- const projection = new ViewProjection(schema, kanban.cardView.target);
40
- if (!undo) {
41
- const { deleted, index } = projection.deleteFieldProjection(fieldId);
42
- return {
43
- undoable: {
44
- message: [
45
- "card field deleted label",
46
- {
47
- ns: KANBAN_PLUGIN
48
- }
49
- ],
50
- data: {
51
- deletionData: {
52
- ...deleted,
53
- index
54
- }
55
- }
56
- }
57
- };
58
- } else if (undo && deletionData) {
59
- const { field, props, index } = deletionData;
60
- projection.setFieldProjection({
61
- field,
62
- props
63
- }, index);
64
- }
65
- })
66
- ]);
67
- export {
68
- intent_resolver_default as default
69
- };
70
- //# sourceMappingURL=intent-resolver-ILMGO3TT.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, Capabilities, createResolver } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { ViewProjection } from '@dxos/schema';\n\nimport { KANBAN_PLUGIN } from '../meta';\nimport { createKanban, KanbanAction } from '../types';\n\nexport default () =>\n contributes(Capabilities.IntentResolver, [\n createResolver(KanbanAction.Create, async ({ space }) => ({\n data: { object: await createKanban(space) },\n })),\n createResolver(KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {\n invariant(kanban.cardView);\n\n const schema =\n kanban.cardView.target && getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);\n invariant(schema);\n const projection = new ViewProjection(schema, kanban.cardView.target!);\n\n if (!undo) {\n const { deleted, index } = projection.deleteFieldProjection(fieldId);\n return {\n undoable: {\n message: ['card field deleted label', { ns: KANBAN_PLUGIN }],\n data: { deletionData: { ...deleted, index } },\n },\n };\n } else if (undo && deletionData) {\n const { field, props, index } = deletionData;\n projection.setFieldProjection({ field, props }, index);\n }\n }),\n ]);\n"],
5
- "mappings": ";;;;;;;AAIA,SAASA,aAAaC,cAAcC,sBAAsB;AAC1D,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;;AAK/B,IAAA,0BAAe,MACbC,YAAYC,aAAaC,gBAAgB;EACvCC,eAAeC,aAAaC,QAAQ,OAAO,EAAEC,MAAK,OAAQ;IACxDC,MAAM;MAAEC,QAAQ,MAAMC,aAAaH,KAAAA;IAAO;EAC5C,EAAA;EACAH,eAAeC,aAAaM,iBAAiB,CAAC,EAAEC,QAAQC,SAASC,aAAY,GAAIC,SAAAA;AAC/EC,cAAUJ,OAAOK,UAAQ,QAAA;;;;;;;;;AAEzB,UAAMC,SACJN,OAAOK,SAASE,UAAUC,SAASR,MAAAA,GAASS,GAAGC,eAAeC,UAAUX,OAAOK,SAASE,OAAOK,MAAMC,IAAI;AAC3GT,cAAUE,QAAAA,QAAAA;;;;;;;;;AACV,UAAMQ,aAAa,IAAIC,eAAeT,QAAQN,OAAOK,SAASE,MAAM;AAEpE,QAAI,CAACJ,MAAM;AACT,YAAM,EAAEa,SAASC,MAAK,IAAKH,WAAWI,sBAAsBjB,OAAAA;AAC5D,aAAO;QACLkB,UAAU;UACRC,SAAS;YAAC;YAA4B;cAAEC,IAAIC;YAAc;;UAC1D1B,MAAM;YAAEM,cAAc;cAAE,GAAGc;cAASC;YAAM;UAAE;QAC9C;MACF;IACF,WAAWd,QAAQD,cAAc;AAC/B,YAAM,EAAEqB,OAAOC,OAAOP,MAAK,IAAKf;AAChCY,iBAAWW,mBAAmB;QAAEF;QAAOC;MAAM,GAAGP,KAAAA;IAClD;EACF,CAAA;CACD;",
6
- "names": ["contributes", "Capabilities", "createResolver", "invariant", "getSpace", "ViewProjection", "contributes", "Capabilities", "IntentResolver", "createResolver", "KanbanAction", "Create", "space", "data", "object", "createKanban", "DeleteCardField", "kanban", "fieldId", "deletionData", "undo", "invariant", "cardView", "schema", "target", "getSpace", "db", "schemaRegistry", "getSchema", "query", "type", "projection", "ViewProjection", "deleted", "index", "deleteFieldProjection", "undoable", "message", "ns", "KANBAN_PLUGIN", "field", "props", "setFieldProjection"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/KanbanContainer.tsx", "../../../src/components/KanbanViewEditor.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { type KanbanType } from '@dxos/react-ui-kanban';\n\nimport { KanbanContainer, KanbanViewEditor } from '../components';\nimport { KANBAN_PLUGIN } from '../meta';\nimport { isKanban } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${KANBAN_PLUGIN}/kanban`,\n role: ['article', 'section'],\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data, role }) => <KanbanContainer kanban={data.subject} role={role} />,\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/settings`,\n role: 'complementary--settings',\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data }) => <KanbanViewEditor kanban={data.subject} />,\n }),\n ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { type EchoSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { Filter, useQuery, getSpace, create } from '@dxos/react-client/echo';\nimport { type KanbanType, useKanbanModel, Kanban } from '@dxos/react-ui-kanban';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nexport const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {\n const [cardSchema, setCardSchema] = useState<EchoSchema>();\n const space = getSpace(kanban);\n useEffect(() => {\n if (kanban.cardView && space) {\n setCardSchema(space.db.schemaRegistry.getSchema(kanban.cardView.target!.query.type));\n }\n }, [kanban.cardView, space]);\n\n const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());\n const filteredObjects = useGlobalFilteredObjects(objects);\n\n const model = useKanbanModel({\n kanban,\n cardSchema,\n items: filteredObjects,\n });\n\n const handleAddColumn = useCallback((columnValue: string) => model?.addEmptyColumn(columnValue), [model]);\n\n const handleAddCard = useCallback(\n (columnValue: string) => {\n if (space && cardSchema) {\n space.db.add(\n create(cardSchema, {\n title: '',\n description: '',\n state: columnValue,\n }),\n );\n }\n },\n [space, cardSchema],\n );\n\n const handleRemoveCard = useCallback(\n (card: { id: string }) => {\n invariant(space);\n space.db.remove(card);\n },\n [space],\n );\n\n const handleRemoveEmptyColumn = useCallback(\n (columnValue: string) => {\n model?.removeColumnFromArrangement(columnValue);\n },\n [model],\n );\n\n return (\n <StackItem.Content toolbar={false}>\n {model ? (\n <Kanban\n model={model}\n onAddCard={handleAddCard}\n onAddColumn={handleAddColumn}\n onRemoveCard={handleRemoveCard}\n onRemoveEmptyColumn={handleRemoveEmptyColumn}\n />\n ) : (\n <span>Loading</span>\n )}\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Filter, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { ViewEditor, Form } from '@dxos/react-ui-form';\nimport { type KanbanType, KanbanPropsSchema } from '@dxos/react-ui-kanban';\nimport { ViewType } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\ntype KanbanViewEditorProps = { kanban: KanbanType };\n\nexport const KanbanViewEditor = ({ kanban }: KanbanViewEditorProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const space = getSpace(kanban);\n\n // TODO(ZaymonFC): The schema registry needs an API where we can query with initial value and\n // endure typename changes. We shouldn't need to manage a subscription at this layer.\n const [schema, setSchema] = useState(\n space && kanban?.cardView?.target?.query?.type\n ? space.db.schemaRegistry.getSchema(kanban.cardView.target.query.type)\n : undefined,\n );\n\n const views = useQuery(space, Filter.schema(ViewType));\n const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.type, [kanban?.cardView?.target?.query?.type]);\n const updateViewTypename = useCallback(\n (newTypename: string) => {\n if (!schema) {\n return;\n }\n const matchingViews = views.filter((view) => view.query.type === currentTypename);\n for (const view of matchingViews) {\n view.query.type = newTypename;\n }\n schema.updateTypename(newTypename);\n },\n [views, schema],\n );\n\n useEffect(() => {\n if (space && kanban?.cardView?.target?.query?.type) {\n const unsubscribe = space.db.schemaRegistry\n .query({ typename: kanban?.cardView?.target?.query?.type })\n .subscribe((query) => {\n const [schema] = query.results;\n if (schema) {\n setSchema(schema);\n }\n });\n\n return unsubscribe;\n }\n }, [space, kanban?.cardView?.target?.query?.type]);\n\n const handleDelete = useCallback(\n (fieldId: string) => dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId })),\n [dispatch, kanban],\n );\n\n if (!space || !schema || !kanban.cardView?.target) {\n return null;\n }\n\n return (\n <>\n <Form\n schema={KanbanPropsSchema}\n values={{ columnField: kanban.columnField }}\n onSave={({ columnField }) => {\n kanban.columnField = columnField;\n kanban.arrangement = undefined;\n }}\n />\n <ViewEditor\n registry={space.db.schemaRegistry}\n schema={schema}\n view={kanban.cardView.target}\n onTypenameChanged={updateViewTypename}\n onDelete={handleDelete}\n />\n </>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "Capabilities", "contributes", "createSurface", "React", "useCallback", "useEffect", "useState", "invariant", "useGlobalFilteredObjects", "Filter", "useQuery", "getSpace", "create", "useKanbanModel", "Kanban", "StackItem", "KanbanContainer", "kanban", "cardSchema", "setCardSchema", "space", "cardView", "db", "schemaRegistry", "getSchema", "target", "query", "type", "objects", "schema", "nothing", "filteredObjects", "model", "items", "handleAddColumn", "columnValue", "addEmptyColumn", "handleAddCard", "add", "title", "description", "state", "handleRemoveCard", "card", "remove", "handleRemoveEmptyColumn", "removeColumnFromArrangement", "Content", "toolbar", "onAddCard", "onAddColumn", "onRemoveCard", "onRemoveEmptyColumn", "span", "React", "useCallback", "useEffect", "useMemo", "useState", "createIntent", "useIntentDispatcher", "Filter", "getSpace", "useQuery", "ViewEditor", "Form", "KanbanPropsSchema", "ViewType", "KanbanViewEditor", "kanban", "dispatchPromise", "dispatch", "useIntentDispatcher", "space", "getSpace", "schema", "setSchema", "useState", "cardView", "target", "query", "type", "db", "schemaRegistry", "getSchema", "undefined", "views", "useQuery", "Filter", "ViewType", "currentTypename", "useMemo", "updateViewTypename", "useCallback", "newTypename", "matchingViews", "filter", "view", "updateTypename", "useEffect", "unsubscribe", "typename", "subscribe", "results", "handleDelete", "fieldId", "createIntent", "KanbanAction", "DeleteCardField", "React", "Form", "KanbanPropsSchema", "values", "columnField", "onSave", "arrangement", "ViewEditor", "registry", "onTypenameChanged", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "KANBAN_PLUGIN", "role", "filter", "data", "isKanban", "subject", "component", "React", "KanbanContainer", "kanban", "KanbanViewEditor"]
7
- }
@@ -1,84 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var intent_resolver_6QZ6AMZF_exports = {};
20
- __export(intent_resolver_6QZ6AMZF_exports, {
21
- default: () => intent_resolver_default
22
- });
23
- module.exports = __toCommonJS(intent_resolver_6QZ6AMZF_exports);
24
- var import_chunk_QCB2U2J2 = require("./chunk-QCB2U2J2.cjs");
25
- var import_app_framework = require("@dxos/app-framework");
26
- var import_invariant = require("@dxos/invariant");
27
- var import_echo = require("@dxos/react-client/echo");
28
- var import_schema = require("@dxos/schema");
29
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts";
30
- var intent_resolver_default = () => (0, import_app_framework.contributes)(import_app_framework.Capabilities.IntentResolver, [
31
- (0, import_app_framework.createResolver)(import_chunk_QCB2U2J2.KanbanAction.Create, async ({ space }) => ({
32
- data: {
33
- object: await (0, import_chunk_QCB2U2J2.createKanban)(space)
34
- }
35
- })),
36
- (0, import_app_framework.createResolver)(import_chunk_QCB2U2J2.KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {
37
- (0, import_invariant.invariant)(kanban.cardView, void 0, {
38
- F: __dxlog_file,
39
- L: 19,
40
- S: void 0,
41
- A: [
42
- "kanban.cardView",
43
- ""
44
- ]
45
- });
46
- const schema = kanban.cardView.target && (0, import_echo.getSpace)(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);
47
- (0, import_invariant.invariant)(schema, void 0, {
48
- F: __dxlog_file,
49
- L: 23,
50
- S: void 0,
51
- A: [
52
- "schema",
53
- ""
54
- ]
55
- });
56
- const projection = new import_schema.ViewProjection(schema, kanban.cardView.target);
57
- if (!undo) {
58
- const { deleted, index } = projection.deleteFieldProjection(fieldId);
59
- return {
60
- undoable: {
61
- message: [
62
- "card field deleted label",
63
- {
64
- ns: import_chunk_QCB2U2J2.KANBAN_PLUGIN
65
- }
66
- ],
67
- data: {
68
- deletionData: {
69
- ...deleted,
70
- index
71
- }
72
- }
73
- }
74
- };
75
- } else if (undo && deletionData) {
76
- const { field, props, index } = deletionData;
77
- projection.setFieldProjection({
78
- field,
79
- props
80
- }, index);
81
- }
82
- })
83
- ]);
84
- //# sourceMappingURL=intent-resolver-6QZ6AMZF.cjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, Capabilities, createResolver } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { ViewProjection } from '@dxos/schema';\n\nimport { KANBAN_PLUGIN } from '../meta';\nimport { createKanban, KanbanAction } from '../types';\n\nexport default () =>\n contributes(Capabilities.IntentResolver, [\n createResolver(KanbanAction.Create, async ({ space }) => ({\n data: { object: await createKanban(space) },\n })),\n createResolver(KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {\n invariant(kanban.cardView);\n\n const schema =\n kanban.cardView.target && getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);\n invariant(schema);\n const projection = new ViewProjection(schema, kanban.cardView.target!);\n\n if (!undo) {\n const { deleted, index } = projection.deleteFieldProjection(fieldId);\n return {\n undoable: {\n message: ['card field deleted label', { ns: KANBAN_PLUGIN }],\n data: { deletionData: { ...deleted, index } },\n },\n };\n } else if (undo && deletionData) {\n const { field, props, index } = deletionData;\n projection.setFieldProjection({ field, props }, index);\n }\n }),\n ]);\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAA0D;AAC1D,uBAA0B;AAC1B,kBAAyB;AACzB,oBAA+B;;AAK/B,IAAA,0BAAe,UACbA,kCAAYC,kCAAaC,gBAAgB;MACvCC,qCAAeC,mCAAaC,QAAQ,OAAO,EAAEC,MAAK,OAAQ;IACxDC,MAAM;MAAEC,QAAQ,UAAMC,oCAAaH,KAAAA;IAAO;EAC5C,EAAA;MACAH,qCAAeC,mCAAaM,iBAAiB,CAAC,EAAEC,QAAQC,SAASC,aAAY,GAAIC,SAAAA;AAC/EC,oCAAUJ,OAAOK,UAAQ,QAAA;;;;;;;;;AAEzB,UAAMC,SACJN,OAAOK,SAASE,cAAUC,sBAASR,MAAAA,GAASS,GAAGC,eAAeC,UAAUX,OAAOK,SAASE,OAAOK,MAAMC,IAAI;AAC3GT,oCAAUE,QAAAA,QAAAA;;;;;;;;;AACV,UAAMQ,aAAa,IAAIC,6BAAeT,QAAQN,OAAOK,SAASE,MAAM;AAEpE,QAAI,CAACJ,MAAM;AACT,YAAM,EAAEa,SAASC,MAAK,IAAKH,WAAWI,sBAAsBjB,OAAAA;AAC5D,aAAO;QACLkB,UAAU;UACRC,SAAS;YAAC;YAA4B;cAAEC,IAAIC;YAAc;;UAC1D1B,MAAM;YAAEM,cAAc;cAAE,GAAGc;cAASC;YAAM;UAAE;QAC9C;MACF;IACF,WAAWd,QAAQD,cAAc;AAC/B,YAAM,EAAEqB,OAAOC,OAAOP,MAAK,IAAKf;AAChCY,iBAAWW,mBAAmB;QAAEF;QAAOC;MAAM,GAAGP,KAAAA;IAClD;EACF,CAAA;CACD;",
6
- "names": ["contributes", "Capabilities", "IntentResolver", "createResolver", "KanbanAction", "Create", "space", "data", "object", "createKanban", "DeleteCardField", "kanban", "fieldId", "deletionData", "undo", "invariant", "cardView", "schema", "target", "getSpace", "db", "schemaRegistry", "getSchema", "query", "type", "projection", "ViewProjection", "deleted", "index", "deleteFieldProjection", "undoable", "message", "ns", "KANBAN_PLUGIN", "field", "props", "setFieldProjection"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/KanbanContainer.tsx", "../../../src/components/KanbanViewEditor.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { type KanbanType } from '@dxos/react-ui-kanban';\n\nimport { KanbanContainer, KanbanViewEditor } from '../components';\nimport { KANBAN_PLUGIN } from '../meta';\nimport { isKanban } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${KANBAN_PLUGIN}/kanban`,\n role: ['article', 'section'],\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data, role }) => <KanbanContainer kanban={data.subject} role={role} />,\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/settings`,\n role: 'complementary--settings',\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data }) => <KanbanViewEditor kanban={data.subject} />,\n }),\n ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { type EchoSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { Filter, useQuery, getSpace, create } from '@dxos/react-client/echo';\nimport { type KanbanType, useKanbanModel, Kanban } from '@dxos/react-ui-kanban';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nexport const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {\n const [cardSchema, setCardSchema] = useState<EchoSchema>();\n const space = getSpace(kanban);\n useEffect(() => {\n if (kanban.cardView && space) {\n setCardSchema(space.db.schemaRegistry.getSchema(kanban.cardView.target!.query.type));\n }\n }, [kanban.cardView, space]);\n\n const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());\n const filteredObjects = useGlobalFilteredObjects(objects);\n\n const model = useKanbanModel({\n kanban,\n cardSchema,\n items: filteredObjects,\n });\n\n const handleAddColumn = useCallback((columnValue: string) => model?.addEmptyColumn(columnValue), [model]);\n\n const handleAddCard = useCallback(\n (columnValue: string) => {\n if (space && cardSchema) {\n space.db.add(\n create(cardSchema, {\n title: '',\n description: '',\n state: columnValue,\n }),\n );\n }\n },\n [space, cardSchema],\n );\n\n const handleRemoveCard = useCallback(\n (card: { id: string }) => {\n invariant(space);\n space.db.remove(card);\n },\n [space],\n );\n\n const handleRemoveEmptyColumn = useCallback(\n (columnValue: string) => {\n model?.removeColumnFromArrangement(columnValue);\n },\n [model],\n );\n\n return (\n <StackItem.Content toolbar={false}>\n {model ? (\n <Kanban\n model={model}\n onAddCard={handleAddCard}\n onAddColumn={handleAddColumn}\n onRemoveCard={handleRemoveCard}\n onRemoveEmptyColumn={handleRemoveEmptyColumn}\n />\n ) : (\n <span>Loading</span>\n )}\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Filter, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { ViewEditor, Form } from '@dxos/react-ui-form';\nimport { type KanbanType, KanbanPropsSchema } from '@dxos/react-ui-kanban';\nimport { ViewType } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\ntype KanbanViewEditorProps = { kanban: KanbanType };\n\nexport const KanbanViewEditor = ({ kanban }: KanbanViewEditorProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const space = getSpace(kanban);\n\n // TODO(ZaymonFC): The schema registry needs an API where we can query with initial value and\n // endure typename changes. We shouldn't need to manage a subscription at this layer.\n const [schema, setSchema] = useState(\n space && kanban?.cardView?.target?.query?.type\n ? space.db.schemaRegistry.getSchema(kanban.cardView.target.query.type)\n : undefined,\n );\n\n const views = useQuery(space, Filter.schema(ViewType));\n const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.type, [kanban?.cardView?.target?.query?.type]);\n const updateViewTypename = useCallback(\n (newTypename: string) => {\n if (!schema) {\n return;\n }\n const matchingViews = views.filter((view) => view.query.type === currentTypename);\n for (const view of matchingViews) {\n view.query.type = newTypename;\n }\n schema.updateTypename(newTypename);\n },\n [views, schema],\n );\n\n useEffect(() => {\n if (space && kanban?.cardView?.target?.query?.type) {\n const unsubscribe = space.db.schemaRegistry\n .query({ typename: kanban?.cardView?.target?.query?.type })\n .subscribe((query) => {\n const [schema] = query.results;\n if (schema) {\n setSchema(schema);\n }\n });\n\n return unsubscribe;\n }\n }, [space, kanban?.cardView?.target?.query?.type]);\n\n const handleDelete = useCallback(\n (fieldId: string) => dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId })),\n [dispatch, kanban],\n );\n\n if (!space || !schema || !kanban.cardView?.target) {\n return null;\n }\n\n return (\n <>\n <Form\n schema={KanbanPropsSchema}\n values={{ columnField: kanban.columnField }}\n onSave={({ columnField }) => {\n kanban.columnField = columnField;\n kanban.arrangement = undefined;\n }}\n />\n <ViewEditor\n registry={space.db.schemaRegistry}\n schema={schema}\n view={kanban.cardView.target}\n onTypenameChanged={updateViewTypename}\n onDelete={handleDelete}\n />\n </>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["import_react", "import_app_framework", "import_echo", "import_react_ui_kanban", "KanbanContainer", "kanban", "cardSchema", "setCardSchema", "useState", "space", "getSpace", "useEffect", "cardView", "db", "schemaRegistry", "getSchema", "target", "query", "type", "objects", "useQuery", "Filter", "schema", "nothing", "filteredObjects", "useGlobalFilteredObjects", "model", "useKanbanModel", "items", "handleAddColumn", "useCallback", "columnValue", "addEmptyColumn", "handleAddCard", "add", "create", "title", "description", "state", "handleRemoveCard", "card", "invariant", "remove", "handleRemoveEmptyColumn", "removeColumnFromArrangement", "React", "StackItem", "Content", "toolbar", "Kanban", "onAddCard", "onAddColumn", "onRemoveCard", "onRemoveEmptyColumn", "span", "KanbanViewEditor", "dispatchPromise", "dispatch", "useIntentDispatcher", "setSchema", "undefined", "views", "ViewType", "currentTypename", "useMemo", "updateViewTypename", "newTypename", "matchingViews", "filter", "view", "updateTypename", "unsubscribe", "typename", "subscribe", "results", "handleDelete", "fieldId", "createIntent", "KanbanAction", "DeleteCardField", "Form", "KanbanPropsSchema", "values", "columnField", "onSave", "arrangement", "ViewEditor", "registry", "onTypenameChanged", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "KANBAN_PLUGIN", "role", "data", "isKanban", "subject", "component"]
7
- }
@@ -1,71 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- KANBAN_PLUGIN,
4
- KanbanAction,
5
- createKanban
6
- } from "./chunk-PNSRVZBP.mjs";
7
-
8
- // packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts
9
- import { contributes, Capabilities, createResolver } from "@dxos/app-framework";
10
- import { invariant } from "@dxos/invariant";
11
- import { getSpace } from "@dxos/react-client/echo";
12
- import { ViewProjection } from "@dxos/schema";
13
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts";
14
- var intent_resolver_default = () => contributes(Capabilities.IntentResolver, [
15
- createResolver(KanbanAction.Create, async ({ space }) => ({
16
- data: {
17
- object: await createKanban(space)
18
- }
19
- })),
20
- createResolver(KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {
21
- invariant(kanban.cardView, void 0, {
22
- F: __dxlog_file,
23
- L: 19,
24
- S: void 0,
25
- A: [
26
- "kanban.cardView",
27
- ""
28
- ]
29
- });
30
- const schema = kanban.cardView.target && getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);
31
- invariant(schema, void 0, {
32
- F: __dxlog_file,
33
- L: 23,
34
- S: void 0,
35
- A: [
36
- "schema",
37
- ""
38
- ]
39
- });
40
- const projection = new ViewProjection(schema, kanban.cardView.target);
41
- if (!undo) {
42
- const { deleted, index } = projection.deleteFieldProjection(fieldId);
43
- return {
44
- undoable: {
45
- message: [
46
- "card field deleted label",
47
- {
48
- ns: KANBAN_PLUGIN
49
- }
50
- ],
51
- data: {
52
- deletionData: {
53
- ...deleted,
54
- index
55
- }
56
- }
57
- }
58
- };
59
- } else if (undo && deletionData) {
60
- const { field, props, index } = deletionData;
61
- projection.setFieldProjection({
62
- field,
63
- props
64
- }, index);
65
- }
66
- })
67
- ]);
68
- export {
69
- intent_resolver_default as default
70
- };
71
- //# sourceMappingURL=intent-resolver-LRZVOK2C.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, Capabilities, createResolver } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { ViewProjection } from '@dxos/schema';\n\nimport { KANBAN_PLUGIN } from '../meta';\nimport { createKanban, KanbanAction } from '../types';\n\nexport default () =>\n contributes(Capabilities.IntentResolver, [\n createResolver(KanbanAction.Create, async ({ space }) => ({\n data: { object: await createKanban(space) },\n })),\n createResolver(KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {\n invariant(kanban.cardView);\n\n const schema =\n kanban.cardView.target && getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);\n invariant(schema);\n const projection = new ViewProjection(schema, kanban.cardView.target!);\n\n if (!undo) {\n const { deleted, index } = projection.deleteFieldProjection(fieldId);\n return {\n undoable: {\n message: ['card field deleted label', { ns: KANBAN_PLUGIN }],\n data: { deletionData: { ...deleted, index } },\n },\n };\n } else if (undo && deletionData) {\n const { field, props, index } = deletionData;\n projection.setFieldProjection({ field, props }, index);\n }\n }),\n ]);\n"],
5
- "mappings": ";;;;;;;;AAIA,SAASA,aAAaC,cAAcC,sBAAsB;AAC1D,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;;AAK/B,IAAA,0BAAe,MACbC,YAAYC,aAAaC,gBAAgB;EACvCC,eAAeC,aAAaC,QAAQ,OAAO,EAAEC,MAAK,OAAQ;IACxDC,MAAM;MAAEC,QAAQ,MAAMC,aAAaH,KAAAA;IAAO;EAC5C,EAAA;EACAH,eAAeC,aAAaM,iBAAiB,CAAC,EAAEC,QAAQC,SAASC,aAAY,GAAIC,SAAAA;AAC/EC,cAAUJ,OAAOK,UAAQ,QAAA;;;;;;;;;AAEzB,UAAMC,SACJN,OAAOK,SAASE,UAAUC,SAASR,MAAAA,GAASS,GAAGC,eAAeC,UAAUX,OAAOK,SAASE,OAAOK,MAAMC,IAAI;AAC3GT,cAAUE,QAAAA,QAAAA;;;;;;;;;AACV,UAAMQ,aAAa,IAAIC,eAAeT,QAAQN,OAAOK,SAASE,MAAM;AAEpE,QAAI,CAACJ,MAAM;AACT,YAAM,EAAEa,SAASC,MAAK,IAAKH,WAAWI,sBAAsBjB,OAAAA;AAC5D,aAAO;QACLkB,UAAU;UACRC,SAAS;YAAC;YAA4B;cAAEC,IAAIC;YAAc;;UAC1D1B,MAAM;YAAEM,cAAc;cAAE,GAAGc;cAASC;YAAM;UAAE;QAC9C;MACF;IACF,WAAWd,QAAQD,cAAc;AAC/B,YAAM,EAAEqB,OAAOC,OAAOP,MAAK,IAAKf;AAChCY,iBAAWW,mBAAmB;QAAEF;QAAOC;MAAM,GAAGP,KAAAA;IAClD;EACF,CAAA;CACD;",
6
- "names": ["contributes", "Capabilities", "createResolver", "invariant", "getSpace", "ViewProjection", "contributes", "Capabilities", "IntentResolver", "createResolver", "KanbanAction", "Create", "space", "data", "object", "createKanban", "DeleteCardField", "kanban", "fieldId", "deletionData", "undo", "invariant", "cardView", "schema", "target", "getSpace", "db", "schemaRegistry", "getSchema", "query", "type", "projection", "ViewProjection", "deleted", "index", "deleteFieldProjection", "undoable", "message", "ns", "KANBAN_PLUGIN", "field", "props", "setFieldProjection"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/KanbanContainer.tsx", "../../../src/components/KanbanViewEditor.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { type KanbanType } from '@dxos/react-ui-kanban';\n\nimport { KanbanContainer, KanbanViewEditor } from '../components';\nimport { KANBAN_PLUGIN } from '../meta';\nimport { isKanban } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${KANBAN_PLUGIN}/kanban`,\n role: ['article', 'section'],\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data, role }) => <KanbanContainer kanban={data.subject} role={role} />,\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/settings`,\n role: 'complementary--settings',\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data }) => <KanbanViewEditor kanban={data.subject} />,\n }),\n ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { type EchoSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { Filter, useQuery, getSpace, create } from '@dxos/react-client/echo';\nimport { type KanbanType, useKanbanModel, Kanban } from '@dxos/react-ui-kanban';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nexport const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {\n const [cardSchema, setCardSchema] = useState<EchoSchema>();\n const space = getSpace(kanban);\n useEffect(() => {\n if (kanban.cardView && space) {\n setCardSchema(space.db.schemaRegistry.getSchema(kanban.cardView.target!.query.type));\n }\n }, [kanban.cardView, space]);\n\n const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());\n const filteredObjects = useGlobalFilteredObjects(objects);\n\n const model = useKanbanModel({\n kanban,\n cardSchema,\n items: filteredObjects,\n });\n\n const handleAddColumn = useCallback((columnValue: string) => model?.addEmptyColumn(columnValue), [model]);\n\n const handleAddCard = useCallback(\n (columnValue: string) => {\n if (space && cardSchema) {\n space.db.add(\n create(cardSchema, {\n title: '',\n description: '',\n state: columnValue,\n }),\n );\n }\n },\n [space, cardSchema],\n );\n\n const handleRemoveCard = useCallback(\n (card: { id: string }) => {\n invariant(space);\n space.db.remove(card);\n },\n [space],\n );\n\n const handleRemoveEmptyColumn = useCallback(\n (columnValue: string) => {\n model?.removeColumnFromArrangement(columnValue);\n },\n [model],\n );\n\n return (\n <StackItem.Content toolbar={false}>\n {model ? (\n <Kanban\n model={model}\n onAddCard={handleAddCard}\n onAddColumn={handleAddColumn}\n onRemoveCard={handleRemoveCard}\n onRemoveEmptyColumn={handleRemoveEmptyColumn}\n />\n ) : (\n <span>Loading</span>\n )}\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Filter, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { ViewEditor, Form } from '@dxos/react-ui-form';\nimport { type KanbanType, KanbanPropsSchema } from '@dxos/react-ui-kanban';\nimport { ViewType } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\ntype KanbanViewEditorProps = { kanban: KanbanType };\n\nexport const KanbanViewEditor = ({ kanban }: KanbanViewEditorProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const space = getSpace(kanban);\n\n // TODO(ZaymonFC): The schema registry needs an API where we can query with initial value and\n // endure typename changes. We shouldn't need to manage a subscription at this layer.\n const [schema, setSchema] = useState(\n space && kanban?.cardView?.target?.query?.type\n ? space.db.schemaRegistry.getSchema(kanban.cardView.target.query.type)\n : undefined,\n );\n\n const views = useQuery(space, Filter.schema(ViewType));\n const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.type, [kanban?.cardView?.target?.query?.type]);\n const updateViewTypename = useCallback(\n (newTypename: string) => {\n if (!schema) {\n return;\n }\n const matchingViews = views.filter((view) => view.query.type === currentTypename);\n for (const view of matchingViews) {\n view.query.type = newTypename;\n }\n schema.updateTypename(newTypename);\n },\n [views, schema],\n );\n\n useEffect(() => {\n if (space && kanban?.cardView?.target?.query?.type) {\n const unsubscribe = space.db.schemaRegistry\n .query({ typename: kanban?.cardView?.target?.query?.type })\n .subscribe((query) => {\n const [schema] = query.results;\n if (schema) {\n setSchema(schema);\n }\n });\n\n return unsubscribe;\n }\n }, [space, kanban?.cardView?.target?.query?.type]);\n\n const handleDelete = useCallback(\n (fieldId: string) => dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId })),\n [dispatch, kanban],\n );\n\n if (!space || !schema || !kanban.cardView?.target) {\n return null;\n }\n\n return (\n <>\n <Form\n schema={KanbanPropsSchema}\n values={{ columnField: kanban.columnField }}\n onSave={({ columnField }) => {\n kanban.columnField = columnField;\n kanban.arrangement = undefined;\n }}\n />\n <ViewEditor\n registry={space.db.schemaRegistry}\n schema={schema}\n view={kanban.cardView.target}\n onTypenameChanged={updateViewTypename}\n onDelete={handleDelete}\n />\n </>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "Capabilities", "contributes", "createSurface", "React", "useCallback", "useEffect", "useState", "invariant", "useGlobalFilteredObjects", "Filter", "useQuery", "getSpace", "create", "useKanbanModel", "Kanban", "StackItem", "KanbanContainer", "kanban", "cardSchema", "setCardSchema", "space", "cardView", "db", "schemaRegistry", "getSchema", "target", "query", "type", "objects", "schema", "nothing", "filteredObjects", "model", "items", "handleAddColumn", "columnValue", "addEmptyColumn", "handleAddCard", "add", "title", "description", "state", "handleRemoveCard", "card", "remove", "handleRemoveEmptyColumn", "removeColumnFromArrangement", "Content", "toolbar", "onAddCard", "onAddColumn", "onRemoveCard", "onRemoveEmptyColumn", "span", "React", "useCallback", "useEffect", "useMemo", "useState", "createIntent", "useIntentDispatcher", "Filter", "getSpace", "useQuery", "ViewEditor", "Form", "KanbanPropsSchema", "ViewType", "KanbanViewEditor", "kanban", "dispatchPromise", "dispatch", "useIntentDispatcher", "space", "getSpace", "schema", "setSchema", "useState", "cardView", "target", "query", "type", "db", "schemaRegistry", "getSchema", "undefined", "views", "useQuery", "Filter", "ViewType", "currentTypename", "useMemo", "updateViewTypename", "useCallback", "newTypename", "matchingViews", "filter", "view", "updateTypename", "useEffect", "unsubscribe", "typename", "subscribe", "results", "handleDelete", "fieldId", "createIntent", "KanbanAction", "DeleteCardField", "React", "Form", "KanbanPropsSchema", "values", "columnField", "onSave", "arrangement", "ViewEditor", "registry", "onTypenameChanged", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "KANBAN_PLUGIN", "role", "filter", "data", "isKanban", "subject", "component", "React", "KanbanContainer", "kanban", "KanbanViewEditor"]
7
- }