diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ceed8fa2a..3106510be 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -60,7 +60,7 @@ jobs: fetch-depth: 0 - name: Install node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 @@ -117,7 +117,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: 'develop' token: ${{ secrets.PAT }} @@ -141,7 +141,7 @@ jobs: - name: Show CHANGELOG run: | cat CHANGELOG.md - - uses: stefanzweifel/git-auto-commit-action@v4 + - uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: 'docs(changelog): update changelog' file_pattern: CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md index ca2208e0d..e6175037c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,47 @@ # Changelog All notable changes to Mainsail will be documented in this file. +## [2.10.0](https://github.com/mainsail-crew/mainsail/releases/tag/v2.10.0) - 2024-02-15 +### Features + +- **history**: Add interrupted state to history job ([#1738](https://github.com/mainsail-crew/mainsail/pull/1738)) +- Add ability to re-arrange job queue's items ([#1692](https://github.com/mainsail-crew/mainsail/pull/1692)) +- Add sum + eta in jobqueue panel ([#1770](https://github.com/mainsail-crew/mainsail/pull/1770)) +- Add devices dialog in editor ([#1765](https://github.com/mainsail-crew/mainsail/pull/1765)) +- Add ability to add history items to job queue ([#1778](https://github.com/mainsail-crew/mainsail/pull/1778)) + +### Bug Fixes and Improvements + +- **console**: Fix color of autocomplete and command list ([#1733](https://github.com/mainsail-crew/mainsail/pull/1733)) +- **timelapse**: Fix issue with changing timelapse settings ([#1745](https://github.com/mainsail-crew/mainsail/pull/1745)) +- Incorrect scaling of images in dialogImage ([#1746](https://github.com/mainsail-crew/mainsail/pull/1746)) +- Show extruder extra menu without load/unload macros ([#1747](https://github.com/mainsail-crew/mainsail/pull/1747)) +- Fix ETA calculation from jobqueue during print preheat ([#1773](https://github.com/mainsail-crew/mainsail/pull/1773)) +- File upload rate displays `NaN` instead of an actual value ([#1777](https://github.com/mainsail-crew/mainsail/pull/1777)) + +### Performance + +- Batch gcode file metadata requests ([#1737](https://github.com/mainsail-crew/mainsail/pull/1737)) + +### Refactor + +- Refactor spoolman integration to support v2 response ([#1749](https://github.com/mainsail-crew/mainsail/pull/1749)) +- Refactor heightmap page ([#1759](https://github.com/mainsail-crew/mainsail/pull/1759)) + +### Localization + +- **da**: Update danish translation ([#1757](https://github.com/mainsail-crew/mainsail/pull/1757)) +- **de**: Update german locale ([#1772](https://github.com/mainsail-crew/mainsail/pull/1772)) +- **en**: Fix typo in DescriptionPreviouslyThrottled ([#1776](https://github.com/mainsail-crew/mainsail/pull/1776)) +- **it**: Update italian translation ([#1763](https://github.com/mainsail-crew/mainsail/pull/1763)) +- **zh**: Update chinese locale ([#1767](https://github.com/mainsail-crew/mainsail/pull/1767)) + +### Other + +- **deps**: Update @sindarius/gcodeviewer ([#1755](https://github.com/mainsail-crew/mainsail/pull/1755)) +- Update github issue bot text ([#1743](https://github.com/mainsail-crew/mainsail/pull/1743)) +- Fix typo in bot text ([#1748](https://github.com/mainsail-crew/mainsail/pull/1748)) + ## [2.9.1](https://github.com/mainsail-crew/mainsail/releases/tag/v2.9.1) - 2023-12-31 ### Bug Fixes and Improvements diff --git a/package-lock.json b/package-lock.json index f03b16774..0c1fb3601 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@codemirror/view": "^6.0.3", "@jaames/iro": "^5.5.2", "@lezer/highlight": "^1.0.0", - "@sindarius/gcodeviewer": "^3.7.6", + "@sindarius/gcodeviewer": "^3.7.8", "@uiw/codemirror-theme-vscode": "^4.19.11", "axios": "^1.6.0", "codemirror": "^6.0.1", @@ -2136,76 +2136,76 @@ } }, "node_modules/@babylonjs/core": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-5.57.1.tgz", - "integrity": "sha512-k8U+SFPVGvHgeNr651nxZL26iVCmTzjmRrdbQa0BGas+lg8PIV/tfhN4uTeWWQeRFLvjbkcHA5qD8x/Xk3EpMQ==" + "version": "6.43.0", + "resolved": "https://registry.npmjs.org/@babylonjs/core/-/core-6.43.0.tgz", + "integrity": "sha512-pLFvvtC26TeICUcF0YjuuQqvCahJwPlATXnJkvBzMWXXxUE0Y5rI8L28iScu2WKy975605KdccJI5VL2NG7sUQ==" }, "node_modules/@babylonjs/gui": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-5.57.1.tgz", - "integrity": "sha512-NUOYKF5iAA0UmFFHUBkb12K9Zvqw8BnOVAbM27CZ7WpnHFQ+4/CJuy9nFoCGkBjv2A5W7M1ML/7cjmce0CbdRA==", + "version": "6.43.0", + "resolved": "https://registry.npmjs.org/@babylonjs/gui/-/gui-6.43.0.tgz", + "integrity": "sha512-iYsB7uyC40w0QkFGcPw8jAzE26jsgTFvWHTVKPSZxjQ5cG2RQEeK3aD8l+GvWauSc2qPB0wMOsvkAtusdy1g7g==", "peer": true, "peerDependencies": { - "@babylonjs/core": "^5.22.0" + "@babylonjs/core": "^6.0.0" } }, "node_modules/@babylonjs/gui-editor": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@babylonjs/gui-editor/-/gui-editor-5.57.1.tgz", - "integrity": "sha512-FY4py7CzLiW0NAd0atBb5oCI/bS6kLsfszliZFvgrWl+eJ6z54aD1m23dZ+zvy8IqxcbSUkFYKqSfRinZttnkA==", + "version": "6.43.0", + "resolved": "https://registry.npmjs.org/@babylonjs/gui-editor/-/gui-editor-6.43.0.tgz", + "integrity": "sha512-OtahbC04Mklj2i2WdGlYXc9oN/ntpp2DuNZhqc1l95ioPIZWtlhSzMQKzh6/VmJQZBwwRi8HZwPPjQ1arIkRHA==", "peer": true, "peerDependencies": { - "@babylonjs/core": "^5.22.0", - "@babylonjs/gui": "^5.22.0", + "@babylonjs/core": "^6.0.0", + "@babylonjs/gui": "^6.0.0", "@types/react": ">=16.7.3", "@types/react-dom": ">=16.0.9" } }, "node_modules/@babylonjs/inspector": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@babylonjs/inspector/-/inspector-5.57.1.tgz", - "integrity": "sha512-F40V91R4h+vhlmBs7FHA4qQkFKjJwWF78cUhUgTVwGdwHDRwZ3Pweu26xEfTtw71am26tgHgBZedBTNCokgqtQ==", + "version": "6.43.0", + "resolved": "https://registry.npmjs.org/@babylonjs/inspector/-/inspector-6.43.0.tgz", + "integrity": "sha512-Cjw/Xk8v5/84IFi6rhLS363XgDkQzPrfQG7nFKHF6k8OWwz8Ze/cb8O8IeXKEc2QFImCdRnZoDv7BkJnZ03Caw==", "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.1.0", "@fortawesome/free-regular-svg-icons": "^6.0.0", "@fortawesome/free-solid-svg-icons": "^6.0.0" }, "peerDependencies": { - "@babylonjs/core": "^5.22.0", - "@babylonjs/gui": "^5.22.0", - "@babylonjs/gui-editor": "^5.22.0", - "@babylonjs/loaders": "^5.22.0", - "@babylonjs/materials": "^5.22.0", - "@babylonjs/serializers": "^5.22.0", + "@babylonjs/core": "^6.0.0", + "@babylonjs/gui": "^6.0.0", + "@babylonjs/gui-editor": "^6.0.0", + "@babylonjs/loaders": "^6.0.0", + "@babylonjs/materials": "^6.0.0", + "@babylonjs/serializers": "^6.0.0", "@types/react": ">=16.7.3", "@types/react-dom": ">=16.0.9" } }, "node_modules/@babylonjs/loaders": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-5.57.1.tgz", - "integrity": "sha512-DHk0iOwJgnTcj8vI+cQVzpiUvWGJvYqWyZxsf7nzhbeND+ZwNWSG0AelaGbGHpWTaDSd/DjUcoWVZuT4Cg6/Xg==", + "version": "6.43.0", + "resolved": "https://registry.npmjs.org/@babylonjs/loaders/-/loaders-6.43.0.tgz", + "integrity": "sha512-+cgw4NDchjc/5dZYGzOEhJU+9++ygYlA+ChybE5yvF+yUDWZ7fGXnEXMFImXeFELjk5RRK1NS3H3YvPe7A+Rug==", "peerDependencies": { - "@babylonjs/core": "^5.22.0", - "babylonjs-gltf2interface": "^5.22.0" + "@babylonjs/core": "^6.0.0", + "babylonjs-gltf2interface": "^6.0.0" } }, "node_modules/@babylonjs/materials": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-5.57.1.tgz", - "integrity": "sha512-NLdR6eGUr+wFqie937HRWsnaWPeECpjOrYDGvjjYDg08VAcIC3YyctAuQxv8rId7BoDttkUd8Ey/IZ5d/9H7GA==", + "version": "6.43.0", + "resolved": "https://registry.npmjs.org/@babylonjs/materials/-/materials-6.43.0.tgz", + "integrity": "sha512-x4pKz2d0IRFZ9pmWIJ4FR/X5mak8Ycl2tAQtOf1ihsanNyDgXnB3Jfgl9z9TaoQSoU2y+HpjvenDF4oaLkXzUw==", "peerDependencies": { - "@babylonjs/core": "^5.22.0" + "@babylonjs/core": "^6.0.0" } }, "node_modules/@babylonjs/serializers": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-5.57.1.tgz", - "integrity": "sha512-wV7pMhvEP9lf3zjYo2YmQDl2D8V617wONkMuNRj+lpJsD2I2PT7B2wxUqtKVoCY+TyCEM5ns9vn722V7bHZiHg==", + "version": "6.43.0", + "resolved": "https://registry.npmjs.org/@babylonjs/serializers/-/serializers-6.43.0.tgz", + "integrity": "sha512-cVFGO98SapRf/QJRQx7+hZkbFnDhXuHK9obDJKKpv/76vSpLWDoLoZk1v1Nu8pm30n75Ukffcco77Za14ZZhFA==", "peer": true, "peerDependencies": { - "@babylonjs/core": "^5.22.0", - "babylonjs-gltf2interface": "^5.22.0" + "@babylonjs/core": "^6.0.0", + "babylonjs-gltf2interface": "^6.0.0" } }, "node_modules/@codemirror/autocomplete": { @@ -2825,45 +2825,45 @@ } }, "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", - "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.1.tgz", + "integrity": "sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A==", "hasInstallScript": true, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", - "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.1.tgz", + "integrity": "sha512-MfRCYlQPXoLlpem+egxjfkEuP9UQswTrlCOsknus/NcMoblTH2g0jPrapbcIb04KGA7E2GZxbAccGZfWoYgsrQ==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" + "@fortawesome/fontawesome-common-types": "6.5.1" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-regular-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.4.2.tgz", - "integrity": "sha512-0+sIUWnkgTVVXVAPQmW4vxb9ZTHv0WstOa3rBx9iPxrrrDH6bNLsDYuwXF9b6fGm+iR7DKQvQshUH/FJm3ed9Q==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.5.1.tgz", + "integrity": "sha512-m6ShXn+wvqEU69wSP84coxLbNl7sGVZb+Ca+XZq6k30SzuP3X4TfPqtycgUh9ASwlNh5OfQCd8pDIWxl+O+LlQ==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" + "@fortawesome/fontawesome-common-types": "6.5.1" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.2.tgz", - "integrity": "sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.1.tgz", + "integrity": "sha512-S1PPfU3mIJa59biTtXJz1oI0+KAXW6bkAb31XKhxdxtuXDiUIFsih4JR1v5BbxY7hVHsD1RKq+jRkVRaf773NQ==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" + "@fortawesome/fontawesome-common-types": "6.5.1" }, "engines": { "node": ">=6" @@ -3197,14 +3197,14 @@ "dev": true }, "node_modules/@sindarius/gcodeviewer": { - "version": "3.7.6", - "resolved": "https://registry.npmjs.org/@sindarius/gcodeviewer/-/gcodeviewer-3.7.6.tgz", - "integrity": "sha512-6L8znazyJgAJ8IiDTSF1o4DB+iQxszM3WfsQBFcKaSIwUYJVWQIpuccHrXvsvFQB6xQ7WAwrac5grkGfzIrNpA==", - "dependencies": { - "@babylonjs/core": "^5.53.0", - "@babylonjs/inspector": "^5.53.0", - "@babylonjs/loaders": "^5.53.0", - "@babylonjs/materials": "^5.53.0", + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/@sindarius/gcodeviewer/-/gcodeviewer-3.7.8.tgz", + "integrity": "sha512-/Z9YE/GaVBV4dydju9kJ1uv8/GlffUzjoIGYxlj+kvZnBhP7OZ0ZWviL7zs4d7npSwSw7J+LNYWaIpVW13KQrA==", + "dependencies": { + "@babylonjs/core": "^6.43.0", + "@babylonjs/inspector": "^6.43.0", + "@babylonjs/loaders": "^6.43.0", + "@babylonjs/materials": "^6.43.0", "d3": "^7.4.4" } }, @@ -3293,15 +3293,15 @@ "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.8", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.8.tgz", - "integrity": "sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==", + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", "peer": true }, "node_modules/@types/react": { - "version": "18.2.24", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.24.tgz", - "integrity": "sha512-Ee0Jt4sbJxMu1iDcetZEIKQr99J1Zfb6D4F3qfUWoR1JpInkY1Wdg4WwCyBjL257D0+jGqSl1twBjV8iCaC0Aw==", + "version": "18.2.56", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.56.tgz", + "integrity": "sha512-NpwHDMkS/EFZF2dONFQHgkPRwhvgq/OAvIaGQzxGSBmaeR++kTg6njr15Vatz0/2VcCEwJQFi6Jf4Q0qBu0rLA==", "peer": true, "dependencies": { "@types/prop-types": "*", @@ -3310,9 +3310,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.8", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.8.tgz", - "integrity": "sha512-bAIvO5lN/U8sPGvs1Xm61rlRHHaq5rp5N3kp9C+NJ/Q41P8iqjkXSu0+/qu8POsjH9pNWb0OYabFez7taP7omw==", + "version": "18.2.19", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", + "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", "peer": true, "dependencies": { "@types/react": "*" @@ -3328,9 +3328,9 @@ } }, "node_modules/@types/scheduler": { - "version": "0.16.4", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.4.tgz", - "integrity": "sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", "peer": true }, "node_modules/@types/semver": { @@ -4225,9 +4225,9 @@ } }, "node_modules/babylonjs-gltf2interface": { - "version": "5.57.1", - "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-5.57.1.tgz", - "integrity": "sha512-RZnaKfJ6Q/AYLdIjBYMRxCW/HPEC8jabAL1U8wJ0KVziw6NSbSV6S80S22fUCPTyaZ7nCekn1TYg1IPmJ/eA6w==", + "version": "6.43.0", + "resolved": "https://registry.npmjs.org/babylonjs-gltf2interface/-/babylonjs-gltf2interface-6.43.0.tgz", + "integrity": "sha512-+orCb4giE41Ysl8d2ZOeYCRBsT6FnmDwkW9+sHcEACUEpdtFeTShZ+ckucDAB/Ia2e3ah9F2hADbGA/8TfFngg==", "peer": true }, "node_modules/balanced-match": { @@ -6118,9 +6118,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", diff --git a/package.json b/package.json index f077bb3ac..74cbd5c73 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@codemirror/view": "^6.0.3", "@jaames/iro": "^5.5.2", "@lezer/highlight": "^1.0.0", - "@sindarius/gcodeviewer": "^3.7.6", + "@sindarius/gcodeviewer": "^3.7.8", "@uiw/codemirror-theme-vscode": "^4.19.11", "axios": "^1.6.0", "codemirror": "^6.0.1", diff --git a/src/App.vue b/src/App.vue index 065416668..30d03d53e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -4,7 +4,7 @@ - + @@ -44,6 +44,7 @@ import TheBedScrewsDialog from '@/components/dialogs/TheBedScrewsDialog.vue' import TheScrewsTiltAdjustDialog from '@/components/dialogs/TheScrewsTiltAdjustDialog.vue' import { setAndLoadLocale } from './plugins/i18n' import TheMacroPrompt from '@/components/dialogs/TheMacroPrompt.vue' +import { AppRoute } from '@/routes' Component.registerHooks(['metaInfo']) @@ -172,6 +173,20 @@ export default class App extends Mixins(BaseMixin, ThemeMixin) { return Math.floor(this.$store.getters['printer/getPrintPercent'] * 100) } + get containerClasses() { + const currentRouteOptions = this.$router.options.routes?.find( + (route) => route.name === this.$route.name + ) as AppRoute + + return { + 'px-3': true, + 'px-sm-6': true, + 'py-sm-6': true, + 'mx-auto': true, + fullscreen: currentRouteOptions?.fullscreen ?? false, + } + } + @Watch('language') async languageChanged(newVal: string): Promise { await setAndLoadLocale(newVal) diff --git a/src/assets/styles/page.css b/src/assets/styles/page.css index fc3438e48..1a9084aa8 100644 --- a/src/assets/styles/page.css +++ b/src/assets/styles/page.css @@ -11,6 +11,10 @@ body { max-width: 1800px; } +#page-container.fullscreen { + max-width: none; +} + .overflowingContentWidgets { visibility: hidden; } diff --git a/src/components/console/ConsoleTableEntry.vue b/src/components/console/ConsoleTableEntry.vue index 871ac909d..9e0cd7897 100644 --- a/src/components/console/ConsoleTableEntry.vue +++ b/src/components/console/ConsoleTableEntry.vue @@ -1,7 +1,7 @@ @@ -17,7 +17,7 @@ export default class ConsoleTableEntry extends Mixins(BaseMixin) { declare readonly event: ServerStateEvent get entryStyle() { - const classes = ['ma-0'] + const classes = ['ma-0', 'flex-nowrap'] classes.push(this.$store.state.gui.console.entryStyle ?? 'default') if (this.event.type === 'action') classes.push('text--disabled') diff --git a/src/components/dialogs/CoolDownDialog.vue b/src/components/dialogs/CoolDownDialog.vue new file mode 100644 index 000000000..2d9dfa4ef --- /dev/null +++ b/src/components/dialogs/CoolDownDialog.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/src/components/dialogs/HistoryDeleteJobDialog.vue b/src/components/dialogs/HistoryDeleteJobDialog.vue new file mode 100644 index 000000000..e41c5d20d --- /dev/null +++ b/src/components/dialogs/HistoryDeleteJobDialog.vue @@ -0,0 +1,49 @@ + + diff --git a/src/components/dialogs/HistoryDeleteSelectedJobsDialog.vue b/src/components/dialogs/HistoryDeleteSelectedJobsDialog.vue new file mode 100644 index 000000000..1db91ae57 --- /dev/null +++ b/src/components/dialogs/HistoryDeleteSelectedJobsDialog.vue @@ -0,0 +1,58 @@ + + diff --git a/src/components/dialogs/HistoryDetailsDialog.vue b/src/components/dialogs/HistoryDetailsDialog.vue new file mode 100644 index 000000000..dfa3c2c34 --- /dev/null +++ b/src/components/dialogs/HistoryDetailsDialog.vue @@ -0,0 +1,170 @@ + + + diff --git a/src/components/dialogs/HistoryDetailsDialogEntry.vue b/src/components/dialogs/HistoryDetailsDialogEntry.vue new file mode 100644 index 000000000..5bc3cc735 --- /dev/null +++ b/src/components/dialogs/HistoryDetailsDialogEntry.vue @@ -0,0 +1,41 @@ + + diff --git a/src/components/dialogs/HistoryListPanelAddMaintenance.vue b/src/components/dialogs/HistoryListPanelAddMaintenance.vue new file mode 100644 index 000000000..75ab94657 --- /dev/null +++ b/src/components/dialogs/HistoryListPanelAddMaintenance.vue @@ -0,0 +1,244 @@ + + + diff --git a/src/components/dialogs/HistoryListPanelDeleteSelectedDialog.vue b/src/components/dialogs/HistoryListPanelDeleteSelectedDialog.vue new file mode 100644 index 000000000..281c6d75d --- /dev/null +++ b/src/components/dialogs/HistoryListPanelDeleteSelectedDialog.vue @@ -0,0 +1,66 @@ + + + diff --git a/src/components/dialogs/HistoryListPanelDetailMaintenance.vue b/src/components/dialogs/HistoryListPanelDetailMaintenance.vue new file mode 100644 index 000000000..ac089db0f --- /dev/null +++ b/src/components/dialogs/HistoryListPanelDetailMaintenance.vue @@ -0,0 +1,123 @@ + + + diff --git a/src/components/dialogs/HistoryListPanelDetailMaintenanceHistoryEntry.vue b/src/components/dialogs/HistoryListPanelDetailMaintenanceHistoryEntry.vue new file mode 100644 index 000000000..d9131b1e3 --- /dev/null +++ b/src/components/dialogs/HistoryListPanelDetailMaintenanceHistoryEntry.vue @@ -0,0 +1,170 @@ + + + diff --git a/src/components/dialogs/HistoryListPanelDetailsDialog.vue b/src/components/dialogs/HistoryListPanelDetailsDialog.vue new file mode 100644 index 000000000..16f7f33f8 --- /dev/null +++ b/src/components/dialogs/HistoryListPanelDetailsDialog.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/src/components/dialogs/HistoryListPanelEditMaintenance.vue b/src/components/dialogs/HistoryListPanelEditMaintenance.vue new file mode 100644 index 000000000..b6037c321 --- /dev/null +++ b/src/components/dialogs/HistoryListPanelEditMaintenance.vue @@ -0,0 +1,251 @@ + + + diff --git a/src/components/dialogs/HistoryListPanelNoteDialog.vue b/src/components/dialogs/HistoryListPanelNoteDialog.vue new file mode 100644 index 000000000..63c2c163d --- /dev/null +++ b/src/components/dialogs/HistoryListPanelNoteDialog.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/components/dialogs/HistoryListPanelPerformMaintenance.vue b/src/components/dialogs/HistoryListPanelPerformMaintenance.vue new file mode 100644 index 000000000..75b1c23b7 --- /dev/null +++ b/src/components/dialogs/HistoryListPanelPerformMaintenance.vue @@ -0,0 +1,74 @@ + + + diff --git a/src/components/dialogs/HistoryNoteDialog.vue b/src/components/dialogs/HistoryNoteDialog.vue new file mode 100644 index 000000000..ee8f75735 --- /dev/null +++ b/src/components/dialogs/HistoryNoteDialog.vue @@ -0,0 +1,67 @@ + + diff --git a/src/components/dialogs/SpoolmanChangeSpoolDialog.vue b/src/components/dialogs/SpoolmanChangeSpoolDialog.vue index 14206b70a..b8e12a27d 100644 --- a/src/components/dialogs/SpoolmanChangeSpoolDialog.vue +++ b/src/components/dialogs/SpoolmanChangeSpoolDialog.vue @@ -156,6 +156,11 @@ export default class SpoolmanChangeSpoolDialog extends Mixins(BaseMixin) { } customFilter(value: any, search: string, item: ServerSpoolmanStateSpool): boolean { + if (search.trim().startsWith('web+spoolman:s-')) { + const spoolId = parseInt(search.split('-')[1] ?? -1) + return item.id === spoolId + } + const querySplits = search.toLowerCase().split(' ') const searchArray = [ item.comment, diff --git a/src/components/dialogs/SpoolmanChangeSpoolDialogRow.vue b/src/components/dialogs/SpoolmanChangeSpoolDialogRow.vue index a5d0ba8fd..2ef2741fa 100644 --- a/src/components/dialogs/SpoolmanChangeSpoolDialogRow.vue +++ b/src/components/dialogs/SpoolmanChangeSpoolDialogRow.vue @@ -16,7 +16,7 @@ @@ -131,4 +131,9 @@ export default class SpoolmanChangeSpoolDialogRow extends Mixins(BaseMixin) { .no--padding { padding: 0; } + +.comment { + white-space: pre-wrap; + overflow-wrap: anywhere; +} diff --git a/src/components/inputs/MiscellaneousSlider.vue b/src/components/inputs/MiscellaneousSlider.vue index 43536deb7..6c7e3d70a 100644 --- a/src/components/inputs/MiscellaneousSlider.vue +++ b/src/components/inputs/MiscellaneousSlider.vue @@ -14,9 +14,9 @@ {{ mdiLightbulbOutline }} - {{ mdiFan }} + {{ mdiFan }} {{ convertName(name) }} - + {{ Math.round(rpm ?? 0) }} RPM {{ Math.round(parseFloat(value) * 100) }} % @@ -199,12 +199,11 @@ export default class MiscellaneousSlider extends Mixins(BaseMixin) { sendCmd(newVal: number): void { if (this.value === newVal) return - let gcode = '' + let gcode = `SET_PIN PIN=${this.name} VALUE=${newVal.toFixed(2)}` if (newVal < this.min) newVal = 0 newVal = newVal * this.multi if (this.type === 'fan') gcode = `M106 S${newVal.toFixed(0)}` if (this.type === 'fan_generic') gcode = `SET_FAN_SPEED FAN=${this.name} SPEED=${newVal}` - if (this.type === 'output_pin') gcode = `SET_PIN PIN=${this.name} VALUE=${newVal.toFixed(2)}` if (this.type === 'led') gcode = `SET_LED LED=${this.name} ${this.ledChannelName}=${newVal.toFixed(2)} SYNC=0 TRANSMIT=1` diff --git a/src/components/mixins/zoffset.ts b/src/components/mixins/zoffset.ts index c4f8b63de..9785f34ca 100644 --- a/src/components/mixins/zoffset.ts +++ b/src/components/mixins/zoffset.ts @@ -32,14 +32,15 @@ export default class ZoffsetMixin extends Vue { get endstop_pin() { const stepperConfig = this.settings[this.stepper_name] ?? {} - return stepperConfig?.endstop_pin + return stepperConfig?.endstop_pin.trim() } get zOffset(): number { return this.$store.state.printer?.gcode_move?.homing_origin[2].toFixed(3) } get isEndstopProbe() { - return this.endstop_pin.search('probe:z_virtual_endstop') !== -1 + // remove spaces and search for probe:z_virtual_endstop + return this.endstop_pin.replaceAll(' ', '').search('probe:z_virtual_endstop') !== -1 } get existZOffsetApplyProbe() { diff --git a/src/components/notifications/NotificationMenuEntry.vue b/src/components/notifications/NotificationMenuEntry.vue index 55cdc2e6d..397876dba 100644 --- a/src/components/notifications/NotificationMenuEntry.vue +++ b/src/components/notifications/NotificationMenuEntry.vue @@ -1,98 +1,80 @@ @@ -101,6 +83,13 @@ import BaseMixin from '@/components/mixins/base' import { Component, Mixins, Prop, Watch } from 'vue-property-decorator' import { mdiClose, mdiLinkVariant, mdiBellOffOutline } from '@mdi/js' import { GuiNotificationStateEntry } from '@/store/gui/notifications/types' +import { TranslateResult } from 'vue-i18n' +import { GuiMaintenanceStateEntry } from '@/store/gui/maintenance/types' + +interface ReminderOption { + text: string | TranslateResult + clickFunction: Function +} @Component({ components: {}, @@ -110,7 +99,8 @@ export default class NotificationMenuEntry extends Mixins(BaseMixin) { mdiLinkVariant = mdiLinkVariant mdiBellOffOutline = mdiBellOffOutline - private expand = false + expand = false + showMaintenanceDetails = false @Prop({ required: true }) declare readonly entry: GuiNotificationStateEntry @@ -139,6 +129,49 @@ export default class NotificationMenuEntry extends Mixins(BaseMixin) { return this.entry.id.slice(0, posFirstSlash) } + get maintenanceEntry() { + if (this.entryType !== 'maintenance') return null + + const id = this.entry.id.replace('maintenance/', '') + const entries = this.$store.getters['gui/maintenance/getEntries'] + + return entries.find((entry: GuiMaintenanceStateEntry) => entry.id === id) + } + + get reminderTimes() { + let output: ReminderOption[] = [ + { + text: this.$t('App.Notifications.NextReboot'), + clickFunction: () => this.dismiss('reboot', null), + }, + { text: this.$t('App.Notifications.Never'), clickFunction: () => this.close() }, + ] + + if (['announcement', 'maintenance'].includes(this.entryType)) { + output = [] + output.push({ + text: this.$t('App.Notifications.OneHourShort'), + clickFunction: () => this.dismiss('time', 60 * 60), + }) + output.push({ + text: this.$t('App.Notifications.OneDayShort'), + clickFunction: () => this.dismiss('time', 60 * 60 * 24), + }) + output.push({ + text: this.$t('App.Notifications.OneWeekShort'), + clickFunction: () => this.dismiss('time', 60 * 60 * 24 * 7), + }) + } + + return output + } + + xButtonAction() { + if (this.entryType === 'announcement') return this.close() + + this.dismiss('reboot', null) + } + close() { this.$store.dispatch('gui/notifications/close', { id: this.entry.id }) } @@ -157,10 +190,12 @@ export default class NotificationMenuEntry extends Mixins(BaseMixin) { diff --git a/src/components/panels/HistoryStatisticsPanel.vue b/src/components/panels/HistoryStatisticsPanel.vue index a282fe979..20b31c4c9 100644 --- a/src/components/panels/HistoryStatisticsPanel.vue +++ b/src/components/panels/HistoryStatisticsPanel.vue @@ -12,15 +12,15 @@