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 @@
-
-