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

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-MSZ7GMFD.mjs} +5 -2
  2. package/dist/lib/browser/{chunk-L4PZ5BVV.mjs.map → chunk-MSZ7GMFD.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-TYSGJ4E5.mjs +76 -0
  6. package/dist/lib/browser/intent-resolver-TYSGJ4E5.mjs.map +7 -0
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/{react-surface-KCOBVPKL.mjs → react-surface-ERUIJTE2.mjs} +113 -53
  9. package/dist/lib/browser/react-surface-ERUIJTE2.mjs.map +7 -0
  10. package/dist/lib/browser/types.mjs +1 -1
  11. package/dist/lib/node/{chunk-QCB2U2J2.cjs → chunk-G6G2PES4.cjs} +8 -5
  12. package/dist/lib/node/{chunk-QCB2U2J2.cjs.map → chunk-G6G2PES4.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-UO2W4QQU.cjs +90 -0
  16. package/dist/lib/node/intent-resolver-UO2W4QQU.cjs.map +7 -0
  17. package/dist/lib/node/meta.json +1 -1
  18. package/dist/lib/node/{react-surface-MOZ2OTXW.cjs → react-surface-B6HGP7PH.cjs} +120 -60
  19. package/dist/lib/node/react-surface-B6HGP7PH.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-4EDEB6MQ.mjs} +5 -2
  23. package/dist/lib/node-esm/{chunk-PNSRVZBP.mjs.map → chunk-4EDEB6MQ.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-AIGAAR4N.mjs +77 -0
  27. package/dist/lib/node-esm/intent-resolver-AIGAAR4N.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-HT4XGRD4.mjs} +113 -53
  30. package/dist/lib/node-esm/react-surface-HT4XGRD4.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 +2 -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,11 +10,14 @@ var KANBAN_PLUGIN = "dxos.org/plugin/kanban";
10
10
  var meta = {
11
11
  id: KANBAN_PLUGIN,
12
12
  name: "Kanban",
13
- description: "Kanban board for managing tasks.",
13
+ description: `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.`,
14
14
  icon: "ph--kanban--regular",
15
15
  source: "https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-kanban",
16
16
  tags: [
17
17
  "experimental"
18
+ ],
19
+ screenshots: [
20
+ "https://dxos.network/plugin-details-kanban-dark.png"
18
21
  ]
19
22
  };
20
23
 
@@ -66,4 +69,4 @@ export {
66
69
  isKanban,
67
70
  createKanban
68
71
  };
69
- //# sourceMappingURL=chunk-L4PZ5BVV.mjs.map
72
+ //# sourceMappingURL=chunk-MSZ7GMFD.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types.ts", "../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\nimport { type Space, SpaceSchema } from '@dxos/react-client/echo';\nimport { KanbanType } from '@dxos/react-ui-kanban';\nimport { initializeKanban } from '@dxos/react-ui-kanban/testing';\nimport { FieldSchema } from '@dxos/schema';\n\nimport { KANBAN_PLUGIN } from './meta';\n\n/**\n * Kanban data model.\n * A Kanban board is a collection of columns, each of which contains a collection of items.\n * The layout of columns and items is controlled by models.\n * The underlying data model may be represented by direct object relationships\n * (e.g., a column object containing an array of ordered items) or projections constructed\n * by the model (e.g., a query of items based on metadata within a column object).\n */\n\nexport namespace KanbanAction {\n const KANBAN_ACTION = `${KANBAN_PLUGIN}/action`;\n\n export class Create extends S.TaggedClass<Create>()(`${KANBAN_ACTION}/create`, {\n input: S.Struct({\n name: S.optional(S.String),\n space: SpaceSchema,\n }),\n output: S.Struct({\n object: KanbanType,\n }),\n }) {}\n\n export class DeleteCardField extends S.TaggedClass<DeleteCardField>()(`${KANBAN_ACTION}/delete-card-field`, {\n input: S.Struct({\n kanban: KanbanType,\n fieldId: S.String,\n // TODO(wittjosiah): Separate fields for undo data?\n deletionData: S.optional(\n S.Struct({\n field: FieldSchema,\n // TODO(wittjosiah): This creates a type error.\n // props: PropertySchema,\n props: S.Any,\n index: S.Number,\n }),\n ),\n }),\n output: S.Void,\n }) {}\n}\n\n// TODO(burdon): Undo?\n// TODO(burdon): Typescript types (replace proto with annotations?)\n// TODO(burdon): Should pure components depend on ECHO? Relationship between ECHO object/array and Observable.\n// TODO(burdon): Can the plugin configure the object based on the data? E.g., how are the models constructed?\n// TODO(burdon): Create models. Simple first based on actual data.\n// Model is always a projection since the dragging state is tentative.\n\n// TODO(burdon): Extend model for moving items (in and across columns).\nexport interface KanbanModel {\n root: KanbanType;\n}\n\nexport type Location = {\n idx?: number;\n};\n\nexport const isKanban = (object: unknown): object is KanbanType => object != null && object instanceof KanbanType;\n\nexport const createKanban = async (space: Space) => {\n const { kanban } = await initializeKanban({ space });\n return kanban;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const KANBAN_PLUGIN = 'dxos.org/plugin/kanban';\n\nexport const meta = {\n id: KANBAN_PLUGIN,\n name: 'Kanban',\n description: 'Kanban board for managing tasks.',\n icon: 'ph--kanban--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-kanban',\n tags: ['experimental'],\n} satisfies PluginMeta;\n"],
5
- "mappings": ";AAIA,SAASA,SAAS;AAClB,SAAqBC,mBAAmB;AACxC,SAASC,kBAAkB;AAC3B,SAASC,wBAAwB;AACjC,SAASC,mBAAmB;;;ACFrB,IAAMC,gBAAgB;AAEtB,IAAMC,OAAO;EAClBC,IAAIF;EACJG,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;AACT;;;;UDMiBC,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,aAAAA;EAElB,MAAMC,eAAeC,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdC,MAAMJ,EAAEK,SAASL,EAAEM,MAAM;MACzBC,OAAOC;IACT,CAAA;IACAC,QAAQT,EAAEG,OAAO;MACfO,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBARSZ,SAAAA;EAUN,MAAMa,wBAAwBZ,EAAEC,YAAW,EAAoB,GAAGJ,aAAAA,sBAAmC;IAC1GK,OAAOF,EAAEG,OAAO;MACdU,QAAQF;MACRG,SAASd,EAAEM;;MAEXS,cAAcf,EAAEK,SACdL,EAAEG,OAAO;QACPa,OAAOC;;;QAGPC,OAAOlB,EAAEmB;QACTC,OAAOpB,EAAEqB;MACX,CAAA,CAAA;IAEJ,CAAA;IACAZ,QAAQT,EAAEsB;EACZ,CAAA,EAAA;EAAI;gBAhBSV,kBAAAA;AAiBf,GA9BiBhB,iBAAAA,eAAAA,CAAAA,EAAAA;AAgDV,IAAM2B,WAAW,CAACb,WAA0CA,UAAU,QAAQA,kBAAkBC;AAEhG,IAAMa,eAAe,OAAOjB,UAAAA;AACjC,QAAM,EAAEM,OAAM,IAAK,MAAMY,iBAAiB;IAAElB;EAAM,CAAA;AAClD,SAAOM;AACT;",
6
- "names": ["S", "SpaceSchema", "KanbanType", "initializeKanban", "FieldSchema", "KANBAN_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags", "KanbanAction", "KANBAN_ACTION", "KANBAN_PLUGIN", "Create", "S", "TaggedClass", "input", "Struct", "name", "optional", "String", "space", "SpaceSchema", "output", "object", "KanbanType", "DeleteCardField", "kanban", "fieldId", "deletionData", "field", "FieldSchema", "props", "Any", "index", "Number", "Void", "isKanban", "createKanban", "initializeKanban"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\nimport { type Space, SpaceSchema } from '@dxos/react-client/echo';\nimport { KanbanType } from '@dxos/react-ui-kanban';\nimport { initializeKanban } from '@dxos/react-ui-kanban/testing';\nimport { FieldSchema } from '@dxos/schema';\n\nimport { KANBAN_PLUGIN } from './meta';\n\n/**\n * Kanban data model.\n * A Kanban board is a collection of columns, each of which contains a collection of items.\n * The layout of columns and items is controlled by models.\n * The underlying data model may be represented by direct object relationships\n * (e.g., a column object containing an array of ordered items) or projections constructed\n * by the model (e.g., a query of items based on metadata within a column object).\n */\n\nexport namespace KanbanAction {\n const KANBAN_ACTION = `${KANBAN_PLUGIN}/action`;\n\n export class Create extends S.TaggedClass<Create>()(`${KANBAN_ACTION}/create`, {\n input: S.Struct({\n name: S.optional(S.String),\n space: SpaceSchema,\n }),\n output: S.Struct({\n object: KanbanType,\n }),\n }) {}\n\n export class DeleteCardField extends S.TaggedClass<DeleteCardField>()(`${KANBAN_ACTION}/delete-card-field`, {\n input: S.Struct({\n kanban: KanbanType,\n fieldId: S.String,\n // TODO(wittjosiah): Separate fields for undo data?\n deletionData: S.optional(\n S.Struct({\n field: FieldSchema,\n // TODO(wittjosiah): This creates a type error.\n // props: PropertySchema,\n props: S.Any,\n index: S.Number,\n }),\n ),\n }),\n output: S.Void,\n }) {}\n}\n\n// TODO(burdon): Undo?\n// TODO(burdon): Typescript types (replace proto with annotations?)\n// TODO(burdon): Should pure components depend on ECHO? Relationship between ECHO object/array and Observable.\n// TODO(burdon): Can the plugin configure the object based on the data? E.g., how are the models constructed?\n// TODO(burdon): Create models. Simple first based on actual data.\n// Model is always a projection since the dragging state is tentative.\n\n// TODO(burdon): Extend model for moving items (in and across columns).\nexport interface KanbanModel {\n root: KanbanType;\n}\n\nexport type Location = {\n idx?: number;\n};\n\nexport const isKanban = (object: unknown): object is KanbanType => object != null && object instanceof KanbanType;\n\nexport const createKanban = async (space: Space) => {\n const { kanban } = await initializeKanban({ space });\n return kanban;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const KANBAN_PLUGIN = 'dxos.org/plugin/kanban';\n\nexport const meta = {\n id: KANBAN_PLUGIN,\n name: 'Kanban',\n description: `Kanban allows you to explore Table data in sorted columns defined by your custom schema. You can use Kanbans to track progress or trigger custom automations when cards are moved from one state to another.`,\n icon: 'ph--kanban--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-kanban',\n tags: ['experimental'],\n screenshots: ['https://dxos.network/plugin-details-kanban-dark.png'],\n} satisfies PluginMeta;\n"],
5
+ "mappings": ";AAIA,SAASA,SAAS;AAClB,SAAqBC,mBAAmB;AACxC,SAASC,kBAAkB;AAC3B,SAASC,wBAAwB;AACjC,SAASC,mBAAmB;;;ACFrB,IAAMC,gBAAgB;AAEtB,IAAMC,OAAO;EAClBC,IAAIF;EACJG,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;;;;UDKiBC,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,aAAAA;EAElB,MAAMC,eAAeC,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdC,MAAMJ,EAAEK,SAASL,EAAEM,MAAM;MACzBC,OAAOC;IACT,CAAA;IACAC,QAAQT,EAAEG,OAAO;MACfO,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBARSZ,SAAAA;EAUN,MAAMa,wBAAwBZ,EAAEC,YAAW,EAAoB,GAAGJ,aAAAA,sBAAmC;IAC1GK,OAAOF,EAAEG,OAAO;MACdU,QAAQF;MACRG,SAASd,EAAEM;;MAEXS,cAAcf,EAAEK,SACdL,EAAEG,OAAO;QACPa,OAAOC;;;QAGPC,OAAOlB,EAAEmB;QACTC,OAAOpB,EAAEqB;MACX,CAAA,CAAA;IAEJ,CAAA;IACAZ,QAAQT,EAAEsB;EACZ,CAAA,EAAA;EAAI;gBAhBSV,kBAAAA;AAiBf,GA9BiBhB,iBAAAA,eAAAA,CAAAA,EAAAA;AAgDV,IAAM2B,WAAW,CAACb,WAA0CA,UAAU,QAAQA,kBAAkBC;AAEhG,IAAMa,eAAe,OAAOjB,UAAAA;AACjC,QAAM,EAAEM,OAAM,IAAK,MAAMY,iBAAiB;IAAElB;EAAM,CAAA;AAClD,SAAOM;AACT;",
6
+ "names": ["S", "SpaceSchema", "KanbanType", "initializeKanban", "FieldSchema", "KANBAN_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags", "screenshots", "KanbanAction", "KANBAN_ACTION", "KANBAN_PLUGIN", "Create", "S", "TaggedClass", "input", "Struct", "name", "optional", "String", "space", "SpaceSchema", "output", "object", "KanbanType", "DeleteCardField", "kanban", "fieldId", "deletionData", "field", "FieldSchema", "props", "Any", "index", "Number", "Void", "isKanban", "createKanban", "initializeKanban"]
7
7
  }
@@ -2,17 +2,17 @@ import {
2
2
  KANBAN_PLUGIN,
3
3
  KanbanAction,
4
4
  meta
5
- } from "./chunk-L4PZ5BVV.mjs";
5
+ } from "./chunk-MSZ7GMFD.mjs";
6
6
 
7
7
  // packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx
8
- import { createIntent, defineModule, contributes, Capabilities, Events, definePlugin, oneOf } from "@dxos/app-framework";
8
+ import { createIntent, defineModule, contributes, Capabilities, Events, definePlugin } from "@dxos/app-framework";
9
9
  import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
10
10
  import { KanbanType as KanbanType2, translations as kanbanTranslations } from "@dxos/react-ui-kanban";
11
11
 
12
12
  // packages/plugins/experimental/plugin-kanban/src/capabilities/index.ts
13
13
  import { lazy } from "@dxos/app-framework";
14
- var IntentResolver = lazy(() => import("./intent-resolver-ILMGO3TT.mjs"));
15
- var ReactSurface = lazy(() => import("./react-surface-KCOBVPKL.mjs"));
14
+ var IntentResolver = lazy(() => import("./intent-resolver-TYSGJ4E5.mjs"));
15
+ var ReactSurface = lazy(() => import("./react-surface-ERUIJTE2.mjs"));
16
16
 
17
17
  // packages/plugins/experimental/plugin-kanban/src/translations.ts
18
18
  import { KanbanType } from "@dxos/react-ui-kanban";
@@ -53,7 +53,7 @@ var KanbanPlugin = () => definePlugin(meta, [
53
53
  }),
54
54
  defineModule({
55
55
  id: `${meta.id}/module/metadata`,
56
- activatesOn: oneOf(Events.Startup, Events.SetupAppGraph),
56
+ activatesOn: Events.SetupMetadata,
57
57
  activate: () => contributes(Capabilities.Metadata, {
58
58
  id: KanbanType2.typename,
59
59
  metadata: {
@@ -73,14 +73,14 @@ var KanbanPlugin = () => definePlugin(meta, [
73
73
  }),
74
74
  defineModule({
75
75
  id: `${meta.id}/module/schema`,
76
- activatesOn: ClientEvents.SetupClient,
76
+ activatesOn: ClientEvents.SetupSchema,
77
77
  activate: () => contributes(ClientCapabilities.Schema, [
78
78
  KanbanType2
79
79
  ])
80
80
  }),
81
81
  defineModule({
82
82
  id: `${meta.id}/module/react-surface`,
83
- activatesOn: Events.Startup,
83
+ activatesOn: Events.SetupSurfaces,
84
84
  activate: ReactSurface
85
85
  }),
86
86
  defineModule({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/KanbanPlugin.tsx", "../../../src/capabilities/index.ts", "../../../src/translations.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n createIntent,\n defineModule,\n contributes,\n Capabilities,\n Events,\n definePlugin,\n oneOf,\n} from '@dxos/app-framework';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { type Space } from '@dxos/react-client/echo';\nimport { KanbanType, translations as kanbanTranslations } from '@dxos/react-ui-kanban';\n\nimport { IntentResolver, ReactSurface } from './capabilities';\nimport { KANBAN_PLUGIN, meta } from './meta';\nimport translations from './translations';\nimport { KanbanAction } from './types';\n\nexport const KanbanPlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, [...translations, ...kanbanTranslations]),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: oneOf(Events.Startup, Events.SetupAppGraph),\n activate: () =>\n contributes(Capabilities.Metadata, {\n id: KanbanType.typename,\n metadata: {\n createObject: (props: { name?: string }, options: { space: Space }) =>\n createIntent(KanbanAction.Create, { ...props, space: options.space }),\n placeholder: ['kanban title placeholder', { ns: KANBAN_PLUGIN }],\n icon: 'ph--kanban--regular',\n },\n }),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupClient,\n activate: () => contributes(ClientCapabilities.Schema, [KanbanType]),\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.Startup,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntents,\n activate: IntentResolver,\n }),\n ]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { KanbanType } from '@dxos/react-ui-kanban';\n\nimport { KANBAN_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [KanbanType.typename]: {\n 'typename label': 'Kanban',\n },\n [KANBAN_PLUGIN]: {\n 'plugin name': 'Kanban',\n 'kanban title label': 'Title',\n 'kanban title placeholder': 'New kanban',\n 'column title label': 'Column title',\n 'column title placeholder': 'New column',\n 'item title label': 'Item title',\n 'item title placeholder': 'New item',\n 'add column label': 'Add column',\n 'add item label': 'Add card',\n 'delete column label': 'Delete column',\n 'delete item label': 'Delete card',\n 'create kanban label': 'Create kanban',\n 'card field deleted label': 'Card field deleted',\n },\n },\n },\n];\n"],
5
- "mappings": ";;;;;;;AAIA,SACEA,cACAC,cACAC,aACAC,cACAC,QACAC,cACAC,aACK;AACP,SAASC,oBAAoBC,oBAAoB;AAEjD,SAASC,cAAAA,aAAYC,gBAAgBC,0BAA0B;;;ACX/D,SAASC,YAAY;AAEd,IAAMC,iBAAiBC,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMC,eAAeD,KAAK,MAAM,OAAO,8BAAA,CAAA;;;ACH9C,SAASE,kBAAkB;AAI3B,IAAA,uBAAe;EACb;IACE,SAAS;MACP,CAACC,WAAWC,QAAQ,GAAG;QACrB,kBAAkB;MACpB;MACA,CAACC,aAAAA,GAAgB;QACf,eAAe;QACf,sBAAsB;QACtB,4BAA4B;QAC5B,sBAAsB;QACtB,4BAA4B;QAC5B,oBAAoB;QACpB,0BAA0B;QAC1B,oBAAoB;QACpB,kBAAkB;QAClB,uBAAuB;QACvB,qBAAqB;QACrB,uBAAuB;QACvB,4BAA4B;MAC9B;IACF;EACF;;;;AFRK,IAAMC,eAAe,MAC1BC,aAAaC,MAAM;EACjBC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOC;IACpBC,UAAU,MAAMC,YAAYC,aAAaC,cAAc;SAAIC;SAAiBC;KAAmB;EACjG,CAAA;EACAV,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaS,MAAMR,OAAOS,SAAST,OAAOU,aAAa;IACvDR,UAAU,MACRC,YAAYC,aAAaO,UAAU;MACjCb,IAAIc,YAAWC;MACfC,UAAU;QACRC,cAAc,CAACC,OAA0BC,YACvCC,aAAaC,aAAaC,QAAQ;UAAE,GAAGJ;UAAOK,OAAOJ,QAAQI;QAAM,CAAA;QACrEC,aAAa;UAAC;UAA4B;YAAEC,IAAIC;UAAc;;QAC9DC,MAAM;MACR;IACF,CAAA;EACJ,CAAA;EACA5B,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAa2B,aAAaC;IAC1BzB,UAAU,MAAMC,YAAYyB,mBAAmBC,QAAQ;MAACjB;KAAW;EACrE,CAAA;EACAf,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOS;IACpBP,UAAU4B;EACZ,CAAA;EACAjC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAO+B;IACpB7B,UAAU8B;EACZ,CAAA;CACD;",
6
- "names": ["createIntent", "defineModule", "contributes", "Capabilities", "Events", "definePlugin", "oneOf", "ClientCapabilities", "ClientEvents", "KanbanType", "translations", "kanbanTranslations", "lazy", "IntentResolver", "lazy", "ReactSurface", "KanbanType", "KanbanType", "typename", "KANBAN_PLUGIN", "KanbanPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupTranslations", "activate", "contributes", "Capabilities", "Translations", "translations", "kanbanTranslations", "oneOf", "Startup", "SetupAppGraph", "Metadata", "KanbanType", "typename", "metadata", "createObject", "props", "options", "createIntent", "KanbanAction", "Create", "space", "placeholder", "ns", "KANBAN_PLUGIN", "icon", "ClientEvents", "SetupClient", "ClientCapabilities", "Schema", "ReactSurface", "SetupIntents", "IntentResolver"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { createIntent, defineModule, contributes, Capabilities, Events, definePlugin } from '@dxos/app-framework';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { type Space } from '@dxos/react-client/echo';\nimport { KanbanType, translations as kanbanTranslations } from '@dxos/react-ui-kanban';\n\nimport { IntentResolver, ReactSurface } from './capabilities';\nimport { KANBAN_PLUGIN, meta } from './meta';\nimport translations from './translations';\nimport { KanbanAction } from './types';\n\nexport const KanbanPlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, [...translations, ...kanbanTranslations]),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () =>\n contributes(Capabilities.Metadata, {\n id: KanbanType.typename,\n metadata: {\n createObject: (props: { name?: string }, options: { space: Space }) =>\n createIntent(KanbanAction.Create, { ...props, space: options.space }),\n placeholder: ['kanban title placeholder', { ns: KANBAN_PLUGIN }],\n icon: 'ph--kanban--regular',\n },\n }),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () => contributes(ClientCapabilities.Schema, [KanbanType]),\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupSurfaces,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntents,\n activate: IntentResolver,\n }),\n ]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { KanbanType } from '@dxos/react-ui-kanban';\n\nimport { KANBAN_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [KanbanType.typename]: {\n 'typename label': 'Kanban',\n },\n [KANBAN_PLUGIN]: {\n 'plugin name': 'Kanban',\n 'kanban title label': 'Title',\n 'kanban title placeholder': 'New kanban',\n 'column title label': 'Column title',\n 'column title placeholder': 'New column',\n 'item title label': 'Item title',\n 'item title placeholder': 'New item',\n 'add column label': 'Add column',\n 'add item label': 'Add card',\n 'delete column label': 'Delete column',\n 'delete item label': 'Delete card',\n 'create kanban label': 'Create kanban',\n 'card field deleted label': 'Card field deleted',\n },\n },\n },\n];\n"],
5
+ "mappings": ";;;;;;;AAIA,SAASA,cAAcC,cAAcC,aAAaC,cAAcC,QAAQC,oBAAoB;AAC5F,SAASC,oBAAoBC,oBAAoB;AAEjD,SAASC,cAAAA,aAAYC,gBAAgBC,0BAA0B;;;ACH/D,SAASC,YAAY;AAEd,IAAMC,iBAAiBC,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMC,eAAeD,KAAK,MAAM,OAAO,8BAAA,CAAA;;;ACH9C,SAASE,kBAAkB;AAI3B,IAAA,uBAAe;EACb;IACE,SAAS;MACP,CAACC,WAAWC,QAAQ,GAAG;QACrB,kBAAkB;MACpB;MACA,CAACC,aAAAA,GAAgB;QACf,eAAe;QACf,sBAAsB;QACtB,4BAA4B;QAC5B,sBAAsB;QACtB,4BAA4B;QAC5B,oBAAoB;QACpB,0BAA0B;QAC1B,oBAAoB;QACpB,kBAAkB;QAClB,uBAAuB;QACvB,qBAAqB;QACrB,uBAAuB;QACvB,4BAA4B;MAC9B;IACF;EACF;;;;AFhBK,IAAMC,eAAe,MAC1BC,aAAaC,MAAM;EACjBC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOC;IACpBC,UAAU,MAAMC,YAAYC,aAAaC,cAAc;SAAIC;SAAiBC;KAAmB;EACjG,CAAA;EACAV,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAOQ;IACpBN,UAAU,MACRC,YAAYC,aAAaK,UAAU;MACjCX,IAAIY,YAAWC;MACfC,UAAU;QACRC,cAAc,CAACC,OAA0BC,YACvCC,aAAaC,aAAaC,QAAQ;UAAE,GAAGJ;UAAOK,OAAOJ,QAAQI;QAAM,CAAA;QACrEC,aAAa;UAAC;UAA4B;YAAEC,IAAIC;UAAc;;QAC9DC,MAAM;MACR;IACF,CAAA;EACJ,CAAA;EACA1B,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAayB,aAAaC;IAC1BvB,UAAU,MAAMC,YAAYuB,mBAAmBC,QAAQ;MAACjB;KAAW;EACrE,CAAA;EACAb,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAO4B;IACpB1B,UAAU2B;EACZ,CAAA;EACAhC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,OAAO8B;IACpB5B,UAAU6B;EACZ,CAAA;CACD;",
6
+ "names": ["createIntent", "defineModule", "contributes", "Capabilities", "Events", "definePlugin", "ClientCapabilities", "ClientEvents", "KanbanType", "translations", "kanbanTranslations", "lazy", "IntentResolver", "lazy", "ReactSurface", "KanbanType", "KanbanType", "typename", "KANBAN_PLUGIN", "KanbanPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupTranslations", "activate", "contributes", "Capabilities", "Translations", "translations", "kanbanTranslations", "SetupMetadata", "Metadata", "KanbanType", "typename", "metadata", "createObject", "props", "options", "createIntent", "KanbanAction", "Create", "space", "placeholder", "ns", "KANBAN_PLUGIN", "icon", "ClientEvents", "SetupSchema", "ClientCapabilities", "Schema", "SetupSurfaces", "ReactSurface", "SetupIntents", "IntentResolver"]
7
7
  }
@@ -0,0 +1,76 @@
1
+ import {
2
+ KANBAN_PLUGIN,
3
+ KanbanAction,
4
+ createKanban
5
+ } from "./chunk-MSZ7GMFD.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({
15
+ intent: KanbanAction.Create,
16
+ resolve: async ({ space }) => ({
17
+ data: {
18
+ object: await createKanban(space)
19
+ }
20
+ })
21
+ }),
22
+ createResolver({
23
+ intent: KanbanAction.DeleteCardField,
24
+ resolve: ({ kanban, fieldId, deletionData }, undo) => {
25
+ invariant(kanban.cardView, void 0, {
26
+ F: __dxlog_file,
27
+ L: 24,
28
+ S: void 0,
29
+ A: [
30
+ "kanban.cardView",
31
+ ""
32
+ ]
33
+ });
34
+ const schema = kanban.cardView.target && getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);
35
+ invariant(schema, void 0, {
36
+ F: __dxlog_file,
37
+ L: 28,
38
+ S: void 0,
39
+ A: [
40
+ "schema",
41
+ ""
42
+ ]
43
+ });
44
+ const projection = new ViewProjection(schema, kanban.cardView.target);
45
+ if (!undo) {
46
+ const { deleted, index } = projection.deleteFieldProjection(fieldId);
47
+ return {
48
+ undoable: {
49
+ message: [
50
+ "card field deleted label",
51
+ {
52
+ ns: KANBAN_PLUGIN
53
+ }
54
+ ],
55
+ data: {
56
+ deletionData: {
57
+ ...deleted,
58
+ index
59
+ }
60
+ }
61
+ }
62
+ };
63
+ } else if (undo && deletionData) {
64
+ const { field, props, index } = deletionData;
65
+ projection.setFieldProjection({
66
+ field,
67
+ props
68
+ }, index);
69
+ }
70
+ }
71
+ })
72
+ ]);
73
+ export {
74
+ intent_resolver_default as default
75
+ };
76
+ //# sourceMappingURL=intent-resolver-TYSGJ4E5.mjs.map
@@ -0,0 +1,7 @@
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({\n intent: KanbanAction.Create,\n resolve: async ({ space }) => ({\n data: { object: await createKanban(space) },\n }),\n }),\n createResolver({\n intent: KanbanAction.DeleteCardField,\n resolve: ({ 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 ]);\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,eAAe;IACbC,QAAQC,aAAaC;IACrBC,SAAS,OAAO,EAAEC,MAAK,OAAQ;MAC7BC,MAAM;QAAEC,QAAQ,MAAMC,aAAaH,KAAAA;MAAO;IAC5C;EACF,CAAA;EACAL,eAAe;IACbC,QAAQC,aAAaO;IACrBL,SAAS,CAAC,EAAEM,QAAQC,SAASC,aAAY,GAAIC,SAAAA;AAC3CC,gBAAUJ,OAAOK,UAAQ,QAAA;;;;;;;;;AAEzB,YAAMC,SACJN,OAAOK,SAASE,UAAUC,SAASR,MAAAA,GAASS,GAAGC,eAAeC,UAAUX,OAAOK,SAASE,OAAOK,MAAMC,IAAI;AAC3GT,gBAAUE,QAAAA,QAAAA;;;;;;;;;AACV,YAAMQ,aAAa,IAAIC,eAAeT,QAAQN,OAAOK,SAASE,MAAM;AAEpE,UAAI,CAACJ,MAAM;AACT,cAAM,EAAEa,SAASC,MAAK,IAAKH,WAAWI,sBAAsBjB,OAAAA;AAC5D,eAAO;UACLkB,UAAU;YACRC,SAAS;cAAC;cAA4B;gBAAEC,IAAIC;cAAc;;YAC1D1B,MAAM;cAAEM,cAAc;gBAAE,GAAGc;gBAASC;cAAM;YAAE;UAC9C;QACF;MACF,WAAWd,QAAQD,cAAc;AAC/B,cAAM,EAAEqB,OAAOC,OAAOP,MAAK,IAAKf;AAChCY,mBAAWW,mBAAmB;UAAEF;UAAOC;QAAM,GAAGP,KAAAA;MAClD;IACF;EACF,CAAA;CACD;",
6
+ "names": ["contributes", "Capabilities", "createResolver", "invariant", "getSpace", "ViewProjection", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "KanbanAction", "Create", "resolve", "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 +1 @@
1
- {"inputs":{"packages/plugins/experimental/plugin-kanban/src/meta.ts":{"bytes":1622,"imports":[],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/types.ts":{"bytes":7197,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban/testing","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts":{"bytes":6679,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/experimental/plugin-kanban/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/KanbanContainer.tsx":{"bytes":8391,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-search","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/KanbanViewEditor.tsx":{"bytes":10572,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/index.ts":{"bytes":657,"imports":[{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanContainer.tsx","kind":"import-statement","original":"./KanbanContainer"},{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanViewEditor.tsx","kind":"import-statement","original":"./KanbanViewEditor"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/capabilities/react-surface.tsx":{"bytes":3898,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/components/index.ts","kind":"import-statement","original":"../components"},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/experimental/plugin-kanban/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/capabilities/index.ts":{"bytes":1094,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts","kind":"dynamic-import","original":"./intent-resolver"},{"path":"packages/plugins/experimental/plugin-kanban/src/capabilities/react-surface.tsx","kind":"dynamic-import","original":"./react-surface"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/translations.ts":{"bytes":3142,"imports":[{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx":{"bytes":7681,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/capabilities/index.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/experimental/plugin-kanban/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/plugins/experimental/plugin-kanban/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/index.ts":{"bytes":607,"imports":[{"path":"packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx","kind":"import-statement","original":"./KanbanPlugin"},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"}},"outputs":{"packages/plugins/experimental/plugin-kanban/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5418},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/browser/chunk-L4PZ5BVV.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/browser/intent-resolver-ILMGO3TT.mjs","kind":"dynamic-import"},{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/browser/react-surface-KCOBVPKL.mjs","kind":"dynamic-import"},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true}],"exports":["KANBAN_PLUGIN","KanbanPlugin","meta"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/index.ts","inputs":{"packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx":{"bytesInOutput":1578},"packages/plugins/experimental/plugin-kanban/src/capabilities/index.ts":{"bytesInOutput":190},"packages/plugins/experimental/plugin-kanban/src/translations.ts":{"bytesInOutput":804},"packages/plugins/experimental/plugin-kanban/src/index.ts":{"bytesInOutput":0}},"bytes":3019},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/types.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/types.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/browser/chunk-L4PZ5BVV.mjs","kind":"import-statement"}],"exports":["KanbanAction","createKanban","isKanban"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/types.ts","inputs":{},"bytes":173},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/intent-resolver-ILMGO3TT.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2998},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/intent-resolver-ILMGO3TT.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/browser/chunk-L4PZ5BVV.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts","inputs":{"packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts":{"bytesInOutput":1746}},"bytes":2021},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/react-surface-KCOBVPKL.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":11670},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/react-surface-KCOBVPKL.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/browser/chunk-L4PZ5BVV.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-search","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/capabilities/react-surface.tsx","inputs":{"packages/plugins/experimental/plugin-kanban/src/capabilities/react-surface.tsx":{"bytesInOutput":744},"packages/plugins/experimental/plugin-kanban/src/components/KanbanContainer.tsx":{"bytesInOutput":2185},"packages/plugins/experimental/plugin-kanban/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-kanban/src/components/KanbanViewEditor.tsx":{"bytesInOutput":2520}},"bytes":5965},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/chunk-L4PZ5BVV.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":4619},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/chunk-L4PZ5BVV.mjs":{"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban/testing","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["KANBAN_PLUGIN","KanbanAction","createKanban","isKanban","meta"],"inputs":{"packages/plugins/experimental/plugin-kanban/src/types.ts":{"bytesInOutput":1368},"packages/plugins/experimental/plugin-kanban/src/meta.ts":{"bytesInOutput":312}},"bytes":1986}}}
1
+ {"inputs":{"packages/plugins/experimental/plugin-kanban/src/meta.ts":{"bytes":2286,"imports":[],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/types.ts":{"bytes":7197,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban/testing","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts":{"bytes":7257,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/experimental/plugin-kanban/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/KanbanContainer.tsx":{"bytes":9768,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-search","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/KanbanViewEditor.tsx":{"bytes":13775,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/index.ts":{"bytes":657,"imports":[{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanContainer.tsx","kind":"import-statement","original":"./KanbanContainer"},{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanViewEditor.tsx","kind":"import-statement","original":"./KanbanViewEditor"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/capabilities/react-surface.tsx":{"bytes":3898,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/components/index.ts","kind":"import-statement","original":"../components"},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/experimental/plugin-kanban/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/capabilities/index.ts":{"bytes":1094,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts","kind":"dynamic-import","original":"./intent-resolver"},{"path":"packages/plugins/experimental/plugin-kanban/src/capabilities/react-surface.tsx","kind":"dynamic-import","original":"./react-surface"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/translations.ts":{"bytes":3142,"imports":[{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx":{"bytes":7541,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/capabilities/index.ts","kind":"import-statement","original":"./capabilities"},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/experimental/plugin-kanban/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/plugins/experimental/plugin-kanban/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/index.ts":{"bytes":607,"imports":[{"path":"packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx","kind":"import-statement","original":"./KanbanPlugin"},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"}},"outputs":{"packages/plugins/experimental/plugin-kanban/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5336},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/browser/chunk-MSZ7GMFD.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/browser/intent-resolver-TYSGJ4E5.mjs","kind":"dynamic-import"},{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/browser/react-surface-ERUIJTE2.mjs","kind":"dynamic-import"},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true}],"exports":["KANBAN_PLUGIN","KanbanPlugin","meta"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/index.ts","inputs":{"packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx":{"bytesInOutput":1554},"packages/plugins/experimental/plugin-kanban/src/capabilities/index.ts":{"bytesInOutput":190},"packages/plugins/experimental/plugin-kanban/src/translations.ts":{"bytesInOutput":804},"packages/plugins/experimental/plugin-kanban/src/index.ts":{"bytesInOutput":0}},"bytes":2995},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/types.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/types.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/browser/chunk-MSZ7GMFD.mjs","kind":"import-statement"}],"exports":["KanbanAction","createKanban","isKanban"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/types.ts","inputs":{},"bytes":173},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/intent-resolver-TYSGJ4E5.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3190},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/intent-resolver-TYSGJ4E5.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/browser/chunk-MSZ7GMFD.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts","inputs":{"packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts":{"bytesInOutput":1908}},"bytes":2183},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/react-surface-ERUIJTE2.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":13925},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/react-surface-ERUIJTE2.mjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/browser/chunk-MSZ7GMFD.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/plugin-search","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/react-ui-stack","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-form","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/capabilities/react-surface.tsx","inputs":{"packages/plugins/experimental/plugin-kanban/src/capabilities/react-surface.tsx":{"bytesInOutput":744},"packages/plugins/experimental/plugin-kanban/src/components/KanbanContainer.tsx":{"bytesInOutput":2514},"packages/plugins/experimental/plugin-kanban/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-kanban/src/components/KanbanViewEditor.tsx":{"bytesInOutput":3700}},"bytes":7474},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/chunk-MSZ7GMFD.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":4897},"packages/plugins/experimental/plugin-kanban/dist/lib/browser/chunk-MSZ7GMFD.mjs":{"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban","kind":"import-statement","external":true},{"path":"@dxos/react-ui-kanban/testing","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"exports":["KANBAN_PLUGIN","KanbanAction","createKanban","isKanban","meta"],"inputs":{"packages/plugins/experimental/plugin-kanban/src/types.ts":{"bytesInOutput":1368},"packages/plugins/experimental/plugin-kanban/src/meta.ts":{"bytesInOutput":564}},"bytes":2238}}}
@@ -2,7 +2,7 @@ import {
2
2
  KANBAN_PLUGIN,
3
3
  KanbanAction,
4
4
  isKanban
5
- } from "./chunk-L4PZ5BVV.mjs";
5
+ } from "./chunk-MSZ7GMFD.mjs";
6
6
 
7
7
  // packages/plugins/experimental/plugin-kanban/src/capabilities/react-surface.tsx
8
8
  import React3 from "react";
@@ -15,44 +15,64 @@ import { useGlobalFilteredObjects } from "@dxos/plugin-search";
15
15
  import { Filter, useQuery, getSpace, create } from "@dxos/react-client/echo";
16
16
  import { useKanbanModel, Kanban } from "@dxos/react-ui-kanban";
17
17
  import { StackItem } from "@dxos/react-ui-stack";
18
+ import { ViewProjection } from "@dxos/schema";
18
19
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-kanban/src/components/KanbanContainer.tsx";
19
20
  var KanbanContainer = ({ kanban }) => {
20
21
  const [cardSchema, setCardSchema] = useState();
22
+ const [projection, setProjection] = useState();
21
23
  const space = getSpace(kanban);
22
24
  useEffect(() => {
23
- if (kanban.cardView && space) {
24
- setCardSchema(space.db.schemaRegistry.getSchema(kanban.cardView.target.query.type));
25
+ if (kanban.cardView?.target?.query?.type && space) {
26
+ const query = space.db.schemaRegistry.query({
27
+ typename: kanban.cardView.target.query.type
28
+ });
29
+ const unsubscribe = query.subscribe(() => {
30
+ const [schema] = query.results;
31
+ if (schema) {
32
+ setCardSchema(schema);
33
+ }
34
+ }, {
35
+ fire: true
36
+ });
37
+ return unsubscribe;
25
38
  }
26
39
  }, [
27
- kanban.cardView,
40
+ kanban.cardView?.target?.query,
28
41
  space
29
42
  ]);
43
+ useEffect(() => {
44
+ if (kanban.cardView?.target && cardSchema) {
45
+ setProjection(new ViewProjection(cardSchema, kanban.cardView.target));
46
+ }
47
+ }, [
48
+ kanban.cardView?.target,
49
+ cardSchema,
50
+ JSON.stringify(cardSchema?.jsonSchema)
51
+ ]);
30
52
  const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());
31
53
  const filteredObjects = useGlobalFilteredObjects(objects);
32
54
  const model = useKanbanModel({
33
55
  kanban,
34
56
  cardSchema,
57
+ projection,
35
58
  items: filteredObjects
36
59
  });
37
- const handleAddColumn = useCallback((columnValue) => model?.addEmptyColumn(columnValue), [
38
- model
39
- ]);
40
60
  const handleAddCard = useCallback((columnValue) => {
41
- if (space && cardSchema) {
61
+ const path = model?.columnFieldPath;
62
+ if (space && cardSchema && path) {
42
63
  space.db.add(create(cardSchema, {
43
- title: "",
44
- description: "",
45
- state: columnValue
64
+ [path]: columnValue
46
65
  }));
47
66
  }
48
67
  }, [
49
68
  space,
50
- cardSchema
69
+ cardSchema,
70
+ model
51
71
  ]);
52
72
  const handleRemoveCard = useCallback((card) => {
53
73
  invariant(space, void 0, {
54
74
  F: __dxlog_file,
55
- L: 51,
75
+ L: 65,
56
76
  S: void 0,
57
77
  A: [
58
78
  "space",
@@ -63,41 +83,62 @@ var KanbanContainer = ({ kanban }) => {
63
83
  }, [
64
84
  space
65
85
  ]);
66
- const handleRemoveEmptyColumn = useCallback((columnValue) => {
67
- model?.removeColumnFromArrangement(columnValue);
68
- }, [
69
- model
70
- ]);
71
86
  return /* @__PURE__ */ React.createElement(StackItem.Content, {
72
87
  toolbar: false
73
88
  }, model ? /* @__PURE__ */ React.createElement(Kanban, {
74
89
  model,
75
90
  onAddCard: handleAddCard,
76
- onAddColumn: handleAddColumn,
77
- onRemoveCard: handleRemoveCard,
78
- onRemoveEmptyColumn: handleRemoveEmptyColumn
91
+ onRemoveCard: handleRemoveCard
79
92
  }) : /* @__PURE__ */ React.createElement("span", null, "Loading"));
80
93
  };
81
94
 
82
95
  // packages/plugins/experimental/plugin-kanban/src/components/KanbanViewEditor.tsx
83
96
  import React2, { useCallback as useCallback2, useEffect as useEffect2, useMemo, useState as useState2 } from "react";
84
97
  import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
98
+ import { FormatEnum } from "@dxos/echo-schema";
99
+ import { invariant as invariant2 } from "@dxos/invariant";
85
100
  import { Filter as Filter2, getSpace as getSpace2, useQuery as useQuery2 } from "@dxos/react-client/echo";
86
- import { ViewEditor, Form } from "@dxos/react-ui-form";
87
- import { KanbanPropsSchema } from "@dxos/react-ui-kanban";
88
- import { ViewType } from "@dxos/schema";
101
+ import { ViewEditor, Form, SelectInput } from "@dxos/react-ui-form";
102
+ import { KanbanSettingsSchema } from "@dxos/react-ui-kanban";
103
+ import { ViewType, ViewProjection as ViewProjection2 } from "@dxos/schema";
104
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-kanban/src/components/KanbanViewEditor.tsx";
89
105
  var KanbanViewEditor = ({ kanban }) => {
90
106
  const { dispatchPromise: dispatch } = useIntentDispatcher();
91
107
  const space = getSpace2(kanban);
92
- const [schema, setSchema] = useState2(space && kanban?.cardView?.target?.query?.type ? space.db.schemaRegistry.getSchema(kanban.cardView.target.query.type) : void 0);
108
+ const [schema, setSchema] = useState2();
109
+ useEffect2(() => {
110
+ if (space && kanban?.cardView?.target?.query?.type) {
111
+ const query = space.db.schemaRegistry.query({
112
+ typename: kanban.cardView.target.query.type
113
+ });
114
+ const unsubscribe = query.subscribe(() => {
115
+ const [schema2] = query.results;
116
+ if (schema2) {
117
+ setSchema(schema2);
118
+ }
119
+ }, {
120
+ fire: true
121
+ });
122
+ return unsubscribe;
123
+ }
124
+ }, [
125
+ space,
126
+ kanban?.cardView?.target?.query?.type
127
+ ]);
93
128
  const views = useQuery2(space, Filter2.schema(ViewType));
94
129
  const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.type, [
95
130
  kanban?.cardView?.target?.query?.type
96
131
  ]);
97
132
  const updateViewTypename = useCallback2((newTypename) => {
98
- if (!schema) {
99
- return;
100
- }
133
+ invariant2(schema, void 0, {
134
+ F: __dxlog_file2,
135
+ L: 45,
136
+ S: void 0,
137
+ A: [
138
+ "schema",
139
+ ""
140
+ ]
141
+ });
101
142
  const matchingViews = views.filter((view) => view.query.type === currentTypename);
102
143
  for (const view of matchingViews) {
103
144
  view.query.type = newTypename;
@@ -107,22 +148,6 @@ var KanbanViewEditor = ({ kanban }) => {
107
148
  views,
108
149
  schema
109
150
  ]);
110
- useEffect2(() => {
111
- if (space && kanban?.cardView?.target?.query?.type) {
112
- const unsubscribe = space.db.schemaRegistry.query({
113
- typename: kanban?.cardView?.target?.query?.type
114
- }).subscribe((query) => {
115
- const [schema2] = query.results;
116
- if (schema2) {
117
- setSchema(schema2);
118
- }
119
- });
120
- return unsubscribe;
121
- }
122
- }, [
123
- space,
124
- kanban?.cardView?.target?.query?.type
125
- ]);
126
151
  const handleDelete = useCallback2((fieldId) => dispatch?.(createIntent(KanbanAction.DeleteCardField, {
127
152
  kanban,
128
153
  fieldId
@@ -130,18 +155,53 @@ var KanbanViewEditor = ({ kanban }) => {
130
155
  dispatch,
131
156
  kanban
132
157
  ]);
158
+ const projection = useMemo(() => {
159
+ if (kanban?.cardView?.target && schema) {
160
+ return new ViewProjection2(schema, kanban.cardView.target);
161
+ }
162
+ }, [
163
+ kanban?.cardView?.target,
164
+ schema,
165
+ JSON.stringify(schema)
166
+ ]);
167
+ const selectFields = useMemo(() => {
168
+ if (!projection) {
169
+ return [];
170
+ }
171
+ return projection.getFieldProjections().filter((field) => field.props.format === FormatEnum.SingleSelect).map(({ field }) => ({
172
+ value: field.id,
173
+ label: field.path
174
+ }));
175
+ }, [
176
+ projection
177
+ ]);
178
+ const onSave = useCallback2((values) => {
179
+ kanban.columnFieldId = values.columnFieldId;
180
+ }, [
181
+ kanban
182
+ ]);
183
+ const initialValues = useMemo(() => ({
184
+ columnFieldId: kanban.columnFieldId
185
+ }), [
186
+ kanban
187
+ ]);
188
+ const custom = useMemo(() => ({
189
+ columnFieldId: (props) => /* @__PURE__ */ React2.createElement(SelectInput, {
190
+ ...props,
191
+ options: selectFields
192
+ })
193
+ }), [
194
+ selectFields
195
+ ]);
133
196
  if (!space || !schema || !kanban.cardView?.target) {
134
197
  return null;
135
198
  }
136
199
  return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(Form, {
137
- schema: KanbanPropsSchema,
138
- values: {
139
- columnField: kanban.columnField
140
- },
141
- onSave: ({ columnField }) => {
142
- kanban.columnField = columnField;
143
- kanban.arrangement = void 0;
144
- }
200
+ schema: KanbanSettingsSchema,
201
+ values: initialValues,
202
+ onSave,
203
+ autoSave: true,
204
+ Custom: custom
145
205
  }), /* @__PURE__ */ React2.createElement(ViewEditor, {
146
206
  registry: space.db.schemaRegistry,
147
207
  schema,
@@ -177,4 +237,4 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
177
237
  export {
178
238
  react_surface_default as default
179
239
  };
180
- //# sourceMappingURL=react-surface-KCOBVPKL.mjs.map
240
+ //# sourceMappingURL=react-surface-ERUIJTE2.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/KanbanContainer.tsx", "../../../src/components/KanbanViewEditor.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { type KanbanType } from '@dxos/react-ui-kanban';\n\nimport { KanbanContainer, KanbanViewEditor } from '../components';\nimport { KANBAN_PLUGIN } from '../meta';\nimport { isKanban } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${KANBAN_PLUGIN}/kanban`,\n role: ['article', 'section'],\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data, role }) => <KanbanContainer kanban={data.subject} role={role} />,\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/settings`,\n role: 'complementary--settings',\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data }) => <KanbanViewEditor kanban={data.subject} />,\n }),\n ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { type EchoSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { Filter, useQuery, getSpace, create } from '@dxos/react-client/echo';\nimport { type KanbanType, useKanbanModel, Kanban } from '@dxos/react-ui-kanban';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { ViewProjection } from '@dxos/schema';\n\nexport const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {\n const [cardSchema, setCardSchema] = useState<EchoSchema>();\n const [projection, setProjection] = useState<ViewProjection>();\n const space = getSpace(kanban);\n\n useEffect(() => {\n if (kanban.cardView?.target?.query?.type && space) {\n const query = space.db.schemaRegistry.query({ typename: kanban.cardView.target.query.type });\n const unsubscribe = query.subscribe(\n () => {\n const [schema] = query.results;\n if (schema) {\n setCardSchema(schema);\n }\n },\n { fire: true },\n );\n return unsubscribe;\n }\n }, [kanban.cardView?.target?.query, space]);\n\n useEffect(() => {\n if (kanban.cardView?.target && cardSchema) {\n setProjection(new ViewProjection(cardSchema, kanban.cardView.target));\n }\n // TODO(ZaymonFC): Is there a better way to get notified about deep changes in the json schema?\n }, [kanban.cardView?.target, cardSchema, JSON.stringify(cardSchema?.jsonSchema)]);\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 projection,\n items: filteredObjects,\n });\n\n const handleAddCard = useCallback(\n (columnValue: string | undefined) => {\n const path = model?.columnFieldPath;\n if (space && cardSchema && path) {\n space.db.add(create(cardSchema, { [path]: columnValue }));\n }\n },\n [space, cardSchema, model],\n );\n\n const handleRemoveCard = useCallback(\n (card: { id: string }) => {\n invariant(space);\n space.db.remove(card);\n },\n [space],\n );\n\n return (\n <StackItem.Content toolbar={false}>\n {model ? (\n <Kanban model={model} onAddCard={handleAddCard} onRemoveCard={handleRemoveCard} />\n ) : (\n <span>Loading</span>\n )}\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type EchoSchema, FormatEnum } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { Filter, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { ViewEditor, Form, SelectInput, type CustomInputMap } from '@dxos/react-ui-form';\nimport { type KanbanType, KanbanSettingsSchema } from '@dxos/react-ui-kanban';\nimport { ViewType, ViewProjection } 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 const [schema, setSchema] = useState<EchoSchema | undefined>();\n\n useEffect(() => {\n if (space && kanban?.cardView?.target?.query?.type) {\n const query = space.db.schemaRegistry.query({ typename: kanban.cardView.target.query.type });\n const unsubscribe = query.subscribe(\n () => {\n const [schema] = query.results;\n if (schema) {\n setSchema(schema);\n }\n },\n { fire: true },\n );\n return unsubscribe;\n }\n }, [space, kanban?.cardView?.target?.query?.type]);\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 invariant(schema);\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 const handleDelete = useCallback(\n (fieldId: string) => dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId })),\n [dispatch, kanban],\n );\n\n const projection = useMemo(() => {\n if (kanban?.cardView?.target && schema) {\n return new ViewProjection(schema, kanban.cardView.target);\n }\n }, [kanban?.cardView?.target, schema, JSON.stringify(schema)]);\n\n const selectFields = useMemo(() => {\n if (!projection) {\n return [];\n }\n\n return projection\n .getFieldProjections()\n .filter((field) => field.props.format === FormatEnum.SingleSelect)\n .map(({ field }) => ({ value: field.id, label: field.path }));\n }, [projection]);\n\n const onSave = useCallback(\n (values: Partial<{ columnFieldId: string }>) => {\n kanban.columnFieldId = values.columnFieldId;\n },\n [kanban],\n );\n\n const initialValues = useMemo(() => ({ columnFieldId: kanban.columnFieldId }), [kanban]);\n const custom: CustomInputMap = useMemo(\n () => ({ columnFieldId: (props) => <SelectInput {...props} options={selectFields} /> }),\n [selectFields],\n );\n\n if (!space || !schema || !kanban.cardView?.target) {\n return null;\n }\n\n return (\n <>\n <Form schema={KanbanSettingsSchema} values={initialValues} onSave={onSave} autoSave Custom={custom} />\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", "ViewProjection", "KanbanContainer", "kanban", "cardSchema", "setCardSchema", "projection", "setProjection", "space", "cardView", "target", "query", "type", "db", "schemaRegistry", "typename", "unsubscribe", "subscribe", "schema", "results", "fire", "JSON", "stringify", "jsonSchema", "objects", "nothing", "filteredObjects", "model", "items", "handleAddCard", "columnValue", "path", "columnFieldPath", "add", "handleRemoveCard", "card", "remove", "Content", "toolbar", "onAddCard", "onRemoveCard", "span", "React", "useCallback", "useEffect", "useMemo", "useState", "createIntent", "useIntentDispatcher", "FormatEnum", "invariant", "Filter", "getSpace", "useQuery", "ViewEditor", "Form", "SelectInput", "KanbanSettingsSchema", "ViewType", "ViewProjection", "KanbanViewEditor", "kanban", "dispatchPromise", "dispatch", "useIntentDispatcher", "space", "getSpace", "schema", "setSchema", "useState", "useEffect", "cardView", "target", "query", "type", "db", "schemaRegistry", "typename", "unsubscribe", "subscribe", "results", "fire", "views", "useQuery", "Filter", "ViewType", "currentTypename", "useMemo", "updateViewTypename", "useCallback", "newTypename", "invariant", "matchingViews", "filter", "view", "updateTypename", "handleDelete", "fieldId", "createIntent", "KanbanAction", "DeleteCardField", "projection", "ViewProjection", "JSON", "stringify", "selectFields", "getFieldProjections", "field", "props", "format", "FormatEnum", "SingleSelect", "map", "value", "id", "label", "path", "onSave", "values", "columnFieldId", "initialValues", "custom", "React", "SelectInput", "options", "Form", "KanbanSettingsSchema", "autoSave", "Custom", "ViewEditor", "registry", "onTypenameChanged", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "KANBAN_PLUGIN", "role", "filter", "data", "isKanban", "subject", "component", "React", "KanbanContainer", "kanban", "KanbanViewEditor"]
7
+ }
@@ -2,7 +2,7 @@ import {
2
2
  KanbanAction,
3
3
  createKanban,
4
4
  isKanban
5
- } from "./chunk-L4PZ5BVV.mjs";
5
+ } from "./chunk-MSZ7GMFD.mjs";
6
6
  export {
7
7
  KanbanAction,
8
8
  createKanban,