@dxos/plugin-pipeline 0.8.3-main.ef1bc66f44 → 0.8.4-main.2244d791bb

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 (48) hide show
  1. package/dist/lib/browser/{PipelineContainer-TRO66W6L.mjs → PipelineContainer-2BRZPECS.mjs} +126 -53
  2. package/dist/lib/browser/PipelineContainer-2BRZPECS.mjs.map +7 -0
  3. package/dist/lib/browser/{PipelineSettings-EBR3UU5C.mjs → PipelineSettings-R54RTVWZ.mjs} +41 -32
  4. package/dist/lib/browser/PipelineSettings-R54RTVWZ.mjs.map +7 -0
  5. package/dist/lib/browser/{app-graph-builder-NKUZQ6A7.mjs → app-graph-builder-NUJB33F7.mjs} +8 -7
  6. package/dist/lib/browser/app-graph-builder-NUJB33F7.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-XDHJKK7D.mjs → chunk-7GVESVYR.mjs} +2 -2
  8. package/dist/lib/browser/{chunk-J5YNPKHT.mjs → chunk-QWNKLHBY.mjs} +3 -3
  9. package/dist/lib/browser/{chunk-J5YNPKHT.mjs.map → chunk-QWNKLHBY.mjs.map} +1 -1
  10. package/dist/lib/browser/index.mjs +30 -29
  11. package/dist/lib/browser/index.mjs.map +3 -3
  12. package/dist/lib/browser/meta.json +1 -1
  13. package/dist/lib/browser/{react-surface-CH2SUJTQ.mjs → react-surface-CMTEEE6F.mjs} +11 -10
  14. package/dist/lib/browser/react-surface-CMTEEE6F.mjs.map +7 -0
  15. package/dist/lib/browser/types/index.mjs +2 -2
  16. package/dist/types/src/PipelinePlugin.d.ts.map +1 -1
  17. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
  18. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
  19. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
  20. package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
  21. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
  22. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
  23. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
  24. package/dist/types/src/components/PipelineColumn.d.ts +3 -4
  25. package/dist/types/src/components/PipelineColumn.d.ts.map +1 -1
  26. package/dist/types/src/components/PipelineComponent.d.ts +13 -7
  27. package/dist/types/src/components/PipelineComponent.d.ts.map +1 -1
  28. package/dist/types/src/components/PipelineComponent.stories.d.ts +11 -11
  29. package/dist/types/src/components/PipelineComponent.stories.d.ts.map +1 -1
  30. package/dist/types/src/components/PipelineContainer.d.ts +1 -1
  31. package/dist/types/src/components/PipelineContainer.d.ts.map +1 -1
  32. package/dist/types/src/components/PipelineContainer.stories.d.ts +11 -11
  33. package/dist/types/src/components/PipelineContainer.stories.d.ts.map +1 -1
  34. package/dist/types/src/components/PipelineSettings.d.ts.map +1 -1
  35. package/dist/types/src/translations.d.ts +11 -11
  36. package/dist/types/tsconfig.tsbuildinfo +1 -1
  37. package/package.json +39 -38
  38. package/src/components/PipelineColumn.tsx +32 -32
  39. package/src/components/PipelineComponent.stories.tsx +11 -4
  40. package/src/components/PipelineComponent.tsx +100 -17
  41. package/src/components/PipelineContainer.stories.tsx +5 -5
  42. package/src/components/PipelineContainer.tsx +6 -2
  43. package/src/components/PipelineSettings.tsx +35 -30
  44. package/dist/lib/browser/PipelineContainer-TRO66W6L.mjs.map +0 -7
  45. package/dist/lib/browser/PipelineSettings-EBR3UU5C.mjs.map +0 -7
  46. package/dist/lib/browser/app-graph-builder-NKUZQ6A7.mjs.map +0 -7
  47. package/dist/lib/browser/react-surface-CH2SUJTQ.mjs.map +0 -7
  48. /package/dist/lib/browser/{chunk-XDHJKK7D.mjs.map → chunk-7GVESVYR.mjs.map} +0 -0
@@ -5,17 +5,17 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
  import React, { useCallback, useMemo, useRef, useState } from 'react';
7
7
 
8
- import { DXN, Filter, Obj, Query, type QueryAST, Ref, Tag, Type } from '@dxos/echo';
8
+ import { DXN, Filter, Query, type QueryAST, Ref, Tag, Type } from '@dxos/echo';
9
9
  import { type Mutable } from '@dxos/echo/internal';
10
10
  import { useTypeOptions } from '@dxos/plugin-space';
11
11
  import { resolveSchemaWithRegistry } from '@dxos/plugin-space';
12
- import { getSpace, useQuery } from '@dxos/react-client/echo';
12
+ import { getSpace, 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, View } from '@dxos/schema';
17
17
  import { Pipeline, Task } from '@dxos/types';
18
- import { inputTextLabel, mx, osTranslations, subtleHover } from '@dxos/ui-theme';
18
+ import { mx, osTranslations, subtleHover } from '@dxos/ui-theme';
19
19
  import { arrayMove } from '@dxos/util';
20
20
 
21
21
  import { meta } from '../meta';
@@ -37,11 +37,12 @@ export const PipelineObjectSettings = ({ classNames, pipeline }: PipelineObjectS
37
37
  const { t } = useTranslation(meta.id);
38
38
  const space = getSpace(pipeline);
39
39
  const [expandedId, setExpandedId] = useState<string>();
40
+ const [columns, updateColumns] = useObject(pipeline, 'columns');
40
41
  const column = useMemo(
41
- () => pipeline.columns.find((column) => column.view.dxn.toString() === expandedId),
42
- [pipeline.columns, expandedId],
42
+ () => columns.find((column) => column.view.dxn.toString() === expandedId),
43
+ [columns, expandedId],
43
44
  );
44
- const view = column?.view.target;
45
+ const [view, updateView] = useObject(column?.view);
45
46
  const [schema, setSchema] = useState<Schema.Schema.AnyNoContext>(() => Schema.Struct({}));
46
47
  const projectionRef = useRef<ProjectionModel>(null);
47
48
  const tags = useQuery(space?.db, Filter.type(Tag.Tag));
@@ -67,10 +68,10 @@ export const PipelineObjectSettings = ({ classNames, pipeline }: PipelineObjectS
67
68
 
68
69
  const handleMove = useCallback(
69
70
  (fromIndex: number, toIndex: number) =>
70
- Obj.change(pipeline, (p) => {
71
- arrayMove(p.columns, fromIndex, toIndex);
71
+ updateColumns((columns) => {
72
+ arrayMove(columns, fromIndex, toIndex);
72
73
  }),
73
- [pipeline],
74
+ [updateColumns],
74
75
  );
75
76
 
76
77
  const handleQueryChanged = useCallback(
@@ -81,8 +82,8 @@ export const PipelineObjectSettings = ({ classNames, pipeline }: PipelineObjectS
81
82
 
82
83
  const queue = target && DXN.tryParse(target) ? target : undefined;
83
84
  const query = queue ? Query.fromAst(newQuery).options({ queues: [queue] }) : Query.fromAst(newQuery);
84
- Obj.change(view, (v) => {
85
- v.query.ast = query.ast as Mutable<typeof query.ast>;
85
+ updateView((view) => {
86
+ view.query.ast = query.ast as Mutable<typeof query.ast>;
86
87
  });
87
88
  const newSchema = await resolveSchemaWithRegistry(space.db.schemaRegistry, query.ast);
88
89
  if (!newSchema) {
@@ -93,13 +94,13 @@ export const PipelineObjectSettings = ({ classNames, pipeline }: PipelineObjectS
93
94
  query,
94
95
  jsonSchema: Type.toJsonSchema(newSchema),
95
96
  });
96
- Obj.change(view, (v) => {
97
- v.projection = Obj.getSnapshot(newView).projection as Mutable<typeof v.projection>;
97
+ updateView((view) => {
98
+ view.projection = newView.projection as Mutable<typeof view.projection>;
98
99
  });
99
100
 
100
101
  setSchema(() => newSchema);
101
102
  },
102
- [view, schema],
103
+ [view, updateView, schema],
103
104
  );
104
105
 
105
106
  const handleToggleField = useCallback((column: Pipeline.Column) => {
@@ -114,50 +115,54 @@ export const PipelineObjectSettings = ({ classNames, pipeline }: PipelineObjectS
114
115
  setExpandedId(undefined);
115
116
  }
116
117
 
117
- const index = pipeline.columns.findIndex((l) => l === column);
118
+ const index = columns.findIndex((l) => l === column);
118
119
  const viewToRemove = await column.view.load();
119
- Obj.change(pipeline, (p) => {
120
- p.columns.splice(index, 1);
120
+ updateColumns((columns) => {
121
+ columns.splice(index, 1);
121
122
  });
122
123
  space?.db.remove(viewToRemove);
123
124
  },
124
- [expandedId, pipeline.columns, space],
125
+ [expandedId, columns, updateColumns, space],
125
126
  );
126
127
 
127
128
  const handleAdd = useCallback(() => {
129
+ if (!space) {
130
+ return;
131
+ }
128
132
  const newView = View.make({
129
133
  query: Query.select(Filter.type(Task.Task)),
130
134
  jsonSchema: Type.toJsonSchema(Task.Task),
131
135
  });
132
- Obj.change(pipeline, (p) => {
133
- p.columns.push({
136
+ space.db.add(newView);
137
+ updateColumns((columns) => {
138
+ columns.push({
134
139
  name: 'Tasks',
135
140
  // Type assertion needed due to QueryAST type variance.
136
- view: Ref.make(newView) as (typeof p.columns)[number]['view'],
141
+ view: Ref.make(newView) as (typeof columns)[number]['view'],
137
142
  order: [],
138
143
  });
139
144
  });
140
145
  setExpandedId(newView.id);
141
- }, [pipeline]);
146
+ }, [space, updateColumns]);
142
147
 
143
148
  const handleColumnSave = useCallback(
144
149
  (values: Schema.Schema.Type<typeof ColumnFormSchema>) => {
145
150
  if (column) {
146
- const columnIndex = pipeline.columns.findIndex((c) => c === column);
147
- Obj.change(pipeline, (p) => {
148
- p.columns[columnIndex].name = values.name;
151
+ const columnIndex = columns.findIndex((c) => c === column);
152
+ updateColumns((columns) => {
153
+ columns[columnIndex].name = values.name;
149
154
  });
150
155
  }
151
156
  },
152
- [column, pipeline],
157
+ [column, columns, updateColumns],
153
158
  );
154
159
 
155
160
  return (
156
161
  <div role='none' className={mx('plb-cardSpacingBlock overflow-y-auto', classNames)}>
157
- <h2 className={mx(inputTextLabel)}>{t('views label')}</h2>
162
+ <h2 className='text-sm text-description plb-1'>{t('views label')}</h2>
158
163
 
159
164
  <List.Root<Pipeline.Column>
160
- items={pipeline.columns}
165
+ items={columns}
161
166
  isItem={Schema.is(Pipeline.Column)}
162
167
  getId={(column) => column.view.dxn.toString()}
163
168
  onMove={handleMove}
@@ -193,7 +198,7 @@ export const PipelineObjectSettings = ({ classNames, pipeline }: PipelineObjectS
193
198
  onClick={() => handleToggleField(column)}
194
199
  />
195
200
  </div>
196
- {expandedId === column.view.dxn.toString() && view && (
201
+ {expandedId === column.view.dxn.toString() && column?.view.target && (
197
202
  <div role='none' className='col-span-5 mlb-2 border border-separator rounded-md'>
198
203
  <Form.Root schema={ColumnFormSchema} values={column} autoSave onSave={handleColumnSave}>
199
204
  <Form.Content>
@@ -205,7 +210,7 @@ export const PipelineObjectSettings = ({ classNames, pipeline }: PipelineObjectS
205
210
  mode='tag'
206
211
  readonly
207
212
  schema={schema}
208
- view={view}
213
+ view={column.view.target}
209
214
  registry={space?.db.schemaRegistry}
210
215
  tags={tags}
211
216
  types={types}
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/PipelineContainer.tsx", "../../../src/components/PipelineComponent.tsx", "../../../src/components/PipelineColumn.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { type SurfaceComponentProps, useOperationInvoker } from '@dxos/app-framework/react';\nimport { Surface } from '@dxos/app-framework/react';\nimport { Obj } from '@dxos/echo';\nimport { ATTENDABLE_PATH_SEPARATOR, DeckOperation } from '@dxos/plugin-deck/types';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { Layout } from '@dxos/react-ui-mosaic';\nimport { type Pipeline as PipelineType } from '@dxos/types';\n\nimport { type ItemProps, PipelineComponent } from './PipelineComponent';\n\nexport type PipelineContainerProps = SurfaceComponentProps<PipelineType.Pipeline>;\n\nexport const PipelineContainer = ({ role, subject: pipeline }: PipelineContainerProps) => {\n const { invokePromise } = useOperationInvoker();\n const attendableId = Obj.getDXN(pipeline).toString();\n const { hasAttention } = useAttention(attendableId);\n\n const handleColumnAdd = useCallback(\n () =>\n invokePromise(DeckOperation.ChangeCompanion, {\n primary: attendableId,\n companion: `${attendableId}${ATTENDABLE_PATH_SEPARATOR}settings`,\n }),\n [invokePromise, attendableId],\n );\n\n return (\n <Layout.Main role={role} toolbar>\n <PipelineComponent.Root Item={PipelineItem} onAddColumn={handleColumnAdd}>\n <PipelineComponent.Toolbar disabled={!hasAttention} />\n <PipelineComponent.Content pipeline={pipeline} />\n </PipelineComponent.Root>\n </Layout.Main>\n );\n};\n\nconst PipelineItem = ({ item, projectionModel }: ItemProps) => {\n return (\n <Surface\n role='card--content'\n data={{\n subject: item,\n projection: projectionModel,\n }}\n limit={1}\n />\n );\n};\n\nexport default PipelineContainer;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type FC } from 'react';\n\nimport { type Obj } from '@dxos/echo';\nimport { useObject } from '@dxos/react-client/echo';\nimport { Toolbar, type ToolbarRootProps, useTranslation } from '@dxos/react-ui';\nimport { Stack } from '@dxos/react-ui-stack';\nimport { type ProjectionModel } from '@dxos/schema';\nimport { type Pipeline as PipelineType } 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\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 // onAddItem?: (schema: Schema.Schema.AnyNoContext) => void;\n onAddColumn?: () => void;\n};\n\n//\n// Root\n//\n\ntype PipelineRootProps = PipelineContextValue;\n\nconst PIPELINE_ROOT = 'Pipeline.Root';\n\nconst [PipelineRoot, usePipeline] = createContext<PipelineContextValue>(PIPELINE_ROOT, {\n Item: itemNoOp,\n});\n\nPipelineRoot.displayName = PIPELINE_ROOT;\n\n//\n// Content\n//\n\nconst PIPELINE_CONTENT_NAME = 'Pipeline.Content';\n\ntype PipelineContentProps = {\n pipeline: PipelineType.Pipeline;\n};\n\nconst PipelineContent = ({ pipeline }: PipelineContentProps) => {\n const [columns] = useObject(pipeline, 'columns');\n\n return (\n <Stack orientation='horizontal' size='contain' rail={false}>\n {columns.map((column) => {\n return <PipelineColumn key={column.view.dxn.toString()} column={column} />;\n })}\n </Stack>\n );\n};\n\nPipelineContent.displayName = PIPELINE_CONTENT_NAME;\n\n//\n// Toolbar\n//\n\nconst PIPELINE_TOOLBAR_NAME = 'Pipeline.Toolbar';\n\nexport const PipelineToolbar = (props: ToolbarRootProps) => {\n const { t } = useTranslation(meta.id);\n const { onAddColumn } = usePipeline(PIPELINE_TOOLBAR_NAME);\n\n return (\n <Toolbar.Root {...props}>\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 Toolbar: PipelineToolbar,\n};\n\nexport { usePipeline };\n\nexport type { ItemProps, PipelineContextValue, PipelineRootProps };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport type * as Schema from 'effect/Schema';\nimport React, { forwardRef, useMemo, useRef, useState } from 'react';\n\nimport { Obj, Query, Type } from '@dxos/echo';\nimport { getQueryTarget, resolveSchemaWithRegistry } from '@dxos/plugin-space';\nimport { Filter, getSpace, isSpace, useObject, useQuery } from '@dxos/react-client/echo';\nimport { useAsyncEffect, useTranslation } from '@dxos/react-ui';\nimport { Card, 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 = {\n column: Pipeline.Column;\n};\n\n// TODO(thure): Duplicates a lot of the same boilerplate as Kanban columns; is there an opportunity to DRY these out?\n// TODO(wittjosiah): Support column DnD reordering.\n// TODO(wittjosiah): Support item DnD reordering (ordering needs to be stored on the view presentation collection).\nexport const PipelineColumn = ({ column }: PipelineColumnProps) => {\n const { t } = useTranslation(meta.id);\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) {\n return;\n }\n\n const schema = await resolveSchemaWithRegistry(space.db.schemaRegistry, query.ast);\n setSchema(() => schema);\n }, [space, query]);\n\n const queryTarget = getQueryTarget(query.ast, space);\n const items = useQuery(queryTarget, query);\n const sortedItems = useMemo(() => {\n // TODO(burdon): Hack to reverse queue.\n return isSpace(queryTarget) ? items : [...items.reverse()];\n }, [queryTarget, items]);\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 : Type.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 Tile = useMemo(() => {\n return forwardRef<HTMLDivElement, Pick<MosaicTileProps<Obj.Unknown>, 'classNames' | 'location' | 'data' | 'debug'>>(\n (props, ref) => <ItemTile {...props} ref={ref} itemProps={{ item: props.data, projectionModel }} />,\n );\n }, [Item, projectionModel]);\n\n if (!view) {\n return null;\n }\n\n return (\n <Focus.Group asChild>\n <div className='grid bs-full card-default-width overflow-hidden grid-rows-[min-content_1fr] density-fine border border-separator rounded-md bg-deckSurface'>\n <Card.Toolbar>\n <Card.DragHandle />\n <Card.Title>{column.name ?? t('untitled view title')}</Card.Title>\n <Card.Menu />\n </Card.Toolbar>\n <Mosaic.Container asChild axis='vertical' withFocus>\n <Mosaic.Viewport axis='vertical' padding>\n <Mosaic.Stack axis='vertical' items={sortedItems} getId={(item) => item.id} Tile={Tile} />\n </Mosaic.Viewport>\n </Mosaic.Container>\n </div>\n </Focus.Group>\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\n return (\n <Mosaic.Tile asChild id={data.id} data={data} location={location} debug={debug}>\n <Focus.Group asChild>\n <Card.Root classNames={classNames} ref={composedRef}>\n <Card.Toolbar>\n <Card.DragHandle />\n <Card.Title>{Obj.getLabel(data)}</Card.Title>\n <Card.Menu />\n </Card.Toolbar>\n <Card.Content>\n <Item {...itemProps} />\n </Card.Content>\n </Card.Root>\n </Focus.Group>\n </Mosaic.Tile>\n );\n },\n);\n\nItemTile.displayName = ITEM_TILE_NAME;\n"],
5
- "mappings": "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",
6
- "names": ["React", "useCallback", "useOperationInvoker", "Surface", "Obj", "ATTENDABLE_PATH_SEPARATOR", "DeckOperation", "useAttention", "Layout", "createContext", "React", "useObject", "Toolbar", "useTranslation", "Stack", "useComposedRefs", "React", "forwardRef", "useMemo", "useRef", "useState", "Obj", "Query", "Type", "getQueryTarget", "resolveSchemaWithRegistry", "Filter", "getSpace", "isSpace", "useObject", "useQuery", "useAsyncEffect", "useTranslation", "Card", "Focus", "Mosaic", "ProjectionModel", "createEchoChangeCallback", "PIPELINE_COLUMN_NAME", "PipelineColumn", "column", "t", "useTranslation", "meta", "id", "viewSnapshot", "useObject", "view", "target", "space", "getSpace", "Item", "usePipeline", "schema", "setSchema", "useState", "query", "useMemo", "Query", "select", "Filter", "nothing", "fromAst", "JSON", "parse", "stringify", "ast", "useAsyncEffect", "resolveSchemaWithRegistry", "db", "schemaRegistry", "queryTarget", "getQueryTarget", "items", "useQuery", "sortedItems", "isSpace", "reverse", "projectionModel", "undefined", "jsonSchema", "Type", "isMutable", "toJsonSchema", "change", "createEchoChangeCallback", "ProjectionModel", "baseSchema", "Tile", "forwardRef", "props", "ref", "ItemTile", "itemProps", "item", "data", "Focus", "Group", "asChild", "div", "className", "Card", "Toolbar", "DragHandle", "Title", "name", "Menu", "Mosaic", "Container", "axis", "withFocus", "Viewport", "padding", "Stack", "getId", "displayName", "ITEM_TILE_NAME", "classNames", "location", "debug", "forwardedRef", "rootRef", "useRef", "composedRef", "useComposedRefs", "Root", "Obj", "getLabel", "Content", "itemNoOp", "item", "React", "span", "id", "PIPELINE_ROOT", "PipelineRoot", "usePipeline", "createContext", "Item", "displayName", "PIPELINE_CONTENT_NAME", "PipelineContent", "pipeline", "columns", "useObject", "Stack", "orientation", "size", "rail", "map", "column", "PipelineColumn", "key", "view", "dxn", "toString", "PIPELINE_TOOLBAR_NAME", "PipelineToolbar", "props", "t", "useTranslation", "meta", "onAddColumn", "Toolbar", "Root", "IconButton", "icon", "iconOnly", "label", "onClick", "PipelineComponent", "Content", "PipelineContainer", "role", "subject", "pipeline", "invokePromise", "useOperationInvoker", "attendableId", "Obj", "getDXN", "toString", "hasAttention", "useAttention", "handleColumnAdd", "useCallback", "DeckOperation", "ChangeCompanion", "primary", "companion", "ATTENDABLE_PATH_SEPARATOR", "React", "Layout", "Main", "toolbar", "PipelineComponent", "Root", "Item", "PipelineItem", "onAddColumn", "Toolbar", "disabled", "Content", "item", "projectionModel", "Surface", "data", "projection", "limit"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/PipelineSettings.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 { DXN, Filter, Obj, Query, type QueryAST, Ref, Tag, Type } from '@dxos/echo';\nimport { type Mutable } from '@dxos/echo/internal';\nimport { useTypeOptions } from '@dxos/plugin-space';\nimport { resolveSchemaWithRegistry } from '@dxos/plugin-space';\nimport { getSpace, 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, View } from '@dxos/schema';\nimport { Pipeline, Task } from '@dxos/types';\nimport { inputTextLabel, 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\n// TODO(burdon): Standardize Object/Plugin settings.\nexport type PipelineObjectSettingsProps = ThemedClassName<{\n pipeline: Pipeline.Pipeline;\n}>;\n\n/**\n * Supports editing the pipeline view.\n */\nexport const PipelineObjectSettings = ({ classNames, pipeline }: PipelineObjectSettingsProps) => {\n const { t } = useTranslation(meta.id);\n const space = getSpace(pipeline);\n const [expandedId, setExpandedId] = useState<string>();\n const column = useMemo(\n () => pipeline.columns.find((column) => column.view.dxn.toString() === expandedId),\n [pipeline.columns, expandedId],\n );\n const view = column?.view.target;\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 registered: ['registered', 'unregistered'],\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 Obj.change(pipeline, (p) => {\n arrayMove(p.columns, fromIndex, toIndex);\n }),\n [pipeline],\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).options({ queues: [queue] }) : Query.fromAst(newQuery);\n Obj.change(view, (v) => {\n v.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 = View.make({\n query,\n jsonSchema: Type.toJsonSchema(newSchema),\n });\n Obj.change(view, (v) => {\n v.projection = Obj.getSnapshot(newView).projection as Mutable<typeof v.projection>;\n });\n\n setSchema(() => newSchema);\n },\n [view, schema],\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 = pipeline.columns.findIndex((l) => l === column);\n const viewToRemove = await column.view.load();\n Obj.change(pipeline, (p) => {\n p.columns.splice(index, 1);\n });\n space?.db.remove(viewToRemove);\n },\n [expandedId, pipeline.columns, space],\n );\n\n const handleAdd = useCallback(() => {\n const newView = View.make({\n query: Query.select(Filter.type(Task.Task)),\n jsonSchema: Type.toJsonSchema(Task.Task),\n });\n Obj.change(pipeline, (p) => {\n p.columns.push({\n name: 'Tasks',\n // Type assertion needed due to QueryAST type variance.\n view: Ref.make(newView) as (typeof p.columns)[number]['view'],\n order: [],\n });\n });\n setExpandedId(newView.id);\n }, [pipeline]);\n\n const handleColumnSave = useCallback(\n (values: Schema.Schema.Type<typeof ColumnFormSchema>) => {\n if (column) {\n const columnIndex = pipeline.columns.findIndex((c) => c === column);\n Obj.change(pipeline, (p) => {\n p.columns[columnIndex].name = values.name;\n });\n }\n },\n [column, pipeline],\n );\n\n return (\n <div role='none' className={mx('plb-cardSpacingBlock overflow-y-auto', classNames)}>\n <h2 className={mx(inputTextLabel)}>{t('views label')}</h2>\n\n <List.Root<Pipeline.Column>\n items={pipeline.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 role='none' className={mx(subtleHover, listItemGrid, 'rounded-sm cursor-pointer min-bs-10')}>\n <List.ItemDragHandle />\n <List.ItemTitle onClick={() => handleToggleField(column)}>{column.name}</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() && view && (\n <div role='none' className='col-span-5 mlb-2 border border-separator rounded-md'>\n <Form.Root schema={ColumnFormSchema} values={column} autoSave onSave={handleColumnSave}>\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={view}\n registry={space?.db.schemaRegistry}\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 role='none' className='mlb-cardSpacingBlock'>\n <IconButton icon='ph--plus--regular' label={t('add view label')} onClick={handleAdd} classNames='is-full' />\n </div>\n </div>\n );\n};\n\nexport default PipelineObjectSettings;\n"],
5
- "mappings": "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",
6
- "names": ["Schema", "React", "useCallback", "useMemo", "useRef", "useState", "DXN", "Filter", "Obj", "Query", "Ref", "Tag", "Type", "useTypeOptions", "resolveSchemaWithRegistry", "getSpace", "useQuery", "IconButton", "useAsyncEffect", "useTranslation", "Form", "ViewEditor", "List", "View", "Pipeline", "Task", "inputTextLabel", "mx", "osTranslations", "subtleHover", "arrayMove", "listGrid", "listItemGrid", "ColumnFormSchema", "Pipeline", "Column", "pipe", "mutable", "pick", "PipelineObjectSettings", "classNames", "pipeline", "t", "useTranslation", "meta", "id", "space", "getSpace", "expandedId", "setExpandedId", "useState", "column", "useMemo", "columns", "find", "view", "dxn", "toString", "target", "schema", "setSchema", "Struct", "projectionRef", "useRef", "tags", "useQuery", "db", "Filter", "type", "Tag", "types", "useTypeOptions", "annotation", "location", "kind", "registered", "useAsyncEffect", "query", "foundSchema", "resolveSchemaWithRegistry", "schemaRegistry", "ast", "handleMove", "useCallback", "fromIndex", "toIndex", "Obj", "change", "p", "arrayMove", "handleQueryChanged", "newQuery", "queue", "DXN", "tryParse", "undefined", "Query", "fromAst", "options", "queues", "v", "newSchema", "newView", "View", "make", "jsonSchema", "Type", "toJsonSchema", "projection", "getSnapshot", "handleToggleField", "prevExpandedId", "handleDelete", "index", "findIndex", "l", "viewToRemove", "load", "splice", "remove", "handleAdd", "select", "Task", "push", "name", "Ref", "order", "handleColumnSave", "values", "columnIndex", "c", "div", "role", "className", "mx", "h2", "inputTextLabel", "List", "Root", "items", "isItem", "is", "getId", "onMove", "map", "Item", "key", "item", "aria-expanded", "subtleHover", "ItemDragHandle", "ItemTitle", "onClick", "ItemDeleteButton", "label", "autoHide", "data-testid", "IconButton", "iconOnly", "variant", "ns", "osTranslations", "icon", "Form", "autoSave", "onSave", "Content", "FieldSet", "ViewEditor", "ref", "mode", "readonly", "registry", "onQueryChanged"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/app-graph-builder/app-graph-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { GraphBuilder } from '@dxos/plugin-graph';\nimport { Pipeline } from '@dxos/types';\n\nimport { meta } from '../../meta';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const extensions = yield* Effect.all([\n GraphBuilder.createTypeExtension({\n id: `${meta.id}/triggers`,\n type: Pipeline.Pipeline,\n connector: (pipeline, get) => {\n const nodeId = pipeline.id;\n return Effect.succeed([\n {\n id: [nodeId, 'invocations'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'invocations',\n properties: {\n label: ['project invocations label', { ns: meta.id }],\n icon: 'ph--clock-countdown--regular',\n disposition: 'hidden',\n },\n },\n {\n id: [nodeId, 'automation'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'automation',\n properties: {\n label: ['project automation label', { ns: meta.id }],\n icon: 'ph--lightning--regular',\n disposition: 'hidden',\n },\n },\n ]);\n },\n }),\n ]);\n\n return Capability.contributes(Common.Capability.AppGraphBuilder, extensions);\n }),\n);\n"],
5
- "mappings": ";;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,YAAYC,cAAc;AACnC,SAASC,2BAA2BC,4BAA4B;AAChE,SAASC,oBAAoB;AAC7B,SAASC,gBAAgB;AAIzB,IAAA,4BAAeC,WAAWC,WACjBC,kBAAW,aAAA;AAChB,QAAMC,aAAa,OAAcC,WAAI;IACnCC,aAAaC,oBAAoB;MAC/BC,IAAI,GAAGC,KAAKD,EAAE;MACdE,MAAMC,SAASA;MACfC,WAAW,CAACC,UAAUC,QAAAA;AACpB,cAAMC,SAASF,SAASL;AACxB,eAAcQ,eAAQ;UACpB;YACER,IAAI;cAACO;cAAQ;cAAeE,KAAKC,yBAAAA;YACjCR,MAAMS;YACNC,MAAM;YACNC,YAAY;cACVC,OAAO;gBAAC;gBAA6B;kBAAEC,IAAId,KAAKD;gBAAG;;cACnDgB,MAAM;cACNC,aAAa;YACf;UACF;UACA;YACEjB,IAAI;cAACO;cAAQ;cAAcE,KAAKC,yBAAAA;YAChCR,MAAMS;YACNC,MAAM;YACNC,YAAY;cACVC,OAAO;gBAAC;gBAA4B;kBAAEC,IAAId,KAAKD;gBAAG;;cAClDgB,MAAM;cACNC,aAAa;YACf;UACF;SACD;MACH;IACF,CAAA;GACD;AAED,SAAOxB,WAAWyB,YAAYC,OAAO1B,WAAW2B,iBAAiBxB,UAAAA;AACnE,CAAA,CAAA;",
6
- "names": ["Effect", "Capability", "Common", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "GraphBuilder", "Pipeline", "Capability", "makeModule", "fnUntraced", "extensions", "all", "GraphBuilder", "createTypeExtension", "id", "meta", "type", "Pipeline", "connector", "pipeline", "get", "nodeId", "succeed", "join", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "data", "properties", "label", "ns", "icon", "disposition", "contributes", "Common", "AppGraphBuilder"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface/react-surface.tsx", "../../../src/components/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React from 'react';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { InvocationTraceContainer } from '@dxos/devtools';\nimport { Obj } from '@dxos/echo';\nimport { Layout } from '@dxos/react-ui-mosaic';\nimport { Pipeline } from '@dxos/types';\n\nimport { PipelineContainer, PipelineObjectSettings } from '../../components';\nimport { meta } from '../../meta';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Common.Capability.ReactSurface, [\n Common.createSurface({\n id: meta.id,\n role: 'article',\n filter: (data): data is { subject: Pipeline.Pipeline } => Obj.instanceOf(Pipeline.Pipeline, data.subject),\n component: ({ data, role }) => <PipelineContainer role={role} subject={data.subject} />,\n }),\n Common.createSurface({\n id: `${meta.id}/companion/invocations`,\n role: 'article',\n filter: (data): data is { companionTo: Pipeline.Pipeline } =>\n Obj.instanceOf(Pipeline.Pipeline, data.companionTo) && data.subject === 'invocations',\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 <Layout.Main role={role}>\n <InvocationTraceContainer db={db} detailAxis='block' />\n </Layout.Main>\n );\n },\n }),\n Common.createSurface({\n id: `${meta.id}/object-settings`,\n role: 'object-settings',\n filter: (data): data is { subject: Pipeline.Pipeline } => Obj.instanceOf(Pipeline.Pipeline, data.subject),\n component: ({ data }) => <PipelineObjectSettings pipeline={data.subject} />,\n }),\n ]),\n ),\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport type { PipelineContainerProps } from './PipelineContainer';\nexport type { PipelineObjectSettingsProps } from './PipelineSettings';\n\nexport const PipelineContainer = lazy(() => import('./PipelineContainer'));\nexport const PipelineObjectSettings = lazy(() => import('./PipelineSettings'));\n"],
5
- "mappings": ";;;;;AAIA,YAAYA,YAAY;AACxB,OAAOC,WAAW;AAElB,SAASC,YAAYC,cAAc;AACnC,SAASC,gCAAgC;AACzC,SAASC,WAAW;AACpB,SAASC,cAAc;AACvB,SAASC,gBAAgB;;;ACPzB,SAASC,YAAY;AAKd,IAAMC,oBAAoBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC5C,IAAMC,yBAAyBD,KAAK,MAAM,OAAO,iCAAA,CAAA;;;ADMxD,IAAA,wBAAeE,WAAWC,WAAW,MAC5BC,eACLF,WAAWG,YAAYC,OAAOJ,WAAWK,cAAc;EACrDD,OAAOE,cAAc;IACnBC,IAAIC,KAAKD;IACTE,MAAM;IACNC,QAAQ,CAACC,SAAiDC,IAAIC,WAAWC,SAASA,UAAUH,KAAKI,OAAO;IACxGC,WAAW,CAAC,EAAEL,MAAMF,KAAI,MAAO,sBAAA,cAACQ,mBAAAA;MAAkBR;MAAYM,SAASJ,KAAKI;;EAC9E,CAAA;EACAX,OAAOE,cAAc;IACnBC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPC,IAAIC,WAAWC,SAASA,UAAUH,KAAKO,WAAW,KAAKP,KAAKI,YAAY;IAC1EC,WAAW,CAAC,EAAEL,MAAMF,KAAI,MAAE;AACxB,YAAMU,KAAKP,IAAIQ,YAAYT,KAAKO,WAAW;AAE3C,aACE,sBAAA,cAACG,OAAOC,MAAI;QAACb;SACX,sBAAA,cAACc,0BAAAA;QAAyBJ;QAAQK,YAAW;;IAGnD;EACF,CAAA;EACApB,OAAOE,cAAc;IACnBC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SAAiDC,IAAIC,WAAWC,SAASA,UAAUH,KAAKI,OAAO;IACxGC,WAAW,CAAC,EAAEL,KAAI,MAAO,sBAAA,cAACc,wBAAAA;MAAuBC,UAAUf,KAAKI;;EAClE,CAAA;CACD,CAAA,CAAA;",
6
- "names": ["Effect", "React", "Capability", "Common", "InvocationTraceContainer", "Obj", "Layout", "Pipeline", "lazy", "PipelineContainer", "lazy", "PipelineObjectSettings", "Capability", "makeModule", "succeed", "contributes", "Common", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "Obj", "instanceOf", "Pipeline", "subject", "component", "PipelineContainer", "companionTo", "db", "getDatabase", "Layout", "Main", "InvocationTraceContainer", "detailAxis", "PipelineObjectSettings", "pipeline"]
7
- }