@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.
- package/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/neutral/{PipelineContainer-7MK2SS76.mjs → PipelineArticle-6JIVXMYF.mjs} +4 -4
- package/dist/lib/neutral/PipelineArticle-6JIVXMYF.mjs.map +7 -0
- package/dist/lib/neutral/PipelinePlugin.workerd.mjs +16 -0
- package/dist/lib/neutral/PipelinePlugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/{PipelineProperties-RRPQ3V6I.mjs → PipelineProperties-NFNEU3NR.mjs} +41 -40
- package/dist/lib/neutral/PipelineProperties-NFNEU3NR.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +2 -2
- package/dist/lib/neutral/chunk-OVZ2ASS7.mjs +33 -0
- package/dist/lib/neutral/chunk-OVZ2ASS7.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +19 -18
- package/dist/lib/neutral/components/index.mjs.map +3 -3
- package/dist/lib/neutral/containers/index.mjs +3 -3
- package/dist/lib/neutral/containers/index.mjs.map +3 -3
- package/dist/lib/neutral/{create-object-ZJYFACOI.mjs → create-object-6Z4MMGX4.mjs} +3 -2
- package/dist/lib/neutral/create-object-6Z4MMGX4.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +5 -5
- package/dist/lib/neutral/hooks/index.mjs.map +3 -3
- package/dist/lib/neutral/index.mjs +1 -1
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/meta.mjs +1 -1
- package/dist/lib/neutral/plugin.mjs +1 -1
- package/dist/lib/neutral/{react-surface-TW6TRMO6.mjs → react-surface-4W5YLCHT.mjs} +3 -3
- package/dist/lib/neutral/react-surface-4W5YLCHT.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +2 -1
- package/dist/lib/neutral/translations.mjs.map +3 -3
- package/dist/types/src/PipelinePlugin.workerd.d.ts +4 -0
- package/dist/types/src/PipelinePlugin.workerd.d.ts.map +1 -0
- package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
- package/dist/types/src/components/PipelineComponent/PipelineColumn.d.ts.map +1 -1
- package/dist/types/src/components/PipelineComponent/PipelineComponent.d.ts.map +1 -1
- package/dist/types/src/components/PipelineComponent/PipelineComponent.stories.d.ts.map +1 -1
- package/dist/types/src/containers/PipelineArticle/PipelineArticle.d.ts +6 -0
- package/dist/types/src/containers/PipelineArticle/PipelineArticle.d.ts.map +1 -0
- package/dist/types/src/containers/{PipelineContainer/PipelineContainer.stories.d.ts → PipelineArticle/PipelineArticle.stories.d.ts} +1 -1
- package/dist/types/src/containers/PipelineArticle/PipelineArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/PipelineArticle/index.d.ts +2 -0
- package/dist/types/src/containers/PipelineArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/PipelineProperties/PipelineProperties.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +1 -1
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +44 -42
- package/src/PipelinePlugin.workerd.ts +16 -0
- package/src/capabilities/create-object.ts +2 -1
- package/src/capabilities/react-surface.tsx +2 -2
- package/src/components/PipelineComponent/PipelineColumn.tsx +21 -22
- package/src/components/PipelineComponent/PipelineComponent.stories.tsx +2 -4
- package/src/components/PipelineComponent/PipelineComponent.tsx +1 -1
- package/src/containers/{PipelineContainer/PipelineContainer.stories.tsx → PipelineArticle/PipelineArticle.stories.tsx} +12 -14
- package/src/containers/{PipelineContainer/PipelineContainer.tsx → PipelineArticle/PipelineArticle.tsx} +2 -2
- package/src/containers/PipelineArticle/index.ts +5 -0
- package/src/containers/PipelineProperties/PipelineProperties.tsx +49 -56
- package/src/containers/index.ts +1 -1
- package/src/hooks/usePipelineBoardModel.ts +5 -5
- package/src/meta.ts +14 -2
- package/src/translations.ts +2 -1
- package/dist/lib/neutral/PipelineContainer-7MK2SS76.mjs.map +0 -7
- package/dist/lib/neutral/PipelineProperties-RRPQ3V6I.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ULB5DKWO.mjs +0 -21
- package/dist/lib/neutral/chunk-ULB5DKWO.mjs.map +0 -7
- package/dist/lib/neutral/create-object-ZJYFACOI.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-TW6TRMO6.mjs.map +0 -7
- package/dist/types/src/containers/PipelineContainer/PipelineContainer.d.ts +0 -6
- package/dist/types/src/containers/PipelineContainer/PipelineContainer.d.ts.map +0 -1
- package/dist/types/src/containers/PipelineContainer/PipelineContainer.stories.d.ts.map +0 -1
- package/dist/types/src/containers/PipelineContainer/index.d.ts +0 -2
- package/dist/types/src/containers/PipelineContainer/index.d.ts.map +0 -1
- 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 {
|
|
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 {
|
|
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
|
|
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
|
|
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 [
|
|
42
|
+
const [type, setType] = useState<Type.AnyEntity>();
|
|
46
43
|
const projectionRef = useRef<ProjectionModel>(null);
|
|
47
|
-
const tags = useQuery(
|
|
44
|
+
const tags = useQuery(db, Filter.type(Tag.Tag));
|
|
48
45
|
const types = useTypeOptions({
|
|
49
|
-
|
|
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 || !
|
|
54
|
+
if (!view?.query || !db) {
|
|
58
55
|
return;
|
|
59
56
|
}
|
|
60
57
|
|
|
61
|
-
const
|
|
62
|
-
if (
|
|
63
|
-
|
|
58
|
+
const foundType = await resolveSchemaWithRegistry(db.schemaRegistry, view.query.ast);
|
|
59
|
+
if (foundType && foundType !== type) {
|
|
60
|
+
setType(() => foundType);
|
|
64
61
|
}
|
|
65
|
-
}, [
|
|
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?:
|
|
77
|
-
if (!view || !
|
|
73
|
+
async (newQuery: QueryAST.Query, target?: EchoURI.EchoURI) => {
|
|
74
|
+
if (!view || !db) {
|
|
78
75
|
return;
|
|
79
76
|
}
|
|
80
77
|
|
|
81
|
-
const queue = target
|
|
82
|
-
const query = queue ? Query.fromAst(newQuery).from({
|
|
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
|
|
87
|
-
if (!
|
|
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:
|
|
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
|
-
|
|
96
|
+
setType(() => newType);
|
|
100
97
|
},
|
|
101
|
-
[view, updateView,
|
|
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.
|
|
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
|
-
|
|
132
|
+
db?.remove(viewToRemove);
|
|
138
133
|
},
|
|
139
|
-
[expandedId, columns, updateColumns,
|
|
134
|
+
[expandedId, columns, updateColumns, db],
|
|
140
135
|
);
|
|
141
136
|
|
|
142
137
|
const handleAdd = useCallback(() => {
|
|
143
|
-
if (!
|
|
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
|
-
|
|
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
|
-
}, [
|
|
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.
|
|
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.
|
|
172
|
+
key={column.view.uri}
|
|
178
173
|
item={column}
|
|
179
174
|
classNames={listItemGrid}
|
|
180
|
-
aria-expanded={expandedId === column.view.
|
|
175
|
+
aria-expanded={expandedId === column.view.uri}
|
|
181
176
|
>
|
|
182
|
-
<div className={mx(
|
|
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.
|
|
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
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
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>
|
package/src/containers/index.ts
CHANGED
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
|
|
5
5
|
import { type ComponentType, lazy } from 'react';
|
|
6
6
|
|
|
7
|
-
export const
|
|
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.
|
|
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.
|
|
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.
|
|
60
|
+
items: (column) => itemsAtomFamily(column.view.uri),
|
|
61
61
|
getColumns: () => [...registry.get(columnsAtom)],
|
|
62
|
-
getItems: (column) => registry.get(itemsAtomFamily(column.view.
|
|
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.
|
|
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
|
-
|
|
13
|
-
|
|
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
|
};
|
package/src/translations.ts
CHANGED
|
@@ -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
|
|
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 +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"}
|