diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d644288b8b..e71ebb2ce0 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -36,6 +36,7 @@ "@zerodevx/svelte-toast": "^0.8.1", "autoprefixer": "^10.4.13", "cssnano": "^5.1.14", + "d3-dag": "^0.11.5", "eslint": "^8.26.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-svelte3": "^4.0.0", @@ -58,6 +59,7 @@ "svelte-preprocess": "^4.9.8", "svelte-splitpanes": "^0.7.3", "svelte2tsx": "^0.5.20", + "svelvet": "^4.0.3", "tailwindcss": "^3.2.2", "tslib": "^2.4.1", "typescript": "^4.8.4" @@ -1646,14 +1648,7 @@ "yaml": "^1.10.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=12" } }, "node_modules/cssnano-preset-default": { @@ -1693,10 +1688,7 @@ "postcss-unique-selectors": "^5.1.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=12" } }, "node_modules/cssnano-utils": { @@ -1723,6 +1715,135 @@ "node": ">=8.0.0" } }, + "node_modules/d3-array": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", + "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", + "dev": true, + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dag": { + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/d3-dag/-/d3-dag-0.11.5.tgz", + "integrity": "sha512-sNHvYqjzDlvV2fyEkoOCSuLs2GeWliIg7pJcAiKXgtUSxl0kIX0C2q1J8JzzA9CQWptKxYtzxFCXiKptTW8qsQ==", + "dev": true, + "dependencies": { + "d3-array": "^3.1.6", + "fastpriorityqueue": "0.7.2", + "javascript-lp-solver": "0.4.24", + "quadprog": "^1.6.1" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dev": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dev": true, + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dev": true, + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dev": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/date-fns": { "version": "2.29.3", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", @@ -2711,6 +2832,12 @@ "node": ">= 4.9.1" } }, + "node_modules/fastpriorityqueue": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/fastpriorityqueue/-/fastpriorityqueue-0.7.2.tgz", + "integrity": "sha512-5DtIKh6vtOmEGkYdEPNNb+mxeYCnBiKbK3s4gq52l6cX8I5QaTDWWw0Wx/iYo80fVOblSycHu1/iJeqeNxG8Jw==", + "dev": true + }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -3172,6 +3299,15 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -3332,6 +3468,12 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/javascript-lp-solver": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/javascript-lp-solver/-/javascript-lp-solver-0.4.24.tgz", + "integrity": "sha512-5edoDKnMrt/u3M6GnZKDDIPxOyFOg+WrwDv8mjNiMC2DePhy2H9/FFQgf4ggywaXT1utvkxusJcjQUER72cZmA==", + "dev": true + }, "node_modules/js-sdsl": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz", @@ -4779,6 +4921,15 @@ "node": ">=6" } }, + "node_modules/quadprog": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/quadprog/-/quadprog-1.6.1.tgz", + "integrity": "sha512-fN5Jkcjlln/b3pJkseDKREf89JkKIyu6cKIVXisgL6ocKPQ0yTp9n6NZUAq3otEPPw78WZMG9K0o9WsfKyMWJw==", + "dev": true, + "engines": { + "node": ">=8.x" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5915,6 +6066,15 @@ "typescript": "^4.1.2" } }, + "node_modules/svelvet": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/svelvet/-/svelvet-4.0.3.tgz", + "integrity": "sha512-eNE0l50G+p26gHdAiWlqopqBBTgIWv3LYYvRB/EHbieQmNRqObu6VIxnIcjp8MRWRrl82p6qyer54gxH4fY3qA==", + "dev": true, + "dependencies": { + "d3-zoom": "^3.0.0" + } + }, "node_modules/svg-tags": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", @@ -7818,6 +7978,102 @@ "css-tree": "^1.1.2" } }, + "d3-array": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", + "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", + "dev": true, + "requires": { + "internmap": "1 - 2" + } + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "dev": true + }, + "d3-dag": { + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/d3-dag/-/d3-dag-0.11.5.tgz", + "integrity": "sha512-sNHvYqjzDlvV2fyEkoOCSuLs2GeWliIg7pJcAiKXgtUSxl0kIX0C2q1J8JzzA9CQWptKxYtzxFCXiKptTW8qsQ==", + "dev": true, + "requires": { + "d3-array": "^3.1.6", + "fastpriorityqueue": "0.7.2", + "javascript-lp-solver": "0.4.24", + "quadprog": "^1.6.1" + } + }, + "d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "dev": true + }, + "d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dev": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + } + }, + "d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "dev": true + }, + "d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dev": true, + "requires": { + "d3-color": "1 - 3" + } + }, + "d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "dev": true + }, + "d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "dev": true + }, + "d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dev": true, + "requires": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dev": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + } + }, "date-fns": { "version": "2.29.3", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", @@ -8476,6 +8732,12 @@ "dev": true, "peer": true }, + "fastpriorityqueue": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/fastpriorityqueue/-/fastpriorityqueue-0.7.2.tgz", + "integrity": "sha512-5DtIKh6vtOmEGkYdEPNNb+mxeYCnBiKbK3s4gq52l6cX8I5QaTDWWw0Wx/iYo80fVOblSycHu1/iJeqeNxG8Jw==", + "dev": true + }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -8815,6 +9077,12 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -8924,6 +9192,12 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "javascript-lp-solver": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/javascript-lp-solver/-/javascript-lp-solver-0.4.24.tgz", + "integrity": "sha512-5edoDKnMrt/u3M6GnZKDDIPxOyFOg+WrwDv8mjNiMC2DePhy2H9/FFQgf4ggywaXT1utvkxusJcjQUER72cZmA==", + "dev": true + }, "js-sdsl": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz", @@ -9934,6 +10208,12 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "quadprog": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/quadprog/-/quadprog-1.6.1.tgz", + "integrity": "sha512-fN5Jkcjlln/b3pJkseDKREf89JkKIyu6cKIVXisgL6ocKPQ0yTp9n6NZUAq3otEPPw78WZMG9K0o9WsfKyMWJw==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -10766,6 +11046,15 @@ "pascal-case": "^3.1.1" } }, + "svelvet": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/svelvet/-/svelvet-4.0.3.tgz", + "integrity": "sha512-eNE0l50G+p26gHdAiWlqopqBBTgIWv3LYYvRB/EHbieQmNRqObu6VIxnIcjp8MRWRrl82p6qyer54gxH4fY3qA==", + "dev": true, + "requires": { + "d3-zoom": "^3.0.0" + } + }, "svg-tags": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 9eef600df7..fad81a18a1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -26,6 +26,7 @@ "@zerodevx/svelte-toast": "^0.8.1", "autoprefixer": "^10.4.13", "cssnano": "^5.1.14", + "d3-dag": "^0.11.5", "eslint": "^8.26.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-svelte3": "^4.0.0", @@ -48,6 +49,7 @@ "svelte-preprocess": "^4.9.8", "svelte-splitpanes": "^0.7.3", "svelte2tsx": "^0.5.20", + "svelvet": "^4.0.3", "tailwindcss": "^3.2.2", "tslib": "^2.4.1", "typescript": "^4.8.4" diff --git a/frontend/src/app.css b/frontend/src/app.css index 851fbb5e64..11f2cd00b9 100644 --- a/frontend/src/app.css +++ b/frontend/src/app.css @@ -10,13 +10,24 @@ font-weight: 100 900; font-display: swap; } + .splitpanes--vertical > .splitpanes__pane { transition: none !important; } + .splitpanes--horizontal > .splitpanes__pane { transition: none !important; } + .monaco-workbench > .notifications-toasts.visible { display: none !important; } } + +@layer components { + /* Flow graph viewer -> Svelvet library internal class overwrite */ + .Node { + display: flex !important; + cursor: pointer !important; + } +} diff --git a/frontend/src/lib/common.ts b/frontend/src/lib/common.ts index 340535824b..f1503a9d2c 100644 --- a/frontend/src/lib/common.ts +++ b/frontend/src/lib/common.ts @@ -2,6 +2,8 @@ export type OwnerKind = 'group' | 'user' export type ActionKind = 'Create' | 'Update' | 'Delete' | 'Execute' +export type SupportedLanguage = 'deno' | 'python3' | 'go' | 'bash' + export interface SchemaProperty { type: string | undefined description: string @@ -10,7 +12,7 @@ export interface SchemaProperty { enum?: string[] contentEncoding?: 'base64' | 'binary' format?: string - items?: { type?: 'string' | 'number' | 'bytes', contentEncoding?: 'base64' }, + items?: { type?: 'string' | 'number' | 'bytes'; contentEncoding?: 'base64' } properties?: { [name: string]: SchemaProperty } } diff --git a/frontend/src/lib/components/FlowViewer.svelte b/frontend/src/lib/components/FlowViewer.svelte index 1f2ee39f8a..cf472039d9 100644 --- a/frontend/src/lib/components/FlowViewer.svelte +++ b/frontend/src/lib/components/FlowViewer.svelte @@ -2,13 +2,16 @@ import Highlight from 'svelte-highlight' import json from 'svelte-highlight/languages/json' import { faClipboard } from '@fortawesome/free-solid-svg-icons' - import type { FlowValue } from '$lib/gen' + import type { FlowModule, FlowValue } from '$lib/gen' import { Tab, Tabs, TabContent, Button } from './common' import SchemaViewer from './SchemaViewer.svelte' import FieldHeader from './FieldHeader.svelte' import SvelteMarkdown from 'svelte-markdown' - import FlowModulesViewer from './FlowModulesViewer.svelte' - import { copyToClipboard } from '../utils' + import { copyToClipboard, scriptPathToHref } from '../utils' + import { FlowGraph } from './graph' + import HighlightCode from './HighlightCode.svelte' + import InputTransformsViewer from './InputTransformsViewer.svelte' + import IconedPath from './IconedPath.svelte' export let flow: { summary: string @@ -28,6 +31,8 @@ export let tab: 'ui' | 'json' | 'schema' = 'ui' export let noSummary = false + let stepDetail: FlowModule | undefined = undefined + let open: { [id: number]: boolean } = {} if (initialOpen) { open[initialOpen] = true @@ -76,10 +81,78 @@ {:else}
No inputs
{/if} - +
+
+ (stepDetail = e.detail)} + /> +
+
+ {#if stepDetail == undefined} + + Click on a step to see its details + + {:else} +
Step {stepDetail.id ?? ''}{stepDetail.summary || ''}
+ {#if stepDetail.value.type == 'identity'} +
An identity step return as output its input
+ {:else if stepDetail.value.type == 'rawscript'} +
+

Step Inputs

+ +
+ +

Code

+ + {:else if stepDetail.value.type == 'script'} +
+ + + +
+
+

Step Inputs

+ +
+ {#if stepDetail.value.path.startsWith('hub/')} +
+

Code

+