diff --git a/package-lock.json b/package-lock.json
index ca2246fc358cd9863e4b02b6b734093086273c8e..0d6c0ca664d4a7d67abedd4be4e7dea4bbf4aa02 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -60,15 +60,6 @@
         "vue-tsc": "~2.0.0"
       }
     },
-    "node_modules/@aashutoshrathi/word-wrap": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
-      "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/@apidevtools/json-schema-ref-parser": {
       "version": "11.6.1",
       "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.6.1.tgz",
@@ -1575,9 +1566,9 @@
       }
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.16.4.tgz",
-      "integrity": "sha512-GkhjAaQ8oUTOKE4g4gsZ0u8K/IHU1+2WQSgS1TwTcYvL+sjbaQjNHFXbOJ6kgqGHIO1DfUhI/Sphi9GkRT9K+Q==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.1.tgz",
+      "integrity": "sha512-P6Wg856Ou/DLpR+O0ZLneNmrv7QpqBg+hK4wE05ijbC/t349BRfMfx+UFj5Ha3fCFopIa6iSZlpdaB4agkWp2Q==",
       "cpu": [
         "arm"
       ],
@@ -1588,9 +1579,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.16.4.tgz",
-      "integrity": "sha512-Bvm6D+NPbGMQOcxvS1zUl8H7DWlywSXsphAeOnVeiZLQ+0J6Is8T7SrjGTH29KtYkiY9vld8ZnpV3G2EPbom+w==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.1.tgz",
+      "integrity": "sha512-piwZDjuW2WiHr05djVdUkrG5JbjnGbtx8BXQchYCMfib/nhjzWoiScelZ+s5IJI7lecrwSxHCzW026MWBL+oJQ==",
       "cpu": [
         "arm64"
       ],
@@ -1601,9 +1592,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.16.4.tgz",
-      "integrity": "sha512-i5d64MlnYBO9EkCOGe5vPR/EeDwjnKOGGdd7zKFhU5y8haKhQZTN2DgVtpODDMxUr4t2K90wTUJg7ilgND6bXw==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.1.tgz",
+      "integrity": "sha512-LsZXXIsN5Q460cKDT4Y+bzoPDhBmO5DTr7wP80d+2EnYlxSgkwdPfE3hbE+Fk8dtya+8092N9srjBTJ0di8RIA==",
       "cpu": [
         "arm64"
       ],
@@ -1614,9 +1605,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.16.4.tgz",
-      "integrity": "sha512-WZupV1+CdUYehaZqjaFTClJI72fjJEgTXdf4NbW69I9XyvdmztUExBtcI2yIIU6hJtYvtwS6pkTkHJz+k08mAQ==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.1.tgz",
+      "integrity": "sha512-S7TYNQpWXB9APkxu/SLmYHezWwCoZRA9QLgrDeml+SR2A1LLPD2DBUdUlvmCF7FUpRMKvbeeWky+iizQj65Etw==",
       "cpu": [
         "x64"
       ],
@@ -1627,9 +1618,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.16.4.tgz",
-      "integrity": "sha512-ADm/xt86JUnmAfA9mBqFcRp//RVRt1ohGOYF6yL+IFCYqOBNwy5lbEK05xTsEoJq+/tJzg8ICUtS82WinJRuIw==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.1.tgz",
+      "integrity": "sha512-Lq2JR5a5jsA5um2ZoLiXXEaOagnVyCpCW7xvlcqHC7y46tLwTEgUSTM3a2TfmmTMmdqv+jknUioWXlmxYxE9Yw==",
       "cpu": [
         "arm"
       ],
@@ -1640,9 +1631,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.16.4.tgz",
-      "integrity": "sha512-tJfJaXPiFAG+Jn3cutp7mCs1ePltuAgRqdDZrzb1aeE3TktWWJ+g7xK9SNlaSUFw6IU4QgOxAY4rA+wZUT5Wfg==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.1.tgz",
+      "integrity": "sha512-9BfzwyPNV0IizQoR+5HTNBGkh1KXE8BqU0DBkqMngmyFW7BfuIZyMjQ0s6igJEiPSBvT3ZcnIFohZ19OqjhDPg==",
       "cpu": [
         "arm"
       ],
@@ -1653,9 +1644,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.16.4.tgz",
-      "integrity": "sha512-7dy1BzQkgYlUTapDTvK997cgi0Orh5Iu7JlZVBy1MBURk7/HSbHkzRnXZa19ozy+wwD8/SlpJnOOckuNZtJR9w==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.1.tgz",
+      "integrity": "sha512-e2uWaoxo/rtzA52OifrTSXTvJhAXb0XeRkz4CdHBK2KtxrFmuU/uNd544Ogkpu938BzEfvmWs8NZ8Axhw33FDw==",
       "cpu": [
         "arm64"
       ],
@@ -1666,9 +1657,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.16.4.tgz",
-      "integrity": "sha512-zsFwdUw5XLD1gQe0aoU2HVceI6NEW7q7m05wA46eUAyrkeNYExObfRFQcvA6zw8lfRc5BHtan3tBpo+kqEOxmg==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.1.tgz",
+      "integrity": "sha512-ekggix/Bc/d/60H1Mi4YeYb/7dbal1kEDZ6sIFVAE8pUSx7PiWeEh+NWbL7bGu0X68BBIkgF3ibRJe1oFTksQQ==",
       "cpu": [
         "arm64"
       ],
@@ -1679,9 +1670,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.16.4.tgz",
-      "integrity": "sha512-p8C3NnxXooRdNrdv6dBmRTddEapfESEUflpICDNKXpHvTjRRq1J82CbU5G3XfebIZyI3B0s074JHMWD36qOW6w==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.1.tgz",
+      "integrity": "sha512-UGV0dUo/xCv4pkr/C8KY7XLFwBNnvladt8q+VmdKrw/3RUd3rD0TptwjisvE2TTnnlENtuY4/PZuoOYRiGp8Gw==",
       "cpu": [
         "ppc64"
       ],
@@ -1692,9 +1683,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.16.4.tgz",
-      "integrity": "sha512-Lh/8ckoar4s4Id2foY7jNgitTOUQczwMWNYi+Mjt0eQ9LKhr6sK477REqQkmy8YHY3Ca3A2JJVdXnfb3Rrwkng==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.1.tgz",
+      "integrity": "sha512-gEYmYYHaehdvX46mwXrU49vD6Euf1Bxhq9pPb82cbUU9UT2NV+RSckQ5tKWOnNXZixKsy8/cPGtiUWqzPuAcXQ==",
       "cpu": [
         "riscv64"
       ],
@@ -1705,9 +1696,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.16.4.tgz",
-      "integrity": "sha512-1xwwn9ZCQYuqGmulGsTZoKrrn0z2fAur2ujE60QgyDpHmBbXbxLaQiEvzJWDrscRq43c8DnuHx3QorhMTZgisQ==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.1.tgz",
+      "integrity": "sha512-xeae5pMAxHFp6yX5vajInG2toST5lsCTrckSRUFwNgzYqnUjNBcQyqk1bXUxX5yhjWFl2Mnz3F8vQjl+2FRIcw==",
       "cpu": [
         "s390x"
       ],
@@ -1718,9 +1709,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.16.4.tgz",
-      "integrity": "sha512-LuOGGKAJ7dfRtxVnO1i3qWc6N9sh0Em/8aZ3CezixSTM+E9Oq3OvTsvC4sm6wWjzpsIlOCnZjdluINKESflJLA==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.1.tgz",
+      "integrity": "sha512-AsdnINQoDWfKpBzCPqQWxSPdAWzSgnYbrJYtn6W0H2E9It5bZss99PiLA8CgmDRfvKygt20UpZ3xkhFlIfX9zQ==",
       "cpu": [
         "x64"
       ],
@@ -1731,9 +1722,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.16.4.tgz",
-      "integrity": "sha512-ch86i7KkJKkLybDP2AtySFTRi5fM3KXp0PnHocHuJMdZwu7BuyIKi35BE9guMlmTpwwBTB3ljHj9IQXnTCD0vA==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.1.tgz",
+      "integrity": "sha512-KoB4fyKXTR+wYENkIG3fFF+5G6N4GFvzYx8Jax8BR4vmddtuqSb5oQmYu2Uu067vT/Fod7gxeQYKupm8gAcMSQ==",
       "cpu": [
         "x64"
       ],
@@ -1744,9 +1735,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.16.4.tgz",
-      "integrity": "sha512-Ma4PwyLfOWZWayfEsNQzTDBVW8PZ6TUUN1uFTBQbF2Chv/+sjenE86lpiEwj2FiviSmSZ4Ap4MaAfl1ciF4aSA==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.1.tgz",
+      "integrity": "sha512-J0d3NVNf7wBL9t4blCNat+d0PYqAx8wOoY+/9Q5cujnafbX7BmtYk3XvzkqLmFECaWvXGLuHmKj/wrILUinmQg==",
       "cpu": [
         "arm64"
       ],
@@ -1757,9 +1748,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.16.4.tgz",
-      "integrity": "sha512-9m/ZDrQsdo/c06uOlP3W9G2ENRVzgzbSXmXHT4hwVaDQhYcRpi9bgBT0FTG9OhESxwK0WjQxYOSfv40cU+T69w==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.1.tgz",
+      "integrity": "sha512-xjgkWUwlq7IbgJSIxvl516FJ2iuC/7ttjsAxSPpC9kkI5iQQFHKyEN5BjbhvJ/IXIZ3yIBcW5QDlWAyrA+TFag==",
       "cpu": [
         "ia32"
       ],
@@ -1770,9 +1761,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.16.4.tgz",
-      "integrity": "sha512-YunpoOAyGLDseanENHmbFvQSfVL5BxW3k7hhy0eN4rb3gS/ct75dVD0EXOWIqFT/nE8XYW6LP6vz6ctKRi0k9A==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.1.tgz",
+      "integrity": "sha512-0QbCkfk6cnnVKWqqlC0cUrrUMDMfu5ffvYMTUHf+qMN2uAb3MKP31LPcwiMXBNsvoFGs/kYdFOsuLmvppCopXA==",
       "cpu": [
         "x64"
       ],
@@ -2732,12 +2723,12 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.4.25",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.25.tgz",
-      "integrity": "sha512-Y2pLLopaElgWnMNolgG8w3C5nNUVev80L7hdQ5iIKPtMJvhVpG0zhnBG/g3UajJmZdvW0fktyZTotEHD1Srhbg==",
+      "version": "3.4.26",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.26.tgz",
+      "integrity": "sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==",
       "dependencies": {
         "@babel/parser": "^7.24.4",
-        "@vue/shared": "3.4.25",
+        "@vue/shared": "3.4.26",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
@@ -2749,24 +2740,24 @@
       "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.4.25",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.25.tgz",
-      "integrity": "sha512-Ugz5DusW57+HjllAugLci19NsDK+VyjGvmbB2TXaTcSlQxwL++2PETHx/+Qv6qFwNLzSt7HKepPe4DcTE3pBWg==",
+      "version": "3.4.26",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.26.tgz",
+      "integrity": "sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==",
       "dependencies": {
-        "@vue/compiler-core": "3.4.25",
-        "@vue/shared": "3.4.25"
+        "@vue/compiler-core": "3.4.26",
+        "@vue/shared": "3.4.26"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.4.25",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.25.tgz",
-      "integrity": "sha512-m7rryuqzIoQpOBZ18wKyq05IwL6qEpZxFZfRxlNYuIPDqywrXQxgUwLXIvoU72gs6cRdY6wHD0WVZIFE4OEaAQ==",
+      "version": "3.4.26",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.26.tgz",
+      "integrity": "sha512-It1dp+FAOCgluYSVYlDn5DtZBxk1NCiJJfu2mlQqa/b+k8GL6NG/3/zRbJnHdhV2VhxFghaDq5L4K+1dakW6cw==",
       "dependencies": {
         "@babel/parser": "^7.24.4",
-        "@vue/compiler-core": "3.4.25",
-        "@vue/compiler-dom": "3.4.25",
-        "@vue/compiler-ssr": "3.4.25",
-        "@vue/shared": "3.4.25",
+        "@vue/compiler-core": "3.4.26",
+        "@vue/compiler-dom": "3.4.26",
+        "@vue/compiler-ssr": "3.4.26",
+        "@vue/shared": "3.4.26",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.10",
         "postcss": "^8.4.38",
@@ -2787,12 +2778,12 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.4.25",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.25.tgz",
-      "integrity": "sha512-H2ohvM/Pf6LelGxDBnfbbXFPyM4NE3hrw0e/EpwuSiYu8c819wx+SVGdJ65p/sFrYDd6OnSDxN1MB2mN07hRSQ==",
+      "version": "3.4.26",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.26.tgz",
+      "integrity": "sha512-FNwLfk7LlEPRY/g+nw2VqiDKcnDTVdCfBREekF8X74cPLiWHUX6oldktf/Vx28yh4STNy7t+/yuLoMBBF7YDiQ==",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.25",
-        "@vue/shared": "3.4.25"
+        "@vue/compiler-dom": "3.4.26",
+        "@vue/shared": "3.4.26"
       }
     },
     "node_modules/@vue/devtools-api": {
@@ -2862,48 +2853,48 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.4.25",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.25.tgz",
-      "integrity": "sha512-mKbEtKr1iTxZkAG3vm3BtKHAOhuI4zzsVcN0epDldU/THsrvfXRKzq+lZnjczZGnTdh3ojd86/WrP+u9M51pWQ==",
+      "version": "3.4.26",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.26.tgz",
+      "integrity": "sha512-E/ynEAu/pw0yotJeLdvZEsp5Olmxt+9/WqzvKff0gE67tw73gmbx6tRkiagE/eH0UCubzSlGRebCbidB1CpqZQ==",
       "dependencies": {
-        "@vue/shared": "3.4.25"
+        "@vue/shared": "3.4.26"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.4.25",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.25.tgz",
-      "integrity": "sha512-3qhsTqbEh8BMH3pXf009epCI5E7bKu28fJLi9O6W+ZGt/6xgSfMuGPqa5HRbUxLoehTNp5uWvzCr60KuiRIL0Q==",
+      "version": "3.4.26",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.26.tgz",
+      "integrity": "sha512-AFJDLpZvhT4ujUgZSIL9pdNcO23qVFh7zWCsNdGQBw8ecLNxOOnPcK9wTTIYCmBJnuPHpukOwo62a2PPivihqw==",
       "dependencies": {
-        "@vue/reactivity": "3.4.25",
-        "@vue/shared": "3.4.25"
+        "@vue/reactivity": "3.4.26",
+        "@vue/shared": "3.4.26"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.4.25",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.25.tgz",
-      "integrity": "sha512-ode0sj77kuwXwSc+2Yhk8JMHZh1sZp9F/51wdBiz3KGaWltbKtdihlJFhQG4H6AY+A06zzeMLkq6qu8uDSsaoA==",
+      "version": "3.4.26",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.26.tgz",
+      "integrity": "sha512-UftYA2hUXR2UOZD/Fc3IndZuCOOJgFxJsWOxDkhfVcwLbsfh2CdXE2tG4jWxBZuDAs9J9PzRTUFt1PgydEtItw==",
       "dependencies": {
-        "@vue/runtime-core": "3.4.25",
-        "@vue/shared": "3.4.25",
+        "@vue/runtime-core": "3.4.26",
+        "@vue/shared": "3.4.26",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.4.25",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.25.tgz",
-      "integrity": "sha512-8VTwq0Zcu3K4dWV0jOwIVINESE/gha3ifYCOKEhxOj6MEl5K5y8J8clQncTcDhKF+9U765nRw4UdUEXvrGhyVQ==",
+      "version": "3.4.26",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.26.tgz",
+      "integrity": "sha512-xoGAqSjYDPGAeRWxeoYwqJFD/gw7mpgzOvSxEmjWaFO2rE6qpbD1PC172YRpvKhrihkyHJkNDADFXTfCyVGhKw==",
       "dependencies": {
-        "@vue/compiler-ssr": "3.4.25",
-        "@vue/shared": "3.4.25"
+        "@vue/compiler-ssr": "3.4.26",
+        "@vue/shared": "3.4.26"
       },
       "peerDependencies": {
-        "vue": "3.4.25"
+        "vue": "3.4.26"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.4.25",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.25.tgz",
-      "integrity": "sha512-k0yappJ77g2+KNrIaF0FFnzwLvUBLUYr8VOwz+/6vLsmItFp51AcxLL7Ey3iPd7BIRyWPOcqUjMnm7OkahXllA=="
+      "version": "3.4.26",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.26.tgz",
+      "integrity": "sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ=="
     },
     "node_modules/@vue/tsconfig": {
       "version": "0.5.1",
@@ -3413,9 +3404,9 @@
       }
     },
     "node_modules/dayjs": {
-      "version": "1.11.10",
-      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz",
-      "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ=="
+      "version": "1.11.11",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz",
+      "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg=="
     },
     "node_modules/de-indent": {
       "version": "1.0.2",
@@ -3514,9 +3505,9 @@
       }
     },
     "node_modules/dompurify": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.0.tgz",
-      "integrity": "sha512-yoU4rhgPKCo+p5UrWWWNKiIq+ToGqmVVhk0PmMYBK4kRsR3/qhemNFL8f6CFmBd4gMwm3F4T7HBoydP5uY07fA=="
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.1.tgz",
+      "integrity": "sha512-tVP8C/GJwnABOn/7cx/ymx/hXpmBfWIPihC1aOEvS8GbMqy3pgeYtJk1HXN3CO7tu+8bpY18f6isjR5Cymj0TQ=="
     },
     "node_modules/entities": {
       "version": "4.5.0",
@@ -5454,17 +5445,17 @@
       }
     },
     "node_modules/optionator": {
-      "version": "0.9.3",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
-      "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+      "version": "0.9.4",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+      "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
       "dev": true,
       "dependencies": {
-        "@aashutoshrathi/word-wrap": "^1.2.3",
         "deep-is": "^0.1.3",
         "fast-levenshtein": "^2.0.6",
         "levn": "^0.4.1",
         "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0"
+        "type-check": "^0.4.0",
+        "word-wrap": "^1.2.5"
       },
       "engines": {
         "node": ">= 0.8.0"
@@ -5909,9 +5900,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.16.4",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.16.4.tgz",
-      "integrity": "sha512-kuaTJSUbz+Wsb2ATGvEknkI12XV40vIiHmLuFlejoo7HtDok/O5eDDD0UpCVY5bBX5U5RYo8wWP83H7ZsqVEnA==",
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.1.tgz",
+      "integrity": "sha512-0gG94inrUtg25sB2V/pApwiv1lUb0bQ25FPNuzO89Baa+B+c0ccaaBKM5zkZV/12pUUdH+lWCSm9wmHqyocuVQ==",
       "dev": true,
       "dependencies": {
         "@types/estree": "1.0.5"
@@ -5924,22 +5915,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.16.4",
-        "@rollup/rollup-android-arm64": "4.16.4",
-        "@rollup/rollup-darwin-arm64": "4.16.4",
-        "@rollup/rollup-darwin-x64": "4.16.4",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.16.4",
-        "@rollup/rollup-linux-arm-musleabihf": "4.16.4",
-        "@rollup/rollup-linux-arm64-gnu": "4.16.4",
-        "@rollup/rollup-linux-arm64-musl": "4.16.4",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.16.4",
-        "@rollup/rollup-linux-riscv64-gnu": "4.16.4",
-        "@rollup/rollup-linux-s390x-gnu": "4.16.4",
-        "@rollup/rollup-linux-x64-gnu": "4.16.4",
-        "@rollup/rollup-linux-x64-musl": "4.16.4",
-        "@rollup/rollup-win32-arm64-msvc": "4.16.4",
-        "@rollup/rollup-win32-ia32-msvc": "4.16.4",
-        "@rollup/rollup-win32-x64-msvc": "4.16.4",
+        "@rollup/rollup-android-arm-eabi": "4.17.1",
+        "@rollup/rollup-android-arm64": "4.17.1",
+        "@rollup/rollup-darwin-arm64": "4.17.1",
+        "@rollup/rollup-darwin-x64": "4.17.1",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.17.1",
+        "@rollup/rollup-linux-arm-musleabihf": "4.17.1",
+        "@rollup/rollup-linux-arm64-gnu": "4.17.1",
+        "@rollup/rollup-linux-arm64-musl": "4.17.1",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.17.1",
+        "@rollup/rollup-linux-riscv64-gnu": "4.17.1",
+        "@rollup/rollup-linux-s390x-gnu": "4.17.1",
+        "@rollup/rollup-linux-x64-gnu": "4.17.1",
+        "@rollup/rollup-linux-x64-musl": "4.17.1",
+        "@rollup/rollup-win32-arm64-msvc": "4.17.1",
+        "@rollup/rollup-win32-ia32-msvc": "4.17.1",
+        "@rollup/rollup-win32-x64-msvc": "4.17.1",
         "fsevents": "~2.3.2"
       }
     },
@@ -6695,15 +6686,15 @@
       }
     },
     "node_modules/vue": {
-      "version": "3.4.25",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.25.tgz",
-      "integrity": "sha512-HWyDqoBHMgav/OKiYA2ZQg+kjfMgLt/T0vg4cbIF7JbXAjDexRf5JRg+PWAfrAkSmTd2I8aPSXtooBFWHB98cg==",
+      "version": "3.4.26",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.26.tgz",
+      "integrity": "sha512-bUIq/p+VB+0xrJubaemrfhk1/FiW9iX+pDV+62I/XJ6EkspAO9/DXEjbDFoe8pIfOZBqfk45i9BMc41ptP/uRg==",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.25",
-        "@vue/compiler-sfc": "3.4.25",
-        "@vue/runtime-dom": "3.4.25",
-        "@vue/server-renderer": "3.4.25",
-        "@vue/shared": "3.4.25"
+        "@vue/compiler-dom": "3.4.26",
+        "@vue/compiler-sfc": "3.4.26",
+        "@vue/runtime-dom": "3.4.26",
+        "@vue/server-renderer": "3.4.26",
+        "@vue/shared": "3.4.26"
       },
       "peerDependencies": {
         "typescript": "*"
@@ -6846,6 +6837,15 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/word-wrap": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+      "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/wordwrap": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
diff --git a/src/client/resource/models/ResourceVersionOut.ts b/src/client/resource/models/ResourceVersionOut.ts
index 321971c86c97589a8f29f8bd73c99ae854ef04bb..56881be8c538135a467df287d9bc53472d05d183 100644
--- a/src/client/resource/models/ResourceVersionOut.ts
+++ b/src/client/resource/models/ResourceVersionOut.ts
@@ -27,7 +27,7 @@ export type ResourceVersionOut = {
     /**
      * Path to the resource on the cluster if the resource is synchronized
      */
-    readonly cluster_path: (string | null);
+    readonly cluster_path: string;
     /**
      * Path to the resource in the S3 Bucket. Not publicly available.
      */
diff --git a/src/components/admin/UpdateBucketLimitsModal.vue b/src/components/admin/UpdateBucketLimitsModal.vue
index 741679f98044a3fdf911baea8f22cb66b9d6e1c7..09ea314205f2cec4676e7dbf541bd6a9e458637d 100644
--- a/src/components/admin/UpdateBucketLimitsModal.vue
+++ b/src/components/admin/UpdateBucketLimitsModal.vue
@@ -115,23 +115,23 @@ onMounted(() => {
   <bootstrap-modal
     :modalId="props.modalId"
     :static-backdrop="true"
-    modal-label="Update bucket size limits"
+    modal-label="Update bucket quotas"
     size-modifier-modal="lg"
   >
     <template #header
-      >Update limits for bucket <i>{{ bucket.name }}</i></template
+      >Update quotas for bucket <i>{{ bucket.name }}</i></template
     >
     <template #body>
       <form :id="formId" @submit.prevent="updateLimits()" ref="sizeForm">
         <div class="row mb-2">
           <div class="col-5">
             <label :for="`#size-limit-${randomIDSuffix}`" class="form-label"
-              >Size Limit:
+              >Size quota:
               <template v-if="sizeState.limits.size_limit"
                 >{{ filesize(1024 * sizeState.limits.size_limit) }} or
                 {{ filesize(1024 * sizeState.limits.size_limit, { base: 2 }) }}
               </template>
-              <template v-else>No Limits</template>
+              <template v-else>No quota</template>
             </label>
             <div class="d-flex align-content-center">
               <input
@@ -139,7 +139,7 @@ onMounted(() => {
                 style="text-align: right"
                 type="number"
                 v-model="sizeState.limits.size_limit"
-                placeholder="No limits"
+                placeholder="No quota"
                 min="1"
                 max="4294967295"
                 step="1"
@@ -151,14 +151,14 @@ onMounted(() => {
           </div>
           <div class="col-6 offset-md-1">
             <label :for="`#object-limit-${randomIDSuffix}`" class="form-label"
-              >Size Limit
+              >Number of objects quota
             </label>
             <input
               :id="`object-limit-${randomIDSuffix}`"
               type="number"
               class="form-control"
               v-model="sizeState.limits.object_limit"
-              placeholder="No limits"
+              placeholder="No quota"
               min="1"
               max="4294967295"
               step="1"
diff --git a/src/components/parameter-schema/form-mode/ParameterResourceInput.vue b/src/components/parameter-schema/form-mode/ParameterResourceInput.vue
index c878af6c0ade5230dde0117ae05f19b9e2c5df1d..5689935b2ea33e5cc6beeaa7af8852a170c1116d 100644
--- a/src/components/parameter-schema/form-mode/ParameterResourceInput.vue
+++ b/src/components/parameter-schema/form-mode/ParameterResourceInput.vue
@@ -63,18 +63,21 @@ const inputDynamicClass = computed<string[]>(() => {
 });
 
 function updateResourceId(rid: string) {
+  console.log("Update resource", rid);
   resource.resource_id = rid;
   resource.resource_version_id = "";
   model.value = translateToModel();
 }
 
 function updateResourceVersionId(rvid: string) {
+  console.log("Update resource version", rvid);
   resource.resource_version_id = rvid;
   model.value = translateToModel();
   resourceRepository.fetchResourceTree(resource.resource_id, rvid);
 }
 
 watch(model, (newVal, oldVal) => {
+  console.log("Update Model", newVal, oldVal);
   if (newVal != oldVal && newVal !== translateToModel()) {
     /* eslint-disable @typescript-eslint/ban-ts-comment */
     // @ts-ignore
@@ -109,12 +112,14 @@ function parseModel(val?: string) {
           undefined
       ) {
         // Missing resource
+        console.error(`Resource ${val} unknown`);
         emit("switch-to-raw");
         return;
       }
       Object.assign(resource, tempResource);
     } else {
       // Not resource path
+      console.error(`${val} not a resource path`);
       emit("switch-to-raw");
     }
   }
@@ -137,15 +142,25 @@ watch(
 );
 
 function translateToModel(): string {
+  console.log(
+    "Update model start",
+    resource.resource_id,
+    resource.resource_version_id,
+  );
   if (resource.resource_version_id.length === 0) {
     return "";
   }
   let val =
     resourceRepository.versionMapping[resource.resource_version_id]
       ?.cluster_path ?? "";
+  console.log(
+    "mapped",
+    resourceRepository.versionMapping[resource.resource_version_id],
+  );
   if (resource.suffix != undefined && val.length > 0) {
     val = val + resource.suffix;
   }
+  console.log("Update Model", val);
   return val;
 }
 
diff --git a/src/components/resources/ResourceCard.vue b/src/components/resources/ResourceCard.vue
index 1f7292ebbe8f13d5de8fa3c33aaed5f8fea4af7c..a527ad3784bc700ace1f7ce6e0992f502524b0e7 100644
--- a/src/components/resources/ResourceCard.vue
+++ b/src/components/resources/ResourceCard.vue
@@ -1,5 +1,6 @@
 <script setup lang="ts">
 import {
+  type FileTree,
   type ResourceOut,
   type ResourceVersionOut,
   Status,
@@ -13,11 +14,15 @@ import { useResourceStore } from "@/stores/resources";
 import { Tooltip } from "bootstrap";
 import { useNameStore } from "@/stores/names";
 import RequestReviewButton from "@/components/resources/RequestReviewButton.vue";
+import { useAuthStore } from "@/stores/users";
+import { createDownloadUrl } from "@/utils/DownloadJson";
+import { filesize } from "filesize";
 
 const randomIDSuffix: string = Math.random().toString(16).substring(2, 8);
 const objectRepository = useS3ObjectStore();
 const resourceRepository = useResourceStore();
 const nameRepository = useNameStore();
+const userRepository = useAuthStore();
 
 const props = defineProps<{
   resource: ResourceOut;
@@ -71,6 +76,40 @@ function checkS3Resource(resourceVersion: ResourceVersionOut) {
     });
 }
 
+function prepareFileTreeForDownload(
+  parent: string,
+  tree?: FileTree | null,
+): string[] {
+  if (tree == undefined || tree.contents == undefined) {
+    return [];
+  }
+  let files: string[] = [];
+  const currentName = parent.length > 0 ? parent + tree.name + "/" : "/";
+  for (const dir of tree.contents) {
+    if (dir.type === "directory") {
+      files = files.concat(prepareFileTreeForDownload(currentName, dir));
+    } else {
+      files.push(currentName + dir.name + "\t" + filesize(dir.size));
+    }
+  }
+  return files;
+}
+
+const fileTreeFiles = computed<(string | undefined)[]>(() => {
+  return props.resource.versions.map((version) => {
+    if (resourceRepository.resourceTree[version.resource_version_id]) {
+      return createDownloadUrl(
+        prepareFileTreeForDownload(
+          "",
+          resourceRepository.resourceTree[version.resource_version_id],
+        ).join("\n"),
+        "text/plain",
+      );
+    }
+    return undefined;
+  });
+});
+
 function clickCheckS3Resource(resourceVersion: ResourceVersionOut) {
   clearTimeout(refreshTimeout);
   refreshTimeout = setTimeout(() => {
@@ -89,6 +128,16 @@ onMounted(() => {
       new Tooltip("#resource-private-icon-" + props.resource.resource_id);
     }
     for (const r of props.resource.versions) {
+      if (
+        userRepository.resourceMaintainer ||
+        userRepository.workflowDev ||
+        userRepository.admin
+      ) {
+        resourceRepository.fetchResourceTree(
+          props.resource.resource_id,
+          r.resource_version_id,
+        );
+      }
       if (r.status == Status.RESOURCE_REQUESTED) {
         checkS3Resource(r);
       }
@@ -159,26 +208,20 @@ onMounted(() => {
       <div v-if="!props.loading">
         <div class="accordion" :id="'accordion-' + props.resource.resource_id">
           <div
-            v-for="resourceVersion of resourceVersions"
+            v-for="(resourceVersion, index) in resourceVersions"
             :key="resourceVersion.resource_version_id"
             class="accordion-item"
           >
             <h2 class="accordion-header">
               <button
-                class="accordion-button"
-                :class="{
-                  collapsed:
-                    resourceVersion.status != Status.LATEST || props.extended,
-                }"
+                class="accordion-button collapsed"
                 type="button"
                 data-bs-toggle="collapse"
                 :data-bs-target="
                   '#collapseResourceVersion-' +
                   resourceVersion.resource_version_id
                 "
-                :aria-expanded="
-                  resourceVersion.status == Status.LATEST && !props.extended
-                "
+                aria-expanded="false"
                 :aria-controls="
                   '#collapseResourceVersion-' +
                   resourceVersion.resource_version_id
@@ -193,10 +236,6 @@ onMounted(() => {
                 'collapseResourceVersion-' + resourceVersion.resource_version_id
               "
               class="accordion-collapse collapse"
-              :class="{
-                show:
-                  resourceVersion.status == Status.LATEST && !props.extended,
-              }"
               :data-bs-parent="'#accordion-' + props.resource.resource_id"
             >
               <div class="accordion-body d-flex flex-column">
@@ -328,6 +367,18 @@ onMounted(() => {
                     /></span>
                   </div>
                 </div>
+                <a
+                  v-if="fileTreeFiles[index] != undefined"
+                  role="button"
+                  :href="fileTreeFiles[index]"
+                  :download="`file-list-${resourceVersion.resource_version_id}.txt`"
+                  class="btn btn-primary"
+                >
+                  Download resource file list
+                  <font-awesome-icon
+                    icon="fa-solid fa-file-arrow-down"
+                    class="ms-2"
+                /></a>
               </div>
             </div>
           </div>
diff --git a/src/components/workflows/modals/ParameterModal.vue b/src/components/workflows/modals/ParameterModal.vue
index 9bb1d5260e27a4e4aadb02780f65b67bd14d7ccc..ee99004d2883014d8c2d41a102c2fdd514ce249c 100644
--- a/src/components/workflows/modals/ParameterModal.vue
+++ b/src/components/workflows/modals/ParameterModal.vue
@@ -369,9 +369,7 @@ onMounted(() => {
           disabled: parameterState.loading || parameterState.error,
         }"
         :href="parameterDownloadUrl"
-        :download="
-          'parameters-' + props.executionId?.replace(/-/g, '') + '.json'
-        "
+        :download="`parameters-${executionId?.replace(/-/g, '')}.json`"
         :tabindex="parameterState.loading || parameterState.error ? -1 : 0"
         :aria-disabled="parameterState.loading || parameterState.error"
       >
diff --git a/src/main.ts b/src/main.ts
index 0e88e4f1f274953775d54b075d00af739133b242..6bf10bb4eff87aff28a55b730c5f014b0e309680 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -11,12 +11,14 @@ import { environment } from "@/environment";
 Chart.register(zoomPlugin, Colors);
 
 import dayjs from "dayjs";
-import relativeTime from "dayjs/plugin/relativeTime"; // import plugin
+import relativeTime from "dayjs/plugin/relativeTime";
+import duration from "dayjs/plugin/duration";
 import isSameOrBefore from "dayjs/plugin/isSameOrBefore";
 import "dayjs/locale/en-gb";
 import utc from "dayjs/plugin/utc";
 import timezone from "dayjs/plugin/timezone";
 
+dayjs.extend(duration);
 dayjs.extend(relativeTime); // use plugin
 dayjs.extend(isSameOrBefore);
 dayjs.extend(utc);
diff --git a/src/views/admin/AdminBucketsView.vue b/src/views/admin/AdminBucketsView.vue
index ae81c053c0766e001d4dcae6ccba16c27215cd09..77f917a044702c6f9533b5570c91d77dae2d5887 100644
--- a/src/views/admin/AdminBucketsView.vue
+++ b/src/views/admin/AdminBucketsView.vue
@@ -156,8 +156,8 @@ function limitsUpdated(bucket: BucketOut) {
         <th scope="col"><b>Name</b></th>
         <th scope="col" class="description-column">Description</th>
         <th scope="col">Created at</th>
-        <th scope="col">Size Limit</th>
-        <th scope="col">Object Limit</th>
+        <th scope="col">Size Quota</th>
+        <th scope="col">Object Quota</th>
         <th scope="col">Owner</th>
         <th scope="col"></th>
       </tr>
@@ -200,7 +200,7 @@ function limitsUpdated(bucket: BucketOut) {
             data-bs-toggle="modal"
             :data-bs-target="'#' + updateLimitsModalId"
           >
-            Edit limits
+            Edit quotas
           </button>
         </td>
       </tr>
diff --git a/src/views/object-storage/MultiPartUploadsView.vue b/src/views/object-storage/MultiPartUploadsView.vue
index 9fe9132c468f61c5ce2679ed6461430032788fdf..083557a983aef916cbacebcc41f8b706e7dedd00 100644
--- a/src/views/object-storage/MultiPartUploadsView.vue
+++ b/src/views/object-storage/MultiPartUploadsView.vue
@@ -192,7 +192,7 @@ onMounted(() => {
     </template>
   </div>
   <div v-else class="text-center fst-italic fs-5 mt-5">
-    No multipart uploads
+    No active multipart uploads
   </div>
 </template>
 
diff --git a/src/views/workflows/ListWorkflowExecutionsView.vue b/src/views/workflows/ListWorkflowExecutionsView.vue
index 209e11ff5f9167ef145472bfedbf44f0d4a3fa99..bdb0999bac7bd3b7ebb274ea48e27cca9e7b6b30 100644
--- a/src/views/workflows/ListWorkflowExecutionsView.vue
+++ b/src/views/workflows/ListWorkflowExecutionsView.vue
@@ -199,6 +199,7 @@ onUnmounted(() => {
         <th scope="col">Workflow</th>
         <th scope="col">Status</th>
         <th scope="col">Started</th>
+        <th scope="col">Duration</th>
         <th scope="col">Ended</th>
         <th scope="col"></th>
       </tr>
@@ -267,6 +268,19 @@ onUnmounted(() => {
           <td>
             {{ dayjs.unix(execution.start_time).format("DD.MM.YYYY HH:mm") }}
           </td>
+          <td>
+            <template v-if="execution.end_time">
+              {{
+                dayjs
+                  .duration(
+                    execution.end_time - execution.start_time,
+                    "seconds",
+                  )
+                  .humanize()
+              }}
+            </template>
+            <template v-else> -</template>
+          </td>
           <td>
             <template v-if="execution.end_time">
               {{ dayjs.unix(execution.end_time).format("DD.MM.YYYY HH:mm") }}