@dxos/plugin-pipeline 0.8.4-main.dfabb4ec29 → 0.8.4-main.effb148878

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 (72) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/{PipelineContainer-7MK2SS76.mjs → PipelineArticle-6JIVXMYF.mjs} +4 -4
  4. package/dist/lib/neutral/PipelineArticle-6JIVXMYF.mjs.map +7 -0
  5. package/dist/lib/neutral/PipelinePlugin.workerd.mjs +16 -0
  6. package/dist/lib/neutral/PipelinePlugin.workerd.mjs.map +7 -0
  7. package/dist/lib/neutral/{PipelineProperties-RRPQ3V6I.mjs → PipelineProperties-NFNEU3NR.mjs} +41 -40
  8. package/dist/lib/neutral/PipelineProperties-NFNEU3NR.mjs.map +7 -0
  9. package/dist/lib/neutral/capabilities/index.mjs +2 -2
  10. package/dist/lib/neutral/chunk-OVZ2ASS7.mjs +33 -0
  11. package/dist/lib/neutral/chunk-OVZ2ASS7.mjs.map +7 -0
  12. package/dist/lib/neutral/components/index.mjs +19 -18
  13. package/dist/lib/neutral/components/index.mjs.map +3 -3
  14. package/dist/lib/neutral/containers/index.mjs +3 -3
  15. package/dist/lib/neutral/containers/index.mjs.map +3 -3
  16. package/dist/lib/neutral/{create-object-ZJYFACOI.mjs → create-object-6Z4MMGX4.mjs} +3 -2
  17. package/dist/lib/neutral/create-object-6Z4MMGX4.mjs.map +7 -0
  18. package/dist/lib/neutral/hooks/index.mjs +5 -5
  19. package/dist/lib/neutral/hooks/index.mjs.map +3 -3
  20. package/dist/lib/neutral/index.mjs +1 -1
  21. package/dist/lib/neutral/meta.json +1 -1
  22. package/dist/lib/neutral/meta.mjs +1 -1
  23. package/dist/lib/neutral/plugin.mjs +1 -1
  24. package/dist/lib/neutral/{react-surface-TW6TRMO6.mjs → react-surface-4W5YLCHT.mjs} +3 -3
  25. package/dist/lib/neutral/react-surface-4W5YLCHT.mjs.map +7 -0
  26. package/dist/lib/neutral/translations.mjs +2 -1
  27. package/dist/lib/neutral/translations.mjs.map +3 -3
  28. package/dist/types/src/PipelinePlugin.workerd.d.ts +4 -0
  29. package/dist/types/src/PipelinePlugin.workerd.d.ts.map +1 -0
  30. package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
  31. package/dist/types/src/components/PipelineComponent/PipelineColumn.d.ts.map +1 -1
  32. package/dist/types/src/components/PipelineComponent/PipelineComponent.d.ts.map +1 -1
  33. package/dist/types/src/components/PipelineComponent/PipelineComponent.stories.d.ts.map +1 -1
  34. package/dist/types/src/containers/PipelineArticle/PipelineArticle.d.ts +6 -0
  35. package/dist/types/src/containers/PipelineArticle/PipelineArticle.d.ts.map +1 -0
  36. package/dist/types/src/containers/{PipelineContainer/PipelineContainer.stories.d.ts → PipelineArticle/PipelineArticle.stories.d.ts} +1 -1
  37. package/dist/types/src/containers/PipelineArticle/PipelineArticle.stories.d.ts.map +1 -0
  38. package/dist/types/src/containers/PipelineArticle/index.d.ts +2 -0
  39. package/dist/types/src/containers/PipelineArticle/index.d.ts.map +1 -0
  40. package/dist/types/src/containers/PipelineProperties/PipelineProperties.d.ts.map +1 -1
  41. package/dist/types/src/containers/index.d.ts +1 -1
  42. package/dist/types/src/containers/index.d.ts.map +1 -1
  43. package/dist/types/src/meta.d.ts.map +1 -1
  44. package/dist/types/src/translations.d.ts.map +1 -1
  45. package/dist/types/tsconfig.tsbuildinfo +1 -1
  46. package/package.json +44 -42
  47. package/src/PipelinePlugin.workerd.ts +16 -0
  48. package/src/capabilities/create-object.ts +2 -1
  49. package/src/capabilities/react-surface.tsx +2 -2
  50. package/src/components/PipelineComponent/PipelineColumn.tsx +21 -22
  51. package/src/components/PipelineComponent/PipelineComponent.stories.tsx +2 -4
  52. package/src/components/PipelineComponent/PipelineComponent.tsx +1 -1
  53. package/src/containers/{PipelineContainer/PipelineContainer.stories.tsx → PipelineArticle/PipelineArticle.stories.tsx} +12 -14
  54. package/src/containers/{PipelineContainer/PipelineContainer.tsx → PipelineArticle/PipelineArticle.tsx} +2 -2
  55. package/src/containers/PipelineArticle/index.ts +5 -0
  56. package/src/containers/PipelineProperties/PipelineProperties.tsx +49 -56
  57. package/src/containers/index.ts +1 -1
  58. package/src/hooks/usePipelineBoardModel.ts +5 -5
  59. package/src/meta.ts +14 -2
  60. package/src/translations.ts +2 -1
  61. package/dist/lib/neutral/PipelineContainer-7MK2SS76.mjs.map +0 -7
  62. package/dist/lib/neutral/PipelineProperties-RRPQ3V6I.mjs.map +0 -7
  63. package/dist/lib/neutral/chunk-ULB5DKWO.mjs +0 -21
  64. package/dist/lib/neutral/chunk-ULB5DKWO.mjs.map +0 -7
  65. package/dist/lib/neutral/create-object-ZJYFACOI.mjs.map +0 -7
  66. package/dist/lib/neutral/react-surface-TW6TRMO6.mjs.map +0 -7
  67. package/dist/types/src/containers/PipelineContainer/PipelineContainer.d.ts +0 -6
  68. package/dist/types/src/containers/PipelineContainer/PipelineContainer.d.ts.map +0 -1
  69. package/dist/types/src/containers/PipelineContainer/PipelineContainer.stories.d.ts.map +0 -1
  70. package/dist/types/src/containers/PipelineContainer/index.d.ts +0 -2
  71. package/dist/types/src/containers/PipelineContainer/index.d.ts.map +0 -1
  72. package/src/containers/PipelineContainer/index.ts +0 -5
@@ -7,15 +7,15 @@ import React, { useCallback, useMemo, useRef, useState } from 'react';
7
7
 
8
8
  import { resolveSchemaWithRegistry } from '@dxos/app-toolkit/query';
9
9
  import { useTypeOptions } from '@dxos/app-toolkit/ui';
10
- import { DXN, Filter, JsonSchema, Obj, Query, type QueryAST, Ref, Tag } from '@dxos/echo';
10
+ import { EchoURI, Filter, JsonSchema, Obj, Query, type QueryAST, Ref, Tag, type Type } from '@dxos/echo';
11
11
  import { type JsonPath, type Mutable } from '@dxos/echo/internal';
12
- import { getSpace, useObject, useQuery } from '@dxos/react-client/echo';
12
+ import { useObject, useQuery } from '@dxos/react-client/echo';
13
13
  import { IconButton, type ThemedClassName, useAsyncEffect, useTranslation } from '@dxos/react-ui';
14
14
  import { Form, ViewEditor } from '@dxos/react-ui-form';
15
15
  import { List } from '@dxos/react-ui-list';
16
16
  import { type ProjectionModel, ViewModel } from '@dxos/schema';
17
17
  import { Pipeline } from '@dxos/types';
18
- import { mx, osTranslations, subtleHover } from '@dxos/ui-theme';
18
+ import { mx, osTranslations } from '@dxos/ui-theme';
19
19
  import { arrayMove } from '@dxos/util';
20
20
 
21
21
  import { meta } from '#meta';
@@ -34,19 +34,16 @@ export type PipelinePropertiesProps = ThemedClassName<{
34
34
  */
35
35
  export const PipelineProperties = ({ classNames, pipeline }: PipelinePropertiesProps) => {
36
36
  const { t } = useTranslation(meta.id);
37
- const space = getSpace(pipeline);
37
+ const db = Obj.getDatabase(pipeline);
38
38
  const [expandedId, setExpandedId] = useState<string>();
39
39
  const [columns, updateColumns] = useObject(pipeline, 'columns');
40
- const column = useMemo(
41
- () => columns.find((column) => column.view.dxn.toString() === expandedId),
42
- [columns, expandedId],
43
- );
40
+ const column = useMemo(() => columns.find((column) => column.view.uri === expandedId), [columns, expandedId]);
44
41
  const [view, updateView] = useObject(column?.view);
45
- const [schema, setSchema] = useState<Schema.Schema.AnyNoContext>(() => Schema.Struct({}));
42
+ const [type, setType] = useState<Type.AnyEntity>();
46
43
  const projectionRef = useRef<ProjectionModel>(null);
47
- const tags = useQuery(space?.db, Filter.type(Tag.Tag));
44
+ const tags = useQuery(db, Filter.type(Tag.Tag));
48
45
  const types = useTypeOptions({
49
- space,
46
+ db,
50
47
  annotation: {
51
48
  location: ['database', 'runtime'],
52
49
  kind: ['user'],
@@ -54,15 +51,15 @@ export const PipelineProperties = ({ classNames, pipeline }: PipelinePropertiesP
54
51
  });
55
52
 
56
53
  useAsyncEffect(async () => {
57
- if (!view?.query || !space) {
54
+ if (!view?.query || !db) {
58
55
  return;
59
56
  }
60
57
 
61
- const foundSchema = await resolveSchemaWithRegistry(space.db.schemaRegistry, view.query.ast);
62
- if (foundSchema && foundSchema !== schema) {
63
- setSchema(() => foundSchema);
58
+ const foundType = await resolveSchemaWithRegistry(db.schemaRegistry, view.query.ast);
59
+ if (foundType && foundType !== type) {
60
+ setType(() => foundType);
64
61
  }
65
- }, [space, view, schema]);
62
+ }, [db, view, type]);
66
63
 
67
64
  const handleMove = useCallback(
68
65
  (fromIndex: number, toIndex: number) =>
@@ -73,32 +70,32 @@ export const PipelineProperties = ({ classNames, pipeline }: PipelinePropertiesP
73
70
  );
74
71
 
75
72
  const handleQueryChanged = useCallback(
76
- async (newQuery: QueryAST.Query, target?: string) => {
77
- if (!view || !space) {
73
+ async (newQuery: QueryAST.Query, target?: EchoURI.EchoURI) => {
74
+ if (!view || !db) {
78
75
  return;
79
76
  }
80
77
 
81
- const queue = target && DXN.tryParse(target) ? target : undefined;
82
- const query = queue ? Query.fromAst(newQuery).from({ queues: [queue] }) : Query.fromAst(newQuery);
78
+ const queue = target;
79
+ const query = queue ? Query.fromAst(newQuery).from({ feeds: [queue] }) : Query.fromAst(newQuery);
83
80
  updateView((view) => {
84
81
  view.query.ast = query.ast as Mutable<typeof query.ast>;
85
82
  });
86
- const newSchema = await resolveSchemaWithRegistry(space.db.schemaRegistry, query.ast);
87
- if (!newSchema) {
83
+ const newType = await resolveSchemaWithRegistry(db.schemaRegistry, query.ast);
84
+ if (!newType) {
88
85
  return;
89
86
  }
90
87
 
91
88
  const newView = ViewModel.make({
92
89
  query,
93
- jsonSchema: JsonSchema.toJsonSchema(newSchema),
90
+ jsonSchema: newType.jsonSchema,
94
91
  });
95
92
  updateView((view) => {
96
93
  view.projection = Obj.getSnapshot(newView).projection as Mutable<typeof view.projection>;
97
94
  });
98
95
 
99
- setSchema(() => newSchema);
96
+ setType(() => newType);
100
97
  },
101
- [view, updateView, schema],
98
+ [db, view, updateView, type],
102
99
  );
103
100
 
104
101
  const handleColumnValuesChanged = useCallback(
@@ -118,14 +115,12 @@ export const PipelineProperties = ({ classNames, pipeline }: PipelinePropertiesP
118
115
  );
119
116
 
120
117
  const handleToggleField = useCallback((column: Pipeline.Column) => {
121
- setExpandedId((prevExpandedId) =>
122
- prevExpandedId === column.view.dxn.toString() ? undefined : column.view.dxn.toString(),
123
- );
118
+ setExpandedId((prevExpandedId) => (prevExpandedId === column.view.uri ? undefined : column.view.uri));
124
119
  }, []);
125
120
 
126
121
  const handleDelete = useCallback(
127
122
  async (column: Pipeline.Column) => {
128
- if (column.view.dxn.toString() === expandedId) {
123
+ if (column.view.uri === expandedId) {
129
124
  setExpandedId(undefined);
130
125
  }
131
126
 
@@ -134,20 +129,20 @@ export const PipelineProperties = ({ classNames, pipeline }: PipelinePropertiesP
134
129
  updateColumns((columns) => {
135
130
  columns.splice(index, 1);
136
131
  });
137
- space?.db.remove(viewToRemove);
132
+ db?.remove(viewToRemove);
138
133
  },
139
- [expandedId, columns, updateColumns, space],
134
+ [expandedId, columns, updateColumns, db],
140
135
  );
141
136
 
142
137
  const handleAdd = useCallback(() => {
143
- if (!space) {
138
+ if (!db) {
144
139
  return;
145
140
  }
146
141
  const newView = ViewModel.make({
147
142
  query: Query.select(Filter.nothing()),
148
143
  jsonSchema: JsonSchema.toJsonSchema(Schema.Struct({})),
149
144
  });
150
- space.db.add(newView);
145
+ db.add(newView);
151
146
  updateColumns((columns) => {
152
147
  columns.push({
153
148
  name: '',
@@ -157,7 +152,7 @@ export const PipelineProperties = ({ classNames, pipeline }: PipelinePropertiesP
157
152
  });
158
153
  });
159
154
  setExpandedId(newView.id);
160
- }, [space, updateColumns]);
155
+ }, [db, updateColumns]);
161
156
 
162
157
  return (
163
158
  <div className={mx('py-form-padding overflow-y-auto', classNames)}>
@@ -166,7 +161,7 @@ export const PipelineProperties = ({ classNames, pipeline }: PipelinePropertiesP
166
161
  <List.Root<Pipeline.Column>
167
162
  items={columns}
168
163
  isItem={Schema.is(Pipeline.Column)}
169
- getId={(column) => column.view.dxn.toString()}
164
+ getId={(column) => column.view.uri}
170
165
  onMove={handleMove}
171
166
  >
172
167
  {({ items: columns }) => (
@@ -174,12 +169,12 @@ export const PipelineProperties = ({ classNames, pipeline }: PipelinePropertiesP
174
169
  <div role='list' className={mx(listGrid)}>
175
170
  {columns.map((column) => (
176
171
  <List.Item<Pipeline.Column>
177
- key={column.view.dxn.toString()}
172
+ key={column.view.uri}
178
173
  item={column}
179
174
  classNames={listItemGrid}
180
- aria-expanded={expandedId === column.view.dxn.toString()}
175
+ aria-expanded={expandedId === column.view.uri}
181
176
  >
182
- <div className={mx(subtleHover, listItemGrid, 'rounded-xs cursor-pointer min-h-10')}>
177
+ <div className={mx(listItemGrid, 'dx-hover rounded-xs cursor-pointer min-h-10')}>
183
178
  <List.ItemDragHandle />
184
179
  <List.ItemTitle onClick={() => handleToggleField(column)}>
185
180
  {column.name || t('untitled-view.title')}
@@ -194,15 +189,11 @@ export const PipelineProperties = ({ classNames, pipeline }: PipelinePropertiesP
194
189
  iconOnly
195
190
  variant='ghost'
196
191
  label={t('toggle-expand.label', { ns: osTranslations })}
197
- icon={
198
- expandedId === column.view.dxn.toString()
199
- ? 'ph--caret-down--regular'
200
- : 'ph--caret-right--regular'
201
- }
192
+ icon={expandedId === column.view.uri ? 'ph--caret-down--regular' : 'ph--caret-right--regular'}
202
193
  onClick={() => handleToggleField(column)}
203
194
  />
204
195
  </div>
205
- {expandedId === column.view.dxn.toString() && column?.view.target && (
196
+ {expandedId === column.view.uri && column?.view.target && (
206
197
  <div className='col-span-5 my-2 border border-separator rounded-md'>
207
198
  <Form.Root
208
199
  schema={ColumnFormSchema}
@@ -213,18 +204,20 @@ export const PipelineProperties = ({ classNames, pipeline }: PipelinePropertiesP
213
204
  <Form.FieldSet />
214
205
  </Form.Content>
215
206
  </Form.Root>
216
- <ViewEditor
217
- ref={projectionRef}
218
- mode='tag'
219
- readonly
220
- schema={schema}
221
- view={column.view.target}
222
- registry={space?.db.schemaRegistry}
223
- db={space?.db}
224
- tags={tags}
225
- types={types}
226
- onQueryChanged={handleQueryChanged}
227
- />
207
+ {type && (
208
+ <ViewEditor
209
+ ref={projectionRef}
210
+ mode='tag'
211
+ readonly
212
+ type={type}
213
+ view={column.view.target}
214
+ registry={db?.schemaRegistry}
215
+ db={db}
216
+ tags={tags}
217
+ types={types}
218
+ onQueryChanged={handleQueryChanged}
219
+ />
220
+ )}
228
221
  </div>
229
222
  )}
230
223
  </List.Item>
@@ -4,5 +4,5 @@
4
4
 
5
5
  import { type ComponentType, lazy } from 'react';
6
6
 
7
- export const PipelineContainer: ComponentType<any> = lazy(() => import('./PipelineContainer'));
7
+ export const PipelineArticle: ComponentType<any> = lazy(() => import('./PipelineArticle'));
8
8
  export const PipelineProperties: ComponentType<any> = lazy(() => import('./PipelineProperties'));
@@ -27,7 +27,7 @@ export const usePipelineBoardModel = (
27
27
  const columnAtomFamily = Atom.family<string, Atom.Atom<Pipeline.Column | undefined>>((viewKey: string) =>
28
28
  Atom.make((get) => {
29
29
  const columns = get(columnsAtom);
30
- return columns.find((c) => c.view.dxn.toString() === viewKey);
30
+ return columns.find((c) => c.view.uri === viewKey);
31
31
  }),
32
32
  );
33
33
 
@@ -52,14 +52,14 @@ export const usePipelineBoardModel = (
52
52
  );
53
53
 
54
54
  return {
55
- getColumnId: (data) => (data as Pipeline.Column).view.dxn.toString(),
55
+ getColumnId: (data) => (data as Pipeline.Column).view.uri,
56
56
  getItemId: (data) => (data as Obj.Unknown).id,
57
57
  isColumn: (obj: unknown): obj is Pipeline.Column => Schema.is(Pipeline.Column)(obj),
58
58
  isItem: (obj: unknown): obj is Obj.Unknown => Obj.isObject(obj),
59
59
  columns: columnsAtom,
60
- items: (column) => itemsAtomFamily(column.view.dxn.toString()),
60
+ items: (column) => itemsAtomFamily(column.view.uri),
61
61
  getColumns: () => [...registry.get(columnsAtom)],
62
- getItems: (column) => registry.get(itemsAtomFamily(column.view.dxn.toString())) ?? [],
62
+ getItems: (column) => registry.get(itemsAtomFamily(column.view.uri)) ?? [],
63
63
  };
64
64
  }, [pipeline, registry]);
65
65
 
@@ -68,7 +68,7 @@ const emptyColumnsAtom = Atom.make(() => [] as Pipeline.Column[]);
68
68
  const emptyItemsAtom = Atom.make(() => [] as Obj.Unknown[]);
69
69
 
70
70
  const emptyPipelineModel: BoardModel<Pipeline.Column, Obj.Unknown> = {
71
- getColumnId: (data) => (data as Pipeline.Column).view.dxn.toString(),
71
+ getColumnId: (data) => (data as Pipeline.Column).view.uri,
72
72
  getItemId: (data) => (data as Obj.Unknown).id,
73
73
  isColumn: (obj: unknown): obj is Pipeline.Column => Schema.is(Pipeline.Column)(obj),
74
74
  isItem: (obj): obj is Obj.Unknown => Obj.isObject(obj),
package/src/meta.ts CHANGED
@@ -8,12 +8,24 @@ import { trim } from '@dxos/util';
8
8
  export const meta: Plugin.Meta = {
9
9
  id: 'org.dxos.plugin.pipeline',
10
10
  name: 'Pipelines',
11
+ author: 'DXOS',
11
12
  description: trim`
12
- Pipelines for organizing tasks, milestones, and deliverables.
13
- Track progress across multiple pipelines and coordinate team activities in a structured environment.
13
+ A multi-column Kanban-style pipeline plugin for DXOS Composer.
14
+ Each Pipeline holds an ordered set of Columns; each Column is backed by a ViewModel whose query
15
+ can select any ECHO object type — messages, contacts, documents, or custom types — from the active space.
16
+
17
+ Columns are fully configurable through the Settings companion panel, where users can add, rename,
18
+ reorder, and delete columns and edit the underlying query and projection for each column.
19
+ Objects can be dragged between columns and the full pipeline state, including column order and
20
+ per-column item order, persists collaboratively via ECHO.
21
+
22
+ A built-in Research template scaffolds a four-column pipeline wired to the Mailbox, Contacts,
23
+ Organizations, and Notes objects in the space, providing an out-of-the-box CRM-style workflow.
24
+ Pipeline articles also expose Invocations and Automation companion tabs for AI-driven automation.
14
25
  `,
15
26
  icon: 'ph--path--regular',
16
27
  iconHue: 'purple',
17
28
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-pipeline',
29
+ spec: 'PLUGIN.mdl',
18
30
  tags: ['labs'],
19
31
  };
@@ -1,3 +1,4 @@
1
+ import { Type } from '@dxos/echo';
1
2
  import { type Resource } from '@dxos/react-ui';
2
3
  import { Pipeline } from '@dxos/types';
3
4
  //
@@ -9,7 +10,7 @@ import { meta } from '#meta';
9
10
  export const translations = [
10
11
  {
11
12
  'en-US': {
12
- [Pipeline.Pipeline.typename]: {
13
+ [Type.getTypename(Pipeline.Pipeline)]: {
13
14
  'typename.label': 'Pipeline',
14
15
  'typename.label_zero': 'Pipelines',
15
16
  'typename.label_one': 'Pipeline',
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/PipelineContainer/PipelineContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect } from 'react';\n\nimport { Capabilities } from '@dxos/app-framework';\nimport { Surface, useCapability, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport {\n AppSurface,\n OBJECT_ACTIONS_CONTRIBUTION_ID,\n OBJECT_ACTIONS_CONTRIBUTION_PRIORITY,\n useObjectMenuItems,\n} from '@dxos/app-toolkit/ui';\nimport { Panel } from '@dxos/react-ui';\nimport { linkedSegment } from '@dxos/react-ui-attention';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { useMenu } from '@dxos/react-ui-menu';\nimport { type Pipeline } from '@dxos/types';\n\nimport { type ItemProps, PipelineComponent } from '#components';\nimport { usePipelineBoardModel } from '#hooks';\n\nconst PIPELINE_ITEM = 'PipelineItem';\n\nexport type PipelineContainerProps = AppSurface.ObjectArticleProps<Pipeline.Pipeline>;\n\nexport const PipelineContainer = ({ role, subject: pipeline, attendableId }: PipelineContainerProps) => {\n const registry = useCapability(Capabilities.AtomRegistry);\n const model = usePipelineBoardModel(pipeline, registry);\n const { invokePromise } = useOperationInvoker();\n const { hasAttention } = useAttention(attendableId);\n\n const handleColumnAdd = useCallback(\n () =>\n invokePromise(LayoutOperation.UpdateCompanion, {\n subject: linkedSegment('settings'),\n }),\n [invokePromise],\n );\n\n return (\n <PipelineComponent.Root Item={PipelineItem} onAddColumn={handleColumnAdd}>\n <Panel.Root role={role}>\n <Panel.Toolbar asChild>\n <PipelineComponent.Toolbar disabled={!hasAttention} />\n </Panel.Toolbar>\n <Panel.Content asChild>\n <PipelineComponent.Content asChild model={model}>\n <PipelineComponent.Columns pipeline={pipeline} />\n </PipelineComponent.Content>\n </Panel.Content>\n </Panel.Root>\n </PipelineComponent.Root>\n );\n};\n\nconst PipelineItem = ({ item, projectionModel }: ItemProps) => {\n const menu = useMenu(PIPELINE_ITEM);\n const items = useObjectMenuItems(item);\n\n useEffect(() => {\n menu.addMenuItems({\n id: OBJECT_ACTIONS_CONTRIBUTION_ID,\n mode: 'additive',\n priority: OBJECT_ACTIONS_CONTRIBUTION_PRIORITY,\n items,\n });\n\n return () => menu.removeMenuItems(OBJECT_ACTIONS_CONTRIBUTION_ID);\n }, [menu, items]);\n\n return (\n <Surface.Surface\n type={AppSurface.Card}\n data={{\n subject: item,\n projection: projectionModel,\n }}\n limit={1}\n />\n );\n};\n"],
5
- "mappings": ";AAIA,OAAOA,SAASC,aAAaC,iBAAiB;AAE9C,SAASC,oBAAoB;AAC7B,SAASC,SAASC,eAAeC,2BAA2B;AAC5D,SAASC,uBAAuB;AAChC,SACEC,YACAC,gCACAC,sCACAC,0BACK;AACP,SAASC,aAAa;AACtB,SAASC,qBAAqB;AAC9B,SAASC,oBAAoB;AAC7B,SAASC,eAAe;AAGxB,SAAyBC,yBAAyB;AAClD,SAASC,6BAA6B;AAEtC,IAAMC,gBAAgB;AAIf,IAAMC,oBAAoB,CAAC,EAAEC,MAAMC,SAASC,UAAUC,aAAY,MAA0B;AACjG,QAAMC,WAAWnB,cAAcF,aAAasB,YAAY;AACxD,QAAMC,QAAQT,sBAAsBK,UAAUE,QAAAA;AAC9C,QAAM,EAAEG,cAAa,IAAKrB,oBAAAA;AAC1B,QAAM,EAAEsB,aAAY,IAAKd,aAAaS,YAAAA;AAEtC,QAAMM,kBAAkB5B,YACtB,MACE0B,cAAcpB,gBAAgBuB,iBAAiB;IAC7CT,SAASR,cAAc,UAAA;EACzB,CAAA,GACF;IAACc;GAAc;AAGjB,SACE,sBAAA,cAACX,kBAAkBe,MAAI;IAACC,MAAMC;IAAcC,aAAaL;KACvD,sBAAA,cAACjB,MAAMmB,MAAI;IAACX;KACV,sBAAA,cAACR,MAAMuB,SAAO;IAACC,SAAAA;KACb,sBAAA,cAACpB,kBAAkBmB,SAAO;IAACE,UAAU,CAACT;OAExC,sBAAA,cAAChB,MAAM0B,SAAO;IAACF,SAAAA;KACb,sBAAA,cAACpB,kBAAkBsB,SAAO;IAACF,SAAAA;IAAQV;KACjC,sBAAA,cAACV,kBAAkBuB,SAAO;IAACjB;;AAMvC;AAEA,IAAMW,eAAe,CAAC,EAAEO,MAAMC,gBAAe,MAAa;AACxD,QAAMC,OAAO3B,QAAQG,aAAAA;AACrB,QAAMyB,QAAQhC,mBAAmB6B,IAAAA;AAEjCtC,YAAU,MAAA;AACRwC,SAAKE,aAAa;MAChBC,IAAIpC;MACJqC,MAAM;MACNC,UAAUrC;MACViC;IACF,CAAA;AAEA,WAAO,MAAMD,KAAKM,gBAAgBvC,8BAAAA;EACpC,GAAG;IAACiC;IAAMC;GAAM;AAEhB,SACE,sBAAA,cAACvC,QAAQA,SAAO;IACd6C,MAAMzC,WAAW0C;IACjBC,MAAM;MACJ9B,SAASmB;MACTY,YAAYX;IACd;IACAY,OAAO;;AAGb;",
6
- "names": ["React", "useCallback", "useEffect", "Capabilities", "Surface", "useCapability", "useOperationInvoker", "LayoutOperation", "AppSurface", "OBJECT_ACTIONS_CONTRIBUTION_ID", "OBJECT_ACTIONS_CONTRIBUTION_PRIORITY", "useObjectMenuItems", "Panel", "linkedSegment", "useAttention", "useMenu", "PipelineComponent", "usePipelineBoardModel", "PIPELINE_ITEM", "PipelineContainer", "role", "subject", "pipeline", "attendableId", "registry", "AtomRegistry", "model", "invokePromise", "hasAttention", "handleColumnAdd", "UpdateCompanion", "Root", "Item", "PipelineItem", "onAddColumn", "Toolbar", "asChild", "disabled", "Content", "Columns", "item", "projectionModel", "menu", "items", "addMenuItems", "id", "mode", "priority", "removeMenuItems", "type", "Card", "data", "projection", "limit"]
7
- }
@@ -1,7 +0,0 @@
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 { DXN, Filter, JsonSchema, Obj, Query, type QueryAST, Ref, Tag } from '@dxos/echo';\nimport { type JsonPath, type Mutable } from '@dxos/echo/internal';\nimport { getSpace, 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, subtleHover } 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 space = getSpace(pipeline);\n const [expandedId, setExpandedId] = useState<string>();\n const [columns, updateColumns] = useObject(pipeline, 'columns');\n const column = useMemo(\n () => columns.find((column) => column.view.dxn.toString() === expandedId),\n [columns, expandedId],\n );\n const [view, updateView] = useObject(column?.view);\n const [schema, setSchema] = useState<Schema.Schema.AnyNoContext>(() => Schema.Struct({}));\n const projectionRef = useRef<ProjectionModel>(null);\n const tags = useQuery(space?.db, Filter.type(Tag.Tag));\n const types = useTypeOptions({\n space,\n annotation: {\n location: ['database', 'runtime'],\n kind: ['user'],\n },\n });\n\n useAsyncEffect(async () => {\n if (!view?.query || !space) {\n return;\n }\n\n const foundSchema = await resolveSchemaWithRegistry(space.db.schemaRegistry, view.query.ast);\n if (foundSchema && foundSchema !== schema) {\n setSchema(() => foundSchema);\n }\n }, [space, view, schema]);\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?: string) => {\n if (!view || !space) {\n return;\n }\n\n const queue = target && DXN.tryParse(target) ? target : undefined;\n const query = queue ? Query.fromAst(newQuery).from({ queues: [queue] }) : Query.fromAst(newQuery);\n updateView((view) => {\n view.query.ast = query.ast as Mutable<typeof query.ast>;\n });\n const newSchema = await resolveSchemaWithRegistry(space.db.schemaRegistry, query.ast);\n if (!newSchema) {\n return;\n }\n\n const newView = ViewModel.make({\n query,\n jsonSchema: JsonSchema.toJsonSchema(newSchema),\n });\n updateView((view) => {\n view.projection = Obj.getSnapshot(newView).projection as Mutable<typeof view.projection>;\n });\n\n setSchema(() => newSchema);\n },\n [view, updateView, schema],\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) =>\n prevExpandedId === column.view.dxn.toString() ? undefined : column.view.dxn.toString(),\n );\n }, []);\n\n const handleDelete = useCallback(\n async (column: Pipeline.Column) => {\n if (column.view.dxn.toString() === 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 space?.db.remove(viewToRemove);\n },\n [expandedId, columns, updateColumns, space],\n );\n\n const handleAdd = useCallback(() => {\n if (!space) {\n return;\n }\n const newView = ViewModel.make({\n query: Query.select(Filter.nothing()),\n jsonSchema: JsonSchema.toJsonSchema(Schema.Struct({})),\n });\n space.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 }, [space, 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.dxn.toString()}\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.dxn.toString()}\n item={column}\n classNames={listItemGrid}\n aria-expanded={expandedId === column.view.dxn.toString()}\n >\n <div className={mx(subtleHover, listItemGrid, '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={\n expandedId === column.view.dxn.toString()\n ? 'ph--caret-down--regular'\n : 'ph--caret-right--regular'\n }\n onClick={() => handleToggleField(column)}\n />\n </div>\n {expandedId === column.view.dxn.toString() && 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 <ViewEditor\n ref={projectionRef}\n mode='tag'\n readonly\n schema={schema}\n view={column.view.target}\n registry={space?.db.schemaRegistry}\n db={space?.db}\n tags={tags}\n types={types}\n onQueryChanged={handleQueryChanged}\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", "DXN", "Filter", "JsonSchema", "Obj", "Query", "Ref", "Tag", "getSpace", "useObject", "useQuery", "IconButton", "useAsyncEffect", "useTranslation", "Form", "ViewEditor", "List", "ViewModel", "Pipeline", "mx", "osTranslations", "subtleHover", "arrayMove", "meta", "listGrid", "listItemGrid", "ColumnFormSchema", "Column", "pipe", "mutable", "pick", "PipelineProperties", "classNames", "pipeline", "t", "id", "space", "expandedId", "setExpandedId", "columns", "updateColumns", "column", "find", "view", "dxn", "toString", "updateView", "schema", "setSchema", "Struct", "projectionRef", "tags", "db", "type", "types", "annotation", "location", "kind", "query", "foundSchema", "schemaRegistry", "ast", "handleMove", "fromIndex", "toIndex", "handleQueryChanged", "newQuery", "target", "queue", "tryParse", "undefined", "fromAst", "from", "queues", "newSchema", "newView", "make", "jsonSchema", "toJsonSchema", "projection", "getSnapshot", "handleColumnValuesChanged", "newValues", "changed", "columnIndex", "findIndex", "c", "cols", "name", "handleToggleField", "prevExpandedId", "handleDelete", "index", "l", "viewToRemove", "load", "splice", "remove", "handleAdd", "select", "nothing", "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", "values", "onValuesChanged", "Content", "FieldSet", "ref", "mode", "readonly", "registry", "onQueryChanged"]
7
- }
@@ -1,21 +0,0 @@
1
- // src/meta.ts
2
- import { trim } from "@dxos/util";
3
- var meta = {
4
- id: "org.dxos.plugin.pipeline",
5
- name: "Pipelines",
6
- description: trim`
7
- Pipelines for organizing tasks, milestones, and deliverables.
8
- Track progress across multiple pipelines and coordinate team activities in a structured environment.
9
- `,
10
- icon: "ph--path--regular",
11
- iconHue: "purple",
12
- source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-pipeline",
13
- tags: [
14
- "labs"
15
- ]
16
- };
17
-
18
- export {
19
- meta
20
- };
21
- //# sourceMappingURL=chunk-ULB5DKWO.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.pipeline',\n name: 'Pipelines',\n description: trim`\n Pipelines for organizing tasks, milestones, and deliverables.\n Track progress across multiple pipelines and coordinate team activities in a structured environment.\n `,\n icon: 'ph--path--regular',\n iconHue: 'purple',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-pipeline',\n tags: ['labs'],\n};\n"],
5
- "mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaJ;;;;EAIbK,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,MAAM;IAAC;;AACT;",
6
- "names": ["trim", "meta", "id", "name", "description", "icon", "iconHue", "source", "tags"]
7
- }
@@ -1,7 +0,0 @@
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 { 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: Pipeline.Pipeline.typename,\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,sBAAsB;AAC/B,SAASC,yBAAyB;AAClC,SAASC,gBAAgB;AAEzB,IAAA,wBAAeJ,WAAWK,WACjBC,kBAAW,aAAA;AAChB,SAAON,WAAWO,YAAYJ,kBAAkBK,mBAAmB;IACjEC,IAAIL,SAASA,SAASM;IACtBC,cAAc,CAACC,OAAOC,YACbC,WAAI,aAAA;AACT,YAAMC,SAASX,SAASY,KAAKJ,KAAAA;AAC7B,aAAO,OAAOX,UAAUgB,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", "SpaceOperation", "SpaceCapabilities", "Pipeline", "makeModule", "fnUntraced", "contributes", "CreateObjectEntry", "id", "typename", "createObject", "props", "options", "gen", "object", "make", "invoke", "AddObject", "target", "hidden", "targetNodeId"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React from 'react';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { InvocationTraceContainer } from '@dxos/devtools';\nimport { Obj } from '@dxos/echo';\nimport { Panel } from '@dxos/react-ui';\nimport { Pipeline } from '@dxos/types';\n\nimport { PipelineContainer, PipelineProperties } from '#containers';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactSurface, [\n Surface.create({\n id: 'root',\n filter: AppSurface.object(AppSurface.Article, Pipeline.Pipeline),\n component: ({ data, role }) => (\n <PipelineContainer role={role} subject={data.subject} attendableId={data.attendableId} />\n ),\n }),\n Surface.create({\n id: 'companion.invocations',\n filter: AppSurface.allOf(\n AppSurface.literal(AppSurface.Article, 'invocations'),\n AppSurface.companion(AppSurface.Article, Pipeline.Pipeline),\n ),\n component: ({ data, role }) => {\n const db = Obj.getDatabase(data.companionTo);\n // TODO(wittjosiah): Filter the invocations to those relevant to the project.\n return (\n <Panel.Root role={role} className='dx-document'>\n <Panel.Content asChild>\n <InvocationTraceContainer db={db} detailAxis='block' />\n </Panel.Content>\n </Panel.Root>\n );\n },\n }),\n Surface.create({\n id: 'object-properties',\n filter: AppSurface.object(AppSurface.ObjectProperties, Pipeline.Pipeline),\n component: ({ data }) => <PipelineProperties pipeline={data.subject} />,\n }),\n ]),\n ),\n);\n"],
5
- "mappings": ";AAIA,YAAYA,YAAY;AACxB,OAAOC,WAAW;AAElB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,eAAe;AACxB,SAASC,kBAAkB;AAC3B,SAASC,gCAAgC;AACzC,SAASC,WAAW;AACpB,SAASC,aAAa;AACtB,SAASC,gBAAgB;AAEzB,SAASC,mBAAmBC,0BAA0B;AAEtD,IAAA,wBAAeR,WAAWS,WAAW,MAC5BC,eACLV,WAAWW,YAAYZ,aAAaa,cAAc;EAChDX,QAAQY,OAAO;IACbC,IAAI;IACJC,QAAQb,WAAWc,OAAOd,WAAWe,SAASX,SAASA,QAAQ;IAC/DY,WAAW,CAAC,EAAEC,MAAMC,KAAI,MACtB,sBAAA,cAACb,mBAAAA;MAAkBa;MAAYC,SAASF,KAAKE;MAASC,cAAcH,KAAKG;;EAE7E,CAAA;EACArB,QAAQY,OAAO;IACbC,IAAI;IACJC,QAAQb,WAAWqB,MACjBrB,WAAWsB,QAAQtB,WAAWe,SAAS,aAAA,GACvCf,WAAWuB,UAAUvB,WAAWe,SAASX,SAASA,QAAQ,CAAA;IAE5DY,WAAW,CAAC,EAAEC,MAAMC,KAAI,MAAE;AACxB,YAAMM,KAAKtB,IAAIuB,YAAYR,KAAKS,WAAW;AAE3C,aACE,sBAAA,cAACvB,MAAMwB,MAAI;QAACT;QAAYU,WAAU;SAChC,sBAAA,cAACzB,MAAM0B,SAAO;QAACC,SAAAA;SACb,sBAAA,cAAC7B,0BAAAA;QAAyBuB;QAAQO,YAAW;;IAIrD;EACF,CAAA;EACAhC,QAAQY,OAAO;IACbC,IAAI;IACJC,QAAQb,WAAWc,OAAOd,WAAWgC,kBAAkB5B,SAASA,QAAQ;IACxEY,WAAW,CAAC,EAAEC,KAAI,MAAO,sBAAA,cAACX,oBAAAA;MAAmB2B,UAAUhB,KAAKE;;EAC9D,CAAA;CACD,CAAA,CAAA;",
6
- "names": ["Effect", "React", "Capabilities", "Capability", "Surface", "AppSurface", "InvocationTraceContainer", "Obj", "Panel", "Pipeline", "PipelineContainer", "PipelineProperties", "makeModule", "succeed", "contributes", "ReactSurface", "create", "id", "filter", "object", "Article", "component", "data", "role", "subject", "attendableId", "allOf", "literal", "companion", "db", "getDatabase", "companionTo", "Root", "className", "Content", "asChild", "detailAxis", "ObjectProperties", "pipeline"]
7
- }
@@ -1,6 +0,0 @@
1
- import React from 'react';
2
- import { AppSurface } from '@dxos/app-toolkit/ui';
3
- import { type Pipeline } from '@dxos/types';
4
- export type PipelineContainerProps = AppSurface.ObjectArticleProps<Pipeline.Pipeline>;
5
- export declare const PipelineContainer: ({ role, subject: pipeline, attendableId }: PipelineContainerProps) => React.JSX.Element;
6
- //# sourceMappingURL=PipelineContainer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PipelineContainer.d.ts","sourceRoot":"","sources":["../../../../../src/containers/PipelineContainer/PipelineContainer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAiC,MAAM,OAAO,CAAC;AAKtD,OAAO,EACL,UAAU,EAIX,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAO5C,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAEtF,eAAO,MAAM,iBAAiB,8CAA+C,sBAAsB,sBA4BlG,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PipelineContainer.stories.d.ts","sourceRoot":"","sources":["../../../../../src/containers/PipelineContainer/PipelineContainer.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjE,OAAO,KAAK,MAAM,OAAO,CAAC;AA4C1B,QAAA,MAAM,IAAI;;;;;QAyKN,MAAM;QACN,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAE0B,CAAC;eAE5B,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC"}
@@ -1,2 +0,0 @@
1
- export { PipelineContainer as default } from './PipelineContainer';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/containers/PipelineContainer/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,5 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export { PipelineContainer as default } from './PipelineContainer';