From 6b30969ae5e63b77f8a6ed343ce946187cd6ccbd Mon Sep 17 00:00:00 2001 From: Faton Ramadani Date: Mon, 1 Aug 2022 15:07:29 +0200 Subject: [PATCH] improve Flow UI (#297) * Improve flow ui * Finish reworking * Fix formating * Fix naviation * Fix navigaion + adjust icon sizes * Remove duplicate code Co-authored-by: Ruben Fiszel --- frontend/package-lock.json | 108 ++++++- frontend/package.json | 2 + frontend/src/app.css | 6 + frontend/src/lib/components/EditorBar.svelte | 81 +++-- .../src/lib/components/FlowBuilder.svelte | 90 +++--- frontend/src/lib/components/FlowEditor.svelte | 281 +++--------------- .../src/lib/components/FlowPreview.svelte | 3 +- frontend/src/lib/components/Modal.svelte | 4 +- frontend/src/lib/components/ModuleStep.svelte | 122 ++++---- .../src/lib/components/SchemaEditor.svelte | 155 +++++----- .../src/lib/components/ScriptBuilder.svelte | 18 +- .../src/lib/components/ScriptEditor.svelte | 30 +- .../src/lib/components/TableCustom.svelte | 17 +- frontend/src/lib/components/Tooltip.svelte | 3 +- .../flows/CopyFirstStepSchema.svelte | 10 +- .../src/lib/components/flows/FlowBox.svelte | 3 + .../lib/components/flows/FlowBoxHeader.svelte | 10 + .../src/lib/components/flows/FlowInput.svelte | 21 ++ .../components/flows/FlowModuleHeader.svelte | 54 ++-- .../lib/components/flows/FlowSettings.svelte | 189 ++++++++++++ .../src/lib/components/flows/flowStore.ts | 38 ++- frontend/tailwind.config.cjs | 12 +- 22 files changed, 716 insertions(+), 541 deletions(-) create mode 100644 frontend/src/lib/components/flows/FlowBox.svelte create mode 100644 frontend/src/lib/components/flows/FlowBoxHeader.svelte create mode 100644 frontend/src/lib/components/flows/FlowInput.svelte create mode 100644 frontend/src/lib/components/flows/FlowSettings.svelte diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b7cde09768..0c9c7bc021 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -32,6 +32,8 @@ "eslint": "^8.20.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-svelte3": "^4.0.0", + "flowbite": "^1.5.1", + "flowbite-svelte": "^0.22.19", "openapi-typescript-codegen": "^0.23.0", "path-browserify": "^1.0.1", "postcss": "^8.4.5", @@ -188,6 +190,21 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@floating-ui/core": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", + "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==", + "dev": true + }, + "node_modules/@floating-ui/dom": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz", + "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==", + "dev": true, + "dependencies": { + "@floating-ui/core": "^0.7.3" + } + }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.2.tgz", @@ -319,7 +336,6 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", "dev": true, - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -1028,6 +1044,12 @@ "fsevents": "~2.3.2" } }, + "node_modules/classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==", + "dev": true + }, "node_modules/clone-regexp": { "version": "2.2.0", "dev": true, @@ -1886,6 +1908,32 @@ "dev": true, "license": "ISC" }, + "node_modules/flowbite": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-1.5.1.tgz", + "integrity": "sha512-kMQ2o/aLV629WqUVubw2KZGYcN7W5rD0tFVqxvK5/45EFIgMAlTmT+XxdIjKwzyTlb3HgmUj5h5NaqN3TJc9Zw==", + "dev": true, + "dependencies": { + "@popperjs/core": "^2.9.3", + "mini-svg-data-uri": "^1.4.3" + } + }, + "node_modules/flowbite-svelte": { + "version": "0.22.19", + "resolved": "https://registry.npmjs.org/flowbite-svelte/-/flowbite-svelte-0.22.19.tgz", + "integrity": "sha512-HhLhQlHiCP6K37z3OhrDGgoiiNqq6DMmbsa8hL+1TgK0WilokTuC4iLbnaBTTNg5lN+Od4w/KmX1PYKiBUrzow==", + "dev": true, + "dependencies": { + "@floating-ui/dom": "^0.5.3", + "classnames": "^2.3.1", + "flowbite": "^1.4.2", + "svelte-heros": "^2.2.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/fraction.js": { "version": "4.2.0", "dev": true, @@ -4188,6 +4236,12 @@ "svelte": "^3.24.0" } }, + "node_modules/svelte-heros": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/svelte-heros/-/svelte-heros-2.3.2.tgz", + "integrity": "sha512-OlfD/TzHytc9/J9ij/YrFKS2Lj0i0N0qkOm/5F7s9zdb/YGZ9tHY4PujSXrNxEyVWjjiaLTJGVgMkXlIrvVNNg==", + "dev": true + }, "node_modules/svelte-highlight": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/svelte-highlight/-/svelte-highlight-6.2.0.tgz", @@ -4905,6 +4959,21 @@ "strip-json-comments": "^3.1.1" } }, + "@floating-ui/core": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz", + "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg==", + "dev": true + }, + "@floating-ui/dom": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz", + "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==", + "dev": true, + "requires": { + "@floating-ui/core": "^0.7.3" + } + }, "@fortawesome/fontawesome-common-types": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.1.2.tgz", @@ -4993,8 +5062,7 @@ "version": "2.11.5", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", - "dev": true, - "peer": true + "dev": true }, "@rollup/pluginutils": { "version": "4.2.1", @@ -5405,6 +5473,12 @@ "readdirp": "~3.6.0" } }, + "classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==", + "dev": true + }, "clone-regexp": { "version": "2.2.0", "dev": true, @@ -5963,6 +6037,28 @@ "version": "3.2.5", "dev": true }, + "flowbite": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-1.5.1.tgz", + "integrity": "sha512-kMQ2o/aLV629WqUVubw2KZGYcN7W5rD0tFVqxvK5/45EFIgMAlTmT+XxdIjKwzyTlb3HgmUj5h5NaqN3TJc9Zw==", + "dev": true, + "requires": { + "@popperjs/core": "^2.9.3", + "mini-svg-data-uri": "^1.4.3" + } + }, + "flowbite-svelte": { + "version": "0.22.19", + "resolved": "https://registry.npmjs.org/flowbite-svelte/-/flowbite-svelte-0.22.19.tgz", + "integrity": "sha512-HhLhQlHiCP6K37z3OhrDGgoiiNqq6DMmbsa8hL+1TgK0WilokTuC4iLbnaBTTNg5lN+Od4w/KmX1PYKiBUrzow==", + "dev": true, + "requires": { + "@floating-ui/dom": "^0.5.3", + "classnames": "^2.3.1", + "flowbite": "^1.4.2", + "svelte-heros": "^2.2.2" + } + }, "fraction.js": { "version": "4.2.0", "dev": true @@ -7356,6 +7452,12 @@ "typescript": "*" } }, + "svelte-heros": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/svelte-heros/-/svelte-heros-2.3.2.tgz", + "integrity": "sha512-OlfD/TzHytc9/J9ij/YrFKS2Lj0i0N0qkOm/5F7s9zdb/YGZ9tHY4PujSXrNxEyVWjjiaLTJGVgMkXlIrvVNNg==", + "dev": true + }, "svelte-highlight": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/svelte-highlight/-/svelte-highlight-6.2.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 82acf718fd..e909c44e1b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -29,6 +29,8 @@ "eslint": "^8.20.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-svelte3": "^4.0.0", + "flowbite": "^1.5.1", + "flowbite-svelte": "^0.22.19", "openapi-typescript-codegen": "^0.23.0", "path-browserify": "^1.0.1", "postcss": "^8.4.5", diff --git a/frontend/src/app.css b/frontend/src/app.css index 0fbace3c02..209efdeb7d 100644 --- a/frontend/src/app.css +++ b/frontend/src/app.css @@ -3,6 +3,12 @@ @tailwind components; @tailwind utilities; +html { + + /* Avoid content shifting */ + overflow-y: overlay; +} + @layer base { h1 { @apply text-2xl; diff --git a/frontend/src/lib/components/EditorBar.svelte b/frontend/src/lib/components/EditorBar.svelte index 2ffc35437e..2926100762 100644 --- a/frontend/src/lib/components/EditorBar.svelte +++ b/frontend/src/lib/components/EditorBar.svelte @@ -2,17 +2,18 @@ import { ResourceService, ScriptService, VariableService } from '$lib/gen' import { getScriptByPath, loadHubScripts, sendUserToast } from '$lib/utils' - import Icon from 'svelte-awesome' import { faSearch } from '@fortawesome/free-solid-svg-icons' + import Icon from 'svelte-awesome' - import { workspaceStore, hubScripts } from '$lib/stores' - import ItemPicker from './ItemPicker.svelte' - import VariableEditor from './VariableEditor.svelte' - import ResourceEditor from './ResourceEditor.svelte' + import { hubScripts, workspaceStore } from '$lib/stores' + import { Button } from 'flowbite-svelte' import { Highlight } from 'svelte-highlight' import { python, typescript } from 'svelte-highlight/languages' - import Modal from './Modal.svelte' import type Editor from './Editor.svelte' + import ItemPicker from './ItemPicker.svelte' + import Modal from './Modal.svelte' + import ResourceEditor from './ResourceEditor.svelte' + import VariableEditor from './VariableEditor.svelte' export let lang: 'python3' | 'deno' export let editor: Editor @@ -172,41 +173,57 @@ -
- + > + + Variable picker + - - + + + > + + Script explorer + - + Reload assistants (status:  + {#if lang == 'deno'} + Deno + {:else if lang == 'python3'} + Pyright + Black + {/if}) +
diff --git a/frontend/src/lib/components/FlowBuilder.svelte b/frontend/src/lib/components/FlowBuilder.svelte index 7245abf033..a633633015 100644 --- a/frontend/src/lib/components/FlowBuilder.svelte +++ b/frontend/src/lib/components/FlowBuilder.svelte @@ -10,6 +10,7 @@ sendUserToast, setQueryWithoutLoad } from '$lib/utils' + import { Breadcrumb, BreadcrumbItem } from 'flowbite-svelte' import { onMount } from 'svelte' import { OFFSET } from './CronInput.svelte' import FlowEditor from './FlowEditor.svelte' @@ -126,61 +127,48 @@ }) -
+
-
-
-
+
+ + + + + + + + +
+ {#if step == 1} changeStep(2)} > + Next + -
-
- {#if step == 1} - - - {:else} - - {/if} -
-
- -
- - {#if initialPath && initialPath != $flowStore?.path} {initialPath} → {/if} - {$flowStore?.path} - + Save + + {:else} + + {/if}
+
+ + {#if initialPath && initialPath != $flowStore?.path} {initialPath} → {/if} + {$flowStore?.path} + +
@@ -205,13 +193,3 @@

Loading

{/if}
- - diff --git a/frontend/src/lib/components/FlowEditor.svelte b/frontend/src/lib/components/FlowEditor.svelte index 95c8ac987e..6c45196677 100644 --- a/frontend/src/lib/components/FlowEditor.svelte +++ b/frontend/src/lib/components/FlowEditor.svelte @@ -1,28 +1,16 @@ - -
Import JSON
-
- -
-
- -
- - -
See JSON
-
- + + Add step {pathIsEmpty($flowStore?.path) ? '(pick a name first!)' : ''} +
-
- -{#if $flowStore} -
-
    -