@memberjunction/ng-task-graph-editor 6.1.0-edge.2 → 6.1.0-edge.3

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 (55) hide show
  1. package/LICENSE +180 -4
  2. package/README.md +197 -0
  3. package/dist/lib/debug-variables.d.ts +27 -0
  4. package/dist/lib/debug-variables.d.ts.map +1 -0
  5. package/dist/lib/debug-variables.js +96 -0
  6. package/dist/lib/debug-variables.js.map +1 -0
  7. package/dist/lib/pane-split.d.ts +11 -0
  8. package/dist/lib/pane-split.d.ts.map +1 -0
  9. package/dist/lib/pane-split.js +36 -0
  10. package/dist/lib/pane-split.js.map +1 -0
  11. package/dist/lib/task-graph-canvas-adapter.d.ts +41 -3
  12. package/dist/lib/task-graph-canvas-adapter.d.ts.map +1 -1
  13. package/dist/lib/task-graph-canvas-adapter.js +175 -36
  14. package/dist/lib/task-graph-canvas-adapter.js.map +1 -1
  15. package/dist/lib/task-graph-debug-toolbar.component.d.ts +27 -0
  16. package/dist/lib/task-graph-debug-toolbar.component.d.ts.map +1 -0
  17. package/dist/lib/task-graph-debug-toolbar.component.js +153 -0
  18. package/dist/lib/task-graph-debug-toolbar.component.js.map +1 -0
  19. package/dist/lib/task-graph-debugger.component.d.ts +96 -0
  20. package/dist/lib/task-graph-debugger.component.d.ts.map +1 -0
  21. package/dist/lib/task-graph-debugger.component.js +371 -0
  22. package/dist/lib/task-graph-debugger.component.js.map +1 -0
  23. package/dist/lib/task-graph-editor.component.d.ts +40 -3
  24. package/dist/lib/task-graph-editor.component.d.ts.map +1 -1
  25. package/dist/lib/task-graph-editor.component.js +83 -10
  26. package/dist/lib/task-graph-editor.component.js.map +1 -1
  27. package/dist/lib/task-graph-editor.module.d.ts +9 -5
  28. package/dist/lib/task-graph-editor.module.d.ts.map +1 -1
  29. package/dist/lib/task-graph-editor.module.js +52 -5
  30. package/dist/lib/task-graph-editor.module.js.map +1 -1
  31. package/dist/lib/task-graph-run-prefs.d.ts +34 -0
  32. package/dist/lib/task-graph-run-prefs.d.ts.map +1 -0
  33. package/dist/lib/task-graph-run-prefs.js +67 -0
  34. package/dist/lib/task-graph-run-prefs.js.map +1 -0
  35. package/dist/lib/task-graph-run-view.component.d.ts +180 -3
  36. package/dist/lib/task-graph-run-view.component.d.ts.map +1 -1
  37. package/dist/lib/task-graph-run-view.component.js +560 -23
  38. package/dist/lib/task-graph-run-view.component.js.map +1 -1
  39. package/dist/lib/task-graph-runtime-source.d.ts +7 -1
  40. package/dist/lib/task-graph-runtime-source.d.ts.map +1 -1
  41. package/dist/lib/task-graph-runtime-source.js +14 -2
  42. package/dist/lib/task-graph-runtime-source.js.map +1 -1
  43. package/dist/lib/task-graph-variables.component.d.ts +23 -0
  44. package/dist/lib/task-graph-variables.component.d.ts.map +1 -0
  45. package/dist/lib/task-graph-variables.component.js +192 -0
  46. package/dist/lib/task-graph-variables.component.js.map +1 -0
  47. package/dist/lib/workflow-debug-host.d.ts +23 -0
  48. package/dist/lib/workflow-debug-host.d.ts.map +1 -0
  49. package/dist/lib/workflow-debug-host.js +101 -0
  50. package/dist/lib/workflow-debug-host.js.map +1 -0
  51. package/dist/public-api.d.ts +7 -0
  52. package/dist/public-api.d.ts.map +1 -1
  53. package/dist/public-api.js +7 -0
  54. package/dist/public-api.js.map +1 -1
  55. package/package.json +11 -10
@@ -1 +1 @@
1
- {"version":3,"file":"task-graph-editor.module.js","sourceRoot":"","sources":["../../src/lib/task-graph-editor.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAE9G,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,iCAAiC,EAAE,MAAM,yCAAyC,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;;AAO5E,MAAM,OAAO,qBAAqB;+GAArB,qBAAqB;4DAArB,qBAAqB;gEAHtB,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB;;iFAGnF,qBAAqB;cALjC,QAAQ;eAAC;gBACR,YAAY,EAAE,CAAC,wBAAwB,EAAE,iCAAiC,EAAE,yBAAyB,CAAC;gBACtG,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;gBAClH,OAAO,EAAE,CAAC,wBAAwB,EAAE,iCAAiC,EAAE,yBAAyB,CAAC;aAClG;;wFACY,qBAAqB,mBAJjB,wBAAwB,EAAE,iCAAiC,EAAE,yBAAyB,aAC3F,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,iBAAiB,aACvG,wBAAwB,EAAE,iCAAiC,EAAE,yBAAyB","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FlowEditorModule } from '@memberjunction/ng-flow-editor';\nimport { MJEmptyStateComponent, MJAlertComponent, MJButtonDirective } from '@memberjunction/ng-ui-components';\n\nimport { TaskGraphEditorComponent } from './task-graph-editor.component';\nimport { TaskGraphPropertiesPanelComponent } from './task-graph-properties-panel.component';\nimport { TaskGraphRunViewComponent } from './task-graph-run-view.component';\n\n@NgModule({\n declarations: [TaskGraphEditorComponent, TaskGraphPropertiesPanelComponent, TaskGraphRunViewComponent],\n imports: [CommonModule, FormsModule, FlowEditorModule, MJEmptyStateComponent, MJAlertComponent, MJButtonDirective],\n exports: [TaskGraphEditorComponent, TaskGraphPropertiesPanelComponent, TaskGraphRunViewComponent],\n})\nexport class TaskGraphEditorModule {}\n"]}
1
+ {"version":3,"file":"task-graph-editor.module.js","sourceRoot":"","sources":["../../src/lib/task-graph-editor.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,iCAAiC,EAAE,MAAM,yCAAyC,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;;AA6B7E,MAAM,OAAO,qBAAqB;+GAArB,qBAAqB;4DAArB,qBAAqB;gEAnB9B,YAAY;YACZ,WAAW;YACX,gBAAgB;YAChB,qBAAqB;YACrB,gBAAgB;YAEhB,kBAAkB;;iFAaT,qBAAqB;cA3BjC,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,wBAAwB;oBACxB,iCAAiC;oBACjC,yBAAyB;oBACzB,0BAA0B;iBAC3B;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,gBAAgB;oBAChB,qBAAqB;oBACrB,gBAAgB;oBAChB,iBAAiB;oBACjB,kBAAkB;oBAClB,8BAA8B;oBAC9B,2BAA2B;iBAC5B;gBACD,OAAO,EAAE;oBACP,wBAAwB;oBACxB,iCAAiC;oBACjC,yBAAyB;oBACzB,8BAA8B;oBAC9B,2BAA2B;oBAC3B,0BAA0B;iBAC3B;aACF;;wFACY,qBAAqB,mBAzB9B,wBAAwB;QACxB,iCAAiC;QACjC,yBAAyB;QACzB,0BAA0B,aAG1B,YAAY;QACZ,WAAW;QACX,gBAAgB;QAChB,qBAAqB;QACrB,gBAAgB;QAChB,iBAAiB;QACjB,kBAAkB;QAClB,8BAA8B;QAC9B,2BAA2B,aAG3B,wBAAwB;QACxB,iCAAiC;QACjC,yBAAyB;QACzB,8BAA8B;QAC9B,2BAA2B;QAC3B,0BAA0B","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FlowEditorModule } from '@memberjunction/ng-flow-editor';\nimport { MJEmptyStateComponent, MJAlertComponent, MJButtonDirective } from '@memberjunction/ng-ui-components';\nimport { AngularSplitModule } from 'angular-split';\n\nimport { TaskGraphEditorComponent } from './task-graph-editor.component';\nimport { TaskGraphPropertiesPanelComponent } from './task-graph-properties-panel.component';\nimport { TaskGraphRunViewComponent } from './task-graph-run-view.component';\nimport { TaskGraphDebugToolbarComponent } from './task-graph-debug-toolbar.component';\nimport { TaskGraphVariablesComponent } from './task-graph-variables.component';\nimport { TaskGraphDebuggerComponent } from './task-graph-debugger.component';\n\n@NgModule({\n declarations: [\n TaskGraphEditorComponent,\n TaskGraphPropertiesPanelComponent,\n TaskGraphRunViewComponent,\n TaskGraphDebuggerComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n FlowEditorModule,\n MJEmptyStateComponent,\n MJAlertComponent,\n MJButtonDirective,\n AngularSplitModule,\n TaskGraphDebugToolbarComponent,\n TaskGraphVariablesComponent,\n ],\n exports: [\n TaskGraphEditorComponent,\n TaskGraphPropertiesPanelComponent,\n TaskGraphRunViewComponent,\n TaskGraphDebugToolbarComponent,\n TaskGraphVariablesComponent,\n TaskGraphDebuggerComponent,\n ],\n})\nexport class TaskGraphEditorModule {}\n"]}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * One persisted bag for the run-view chrome the person can resize.
3
+ *
4
+ * A single `MJ: User Settings` key holds a JSON object so adding a field later is a merge, not a
5
+ * new key — and every field is typed. Size and openness stay separate properties on purpose:
6
+ * minimizing the data pane and opening it again must restore the width they dragged to.
7
+ */
8
+ import { type PaneSizePair } from './pane-split';
9
+ export declare const TASK_GRAPH_RUN_PREFS_KEY = "mj.taskGraphRun.prefs.v1";
10
+ export interface TaskGraphRunPrefs {
11
+ /** Left invocation / output pane is expanded. Default minimized. */
12
+ InvocationOpen: boolean;
13
+ /** `[invocation, canvas]` percentages while the left pane is open. */
14
+ InvocationSplit: PaneSizePair;
15
+ }
16
+ export declare const DEFAULT_TASK_GRAPH_RUN_PREFS: TaskGraphRunPrefs;
17
+ export type TaskGraphRunPrefsSettingsPort = {
18
+ Get(key: string): string | undefined;
19
+ Set(key: string, value: string): void;
20
+ };
21
+ /** Merge a stored bag onto defaults. Unknown or partial JSON is never fatal. */
22
+ export declare function ParseTaskGraphRunPrefs(raw: string | undefined): TaskGraphRunPrefs;
23
+ export declare function SerializeTaskGraphRunPrefs(prefs: TaskGraphRunPrefs): string;
24
+ /** Restore / write the bag through a settings port so the rules can be unit-tested. */
25
+ export declare class TaskGraphRunPrefsStore {
26
+ private readonly settings;
27
+ Value: TaskGraphRunPrefs;
28
+ constructor(settings: TaskGraphRunPrefsSettingsPort);
29
+ Restore(): void;
30
+ SetInvocationOpen(open: boolean): void;
31
+ SetInvocationSplit(pair: PaneSizePair): void;
32
+ private persist;
33
+ }
34
+ //# sourceMappingURL=task-graph-run-prefs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-graph-run-prefs.d.ts","sourceRoot":"","sources":["../../src/lib/task-graph-run-prefs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjE,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAC9B,oEAAoE;IACpE,cAAc,EAAE,OAAO,CAAC;IACxB,sEAAsE;IACtE,eAAe,EAAE,YAAY,CAAC;CACjC;AAED,eAAO,MAAM,4BAA4B,EAAE,iBAG1C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IACxC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC,CAAC;AASF,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,CAgBjF;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAE3E;AAED,uFAAuF;AACvF,qBAAa,sBAAsB;IAGnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAF9B,KAAK,EAAE,iBAAiB,CAAkB;gBAEpB,QAAQ,EAAE,6BAA6B;IAE7D,OAAO,IAAI,IAAI;IAIf,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAKtC,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAKnD,OAAO,CAAC,OAAO;CAGlB"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * One persisted bag for the run-view chrome the person can resize.
3
+ *
4
+ * A single `MJ: User Settings` key holds a JSON object so adding a field later is a merge, not a
5
+ * new key — and every field is typed. Size and openness stay separate properties on purpose:
6
+ * minimizing the data pane and opening it again must restore the width they dragged to.
7
+ */
8
+ import { AsPaneSizePair } from './pane-split';
9
+ export const TASK_GRAPH_RUN_PREFS_KEY = 'mj.taskGraphRun.prefs.v1';
10
+ export const DEFAULT_TASK_GRAPH_RUN_PREFS = {
11
+ InvocationOpen: false,
12
+ InvocationSplit: [22, 78],
13
+ };
14
+ function copyDefaults() {
15
+ return {
16
+ InvocationOpen: DEFAULT_TASK_GRAPH_RUN_PREFS.InvocationOpen,
17
+ InvocationSplit: [...DEFAULT_TASK_GRAPH_RUN_PREFS.InvocationSplit],
18
+ };
19
+ }
20
+ /** Merge a stored bag onto defaults. Unknown or partial JSON is never fatal. */
21
+ export function ParseTaskGraphRunPrefs(raw) {
22
+ const next = copyDefaults();
23
+ if (!raw)
24
+ return next;
25
+ try {
26
+ const parsed = JSON.parse(raw);
27
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
28
+ return next;
29
+ const obj = parsed;
30
+ if (typeof obj['InvocationOpen'] === 'boolean') {
31
+ next.InvocationOpen = obj['InvocationOpen'];
32
+ }
33
+ const split = AsPaneSizePair(obj['InvocationSplit']);
34
+ if (split)
35
+ next.InvocationSplit = split;
36
+ return next;
37
+ }
38
+ catch {
39
+ return next;
40
+ }
41
+ }
42
+ export function SerializeTaskGraphRunPrefs(prefs) {
43
+ return JSON.stringify(prefs);
44
+ }
45
+ /** Restore / write the bag through a settings port so the rules can be unit-tested. */
46
+ export class TaskGraphRunPrefsStore {
47
+ settings;
48
+ Value = copyDefaults();
49
+ constructor(settings) {
50
+ this.settings = settings;
51
+ }
52
+ Restore() {
53
+ this.Value = ParseTaskGraphRunPrefs(this.settings.Get(TASK_GRAPH_RUN_PREFS_KEY));
54
+ }
55
+ SetInvocationOpen(open) {
56
+ this.Value = { ...this.Value, InvocationOpen: open };
57
+ this.persist();
58
+ }
59
+ SetInvocationSplit(pair) {
60
+ this.Value = { ...this.Value, InvocationSplit: pair };
61
+ this.persist();
62
+ }
63
+ persist() {
64
+ this.settings.Set(TASK_GRAPH_RUN_PREFS_KEY, SerializeTaskGraphRunPrefs(this.Value));
65
+ }
66
+ }
67
+ //# sourceMappingURL=task-graph-run-prefs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-graph-run-prefs.js","sourceRoot":"","sources":["../../src/lib/task-graph-run-prefs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,cAAc,EAAqB,MAAM,cAAc,CAAC;AAEjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AASnE,MAAM,CAAC,MAAM,4BAA4B,GAAsB;IAC3D,cAAc,EAAE,KAAK;IACrB,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;CAC5B,CAAC;AAOF,SAAS,YAAY;IACjB,OAAO;QACH,cAAc,EAAE,4BAA4B,CAAC,cAAc;QAC3D,eAAe,EAAE,CAAC,GAAG,4BAA4B,CAAC,eAAe,CAAC;KACrE,CAAC;AACN,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,sBAAsB,CAAC,GAAuB;IAC1D,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAChF,MAAM,GAAG,GAAG,MAAiC,CAAC;QAC9C,IAAI,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7C,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACrD,IAAI,KAAK;YAAE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QACxC,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAwB;IAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,uFAAuF;AACvF,MAAM,OAAO,sBAAsB;IAGF;IAFtB,KAAK,GAAsB,YAAY,EAAE,CAAC;IAEjD,YAA6B,QAAuC;QAAvC,aAAQ,GAAR,QAAQ,CAA+B;IAAG,CAAC;IAEjE,OAAO;QACV,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACrF,CAAC;IAEM,iBAAiB,CAAC,IAAa;QAClC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAEM,kBAAkB,CAAC,IAAkB;QACxC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAEO,OAAO;QACX,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,wBAAwB,EAAE,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACxF,CAAC;CACJ","sourcesContent":["/**\n * One persisted bag for the run-view chrome the person can resize.\n *\n * A single `MJ: User Settings` key holds a JSON object so adding a field later is a merge, not a\n * new key — and every field is typed. Size and openness stay separate properties on purpose:\n * minimizing the data pane and opening it again must restore the width they dragged to.\n */\nimport { AsPaneSizePair, type PaneSizePair } from './pane-split';\n\nexport const TASK_GRAPH_RUN_PREFS_KEY = 'mj.taskGraphRun.prefs.v1';\n\nexport interface TaskGraphRunPrefs {\n /** Left invocation / output pane is expanded. Default minimized. */\n InvocationOpen: boolean;\n /** `[invocation, canvas]` percentages while the left pane is open. */\n InvocationSplit: PaneSizePair;\n}\n\nexport const DEFAULT_TASK_GRAPH_RUN_PREFS: TaskGraphRunPrefs = {\n InvocationOpen: false,\n InvocationSplit: [22, 78],\n};\n\nexport type TaskGraphRunPrefsSettingsPort = {\n Get(key: string): string | undefined;\n Set(key: string, value: string): void;\n};\n\nfunction copyDefaults(): TaskGraphRunPrefs {\n return {\n InvocationOpen: DEFAULT_TASK_GRAPH_RUN_PREFS.InvocationOpen,\n InvocationSplit: [...DEFAULT_TASK_GRAPH_RUN_PREFS.InvocationSplit],\n };\n}\n\n/** Merge a stored bag onto defaults. Unknown or partial JSON is never fatal. */\nexport function ParseTaskGraphRunPrefs(raw: string | undefined): TaskGraphRunPrefs {\n const next = copyDefaults();\n if (!raw) return next;\n try {\n const parsed: unknown = JSON.parse(raw);\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return next;\n const obj = parsed as Record<string, unknown>;\n if (typeof obj['InvocationOpen'] === 'boolean') {\n next.InvocationOpen = obj['InvocationOpen'];\n }\n const split = AsPaneSizePair(obj['InvocationSplit']);\n if (split) next.InvocationSplit = split;\n return next;\n } catch {\n return next;\n }\n}\n\nexport function SerializeTaskGraphRunPrefs(prefs: TaskGraphRunPrefs): string {\n return JSON.stringify(prefs);\n}\n\n/** Restore / write the bag through a settings port so the rules can be unit-tested. */\nexport class TaskGraphRunPrefsStore {\n public Value: TaskGraphRunPrefs = copyDefaults();\n\n constructor(private readonly settings: TaskGraphRunPrefsSettingsPort) {}\n\n public Restore(): void {\n this.Value = ParseTaskGraphRunPrefs(this.settings.Get(TASK_GRAPH_RUN_PREFS_KEY));\n }\n\n public SetInvocationOpen(open: boolean): void {\n this.Value = { ...this.Value, InvocationOpen: open };\n this.persist();\n }\n\n public SetInvocationSplit(pair: PaneSizePair): void {\n this.Value = { ...this.Value, InvocationSplit: pair };\n this.persist();\n }\n\n private persist(): void {\n this.settings.Set(TASK_GRAPH_RUN_PREFS_KEY, SerializeTaskGraphRunPrefs(this.Value));\n }\n}\n"]}
@@ -19,9 +19,11 @@
19
19
  import { ChangeDetectorRef, EventEmitter, OnDestroy } from '@angular/core';
20
20
  import { BaseAngularComponent } from '@memberjunction/ng-base-types';
21
21
  import { MJTaskEntity } from '@memberjunction/core-entities';
22
+ import { type TaskGraphRunPrefs } from './task-graph-run-prefs';
22
23
  import { type GraphNodePosition, type TaskGraphSpec } from '@memberjunction/ai-core-plus';
23
- import type { TaskGraphRuntimeStatus } from './task-graph-canvas-adapter';
24
+ import type { TaskGraphDebugOverlay, TaskGraphRuntimeStatus } from './task-graph-canvas-adapter';
24
25
  import type { TaskGraphSelectionChangedEventArgs } from './task-graph-editor-events';
26
+ import type { FlowAfterContextMenuActionEventArgs, FlowBeforeContextMenuEventArgs, FlowConnection, FlowToolbarAlign, FlowToolbarVisibility } from '@memberjunction/ng-flow-editor';
25
27
  import * as i0 from "@angular/core";
26
28
  /** What the host learns when someone clicks a step. */
27
29
  export type TaskGraphRunNodeSelectedEvent = {
@@ -29,6 +31,41 @@ export type TaskGraphRunNodeSelectedEvent = {
29
31
  TaskID: string;
30
32
  Task: MJTaskEntity | null;
31
33
  };
34
+ /** What the host learns when someone clicks a path. */
35
+ export type TaskGraphRunConnectionSelectedEvent = {
36
+ /** The `MJ: Task Dependencies` row id, when the projection carried one. */
37
+ EdgeID: string | null;
38
+ FromTaskID: string;
39
+ ToTaskID: string;
40
+ Condition?: string;
41
+ };
42
+ /**
43
+ * One live dispatcher frame, as the HOST hands it in.
44
+ *
45
+ * Structural on purpose: the widget must not import the transport (`GraphQLDataProvider`'s
46
+ * `TaskGraphFrameEvent` satisfies this shape as-is), and the host owns the subscription — this
47
+ * component only renders what it is handed, which is the widgets-layer rule that keeps it embeddable
48
+ * anywhere. Fields beyond these are ignored, so a newer server cannot break an older widget.
49
+ */
50
+ export type TaskGraphRunFrame = {
51
+ kind: string;
52
+ taskId?: string;
53
+ taskName?: string;
54
+ status?: string;
55
+ progressMessage?: string;
56
+ progressPercent?: number;
57
+ reason?: string;
58
+ edgeId?: string;
59
+ dependsOnTaskId?: string;
60
+ conditionText?: string;
61
+ claimEvent?: string;
62
+ claimedBy?: string;
63
+ verdict?: string;
64
+ passNumber?: number;
65
+ eligibleCount?: number;
66
+ heldCount?: number;
67
+ claimedCount?: number;
68
+ };
32
69
  export declare class TaskGraphRunViewComponent extends BaseAngularComponent implements OnDestroy {
33
70
  private cdr;
34
71
  /**
@@ -52,9 +89,110 @@ export declare class TaskGraphRunViewComponent extends BaseAngularComponent impl
52
89
  PollIntervalSeconds: number;
53
90
  /** Height of the canvas. Hosts embed this in very different amounts of space. */
54
91
  Height: string;
92
+ /**
93
+ * Whether the canvas legend shows. **Off by default here**, unlike the editor.
94
+ *
95
+ * The legend explains the authoring vocabulary — what a conditional edge means, what a duplicate
96
+ * default looks like. That is what someone drawing a graph needs. A run view answers a different
97
+ * question, "what happened", which the legend helps with not at all while covering a corner of
98
+ * the canvas the graph is usually occupying.
99
+ */
100
+ ShowLegend: boolean;
101
+ /**
102
+ * Whether the canvas toolbar rides above the graph.
103
+ *
104
+ * Debug and other run hosts leave this on and set `ToolbarVisibility` to `minimized` so the
105
+ * graph is the picture, not a floating tool strip. The chip in the corner restores the bar.
106
+ */
107
+ ShowToolbar: boolean;
108
+ ToolbarVisibility: FlowToolbarVisibility;
109
+ ToolbarAlign: FlowToolbarAlign;
110
+ /**
111
+ * The latest live dispatcher frame, handed in by the host.
112
+ *
113
+ * The host owns the subscription (`GraphQLDataProvider.TaskGraphFrames` or anything shaped like
114
+ * it) and binds each arrival here; the widget folds it into the overlay. Frames are advisory —
115
+ * a task frame patches the node's status in place for sub-second feedback, and the frames that
116
+ * imply CASCADES (a skip, a block, settlement) trigger a debounced row reload, because the
117
+ * dispatcher's propagation writes rows this component cannot infer from one frame. Rows remain
118
+ * the truth; the existing poll (if enabled) remains the safety net.
119
+ */
120
+ set LiveFrame(frame: TaskGraphRunFrame | null);
121
+ /**
122
+ * Replay: render the run as it stood at this moment, reconstructed from each step's
123
+ * `StartedAt`/`CompletedAt`. Null (the default) renders the present. A step that had not
124
+ * started reads Pending; one mid-flight reads In Progress; one already finished reads its
125
+ * final status — the same three answers the rows would have given a viewer at that time.
126
+ */
127
+ set ReplayAt(value: Date | null);
128
+ get ReplayAt(): Date | null;
129
+ /**
130
+ * Armed breakpoint task IDs, from the parent row's `$.debug.breakpoints`. Empty by default so
131
+ * embeds (agent-run timeline, test harness) never grow debugger chrome they did not ask for.
132
+ */
133
+ set Breakpoints(value: readonly string[]);
134
+ get Breakpoints(): readonly string[];
135
+ /** The step a breakpoint actually stopped on. */
136
+ set PausedAtTaskID(value: string | null);
137
+ get PausedAtTaskID(): string | null;
138
+ /**
139
+ * The graph is claim-gated. Combined with `PausedAtTaskID` so start-paused (no specific
140
+ * step yet) can still light the entry node as waiting.
141
+ */
142
+ set GraphPaused(value: boolean);
143
+ get GraphPaused(): boolean;
144
+ /** Operator-forced edge verdicts, keyed by `MJ: Task Dependencies` row ID. */
145
+ set EdgeOverrides(value: Readonly<Record<string, 'true' | 'false'>>);
146
+ get EdgeOverrides(): Readonly<Record<string, 'true' | 'false'>>;
147
+ /**
148
+ * Whether this host may arm/disarm breakpoints from the selected-step control.
149
+ * Off by default — the run view also renders where those controls would be wrong.
150
+ */
151
+ AllowBreakpointEditing: boolean;
152
+ /** Compact debug key under the summary line. Off unless the host is a debugger. */
153
+ ShowDebugLegend: boolean;
154
+ /** VS Code VARIABLES pane to the left of the canvas. Off unless the host is debugging. */
155
+ ShowVariables: boolean;
156
+ /** The parent bag's `data` / `context` roots, for the Invocation scope. */
157
+ Invocation: {
158
+ data?: unknown;
159
+ context?: unknown;
160
+ } | null;
55
161
  NodeSelected: EventEmitter<TaskGraphRunNodeSelectedEvent>;
162
+ /** The legend was toggled from the toolbar, so a host can remember the choice. */
163
+ LegendToggled: EventEmitter<boolean>;
56
164
  /** Emitted once, when every step has reached a terminal status. */
57
165
  Settled: EventEmitter<void>;
166
+ /** A connection was clicked. `EdgeID` is the dependency row id when the projection carried one. */
167
+ ConnectionSelected: EventEmitter<TaskGraphRunConnectionSelectedEvent>;
168
+ /** Intent only — the host owns `SetBreakpoints`. */
169
+ BreakpointToggled: EventEmitter<{
170
+ TaskID: string;
171
+ Enabled: boolean;
172
+ }>;
173
+ /** Intent only — the host owns `OverrideEdge`. */
174
+ EdgeOverrideRequested: EventEmitter<{
175
+ EdgeID: string;
176
+ Verdict: "true" | "false" | null;
177
+ }>;
178
+ /** What each running step says it is doing, from `NodeProgress` frames. Keyed by task row id. */
179
+ LiveActivity: Map<string, {
180
+ Message: string;
181
+ Percent?: number;
182
+ }>;
183
+ /** The last step the person selected, so the breakpoint control has a target. */
184
+ SelectedTaskID: string | null;
185
+ /** Stable overlay object — rebuilt only when debug inputs change, so the editor does not re-project every CD cycle. */
186
+ Overlay: TaskGraphDebugOverlay;
187
+ private breakpoints;
188
+ private pausedAtTaskID;
189
+ private graphPaused;
190
+ private edgeOverrides;
191
+ /** `Settled` is once-per-parent — a finished poll must not re-fire the host. */
192
+ private settledEmitted;
193
+ /** Left data pane + split sizes. One JSON bag in `MJ: User Settings`. */
194
+ get Prefs(): TaskGraphRunPrefs;
195
+ private prefsStore;
58
196
  Spec: TaskGraphSpec | null;
59
197
  RuntimeStatus: TaskGraphRuntimeStatus | null;
60
198
  Positions: Map<string, GraphNodePosition>;
@@ -63,14 +201,23 @@ export declare class TaskGraphRunViewComponent extends BaseAngularComponent impl
63
201
  /** Rows by id, so a selection event can hand the host the whole task rather than an id. */
64
202
  private taskByID;
65
203
  private parentTaskID;
204
+ private replayAt;
66
205
  private pollTimer;
206
+ private frameReloadTimer;
67
207
  private destroyed;
68
208
  constructor(cdr: ChangeDetectorRef);
209
+ get InvocationPaneOpen(): boolean;
210
+ get InvocationPaneSize(): number;
211
+ get CanvasPaneSize(): number;
212
+ OnToggleInvocation(): void;
213
+ OnInvocationSplitDragEnd(sizes: readonly (number | '*')[]): void;
69
214
  ngOnDestroy(): void;
70
- /** Steps in a terminal state, for the host's summary line. */
215
+ /** Steps in a terminal state, for the host's summary line. Uses the same map the canvas paints. */
71
216
  get CompletedCount(): number;
72
217
  get TotalCount(): number;
73
218
  get SkippedCount(): number;
219
+ get RunningCount(): number;
220
+ get IsSettled(): boolean;
74
221
  /**
75
222
  * A node was selected on the canvas.
76
223
  *
@@ -79,6 +226,20 @@ export declare class TaskGraphRunViewComponent extends BaseAngularComponent impl
79
226
  * holds.
80
227
  */
81
228
  OnSelectionChanged(args: TaskGraphSelectionChangedEventArgs): void;
229
+ OnConnectionSelected(connection: FlowConnection | null): void;
230
+ private countRuntime;
231
+ get HasSelectedBreakpoint(): boolean;
232
+ get SelectedTaskName(): string;
233
+ get WaitingStepName(): string;
234
+ get SelectedTask(): MJTaskEntity | null;
235
+ OnToggleSelectedBreakpoint(): void;
236
+ /** Debug attaches here: replace Edit/Remove with breakpoint / path-override items. */
237
+ OnBeforeContextMenu(event: FlowBeforeContextMenuEventArgs): void;
238
+ OnAfterContextMenuAction(event: FlowAfterContextMenuActionEventArgs): void;
239
+ private hasBreakpoint;
240
+ OnDebugHotkey(event: KeyboardEvent): void;
241
+ private rebuildOverlay;
242
+ private emitSettledOnce;
82
243
  /**
83
244
  * Reads the graph and projects it onto the canvas.
84
245
  *
@@ -89,6 +250,10 @@ export declare class TaskGraphRunViewComponent extends BaseAngularComponent impl
89
250
  private load;
90
251
  /** Rows → spec + runtime + geometry. */
91
252
  private project;
253
+ /** Re-derives the overlay for the current replay position (or the present) from held rows. */
254
+ private applyReplay;
255
+ /** The overlay as it stood at `moment`, from each row's own timestamps. */
256
+ private statusAt;
92
257
  /**
93
258
  * The author's arrangement where there is one, a computed layout everywhere else.
94
259
  *
@@ -99,6 +264,18 @@ export declare class TaskGraphRunViewComponent extends BaseAngularComponent impl
99
264
  */
100
265
  private resolvePositions;
101
266
  private isSettled;
267
+ /**
268
+ * Folds one live frame into the overlay.
269
+ *
270
+ * Direct status frames patch in place — a new `RuntimeStatus` object, because the canvas is
271
+ * OnPush and mutation would render nothing. Frames whose consequences the dispatcher computes
272
+ * across the whole graph (skips cascade, blocks propagate, settlement rolls up) reload the rows
273
+ * instead: inferring a cascade client-side would be a second implementation of the engine's
274
+ * rules, free to drift.
275
+ */
276
+ private foldFrame;
277
+ /** One reload per burst of cascade frames, not one per frame. */
278
+ private scheduleFrameReload;
102
279
  private schedulePoll;
103
280
  private stopPolling;
104
281
  private fail;
@@ -108,6 +285,6 @@ export declare class TaskGraphRunViewComponent extends BaseAngularComponent impl
108
285
  Height: number;
109
286
  };
110
287
  static ɵfac: i0.ɵɵFactoryDeclaration<TaskGraphRunViewComponent, never>;
111
- static ɵcmp: i0.ɵɵComponentDeclaration<TaskGraphRunViewComponent, "mj-task-graph-run-view", never, { "ParentTaskID": { "alias": "ParentTaskID"; "required": false; }; "WorkflowName": { "alias": "WorkflowName"; "required": false; }; "LiveUpdates": { "alias": "LiveUpdates"; "required": false; }; "PollIntervalSeconds": { "alias": "PollIntervalSeconds"; "required": false; }; "Height": { "alias": "Height"; "required": false; }; }, { "NodeSelected": "NodeSelected"; "Settled": "Settled"; }, never, never, false, never>;
288
+ static ɵcmp: i0.ɵɵComponentDeclaration<TaskGraphRunViewComponent, "mj-task-graph-run-view", never, { "ParentTaskID": { "alias": "ParentTaskID"; "required": false; }; "WorkflowName": { "alias": "WorkflowName"; "required": false; }; "LiveUpdates": { "alias": "LiveUpdates"; "required": false; }; "PollIntervalSeconds": { "alias": "PollIntervalSeconds"; "required": false; }; "Height": { "alias": "Height"; "required": false; }; "ShowLegend": { "alias": "ShowLegend"; "required": false; }; "ShowToolbar": { "alias": "ShowToolbar"; "required": false; }; "ToolbarVisibility": { "alias": "ToolbarVisibility"; "required": false; }; "ToolbarAlign": { "alias": "ToolbarAlign"; "required": false; }; "LiveFrame": { "alias": "LiveFrame"; "required": false; }; "ReplayAt": { "alias": "ReplayAt"; "required": false; }; "Breakpoints": { "alias": "Breakpoints"; "required": false; }; "PausedAtTaskID": { "alias": "PausedAtTaskID"; "required": false; }; "GraphPaused": { "alias": "GraphPaused"; "required": false; }; "EdgeOverrides": { "alias": "EdgeOverrides"; "required": false; }; "AllowBreakpointEditing": { "alias": "AllowBreakpointEditing"; "required": false; }; "ShowDebugLegend": { "alias": "ShowDebugLegend"; "required": false; }; "ShowVariables": { "alias": "ShowVariables"; "required": false; }; "Invocation": { "alias": "Invocation"; "required": false; }; }, { "NodeSelected": "NodeSelected"; "LegendToggled": "LegendToggled"; "Settled": "Settled"; "ConnectionSelected": "ConnectionSelected"; "BreakpointToggled": "BreakpointToggled"; "EdgeOverrideRequested": "EdgeOverrideRequested"; }, never, never, false, never>;
112
289
  }
113
290
  //# sourceMappingURL=task-graph-run-view.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-graph-run-view.component.d.ts","sourceRoot":"","sources":["../../src/lib/task-graph-run-view.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAEH,iBAAiB,EAEjB,YAAY,EAEZ,SAAS,EAEZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAKH,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACrB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,4BAA4B,CAAC;;AAErF,uDAAuD;AACvD,MAAM,MAAM,6BAA6B,GAAG;IACxC,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;CAC7B,CAAC;AAKF,qBAOa,yBAA0B,SAAQ,oBAAqB,YAAW,SAAS;IAkDxE,OAAO,CAAC,GAAG;IAjDvB;;;;;OAKG;IACH,IACW,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAI3C;IACD,IAAW,YAAY,IAAI,MAAM,GAAG,IAAI,CAEvC;IAED,mFAAmF;IACnE,YAAY,EAAE,MAAM,CAAc;IAElD;;;;;OAKG;IACa,WAAW,EAAE,OAAO,CAAS;IAE7C,+FAA+F;IAC/E,mBAAmB,EAAE,MAAM,CAAK;IAEhD,iFAAiF;IACjE,MAAM,EAAE,MAAM,CAAW;IAExB,YAAY,8CAAqD;IAClF,mEAAmE;IAClD,OAAO,qBAA4B;IAE7C,IAAI,EAAE,aAAa,GAAG,IAAI,CAAQ;IAClC,aAAa,EAAE,sBAAsB,GAAG,IAAI,CAAQ;IACpD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAa;IACtD,SAAS,UAAS;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE1C,2FAA2F;IAC3F,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,SAAS,CAAS;gBAEN,GAAG,EAAE,iBAAiB;IAInC,WAAW,IAAI,IAAI;IAK1B,8DAA8D;IAC9D,IAAW,cAAc,IAAI,MAAM,CAElC;IAED,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED;;;;;;OAMG;IACI,kBAAkB,CAAC,IAAI,EAAE,kCAAkC,GAAG,IAAI;IAMzE;;;;;;OAMG;YACW,IAAI;IA0DlB,wCAAwC;IACxC,OAAO,CAAC,OAAO;IAef;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,IAAI;IAMZ,yFAAyF;IACzF,IAAW,WAAW,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAG1D;yCAvNQ,yBAAyB;2CAAzB,yBAAyB;CAwNrC"}
1
+ {"version":3,"file":"task-graph-run-view.component.d.ts","sourceRoot":"","sources":["../../src/lib/task-graph-run-view.component.ts"],"names":[],"mappings":"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"}