@dxos/plugin-kanban 0.7.2 → 0.7.3-main.2dd075e

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 (34) hide show
  1. package/dist/lib/browser/{KanbanMain-YZGYGFNW.mjs → KanbanMain-I5TMXNIY.mjs} +3 -3
  2. package/dist/lib/browser/{KanbanMain-YZGYGFNW.mjs.map → KanbanMain-I5TMXNIY.mjs.map} +1 -1
  3. package/dist/lib/browser/{chunk-65OSXCWL.mjs → chunk-4Y4TZ47E.mjs} +1 -1
  4. package/dist/lib/browser/{chunk-65OSXCWL.mjs.map → chunk-4Y4TZ47E.mjs.map} +1 -1
  5. package/dist/lib/browser/index.mjs +6 -4
  6. package/dist/lib/browser/index.mjs.map +3 -3
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/types/index.mjs +1 -1
  9. package/dist/lib/node/{KanbanMain-O2OG6TKM.cjs → KanbanMain-4OWAWTS4.cjs} +8 -8
  10. package/dist/lib/node/{KanbanMain-O2OG6TKM.cjs.map → KanbanMain-4OWAWTS4.cjs.map} +1 -1
  11. package/dist/lib/node/{chunk-O7VZ6HTM.cjs → chunk-LTR4WYI2.cjs} +4 -4
  12. package/dist/lib/node/{chunk-O7VZ6HTM.cjs.map → chunk-LTR4WYI2.cjs.map} +1 -1
  13. package/dist/lib/node/index.cjs +16 -14
  14. package/dist/lib/node/index.cjs.map +3 -3
  15. package/dist/lib/node/meta.json +1 -1
  16. package/dist/lib/node/types/index.cjs +5 -5
  17. package/dist/lib/node/types/index.cjs.map +1 -1
  18. package/dist/lib/node-esm/{KanbanMain-6HTVRMTN.mjs → KanbanMain-PJC2JMJH.mjs} +3 -3
  19. package/dist/lib/node-esm/{KanbanMain-6HTVRMTN.mjs.map → KanbanMain-PJC2JMJH.mjs.map} +1 -1
  20. package/dist/lib/node-esm/{chunk-NRH3LKPT.mjs → chunk-2ZBX5F7L.mjs} +1 -1
  21. package/dist/lib/node-esm/{chunk-NRH3LKPT.mjs.map → chunk-2ZBX5F7L.mjs.map} +1 -1
  22. package/dist/lib/node-esm/index.mjs +6 -4
  23. package/dist/lib/node-esm/index.mjs.map +3 -3
  24. package/dist/lib/node-esm/meta.json +1 -1
  25. package/dist/lib/node-esm/types/index.mjs +1 -1
  26. package/dist/types/src/KanbanPlugin.d.ts.map +1 -1
  27. package/dist/types/src/stories/testing.d.ts +4 -4
  28. package/dist/types/src/types/types.d.ts +1 -1
  29. package/dist/types/src/types/types.d.ts.map +1 -1
  30. package/package.json +17 -16
  31. package/src/KanbanPlugin.tsx +3 -2
  32. package/src/components/KanbanMain.tsx +1 -1
  33. package/src/stories/testing.ts +1 -1
  34. package/src/types/types.ts +1 -1
@@ -16,14 +16,14 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_O7VZ6HTM_exports = {};
20
- __export(chunk_O7VZ6HTM_exports, {
19
+ var chunk_LTR4WYI2_exports = {};
20
+ __export(chunk_LTR4WYI2_exports, {
21
21
  KanbanAction: () => KanbanAction,
22
22
  KanbanColumnType: () => KanbanColumnType,
23
23
  KanbanItemType: () => KanbanItemType,
24
24
  KanbanType: () => KanbanType
25
25
  });
26
- module.exports = __toCommonJS(chunk_O7VZ6HTM_exports);
26
+ module.exports = __toCommonJS(chunk_LTR4WYI2_exports);
27
27
  var import_chunk_MBAGHRFM = require("./chunk-MBAGHRFM.cjs");
28
28
  var import_echo_schema = require("@dxos/echo-schema");
29
29
  var KanbanItemType = class extends (0, import_echo_schema.TypedObject)({
@@ -64,4 +64,4 @@ var KanbanAction;
64
64
  KanbanItemType,
65
65
  KanbanType
66
66
  });
67
- //# sourceMappingURL=chunk-O7VZ6HTM.cjs.map
67
+ //# sourceMappingURL=chunk-LTR4WYI2.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/kanban.ts", "../../../src/types/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Expando, ref, S, TypedObject } from '@dxos/echo-schema';\n\nexport class KanbanItemType extends TypedObject({ typename: 'dxos.org/type/KanbanItem', version: '0.1.0' })({\n object: S.optional(ref(Expando)),\n name: S.optional(S.String),\n index: S.optional(S.String),\n}) {}\n\nexport class KanbanColumnType extends TypedObject({ typename: 'dxos.org/type/KanbanColumn', version: '0.1.0' })({\n name: S.optional(S.String),\n index: S.optional(S.String),\n items: S.mutable(S.Array(ref(KanbanItemType))),\n}) {}\n\nexport class KanbanType extends TypedObject({ typename: 'dxos.org/type/Kanban', version: '0.1.0' })({\n name: S.optional(S.String),\n columns: S.mutable(S.Array(ref(KanbanColumnType))),\n}) {}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { type SchemaProvides } from '@dxos/plugin-client';\n\nimport { type KanbanColumnType, type KanbanItemType, type KanbanType } from './kanban';\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\nconst KANBAN_ACTION = `${KANBAN_PLUGIN}/action`;\n\nexport enum KanbanAction {\n CREATE = `${KANBAN_ACTION}/create`,\n}\n\nexport type KanbanPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MetadataRecordsProvides &\n TranslationsProvides &\n SchemaProvides;\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 createColumn(): KanbanColumnType;\n createItem(column: KanbanColumnType): KanbanItemType;\n}\n\nexport type Location = {\n column: KanbanColumnType;\n item?: KanbanItemType;\n idx?: number;\n};\n"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Expando, ref, S, TypedObject } from '@dxos/echo-schema';\n\nexport class KanbanItemType extends TypedObject({ typename: 'dxos.org/type/KanbanItem', version: '0.1.0' })({\n object: S.optional(ref(Expando)),\n name: S.optional(S.String),\n index: S.optional(S.String),\n}) {}\n\nexport class KanbanColumnType extends TypedObject({ typename: 'dxos.org/type/KanbanColumn', version: '0.1.0' })({\n name: S.optional(S.String),\n index: S.optional(S.String),\n items: S.mutable(S.Array(ref(KanbanItemType))),\n}) {}\n\nexport class KanbanType extends TypedObject({ typename: 'dxos.org/type/Kanban', version: '0.1.0' })({\n name: S.optional(S.String),\n columns: S.mutable(S.Array(ref(KanbanColumnType))),\n}) {}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { type SchemaProvides } from '@dxos/plugin-space';\n\nimport { type KanbanColumnType, type KanbanItemType, type KanbanType } from './kanban';\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\nconst KANBAN_ACTION = `${KANBAN_PLUGIN}/action`;\n\nexport enum KanbanAction {\n CREATE = `${KANBAN_ACTION}/create`,\n}\n\nexport type KanbanPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MetadataRecordsProvides &\n TranslationsProvides &\n SchemaProvides;\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 createColumn(): KanbanColumnType;\n createItem(column: KanbanColumnType): KanbanItemType;\n}\n\nexport type Location = {\n column: KanbanColumnType;\n item?: KanbanItemType;\n idx?: number;\n};\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,yBAA6C;AAEtC,IAAMA,iBAAN,kBAA6BC,gCAAY;EAAEC,UAAU;EAA4BC,SAAS;AAAQ,CAAA,EAAG;EAC1GC,QAAQC,qBAAEC,aAASC,wBAAIC,0BAAAA,CAAAA;EACvBC,MAAMJ,qBAAEC,SAASD,qBAAEK,MAAM;EACzBC,OAAON,qBAAEC,SAASD,qBAAEK,MAAM;AAC5B,CAAA,EAAA;AAAI;AAEG,IAAME,mBAAN,kBAA+BX,gCAAY;EAAEC,UAAU;EAA8BC,SAAS;AAAQ,CAAA,EAAG;EAC9GM,MAAMJ,qBAAEC,SAASD,qBAAEK,MAAM;EACzBC,OAAON,qBAAEC,SAASD,qBAAEK,MAAM;EAC1BG,OAAOR,qBAAES,QAAQT,qBAAEU,UAAMR,wBAAIP,cAAAA,CAAAA,CAAAA;AAC/B,CAAA,EAAA;AAAI;AAEG,IAAMgB,aAAN,kBAAyBf,gCAAY;EAAEC,UAAU;EAAwBC,SAAS;AAAQ,CAAA,EAAG;EAClGM,MAAMJ,qBAAEC,SAASD,qBAAEK,MAAM;EACzBO,SAASZ,qBAAES,QAAQT,qBAAEU,UAAMR,wBAAIK,gBAAAA,CAAAA,CAAAA;AACjC,CAAA,EAAA;AAAI;ACIJ,IAAMM,gBAAgB,GAAGC,mCAAAA;;UAEbC,eAAAA;0CACD,GAAGF,aAAAA,SAAsB,IAAA;GADxBE,iBAAAA,eAAAA,CAAAA,EAAAA;",
6
6
  "names": ["KanbanItemType", "TypedObject", "typename", "version", "object", "S", "optional", "ref", "Expando", "name", "String", "index", "KanbanColumnType", "items", "mutable", "Array", "KanbanType", "columns", "KANBAN_ACTION", "KANBAN_PLUGIN", "KanbanAction"]
7
7
  }
@@ -32,17 +32,17 @@ __export(node_exports, {
32
32
  default: () => src_default
33
33
  });
34
34
  module.exports = __toCommonJS(node_exports);
35
- var import_chunk_O7VZ6HTM = require("./chunk-O7VZ6HTM.cjs");
35
+ var import_chunk_LTR4WYI2 = require("./chunk-LTR4WYI2.cjs");
36
36
  var import_chunk_MBAGHRFM = require("./chunk-MBAGHRFM.cjs");
37
37
  var import_react = __toESM(require("react"));
38
38
  var import_app_framework = require("@dxos/app-framework");
39
- var import_echo_schema = require("@dxos/echo-schema");
39
+ var import_live_object = require("@dxos/live-object");
40
40
  var import_plugin_client = require("@dxos/plugin-client");
41
41
  var import_plugin_graph = require("@dxos/plugin-graph");
42
42
  var import_plugin_space = require("@dxos/plugin-space");
43
43
  var import_echo = require("@dxos/react-client/echo");
44
44
  var import_react2 = require("react");
45
- var KanbanMain = (0, import_react2.lazy)(() => import("./KanbanMain-O2OG6TKM.cjs"));
45
+ var KanbanMain = (0, import_react2.lazy)(() => import("./KanbanMain-4OWAWTS4.cjs"));
46
46
  var translations_default = [
47
47
  {
48
48
  "en-US": {
@@ -69,7 +69,7 @@ var KanbanPlugin = () => {
69
69
  provides: {
70
70
  metadata: {
71
71
  records: {
72
- [import_chunk_O7VZ6HTM.KanbanType.typename]: {
72
+ [import_chunk_LTR4WYI2.KanbanType.typename]: {
73
73
  placeholder: [
74
74
  "kanban title placeholder",
75
75
  {
@@ -80,11 +80,11 @@ var KanbanPlugin = () => {
80
80
  // TODO(wittjosiah): Move out of metadata.
81
81
  loadReferences: (kanban) => (0, import_echo.loadObjectReferences)(kanban, (kanban2) => kanban2.columns)
82
82
  },
83
- [import_chunk_O7VZ6HTM.KanbanColumnType.typename]: {
83
+ [import_chunk_LTR4WYI2.KanbanColumnType.typename]: {
84
84
  // TODO(wittjosiah): Move out of metadata.
85
85
  loadReferences: (column) => (0, import_echo.loadObjectReferences)(column, (column2) => column2.items)
86
86
  },
87
- [import_chunk_O7VZ6HTM.KanbanItemType.typename]: {
87
+ [import_chunk_LTR4WYI2.KanbanItemType.typename]: {
88
88
  // TODO(wittjosiah): Move out of metadata.
89
89
  loadReferences: (item) => []
90
90
  }
@@ -92,9 +92,11 @@ var KanbanPlugin = () => {
92
92
  },
93
93
  echo: {
94
94
  schema: [
95
- import_chunk_O7VZ6HTM.KanbanType,
96
- import_chunk_O7VZ6HTM.KanbanColumnType,
97
- import_chunk_O7VZ6HTM.KanbanItemType
95
+ import_chunk_LTR4WYI2.KanbanType
96
+ ],
97
+ system: [
98
+ import_chunk_LTR4WYI2.KanbanColumnType,
99
+ import_chunk_LTR4WYI2.KanbanItemType
98
100
  ]
99
101
  },
100
102
  translations: translations_default,
@@ -106,7 +108,7 @@ var KanbanPlugin = () => {
106
108
  return [];
107
109
  }
108
110
  return (0, import_plugin_graph.createExtension)({
109
- id: import_chunk_O7VZ6HTM.KanbanAction.CREATE,
111
+ id: import_chunk_LTR4WYI2.KanbanAction.CREATE,
110
112
  filter: (node) => (0, import_plugin_graph.isActionGroup)(node) && node.id.startsWith(import_plugin_space.SpaceAction.ADD_OBJECT),
111
113
  actions: ({ node }) => {
112
114
  const id = node.id.split("/").at(-1);
@@ -124,7 +126,7 @@ var KanbanPlugin = () => {
124
126
  await dispatch([
125
127
  {
126
128
  plugin: import_chunk_MBAGHRFM.KANBAN_PLUGIN,
127
- action: import_chunk_O7VZ6HTM.KanbanAction.CREATE
129
+ action: import_chunk_LTR4WYI2.KanbanAction.CREATE
128
130
  },
129
131
  {
130
132
  action: import_plugin_space.SpaceAction.ADD_OBJECT,
@@ -157,7 +159,7 @@ var KanbanPlugin = () => {
157
159
  component: ({ data, role }) => {
158
160
  switch (role) {
159
161
  case "main":
160
- return data.active instanceof import_chunk_O7VZ6HTM.KanbanType ? /* @__PURE__ */ import_react.default.createElement(KanbanMain, {
162
+ return data.active instanceof import_chunk_LTR4WYI2.KanbanType ? /* @__PURE__ */ import_react.default.createElement(KanbanMain, {
161
163
  kanban: data.active
162
164
  }) : null;
163
165
  default:
@@ -168,9 +170,9 @@ var KanbanPlugin = () => {
168
170
  intent: {
169
171
  resolver: (intent) => {
170
172
  switch (intent.action) {
171
- case import_chunk_O7VZ6HTM.KanbanAction.CREATE: {
173
+ case import_chunk_LTR4WYI2.KanbanAction.CREATE: {
172
174
  return {
173
- data: (0, import_echo_schema.create)(import_chunk_O7VZ6HTM.KanbanType, {
175
+ data: (0, import_live_object.create)(import_chunk_LTR4WYI2.KanbanType, {
174
176
  columns: []
175
177
  })
176
178
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/KanbanPlugin.tsx", "../../../src/components/index.ts", "../../../src/translations.ts", "../../../src/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { resolvePlugin, type PluginDefinition, parseIntentPlugin, NavigationAction } from '@dxos/app-framework';\nimport { create } from '@dxos/echo-schema';\nimport { parseClientPlugin } from '@dxos/plugin-client';\nimport { type ActionGroup, createExtension, isActionGroup } from '@dxos/plugin-graph';\nimport { SpaceAction } from '@dxos/plugin-space';\nimport { loadObjectReferences } from '@dxos/react-client/echo';\n\nimport { KanbanMain } from './components';\nimport meta, { KANBAN_PLUGIN } from './meta';\nimport translations from './translations';\nimport { KanbanColumnType, KanbanItemType, KanbanType } from './types';\nimport { KanbanAction, type KanbanPluginProvides } from './types';\n\nexport const KanbanPlugin = (): PluginDefinition<KanbanPluginProvides> => {\n return {\n meta,\n provides: {\n metadata: {\n records: {\n [KanbanType.typename]: {\n placeholder: ['kanban title placeholder', { ns: KANBAN_PLUGIN }],\n icon: 'ph--kanban--regular',\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (kanban: KanbanType) => loadObjectReferences(kanban, (kanban) => kanban.columns),\n },\n [KanbanColumnType.typename]: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (column: KanbanColumnType) => loadObjectReferences(column, (column) => column.items),\n },\n [KanbanItemType.typename]: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (item: KanbanItemType) => [], // loadObjectReferences(item, (item) => item.object),\n },\n },\n },\n echo: {\n schema: [KanbanType, KanbanColumnType, KanbanItemType],\n },\n translations,\n graph: {\n builder: (plugins) => {\n const client = resolvePlugin(plugins, parseClientPlugin)?.provides.client;\n const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatch;\n if (!client || !dispatch) {\n return [];\n }\n\n return createExtension({\n id: KanbanAction.CREATE,\n filter: (node): node is ActionGroup => isActionGroup(node) && node.id.startsWith(SpaceAction.ADD_OBJECT),\n actions: ({ node }) => {\n const id = node.id.split('/').at(-1);\n const [spaceId, objectId] = id?.split(':') ?? [];\n const space = client.spaces.get().find((space) => space.id === spaceId);\n const object = objectId && space?.db.getObjectById(objectId);\n const target = objectId ? object : space;\n if (!target) {\n return;\n }\n\n return [\n {\n id: `${KANBAN_PLUGIN}/create/${node.id}`,\n data: async () => {\n await dispatch([\n { plugin: KANBAN_PLUGIN, action: KanbanAction.CREATE },\n { action: SpaceAction.ADD_OBJECT, data: { target } },\n { action: NavigationAction.OPEN },\n ]);\n },\n properties: {\n label: ['create kanban label', { ns: KANBAN_PLUGIN }],\n icon: 'ph--kanban--regular',\n testId: 'kanbanPlugin.createObject',\n },\n },\n ];\n },\n });\n },\n },\n surface: {\n component: ({ data, role }) => {\n switch (role) {\n case 'main':\n return data.active instanceof KanbanType ? <KanbanMain kanban={data.active} /> : null;\n default:\n return null;\n }\n },\n },\n intent: {\n resolver: (intent) => {\n switch (intent.action) {\n case KanbanAction.CREATE: {\n return { data: create(KanbanType, { columns: [] }) };\n }\n }\n },\n },\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport const KanbanMain = lazy(() => import('./KanbanMain'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { KANBAN_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\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 item',\n 'delete column label': 'Delete column',\n 'delete item label': 'Delete item',\n 'create kanban label': 'Create kanban',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { KanbanPlugin } from './KanbanPlugin';\n\nexport default KanbanPlugin;\n\nexport * from './KanbanPlugin';\n"],
5
- "mappings": "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",
6
- "names": ["import_react", "KanbanMain", "lazy", "KANBAN_PLUGIN", "KanbanPlugin", "meta", "provides", "metadata", "records", "KanbanType", "typename", "placeholder", "ns", "icon", "loadReferences", "kanban", "loadObjectReferences", "columns", "KanbanColumnType", "column", "items", "KanbanItemType", "item", "echo", "schema", "translations", "graph", "builder", "plugins", "client", "resolvePlugin", "parseClientPlugin", "dispatch", "parseIntentPlugin", "intent", "createExtension", "id", "KanbanAction", "CREATE", "filter", "node", "isActionGroup", "startsWith", "SpaceAction", "ADD_OBJECT", "actions", "split", "at", "spaceId", "objectId", "space", "spaces", "get", "find", "object", "db", "getObjectById", "target", "data", "plugin", "action", "NavigationAction", "OPEN", "properties", "label", "testId", "surface", "component", "role", "active", "React", "resolver", "create"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { resolvePlugin, type PluginDefinition, parseIntentPlugin, NavigationAction } from '@dxos/app-framework';\nimport { create } from '@dxos/live-object';\nimport { parseClientPlugin } from '@dxos/plugin-client';\nimport { type ActionGroup, createExtension, isActionGroup } from '@dxos/plugin-graph';\nimport { SpaceAction } from '@dxos/plugin-space';\nimport { loadObjectReferences } from '@dxos/react-client/echo';\n\nimport { KanbanMain } from './components';\nimport meta, { KANBAN_PLUGIN } from './meta';\nimport translations from './translations';\nimport { KanbanColumnType, KanbanItemType, KanbanType } from './types';\nimport { KanbanAction, type KanbanPluginProvides } from './types';\n\nexport const KanbanPlugin = (): PluginDefinition<KanbanPluginProvides> => {\n return {\n meta,\n provides: {\n metadata: {\n records: {\n [KanbanType.typename]: {\n placeholder: ['kanban title placeholder', { ns: KANBAN_PLUGIN }],\n icon: 'ph--kanban--regular',\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (kanban: KanbanType) => loadObjectReferences(kanban, (kanban) => kanban.columns),\n },\n [KanbanColumnType.typename]: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (column: KanbanColumnType) => loadObjectReferences(column, (column) => column.items),\n },\n [KanbanItemType.typename]: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (item: KanbanItemType) => [], // loadObjectReferences(item, (item) => item.object),\n },\n },\n },\n echo: {\n schema: [KanbanType],\n system: [KanbanColumnType, KanbanItemType],\n },\n translations,\n graph: {\n builder: (plugins) => {\n const client = resolvePlugin(plugins, parseClientPlugin)?.provides.client;\n const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatch;\n if (!client || !dispatch) {\n return [];\n }\n\n return createExtension({\n id: KanbanAction.CREATE,\n filter: (node): node is ActionGroup => isActionGroup(node) && node.id.startsWith(SpaceAction.ADD_OBJECT),\n actions: ({ node }) => {\n const id = node.id.split('/').at(-1);\n const [spaceId, objectId] = id?.split(':') ?? [];\n const space = client.spaces.get().find((space) => space.id === spaceId);\n const object = objectId && space?.db.getObjectById(objectId);\n const target = objectId ? object : space;\n if (!target) {\n return;\n }\n\n return [\n {\n id: `${KANBAN_PLUGIN}/create/${node.id}`,\n data: async () => {\n await dispatch([\n { plugin: KANBAN_PLUGIN, action: KanbanAction.CREATE },\n { action: SpaceAction.ADD_OBJECT, data: { target } },\n { action: NavigationAction.OPEN },\n ]);\n },\n properties: {\n label: ['create kanban label', { ns: KANBAN_PLUGIN }],\n icon: 'ph--kanban--regular',\n testId: 'kanbanPlugin.createObject',\n },\n },\n ];\n },\n });\n },\n },\n surface: {\n component: ({ data, role }) => {\n switch (role) {\n case 'main':\n return data.active instanceof KanbanType ? <KanbanMain kanban={data.active} /> : null;\n default:\n return null;\n }\n },\n },\n intent: {\n resolver: (intent) => {\n switch (intent.action) {\n case KanbanAction.CREATE: {\n return { data: create(KanbanType, { columns: [] }) };\n }\n }\n },\n },\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport const KanbanMain = lazy(() => import('./KanbanMain'));\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { KANBAN_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\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 item',\n 'delete column label': 'Delete column',\n 'delete item label': 'Delete item',\n 'create kanban label': 'Create kanban',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { KanbanPlugin } from './KanbanPlugin';\n\nexport default KanbanPlugin;\n\nexport * from './KanbanPlugin';\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "KanbanMain", "lazy", "KANBAN_PLUGIN", "KanbanPlugin", "meta", "provides", "metadata", "records", "KanbanType", "typename", "placeholder", "ns", "icon", "loadReferences", "kanban", "loadObjectReferences", "columns", "KanbanColumnType", "column", "items", "KanbanItemType", "item", "echo", "schema", "system", "translations", "graph", "builder", "plugins", "client", "resolvePlugin", "parseClientPlugin", "dispatch", "parseIntentPlugin", "intent", "createExtension", "id", "KanbanAction", "CREATE", "filter", "node", "isActionGroup", "startsWith", "SpaceAction", "ADD_OBJECT", "actions", "split", "at", "spaceId", "objectId", "space", "spaces", "get", "find", "object", "db", "getObjectById", "target", "data", "plugin", "action", "NavigationAction", "OPEN", "properties", "label", "testId", "surface", "component", "role", "active", "React", "resolver", "create"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/plugins/experimental/plugin-kanban/src/meta.ts":{"bytes":1585,"imports":[],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/KanbanCard.tsx":{"bytes":11021,"imports":[{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"@dnd-kit/utilities","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","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/components/util.ts":{"bytes":4112,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/KanbanColumn.tsx":{"bytes":18468,"imports":[{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"@dnd-kit/utilities","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanCard.tsx","kind":"import-statement","original":"./KanbanCard"},{"path":"packages/plugins/experimental/plugin-kanban/src/components/util.ts","kind":"import-statement","original":"./util"},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/KanbanBoard.tsx":{"bytes":23457,"imports":[{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanCard.tsx","kind":"import-statement","original":"./KanbanCard"},{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanColumn.tsx","kind":"import-statement","original":"./KanbanColumn"},{"path":"packages/plugins/experimental/plugin-kanban/src/components/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/types/kanban.ts":{"bytes":3260,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/types/types.ts":{"bytes":3939,"imports":[{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/types/index.ts":{"bytes":600,"imports":[{"path":"packages/plugins/experimental/plugin-kanban/src/types/kanban.ts","kind":"import-statement","original":"./kanban"},{"path":"packages/plugins/experimental/plugin-kanban/src/types/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/KanbanMain.tsx":{"bytes":4739,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanBoard.tsx","kind":"import-statement","original":"./KanbanBoard"},{"path":"packages/plugins/experimental/plugin-kanban/src/types/index.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/index.ts":{"bytes":784,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanMain.tsx","kind":"dynamic-import","original":"./KanbanMain"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/translations.ts":{"bytes":2509,"imports":[{"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":16232,"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/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","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/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/plugins/experimental/plugin-kanban/src/types/index.ts","kind":"import-statement","original":"./types"},{"path":"packages/plugins/experimental/plugin-kanban/src/types/index.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/index.ts":{"bytes":795,"imports":[{"path":"packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx","kind":"import-statement","original":"./KanbanPlugin"},{"path":"packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx","kind":"import-statement","original":"./KanbanPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/experimental/plugin-kanban/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8771},"packages/plugins/experimental/plugin-kanban/dist/lib/node/index.cjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-O7VZ6HTM.cjs","kind":"import-statement"},{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs","kind":"import-statement"},{"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/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/KanbanMain-O2OG6TKM.cjs","kind":"dynamic-import"}],"exports":["KanbanPlugin","default"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/index.ts","inputs":{"packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx":{"bytesInOutput":4124},"packages/plugins/experimental/plugin-kanban/src/components/index.ts":{"bytesInOutput":96},"packages/plugins/experimental/plugin-kanban/src/translations.ts":{"bytesInOutput":619},"packages/plugins/experimental/plugin-kanban/src/index.ts":{"bytesInOutput":32}},"bytes":5477},"packages/plugins/experimental/plugin-kanban/dist/lib/node/meta.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/experimental/plugin-kanban/dist/lib/node/meta.cjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs","kind":"import-statement"}],"exports":["KANBAN_PLUGIN","default"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/meta.ts","inputs":{},"bytes":161},"packages/plugins/experimental/plugin-kanban/dist/lib/node/types/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/experimental/plugin-kanban/dist/lib/node/types/index.cjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-O7VZ6HTM.cjs","kind":"import-statement"},{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs","kind":"import-statement"}],"exports":["KanbanAction","KanbanColumnType","KanbanItemType","KanbanType"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/types/index.ts","inputs":{},"bytes":254},"packages/plugins/experimental/plugin-kanban/dist/lib/node/KanbanMain-O2OG6TKM.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":31751},"packages/plugins/experimental/plugin-kanban/dist/lib/node/KanbanMain-O2OG6TKM.cjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-O7VZ6HTM.cjs","kind":"import-statement"},{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"@dnd-kit/utilities","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"@dnd-kit/utilities","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/components/KanbanMain.tsx","inputs":{"packages/plugins/experimental/plugin-kanban/src/components/KanbanMain.tsx":{"bytesInOutput":964},"packages/plugins/experimental/plugin-kanban/src/components/KanbanBoard.tsx":{"bytesInOutput":5200},"packages/plugins/experimental/plugin-kanban/src/components/KanbanCard.tsx":{"bytesInOutput":2924},"packages/plugins/experimental/plugin-kanban/src/components/KanbanColumn.tsx":{"bytesInOutput":5070},"packages/plugins/experimental/plugin-kanban/src/components/util.ts":{"bytesInOutput":755}},"bytes":15762},"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-O7VZ6HTM.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3910},"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-O7VZ6HTM.cjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs","kind":"import-statement"},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["KanbanAction","KanbanColumnType","KanbanItemType","KanbanType"],"inputs":{"packages/plugins/experimental/plugin-kanban/src/types/kanban.ts":{"bytesInOutput":714},"packages/plugins/experimental/plugin-kanban/src/types/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-kanban/src/types/types.ts":{"bytesInOutput":214}},"bytes":1243},"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":746},"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs":{"imports":[],"exports":["KANBAN_PLUGIN","meta_default"],"inputs":{"packages/plugins/experimental/plugin-kanban/src/meta.ts":{"bytesInOutput":320}},"bytes":468}}}
1
+ {"inputs":{"packages/plugins/experimental/plugin-kanban/src/meta.ts":{"bytes":1585,"imports":[],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/KanbanCard.tsx":{"bytes":11021,"imports":[{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"@dnd-kit/utilities","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","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/components/util.ts":{"bytes":4112,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/KanbanColumn.tsx":{"bytes":18468,"imports":[{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"@dnd-kit/utilities","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanCard.tsx","kind":"import-statement","original":"./KanbanCard"},{"path":"packages/plugins/experimental/plugin-kanban/src/components/util.ts","kind":"import-statement","original":"./util"},{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/KanbanBoard.tsx":{"bytes":23457,"imports":[{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanCard.tsx","kind":"import-statement","original":"./KanbanCard"},{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanColumn.tsx","kind":"import-statement","original":"./KanbanColumn"},{"path":"packages/plugins/experimental/plugin-kanban/src/components/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/types/kanban.ts":{"bytes":3260,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/types/types.ts":{"bytes":3935,"imports":[{"path":"packages/plugins/experimental/plugin-kanban/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/types/index.ts":{"bytes":600,"imports":[{"path":"packages/plugins/experimental/plugin-kanban/src/types/kanban.ts","kind":"import-statement","original":"./kanban"},{"path":"packages/plugins/experimental/plugin-kanban/src/types/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/KanbanMain.tsx":{"bytes":4739,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanBoard.tsx","kind":"import-statement","original":"./KanbanBoard"},{"path":"packages/plugins/experimental/plugin-kanban/src/types/index.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/components/index.ts":{"bytes":784,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/src/components/KanbanMain.tsx","kind":"dynamic-import","original":"./KanbanMain"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/translations.ts":{"bytes":2509,"imports":[{"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":16344,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","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/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/plugins/experimental/plugin-kanban/src/types/index.ts","kind":"import-statement","original":"./types"},{"path":"packages/plugins/experimental/plugin-kanban/src/types/index.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/plugins/experimental/plugin-kanban/src/index.ts":{"bytes":795,"imports":[{"path":"packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx","kind":"import-statement","original":"./KanbanPlugin"},{"path":"packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx","kind":"import-statement","original":"./KanbanPlugin"}],"format":"esm"}},"outputs":{"packages/plugins/experimental/plugin-kanban/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8813},"packages/plugins/experimental/plugin-kanban/dist/lib/node/index.cjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-LTR4WYI2.cjs","kind":"import-statement"},{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/plugin-client","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/plugin-space","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/KanbanMain-4OWAWTS4.cjs","kind":"dynamic-import"}],"exports":["KanbanPlugin","default"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/index.ts","inputs":{"packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx":{"bytesInOutput":4152},"packages/plugins/experimental/plugin-kanban/src/components/index.ts":{"bytesInOutput":96},"packages/plugins/experimental/plugin-kanban/src/translations.ts":{"bytesInOutput":619},"packages/plugins/experimental/plugin-kanban/src/index.ts":{"bytesInOutput":32}},"bytes":5505},"packages/plugins/experimental/plugin-kanban/dist/lib/node/meta.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/experimental/plugin-kanban/dist/lib/node/meta.cjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs","kind":"import-statement"}],"exports":["KANBAN_PLUGIN","default"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/meta.ts","inputs":{},"bytes":161},"packages/plugins/experimental/plugin-kanban/dist/lib/node/types/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/experimental/plugin-kanban/dist/lib/node/types/index.cjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-LTR4WYI2.cjs","kind":"import-statement"},{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs","kind":"import-statement"}],"exports":["KanbanAction","KanbanColumnType","KanbanItemType","KanbanType"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/types/index.ts","inputs":{},"bytes":254},"packages/plugins/experimental/plugin-kanban/dist/lib/node/KanbanMain-4OWAWTS4.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":31751},"packages/plugins/experimental/plugin-kanban/dist/lib/node/KanbanMain-4OWAWTS4.cjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-LTR4WYI2.cjs","kind":"import-statement"},{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/live-object","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"@dnd-kit/utilities","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dnd-kit/core","kind":"import-statement","external":true},{"path":"@dnd-kit/sortable","kind":"import-statement","external":true},{"path":"@dnd-kit/utilities","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/plugins/experimental/plugin-kanban/src/components/KanbanMain.tsx","inputs":{"packages/plugins/experimental/plugin-kanban/src/components/KanbanMain.tsx":{"bytesInOutput":964},"packages/plugins/experimental/plugin-kanban/src/components/KanbanBoard.tsx":{"bytesInOutput":5200},"packages/plugins/experimental/plugin-kanban/src/components/KanbanCard.tsx":{"bytesInOutput":2924},"packages/plugins/experimental/plugin-kanban/src/components/KanbanColumn.tsx":{"bytesInOutput":5070},"packages/plugins/experimental/plugin-kanban/src/components/util.ts":{"bytesInOutput":755}},"bytes":15762},"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-LTR4WYI2.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3909},"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-LTR4WYI2.cjs":{"imports":[{"path":"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs","kind":"import-statement"},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["KanbanAction","KanbanColumnType","KanbanItemType","KanbanType"],"inputs":{"packages/plugins/experimental/plugin-kanban/src/types/kanban.ts":{"bytesInOutput":714},"packages/plugins/experimental/plugin-kanban/src/types/index.ts":{"bytesInOutput":0},"packages/plugins/experimental/plugin-kanban/src/types/types.ts":{"bytesInOutput":214}},"bytes":1243},"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":746},"packages/plugins/experimental/plugin-kanban/dist/lib/node/chunk-MBAGHRFM.cjs":{"imports":[],"exports":["KANBAN_PLUGIN","meta_default"],"inputs":{"packages/plugins/experimental/plugin-kanban/src/meta.ts":{"bytesInOutput":320}},"bytes":468}}}
@@ -18,13 +18,13 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var types_exports = {};
20
20
  __export(types_exports, {
21
- KanbanAction: () => import_chunk_O7VZ6HTM.KanbanAction,
22
- KanbanColumnType: () => import_chunk_O7VZ6HTM.KanbanColumnType,
23
- KanbanItemType: () => import_chunk_O7VZ6HTM.KanbanItemType,
24
- KanbanType: () => import_chunk_O7VZ6HTM.KanbanType
21
+ KanbanAction: () => import_chunk_LTR4WYI2.KanbanAction,
22
+ KanbanColumnType: () => import_chunk_LTR4WYI2.KanbanColumnType,
23
+ KanbanItemType: () => import_chunk_LTR4WYI2.KanbanItemType,
24
+ KanbanType: () => import_chunk_LTR4WYI2.KanbanType
25
25
  });
26
26
  module.exports = __toCommonJS(types_exports);
27
- var import_chunk_O7VZ6HTM = require("../chunk-O7VZ6HTM.cjs");
27
+ var import_chunk_LTR4WYI2 = require("../chunk-LTR4WYI2.cjs");
28
28
  var import_chunk_MBAGHRFM = require("../chunk-MBAGHRFM.cjs");
29
29
  // Annotate the CommonJS export names for ESM import in node:
30
30
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["index.cjs"],
4
- "sourcesContent": ["import {\n KanbanAction,\n KanbanColumnType,\n KanbanItemType,\n KanbanType\n} from \"../chunk-O7VZ6HTM.cjs\";\nimport \"../chunk-MBAGHRFM.cjs\";\nexport {\n KanbanAction,\n KanbanColumnType,\n KanbanItemType,\n KanbanType\n};\n//# sourceMappingURL=index.cjs.map\n"],
4
+ "sourcesContent": ["import {\n KanbanAction,\n KanbanColumnType,\n KanbanItemType,\n KanbanType\n} from \"../chunk-LTR4WYI2.cjs\";\nimport \"../chunk-MBAGHRFM.cjs\";\nexport {\n KanbanAction,\n KanbanColumnType,\n KanbanItemType,\n KanbanType\n};\n//# sourceMappingURL=index.cjs.map\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAKO;AACP,4BAAO;",
6
6
  "names": []
7
7
  }
@@ -2,14 +2,14 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  KanbanColumnType,
4
4
  KanbanItemType
5
- } from "./chunk-NRH3LKPT.mjs";
5
+ } from "./chunk-2ZBX5F7L.mjs";
6
6
  import {
7
7
  KANBAN_PLUGIN
8
8
  } from "./chunk-OTZHYV3S.mjs";
9
9
 
10
10
  // packages/plugins/experimental/plugin-kanban/src/components/KanbanMain.tsx
11
11
  import React4 from "react";
12
- import { create } from "@dxos/echo-schema";
12
+ import { create } from "@dxos/live-object";
13
13
  import { getSpace } from "@dxos/react-client/echo";
14
14
  import { Main } from "@dxos/react-ui";
15
15
  import { topbarBlockPaddingStart, fixedInsetFlexLayout, bottombarBlockPaddingEnd } from "@dxos/react-ui-theme";
@@ -442,4 +442,4 @@ var KanbanMain_default = KanbanMain;
442
442
  export {
443
443
  KanbanMain_default as default
444
444
  };
445
- //# sourceMappingURL=KanbanMain-6HTVRMTN.mjs.map
445
+ //# sourceMappingURL=KanbanMain-PJC2JMJH.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/KanbanMain.tsx", "../../../src/components/KanbanBoard.tsx", "../../../src/components/KanbanCard.tsx", "../../../src/components/KanbanColumn.tsx", "../../../src/components/util.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC } from 'react';\n\nimport { create } from '@dxos/echo-schema';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { Main } from '@dxos/react-ui';\nimport { topbarBlockPaddingStart, fixedInsetFlexLayout, bottombarBlockPaddingEnd } from '@dxos/react-ui-theme';\n\nimport { KanbanBoard } from './KanbanBoard';\nimport { type KanbanType, KanbanColumnType, KanbanItemType, type KanbanModel } from '../types';\n\nconst KanbanMain: FC<{ kanban: KanbanType }> = ({ kanban }) => {\n // const { t } = useTranslation(KANBAN_PLUGIN);\n const space = getSpace(kanban);\n if (!space) {\n return null;\n }\n\n // TODO(burdon): Should plugin create and pass in model?\n const model: KanbanModel = {\n root: kanban, // TODO(burdon): How to keep pure?\n createColumn: () => space.db.add(create(KanbanColumnType, { items: [] })),\n // TODO(burdon): Add metadata from column in the case of projections.\n createItem: (column) => space.db.add(create(KanbanItemType, { name: '' })),\n };\n\n return (\n <Main.Content classNames={[fixedInsetFlexLayout, topbarBlockPaddingStart, bottombarBlockPaddingEnd]}>\n <KanbanBoard model={model} />\n </Main.Content>\n );\n};\n\nexport default KanbanMain;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n DndContext,\n type DragEndEvent,\n type DragMoveEvent,\n type DragOverEvent,\n DragOverlay,\n type DragStartEvent,\n type Modifier,\n MouseSensor,\n useSensor,\n} from '@dnd-kit/core';\nimport { horizontalListSortingStrategy, SortableContext } from '@dnd-kit/sortable';\nimport React, { type FC, useEffect, useState } from 'react';\n\nimport { createSubscription } from '@dxos/react-client/echo';\nimport { arrayMove, nonNullable } from '@dxos/util';\n\nimport { KanbanCardComponent } from './KanbanCard';\nimport { type ItemsMapper, KanbanColumnComponent, KanbanColumnComponentPlaceholder } from './KanbanColumn';\nimport { findLocation, useSubscription } from './util';\nimport type { KanbanColumnType, KanbanItemType, Location, KanbanModel } from '../types';\n\n// TODO(burdon): Touch sensors.\n// TODO(burdon): Prevent browser nav back when swiping left/right.\n// TODO(burdon): Consistently use FC?\nexport const KanbanBoard: FC<{ model: KanbanModel }> = ({ model }) => {\n const kanban = model.root;\n // TODO(wittjosiah): Remove?\n useSubscription(kanban.columns);\n\n // TODO(burdon): Remove since now uses ECHO.\n const [_, setIter] = useState([]);\n\n useEffect(() => {\n const handle = createSubscription(() => setIter([]));\n handle.update([kanban.columns]);\n return () => handle.unsubscribe();\n }, []);\n\n const mouseSensor = useSensor(MouseSensor, {\n activationConstraint: {\n distance: 8,\n },\n });\n\n // Dragging column.\n // TODO(burdon): Dragging column causes flickering when dragging left to first column.\n const [draggingColumn, setDraggingColumn] = useState<KanbanColumnType | undefined>();\n\n // Dragging item.\n const [draggingItem, setDraggingItem] = useState<{ source: Location; target?: Location }>();\n // While dragging, temporarily remap which items should be visible inside each column.\n const itemMapper: ItemsMapper = (column: string, items: KanbanItemType[]) => {\n const { source, target } = draggingItem ?? {};\n if (source && target) {\n if (source?.column.id !== target?.column.id && (column === source?.column.id || column === target?.column.id)) {\n const modified = [...items];\n if (column === source.column.id) {\n // Temporarily remove from old column.\n modified.splice(source.idx!, 1);\n } else if (column === target.column.id) {\n // Temporarily insert into new column.\n // TODO(burdon): Use ref to track item being temporarily moved.\n modified.splice(target.idx ?? modified.length, 0, source.item!);\n }\n\n return modified;\n }\n }\n\n return items;\n };\n\n const handleDragStart = ({ active }: DragStartEvent) => {\n kanban.columns.filter(nonNullable).forEach((column) => {\n if (column.id === active.id) {\n setDraggingColumn(column);\n } else {\n const idx = column.items.filter(nonNullable).findIndex((item) => item.id === active.id);\n if (idx !== -1) {\n setDraggingItem({ source: { column, item: column.items![idx], idx } });\n }\n }\n });\n };\n\n const handleDragMove = (event: DragMoveEvent) => {};\n\n const handleDragOver = ({ active, over }: DragOverEvent) => {\n if (draggingItem) {\n const { source } = draggingItem;\n const target = findLocation(kanban.columns.filter(nonNullable), over?.id as string);\n if (active.id !== over?.id) {\n setDraggingItem({ source, target });\n }\n }\n };\n\n // TODO(burdon): Call model to update.\n const handleDragEnd = (event: DragEndEvent) => {\n if (draggingColumn) {\n const { active, over } = event;\n const oldIndex = kanban.columns.filter(nonNullable).findIndex((column) => column.id === active.id);\n const newIndex = kanban.columns.filter(nonNullable).findIndex((column) => column.id === over?.id);\n arrayMove(kanban.columns, oldIndex, newIndex);\n } else if (draggingItem) {\n const { source, target } = draggingItem;\n if (source.column.id === target!.column.id) {\n if (target!.idx !== undefined) {\n arrayMove(source.column.items!, source.idx!, target!.idx);\n }\n } else {\n source.column.items!.splice(source.idx!, 1);\n // TODO(burdon): Incorrect position when moving to new column.\n target!.column.items!.splice(target!.idx ?? target!.column.items!.length, 0, source.item!);\n }\n }\n\n setDraggingColumn(undefined);\n setDraggingItem(undefined);\n };\n\n const handleDragCancel = () => {\n setDraggingColumn(undefined);\n setDraggingItem(undefined);\n };\n\n const handleCreateColumn = () => {\n const column = model.createColumn();\n kanban.columns.splice(kanban.columns.length, 0, column);\n };\n\n // TODO(burdon): Move to model.\n const handleDeleteColumn = (id: string) => {\n const index = kanban.columns.filter(nonNullable).findIndex((column) => column.id === id);\n if (index >= 0) {\n kanban.columns.splice(index, 1);\n }\n };\n\n const customModifier: Modifier = ({ transform }) => {\n if (draggingColumn) {\n return {\n ...transform,\n y: 0,\n };\n } else {\n return transform;\n }\n };\n\n return (\n <div className='flex overflow-x-scroll'>\n <div className='flex m-4 space-x-4 snap-x'>\n <DndContext\n sensors={[mouseSensor]}\n modifiers={[customModifier]}\n onDragStart={handleDragStart}\n onDragMove={handleDragMove}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <SortableContext\n strategy={horizontalListSortingStrategy}\n items={kanban.columns.filter(nonNullable).map(({ id }) => id!)}\n >\n {kanban.columns.filter(nonNullable).map((column) => (\n <KanbanColumnComponent\n key={column.id}\n column={column}\n itemMapper={itemMapper}\n onCreate={(column: KanbanColumnType) => model.createItem(column)}\n onDelete={() => handleDeleteColumn(column.id!)}\n />\n ))}\n </SortableContext>\n\n {/* Overlay required to drag across columns. */}\n {draggingItem && (\n <DragOverlay style={{ margin: 0 }}>\n <KanbanCardComponent item={draggingItem.source.item!} onDelete={() => {}} />\n </DragOverlay>\n )}\n\n {handleCreateColumn && <KanbanColumnComponentPlaceholder onAdd={handleCreateColumn} />}\n </DndContext>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { DotsSixVertical, X } from '@phosphor-icons/react';\nimport React, { type FC } from 'react';\n\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { Button, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createDataExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { getSize, mx, attentionSurface, focusRing } from '@dxos/react-ui-theme';\n\nimport { KANBAN_PLUGIN } from '../meta';\nimport { type KanbanColumnType, type KanbanItemType } from '../types';\n\nconst DeleteItem = ({ onClick }: { onClick: () => void }) => {\n const { t } = useTranslation(KANBAN_PLUGIN);\n return (\n <Button variant='ghost' onClick={onClick} classNames='plb-0 pli-0.5 -mlb-1'>\n <span className='sr-only'>{t('delete item label')}</span>\n <X className={getSize(4)} />\n </Button>\n );\n};\n\nexport const KanbanCardComponent: FC<{\n column?: KanbanColumnType;\n item: KanbanItemType;\n debug?: boolean;\n onDelete?: () => void;\n}> = ({ column, item, debug = false, onDelete }) => {\n const { themeMode } = useThemeContext();\n const { t } = useTranslation(KANBAN_PLUGIN);\n const { isDragging, attributes, listeners, transform, transition, setNodeRef } = useSortable({\n id: item.id,\n data: { type: 'item', column },\n });\n const tx = transform ? Object.assign(transform, { scaleY: 1 }) : null;\n\n const { parentRef, focusAttributes } = useTextEditor(\n () => ({\n initialValue: item.name,\n extensions: [\n createDataExtensions({ id: item.id, text: createDocAccessor(item, ['name']) }),\n createBasicExtensions({ placeholder: t('item title placeholder') }),\n createThemeExtensions({ themeMode }),\n ],\n }),\n [item, themeMode],\n );\n\n return (\n <div\n ref={setNodeRef}\n style={{ transform: CSS.Transform.toString(tx), transition }}\n className={mx('flex grow', isDragging && 'border border-neutral-400 dark:border-neutral-800')}\n >\n <div className={mx('flex items-start grow p-1', attentionSurface, isDragging && 'opacity-10')}>\n {/* TODO(burdon): Standardize height (and below); e.g., via toolbar. */}\n <button className='flex h-[40px] items-center' {...attributes} {...listeners}>\n <DotsSixVertical className={getSize(5)} />\n </button>\n <div className='flex flex-col grow pt-1'>\n <div {...focusAttributes} className={mx(focusRing, 'rounded-sm p-1')} ref={parentRef} />\n {debug && <div className='text-xs text-red-800'>{item.id.slice(0, 9)}</div>}\n </div>\n {onDelete && (\n <div className='flex h-[40px] items-center'>\n <DeleteItem onClick={onDelete} />\n </div>\n )}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useDroppable } from '@dnd-kit/core';\nimport { SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { DotsSixVertical, X, Plus } from '@phosphor-icons/react';\nimport React, { type FC } from 'react';\n\nimport { Button, Input, useTranslation } from '@dxos/react-ui';\nimport { modalSurface, getSize, groupSurface, mx } from '@dxos/react-ui-theme';\nimport { nonNullable } from '@dxos/util';\n\nimport { KanbanCardComponent } from './KanbanCard';\nimport { useSubscription } from './util';\nimport { KANBAN_PLUGIN } from '../meta';\nimport { type KanbanColumnType, type KanbanItemType } from '../types';\n\nexport type ItemsMapper = (column: string, items: KanbanItemType[]) => KanbanItemType[];\n\nconst DeleteColumn = ({ onClick }: { onClick: () => void }) => {\n const { t } = useTranslation(KANBAN_PLUGIN);\n return (\n <Button variant='ghost' onClick={onClick} classNames='plb-0 pli-0.5 -mlb-1'>\n <span className='sr-only'>{t('delete column label')}</span>\n <X className={getSize(4)} />\n </Button>\n );\n};\n\nconst AddItem = ({ onClick }: { onClick: () => void }) => {\n const { t } = useTranslation(KANBAN_PLUGIN);\n return (\n <Button variant='ghost' onClick={onClick} classNames='plb-0 pli-0.5 -mlb-1'>\n <span className='sr-only'>{t('add item label')}</span>\n <Plus className={getSize(4)} />\n </Button>\n );\n};\n\n// TODO(burdon): Factor out container.\nexport const KanbanColumnComponentPlaceholder: FC<{ onAdd: () => void }> = ({ onAdd }) => {\n const { t } = useTranslation(KANBAN_PLUGIN);\n return (\n <div className={mx('flex flex-col justify-center shadow rounded w-[300px] h-[300px]', groupSurface)}>\n <Button variant='ghost' onClick={onAdd} classNames='plb-0 pli-0.5 -mlb-1'>\n <span className='sr-only'>{t('add column label')}</span>\n <Plus className={getSize(6)} />\n </Button>\n </div>\n );\n};\n\nexport const KanbanColumnComponent: FC<{\n column: KanbanColumnType;\n itemMapper?: ItemsMapper;\n debug?: boolean; // TODO(burdon): Context.\n onCreate?: (column: KanbanColumnType) => KanbanItemType;\n onDelete?: () => void;\n}> = ({ column, itemMapper, debug = false, onCreate, onDelete }) => {\n const { t } = useTranslation(KANBAN_PLUGIN);\n\n // TODO(wittjosiah): Remove?\n useSubscription([column.items]);\n const items = itemMapper?.(column.id!, column.items.filter(nonNullable)) ?? column.items!;\n\n const { setNodeRef: setDroppableNodeRef } = useDroppable({ id: column.id! });\n const { isDragging, attributes, listeners, transform, transition, setNodeRef } = useSortable({\n id: column.id!,\n data: { type: 'column' },\n });\n const tx = transform ? Object.assign(transform, { scaleY: 1 }) : null;\n\n const handleAddItem = onCreate\n ? () => {\n const item = onCreate(column);\n column.items!.splice(column.items!.length, 0, item);\n }\n : undefined;\n\n const handleDeleteItem = (id: string) => {\n const index = column.items.filter(nonNullable).findIndex((column) => column.id === id);\n if (index >= 0) {\n column.items!.splice(index, 1);\n }\n };\n\n return (\n <div\n ref={setNodeRef}\n style={{ transform: CSS.Transform.toString(tx), transition }}\n className={mx('flex flex-col snap-center overflow-y-hidden', isDragging && 'relative z-10')}\n >\n {/* TODO(burdon): Width approx mobile phone width. */}\n <div\n className={mx(\n 'flex flex-col py-2 overflow-hidden shadow rounded w-[300px] min-h-[300px]',\n isDragging ? modalSurface : groupSurface,\n )}\n >\n <div className='flex items-center mb-2 px-2'>\n <button {...attributes} {...listeners}>\n <DotsSixVertical className={getSize(5)} />\n </button>\n\n <Input.Root>\n <Input.Label srOnly>{t('column title label')}</Input.Label>\n <Input.TextInput\n variant='subdued'\n classNames='px-2'\n placeholder={t('column title placeholder')}\n defaultValue={column.name}\n onChange={({ target: { value } }) => (column.name = value)}\n />\n </Input.Root>\n\n {/* TODO(burdon): Menu. */}\n {onDelete && <DeleteColumn onClick={onDelete} />}\n </div>\n\n {/* TODO(burdon): Scrolling (radix; see kai/mosaic). */}\n <SortableContext strategy={verticalListSortingStrategy} items={items.filter(nonNullable).map(({ id }) => id)}>\n <div ref={setDroppableNodeRef} className='flex flex-col grow overflow-y-scroll space-y-2 pr-4'>\n {items.filter(nonNullable).map((item) => (\n <div key={item.id} id={item.id} className='flex pl-2'>\n <KanbanCardComponent column={column} item={item} onDelete={() => handleDeleteItem(item.id)} />\n </div>\n ))}\n </div>\n </SortableContext>\n\n {handleAddItem && (\n <div className='flex justify-center mt-2'>\n <AddItem onClick={handleAddItem} />\n </div>\n )}\n\n {debug && <div className='px-2 text-xs text-red-800'>{column.id!.slice(0, 9)}</div>}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { createSubscription } from '@dxos/react-client/echo';\nimport { nonNullable } from '@dxos/util';\n\nimport { type KanbanColumnType, type Location } from '../types';\n\n// TODO(burdon): Factor out.\nexport const useSubscription = (data: any) => {\n const [_, setIter] = useState([]);\n useEffect(() => {\n const handle = createSubscription(() => setIter([]));\n handle.update(data);\n return () => handle.unsubscribe();\n }, []);\n};\n\n/**\n * Find the column or item within the model.\n */\n// TODO(burdon): Move to model.\nexport const findLocation = (columns: KanbanColumnType[], id: string): Location | undefined => {\n for (const column of columns) {\n // TODO(burdon): Need transient ID for UX.\n if (column.id === id) {\n return { column };\n } else {\n const idx = column.items.filter(nonNullable).findIndex((item) => item.id === id);\n if (idx !== -1) {\n return { column, item: column.items![idx], idx };\n }\n }\n }\n};\n"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type FC } from 'react';\n\nimport { create } from '@dxos/live-object';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { Main } from '@dxos/react-ui';\nimport { topbarBlockPaddingStart, fixedInsetFlexLayout, bottombarBlockPaddingEnd } from '@dxos/react-ui-theme';\n\nimport { KanbanBoard } from './KanbanBoard';\nimport { type KanbanType, KanbanColumnType, KanbanItemType, type KanbanModel } from '../types';\n\nconst KanbanMain: FC<{ kanban: KanbanType }> = ({ kanban }) => {\n // const { t } = useTranslation(KANBAN_PLUGIN);\n const space = getSpace(kanban);\n if (!space) {\n return null;\n }\n\n // TODO(burdon): Should plugin create and pass in model?\n const model: KanbanModel = {\n root: kanban, // TODO(burdon): How to keep pure?\n createColumn: () => space.db.add(create(KanbanColumnType, { items: [] })),\n // TODO(burdon): Add metadata from column in the case of projections.\n createItem: (column) => space.db.add(create(KanbanItemType, { name: '' })),\n };\n\n return (\n <Main.Content classNames={[fixedInsetFlexLayout, topbarBlockPaddingStart, bottombarBlockPaddingEnd]}>\n <KanbanBoard model={model} />\n </Main.Content>\n );\n};\n\nexport default KanbanMain;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n DndContext,\n type DragEndEvent,\n type DragMoveEvent,\n type DragOverEvent,\n DragOverlay,\n type DragStartEvent,\n type Modifier,\n MouseSensor,\n useSensor,\n} from '@dnd-kit/core';\nimport { horizontalListSortingStrategy, SortableContext } from '@dnd-kit/sortable';\nimport React, { type FC, useEffect, useState } from 'react';\n\nimport { createSubscription } from '@dxos/react-client/echo';\nimport { arrayMove, nonNullable } from '@dxos/util';\n\nimport { KanbanCardComponent } from './KanbanCard';\nimport { type ItemsMapper, KanbanColumnComponent, KanbanColumnComponentPlaceholder } from './KanbanColumn';\nimport { findLocation, useSubscription } from './util';\nimport type { KanbanColumnType, KanbanItemType, Location, KanbanModel } from '../types';\n\n// TODO(burdon): Touch sensors.\n// TODO(burdon): Prevent browser nav back when swiping left/right.\n// TODO(burdon): Consistently use FC?\nexport const KanbanBoard: FC<{ model: KanbanModel }> = ({ model }) => {\n const kanban = model.root;\n // TODO(wittjosiah): Remove?\n useSubscription(kanban.columns);\n\n // TODO(burdon): Remove since now uses ECHO.\n const [_, setIter] = useState([]);\n\n useEffect(() => {\n const handle = createSubscription(() => setIter([]));\n handle.update([kanban.columns]);\n return () => handle.unsubscribe();\n }, []);\n\n const mouseSensor = useSensor(MouseSensor, {\n activationConstraint: {\n distance: 8,\n },\n });\n\n // Dragging column.\n // TODO(burdon): Dragging column causes flickering when dragging left to first column.\n const [draggingColumn, setDraggingColumn] = useState<KanbanColumnType | undefined>();\n\n // Dragging item.\n const [draggingItem, setDraggingItem] = useState<{ source: Location; target?: Location }>();\n // While dragging, temporarily remap which items should be visible inside each column.\n const itemMapper: ItemsMapper = (column: string, items: KanbanItemType[]) => {\n const { source, target } = draggingItem ?? {};\n if (source && target) {\n if (source?.column.id !== target?.column.id && (column === source?.column.id || column === target?.column.id)) {\n const modified = [...items];\n if (column === source.column.id) {\n // Temporarily remove from old column.\n modified.splice(source.idx!, 1);\n } else if (column === target.column.id) {\n // Temporarily insert into new column.\n // TODO(burdon): Use ref to track item being temporarily moved.\n modified.splice(target.idx ?? modified.length, 0, source.item!);\n }\n\n return modified;\n }\n }\n\n return items;\n };\n\n const handleDragStart = ({ active }: DragStartEvent) => {\n kanban.columns.filter(nonNullable).forEach((column) => {\n if (column.id === active.id) {\n setDraggingColumn(column);\n } else {\n const idx = column.items.filter(nonNullable).findIndex((item) => item.id === active.id);\n if (idx !== -1) {\n setDraggingItem({ source: { column, item: column.items![idx], idx } });\n }\n }\n });\n };\n\n const handleDragMove = (event: DragMoveEvent) => {};\n\n const handleDragOver = ({ active, over }: DragOverEvent) => {\n if (draggingItem) {\n const { source } = draggingItem;\n const target = findLocation(kanban.columns.filter(nonNullable), over?.id as string);\n if (active.id !== over?.id) {\n setDraggingItem({ source, target });\n }\n }\n };\n\n // TODO(burdon): Call model to update.\n const handleDragEnd = (event: DragEndEvent) => {\n if (draggingColumn) {\n const { active, over } = event;\n const oldIndex = kanban.columns.filter(nonNullable).findIndex((column) => column.id === active.id);\n const newIndex = kanban.columns.filter(nonNullable).findIndex((column) => column.id === over?.id);\n arrayMove(kanban.columns, oldIndex, newIndex);\n } else if (draggingItem) {\n const { source, target } = draggingItem;\n if (source.column.id === target!.column.id) {\n if (target!.idx !== undefined) {\n arrayMove(source.column.items!, source.idx!, target!.idx);\n }\n } else {\n source.column.items!.splice(source.idx!, 1);\n // TODO(burdon): Incorrect position when moving to new column.\n target!.column.items!.splice(target!.idx ?? target!.column.items!.length, 0, source.item!);\n }\n }\n\n setDraggingColumn(undefined);\n setDraggingItem(undefined);\n };\n\n const handleDragCancel = () => {\n setDraggingColumn(undefined);\n setDraggingItem(undefined);\n };\n\n const handleCreateColumn = () => {\n const column = model.createColumn();\n kanban.columns.splice(kanban.columns.length, 0, column);\n };\n\n // TODO(burdon): Move to model.\n const handleDeleteColumn = (id: string) => {\n const index = kanban.columns.filter(nonNullable).findIndex((column) => column.id === id);\n if (index >= 0) {\n kanban.columns.splice(index, 1);\n }\n };\n\n const customModifier: Modifier = ({ transform }) => {\n if (draggingColumn) {\n return {\n ...transform,\n y: 0,\n };\n } else {\n return transform;\n }\n };\n\n return (\n <div className='flex overflow-x-scroll'>\n <div className='flex m-4 space-x-4 snap-x'>\n <DndContext\n sensors={[mouseSensor]}\n modifiers={[customModifier]}\n onDragStart={handleDragStart}\n onDragMove={handleDragMove}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <SortableContext\n strategy={horizontalListSortingStrategy}\n items={kanban.columns.filter(nonNullable).map(({ id }) => id!)}\n >\n {kanban.columns.filter(nonNullable).map((column) => (\n <KanbanColumnComponent\n key={column.id}\n column={column}\n itemMapper={itemMapper}\n onCreate={(column: KanbanColumnType) => model.createItem(column)}\n onDelete={() => handleDeleteColumn(column.id!)}\n />\n ))}\n </SortableContext>\n\n {/* Overlay required to drag across columns. */}\n {draggingItem && (\n <DragOverlay style={{ margin: 0 }}>\n <KanbanCardComponent item={draggingItem.source.item!} onDelete={() => {}} />\n </DragOverlay>\n )}\n\n {handleCreateColumn && <KanbanColumnComponentPlaceholder onAdd={handleCreateColumn} />}\n </DndContext>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { DotsSixVertical, X } from '@phosphor-icons/react';\nimport React, { type FC } from 'react';\n\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { Button, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createDataExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { getSize, mx, attentionSurface, focusRing } from '@dxos/react-ui-theme';\n\nimport { KANBAN_PLUGIN } from '../meta';\nimport { type KanbanColumnType, type KanbanItemType } from '../types';\n\nconst DeleteItem = ({ onClick }: { onClick: () => void }) => {\n const { t } = useTranslation(KANBAN_PLUGIN);\n return (\n <Button variant='ghost' onClick={onClick} classNames='plb-0 pli-0.5 -mlb-1'>\n <span className='sr-only'>{t('delete item label')}</span>\n <X className={getSize(4)} />\n </Button>\n );\n};\n\nexport const KanbanCardComponent: FC<{\n column?: KanbanColumnType;\n item: KanbanItemType;\n debug?: boolean;\n onDelete?: () => void;\n}> = ({ column, item, debug = false, onDelete }) => {\n const { themeMode } = useThemeContext();\n const { t } = useTranslation(KANBAN_PLUGIN);\n const { isDragging, attributes, listeners, transform, transition, setNodeRef } = useSortable({\n id: item.id,\n data: { type: 'item', column },\n });\n const tx = transform ? Object.assign(transform, { scaleY: 1 }) : null;\n\n const { parentRef, focusAttributes } = useTextEditor(\n () => ({\n initialValue: item.name,\n extensions: [\n createDataExtensions({ id: item.id, text: createDocAccessor(item, ['name']) }),\n createBasicExtensions({ placeholder: t('item title placeholder') }),\n createThemeExtensions({ themeMode }),\n ],\n }),\n [item, themeMode],\n );\n\n return (\n <div\n ref={setNodeRef}\n style={{ transform: CSS.Transform.toString(tx), transition }}\n className={mx('flex grow', isDragging && 'border border-neutral-400 dark:border-neutral-800')}\n >\n <div className={mx('flex items-start grow p-1', attentionSurface, isDragging && 'opacity-10')}>\n {/* TODO(burdon): Standardize height (and below); e.g., via toolbar. */}\n <button className='flex h-[40px] items-center' {...attributes} {...listeners}>\n <DotsSixVertical className={getSize(5)} />\n </button>\n <div className='flex flex-col grow pt-1'>\n <div {...focusAttributes} className={mx(focusRing, 'rounded-sm p-1')} ref={parentRef} />\n {debug && <div className='text-xs text-red-800'>{item.id.slice(0, 9)}</div>}\n </div>\n {onDelete && (\n <div className='flex h-[40px] items-center'>\n <DeleteItem onClick={onDelete} />\n </div>\n )}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useDroppable } from '@dnd-kit/core';\nimport { SortableContext, useSortable, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { DotsSixVertical, X, Plus } from '@phosphor-icons/react';\nimport React, { type FC } from 'react';\n\nimport { Button, Input, useTranslation } from '@dxos/react-ui';\nimport { modalSurface, getSize, groupSurface, mx } from '@dxos/react-ui-theme';\nimport { nonNullable } from '@dxos/util';\n\nimport { KanbanCardComponent } from './KanbanCard';\nimport { useSubscription } from './util';\nimport { KANBAN_PLUGIN } from '../meta';\nimport { type KanbanColumnType, type KanbanItemType } from '../types';\n\nexport type ItemsMapper = (column: string, items: KanbanItemType[]) => KanbanItemType[];\n\nconst DeleteColumn = ({ onClick }: { onClick: () => void }) => {\n const { t } = useTranslation(KANBAN_PLUGIN);\n return (\n <Button variant='ghost' onClick={onClick} classNames='plb-0 pli-0.5 -mlb-1'>\n <span className='sr-only'>{t('delete column label')}</span>\n <X className={getSize(4)} />\n </Button>\n );\n};\n\nconst AddItem = ({ onClick }: { onClick: () => void }) => {\n const { t } = useTranslation(KANBAN_PLUGIN);\n return (\n <Button variant='ghost' onClick={onClick} classNames='plb-0 pli-0.5 -mlb-1'>\n <span className='sr-only'>{t('add item label')}</span>\n <Plus className={getSize(4)} />\n </Button>\n );\n};\n\n// TODO(burdon): Factor out container.\nexport const KanbanColumnComponentPlaceholder: FC<{ onAdd: () => void }> = ({ onAdd }) => {\n const { t } = useTranslation(KANBAN_PLUGIN);\n return (\n <div className={mx('flex flex-col justify-center shadow rounded w-[300px] h-[300px]', groupSurface)}>\n <Button variant='ghost' onClick={onAdd} classNames='plb-0 pli-0.5 -mlb-1'>\n <span className='sr-only'>{t('add column label')}</span>\n <Plus className={getSize(6)} />\n </Button>\n </div>\n );\n};\n\nexport const KanbanColumnComponent: FC<{\n column: KanbanColumnType;\n itemMapper?: ItemsMapper;\n debug?: boolean; // TODO(burdon): Context.\n onCreate?: (column: KanbanColumnType) => KanbanItemType;\n onDelete?: () => void;\n}> = ({ column, itemMapper, debug = false, onCreate, onDelete }) => {\n const { t } = useTranslation(KANBAN_PLUGIN);\n\n // TODO(wittjosiah): Remove?\n useSubscription([column.items]);\n const items = itemMapper?.(column.id!, column.items.filter(nonNullable)) ?? column.items!;\n\n const { setNodeRef: setDroppableNodeRef } = useDroppable({ id: column.id! });\n const { isDragging, attributes, listeners, transform, transition, setNodeRef } = useSortable({\n id: column.id!,\n data: { type: 'column' },\n });\n const tx = transform ? Object.assign(transform, { scaleY: 1 }) : null;\n\n const handleAddItem = onCreate\n ? () => {\n const item = onCreate(column);\n column.items!.splice(column.items!.length, 0, item);\n }\n : undefined;\n\n const handleDeleteItem = (id: string) => {\n const index = column.items.filter(nonNullable).findIndex((column) => column.id === id);\n if (index >= 0) {\n column.items!.splice(index, 1);\n }\n };\n\n return (\n <div\n ref={setNodeRef}\n style={{ transform: CSS.Transform.toString(tx), transition }}\n className={mx('flex flex-col snap-center overflow-y-hidden', isDragging && 'relative z-10')}\n >\n {/* TODO(burdon): Width approx mobile phone width. */}\n <div\n className={mx(\n 'flex flex-col py-2 overflow-hidden shadow rounded w-[300px] min-h-[300px]',\n isDragging ? modalSurface : groupSurface,\n )}\n >\n <div className='flex items-center mb-2 px-2'>\n <button {...attributes} {...listeners}>\n <DotsSixVertical className={getSize(5)} />\n </button>\n\n <Input.Root>\n <Input.Label srOnly>{t('column title label')}</Input.Label>\n <Input.TextInput\n variant='subdued'\n classNames='px-2'\n placeholder={t('column title placeholder')}\n defaultValue={column.name}\n onChange={({ target: { value } }) => (column.name = value)}\n />\n </Input.Root>\n\n {/* TODO(burdon): Menu. */}\n {onDelete && <DeleteColumn onClick={onDelete} />}\n </div>\n\n {/* TODO(burdon): Scrolling (radix; see kai/mosaic). */}\n <SortableContext strategy={verticalListSortingStrategy} items={items.filter(nonNullable).map(({ id }) => id)}>\n <div ref={setDroppableNodeRef} className='flex flex-col grow overflow-y-scroll space-y-2 pr-4'>\n {items.filter(nonNullable).map((item) => (\n <div key={item.id} id={item.id} className='flex pl-2'>\n <KanbanCardComponent column={column} item={item} onDelete={() => handleDeleteItem(item.id)} />\n </div>\n ))}\n </div>\n </SortableContext>\n\n {handleAddItem && (\n <div className='flex justify-center mt-2'>\n <AddItem onClick={handleAddItem} />\n </div>\n )}\n\n {debug && <div className='px-2 text-xs text-red-800'>{column.id!.slice(0, 9)}</div>}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { createSubscription } from '@dxos/react-client/echo';\nimport { nonNullable } from '@dxos/util';\n\nimport { type KanbanColumnType, type Location } from '../types';\n\n// TODO(burdon): Factor out.\nexport const useSubscription = (data: any) => {\n const [_, setIter] = useState([]);\n useEffect(() => {\n const handle = createSubscription(() => setIter([]));\n handle.update(data);\n return () => handle.unsubscribe();\n }, []);\n};\n\n/**\n * Find the column or item within the model.\n */\n// TODO(burdon): Move to model.\nexport const findLocation = (columns: KanbanColumnType[], id: string): Location | undefined => {\n for (const column of columns) {\n // TODO(burdon): Need transient ID for UX.\n if (column.id === id) {\n return { column };\n } else {\n const idx = column.items.filter(nonNullable).findIndex((item) => item.id === id);\n if (idx !== -1) {\n return { column, item: column.items![idx], idx };\n }\n }\n }\n};\n"],
5
5
  "mappings": "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",
6
6
  "names": ["React", "create", "getSpace", "Main", "topbarBlockPaddingStart", "fixedInsetFlexLayout", "bottombarBlockPaddingEnd", "DndContext", "DragOverlay", "MouseSensor", "useSensor", "horizontalListSortingStrategy", "SortableContext", "React", "useEffect", "useState", "createSubscription", "arrayMove", "nonNullable", "useSortable", "CSS", "DotsSixVertical", "X", "React", "createDocAccessor", "Button", "useThemeContext", "useTranslation", "createBasicExtensions", "createDataExtensions", "createThemeExtensions", "useTextEditor", "getSize", "mx", "attentionSurface", "focusRing", "DeleteItem", "onClick", "t", "useTranslation", "KANBAN_PLUGIN", "Button", "variant", "classNames", "span", "className", "X", "getSize", "KanbanCardComponent", "column", "item", "debug", "onDelete", "themeMode", "useThemeContext", "isDragging", "attributes", "listeners", "transform", "transition", "setNodeRef", "useSortable", "id", "data", "type", "tx", "Object", "assign", "scaleY", "parentRef", "focusAttributes", "useTextEditor", "initialValue", "name", "extensions", "createDataExtensions", "text", "createDocAccessor", "createBasicExtensions", "placeholder", "createThemeExtensions", "div", "ref", "style", "CSS", "Transform", "toString", "mx", "attentionSurface", "button", "DotsSixVertical", "focusRing", "slice", "useDroppable", "SortableContext", "useSortable", "verticalListSortingStrategy", "CSS", "DotsSixVertical", "X", "Plus", "React", "Button", "Input", "useTranslation", "modalSurface", "getSize", "groupSurface", "mx", "nonNullable", "useEffect", "useState", "createSubscription", "nonNullable", "useSubscription", "data", "_", "setIter", "useState", "useEffect", "handle", "createSubscription", "update", "unsubscribe", "findLocation", "columns", "id", "column", "idx", "items", "filter", "nonNullable", "findIndex", "item", "DeleteColumn", "onClick", "t", "useTranslation", "KANBAN_PLUGIN", "React", "Button", "variant", "classNames", "span", "className", "X", "getSize", "AddItem", "Plus", "KanbanColumnComponentPlaceholder", "onAdd", "div", "mx", "groupSurface", "KanbanColumnComponent", "column", "itemMapper", "debug", "onCreate", "onDelete", "useSubscription", "items", "id", "filter", "nonNullable", "setNodeRef", "setDroppableNodeRef", "useDroppable", "isDragging", "attributes", "listeners", "transform", "transition", "useSortable", "data", "type", "tx", "Object", "assign", "scaleY", "handleAddItem", "item", "splice", "length", "undefined", "handleDeleteItem", "index", "findIndex", "ref", "style", "CSS", "Transform", "toString", "modalSurface", "button", "DotsSixVertical", "Input", "Root", "Label", "srOnly", "TextInput", "placeholder", "defaultValue", "name", "onChange", "target", "value", "SortableContext", "strategy", "verticalListSortingStrategy", "map", "key", "KanbanCardComponent", "slice", "KanbanBoard", "model", "kanban", "root", "useSubscription", "columns", "_", "setIter", "useState", "useEffect", "handle", "createSubscription", "update", "unsubscribe", "mouseSensor", "useSensor", "MouseSensor", "activationConstraint", "distance", "draggingColumn", "setDraggingColumn", "draggingItem", "setDraggingItem", "itemMapper", "column", "items", "source", "target", "id", "modified", "splice", "idx", "length", "item", "handleDragStart", "active", "filter", "nonNullable", "forEach", "findIndex", "handleDragMove", "event", "handleDragOver", "over", "findLocation", "handleDragEnd", "oldIndex", "newIndex", "arrayMove", "undefined", "handleDragCancel", "handleCreateColumn", "createColumn", "handleDeleteColumn", "index", "customModifier", "transform", "y", "React", "div", "className", "DndContext", "sensors", "modifiers", "onDragStart", "onDragMove", "onDragOver", "onDragEnd", "onDragCancel", "SortableContext", "strategy", "horizontalListSortingStrategy", "map", "KanbanColumnComponent", "key", "onCreate", "createItem", "onDelete", "DragOverlay", "style", "margin", "KanbanCardComponent", "KanbanColumnComponentPlaceholder", "onAdd", "KanbanMain", "kanban", "space", "getSpace", "model", "root", "createColumn", "db", "add", "create", "KanbanColumnType", "items", "createItem", "column", "KanbanItemType", "name", "React", "Main", "Content", "classNames", "fixedInsetFlexLayout", "topbarBlockPaddingStart", "bottombarBlockPaddingEnd", "KanbanBoard"]
7
7
  }
@@ -45,4 +45,4 @@ export {
45
45
  KanbanType,
46
46
  KanbanAction
47
47
  };
48
- //# sourceMappingURL=chunk-NRH3LKPT.mjs.map
48
+ //# sourceMappingURL=chunk-2ZBX5F7L.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/kanban.ts", "../../../src/types/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Expando, ref, S, TypedObject } from '@dxos/echo-schema';\n\nexport class KanbanItemType extends TypedObject({ typename: 'dxos.org/type/KanbanItem', version: '0.1.0' })({\n object: S.optional(ref(Expando)),\n name: S.optional(S.String),\n index: S.optional(S.String),\n}) {}\n\nexport class KanbanColumnType extends TypedObject({ typename: 'dxos.org/type/KanbanColumn', version: '0.1.0' })({\n name: S.optional(S.String),\n index: S.optional(S.String),\n items: S.mutable(S.Array(ref(KanbanItemType))),\n}) {}\n\nexport class KanbanType extends TypedObject({ typename: 'dxos.org/type/Kanban', version: '0.1.0' })({\n name: S.optional(S.String),\n columns: S.mutable(S.Array(ref(KanbanColumnType))),\n}) {}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { type SchemaProvides } from '@dxos/plugin-client';\n\nimport { type KanbanColumnType, type KanbanItemType, type KanbanType } from './kanban';\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\nconst KANBAN_ACTION = `${KANBAN_PLUGIN}/action`;\n\nexport enum KanbanAction {\n CREATE = `${KANBAN_ACTION}/create`,\n}\n\nexport type KanbanPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MetadataRecordsProvides &\n TranslationsProvides &\n SchemaProvides;\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 createColumn(): KanbanColumnType;\n createItem(column: KanbanColumnType): KanbanItemType;\n}\n\nexport type Location = {\n column: KanbanColumnType;\n item?: KanbanItemType;\n idx?: number;\n};\n"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Expando, ref, S, TypedObject } from '@dxos/echo-schema';\n\nexport class KanbanItemType extends TypedObject({ typename: 'dxos.org/type/KanbanItem', version: '0.1.0' })({\n object: S.optional(ref(Expando)),\n name: S.optional(S.String),\n index: S.optional(S.String),\n}) {}\n\nexport class KanbanColumnType extends TypedObject({ typename: 'dxos.org/type/KanbanColumn', version: '0.1.0' })({\n name: S.optional(S.String),\n index: S.optional(S.String),\n items: S.mutable(S.Array(ref(KanbanItemType))),\n}) {}\n\nexport class KanbanType extends TypedObject({ typename: 'dxos.org/type/Kanban', version: '0.1.0' })({\n name: S.optional(S.String),\n columns: S.mutable(S.Array(ref(KanbanColumnType))),\n}) {}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { type SchemaProvides } from '@dxos/plugin-space';\n\nimport { type KanbanColumnType, type KanbanItemType, type KanbanType } from './kanban';\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\nconst KANBAN_ACTION = `${KANBAN_PLUGIN}/action`;\n\nexport enum KanbanAction {\n CREATE = `${KANBAN_ACTION}/create`,\n}\n\nexport type KanbanPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n MetadataRecordsProvides &\n TranslationsProvides &\n SchemaProvides;\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 createColumn(): KanbanColumnType;\n createItem(column: KanbanColumnType): KanbanItemType;\n}\n\nexport type Location = {\n column: KanbanColumnType;\n item?: KanbanItemType;\n idx?: number;\n};\n"],
5
5
  "mappings": ";;;;;;AAIA,SAASA,SAASC,KAAKC,GAAGC,mBAAmB;AAEtC,IAAMC,iBAAN,cAA6BC,YAAY;EAAEC,UAAU;EAA4BC,SAAS;AAAQ,CAAA,EAAG;EAC1GC,QAAQC,EAAEC,SAASC,IAAIC,OAAAA,CAAAA;EACvBC,MAAMJ,EAAEC,SAASD,EAAEK,MAAM;EACzBC,OAAON,EAAEC,SAASD,EAAEK,MAAM;AAC5B,CAAA,EAAA;AAAI;AAEG,IAAME,mBAAN,cAA+BX,YAAY;EAAEC,UAAU;EAA8BC,SAAS;AAAQ,CAAA,EAAG;EAC9GM,MAAMJ,EAAEC,SAASD,EAAEK,MAAM;EACzBC,OAAON,EAAEC,SAASD,EAAEK,MAAM;EAC1BG,OAAOR,EAAES,QAAQT,EAAEU,MAAMR,IAAIP,cAAAA,CAAAA,CAAAA;AAC/B,CAAA,EAAA;AAAI;AAEG,IAAMgB,aAAN,cAAyBf,YAAY;EAAEC,UAAU;EAAwBC,SAAS;AAAQ,CAAA,EAAG;EAClGM,MAAMJ,EAAEC,SAASD,EAAEK,MAAM;EACzBO,SAASZ,EAAES,QAAQT,EAAEU,MAAMR,IAAIK,gBAAAA,CAAAA,CAAAA;AACjC,CAAA,EAAA;AAAI;;;ACIJ,IAAMM,gBAAgB,GAAGC,aAAAA;;UAEbC,eAAAA;0CACD,GAAGF,aAAAA,SAAsB,IAAA;GADxBE,iBAAAA,eAAAA,CAAAA,EAAAA;",
6
6
  "names": ["Expando", "ref", "S", "TypedObject", "KanbanItemType", "TypedObject", "typename", "version", "object", "S", "optional", "ref", "Expando", "name", "String", "index", "KanbanColumnType", "items", "mutable", "Array", "KanbanType", "columns", "KANBAN_ACTION", "KANBAN_PLUGIN", "KanbanAction"]
7
7
  }
@@ -4,7 +4,7 @@ import {
4
4
  KanbanColumnType,
5
5
  KanbanItemType,
6
6
  KanbanType
7
- } from "./chunk-NRH3LKPT.mjs";
7
+ } from "./chunk-2ZBX5F7L.mjs";
8
8
  import {
9
9
  KANBAN_PLUGIN,
10
10
  meta_default
@@ -13,7 +13,7 @@ import {
13
13
  // packages/plugins/experimental/plugin-kanban/src/KanbanPlugin.tsx
14
14
  import React from "react";
15
15
  import { resolvePlugin, parseIntentPlugin, NavigationAction } from "@dxos/app-framework";
16
- import { create } from "@dxos/echo-schema";
16
+ import { create } from "@dxos/live-object";
17
17
  import { parseClientPlugin } from "@dxos/plugin-client";
18
18
  import { createExtension, isActionGroup } from "@dxos/plugin-graph";
19
19
  import { SpaceAction } from "@dxos/plugin-space";
@@ -21,7 +21,7 @@ import { loadObjectReferences } from "@dxos/react-client/echo";
21
21
 
22
22
  // packages/plugins/experimental/plugin-kanban/src/components/index.ts
23
23
  import { lazy } from "react";
24
- var KanbanMain = lazy(() => import("./KanbanMain-6HTVRMTN.mjs"));
24
+ var KanbanMain = lazy(() => import("./KanbanMain-PJC2JMJH.mjs"));
25
25
 
26
26
  // packages/plugins/experimental/plugin-kanban/src/translations.ts
27
27
  var translations_default = [
@@ -75,7 +75,9 @@ var KanbanPlugin = () => {
75
75
  },
76
76
  echo: {
77
77
  schema: [
78
- KanbanType,
78
+ KanbanType
79
+ ],
80
+ system: [
79
81
  KanbanColumnType,
80
82
  KanbanItemType
81
83
  ]