@dxos/react-ui-canvas-compute 0.8.1-main.ae460ac → 0.8.1-main.ba2dec9

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 (73) hide show
  1. package/dist/lib/browser/index.mjs +82 -31
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +231 -181
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +82 -31
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/components/DiagnosticOverlay.d.ts +2 -1
  11. package/dist/types/src/components/DiagnosticOverlay.d.ts.map +1 -1
  12. package/dist/types/src/compute.stories.d.ts +1 -1
  13. package/dist/types/src/compute.stories.d.ts.map +1 -1
  14. package/dist/types/src/hooks/index.d.ts +1 -0
  15. package/dist/types/src/hooks/index.d.ts.map +1 -1
  16. package/dist/types/src/hooks/useComputeGraphController.d.ts +10 -0
  17. package/dist/types/src/hooks/useComputeGraphController.d.ts.map +1 -0
  18. package/dist/types/src/shapes/Append.d.ts +2 -1
  19. package/dist/types/src/shapes/Append.d.ts.map +1 -1
  20. package/dist/types/src/shapes/Array.d.ts +2 -1
  21. package/dist/types/src/shapes/Array.d.ts.map +1 -1
  22. package/dist/types/src/shapes/Audio.d.ts +2 -1
  23. package/dist/types/src/shapes/Audio.d.ts.map +1 -1
  24. package/dist/types/src/shapes/Beacon.d.ts +2 -1
  25. package/dist/types/src/shapes/Beacon.d.ts.map +1 -1
  26. package/dist/types/src/shapes/Chat.d.ts +2 -1
  27. package/dist/types/src/shapes/Chat.d.ts.map +1 -1
  28. package/dist/types/src/shapes/Constant.d.ts +2 -1
  29. package/dist/types/src/shapes/Constant.d.ts.map +1 -1
  30. package/dist/types/src/shapes/Database.d.ts +2 -1
  31. package/dist/types/src/shapes/Database.d.ts.map +1 -1
  32. package/dist/types/src/shapes/Function.d.ts.map +1 -1
  33. package/dist/types/src/shapes/Gpt.d.ts +2 -1
  34. package/dist/types/src/shapes/Gpt.d.ts.map +1 -1
  35. package/dist/types/src/shapes/GptRealtime.d.ts +2 -1
  36. package/dist/types/src/shapes/GptRealtime.d.ts.map +1 -1
  37. package/dist/types/src/shapes/Json.d.ts +3 -2
  38. package/dist/types/src/shapes/Json.d.ts.map +1 -1
  39. package/dist/types/src/shapes/Logic.d.ts +3 -2
  40. package/dist/types/src/shapes/Logic.d.ts.map +1 -1
  41. package/dist/types/src/shapes/Queue.d.ts +3 -2
  42. package/dist/types/src/shapes/Queue.d.ts.map +1 -1
  43. package/dist/types/src/shapes/RNG.d.ts +2 -1
  44. package/dist/types/src/shapes/RNG.d.ts.map +1 -1
  45. package/dist/types/src/shapes/Scope.d.ts +2 -1
  46. package/dist/types/src/shapes/Scope.d.ts.map +1 -1
  47. package/dist/types/src/shapes/Surface.d.ts +2 -1
  48. package/dist/types/src/shapes/Surface.d.ts.map +1 -1
  49. package/dist/types/src/shapes/Switch.d.ts +2 -1
  50. package/dist/types/src/shapes/Switch.d.ts.map +1 -1
  51. package/dist/types/src/shapes/Table.d.ts +2 -1
  52. package/dist/types/src/shapes/Table.d.ts.map +1 -1
  53. package/dist/types/src/shapes/Text.d.ts +2 -1
  54. package/dist/types/src/shapes/Text.d.ts.map +1 -1
  55. package/dist/types/src/shapes/TextToImage.d.ts +2 -1
  56. package/dist/types/src/shapes/TextToImage.d.ts.map +1 -1
  57. package/dist/types/src/shapes/Thread.d.ts +3 -2
  58. package/dist/types/src/shapes/Thread.d.ts.map +1 -1
  59. package/dist/types/src/shapes/Trigger.d.ts +4 -3
  60. package/dist/types/src/shapes/Trigger.d.ts.map +1 -1
  61. package/dist/types/src/shapes/common/FunctionBody.d.ts +1 -1
  62. package/dist/types/src/shapes/common/FunctionBody.d.ts.map +1 -1
  63. package/dist/types/src/shapes/common/TypeSelect.d.ts +2 -1
  64. package/dist/types/src/shapes/common/TypeSelect.d.ts.map +1 -1
  65. package/dist/types/src/testing/circuits.d.ts +19 -3
  66. package/dist/types/src/testing/circuits.d.ts.map +1 -1
  67. package/package.json +40 -40
  68. package/src/compute.stories.tsx +4 -50
  69. package/src/hooks/index.ts +1 -0
  70. package/src/hooks/useComputeGraphController.ts +65 -0
  71. package/src/shapes/Function.tsx +1 -1
  72. package/src/shapes/Trigger.tsx +1 -1
  73. package/src/testing/circuits.ts +4 -1
@@ -10,7 +10,6 @@ import React, { type PropsWithChildren, useEffect, useMemo, useRef, useState } f
10
10
  import { withPluginManager } from '@dxos/app-framework/testing';
11
11
  import { capabilities, createEdgeServices } from '@dxos/artifact-testing';
12
12
  import { OllamaClient } from '@dxos/assistant';
13
- import { type UnsubscribeCallback } from '@dxos/async';
14
13
  import { EdgeGpt, type ComputeGraphModel, type ComputeNode, type GraphDiagnostic } from '@dxos/conductor';
15
14
  import { withClientProvider } from '@dxos/react-client/testing';
16
15
  import { Select, Toolbar } from '@dxos/react-ui';
@@ -23,7 +22,7 @@ import { withLayout, withTheme } from '@dxos/storybook-utils';
23
22
  import { DiagnosticOverlay } from './components';
24
23
  import { ComputeShapeLayout } from './compute-layout';
25
24
  import { type ComputeGraphController } from './graph';
26
- import { ComputeContext, useGraphMonitor } from './hooks';
25
+ import { ComputeContext, useComputeGraphController, useGraphMonitor } from './hooks';
27
26
  import { computeShapes } from './registry';
28
27
  import { type ComputeShape } from './shapes';
29
28
  import {
@@ -43,35 +42,24 @@ import {
43
42
 
44
43
  const sidebarTypes: NonNullable<RenderProps['sidebar']>[] = ['canvas', 'compute', 'controller', 'selected'] as const;
45
44
 
46
- // TODO(burdon): Move to async/context?
47
- const combine = (...cbs: UnsubscribeCallback[]) => {
48
- return () => {
49
- for (const cb of cbs) {
50
- cb();
51
- }
52
- };
53
- };
54
-
55
45
  type RenderProps = EditorRootProps<ComputeShape> &
56
46
  PropsWithChildren<{
57
47
  init?: boolean;
58
48
  sidebar?: 'canvas' | 'compute' | 'controller' | 'selected';
59
49
  computeGraph?: ComputeGraphModel;
60
- controller?: ComputeGraphController;
50
+ controller?: ComputeGraphController | null;
61
51
  }>;
62
52
 
63
53
  const Render = ({
64
54
  id = 'test',
65
55
  children,
66
56
  graph,
67
- controller,
57
+ controller = null,
68
58
  init,
69
59
  sidebar: _sidebar,
70
60
  registry,
71
61
  ...props
72
62
  }: RenderProps) => {
73
- const [, forceUpdate] = useState({});
74
-
75
63
  const editorRef = useRef<EditorController>(null);
76
64
 
77
65
  // Selection.
@@ -102,41 +90,7 @@ const Render = ({
102
90
  }, [graph, controller, sidebar, selected]);
103
91
 
104
92
  // Controller.
105
- useEffect(() => {
106
- if (!controller || !graph) {
107
- return;
108
- }
109
-
110
- void controller.open();
111
- const off = combine(
112
- controller.update.on(() => {
113
- void editorRef.current?.update();
114
- forceUpdate({});
115
- }),
116
-
117
- // TODO(burdon): Every node is called on every update.
118
- controller.output.on(({ nodeId, property, value }) => {
119
- if (value.type === 'not-executed') {
120
- // If the node didn't execute, don't trigger.
121
- return;
122
- }
123
-
124
- const edge = graph.edges.find((edge) => {
125
- const source = graph.getNode(edge.source);
126
- return (source as ComputeShape).node === nodeId && edge.output === property;
127
- });
128
-
129
- if (edge) {
130
- void editorRef.current?.action?.({ type: 'trigger', edges: [edge] });
131
- }
132
- }),
133
- );
134
-
135
- return () => {
136
- void controller.close();
137
- off();
138
- };
139
- }, [graph, controller]);
93
+ useComputeGraphController({ controller, graph, editorRef });
140
94
 
141
95
  // Sync monitor.
142
96
  const graphMonitor = useGraphMonitor(controller?.graph);
@@ -3,5 +3,6 @@
3
3
  //
4
4
 
5
5
  export * from './compute-context';
6
+ export * from './useComputeGraphController';
6
7
  export * from './useComputeNodeState';
7
8
  export * from './useGraphMonitor';
@@ -0,0 +1,65 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type RefObject, useEffect, useState } from 'react';
6
+
7
+ import { type UnsubscribeCallback } from '@dxos/async';
8
+ import { type EditorRootProps, type EditorController } from '@dxos/react-ui-canvas-editor';
9
+
10
+ import { type ComputeGraphController } from '../graph';
11
+ import { type ComputeShape } from '../shapes';
12
+
13
+ // TODO(burdon): Move to async/context?
14
+ const combine = (...cbs: UnsubscribeCallback[]) => {
15
+ return () => {
16
+ for (const cb of cbs) {
17
+ cb();
18
+ }
19
+ };
20
+ };
21
+
22
+ export type UseComputeGraphControllerOptions = Pick<EditorRootProps<ComputeShape>, 'graph'> & {
23
+ controller: ComputeGraphController | null;
24
+ editorRef: RefObject<EditorController>;
25
+ };
26
+
27
+ export const useComputeGraphController = ({ controller, graph, editorRef }: UseComputeGraphControllerOptions) => {
28
+ const [, forceUpdate] = useState({});
29
+
30
+ useEffect(() => {
31
+ if (!controller || !graph) {
32
+ return;
33
+ }
34
+
35
+ void controller.open();
36
+ const off = combine(
37
+ controller.update.on(() => {
38
+ void editorRef.current?.update();
39
+ forceUpdate({});
40
+ }),
41
+
42
+ // TODO(burdon): Every node is called on every update.
43
+ controller.output.on(({ nodeId, property, value }) => {
44
+ if (value.type === 'not-executed') {
45
+ // If the node didn't execute, don't trigger.
46
+ return;
47
+ }
48
+
49
+ const edge = graph.edges.find((edge) => {
50
+ const source = graph.getNode(edge.source);
51
+ return (source as ComputeShape).node === nodeId && edge.output === property;
52
+ });
53
+
54
+ if (edge) {
55
+ void editorRef.current?.action?.({ type: 'trigger', edges: [edge] });
56
+ }
57
+ }),
58
+ );
59
+
60
+ return () => {
61
+ void controller.close();
62
+ off();
63
+ };
64
+ }, [graph, controller]);
65
+ };
@@ -6,7 +6,7 @@ import React, { useCallback, useRef } from 'react';
6
6
 
7
7
  import { AnyOutput, FunctionInput } from '@dxos/conductor';
8
8
  import { getSnapshot, S } from '@dxos/echo-schema';
9
- import { FunctionType, ScriptType } from '@dxos/functions';
9
+ import { FunctionType, ScriptType } from '@dxos/functions/types';
10
10
  import { useClient } from '@dxos/react-client';
11
11
  import { Filter, makeRef, parseId } from '@dxos/react-client/echo';
12
12
  import {
@@ -22,7 +22,7 @@ import {
22
22
  TriggerKind,
23
23
  type TriggerType,
24
24
  type WebhookTrigger,
25
- } from '@dxos/functions';
25
+ } from '@dxos/functions/types';
26
26
  import { DXN, SpaceId } from '@dxos/keys';
27
27
  import { create, makeRef, useSpace } from '@dxos/react-client/echo';
28
28
  import { Select, type SelectRootProps } from '@dxos/react-ui';
@@ -37,7 +37,10 @@ import {
37
37
  createTemplate,
38
38
  } from '../shapes';
39
39
 
40
- export const createComputeGraphController = (graph?: CanvasGraphModel<ComputeShape>, services?: Partial<Services>) => {
40
+ export const createComputeGraphController = (
41
+ graph = CanvasGraphModel.create<ComputeShape>(),
42
+ services?: Partial<Services>,
43
+ ) => {
41
44
  const computeGraph = createComputeGraph(graph);
42
45
  const controller = new ComputeGraphController(computeGraph);
43
46
  controller.setServices(services ?? {});