@dxos/plugin-pipeline 0.8.4-main.3fbcb4aa9b → 0.8.4-main.4668b7de9b

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 (79) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +345 -0
  3. package/README.md +1 -1
  4. package/dist/lib/neutral/{PipelineContainer-7MK2SS76.mjs → PipelineArticle-6JIVXMYF.mjs} +4 -4
  5. package/dist/lib/neutral/PipelineArticle-6JIVXMYF.mjs.map +7 -0
  6. package/dist/lib/neutral/PipelinePlugin.mjs +12 -0
  7. package/dist/lib/neutral/PipelinePlugin.mjs.map +4 -4
  8. package/dist/lib/neutral/PipelinePlugin.workerd.mjs +16 -0
  9. package/dist/lib/neutral/PipelinePlugin.workerd.mjs.map +7 -0
  10. package/dist/lib/neutral/{PipelineProperties-RRPQ3V6I.mjs → PipelineProperties-JXY3AVOY.mjs} +43 -44
  11. package/dist/lib/neutral/PipelineProperties-JXY3AVOY.mjs.map +7 -0
  12. package/dist/lib/neutral/capabilities/index.mjs +2 -2
  13. package/dist/lib/neutral/chunk-CYXDAAKN.mjs +35 -0
  14. package/dist/lib/neutral/chunk-CYXDAAKN.mjs.map +7 -0
  15. package/dist/lib/neutral/components/index.mjs +19 -22
  16. package/dist/lib/neutral/components/index.mjs.map +3 -3
  17. package/dist/lib/neutral/containers/index.mjs +3 -3
  18. package/dist/lib/neutral/containers/index.mjs.map +3 -3
  19. package/dist/lib/neutral/{create-object-ZJYFACOI.mjs → create-object-6Z4MMGX4.mjs} +3 -2
  20. package/dist/lib/neutral/create-object-6Z4MMGX4.mjs.map +7 -0
  21. package/dist/lib/neutral/hooks/index.mjs +5 -5
  22. package/dist/lib/neutral/hooks/index.mjs.map +3 -3
  23. package/dist/lib/neutral/index.mjs +1 -1
  24. package/dist/lib/neutral/meta.json +1 -1
  25. package/dist/lib/neutral/meta.mjs +1 -1
  26. package/dist/lib/neutral/plugin.mjs +1 -1
  27. package/dist/lib/neutral/{react-surface-TW6TRMO6.mjs → react-surface-QG7QSZSS.mjs} +4 -4
  28. package/dist/lib/neutral/react-surface-QG7QSZSS.mjs.map +7 -0
  29. package/dist/lib/neutral/translations.mjs +2 -1
  30. package/dist/lib/neutral/translations.mjs.map +3 -3
  31. package/dist/types/src/PipelinePlugin.d.ts.map +1 -1
  32. package/dist/types/src/PipelinePlugin.workerd.d.ts +4 -0
  33. package/dist/types/src/PipelinePlugin.workerd.d.ts.map +1 -0
  34. package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
  35. package/dist/types/src/components/PipelineComponent/PipelineColumn.d.ts.map +1 -1
  36. package/dist/types/src/components/PipelineComponent/PipelineComponent.d.ts.map +1 -1
  37. package/dist/types/src/components/PipelineComponent/PipelineComponent.stories.d.ts.map +1 -1
  38. package/dist/types/src/containers/PipelineArticle/PipelineArticle.d.ts +6 -0
  39. package/dist/types/src/containers/PipelineArticle/PipelineArticle.d.ts.map +1 -0
  40. package/dist/types/src/containers/{PipelineContainer/PipelineContainer.stories.d.ts → PipelineArticle/PipelineArticle.stories.d.ts} +1 -1
  41. package/dist/types/src/containers/PipelineArticle/PipelineArticle.stories.d.ts.map +1 -0
  42. package/dist/types/src/containers/PipelineArticle/index.d.ts +2 -0
  43. package/dist/types/src/containers/PipelineArticle/index.d.ts.map +1 -0
  44. package/dist/types/src/containers/PipelineProperties/PipelineProperties.d.ts.map +1 -1
  45. package/dist/types/src/containers/index.d.ts +1 -1
  46. package/dist/types/src/containers/index.d.ts.map +1 -1
  47. package/dist/types/src/meta.d.ts +1 -1
  48. package/dist/types/src/meta.d.ts.map +1 -1
  49. package/dist/types/src/translations.d.ts.map +1 -1
  50. package/dist/types/tsconfig.tsbuildinfo +1 -1
  51. package/package.json +44 -43
  52. package/src/PipelinePlugin.tsx +6 -0
  53. package/src/PipelinePlugin.workerd.ts +16 -0
  54. package/src/capabilities/create-object.ts +2 -1
  55. package/src/capabilities/react-surface.tsx +3 -3
  56. package/src/components/PipelineComponent/PipelineColumn.tsx +20 -30
  57. package/src/components/PipelineComponent/PipelineComponent.stories.tsx +2 -4
  58. package/src/components/PipelineComponent/PipelineComponent.tsx +1 -1
  59. package/src/containers/{PipelineContainer/PipelineContainer.stories.tsx → PipelineArticle/PipelineArticle.stories.tsx} +11 -16
  60. package/src/containers/{PipelineContainer/PipelineContainer.tsx → PipelineArticle/PipelineArticle.tsx} +2 -2
  61. package/src/containers/PipelineArticle/index.ts +5 -0
  62. package/src/containers/PipelineProperties/PipelineProperties.tsx +53 -56
  63. package/src/containers/index.ts +1 -1
  64. package/src/hooks/usePipelineBoardModel.ts +5 -5
  65. package/src/meta.ts +19 -6
  66. package/src/translations.ts +2 -1
  67. package/src/vite-env.d.ts +10 -0
  68. package/dist/lib/neutral/PipelineContainer-7MK2SS76.mjs.map +0 -7
  69. package/dist/lib/neutral/PipelineProperties-RRPQ3V6I.mjs.map +0 -7
  70. package/dist/lib/neutral/chunk-ULB5DKWO.mjs +0 -21
  71. package/dist/lib/neutral/chunk-ULB5DKWO.mjs.map +0 -7
  72. package/dist/lib/neutral/create-object-ZJYFACOI.mjs.map +0 -7
  73. package/dist/lib/neutral/react-surface-TW6TRMO6.mjs.map +0 -7
  74. package/dist/types/src/containers/PipelineContainer/PipelineContainer.d.ts +0 -6
  75. package/dist/types/src/containers/PipelineContainer/PipelineContainer.d.ts.map +0 -1
  76. package/dist/types/src/containers/PipelineContainer/PipelineContainer.stories.d.ts.map +0 -1
  77. package/dist/types/src/containers/PipelineContainer/index.d.ts +0 -2
  78. package/dist/types/src/containers/PipelineContainer/index.d.ts.map +0 -1
  79. package/src/containers/PipelineContainer/index.ts +0 -5
@@ -3,14 +3,14 @@ import * as Schema from "effect/Schema";
3
3
  import React, { useCallback, useMemo, useRef, useState } from "react";
4
4
  import { resolveSchemaWithRegistry } from "@dxos/app-toolkit/query";
5
5
  import { useTypeOptions } from "@dxos/app-toolkit/ui";
6
- import { DXN, Filter, JsonSchema, Obj, Query, Ref, Tag } from "@dxos/echo";
7
- import { getSpace, useObject, useQuery } from "@dxos/react-client/echo";
6
+ import { EID, Filter, JsonSchema, Obj, Query, Ref, Scope, Tag } from "@dxos/echo";
7
+ import { useObject, useQuery } from "@dxos/react-client/echo";
8
8
  import { IconButton, useAsyncEffect, useTranslation } from "@dxos/react-ui";
9
9
  import { Form, ViewEditor } from "@dxos/react-ui-form";
10
10
  import { List } from "@dxos/react-ui-list";
11
11
  import { ViewModel } from "@dxos/schema";
12
12
  import { Pipeline } from "@dxos/types";
13
- import { mx, osTranslations, subtleHover } from "@dxos/ui-theme";
13
+ import { mx, osTranslations } from "@dxos/ui-theme";
14
14
  import { arrayMove } from "@dxos/util";
15
15
  import { meta } from "#meta";
16
16
  var listGrid = "grid grid-cols-[min-content_1fr_min-content_min-content_min-content]";
@@ -18,19 +18,19 @@ var listItemGrid = "grid grid-cols-subgrid col-span-5";
18
18
  var ColumnFormSchema = Pipeline.Column.pipe(Schema.mutable, Schema.pick("name"));
19
19
  var PipelineProperties = ({ classNames, pipeline }) => {
20
20
  const { t } = useTranslation(meta.id);
21
- const space = getSpace(pipeline);
21
+ const db = Obj.getDatabase(pipeline);
22
22
  const [expandedId, setExpandedId] = useState();
23
23
  const [columns, updateColumns] = useObject(pipeline, "columns");
24
- const column = useMemo(() => columns.find((column2) => column2.view.dxn.toString() === expandedId), [
24
+ const column = useMemo(() => columns.find((column2) => column2.view.uri === expandedId), [
25
25
  columns,
26
26
  expandedId
27
27
  ]);
28
28
  const [view, updateView] = useObject(column?.view);
29
- const [schema, setSchema] = useState(() => Schema.Struct({}));
29
+ const [type, setType] = useState();
30
30
  const projectionRef = useRef(null);
31
- const tags = useQuery(space?.db, Filter.type(Tag.Tag));
31
+ const tags = useQuery(db, Filter.type(Tag.Tag));
32
32
  const types = useTypeOptions({
33
- space,
33
+ db,
34
34
  annotation: {
35
35
  location: [
36
36
  "database",
@@ -42,17 +42,17 @@ var PipelineProperties = ({ classNames, pipeline }) => {
42
42
  }
43
43
  });
44
44
  useAsyncEffect(async () => {
45
- if (!view?.query || !space) {
45
+ if (!view?.query || !db) {
46
46
  return;
47
47
  }
48
- const foundSchema = await resolveSchemaWithRegistry(space.db.schemaRegistry, view.query.ast);
49
- if (foundSchema && foundSchema !== schema) {
50
- setSchema(() => foundSchema);
48
+ const foundType = await resolveSchemaWithRegistry(db, view.query.ast);
49
+ if (foundType && foundType !== type) {
50
+ setType(() => foundType);
51
51
  }
52
52
  }, [
53
- space,
53
+ db,
54
54
  view,
55
- schema
55
+ type
56
56
  ]);
57
57
  const handleMove = useCallback((fromIndex, toIndex) => updateColumns((columns2) => {
58
58
  arrayMove(columns2, fromIndex, toIndex);
@@ -60,34 +60,33 @@ var PipelineProperties = ({ classNames, pipeline }) => {
60
60
  updateColumns
61
61
  ]);
62
62
  const handleQueryChanged = useCallback(async (newQuery, target) => {
63
- if (!view || !space) {
63
+ if (!view || !db) {
64
64
  return;
65
65
  }
66
- const queue = target && DXN.tryParse(target) ? target : void 0;
67
- const query = queue ? Query.fromAst(newQuery).from({
68
- queues: [
69
- queue
70
- ]
71
- }) : Query.fromAst(newQuery);
66
+ const queue = target;
67
+ const query = queue ? Query.fromAst(newQuery).from([
68
+ Scope.feed(`dxn:queue:data:${EID.getSpaceId(queue)}:${EID.getEntityId(queue)}`)
69
+ ]) : Query.fromAst(newQuery);
72
70
  updateView((view2) => {
73
71
  view2.query.ast = query.ast;
74
72
  });
75
- const newSchema = await resolveSchemaWithRegistry(space.db.schemaRegistry, query.ast);
76
- if (!newSchema) {
73
+ const newType = await resolveSchemaWithRegistry(db, query.ast);
74
+ if (!newType) {
77
75
  return;
78
76
  }
79
77
  const newView = ViewModel.make({
80
78
  query,
81
- jsonSchema: JsonSchema.toJsonSchema(newSchema)
79
+ jsonSchema: newType.jsonSchema
82
80
  });
83
81
  updateView((view2) => {
84
82
  view2.projection = Obj.getSnapshot(newView).projection;
85
83
  });
86
- setSchema(() => newSchema);
84
+ setType(() => newType);
87
85
  }, [
86
+ db,
88
87
  view,
89
88
  updateView,
90
- schema
89
+ type
91
90
  ]);
92
91
  const handleColumnValuesChanged = useCallback((column2) => (newValues, { changed }) => {
93
92
  if (changed["name"]) {
@@ -104,10 +103,10 @@ var PipelineProperties = ({ classNames, pipeline }) => {
104
103
  updateColumns
105
104
  ]);
106
105
  const handleToggleField = useCallback((column2) => {
107
- setExpandedId((prevExpandedId) => prevExpandedId === column2.view.dxn.toString() ? void 0 : column2.view.dxn.toString());
106
+ setExpandedId((prevExpandedId) => prevExpandedId === column2.view.uri ? void 0 : column2.view.uri);
108
107
  }, []);
109
108
  const handleDelete = useCallback(async (column2) => {
110
- if (column2.view.dxn.toString() === expandedId) {
109
+ if (column2.view.uri === expandedId) {
111
110
  setExpandedId(void 0);
112
111
  }
113
112
  const index = columns.findIndex((l) => l === column2);
@@ -115,22 +114,22 @@ var PipelineProperties = ({ classNames, pipeline }) => {
115
114
  updateColumns((columns2) => {
116
115
  columns2.splice(index, 1);
117
116
  });
118
- space?.db.remove(viewToRemove);
117
+ db?.remove(viewToRemove);
119
118
  }, [
120
119
  expandedId,
121
120
  columns,
122
121
  updateColumns,
123
- space
122
+ db
124
123
  ]);
125
124
  const handleAdd = useCallback(() => {
126
- if (!space) {
125
+ if (!db) {
127
126
  return;
128
127
  }
129
128
  const newView = ViewModel.make({
130
129
  query: Query.select(Filter.nothing()),
131
130
  jsonSchema: JsonSchema.toJsonSchema(Schema.Struct({}))
132
131
  });
133
- space.db.add(newView);
132
+ db.add(newView);
134
133
  updateColumns((columns2) => {
135
134
  columns2.push({
136
135
  name: "",
@@ -141,7 +140,7 @@ var PipelineProperties = ({ classNames, pipeline }) => {
141
140
  });
142
141
  setExpandedId(newView.id);
143
142
  }, [
144
- space,
143
+ db,
145
144
  updateColumns
146
145
  ]);
147
146
  return /* @__PURE__ */ React.createElement("div", {
@@ -151,18 +150,18 @@ var PipelineProperties = ({ classNames, pipeline }) => {
151
150
  }, t("views.label")), /* @__PURE__ */ React.createElement(List.Root, {
152
151
  items: columns,
153
152
  isItem: Schema.is(Pipeline.Column),
154
- getId: (column2) => column2.view.dxn.toString(),
153
+ getId: (column2) => column2.view.uri,
155
154
  onMove: handleMove
156
155
  }, ({ items: columns2 }) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", {
157
156
  role: "list",
158
157
  className: mx(listGrid)
159
158
  }, columns2.map((column2) => /* @__PURE__ */ React.createElement(List.Item, {
160
- key: column2.view.dxn.toString(),
159
+ key: column2.view.uri,
161
160
  item: column2,
162
161
  classNames: listItemGrid,
163
- "aria-expanded": expandedId === column2.view.dxn.toString()
162
+ "aria-expanded": expandedId === column2.view.uri
164
163
  }, /* @__PURE__ */ React.createElement("div", {
165
- className: mx(subtleHover, listItemGrid, "rounded-xs cursor-pointer min-h-10")
164
+ className: mx(listItemGrid, "dx-hover rounded-xs cursor-pointer min-h-10")
166
165
  }, /* @__PURE__ */ React.createElement(List.ItemDragHandle, null), /* @__PURE__ */ React.createElement(List.ItemTitle, {
167
166
  onClick: () => handleToggleField(column2)
168
167
  }, column2.name || t("untitled-view.title")), /* @__PURE__ */ React.createElement(List.ItemDeleteButton, {
@@ -176,22 +175,22 @@ var PipelineProperties = ({ classNames, pipeline }) => {
176
175
  label: t("toggle-expand.label", {
177
176
  ns: osTranslations
178
177
  }),
179
- icon: expandedId === column2.view.dxn.toString() ? "ph--caret-down--regular" : "ph--caret-right--regular",
178
+ icon: expandedId === column2.view.uri ? "ph--caret-down--regular" : "ph--caret-right--regular",
180
179
  onClick: () => handleToggleField(column2)
181
- })), expandedId === column2.view.dxn.toString() && column2?.view.target && /* @__PURE__ */ React.createElement("div", {
180
+ })), expandedId === column2.view.uri && column2?.view.target && /* @__PURE__ */ React.createElement("div", {
182
181
  className: "col-span-5 my-2 border border-separator rounded-md"
183
182
  }, /* @__PURE__ */ React.createElement(Form.Root, {
184
183
  schema: ColumnFormSchema,
185
184
  values: column2,
186
185
  onValuesChanged: handleColumnValuesChanged(column2)
187
- }, /* @__PURE__ */ React.createElement(Form.Content, null, /* @__PURE__ */ React.createElement(Form.FieldSet, null))), /* @__PURE__ */ React.createElement(ViewEditor, {
186
+ }, /* @__PURE__ */ React.createElement(Form.Content, null, /* @__PURE__ */ React.createElement(Form.FieldSet, null))), type && /* @__PURE__ */ React.createElement(ViewEditor, {
188
187
  ref: projectionRef,
189
188
  mode: "tag",
190
189
  readonly: true,
191
- schema,
190
+ type,
192
191
  view: column2.view.target,
193
- registry: space?.db.schemaRegistry,
194
- db: space?.db,
192
+ registry: db?.graph.registry,
193
+ db,
195
194
  tags,
196
195
  types,
197
196
  onQueryChanged: handleQueryChanged
@@ -207,4 +206,4 @@ var PipelineProperties = ({ classNames, pipeline }) => {
207
206
  export {
208
207
  PipelineProperties as default
209
208
  };
210
- //# sourceMappingURL=PipelineProperties-RRPQ3V6I.mjs.map
209
+ //# sourceMappingURL=PipelineProperties-JXY3AVOY.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/PipelineProperties/PipelineProperties.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { resolveSchemaWithRegistry } from '@dxos/app-toolkit/query';\nimport { useTypeOptions } from '@dxos/app-toolkit/ui';\nimport { EID, Filter, JsonSchema, Obj, Query, type QueryAST, Ref, Scope, Tag, type Type } from '@dxos/echo';\nimport { type JsonPath, type Mutable } from '@dxos/echo/internal';\nimport { useObject, useQuery } from '@dxos/react-client/echo';\nimport { IconButton, type ThemedClassName, useAsyncEffect, useTranslation } from '@dxos/react-ui';\nimport { Form, ViewEditor } from '@dxos/react-ui-form';\nimport { List } from '@dxos/react-ui-list';\nimport { type ProjectionModel, ViewModel } from '@dxos/schema';\nimport { Pipeline } from '@dxos/types';\nimport { mx, osTranslations } from '@dxos/ui-theme';\nimport { arrayMove } from '@dxos/util';\n\nimport { meta } from '#meta';\n\nconst listGrid = 'grid grid-cols-[min-content_1fr_min-content_min-content_min-content]';\nconst listItemGrid = 'grid grid-cols-subgrid col-span-5';\n\nconst ColumnFormSchema = Pipeline.Column.pipe(Schema.mutable, Schema.pick('name'));\n\nexport type PipelinePropertiesProps = ThemedClassName<{\n pipeline: Pipeline.Pipeline;\n}>;\n\n/**\n * Supports editing the pipeline view.\n */\nexport const PipelineProperties = ({ classNames, pipeline }: PipelinePropertiesProps) => {\n const { t } = useTranslation(meta.id);\n const db = Obj.getDatabase(pipeline);\n const [expandedId, setExpandedId] = useState<string>();\n const [columns, updateColumns] = useObject(pipeline, 'columns');\n const column = useMemo(() => columns.find((column) => column.view.uri === expandedId), [columns, expandedId]);\n const [view, updateView] = useObject(column?.view);\n const [type, setType] = useState<Type.AnyEntity>();\n const projectionRef = useRef<ProjectionModel>(null);\n const tags = useQuery(db, Filter.type(Tag.Tag));\n const types = useTypeOptions({\n db,\n annotation: {\n location: ['database', 'runtime'],\n kind: ['user'],\n },\n });\n\n useAsyncEffect(async () => {\n if (!view?.query || !db) {\n return;\n }\n\n const foundType = await resolveSchemaWithRegistry(db, view.query.ast);\n if (foundType && foundType !== type) {\n setType(() => foundType);\n }\n }, [db, view, type]);\n\n const handleMove = useCallback(\n (fromIndex: number, toIndex: number) =>\n updateColumns((columns) => {\n arrayMove(columns, fromIndex, toIndex);\n }),\n [updateColumns],\n );\n\n const handleQueryChanged = useCallback(\n async (newQuery: QueryAST.Query, target?: EID.EID) => {\n if (!view || !db) {\n return;\n }\n\n const queue = target;\n const query = queue\n ? Query.fromAst(newQuery).from([\n Scope.feed(`dxn:queue:data:${EID.getSpaceId(queue)}:${EID.getEntityId(queue)}`),\n ])\n : Query.fromAst(newQuery);\n updateView((view) => {\n view.query.ast = query.ast as Mutable<typeof query.ast>;\n });\n const newType = await resolveSchemaWithRegistry(db, query.ast);\n if (!newType) {\n return;\n }\n\n const newView = ViewModel.make({\n query,\n jsonSchema: newType.jsonSchema,\n });\n updateView((view) => {\n view.projection = Obj.getSnapshot(newView).projection as Mutable<typeof view.projection>;\n });\n\n setType(() => newType);\n },\n [db, view, updateView, type],\n );\n\n const handleColumnValuesChanged = useCallback(\n (column: Pipeline.Column) =>\n (newValues: { name?: string }, { changed }: { changed: Record<JsonPath, boolean> }) => {\n if (changed['name' as JsonPath]) {\n const columnIndex = columns.findIndex((c) => c === column);\n if (columnIndex === -1) {\n return;\n }\n updateColumns((cols) => {\n cols[columnIndex].name = newValues.name ?? '';\n });\n }\n },\n [columns, updateColumns],\n );\n\n const handleToggleField = useCallback((column: Pipeline.Column) => {\n setExpandedId((prevExpandedId) => (prevExpandedId === column.view.uri ? undefined : column.view.uri));\n }, []);\n\n const handleDelete = useCallback(\n async (column: Pipeline.Column) => {\n if (column.view.uri === expandedId) {\n setExpandedId(undefined);\n }\n\n const index = columns.findIndex((l) => l === column);\n const viewToRemove = await column.view.load();\n updateColumns((columns) => {\n columns.splice(index, 1);\n });\n db?.remove(viewToRemove);\n },\n [expandedId, columns, updateColumns, db],\n );\n\n const handleAdd = useCallback(() => {\n if (!db) {\n return;\n }\n const newView = ViewModel.make({\n query: Query.select(Filter.nothing()),\n jsonSchema: JsonSchema.toJsonSchema(Schema.Struct({})),\n });\n db.add(newView);\n updateColumns((columns) => {\n columns.push({\n name: '',\n // Type assertion needed due to QueryAST type variance.\n view: Ref.make(newView) as (typeof columns)[number]['view'],\n order: [],\n });\n });\n setExpandedId(newView.id);\n }, [db, updateColumns]);\n\n return (\n <div className={mx('py-form-padding overflow-y-auto', classNames)}>\n <h2 className='text-sm text-description py-1'>{t('views.label')}</h2>\n\n <List.Root<Pipeline.Column>\n items={columns}\n isItem={Schema.is(Pipeline.Column)}\n getId={(column) => column.view.uri}\n onMove={handleMove}\n >\n {({ items: columns }) => (\n <>\n <div role='list' className={mx(listGrid)}>\n {columns.map((column) => (\n <List.Item<Pipeline.Column>\n key={column.view.uri}\n item={column}\n classNames={listItemGrid}\n aria-expanded={expandedId === column.view.uri}\n >\n <div className={mx(listItemGrid, 'dx-hover rounded-xs cursor-pointer min-h-10')}>\n <List.ItemDragHandle />\n <List.ItemTitle onClick={() => handleToggleField(column)}>\n {column.name || t('untitled-view.title')}\n </List.ItemTitle>\n <List.ItemDeleteButton\n label={t('delete-view.label')}\n autoHide={false}\n onClick={() => handleDelete(column)}\n data-testid='view.delete'\n />\n <IconButton\n iconOnly\n variant='ghost'\n label={t('toggle-expand.label', { ns: osTranslations })}\n icon={expandedId === column.view.uri ? 'ph--caret-down--regular' : 'ph--caret-right--regular'}\n onClick={() => handleToggleField(column)}\n />\n </div>\n {expandedId === column.view.uri && column?.view.target && (\n <div className='col-span-5 my-2 border border-separator rounded-md'>\n <Form.Root\n schema={ColumnFormSchema}\n values={column}\n onValuesChanged={handleColumnValuesChanged(column)}\n >\n <Form.Content>\n <Form.FieldSet />\n </Form.Content>\n </Form.Root>\n {type && (\n <ViewEditor\n ref={projectionRef}\n mode='tag'\n readonly\n type={type}\n view={column.view.target}\n registry={db?.graph.registry}\n db={db}\n tags={tags}\n types={types}\n onQueryChanged={handleQueryChanged}\n />\n )}\n </div>\n )}\n </List.Item>\n ))}\n </div>\n </>\n )}\n </List.Root>\n\n <div className='my-form-padding'>\n <IconButton icon='ph--plus--regular' label={t('add-view.label')} onClick={handleAdd} classNames='w-full' />\n </div>\n </div>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Schema", "React", "useCallback", "useMemo", "useRef", "useState", "resolveSchemaWithRegistry", "useTypeOptions", "EID", "Filter", "JsonSchema", "Obj", "Query", "Ref", "Scope", "Tag", "useObject", "useQuery", "IconButton", "useAsyncEffect", "useTranslation", "Form", "ViewEditor", "List", "ViewModel", "Pipeline", "mx", "osTranslations", "arrayMove", "meta", "listGrid", "listItemGrid", "ColumnFormSchema", "Column", "pipe", "mutable", "pick", "PipelineProperties", "classNames", "pipeline", "t", "id", "db", "getDatabase", "expandedId", "setExpandedId", "columns", "updateColumns", "column", "find", "view", "uri", "updateView", "type", "setType", "projectionRef", "tags", "types", "annotation", "location", "kind", "query", "foundType", "ast", "handleMove", "fromIndex", "toIndex", "handleQueryChanged", "newQuery", "target", "queue", "fromAst", "from", "feed", "getSpaceId", "getEntityId", "newType", "newView", "make", "jsonSchema", "projection", "getSnapshot", "handleColumnValuesChanged", "newValues", "changed", "columnIndex", "findIndex", "c", "cols", "name", "handleToggleField", "prevExpandedId", "undefined", "handleDelete", "index", "l", "viewToRemove", "load", "splice", "remove", "handleAdd", "select", "nothing", "toJsonSchema", "Struct", "add", "push", "order", "div", "className", "h2", "Root", "items", "isItem", "is", "getId", "onMove", "role", "map", "Item", "key", "item", "aria-expanded", "ItemDragHandle", "ItemTitle", "onClick", "ItemDeleteButton", "label", "autoHide", "data-testid", "iconOnly", "variant", "ns", "icon", "schema", "values", "onValuesChanged", "Content", "FieldSet", "ref", "mode", "readonly", "registry", "graph", "onQueryChanged"]
7
+ }
@@ -1,8 +1,8 @@
1
1
  // src/capabilities/index.ts
2
2
  import { Capability } from "@dxos/app-framework";
3
3
  var AppGraphBuilder = Capability.lazy("AppGraphBuilder", () => import("../app-graph-builder-ZLGRWRJU.mjs"));
4
- var CreateObject = Capability.lazy("CreateObject", () => import("../create-object-ZJYFACOI.mjs"));
5
- var ReactSurface = Capability.lazy("ReactSurface", () => import("../react-surface-TW6TRMO6.mjs"));
4
+ var CreateObject = Capability.lazy("CreateObject", () => import("../create-object-6Z4MMGX4.mjs"));
5
+ var ReactSurface = Capability.lazy("ReactSurface", () => import("../react-surface-QG7QSZSS.mjs"));
6
6
  export {
7
7
  AppGraphBuilder,
8
8
  CreateObject,
@@ -0,0 +1,35 @@
1
+ // src/meta.ts
2
+ import { Plugin } from "@dxos/app-framework";
3
+ import { DXN } from "@dxos/keys";
4
+ import { trim } from "@dxos/util";
5
+ var meta = Plugin.makeMeta({
6
+ key: DXN.make("org.dxos.plugin.pipeline"),
7
+ name: "Pipelines",
8
+ author: "DXOS",
9
+ description: trim`
10
+ A multi-column Kanban-style pipeline plugin for DXOS Composer.
11
+ Each Pipeline holds an ordered set of Columns; each Column is backed by a ViewModel whose query
12
+ can select any ECHO object type — messages, contacts, documents, or custom types — from the active space.
13
+
14
+ Columns are fully configurable through the Settings companion panel, where users can add, rename,
15
+ reorder, and delete columns and edit the underlying query and projection for each column.
16
+ Objects can be dragged between columns and the full pipeline state, including column order and
17
+ per-column item order, persists collaboratively via ECHO.
18
+
19
+ A built-in Research template scaffolds a four-column pipeline wired to the Mailbox, Contacts,
20
+ Organizations, and Notes objects in the space, providing an out-of-the-box CRM-style workflow.
21
+ Pipeline articles also expose Invocations and Automation companion tabs for AI-driven automation.
22
+ `,
23
+ icon: "ph--path--regular",
24
+ iconHue: "purple",
25
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-pipeline",
26
+ spec: "PLUGIN.mdl",
27
+ tags: [
28
+ "labs"
29
+ ]
30
+ });
31
+
32
+ export {
33
+ meta
34
+ };
35
+ //# sourceMappingURL=chunk-CYXDAAKN.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { DXN } from '@dxos/keys';\nimport { trim } from '@dxos/util';\n\nexport const meta = Plugin.makeMeta({\n key: DXN.make('org.dxos.plugin.pipeline'),\n name: 'Pipelines',\n author: 'DXOS',\n description: trim`\n A multi-column Kanban-style pipeline plugin for DXOS Composer.\n Each Pipeline holds an ordered set of Columns; each Column is backed by a ViewModel whose query\n can select any ECHO object type — messages, contacts, documents, or custom types — from the active space.\n\n Columns are fully configurable through the Settings companion panel, where users can add, rename,\n reorder, and delete columns and edit the underlying query and projection for each column.\n Objects can be dragged between columns and the full pipeline state, including column order and\n per-column item order, persists collaboratively via ECHO.\n\n A built-in Research template scaffolds a four-column pipeline wired to the Mailbox, Contacts,\n Organizations, and Notes objects in the space, providing an out-of-the-box CRM-style workflow.\n Pipeline articles also expose Invocations and Automation companion tabs for AI-driven automation.\n `,\n icon: 'ph--path--regular',\n iconHue: 'purple',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-pipeline',\n spec: 'PLUGIN.mdl',\n tags: ['labs'],\n});\n"],
5
+ "mappings": ";AAIA,SAASA,cAAc;AACvB,SAASC,WAAW;AACpB,SAASC,YAAY;AAEd,IAAMC,OAAOH,OAAOI,SAAS;EAClCC,KAAKJ,IAAIK,KAAK,0BAAA;EACdC,MAAM;EACNC,QAAQ;EACRC,aAAaP;;;;;;;;;;;;;;EAcbQ,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,MAAM;EACNC,MAAM;IAAC;;AACT,CAAA;",
6
+ "names": ["Plugin", "DXN", "trim", "meta", "makeMeta", "key", "make", "name", "author", "description", "icon", "iconHue", "source", "spec", "tags"]
7
+ }
@@ -1,11 +1,9 @@
1
1
  // src/components/PipelineComponent/PipelineColumn.tsx
2
2
  import { useComposedRefs } from "@radix-ui/react-compose-refs";
3
- import * as Function from "effect/Function";
4
- import * as Option from "effect/Option";
5
3
  import React2, { forwardRef, useMemo, useRef, useState } from "react";
6
4
  import { resolveSchemaWithRegistry } from "@dxos/app-toolkit/query";
7
- import { Annotation, JsonSchema, Obj as Obj2, Query, Type } from "@dxos/echo";
8
- import { Filter, getSpace, useObject } from "@dxos/react-client/echo";
5
+ import { Filter, Obj as Obj2, Query, Type } from "@dxos/echo";
6
+ import { useObject } from "@dxos/react-client/echo";
9
7
  import { Panel, Toolbar as Toolbar2, useAsyncEffect, useTranslation as useTranslation2 } from "@dxos/react-ui";
10
8
  import { Card } from "@dxos/react-ui";
11
9
  import { Menu } from "@dxos/react-ui-menu";
@@ -20,8 +18,8 @@ import { Slot } from "@radix-ui/react-slot";
20
18
  import React from "react";
21
19
  import { Obj } from "@dxos/echo";
22
20
  import { Toolbar, useTranslation } from "@dxos/react-ui";
21
+ import { composable, composableProps, slottable } from "@dxos/react-ui";
23
22
  import { Board, useBoard, useEventHandlerAdapter } from "@dxos/react-ui-mosaic";
24
- import { composable, composableProps, slottable } from "@dxos/ui-theme";
25
23
  import { meta } from "#meta";
26
24
  var itemNoOp = ({ item }) => /* @__PURE__ */ React.createElement("span", null, item.id);
27
25
  var PIPELINE_ROOT = "Pipeline.Root";
@@ -92,9 +90,9 @@ var PipelineColumn = ({ data: column, location, classNames, debug }) => {
92
90
  const [dragHandle, setDragHandle] = useState(null);
93
91
  const [viewSnapshot] = useObject(column.view);
94
92
  const view = column.view.target;
95
- const space = getSpace(view);
93
+ const db = view && Obj2.getDatabase(view);
96
94
  const { Item } = usePipeline(PIPELINE_COLUMN_NAME);
97
- const [schema, setSchema] = useState();
95
+ const [type, setType] = useState();
98
96
  const query = useMemo(() => {
99
97
  if (!view) {
100
98
  return Query.select(Filter.nothing());
@@ -105,28 +103,27 @@ var PipelineColumn = ({ data: column, location, classNames, debug }) => {
105
103
  JSON.stringify(viewSnapshot?.query.ast)
106
104
  ]);
107
105
  useAsyncEffect(async () => {
108
- if (!query || !space?.db) {
106
+ if (!query || !db) {
109
107
  return;
110
108
  }
111
- const schema2 = await resolveSchemaWithRegistry(space.db.schemaRegistry, query.ast);
112
- setSchema(() => schema2);
109
+ const type2 = await resolveSchemaWithRegistry(db, query.ast);
110
+ setType(() => type2);
113
111
  }, [
114
- space,
112
+ db,
115
113
  query
116
114
  ]);
117
115
  const projectionModel = useMemo(() => {
118
- if (!schema || !view) {
116
+ if (!type || !view) {
119
117
  return void 0;
120
118
  }
121
- const jsonSchema = Type.isMutable(schema) ? schema.jsonSchema : JsonSchema.toJsonSchema(schema);
122
- const change = createEchoChangeCallback(view, Type.isMutable(schema) ? schema : void 0);
119
+ const change = createEchoChangeCallback(view, Type.getDatabase(type) != null ? type : void 0);
123
120
  return new ProjectionModel({
124
121
  view,
125
- baseSchema: jsonSchema,
122
+ baseSchema: type.jsonSchema,
126
123
  change
127
124
  });
128
125
  }, [
129
- schema,
126
+ type,
130
127
  view
131
128
  ]);
132
129
  const PipelineTile = useMemo(() => {
@@ -171,7 +168,7 @@ var ItemTile = /* @__PURE__ */ forwardRef(({ classNames, data, location, debug,
171
168
  const rootRef = useRef(null);
172
169
  const composedRef = useComposedRefs(rootRef, forwardedRef);
173
170
  const { Item } = usePipeline(ITEM_TILE_NAME);
174
- const icon = Function.pipe(Obj2.getSchema(data), Option.fromNullable, Option.flatMap(Annotation.IconAnnotation.get), Option.map(({ icon: icon2 }) => icon2), Option.getOrElse(() => "ph--placeholder--regular"));
171
+ const icon = Obj2.getIcon(data)?.icon ?? "ph--circle-dashed--regular";
175
172
  return /* @__PURE__ */ React2.createElement(Menu.Root, null, /* @__PURE__ */ React2.createElement(Mosaic.Tile, {
176
173
  asChild: true,
177
174
  id: data.id,
@@ -183,18 +180,18 @@ var ItemTile = /* @__PURE__ */ forwardRef(({ classNames, data, location, debug,
183
180
  }, /* @__PURE__ */ React2.createElement(Card.Root, {
184
181
  classNames,
185
182
  ref: composedRef
186
- }, /* @__PURE__ */ React2.createElement(Card.Toolbar, null, /* @__PURE__ */ React2.createElement(Card.Icon, {
183
+ }, /* @__PURE__ */ React2.createElement(Card.Header, null, /* @__PURE__ */ React2.createElement(Card.Icon, {
187
184
  icon
188
- }), /* @__PURE__ */ React2.createElement(Card.Title, null, Obj2.getLabel(data)), /* @__PURE__ */ React2.createElement(Card.IconBlock, {
189
- padding: true
190
- }, /* @__PURE__ */ React2.createElement(Menu.Trigger, {
185
+ }), /* @__PURE__ */ React2.createElement(Card.Title, null, Obj2.getLabel(data, {
186
+ fallback: "typename"
187
+ })), /* @__PURE__ */ React2.createElement(Card.IconBlock, null, /* @__PURE__ */ React2.createElement(Menu.Trigger, {
191
188
  asChild: true
192
189
  }, /* @__PURE__ */ React2.createElement(Toolbar2.IconButton, {
193
190
  iconOnly: true,
194
191
  variant: "ghost",
195
192
  icon: "ph--dots-three-vertical--regular",
196
193
  label: "Actions"
197
- })), /* @__PURE__ */ React2.createElement(Menu.Content, null))), /* @__PURE__ */ React2.createElement(Card.Content, null, /* @__PURE__ */ React2.createElement(Item, itemProps))))));
194
+ })), /* @__PURE__ */ React2.createElement(Menu.Content, null))), /* @__PURE__ */ React2.createElement(Card.Body, null, /* @__PURE__ */ React2.createElement(Item, itemProps))))));
198
195
  });
199
196
  ItemTile.displayName = ITEM_TILE_NAME;
200
197
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/PipelineComponent/PipelineColumn.tsx", "../../../../src/components/PipelineComponent/PipelineComponent.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\nimport type * as Schema from 'effect/Schema';\nimport React, { forwardRef, useMemo, useRef, useState } from 'react';\n\nimport { resolveSchemaWithRegistry } from '@dxos/app-toolkit/query';\nimport { Annotation, JsonSchema, Obj, Query, Type } from '@dxos/echo';\nimport { Filter, getSpace, useObject } from '@dxos/react-client/echo';\nimport { Panel, Toolbar, useAsyncEffect, useTranslation } from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui';\nimport { Menu } from '@dxos/react-ui-menu';\nimport { Board, Focus, Mosaic, type MosaicTileProps } from '@dxos/react-ui-mosaic';\nimport { ProjectionModel, createEchoChangeCallback } from '@dxos/schema';\nimport { type Pipeline } from '@dxos/types';\n\nimport { meta } from '#meta';\n\nimport { type ItemProps, usePipeline } from './PipelineComponent';\n\n//\n// PipelineColumn\n//\n\nconst PIPELINE_COLUMN_NAME = 'PipelineColumn';\n\nexport type PipelineColumnProps = Pick<MosaicTileProps<Pipeline.Column>, 'classNames' | 'location' | 'data' | 'debug'>;\n\n// TODO(wittjosiah): Support item DnD reordering (ordering needs to be stored on the view presentation collection).\nexport const PipelineColumn = ({ data: column, location, classNames, debug }: PipelineColumnProps) => {\n const { t } = useTranslation(meta.id);\n const [dragHandle, setDragHandle] = useState<HTMLButtonElement | null>(null);\n // Subscribe to the view target for reactivity.\n const [viewSnapshot] = useObject(column.view);\n const view = column.view.target;\n const space = getSpace(view);\n const { Item } = usePipeline(PIPELINE_COLUMN_NAME);\n const [schema, setSchema] = useState<Schema.Schema.AnyNoContext>();\n const query = useMemo(() => {\n if (!view) {\n return Query.select(Filter.nothing());\n } else {\n // NOTE: Snapshot is required to prevent signal read in prohibited scope.\n // TODO(wittjosiah): Without stringify, filter.filters remains a proxied array.\n return Query.fromAst(JSON.parse(JSON.stringify(viewSnapshot?.query.ast)));\n }\n }, [JSON.stringify(viewSnapshot?.query.ast)]);\n\n useAsyncEffect(async () => {\n if (!query || !space?.db) {\n return;\n }\n\n const schema = await resolveSchemaWithRegistry(space.db.schemaRegistry, query.ast);\n setSchema(() => schema);\n }, [space, query]);\n\n const projectionModel = useMemo(() => {\n if (!schema || !view) {\n return undefined;\n }\n\n // For mutable schemas (EchoSchema), use the live jsonSchema reference for reactivity.\n const jsonSchema = Type.isMutable(schema) ? schema.jsonSchema : JsonSchema.toJsonSchema(schema);\n const change = createEchoChangeCallback(view, Type.isMutable(schema) ? schema : undefined);\n return new ProjectionModel({ view, baseSchema: jsonSchema, change });\n }, [schema, view]);\n\n const PipelineTile = useMemo(() => {\n return forwardRef<HTMLDivElement, Pick<MosaicTileProps<Obj.Unknown>, 'classNames' | 'location' | 'data' | 'debug'>>(\n (props, ref) => <ItemTile {...props} itemProps={{ item: props.data, projectionModel }} ref={ref} />,\n );\n }, [projectionModel]);\n\n if (!view) {\n return null;\n }\n\n return (\n <Panel.Root asChild>\n <Board.Column.Root\n debug={debug}\n data={column}\n location={location}\n classNames={classNames}\n dragHandle={dragHandle}\n >\n <Panel.Toolbar asChild>\n <Board.Column.Header\n classNames='_opacity-10'\n label={column.name || t('untitled-view.title')}\n dragHandleRef={setDragHandle}\n />\n </Panel.Toolbar>\n <Panel.Content asChild>\n <Board.Column.Body data={column} Tile={PipelineTile} />\n </Panel.Content>\n </Board.Column.Root>\n </Panel.Root>\n );\n};\n\nPipelineColumn.displayName = PIPELINE_COLUMN_NAME;\n\n//\n// ItemTile\n//\n\nconst ITEM_TILE_NAME = 'ItemTile';\n\ntype ItemTileProps = Pick<MosaicTileProps<Obj.Unknown>, 'classNames' | 'location' | 'data' | 'debug'> & {\n itemProps: ItemProps;\n};\n\nconst ItemTile = forwardRef<HTMLDivElement, ItemTileProps>(\n ({ classNames, data, location, debug, itemProps }, forwardedRef) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = useComposedRefs<HTMLDivElement>(rootRef, forwardedRef);\n const { Item } = usePipeline(ITEM_TILE_NAME);\n const icon = Function.pipe(\n Obj.getSchema(data),\n Option.fromNullable,\n Option.flatMap(Annotation.IconAnnotation.get),\n Option.map(({ icon }) => icon),\n Option.getOrElse(() => 'ph--placeholder--regular'),\n );\n\n return (\n <Menu.Root>\n <Mosaic.Tile asChild id={data.id} data={data} location={location} debug={debug}>\n <Focus.Item asChild>\n <Card.Root classNames={classNames} ref={composedRef}>\n <Card.Toolbar>\n <Card.Icon icon={icon} />\n <Card.Title>{Obj.getLabel(data)}</Card.Title>\n {/* TODO(wittjosiah): Reconcile with Card.Menu. */}\n <Card.IconBlock padding>\n <Menu.Trigger asChild>\n <Toolbar.IconButton\n iconOnly\n variant='ghost'\n icon='ph--dots-three-vertical--regular'\n label='Actions'\n />\n </Menu.Trigger>\n <Menu.Content />\n </Card.IconBlock>\n </Card.Toolbar>\n <Card.Content>\n <Item {...itemProps} />\n </Card.Content>\n </Card.Root>\n </Focus.Item>\n </Mosaic.Tile>\n </Menu.Root>\n );\n },\n);\n\nItemTile.displayName = ITEM_TILE_NAME;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport { createContext } from '@radix-ui/react-context';\nimport { Slot } from '@radix-ui/react-slot';\nimport React, { type FC, type PropsWithChildren } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { Toolbar, type ToolbarRootProps, useTranslation } from '@dxos/react-ui';\nimport { Board, type BoardModel, useBoard, useEventHandlerAdapter } from '@dxos/react-ui-mosaic';\nimport { type ProjectionModel } from '@dxos/schema';\nimport { type Pipeline } from '@dxos/types';\nimport { composable, composableProps, slottable } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\n\nimport { PipelineColumn } from './PipelineColumn';\n\ntype ItemProps = {\n item: Obj.Unknown;\n projectionModel?: ProjectionModel;\n};\n\nconst itemNoOp = ({ item }: ItemProps) => <span>{item.id}</span>;\n\n//\n// Root\n//\n\ntype PipelineContextValue = {\n Item: FC<ItemProps>;\n // TODO(wittjosiah): Support adding items.\n // If the created item doesn't match the current query, it will not be visible.\n // TODO(wittjosiah): onAddItem?: (schema: Schema.Schema.AnyNoContext) => void;\n onAddColumn?: () => void;\n};\n\ntype PipelineRootProps = PropsWithChildren<PipelineContextValue>;\n\nconst PIPELINE_ROOT = 'Pipeline.Root';\n\nconst [PipelineRootContext, usePipeline] = createContext<PipelineContextValue>(PIPELINE_ROOT, {\n Item: itemNoOp,\n});\n\nconst PipelineRoot = ({ children, ...contextValue }: PipelineRootProps) => (\n <PipelineRootContext {...contextValue}>{children}</PipelineRootContext>\n);\n\nPipelineRoot.displayName = PIPELINE_ROOT;\n\n//\n// Content\n//\n\nconst PIPELINE_CONTENT_NAME = 'Pipeline.Content';\n\ntype PipelineContentProps = PropsWithChildren<{\n model: BoardModel<Pipeline.Column, Obj.Unknown>;\n}>;\n\nconst PipelineContent = slottable<HTMLDivElement, PipelineContentProps>(\n ({ asChild, model, children, ...props }, forwardedRef) => {\n const Comp = asChild ? Slot : 'div';\n return (\n <Board.Root model={model}>\n <Comp {...composableProps(props)} ref={forwardedRef}>\n {children}\n </Comp>\n </Board.Root>\n );\n },\n);\n\nPipelineContent.displayName = PIPELINE_CONTENT_NAME;\n\n//\n// Columns\n//\n\nconst PIPELINE_COLUMNS_NAME = 'Pipeline.Columns';\n\ntype PipelineColumnsProps = {\n pipeline: Pipeline.Pipeline;\n};\n\nconst PipelineColumns = composable<HTMLDivElement, PipelineColumnsProps>(({ pipeline, ...props }) => {\n const { model } = useBoard(PIPELINE_COLUMNS_NAME);\n const columns = useAtomValue(model.columns);\n const eventHandler = useEventHandlerAdapter<Pipeline.Column, Obj.Unknown>({\n id: pipeline.id,\n // TODO(wittjosiah): Cast because columns array is readonly.\n items: columns as any,\n getId: model.getColumnId,\n get: (data) => data as unknown as Obj.Unknown,\n make: (object) => object as unknown as Pipeline.Column,\n canDrop: ({ source }) => model.isColumn(source.data),\n onChange: (mutate) => Obj.update(pipeline, (pipeline) => mutate(pipeline.columns)),\n });\n\n return <Board.Content {...props} id='pipeline' eventHandler={eventHandler} Tile={PipelineColumn} />;\n});\n\nPipelineColumns.displayName = PIPELINE_COLUMNS_NAME;\n\n//\n// Toolbar\n//\n\nconst PIPELINE_TOOLBAR_NAME = 'Pipeline.Toolbar';\n\nexport const PipelineToolbar = composable<HTMLDivElement, ToolbarRootProps>(({ children, ...props }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n const { onAddColumn } = usePipeline(PIPELINE_TOOLBAR_NAME);\n\n return (\n <Toolbar.Root {...composableProps(props)} ref={forwardedRef}>\n <Toolbar.IconButton icon='ph--plus--regular' iconOnly label={t('add-column.label')} onClick={onAddColumn} />\n </Toolbar.Root>\n );\n});\n\nPipelineToolbar.displayName = PIPELINE_TOOLBAR_NAME;\n\n//\n// Project\n//\n\nexport const PipelineComponent = {\n Root: PipelineRoot,\n Content: PipelineContent,\n Columns: PipelineColumns,\n Toolbar: PipelineToolbar,\n};\n\nexport { usePipeline };\n\nexport type { ItemProps, PipelineContextValue, PipelineRootProps, PipelineContentProps, PipelineColumnsProps };\n"],
5
- "mappings": "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",
6
- "names": ["useComposedRefs", "Function", "Option", "React", "forwardRef", "useMemo", "useRef", "useState", "resolveSchemaWithRegistry", "Annotation", "JsonSchema", "Obj", "Query", "Type", "Filter", "getSpace", "useObject", "Panel", "Toolbar", "useAsyncEffect", "useTranslation", "Card", "Menu", "Board", "Focus", "Mosaic", "ProjectionModel", "createEchoChangeCallback", "meta", "useAtomValue", "createContext", "Slot", "React", "Obj", "Toolbar", "useTranslation", "Board", "useBoard", "useEventHandlerAdapter", "composable", "composableProps", "slottable", "meta", "itemNoOp", "item", "span", "id", "PIPELINE_ROOT", "PipelineRootContext", "usePipeline", "createContext", "Item", "PipelineRoot", "children", "contextValue", "displayName", "PIPELINE_CONTENT_NAME", "PipelineContent", "slottable", "asChild", "model", "props", "forwardedRef", "Comp", "Slot", "Board", "Root", "composableProps", "ref", "PIPELINE_COLUMNS_NAME", "PipelineColumns", "composable", "pipeline", "useBoard", "columns", "useAtomValue", "eventHandler", "useEventHandlerAdapter", "items", "getId", "getColumnId", "get", "data", "make", "object", "canDrop", "source", "isColumn", "onChange", "mutate", "Obj", "update", "Content", "Tile", "PipelineColumn", "PIPELINE_TOOLBAR_NAME", "PipelineToolbar", "t", "useTranslation", "meta", "onAddColumn", "Toolbar", "IconButton", "icon", "iconOnly", "label", "onClick", "PipelineComponent", "Columns", "PIPELINE_COLUMN_NAME", "PipelineColumn", "data", "column", "location", "classNames", "debug", "t", "useTranslation", "meta", "id", "dragHandle", "setDragHandle", "useState", "viewSnapshot", "useObject", "view", "target", "space", "getSpace", "Item", "usePipeline", "schema", "setSchema", "query", "useMemo", "Query", "select", "Filter", "nothing", "fromAst", "JSON", "parse", "stringify", "ast", "useAsyncEffect", "db", "resolveSchemaWithRegistry", "schemaRegistry", "projectionModel", "undefined", "jsonSchema", "Type", "isMutable", "JsonSchema", "toJsonSchema", "change", "createEchoChangeCallback", "ProjectionModel", "baseSchema", "PipelineTile", "forwardRef", "props", "ref", "React", "ItemTile", "itemProps", "item", "Panel", "Root", "asChild", "Board", "Column", "Toolbar", "Header", "label", "name", "dragHandleRef", "Content", "Body", "Tile", "displayName", "ITEM_TILE_NAME", "forwardedRef", "rootRef", "useRef", "composedRef", "useComposedRefs", "icon", "pipe", "Obj", "getSchema", "fromNullable", "flatMap", "Annotation", "IconAnnotation", "get", "map", "getOrElse", "Menu", "Mosaic", "Focus", "Card", "Icon", "Title", "getLabel", "IconBlock", "padding", "Trigger", "IconButton", "iconOnly", "variant"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport React, { forwardRef, useMemo, useRef, useState } from 'react';\n\nimport { resolveSchemaWithRegistry } from '@dxos/app-toolkit/query';\nimport { Filter, Obj, Query, Type } from '@dxos/echo';\nimport { useObject } from '@dxos/react-client/echo';\nimport { Panel, Toolbar, useAsyncEffect, useTranslation } from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui';\nimport { Menu } from '@dxos/react-ui-menu';\nimport { Board, Focus, Mosaic, type MosaicTileProps } from '@dxos/react-ui-mosaic';\nimport { ProjectionModel, createEchoChangeCallback } from '@dxos/schema';\nimport { type Pipeline } from '@dxos/types';\n\nimport { meta } from '#meta';\n\nimport { type ItemProps, usePipeline } from './PipelineComponent';\n\n//\n// PipelineColumn\n//\n\nconst PIPELINE_COLUMN_NAME = 'PipelineColumn';\n\nexport type PipelineColumnProps = Pick<MosaicTileProps<Pipeline.Column>, 'classNames' | 'location' | 'data' | 'debug'>;\n\n// TODO(wittjosiah): Support item DnD reordering (ordering needs to be stored on the view presentation collection).\nexport const PipelineColumn = ({ data: column, location, classNames, debug }: PipelineColumnProps) => {\n const { t } = useTranslation(meta.id);\n const [dragHandle, setDragHandle] = useState<HTMLButtonElement | null>(null);\n // Subscribe to the view target for reactivity.\n const [viewSnapshot] = useObject(column.view);\n const view = column.view.target;\n const db = view && Obj.getDatabase(view);\n const { Item } = usePipeline(PIPELINE_COLUMN_NAME);\n const [type, setType] = useState<Type.AnyEntity>();\n const query = useMemo(() => {\n if (!view) {\n return Query.select(Filter.nothing());\n } else {\n // NOTE: Snapshot is required to prevent signal read in prohibited scope.\n // TODO(wittjosiah): Without stringify, filter.filters remains a proxied array.\n return Query.fromAst(JSON.parse(JSON.stringify(viewSnapshot?.query.ast)));\n }\n }, [JSON.stringify(viewSnapshot?.query.ast)]);\n\n useAsyncEffect(async () => {\n if (!query || !db) {\n return;\n }\n\n const type = await resolveSchemaWithRegistry(db, query.ast);\n setType(() => type);\n }, [db, query]);\n\n const projectionModel = useMemo(() => {\n if (!type || !view) {\n return undefined;\n }\n\n // Use the live jsonSchema reference for reactivity.\n const change = createEchoChangeCallback(view, Type.getDatabase(type) != null ? type : undefined);\n return new ProjectionModel({ view, baseSchema: type.jsonSchema, change });\n }, [type, view]);\n\n const PipelineTile = useMemo(() => {\n return forwardRef<HTMLDivElement, Pick<MosaicTileProps<Obj.Unknown>, 'classNames' | 'location' | 'data' | 'debug'>>(\n (props, ref) => <ItemTile {...props} itemProps={{ item: props.data, projectionModel }} ref={ref} />,\n );\n }, [projectionModel]);\n\n if (!view) {\n return null;\n }\n\n return (\n <Panel.Root asChild>\n <Board.Column.Root\n debug={debug}\n data={column}\n location={location}\n classNames={classNames}\n dragHandle={dragHandle}\n >\n <Panel.Toolbar asChild>\n <Board.Column.Header\n classNames='_opacity-10'\n label={column.name || t('untitled-view.title')}\n dragHandleRef={setDragHandle}\n />\n </Panel.Toolbar>\n <Panel.Content asChild>\n <Board.Column.Body data={column} Tile={PipelineTile} />\n </Panel.Content>\n </Board.Column.Root>\n </Panel.Root>\n );\n};\n\nPipelineColumn.displayName = PIPELINE_COLUMN_NAME;\n\n//\n// ItemTile\n//\n\nconst ITEM_TILE_NAME = 'ItemTile';\n\ntype ItemTileProps = Pick<MosaicTileProps<Obj.Unknown>, 'classNames' | 'location' | 'data' | 'debug'> & {\n itemProps: ItemProps;\n};\n\nconst ItemTile = forwardRef<HTMLDivElement, ItemTileProps>(\n ({ classNames, data, location, debug, itemProps }, forwardedRef) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const composedRef = useComposedRefs<HTMLDivElement>(rootRef, forwardedRef);\n const { Item } = usePipeline(ITEM_TILE_NAME);\n const icon = Obj.getIcon(data)?.icon ?? 'ph--circle-dashed--regular';\n\n return (\n <Menu.Root>\n <Mosaic.Tile asChild id={data.id} data={data} location={location} debug={debug}>\n <Focus.Item asChild>\n <Card.Root classNames={classNames} ref={composedRef}>\n <Card.Header>\n <Card.Icon icon={icon} />\n <Card.Title>{Obj.getLabel(data, { fallback: 'typename' })}</Card.Title>\n {/* TODO(wittjosiah): Reconcile with Card.Menu. */}\n <Card.IconBlock>\n <Menu.Trigger asChild>\n <Toolbar.IconButton\n iconOnly\n variant='ghost'\n icon='ph--dots-three-vertical--regular'\n label='Actions'\n />\n </Menu.Trigger>\n <Menu.Content />\n </Card.IconBlock>\n </Card.Header>\n <Card.Body>\n <Item {...itemProps} />\n </Card.Body>\n </Card.Root>\n </Focus.Item>\n </Mosaic.Tile>\n </Menu.Root>\n );\n },\n);\n\nItemTile.displayName = ITEM_TILE_NAME;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport { createContext } from '@radix-ui/react-context';\nimport { Slot } from '@radix-ui/react-slot';\nimport React, { type FC, type PropsWithChildren } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { Toolbar, type ToolbarRootProps, useTranslation } from '@dxos/react-ui';\nimport { composable, composableProps, slottable } from '@dxos/react-ui';\nimport { Board, type BoardModel, useBoard, useEventHandlerAdapter } from '@dxos/react-ui-mosaic';\nimport { type ProjectionModel } from '@dxos/schema';\nimport { type Pipeline } from '@dxos/types';\n\nimport { meta } from '#meta';\n\nimport { PipelineColumn } from './PipelineColumn';\n\ntype ItemProps = {\n item: Obj.Unknown;\n projectionModel?: ProjectionModel;\n};\n\nconst itemNoOp = ({ item }: ItemProps) => <span>{item.id}</span>;\n\n//\n// Root\n//\n\ntype PipelineContextValue = {\n Item: FC<ItemProps>;\n // TODO(wittjosiah): Support adding items.\n // If the created item doesn't match the current query, it will not be visible.\n // TODO(wittjosiah): onAddItem?: (schema: Schema.Schema.AnyNoContext) => void;\n onAddColumn?: () => void;\n};\n\ntype PipelineRootProps = PropsWithChildren<PipelineContextValue>;\n\nconst PIPELINE_ROOT = 'Pipeline.Root';\n\nconst [PipelineRootContext, usePipeline] = createContext<PipelineContextValue>(PIPELINE_ROOT, {\n Item: itemNoOp,\n});\n\nconst PipelineRoot = ({ children, ...contextValue }: PipelineRootProps) => (\n <PipelineRootContext {...contextValue}>{children}</PipelineRootContext>\n);\n\nPipelineRoot.displayName = PIPELINE_ROOT;\n\n//\n// Content\n//\n\nconst PIPELINE_CONTENT_NAME = 'Pipeline.Content';\n\ntype PipelineContentProps = PropsWithChildren<{\n model: BoardModel<Pipeline.Column, Obj.Unknown>;\n}>;\n\nconst PipelineContent = slottable<HTMLDivElement, PipelineContentProps>(\n ({ asChild, model, children, ...props }, forwardedRef) => {\n const Comp = asChild ? Slot : 'div';\n return (\n <Board.Root model={model}>\n <Comp {...composableProps(props)} ref={forwardedRef}>\n {children}\n </Comp>\n </Board.Root>\n );\n },\n);\n\nPipelineContent.displayName = PIPELINE_CONTENT_NAME;\n\n//\n// Columns\n//\n\nconst PIPELINE_COLUMNS_NAME = 'Pipeline.Columns';\n\ntype PipelineColumnsProps = {\n pipeline: Pipeline.Pipeline;\n};\n\nconst PipelineColumns = composable<HTMLDivElement, PipelineColumnsProps>(({ pipeline, ...props }) => {\n const { model } = useBoard(PIPELINE_COLUMNS_NAME);\n const columns = useAtomValue(model.columns);\n const eventHandler = useEventHandlerAdapter<Pipeline.Column, Obj.Unknown>({\n id: pipeline.id,\n // TODO(wittjosiah): Cast because columns array is readonly.\n items: columns as any,\n getId: model.getColumnId,\n get: (data) => data as unknown as Obj.Unknown,\n make: (object) => object as unknown as Pipeline.Column,\n canDrop: ({ source }) => model.isColumn(source.data),\n onChange: (mutate) => Obj.update(pipeline, (pipeline) => mutate(pipeline.columns)),\n });\n\n return <Board.Content {...props} id='pipeline' eventHandler={eventHandler} Tile={PipelineColumn} />;\n});\n\nPipelineColumns.displayName = PIPELINE_COLUMNS_NAME;\n\n//\n// Toolbar\n//\n\nconst PIPELINE_TOOLBAR_NAME = 'Pipeline.Toolbar';\n\nexport const PipelineToolbar = composable<HTMLDivElement, ToolbarRootProps>(({ children, ...props }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n const { onAddColumn } = usePipeline(PIPELINE_TOOLBAR_NAME);\n\n return (\n <Toolbar.Root {...composableProps(props)} ref={forwardedRef}>\n <Toolbar.IconButton icon='ph--plus--regular' iconOnly label={t('add-column.label')} onClick={onAddColumn} />\n </Toolbar.Root>\n );\n});\n\nPipelineToolbar.displayName = PIPELINE_TOOLBAR_NAME;\n\n//\n// Project\n//\n\nexport const PipelineComponent = {\n Root: PipelineRoot,\n Content: PipelineContent,\n Columns: PipelineColumns,\n Toolbar: PipelineToolbar,\n};\n\nexport { usePipeline };\n\nexport type { ItemProps, PipelineContextValue, PipelineRootProps, PipelineContentProps, PipelineColumnsProps };\n"],
5
+ "mappings": "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",
6
+ "names": ["useComposedRefs", "React", "forwardRef", "useMemo", "useRef", "useState", "resolveSchemaWithRegistry", "Filter", "Obj", "Query", "Type", "useObject", "Panel", "Toolbar", "useAsyncEffect", "useTranslation", "Card", "Menu", "Board", "Focus", "Mosaic", "ProjectionModel", "createEchoChangeCallback", "meta", "useAtomValue", "createContext", "Slot", "React", "Obj", "Toolbar", "useTranslation", "composable", "composableProps", "slottable", "Board", "useBoard", "useEventHandlerAdapter", "meta", "itemNoOp", "item", "span", "id", "PIPELINE_ROOT", "PipelineRootContext", "usePipeline", "createContext", "Item", "PipelineRoot", "children", "contextValue", "displayName", "PIPELINE_CONTENT_NAME", "PipelineContent", "slottable", "asChild", "model", "props", "forwardedRef", "Comp", "Slot", "Board", "Root", "composableProps", "ref", "PIPELINE_COLUMNS_NAME", "PipelineColumns", "composable", "pipeline", "useBoard", "columns", "useAtomValue", "eventHandler", "useEventHandlerAdapter", "items", "getId", "getColumnId", "get", "data", "make", "object", "canDrop", "source", "isColumn", "onChange", "mutate", "Obj", "update", "Content", "Tile", "PipelineColumn", "PIPELINE_TOOLBAR_NAME", "PipelineToolbar", "t", "useTranslation", "meta", "onAddColumn", "Toolbar", "IconButton", "icon", "iconOnly", "label", "onClick", "PipelineComponent", "Columns", "PIPELINE_COLUMN_NAME", "PipelineColumn", "data", "column", "location", "classNames", "debug", "t", "useTranslation", "meta", "id", "dragHandle", "setDragHandle", "useState", "viewSnapshot", "useObject", "view", "target", "db", "Obj", "getDatabase", "Item", "usePipeline", "type", "setType", "query", "useMemo", "Query", "select", "Filter", "nothing", "fromAst", "JSON", "parse", "stringify", "ast", "useAsyncEffect", "resolveSchemaWithRegistry", "projectionModel", "undefined", "change", "createEchoChangeCallback", "Type", "ProjectionModel", "baseSchema", "jsonSchema", "PipelineTile", "forwardRef", "props", "ref", "React", "ItemTile", "itemProps", "item", "Panel", "Root", "asChild", "Board", "Column", "Toolbar", "Header", "label", "name", "dragHandleRef", "Content", "Body", "Tile", "displayName", "ITEM_TILE_NAME", "forwardedRef", "rootRef", "useRef", "composedRef", "useComposedRefs", "icon", "getIcon", "Menu", "Mosaic", "Focus", "Card", "Icon", "Title", "getLabel", "fallback", "IconBlock", "Trigger", "IconButton", "iconOnly", "variant"]
7
7
  }
@@ -1,9 +1,9 @@
1
1
  // src/containers/index.ts
2
2
  import { lazy } from "react";
3
- var PipelineContainer = lazy(() => import("../PipelineContainer-7MK2SS76.mjs"));
4
- var PipelineProperties = lazy(() => import("../PipelineProperties-RRPQ3V6I.mjs"));
3
+ var PipelineArticle = lazy(() => import("../PipelineArticle-6JIVXMYF.mjs"));
4
+ var PipelineProperties = lazy(() => import("../PipelineProperties-JXY3AVOY.mjs"));
5
5
  export {
6
- PipelineContainer,
6
+ PipelineArticle,
7
7
  PipelineProperties
8
8
  };
9
9
  //# sourceMappingURL=index.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/containers/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport const PipelineContainer: ComponentType<any> = lazy(() => import('./PipelineContainer'));\nexport const PipelineProperties: ComponentType<any> = lazy(() => import('./PipelineProperties'));\n"],
5
- "mappings": ";AAIA,SAA6BA,YAAY;AAElC,IAAMC,oBAAwCD,KAAK,MAAM,OAAO,mCAAA,CAAA;AAChE,IAAME,qBAAyCF,KAAK,MAAM,OAAO,oCAAA,CAAA;",
6
- "names": ["lazy", "PipelineContainer", "PipelineProperties"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport const PipelineArticle: ComponentType<any> = lazy(() => import('./PipelineArticle'));\nexport const PipelineProperties: ComponentType<any> = lazy(() => import('./PipelineProperties'));\n"],
5
+ "mappings": ";AAIA,SAA6BA,YAAY;AAElC,IAAMC,kBAAsCD,KAAK,MAAM,OAAO,iCAAA,CAAA;AAC9D,IAAME,qBAAyCF,KAAK,MAAM,OAAO,oCAAA,CAAA;",
6
+ "names": ["lazy", "PipelineArticle", "PipelineProperties"]
7
7
  }
@@ -2,12 +2,13 @@
2
2
  import * as Effect from "effect/Effect";
3
3
  import { Capability } from "@dxos/app-framework";
4
4
  import { Operation } from "@dxos/compute";
5
+ import { Type } from "@dxos/echo";
5
6
  import { SpaceOperation } from "@dxos/plugin-space";
6
7
  import { SpaceCapabilities } from "@dxos/plugin-space";
7
8
  import { Pipeline } from "@dxos/types";
8
9
  var create_object_default = Capability.makeModule(Effect.fnUntraced(function* () {
9
10
  return Capability.contributes(SpaceCapabilities.CreateObjectEntry, {
10
- id: Pipeline.Pipeline.typename,
11
+ id: Type.getTypename(Pipeline.Pipeline),
11
12
  createObject: (props, options) => Effect.gen(function* () {
12
13
  const object = Pipeline.make(props);
13
14
  return yield* Operation.invoke(SpaceOperation.AddObject, {
@@ -22,4 +23,4 @@ var create_object_default = Capability.makeModule(Effect.fnUntraced(function* ()
22
23
  export {
23
24
  create_object_default as default
24
25
  };
25
- //# sourceMappingURL=create-object-ZJYFACOI.mjs.map
26
+ //# sourceMappingURL=create-object-6Z4MMGX4.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/create-object.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\nimport { Type } from '@dxos/echo';\nimport { SpaceOperation } from '@dxos/plugin-space';\nimport { SpaceCapabilities } from '@dxos/plugin-space';\nimport { Pipeline } from '@dxos/types';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n return Capability.contributes(SpaceCapabilities.CreateObjectEntry, {\n id: Type.getTypename(Pipeline.Pipeline),\n createObject: (props, options) =>\n Effect.gen(function* () {\n const object = Pipeline.make(props);\n return yield* Operation.invoke(SpaceOperation.AddObject, {\n object,\n target: options.target,\n hidden: true,\n targetNodeId: options.targetNodeId,\n });\n }),\n });\n }),\n);\n"],
5
+ "mappings": ";AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,iBAAiB;AAC1B,SAASC,YAAY;AACrB,SAASC,sBAAsB;AAC/B,SAASC,yBAAyB;AAClC,SAASC,gBAAgB;AAEzB,IAAA,wBAAeL,WAAWM,WACjBC,kBAAW,aAAA;AAChB,SAAOP,WAAWQ,YAAYJ,kBAAkBK,mBAAmB;IACjEC,IAAIR,KAAKS,YAAYN,SAASA,QAAQ;IACtCO,cAAc,CAACC,OAAOC,YACbC,WAAI,aAAA;AACT,YAAMC,SAASX,SAASY,KAAKJ,KAAAA;AAC7B,aAAO,OAAOZ,UAAUiB,OAAOf,eAAegB,WAAW;QACvDH;QACAI,QAAQN,QAAQM;QAChBC,QAAQ;QACRC,cAAcR,QAAQQ;MACxB,CAAA;IACF,CAAA;EACJ,CAAA;AACF,CAAA,CAAA;",
6
+ "names": ["Effect", "Capability", "Operation", "Type", "SpaceOperation", "SpaceCapabilities", "Pipeline", "makeModule", "fnUntraced", "contributes", "CreateObjectEntry", "id", "getTypename", "createObject", "props", "options", "gen", "object", "make", "invoke", "AddObject", "target", "hidden", "targetNodeId"]
7
+ }