@dxos/plugin-kanban 0.8.2-main.36232bc → 0.8.2-main.5885341

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 (75) hide show
  1. package/dist/lib/browser/{artifact-definition-SVNHDJQT.mjs → artifact-definition-OSLO5B6P.mjs} +2 -2
  2. package/dist/lib/browser/{chunk-K5BYEZ4Z.mjs → chunk-3MVG4VGQ.mjs} +2 -13
  3. package/dist/lib/browser/chunk-3MVG4VGQ.mjs.map +7 -0
  4. package/dist/lib/browser/index.mjs +4 -4
  5. package/dist/lib/browser/intent-resolver-OFEXRD4O.mjs +296 -0
  6. package/dist/lib/browser/intent-resolver-OFEXRD4O.mjs.map +7 -0
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/{react-surface-R25PYWQV.mjs → react-surface-RJ5WMSWU.mjs} +56 -26
  9. package/dist/lib/browser/react-surface-RJ5WMSWU.mjs.map +7 -0
  10. package/dist/lib/browser/types.mjs +1 -3
  11. package/dist/lib/node/{artifact-definition-M2XAYUI2.cjs → artifact-definition-ZOUZLESK.cjs} +11 -11
  12. package/dist/lib/node/{chunk-3EUR6ZR2.cjs → chunk-ZRCL6XVF.cjs} +4 -16
  13. package/dist/lib/node/chunk-ZRCL6XVF.cjs.map +7 -0
  14. package/dist/lib/node/index.cjs +16 -16
  15. package/dist/lib/node/intent-resolver-BCCCN7LD.cjs +307 -0
  16. package/dist/lib/node/intent-resolver-BCCCN7LD.cjs.map +7 -0
  17. package/dist/lib/node/meta.json +1 -1
  18. package/dist/lib/node/{react-surface-FVM64YAQ.cjs → react-surface-LQ7CQFWF.cjs} +61 -31
  19. package/dist/lib/node/react-surface-LQ7CQFWF.cjs.map +7 -0
  20. package/dist/lib/node/types.cjs +6 -8
  21. package/dist/lib/node/types.cjs.map +2 -2
  22. package/dist/lib/node-esm/{artifact-definition-HQ5I2OO5.mjs → artifact-definition-A7GJP5BI.mjs} +2 -2
  23. package/dist/lib/node-esm/{chunk-2N7CO3DI.mjs → chunk-ZJJYPR6C.mjs} +2 -13
  24. package/dist/lib/node-esm/chunk-ZJJYPR6C.mjs.map +7 -0
  25. package/dist/lib/node-esm/index.mjs +4 -4
  26. package/dist/lib/node-esm/intent-resolver-4LPFRDUP.mjs +297 -0
  27. package/dist/lib/node-esm/intent-resolver-4LPFRDUP.mjs.map +7 -0
  28. package/dist/lib/node-esm/meta.json +1 -1
  29. package/dist/lib/node-esm/{react-surface-LZ7MP3CQ.mjs → react-surface-C7CETLHO.mjs} +56 -26
  30. package/dist/lib/node-esm/react-surface-C7CETLHO.mjs.map +7 -0
  31. package/dist/lib/node-esm/types.mjs +1 -3
  32. package/dist/types/src/capabilities/index.d.ts +1 -1
  33. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  34. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  35. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  36. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  37. package/dist/types/src/components/KanbanContainer.d.ts.map +1 -1
  38. package/dist/types/src/components/KanbanContainer.stories.d.ts +10 -0
  39. package/dist/types/src/components/KanbanContainer.stories.d.ts.map +1 -0
  40. package/dist/types/src/testing/index.d.ts +3 -0
  41. package/dist/types/src/testing/index.d.ts.map +1 -0
  42. package/dist/types/src/testing/initialize-kanban.d.ts +17 -0
  43. package/dist/types/src/testing/initialize-kanban.d.ts.map +1 -0
  44. package/dist/types/src/testing/kanban-manager.d.ts +7 -0
  45. package/dist/types/src/testing/kanban-manager.d.ts.map +1 -0
  46. package/dist/types/src/testing/playwright/smoke.spec.d.ts +2 -0
  47. package/dist/types/src/testing/playwright/smoke.spec.d.ts.map +1 -0
  48. package/dist/types/src/types.d.ts +1 -8
  49. package/dist/types/src/types.d.ts.map +1 -1
  50. package/package.json +27 -24
  51. package/src/capabilities/intent-resolver.ts +10 -6
  52. package/src/capabilities/react-surface.tsx +37 -8
  53. package/src/components/KanbanContainer.stories.tsx +186 -0
  54. package/src/components/KanbanContainer.tsx +21 -8
  55. package/src/testing/index.ts +6 -0
  56. package/src/testing/initialize-kanban.ts +139 -0
  57. package/src/testing/kanban-manager.ts +13 -0
  58. package/src/testing/playwright/playwright.config.cts +18 -0
  59. package/src/testing/playwright/smoke.spec.ts +7 -0
  60. package/src/types.ts +1 -17
  61. package/dist/lib/browser/chunk-K5BYEZ4Z.mjs.map +0 -7
  62. package/dist/lib/browser/intent-resolver-XCDQ5N3Q.mjs +0 -132
  63. package/dist/lib/browser/intent-resolver-XCDQ5N3Q.mjs.map +0 -7
  64. package/dist/lib/browser/react-surface-R25PYWQV.mjs.map +0 -7
  65. package/dist/lib/node/chunk-3EUR6ZR2.cjs.map +0 -7
  66. package/dist/lib/node/intent-resolver-P3PSZO7H.cjs +0 -146
  67. package/dist/lib/node/intent-resolver-P3PSZO7H.cjs.map +0 -7
  68. package/dist/lib/node/react-surface-FVM64YAQ.cjs.map +0 -7
  69. package/dist/lib/node-esm/chunk-2N7CO3DI.mjs.map +0 -7
  70. package/dist/lib/node-esm/intent-resolver-4G47V67J.mjs +0 -133
  71. package/dist/lib/node-esm/intent-resolver-4G47V67J.mjs.map +0 -7
  72. package/dist/lib/node-esm/react-surface-LZ7MP3CQ.mjs.map +0 -7
  73. /package/dist/lib/browser/{artifact-definition-SVNHDJQT.mjs.map → artifact-definition-OSLO5B6P.mjs.map} +0 -0
  74. /package/dist/lib/node/{artifact-definition-M2XAYUI2.cjs.map → artifact-definition-ZOUZLESK.cjs.map} +0 -0
  75. /package/dist/lib/node-esm/{artifact-definition-HQ5I2OO5.mjs.map → artifact-definition-A7GJP5BI.mjs.map} +0 -0
@@ -4,32 +4,46 @@ import {
4
4
  PivotColumnAnnotationId,
5
5
  TypenameAnnotationId,
6
6
  isKanban
7
- } from "./chunk-K5BYEZ4Z.mjs";
7
+ } from "./chunk-3MVG4VGQ.mjs";
8
8
 
9
9
  // packages/plugins/plugin-kanban/src/capabilities/react-surface.tsx
10
- import React3, { useMemo as useMemo2 } from "react";
11
- import { Capabilities, contributes, createSurface } from "@dxos/app-framework";
10
+ import React3, { useMemo as useMemo3 } from "react";
11
+ import { Capabilities, contributes, createSurface, useCapabilities } from "@dxos/app-framework";
12
+ import { getTypenameOrThrow as getTypenameOrThrow2, toJsonSchema as toJsonSchema2 } from "@dxos/echo-schema";
12
13
  import { findAnnotation } from "@dxos/effect";
14
+ import { ClientCapabilities } from "@dxos/plugin-client";
15
+ import { useClient as useClient3 } from "@dxos/react-client";
13
16
  import { getSpace as getSpace3, isSpace } from "@dxos/react-client/echo";
14
17
  import { SelectInput as SelectInput2, useFormValues } from "@dxos/react-ui-form";
15
18
 
16
19
  // packages/plugins/plugin-kanban/src/components/KanbanContainer.tsx
17
- import React, { useCallback, useEffect, useState } from "react";
20
+ import React, { useCallback, useEffect, useMemo, useState } from "react";
18
21
  import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
22
+ import { EchoSchema, getTypenameOrThrow, toJsonSchema } from "@dxos/echo-schema";
19
23
  import { useGlobalFilteredObjects } from "@dxos/plugin-search";
24
+ import { useClient } from "@dxos/react-client";
20
25
  import { Filter, useQuery, getSpace, live } from "@dxos/react-client/echo";
21
26
  import { useKanbanModel, Kanban } from "@dxos/react-ui-kanban";
22
27
  import { StackItem } from "@dxos/react-ui-stack";
23
28
  import { ViewProjection } from "@dxos/schema";
24
29
  var KanbanContainer = ({ kanban }) => {
30
+ const client = useClient();
25
31
  const [cardSchema, setCardSchema] = useState();
26
32
  const [projection, setProjection] = useState();
27
33
  const space = getSpace(kanban);
28
34
  const { dispatchPromise: dispatch } = useIntentDispatcher();
35
+ const jsonSchema = useMemo(() => cardSchema instanceof EchoSchema ? cardSchema.jsonSchema : cardSchema ? toJsonSchema(cardSchema) : void 0, [
36
+ cardSchema
37
+ ]);
29
38
  useEffect(() => {
30
- if (kanban.cardView?.target?.query?.typename && space) {
39
+ const typename = kanban.cardView?.target?.query?.typename;
40
+ const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => getTypenameOrThrow(schema) === typename);
41
+ if (staticSchema) {
42
+ setCardSchema(() => staticSchema);
43
+ }
44
+ if (!staticSchema && typename && space) {
31
45
  const query = space.db.schemaRegistry.query({
32
- typename: kanban.cardView.target.query.typename
46
+ typename
33
47
  });
34
48
  const unsubscribe = query.subscribe(() => {
35
49
  const [schema] = query.results;
@@ -46,13 +60,12 @@ var KanbanContainer = ({ kanban }) => {
46
60
  space
47
61
  ]);
48
62
  useEffect(() => {
49
- if (kanban.cardView?.target && cardSchema) {
50
- setProjection(new ViewProjection(cardSchema.jsonSchema, kanban.cardView.target));
63
+ if (kanban.cardView?.target && jsonSchema) {
64
+ setProjection(new ViewProjection(jsonSchema, kanban.cardView.target));
51
65
  }
52
66
  }, [
53
67
  kanban.cardView?.target,
54
- cardSchema,
55
- JSON.stringify(cardSchema?.jsonSchema)
68
+ JSON.stringify(jsonSchema)
56
69
  ]);
57
70
  const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());
58
71
  const filteredObjects = useGlobalFilteredObjects(objects);
@@ -91,11 +104,11 @@ var KanbanContainer = ({ kanban }) => {
91
104
  };
92
105
 
93
106
  // packages/plugins/plugin-kanban/src/components/KanbanViewEditor.tsx
94
- import React2, { useCallback as useCallback2, useMemo } from "react";
107
+ import React2, { useCallback as useCallback2, useMemo as useMemo2 } from "react";
95
108
  import { createIntent as createIntent2, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
96
109
  import { FormatEnum } from "@dxos/echo-schema";
97
110
  import { invariant } from "@dxos/invariant";
98
- import { useClient } from "@dxos/react-client";
111
+ import { useClient as useClient2 } from "@dxos/react-client";
99
112
  import { Filter as Filter2, getSpace as getSpace2, useQuery as useQuery2, useSchema } from "@dxos/react-client/echo";
100
113
  import { ViewEditor, Form, SelectInput } from "@dxos/react-ui-form";
101
114
  import { KanbanSettingsSchema } from "@dxos/react-ui-kanban";
@@ -103,9 +116,9 @@ import { ViewType, ViewProjection as ViewProjection2 } from "@dxos/schema";
103
116
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-kanban/src/components/KanbanViewEditor.tsx";
104
117
  var KanbanViewEditor = ({ kanban }) => {
105
118
  const { dispatchPromise: dispatch } = useIntentDispatcher2();
106
- const client = useClient();
119
+ const client = useClient2();
107
120
  const space = getSpace2(kanban);
108
- const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.typename, [
121
+ const currentTypename = useMemo2(() => kanban?.cardView?.target?.query?.typename, [
109
122
  kanban?.cardView?.target?.query?.typename
110
123
  ]);
111
124
  const schema = useSchema(client, space, currentTypename);
@@ -138,7 +151,7 @@ var KanbanViewEditor = ({ kanban }) => {
138
151
  dispatch,
139
152
  kanban
140
153
  ]);
141
- const projection = useMemo(() => {
154
+ const projection = useMemo2(() => {
142
155
  if (kanban?.cardView?.target && schema) {
143
156
  return new ViewProjection2(schema.jsonSchema, kanban.cardView.target);
144
157
  }
@@ -157,12 +170,12 @@ var KanbanViewEditor = ({ kanban }) => {
157
170
  }, [
158
171
  kanban
159
172
  ]);
160
- const initialValues = useMemo(() => ({
173
+ const initialValues = useMemo2(() => ({
161
174
  columnFieldId: kanban.columnFieldId
162
175
  }), [
163
176
  kanban.columnFieldId
164
177
  ]);
165
- const custom = useMemo(() => ({
178
+ const custom = useMemo2(() => ({
166
179
  columnFieldId: (props) => /* @__PURE__ */ React2.createElement(SelectInput, {
167
180
  ...props,
168
181
  options: selectFields
@@ -211,23 +224,36 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
211
224
  })
212
225
  }),
213
226
  createSurface({
214
- id: `${KANBAN_PLUGIN}/create-initial-schema-form-[schema]`,
227
+ id: `${KANBAN_PLUGIN}/create-initial-schema-form`,
215
228
  role: "form-input",
216
229
  filter: (data) => {
230
+ if (data.prop !== "typename") {
231
+ return false;
232
+ }
217
233
  const annotation = findAnnotation(data.schema.ast, TypenameAnnotationId);
218
234
  return !!annotation;
219
235
  },
220
236
  component: ({ data: { target }, ...inputProps }) => {
237
+ const client = useClient3();
221
238
  const props = inputProps;
222
239
  const space = isSpace(target) ? target : getSpace3(target);
223
240
  if (!space) {
224
241
  return null;
225
242
  }
226
- const schemata = space?.db.schemaRegistry.query().runSync();
243
+ const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
244
+ const whitelistedTypenames = useMemo3(() => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => type.typename))), [
245
+ schemaWhitelists
246
+ ]);
247
+ const fixed = client.graph.schemaRegistry.schemas.filter((schema) => whitelistedTypenames.has(getTypenameOrThrow2(schema)));
248
+ const dynamic = space?.db.schemaRegistry.query().runSync();
249
+ const typenames = Array.from(/* @__PURE__ */ new Set([
250
+ ...fixed.map((schema) => getTypenameOrThrow2(schema)),
251
+ ...dynamic.map((schema) => schema.typename)
252
+ ])).sort();
227
253
  return /* @__PURE__ */ React3.createElement(SelectInput2, {
228
254
  ...props,
229
- options: schemata.map((schema) => ({
230
- value: schema.typename
255
+ options: typenames.map((typename) => ({
256
+ value: typename
231
257
  }))
232
258
  });
233
259
  }
@@ -246,14 +272,17 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
246
272
  return null;
247
273
  }
248
274
  const { typename } = useFormValues();
275
+ const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
276
+ const staticSchema = schemaWhitelists.flat().find((schema) => getTypenameOrThrow2(schema) === typename);
249
277
  const [selectedSchema] = space?.db.schemaRegistry.query({
250
278
  typename
251
279
  }).runSync();
252
- const singleSelectColumns = useMemo2(() => {
253
- if (!selectedSchema?.jsonSchema?.properties) {
280
+ const singleSelectColumns = useMemo3(() => {
281
+ const properties = staticSchema ? toJsonSchema2(staticSchema).properties : selectedSchema?.jsonSchema?.properties;
282
+ if (!properties) {
254
283
  return [];
255
284
  }
256
- const columns = Object.entries(selectedSchema.jsonSchema.properties).reduce((acc, [key, value]) => {
285
+ const columns = Object.entries(properties).reduce((acc, [key, value]) => {
257
286
  if (typeof value === "object" && value?.format === "single-select") {
258
287
  acc.push(key);
259
288
  }
@@ -261,7 +290,8 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
261
290
  }, []);
262
291
  return columns;
263
292
  }, [
264
- selectedSchema?.jsonSchema
293
+ selectedSchema?.jsonSchema,
294
+ staticSchema
265
295
  ]);
266
296
  if (!typename) {
267
297
  return null;
@@ -278,4 +308,4 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
278
308
  export {
279
309
  react_surface_default as default
280
310
  };
281
- //# sourceMappingURL=react-surface-R25PYWQV.mjs.map
311
+ //# sourceMappingURL=react-surface-RJ5WMSWU.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/KanbanContainer.tsx", "../../../src/components/KanbanViewEditor.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Capabilities, contributes, createSurface, useCapabilities } from '@dxos/app-framework';\nimport { getTypenameOrThrow, toJsonSchema, type S } from '@dxos/echo-schema';\nimport { findAnnotation } from '@dxos/effect';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { type CollectionType } from '@dxos/plugin-space/types';\nimport { useClient } from '@dxos/react-client';\nimport { getSpace, isSpace, type Space } from '@dxos/react-client/echo';\nimport { type InputProps, SelectInput, useFormValues } from '@dxos/react-ui-form';\nimport { type KanbanType } from '@dxos/react-ui-kanban';\n\nimport { KanbanContainer, KanbanViewEditor } from '../components';\nimport { KANBAN_PLUGIN } from '../meta';\nimport { isKanban, TypenameAnnotationId, PivotColumnAnnotationId } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${KANBAN_PLUGIN}/kanban`,\n role: ['article', 'section'],\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data, role }) => <KanbanContainer kanban={data.subject} role={role} />,\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/object-settings`,\n role: 'object-settings',\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data }) => <KanbanViewEditor kanban={data.subject} />,\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/create-initial-schema-form`,\n role: 'form-input',\n filter: (data): data is { prop: string; schema: S.Schema<any>; target: Space | CollectionType | undefined } => {\n if (data.prop !== 'typename') {\n return false;\n }\n\n const annotation = findAnnotation<boolean>((data.schema as S.Schema.All).ast, TypenameAnnotationId);\n return !!annotation;\n },\n component: ({ data: { target }, ...inputProps }) => {\n const client = useClient();\n const props = inputProps as any as InputProps;\n const space = isSpace(target) ? target : getSpace(target);\n if (!space) {\n return null;\n }\n\n const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);\n const whitelistedTypenames = useMemo(\n () => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => type.typename))),\n [schemaWhitelists],\n );\n\n const fixed = client.graph.schemaRegistry.schemas.filter((schema) =>\n whitelistedTypenames.has(getTypenameOrThrow(schema)),\n );\n const dynamic = space?.db.schemaRegistry.query().runSync();\n const typenames = Array.from(\n new Set<string>([\n ...fixed.map((schema) => getTypenameOrThrow(schema)),\n ...dynamic.map((schema) => schema.typename),\n ]),\n ).sort();\n\n return <SelectInput {...props} options={typenames.map((typename) => ({ value: typename }))} />;\n },\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/create-initial-schema-form-[pivot-column]`,\n role: 'form-input',\n filter: (data): data is { prop: string; schema: S.Schema<any>; target: Space | CollectionType | undefined } => {\n const annotation = findAnnotation<boolean>((data.schema as S.Schema.All).ast, PivotColumnAnnotationId);\n return !!annotation;\n },\n component: ({ data: { target }, ...inputProps }) => {\n const props = inputProps as any as InputProps;\n const space = isSpace(target) ? target : getSpace(target);\n if (!space) {\n return null;\n }\n const { typename } = useFormValues();\n // TODO(wittjosiah): Unify this schema lookup.\n const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);\n const staticSchema = schemaWhitelists.flat().find((schema) => getTypenameOrThrow(schema) === typename);\n const [selectedSchema] = space?.db.schemaRegistry.query({ typename }).runSync();\n\n const singleSelectColumns = useMemo(() => {\n const properties = staticSchema\n ? toJsonSchema(staticSchema).properties\n : selectedSchema?.jsonSchema?.properties;\n if (!properties) {\n return [];\n }\n\n const columns = Object.entries(properties).reduce<string[]>((acc, [key, value]) => {\n if (typeof value === 'object' && value?.format === 'single-select') {\n acc.push(key);\n }\n return acc;\n }, []);\n\n return columns;\n }, [selectedSchema?.jsonSchema, staticSchema]);\n\n if (!typename) {\n return null;\n }\n\n return <SelectInput {...props} options={singleSelectColumns.map((column) => ({ value: column }))} />;\n },\n }),\n ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { EchoSchema, getTypenameOrThrow, toJsonSchema, type TypedObject } from '@dxos/echo-schema';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, useQuery, getSpace, live } from '@dxos/react-client/echo';\nimport { type KanbanType, useKanbanModel, Kanban } from '@dxos/react-ui-kanban';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { ViewProjection } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\nexport const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {\n const client = useClient();\n const [cardSchema, setCardSchema] = useState<TypedObject<any, any>>();\n const [projection, setProjection] = useState<ViewProjection>();\n const space = getSpace(kanban);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const jsonSchema = useMemo(\n () =>\n cardSchema instanceof EchoSchema ? cardSchema.jsonSchema : cardSchema ? toJsonSchema(cardSchema) : undefined,\n [cardSchema],\n );\n\n useEffect(() => {\n const typename = kanban.cardView?.target?.query?.typename;\n const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => getTypenameOrThrow(schema) === typename);\n if (staticSchema) {\n setCardSchema(() => staticSchema as TypedObject<any, any>);\n }\n if (!staticSchema && typename && space) {\n const query = space.db.schemaRegistry.query({ typename });\n const unsubscribe = query.subscribe(\n () => {\n const [schema] = query.results;\n if (schema) {\n setCardSchema(schema);\n }\n },\n { fire: true },\n );\n return unsubscribe;\n }\n }, [kanban.cardView?.target?.query, space]);\n\n useEffect(() => {\n if (kanban.cardView?.target && jsonSchema) {\n setProjection(new ViewProjection(jsonSchema, kanban.cardView.target));\n }\n // TODO(ZaymonFC): Is there a better way to get notified about deep changes in the json schema?\n }, [kanban.cardView?.target, JSON.stringify(jsonSchema)]);\n\n const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());\n const filteredObjects = useGlobalFilteredObjects(objects);\n\n const model = useKanbanModel({\n kanban,\n schema: cardSchema,\n projection,\n items: filteredObjects,\n });\n\n const handleAddCard = useCallback(\n (columnValue: string | undefined) => {\n const path = model?.columnFieldPath;\n if (space && cardSchema && path) {\n const card = live(cardSchema, { [path]: columnValue });\n space.db.add(card);\n return card.id;\n }\n },\n [space, cardSchema, model],\n );\n\n const handleRemoveCard = useCallback(\n (card: { id: string }) => {\n void dispatch(createIntent(KanbanAction.DeleteCard, { card }));\n },\n [dispatch],\n );\n\n return (\n <StackItem.Content>\n {model && <Kanban model={model} onAddCard={handleAddCard} onRemoveCard={handleRemoveCard} />}\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { FormatEnum } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, getSpace, useQuery, useSchema } from '@dxos/react-client/echo';\nimport { ViewEditor, Form, SelectInput, type CustomInputMap } from '@dxos/react-ui-form';\nimport { type KanbanType, KanbanSettingsSchema } from '@dxos/react-ui-kanban';\nimport { ViewType, ViewProjection } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\ntype KanbanViewEditorProps = { kanban: KanbanType };\n\nexport const KanbanViewEditor = ({ kanban }: KanbanViewEditorProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const client = useClient();\n const space = getSpace(kanban);\n const currentTypename = useMemo(\n () => kanban?.cardView?.target?.query?.typename,\n [kanban?.cardView?.target?.query?.typename],\n );\n const schema = useSchema(client, space, currentTypename);\n const views = useQuery(space, Filter.schema(ViewType));\n\n const handleUpdateTypename = useCallback(\n (newTypename: string) => {\n invariant(schema);\n const matchingViews = views.filter((view) => view.query.typename === currentTypename);\n for (const view of matchingViews) {\n view.query.typename = newTypename;\n }\n\n schema.mutable.updateTypename(newTypename);\n },\n [views, schema],\n );\n\n const handleDelete = useCallback(\n (fieldId: string) => {\n void dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId }));\n },\n [dispatch, kanban],\n );\n\n const projection = useMemo(() => {\n if (kanban?.cardView?.target && schema) {\n return new ViewProjection(schema.jsonSchema, kanban.cardView.target);\n }\n }, [kanban?.cardView?.target, schema, JSON.stringify(schema)]);\n\n const fieldProjections = projection?.getFieldProjections() || [];\n const selectFields = fieldProjections\n .filter((field) => field.props.format === FormatEnum.SingleSelect)\n .map(({ field }) => ({ value: field.id, label: field.path }));\n\n const onSave = useCallback(\n (values: Partial<{ columnFieldId: string }>) => {\n kanban.columnFieldId = values.columnFieldId;\n },\n [kanban],\n );\n\n const initialValues = useMemo(() => ({ columnFieldId: kanban.columnFieldId }), [kanban.columnFieldId]);\n const custom: CustomInputMap = useMemo(\n () => ({ columnFieldId: (props) => <SelectInput {...props} options={selectFields} /> }),\n [selectFields],\n );\n\n if (!space || !schema || !kanban.cardView?.target) {\n return null;\n }\n\n return (\n <>\n <Form schema={KanbanSettingsSchema} values={initialValues} onSave={onSave} autoSave Custom={custom} />\n <ViewEditor\n registry={space.db.schemaRegistry}\n schema={schema}\n view={kanban.cardView.target}\n onTypenameChanged={schema.readonly ? undefined : handleUpdateTypename}\n onDelete={schema.readonly ? undefined : handleDelete}\n />\n </>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useMemo", "Capabilities", "contributes", "createSurface", "useCapabilities", "getTypenameOrThrow", "toJsonSchema", "findAnnotation", "ClientCapabilities", "useClient", "getSpace", "isSpace", "SelectInput", "useFormValues", "React", "useCallback", "useEffect", "useMemo", "useState", "createIntent", "useIntentDispatcher", "EchoSchema", "getTypenameOrThrow", "toJsonSchema", "useGlobalFilteredObjects", "useClient", "Filter", "useQuery", "getSpace", "live", "useKanbanModel", "Kanban", "StackItem", "ViewProjection", "KanbanContainer", "kanban", "client", "useClient", "cardSchema", "setCardSchema", "useState", "projection", "setProjection", "space", "getSpace", "dispatchPromise", "dispatch", "useIntentDispatcher", "jsonSchema", "useMemo", "EchoSchema", "toJsonSchema", "undefined", "useEffect", "typename", "cardView", "target", "query", "staticSchema", "graph", "schemaRegistry", "schemas", "find", "schema", "getTypenameOrThrow", "db", "unsubscribe", "subscribe", "results", "fire", "ViewProjection", "JSON", "stringify", "objects", "useQuery", "Filter", "nothing", "filteredObjects", "useGlobalFilteredObjects", "model", "useKanbanModel", "items", "handleAddCard", "useCallback", "columnValue", "path", "columnFieldPath", "card", "live", "add", "id", "handleRemoveCard", "createIntent", "KanbanAction", "DeleteCard", "StackItem", "Content", "Kanban", "onAddCard", "onRemoveCard", "React", "useCallback", "useMemo", "createIntent", "useIntentDispatcher", "FormatEnum", "invariant", "useClient", "Filter", "getSpace", "useQuery", "useSchema", "ViewEditor", "Form", "SelectInput", "KanbanSettingsSchema", "ViewType", "ViewProjection", "KanbanViewEditor", "kanban", "dispatchPromise", "dispatch", "useIntentDispatcher", "client", "useClient", "space", "getSpace", "currentTypename", "useMemo", "cardView", "target", "query", "typename", "schema", "useSchema", "views", "useQuery", "Filter", "ViewType", "handleUpdateTypename", "useCallback", "newTypename", "invariant", "matchingViews", "filter", "view", "mutable", "updateTypename", "handleDelete", "fieldId", "createIntent", "KanbanAction", "DeleteCardField", "projection", "ViewProjection", "jsonSchema", "JSON", "stringify", "fieldProjections", "getFieldProjections", "selectFields", "field", "props", "format", "FormatEnum", "SingleSelect", "map", "value", "id", "label", "path", "onSave", "values", "columnFieldId", "initialValues", "custom", "React", "SelectInput", "options", "Form", "KanbanSettingsSchema", "autoSave", "Custom", "ViewEditor", "registry", "db", "schemaRegistry", "onTypenameChanged", "readonly", "undefined", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "KANBAN_PLUGIN", "role", "filter", "data", "isKanban", "subject", "component", "React", "KanbanContainer", "kanban", "KanbanViewEditor", "prop", "annotation", "findAnnotation", "schema", "ast", "TypenameAnnotationId", "target", "inputProps", "client", "useClient", "props", "space", "isSpace", "getSpace", "schemaWhitelists", "useCapabilities", "ClientCapabilities", "SchemaWhiteList", "whitelistedTypenames", "useMemo", "Set", "flatMap", "typeArray", "map", "type", "typename", "fixed", "graph", "schemaRegistry", "schemas", "has", "getTypenameOrThrow", "dynamic", "db", "query", "runSync", "typenames", "Array", "from", "sort", "SelectInput", "options", "value", "PivotColumnAnnotationId", "useFormValues", "staticSchema", "flat", "find", "selectedSchema", "singleSelectColumns", "properties", "toJsonSchema", "jsonSchema", "columns", "Object", "entries", "reduce", "acc", "key", "format", "push", "column"]
7
+ }
@@ -3,15 +3,13 @@ import {
3
3
  KanbanAction,
4
4
  PivotColumnAnnotationId,
5
5
  TypenameAnnotationId,
6
- createKanban,
7
6
  isKanban
8
- } from "./chunk-K5BYEZ4Z.mjs";
7
+ } from "./chunk-3MVG4VGQ.mjs";
9
8
  export {
10
9
  CreateKanbanSchema,
11
10
  KanbanAction,
12
11
  PivotColumnAnnotationId,
13
12
  TypenameAnnotationId,
14
- createKanban,
15
13
  isKanban
16
14
  };
17
15
  //# sourceMappingURL=types.mjs.map
@@ -16,12 +16,12 @@ 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 artifact_definition_M2XAYUI2_exports = {};
20
- __export(artifact_definition_M2XAYUI2_exports, {
19
+ var artifact_definition_ZOUZLESK_exports = {};
20
+ __export(artifact_definition_ZOUZLESK_exports, {
21
21
  default: () => artifact_definition_default
22
22
  });
23
- module.exports = __toCommonJS(artifact_definition_M2XAYUI2_exports);
24
- var import_chunk_3EUR6ZR2 = require("./chunk-3EUR6ZR2.cjs");
23
+ module.exports = __toCommonJS(artifact_definition_ZOUZLESK_exports);
24
+ var import_chunk_ZRCL6XVF = require("./chunk-ZRCL6XVF.cjs");
25
25
  var import_effect = require("effect");
26
26
  var import_app_framework = require("@dxos/app-framework");
27
27
  var import_artifact = require("@dxos/artifact");
@@ -37,8 +37,8 @@ var QualifiedId = import_echo_schema.S.String.annotations({
37
37
  });
38
38
  var artifact_definition_default = () => {
39
39
  const definition = (0, import_artifact.defineArtifact)({
40
- id: `artifact:${import_chunk_3EUR6ZR2.meta.id}`,
41
- name: import_chunk_3EUR6ZR2.meta.name,
40
+ id: `artifact:${import_chunk_ZRCL6XVF.meta.id}`,
41
+ name: import_chunk_ZRCL6XVF.meta.name,
42
42
  instructions: `
43
43
  - Before adding items to a kanban board, inspect the board to see its schema
44
44
  - When adding items, you must not include the 'id' field -- it is automatically generated
@@ -46,7 +46,7 @@ var artifact_definition_default = () => {
46
46
  `,
47
47
  schema: import_react_ui_kanban.KanbanType,
48
48
  tools: [
49
- (0, import_artifact.defineTool)(import_chunk_3EUR6ZR2.meta.id, {
49
+ (0, import_artifact.defineTool)(import_chunk_ZRCL6XVF.meta.id, {
50
50
  name: "create",
51
51
  description: `
52
52
  Create a new kanban board using an existing schema.
@@ -85,7 +85,7 @@ var artifact_definition_default = () => {
85
85
  if (!schema) {
86
86
  return import_artifact.ToolResult.Error(`Schema not found: ${typename}`);
87
87
  }
88
- const intent = (0, import_effect.pipe)((0, import_app_framework.createIntent)(import_chunk_3EUR6ZR2.KanbanAction.Create, {
88
+ const intent = (0, import_effect.pipe)((0, import_app_framework.createIntent)(import_chunk_ZRCL6XVF.KanbanAction.Create, {
89
89
  space: extensions.space,
90
90
  typename,
91
91
  initialPivotColumn: pivotColumn
@@ -99,7 +99,7 @@ var artifact_definition_default = () => {
99
99
  return import_artifact.ToolResult.Success((0, import_assistant.createArtifactElement)(data.id));
100
100
  }
101
101
  }),
102
- (0, import_artifact.defineTool)(import_chunk_3EUR6ZR2.meta.id, {
102
+ (0, import_artifact.defineTool)(import_chunk_ZRCL6XVF.meta.id, {
103
103
  name: "list",
104
104
  description: "List all kanban boards in the current space.",
105
105
  caption: "Listing kanban boards...",
@@ -126,7 +126,7 @@ var artifact_definition_default = () => {
126
126
  return import_artifact.ToolResult.Success(boardInfo);
127
127
  }
128
128
  }),
129
- (0, import_artifact.defineTool)(import_chunk_3EUR6ZR2.meta.id, {
129
+ (0, import_artifact.defineTool)(import_chunk_ZRCL6XVF.meta.id, {
130
130
  name: "inspect",
131
131
  description: "Get details about a specific kanban board.",
132
132
  caption: "Inspecting kanban board...",
@@ -189,4 +189,4 @@ var artifact_definition_default = () => {
189
189
  });
190
190
  return (0, import_app_framework.contributes)(import_app_framework.Capabilities.ArtifactDefinition, definition);
191
191
  };
192
- //# sourceMappingURL=artifact-definition-M2XAYUI2.cjs.map
192
+ //# sourceMappingURL=artifact-definition-ZOUZLESK.cjs.map
@@ -16,23 +16,21 @@ 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_3EUR6ZR2_exports = {};
20
- __export(chunk_3EUR6ZR2_exports, {
19
+ var chunk_ZRCL6XVF_exports = {};
20
+ __export(chunk_ZRCL6XVF_exports, {
21
21
  CreateKanbanSchema: () => CreateKanbanSchema,
22
22
  KANBAN_PLUGIN: () => KANBAN_PLUGIN,
23
23
  KanbanAction: () => KanbanAction,
24
24
  PivotColumnAnnotationId: () => PivotColumnAnnotationId,
25
25
  TypenameAnnotationId: () => TypenameAnnotationId,
26
- createKanban: () => createKanban,
27
26
  isKanban: () => isKanban,
28
27
  meta: () => meta
29
28
  });
30
- module.exports = __toCommonJS(chunk_3EUR6ZR2_exports);
29
+ module.exports = __toCommonJS(chunk_ZRCL6XVF_exports);
31
30
  var import_SchemaAST = require("effect/SchemaAST");
32
31
  var import_echo_schema = require("@dxos/echo-schema");
33
32
  var import_echo = require("@dxos/react-client/echo");
34
33
  var import_react_ui_kanban = require("@dxos/react-ui-kanban");
35
- var import_testing = require("@dxos/react-ui-kanban/testing");
36
34
  var import_schema = require("@dxos/schema");
37
35
  var KANBAN_PLUGIN = "dxos.org/plugin/kanban";
38
36
  var meta = {
@@ -101,15 +99,6 @@ var KanbanAction;
101
99
  KanbanAction2.DeleteCard = DeleteCard;
102
100
  })(KanbanAction || (KanbanAction = {}));
103
101
  var isKanban = (object) => object != null && object instanceof import_react_ui_kanban.KanbanType;
104
- var createKanban = async ({ space, name, typename, initialPivotColumn }) => {
105
- const { kanban } = await (0, import_testing.initializeKanban)({
106
- space,
107
- name,
108
- typename,
109
- initialPivotColumn
110
- });
111
- return kanban;
112
- };
113
102
  // Annotate the CommonJS export names for ESM import in node:
114
103
  0 && (module.exports = {
115
104
  CreateKanbanSchema,
@@ -117,8 +106,7 @@ var createKanban = async ({ space, name, typename, initialPivotColumn }) => {
117
106
  KanbanAction,
118
107
  PivotColumnAnnotationId,
119
108
  TypenameAnnotationId,
120
- createKanban,
121
109
  isKanban,
122
110
  meta
123
111
  });
124
- //# sourceMappingURL=chunk-3EUR6ZR2.cjs.map
112
+ //# sourceMappingURL=chunk-ZRCL6XVF.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types.ts", "../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { TitleAnnotationId } from 'effect/SchemaAST';\n\nimport { S } from '@dxos/echo-schema';\nimport { SpaceSchema } from '@dxos/react-client/echo';\nimport { KanbanType } from '@dxos/react-ui-kanban';\nimport { FieldSchema } from '@dxos/schema';\n\nimport { KANBAN_PLUGIN } from './meta';\n\n/**\n * Kanban data model.\n * A Kanban board is a collection of columns, each of which contains a collection of items.\n * The layout of columns and items is controlled by models.\n * The underlying data model may be represented by direct object relationships\n * (e.g., a column object containing an array of ordered items) or projections constructed\n * by the model (e.g., a query of items based on metadata within a column object).\n */\n\n// TODO(burdon): Move to FormatEnum or SDK.\nexport const TypenameAnnotationId = Symbol.for('@dxos/plugin-kanban/annotation/Typename');\nexport const PivotColumnAnnotationId = Symbol.for('@dxos/plugin-kanban/annotation/PivotColumn');\n\nexport const CreateKanbanSchema = S.Struct({\n name: S.optional(S.String),\n typename: S.optional(\n S.String.annotations({\n [TypenameAnnotationId]: true,\n [TitleAnnotationId]: 'Select card schema (leave empty to start fresh)',\n }),\n ),\n initialPivotColumn: S.optional(\n S.String.annotations({\n [PivotColumnAnnotationId]: true,\n [TitleAnnotationId]: 'Pivot column',\n }),\n ),\n});\n\nexport type CreateKanbanType = S.Schema.Type<typeof CreateKanbanSchema>;\n\nexport namespace KanbanAction {\n const KANBAN_ACTION = `${KANBAN_PLUGIN}/action`;\n\n export class Create extends S.TaggedClass<Create>()(`${KANBAN_ACTION}/create`, {\n input: S.extend(S.Struct({ space: SpaceSchema }), CreateKanbanSchema),\n output: S.Struct({\n object: KanbanType,\n }),\n }) {}\n\n export class DeleteCardField extends S.TaggedClass<DeleteCardField>()(`${KANBAN_ACTION}/delete-card-field`, {\n input: S.Struct({\n kanban: KanbanType,\n fieldId: S.String,\n // TODO(wittjosiah): Separate fields for undo data?\n deletionData: S.optional(\n S.Struct({\n field: FieldSchema,\n // TODO(wittjosiah): This creates a type error.\n // props: PropertySchema,\n props: S.Any,\n index: S.Number,\n }),\n ),\n }),\n output: S.Void,\n }) {}\n\n export class DeleteCard extends S.TaggedClass<DeleteCard>()(`${KANBAN_ACTION}/delete-card`, {\n input: S.Struct({\n card: S.Any, // The card object to delete\n }),\n output: S.Void,\n }) {}\n}\n\n// TODO(burdon): Undo?\n// TODO(burdon): Typescript types (replace proto with annotations?)\n// TODO(burdon): Should pure components depend on ECHO? Relationship between ECHO object/array and Observable.\n// TODO(burdon): Can the plugin configure the object based on the data? E.g., how are the models constructed?\n// TODO(burdon): Create models. Simple first based on actual data.\n// Model is always a projection since the dragging state is tentative.\n\n// TODO(burdon): Extend model for moving items (in and across columns).\nexport interface KanbanModel {\n root: KanbanType;\n}\n\nexport type Location = {\n idx?: number;\n};\n\nexport const isKanban = (object: unknown): object is KanbanType => object != null && object instanceof KanbanType;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const KANBAN_PLUGIN = 'dxos.org/plugin/kanban';\n\nexport const meta: PluginMeta = {\n id: KANBAN_PLUGIN,\n name: 'Kanban',\n description:\n 'Kanban allows you to explore Table data in sorted columns defined by your custom schema. You can use Kanbans to track progress or trigger custom automations when cards are moved from one state to another.',\n icon: 'ph--kanban--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-kanban',\n tags: ['experimental'],\n screenshots: ['https://dxos.network/plugin-details-kanban-dark.png'],\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,uBAAkC;AAElC,yBAAkB;AAClB,kBAA4B;AAC5B,6BAA2B;AAC3B,oBAA4B;ACHrB,IAAMA,gBAAgB;AAEtB,IAAMC,OAAmB;EAC9BC,IAAIF;EACJG,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;ADMO,IAAMC,uBAAuBC,OAAOC,IAAI,yCAAA;AACxC,IAAMC,0BAA0BF,OAAOC,IAAI,4CAAA;AAE3C,IAAME,qBAAqBC,qBAAEC,OAAO;EACzCZ,MAAMW,qBAAEE,SAASF,qBAAEG,MAAM;EACzBC,UAAUJ,qBAAEE,SACVF,qBAAEG,OAAOE,YAAY;IACnB,CAACV,oBAAAA,GAAuB;IACxB,CAACW,kCAAAA,GAAoB;EACvB,CAAA,CAAA;EAEFC,oBAAoBP,qBAAEE,SACpBF,qBAAEG,OAAOE,YAAY;IACnB,CAACP,uBAAAA,GAA0B;IAC3B,CAACQ,kCAAAA,GAAoB;EACvB,CAAA,CAAA;AAEJ,CAAA;;UAIiBE,eAAAA;AACf,QAAMC,gBAAgB,GAAGvB,aAAAA;EAElB,MAAMwB,eAAeV,qBAAEW,YAAW,EAAW,GAAGF,aAAAA,WAAwB;IAC7EG,OAAOZ,qBAAEa,OAAOb,qBAAEC,OAAO;MAAEa,OAAOC;IAAY,CAAA,GAAIhB,kBAAAA;IAClDiB,QAAQhB,qBAAEC,OAAO;MACfgB,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBALSR,SAAAA;EAON,MAAMS,wBAAwBnB,qBAAEW,YAAW,EAAoB,GAAGF,aAAAA,sBAAmC;IAC1GG,OAAOZ,qBAAEC,OAAO;MACdmB,QAAQF;MACRG,SAASrB,qBAAEG;;MAEXmB,cAActB,qBAAEE,SACdF,qBAAEC,OAAO;QACPsB,OAAOC;;;QAGPC,OAAOzB,qBAAE0B;QACTC,OAAO3B,qBAAE4B;MACX,CAAA,CAAA;IAEJ,CAAA;IACAZ,QAAQhB,qBAAE6B;EACZ,CAAA,EAAA;EAAI;gBAhBSV,kBAAAA;EAkBN,MAAMW,mBAAmB9B,qBAAEW,YAAW,EAAe,GAAGF,aAAAA,gBAA6B;IAC1FG,OAAOZ,qBAAEC,OAAO;MACd8B,MAAM/B,qBAAE0B;IACV,CAAA;IACAV,QAAQhB,qBAAE6B;EACZ,CAAA,EAAA;EAAI;gBALSC,aAAAA;AAMf,GAlCiBtB,iBAAAA,eAAAA,CAAAA,EAAAA;AAoDV,IAAMwB,WAAW,CAACf,WAA0CA,UAAU,QAAQA,kBAAkBC;",
6
+ "names": ["KANBAN_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags", "screenshots", "TypenameAnnotationId", "Symbol", "for", "PivotColumnAnnotationId", "CreateKanbanSchema", "S", "Struct", "optional", "String", "typename", "annotations", "TitleAnnotationId", "initialPivotColumn", "KanbanAction", "KANBAN_ACTION", "Create", "TaggedClass", "input", "extend", "space", "SpaceSchema", "output", "object", "KanbanType", "DeleteCardField", "kanban", "fieldId", "deletionData", "field", "FieldSchema", "props", "Any", "index", "Number", "Void", "DeleteCard", "card", "isKanban"]
7
+ }
@@ -28,12 +28,12 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var node_exports = {};
30
30
  __export(node_exports, {
31
- KANBAN_PLUGIN: () => import_chunk_3EUR6ZR2.KANBAN_PLUGIN,
31
+ KANBAN_PLUGIN: () => import_chunk_ZRCL6XVF.KANBAN_PLUGIN,
32
32
  KanbanPlugin: () => KanbanPlugin,
33
- meta: () => import_chunk_3EUR6ZR2.meta
33
+ meta: () => import_chunk_ZRCL6XVF.meta
34
34
  });
35
35
  module.exports = __toCommonJS(node_exports);
36
- var import_chunk_3EUR6ZR2 = require("./chunk-3EUR6ZR2.cjs");
36
+ var import_chunk_ZRCL6XVF = require("./chunk-ZRCL6XVF.cjs");
37
37
  var import_app_framework = require("@dxos/app-framework");
38
38
  var import_plugin_client = require("@dxos/plugin-client");
39
39
  var import_plugin_space = require("@dxos/plugin-space");
@@ -41,9 +41,9 @@ var import_types = require("@dxos/plugin-space/types");
41
41
  var import_react_ui_kanban = require("@dxos/react-ui-kanban");
42
42
  var import_app_framework2 = require("@dxos/app-framework");
43
43
  var import_react_ui_kanban2 = require("@dxos/react-ui-kanban");
44
- var ArtifactDefinition = (0, import_app_framework2.lazy)(() => import("./artifact-definition-M2XAYUI2.cjs"));
45
- var IntentResolver = (0, import_app_framework2.lazy)(() => import("./intent-resolver-P3PSZO7H.cjs"));
46
- var ReactSurface = (0, import_app_framework2.lazy)(() => import("./react-surface-FVM64YAQ.cjs"));
44
+ var ArtifactDefinition = (0, import_app_framework2.lazy)(() => import("./artifact-definition-ZOUZLESK.cjs"));
45
+ var IntentResolver = (0, import_app_framework2.lazy)(() => import("./intent-resolver-BCCCN7LD.cjs"));
46
+ var ReactSurface = (0, import_app_framework2.lazy)(() => import("./react-surface-LQ7CQFWF.cjs"));
47
47
  var translations_default = [
48
48
  {
49
49
  "en-US": {
@@ -51,7 +51,7 @@ var translations_default = [
51
51
  "typename label": "Kanban",
52
52
  "object name placeholder": "New kanban"
53
53
  },
54
- [import_chunk_3EUR6ZR2.KANBAN_PLUGIN]: {
54
+ [import_chunk_ZRCL6XVF.KANBAN_PLUGIN]: {
55
55
  "plugin name": "Kanban",
56
56
  "kanban title label": "Title",
57
57
  "column title label": "Column title",
@@ -68,9 +68,9 @@ var translations_default = [
68
68
  }
69
69
  }
70
70
  ];
71
- var KanbanPlugin = () => (0, import_app_framework.definePlugin)(import_chunk_3EUR6ZR2.meta, [
71
+ var KanbanPlugin = () => (0, import_app_framework.definePlugin)(import_chunk_ZRCL6XVF.meta, [
72
72
  (0, import_app_framework.defineModule)({
73
- id: `${import_chunk_3EUR6ZR2.meta.id}/module/translations`,
73
+ id: `${import_chunk_ZRCL6XVF.meta.id}/module/translations`,
74
74
  activatesOn: import_app_framework.Events.SetupTranslations,
75
75
  activate: () => (0, import_app_framework.contributes)(import_app_framework.Capabilities.Translations, [
76
76
  ...translations_default,
@@ -78,7 +78,7 @@ var KanbanPlugin = () => (0, import_app_framework.definePlugin)(import_chunk_3EU
78
78
  ])
79
79
  }),
80
80
  (0, import_app_framework.defineModule)({
81
- id: `${import_chunk_3EUR6ZR2.meta.id}/module/metadata`,
81
+ id: `${import_chunk_ZRCL6XVF.meta.id}/module/metadata`,
82
82
  activatesOn: import_app_framework.Events.SetupMetadata,
83
83
  activate: () => (0, import_app_framework.contributes)(import_app_framework.Capabilities.Metadata, {
84
84
  id: import_react_ui_kanban.KanbanType.typename,
@@ -88,29 +88,29 @@ var KanbanPlugin = () => (0, import_app_framework.definePlugin)(import_chunk_3EU
88
88
  })
89
89
  }),
90
90
  (0, import_app_framework.defineModule)({
91
- id: `${import_chunk_3EUR6ZR2.meta.id}/module/object-form`,
91
+ id: `${import_chunk_ZRCL6XVF.meta.id}/module/object-form`,
92
92
  activatesOn: import_plugin_client.ClientEvents.SetupSchema,
93
93
  activate: () => (0, import_app_framework.contributes)(import_plugin_space.SpaceCapabilities.ObjectForm, (0, import_types.defineObjectForm)({
94
94
  objectSchema: import_react_ui_kanban.KanbanType,
95
- formSchema: import_chunk_3EUR6ZR2.CreateKanbanSchema,
96
- getIntent: (props, options) => (0, import_app_framework.createIntent)(import_chunk_3EUR6ZR2.KanbanAction.Create, {
95
+ formSchema: import_chunk_ZRCL6XVF.CreateKanbanSchema,
96
+ getIntent: (props, options) => (0, import_app_framework.createIntent)(import_chunk_ZRCL6XVF.KanbanAction.Create, {
97
97
  ...props,
98
98
  space: options.space
99
99
  })
100
100
  }))
101
101
  }),
102
102
  (0, import_app_framework.defineModule)({
103
- id: `${import_chunk_3EUR6ZR2.meta.id}/module/react-surface`,
103
+ id: `${import_chunk_ZRCL6XVF.meta.id}/module/react-surface`,
104
104
  activatesOn: import_app_framework.Events.SetupReactSurface,
105
105
  activate: ReactSurface
106
106
  }),
107
107
  (0, import_app_framework.defineModule)({
108
- id: `${import_chunk_3EUR6ZR2.meta.id}/module/intent-resolver`,
108
+ id: `${import_chunk_ZRCL6XVF.meta.id}/module/intent-resolver`,
109
109
  activatesOn: import_app_framework.Events.SetupIntentResolver,
110
110
  activate: IntentResolver
111
111
  }),
112
112
  (0, import_app_framework.defineModule)({
113
- id: `${import_chunk_3EUR6ZR2.meta.id}/module/artifact-definition`,
113
+ id: `${import_chunk_ZRCL6XVF.meta.id}/module/artifact-definition`,
114
114
  activatesOn: import_app_framework.Events.SetupArtifactDefinition,
115
115
  activate: ArtifactDefinition
116
116
  })