diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000000..35b5167093
--- /dev/null
+++ b/.github/CODE_OF_CONDUCT.md
@@ -0,0 +1,132 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+We as members, contributors, and leaders pledge to make participation in our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, caste, color, religion, or sexual
+identity and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community.
+
+## Our Standards
+
+Examples of behavior that contributes to a positive environment for our
+community include:
+
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes,
+ and learning from the experience
+* Focusing on what is best not just for us as individuals, but for the overall
+ community
+
+Examples of unacceptable behavior include:
+
+* The use of sexualized language or imagery, and sexual attention or advances of
+ any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or email address,
+ without their explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Enforcement Responsibilities
+
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate.
+
+## Scope
+
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported to the community leaders responsible for enforcement at
+[INSERT CONTACT METHOD].
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident.
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested.
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series of
+actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or permanent
+ban.
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban.
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within the
+community.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 2.1, available at
+[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
+
+Community Impact Guidelines were inspired by
+[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
+
+For answers to common questions about this code of conduct, see the FAQ at
+[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
+[https://www.contributor-covenant.org/translations][translations].
+
+[homepage]: https://www.contributor-covenant.org
+[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
+[Mozilla CoC]: https://github.com/mozilla/diversity
+[FAQ]: https://www.contributor-covenant.org/faq
+[translations]: https://www.contributor-covenant.org/translations
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 43b07efb7e..f99124b56b 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -23,7 +23,7 @@ jobs:
- name: Setup Node
uses: actions/setup-node@v3
with:
- node-version: 18
+ node-version: 20
- name: Install dependencies
run: |
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 9e08e8bc41..39933f444a 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -15,7 +15,7 @@ jobs:
- name: Install node
uses: actions/setup-node@v3
with:
- node-version: 18
+ node-version: 20
- name: Install deps
run: npm ci --no-optional
diff --git a/.node-version b/.node-version
index 3e558c9b3c..f3f52b42d3 100644
--- a/.node-version
+++ b/.node-version
@@ -1 +1 @@
-18.12.0
+20.9.0
diff --git a/docs/features/cameras.md b/docs/features/cameras.md
index 1795a4f670..a7a18d7eb6 100644
--- a/docs/features/cameras.md
+++ b/docs/features/cameras.md
@@ -9,67 +9,60 @@ permalink: /features/cameras
# Cameras
{: .no_toc }
----
+## Table of contents
+{: .no_toc .text-delta }
+
+1. TOC
+{:toc}
-Fluidd (and FluiddPI) has built in support for web cameras and allows configuring
-your cameras from the same place as your other configuration files.
+---
-To get started, open the `webcam.txt` config file in Fluidd's configuration editor.
-Instructions on how to get started as well as option references are included in this file.
+Fluidd offers robust support for displaying camera streams, providing users
+with real-time monitoring capabilities for their 3D printing projects.
-You can add up to four cameras to display on your dashboard.
+The current supported types are:
-Currently supported types are:
+- **MJPEG Stream**
+ - Traditional mjpegstream/ustreamer service.
+ - Pushes images to Fluidd at the configured resolution and FPS.
+ - Requires substantial bandwidth and may encounter issues with unstable
+ network connections.
-- MJPEG Stream
- This is the traditional mjpegstream/ustreamer service. The service pushes images to
- fluidd at the configured resolution and FPS you have setup. This requires
- a lot of bandwidth, and can cause issues with unstable network connections.
+- **MJPEG Adaptive**
+ - Pulls images from the mjpegstream/ustreamer service using the snapshot URL.
+ - Allows setting a target FPS, enabling your browser to maintain the intended
+ frame rate.
+ - A more reliable approach in certain scenarios.
-- MJPEG Adaptive
- This will PULL images from the mjpegstream/ustreamer service, using the snapshot URL.
- You can set a target FPS, and your browser will try to keep up with the
- intended target. This can be a more reliable approach for some.
+- **HLS Stream**
+ - Loads an HLS (HTTP Live Streaming) video stream via [HLS.js](https://hlsjs.video-dev.org/).
+ - Utilizes HTML5 video and MediaSource Extensions for playback, requiring a
+ modern browser.
-- HLS Stream
- This will load an HLS (HTTP Live Streaming) video stream via [HLS.js](https://hlsjs.video-dev.org/).
- It relies on HTML5 video and MediaSource Extensions for playback, so you will
- need a modern browser that supports it.
+- **WebRTC (camera-streamer)**
+ - A highly bandwidth-efficient stream type.
+ - **IMPORTANT:** Currently only available on Raspberry devices.
-- IP Camera
- This is an experimental option. Effectively, it swaps out the ` ` tag
- for a `` tag. You should only use this if you can provide a URL
- that supports native HTML5 video tags.
+- **IP Camera**
+ - Experimental option replacing the ` ` tag with a `` tag.
+ - Use only if your provided URL supports native HTML5 video tags.
-- HTTP Page
- Loads a website and displays it in place of the camera feed.
- This lets you embed any web video feed not supported by the methods mentioned above.
+- **HTTP Page**
+ - Loads a website, displaying it in place of the camera feed.
+ - Allows embedding any web video feed not supported by the aforementioned
+ methods.
-Head on over to the UI Settings page to define your cameras.
+Visit the UI Settings page to define and configure your cameras.
![screenshot](/assets/images/camera_settings.png)
-# Setting up multiple cameras on FluiddPi
-
-Up to four cameras are supported by the stock configuration.
-In order to make them work, you need to
-
-1. Copy the `webcam.txt` configuration file into a new one
- matching the `webcam*.txt` wildcard.
- Make sure each configuration file points to a different camera.
- For example, one configuration file might have `camera="usb"` and
- the other one `camera="auto"`.
- Make any other adjustments if needed.
-3. Make sure each configuration file has a different port settings.
- By default `mjpg_streamer` will listen on port `8080`.
- Up to four cameras are supported by the default nginx configuration,
- from port `8080` to `8083`. Configure it by setting up
- the `camera_http_options` parameter.
- Example: `camera_http_options="-n -p 8081"`
-4. Restart webcamd either via the tools drawer in the top right of the UI
- or via SSH: `sudo systemctl restart webcamd`.
- Alternatively, you could restart your device.
-6. Add a new camera in the fluidd web interface.
- Camera URL should be `webcam1/?action=stream` for the streamer on port 8081;
- `webcam2/?action=stream` for port 8082;
- `webcam3/?action=stream` for port 8083.
+## Crowsnest support
+
+For optimal performance and feature-rich streaming, we recommend using
+**Crowsnest** as your preferred streamer in conjunction with Fluidd.
+
+Crowsnest seamlessly integrates with Fluidd, offering extensive configuration
+options tailored for a wide range of devices.
+
+Please check the [Crowsnest documentation](https://crowsnest.mainsail.xyz/) for
+more information.
diff --git a/docs/features/console.md b/docs/features/console.md
index 4a4be84151..61cccf132c 100644
--- a/docs/features/console.md
+++ b/docs/features/console.md
@@ -11,25 +11,32 @@ permalink: /features/console
---
-Fluidd's console has a bunch of hidden features;
-
-1. Hit the ↑ up and ↓ down arrow keys to scroll through your console history.
- This history is saved across sessions!
-
-2. The console has autocomplete, built in! Start typing, and hit the TAB key
- to retrieve a list of available commands.
-
-3. Known commands in the console are clickable! Try clicking a command, and
- you'll see it appear in the console entry text area.
-
-4. Want to know a full list of klipper commands? Type `help` and hit return!
-
-5. You can filter the console output the way you'd like!
- Head on over to the console settings tab to configure custom filters.
- Currently, the following types of filters are supported:
- * `contains` - Hides messages that contain the given string (case insensitive)
- * `starts with` - Hides messages that start with the given string (case insensitive)
- * `expression` - Hides messages that match the given [regular expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp)
- (e.g. `probe at [\d\.,]+ is z=[01]\.\d+`) (case sensitive)
+Fluidd's console comes with these some sophisticated features:
+
+- **Effortless History Navigation**
+ - Scroll through your console history using the ↑ and
+ ↓ keys.
+ - Benefit from intelligent history preservation across sessions for a
+ seamless workflow.
+
+- **Intelligent Autocomplete Functionality**
+ - Harness the power of built-in autocomplete by initiating a command and
+ using the Tab key.
+
+- **Clickable Commands**
+ - Click any known command, and watch it populate the console text entry area.
+
+- **Klipper Commands Listing**
+ - Gain insights into Klipper commands with ease by typing `help` and hitting
+ return to access an extensive list of available commands.
+
+- **Tailored Console Output**
+ - Visit the Console Settings to configure custom filters, including:
+ - `contains`: Hides messages containing the specified string (case
+ insensitive).
+ - `starts with`: Hides messages that commence with the given string (case
+ insensitive).
+ - `expression` - Filters messages matching the provided [regular expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp)
+ (e.g. `probe at [\d\.,]+ is z=[01]\.\d+`) (case sensitive)
![screenshot](/assets/images/console.png)
diff --git a/docs/features/print_history.md b/docs/features/print_history.md
index 5f6dee64c6..84a406f78f 100644
--- a/docs/features/print_history.md
+++ b/docs/features/print_history.md
@@ -11,19 +11,36 @@ permalink: /features/print_history
---
-Fluidd supports Moonrakers Print History component. This allows you to
-view print history, but more importantly - lets you sort your jobs by last
-print date, filter jobs you've already printed and view printer statistics
-over time - like total print time, total filament used.
+Fluidd seamlessly integrates with Moonraker's Print History component,
+providing you with comprehensive insights into your 3D prints.
-Secondarily, being able to re-print failed or cancelled jobs also comes with
-this feature.
+Here's what you can achieve with this feature:
-For the moment, Fluidd loads the last 50 prints from history. The limit is
-10,000 history items - however, loading this up front may cause a performance
-hit and is likely unecessary.
+- **Effortless Viewing**
+ Review your print history effortlessly, gaining quick access to a
+ chronological list of your past prints.
-Feedback is welcome on the current state of this feature!
+- **Smart Sorting**
+ Easily sort your print jobs by their last print date, enabling efficient
+ organization and retrieval of relevant information.
+
+- **Advanced Filtering**
+ Filter jobs you've already printed, streamlining your view to focus on
+ the prints that matter most to you.
+
+- **Printer Statistics**
+ Gain valuable insights into printer performance over time. Track metrics
+ such as total print time and filament usage to optimize your printing
+ workflow.
+
+- **Re-Print Capability**
+ In case of failed or cancelled jobs, utilize the re-print feature seamlessly
+ integrated into this component.
+
+Fluidd is designed to balance functionality and performance for an optimal user
+experience, and for that reason, it will only load the last 50 prints from the
+history. While the limit extends to 10,000 history items, preloading this
+extensive history may lead to unnecessary performance impacts.
![screenshot](/assets/images/print_history.png)
![screenshot](/assets/images/print_stats.png)
diff --git a/docs/features/updates.md b/docs/features/updates.md
index b053209267..33ddec646c 100644
--- a/docs/features/updates.md
+++ b/docs/features/updates.md
@@ -11,7 +11,8 @@ permalink: /features/updates
---
-Fluidd supports automated updates by way of Moonraker. Please see the moonraker
-[configuration docs](/configuration/moonraker) for further information.
+Fluidd facilitates seamless automated updates through Moonraker. For detailed
+information on configuring automatic updates, please refer to the
+[Moonraker configuration documentation](/configuration/moonraker).
![screenshot](/assets/images/updates.png)
diff --git a/docs/index.md b/docs/index.md
index f2c654f35c..9204ca4493 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -44,17 +44,21 @@ firmware.
## Supporting Fluidd
-Fluidd was created by [Craig Bassett](https://github.com/cadriel) and is currently
-developed and maintained by the [Fluidd team](https://github.com/orgs/fluidd-core/people)
-and our contributors - along with support from the entire Klipper Team, associated
-printer communities and you, the user.
+Fluidd was created by [Craig Bassett](https://github.com/cadriel) and is
+currently developed and maintained by the passionate volunteers of the
+[Fluidd team](https://github.com/orgs/fluidd-core/people) who dedicate their
+time to improving and expanding its capabilities.
+
+In order to help us enhance Fluidd, introduce new features, and ensure it
+remains accessible to all Klipper users, we have now enabled [GitHub Sponsors](https://github.com/sponsors/fluidd-core)
+for Fluidd.
## Docker
Fluidd ships with Docker support built in. The official docker can be found
[here](https://github.com/fluidd-core/fluidd/pkgs/container/fluidd), and further information can be found [here](/installation/docker).
-## Support
+## Need help?
Primary support is provided via Discord, or Github Issues.
diff --git a/package-lock.json b/package-lock.json
index 43b5c874f4..bc3995f172 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -55,7 +55,7 @@
"@types/jsdom": "^21.1.5",
"@types/lodash-es": "^4.17.11",
"@types/md5": "^2.3.5",
- "@types/node": "^18.18.9",
+ "@types/node": "^20.9.0",
"@types/semver": "^7.5.5",
"@types/sortablejs": "^1.15.5",
"@types/uuid": "^9.0.7",
@@ -89,7 +89,7 @@
"vue-tsc": "^1.8.22"
},
"engines": {
- "node": "^16 || ^18"
+ "node": "^18 || ^20"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
@@ -2975,9 +2975,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "18.18.9",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.9.tgz",
- "integrity": "sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==",
+ "version": "20.9.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz",
+ "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -15919,9 +15919,9 @@
"dev": true
},
"@types/node": {
- "version": "18.18.9",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.9.tgz",
- "integrity": "sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==",
+ "version": "20.9.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz",
+ "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==",
"dev": true,
"requires": {
"undici-types": "~5.26.4"
diff --git a/package.json b/package.json
index b48e016cc3..83f3422ab2 100644
--- a/package.json
+++ b/package.json
@@ -79,7 +79,7 @@
"@types/jsdom": "^21.1.5",
"@types/lodash-es": "^4.17.11",
"@types/md5": "^2.3.5",
- "@types/node": "^18.18.9",
+ "@types/node": "^20.9.0",
"@types/semver": "^7.5.5",
"@types/sortablejs": "^1.15.5",
"@types/uuid": "^9.0.7",
@@ -127,6 +127,6 @@
"url": "git+https://github.com/fluidd-core/fluidd.git"
},
"engines": {
- "node": "^16 || ^18"
+ "node": "^18 || ^20"
}
}
diff --git a/public/config.json b/public/config.json
index 8dde3afb75..232054b408 100644
--- a/public/config.json
+++ b/public/config.json
@@ -12,8 +12,7 @@
"color": "#2196F3",
"isDark": true,
"logo": {
- "src": "logo_fluidd.svg",
- "dynamic": true
+ "src": "logo_fluidd.svg"
}
},
{
@@ -21,8 +20,7 @@
"color": "#96CC4A",
"isDark": true,
"logo": {
- "src": "logo_annex.svg",
- "dynamic": true
+ "src": "logo_annex.svg"
}
},
{
@@ -30,8 +28,7 @@
"color": "#475A91",
"isDark": true,
"logo": {
- "src": "logo_btt.svg",
- "dynamic": true
+ "src": "logo_btt.svg"
}
},
{
@@ -41,8 +38,7 @@
"logo": {
"src": "logo_eva.svg",
"dark": "#232323",
- "light": "#ffffff",
- "dynamic": false
+ "light": "#ffffff"
}
},
{
@@ -50,8 +46,7 @@
"color": "#dfff3e",
"isDark": true,
"logo": {
- "src": "logo_hevort.svg",
- "dynamic": true
+ "src": "logo_hevort.svg"
}
},
{
@@ -59,8 +54,7 @@
"color": "#DA7A2C",
"isDark": true,
"logo": {
- "src": "logo_kingroon.svg",
- "dynamic": false
+ "src": "logo_kingroon.svg"
}
},
{
@@ -68,8 +62,7 @@
"color": "#B12F36",
"isDark": true,
"logo": {
- "src": "logo_klipper.svg",
- "dynamic": false
+ "src": "logo_klipper.svg"
}
},
{
@@ -77,8 +70,7 @@
"color": "#326799",
"isDark": true,
"logo": {
- "src": "logo_ldo.svg",
- "dynamic": true
+ "src": "logo_ldo.svg"
}
},
{
@@ -88,8 +80,7 @@
"logo": {
"src": "logo_ratrig.svg",
"dark": "#232323",
- "light": "#ffffff",
- "dynamic": false
+ "light": "#ffffff"
}
},
{
@@ -97,8 +88,7 @@
"color": "#FF2300",
"isDark": true,
"logo": {
- "src": "logo_voron.svg",
- "dynamic": true
+ "src": "logo_voron.svg"
}
},
{
@@ -106,8 +96,7 @@
"color": "#FF2300",
"isDark": true,
"logo": {
- "src": "logo_vzbot.svg",
- "dynamic": false
+ "src": "logo_vzbot.svg"
}
},
{
@@ -115,8 +104,7 @@
"color": "#e34234",
"isDark": true,
"logo": {
- "src": "logo_zerog.svg",
- "dynamic": true
+ "src": "logo_zerog.svg"
}
},
{
@@ -124,8 +112,7 @@
"color": "#4bc3ca",
"isDark": true,
"logo": {
- "src": "logo_snakeoil.svg",
- "dynamic": false
+ "src": "logo_snakeoil.svg"
}
}
]
diff --git a/public/logo_annex.svg b/public/logo_annex.svg
index 685443a36c..4b87eeef8d 100644
--- a/public/logo_annex.svg
+++ b/public/logo_annex.svg
@@ -1,10 +1,11 @@
-
-
+
+
+
+
+
diff --git a/public/logo_btt.svg b/public/logo_btt.svg
index 6a3a8296aa..9696064550 100644
--- a/public/logo_btt.svg
+++ b/public/logo_btt.svg
@@ -1,15 +1,13 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/public/logo_eva.svg b/public/logo_eva.svg
index 91dbee76ff..4c9220daba 100644
--- a/public/logo_eva.svg
+++ b/public/logo_eva.svg
@@ -1,19 +1,11 @@
-
-
-
-
+
+
+
+
diff --git a/public/logo_fluidd.svg b/public/logo_fluidd.svg
index b3ff0cfe34..550d979ed7 100644
--- a/public/logo_fluidd.svg
+++ b/public/logo_fluidd.svg
@@ -1,15 +1,17 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
-
\ No newline at end of file
+
diff --git a/public/logo_hevort.svg b/public/logo_hevort.svg
index 89e6942035..4a70dc6143 100644
--- a/public/logo_hevort.svg
+++ b/public/logo_hevort.svg
@@ -1,10 +1,11 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
diff --git a/public/logo_kingroon.svg b/public/logo_kingroon.svg
index 8537d3bae3..b6d2c02bda 100644
--- a/public/logo_kingroon.svg
+++ b/public/logo_kingroon.svg
@@ -1,38 +1,11 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/public/logo_klipper.svg b/public/logo_klipper.svg
index 0459c1f8a5..63c0bce0d3 100644
--- a/public/logo_klipper.svg
+++ b/public/logo_klipper.svg
@@ -1,28 +1,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
diff --git a/public/logo_ldo.svg b/public/logo_ldo.svg
index 2b447e497b..80d381951f 100644
--- a/public/logo_ldo.svg
+++ b/public/logo_ldo.svg
@@ -1,14 +1,11 @@
-
-
-
-
-
-
+
+
+
+
+
diff --git a/public/logo_ratrig.svg b/public/logo_ratrig.svg
index 7599033abd..7f7ab70f0c 100644
--- a/public/logo_ratrig.svg
+++ b/public/logo_ratrig.svg
@@ -1,7 +1,11 @@
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
diff --git a/public/logo_snakeoil.svg b/public/logo_snakeoil.svg
index 659275aa2e..39d8926372 100644
--- a/public/logo_snakeoil.svg
+++ b/public/logo_snakeoil.svg
@@ -1,17 +1,7 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
diff --git a/public/logo_voron.svg b/public/logo_voron.svg
index 15545b431c..6b6e6dadfc 100644
--- a/public/logo_voron.svg
+++ b/public/logo_voron.svg
@@ -1,16 +1,11 @@
-
-
-
+
+
+
+
+
+
diff --git a/public/logo_vzbot.svg b/public/logo_vzbot.svg
index 258cce1923..4c6f15c387 100644
--- a/public/logo_vzbot.svg
+++ b/public/logo_vzbot.svg
@@ -1,10 +1,9 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
+
diff --git a/public/logo_zerog.svg b/public/logo_zerog.svg
index 7f6341cb7d..415ba35a58 100644
--- a/public/logo_zerog.svg
+++ b/public/logo_zerog.svg
@@ -1,15 +1,11 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
diff --git a/server/config.json b/server/config.json
index e1d419566c..966e98e1ea 100644
--- a/server/config.json
+++ b/server/config.json
@@ -12,8 +12,7 @@
"color": "#2196F3",
"isDark": true,
"logo": {
- "src": "logo_fluidd.svg",
- "dynamic": true
+ "src": "logo_fluidd.svg"
}
},
{
@@ -21,8 +20,7 @@
"color": "#96CC4A",
"isDark": true,
"logo": {
- "src": "logo_annex.svg",
- "dynamic": true
+ "src": "logo_annex.svg"
}
},
{
@@ -30,8 +28,7 @@
"color": "#475A91",
"isDark": true,
"logo": {
- "src": "logo_btt.svg",
- "dynamic": true
+ "src": "logo_btt.svg"
}
},
{
@@ -41,8 +38,7 @@
"logo": {
"src": "logo_eva.svg",
"dark": "#232323",
- "light": "#ffffff",
- "dynamic": false
+ "light": "#ffffff"
}
},
{
@@ -50,8 +46,7 @@
"color": "#dfff3e",
"isDark": true,
"logo": {
- "src": "logo_hevort.svg",
- "dynamic": true
+ "src": "logo_hevort.svg"
}
},
{
@@ -59,8 +54,7 @@
"color": "#DA7A2C",
"isDark": true,
"logo": {
- "src": "logo_kingroon.svg",
- "dynamic": false
+ "src": "logo_kingroon.svg"
}
},
{
@@ -68,8 +62,7 @@
"color": "#B12F36",
"isDark": true,
"logo": {
- "src": "logo_klipper.svg",
- "dynamic": false
+ "src": "logo_klipper.svg"
}
},
{
@@ -77,8 +70,7 @@
"color": "#326799",
"isDark": true,
"logo": {
- "src": "logo_ldo.svg",
- "dynamic": true
+ "src": "logo_ldo.svg"
}
},
{
@@ -88,8 +80,7 @@
"logo": {
"src": "logo_ratrig.svg",
"dark": "#232323",
- "light": "#ffffff",
- "dynamic": false
+ "light": "#ffffff"
}
},
{
@@ -97,8 +88,7 @@
"color": "#FF2300",
"isDark": true,
"logo": {
- "src": "logo_voron.svg",
- "dynamic": true
+ "src": "logo_voron.svg"
}
},
{
@@ -106,8 +96,7 @@
"color": "#FF2300",
"isDark": true,
"logo": {
- "src": "logo_vzbot.svg",
- "dynamic": false
+ "src": "logo_vzbot.svg"
}
},
{
@@ -115,8 +104,15 @@
"color": "#e34234",
"isDark": true,
"logo": {
- "src": "logo_zerog.svg",
- "dynamic": true
+ "src": "logo_zerog.svg"
+ }
+ },
+ {
+ "name": "SnakeOil",
+ "color": "#4bc3ca",
+ "isDark": true,
+ "logo": {
+ "src": "logo_snakeoil.svg"
}
}
]
diff --git a/src/components/ui/AppIcon.vue b/src/components/ui/AppIcon.vue
index cd1de8308c..abf88c1abc 100644
--- a/src/components/ui/AppIcon.vue
+++ b/src/components/ui/AppIcon.vue
@@ -2,62 +2,33 @@
diff --git a/src/components/widgets/bedmesh/BedMeshCard.vue b/src/components/widgets/bedmesh/BedMeshCard.vue
index 7ec7f3f26a..9c159d2271 100644
--- a/src/components/widgets/bedmesh/BedMeshCard.vue
+++ b/src/components/widgets/bedmesh/BedMeshCard.vue
@@ -33,7 +33,7 @@
-
import { Component, Mixins, Prop } from 'vue-property-decorator'
-import EChartsBedMesh from './BedMeshChart.vue'
+import BedMeshChart from './BedMeshChart.vue'
import StateMixin from '@/mixins/state'
import ToolheadMixin from '@/mixins/toolhead'
import BrowserMixin from '@/mixins/browser'
@@ -57,7 +57,7 @@ import type { AppMeshes } from '@/store/mesh/types'
@Component({
components: {
- EChartsBedMesh
+ BedMeshChart
}
})
export default class BedMeshCard extends Mixins(StateMixin, ToolheadMixin, BrowserMixin) {
diff --git a/src/components/widgets/bedmesh/BedMeshChart.vue b/src/components/widgets/bedmesh/BedMeshChart.vue
index 36d3a97b37..57d2e2cf96 100644
--- a/src/components/widgets/bedmesh/BedMeshChart.vue
+++ b/src/components/widgets/bedmesh/BedMeshChart.vue
@@ -24,7 +24,7 @@ import { merge, cloneDeepWith } from 'lodash-es'
import BrowserMixin from '@/mixins/browser'
@Component({})
-export default class EChartsBedMesh extends Mixins(BrowserMixin) {
+export default class BedMeshChart extends Mixins(BrowserMixin) {
@Prop({ type: Array, required: true })
readonly data!: []
diff --git a/src/locales/de.yaml b/src/locales/de.yaml
index e31dc64a18..5c8946eb6d 100644
--- a/src/locales/de.yaml
+++ b/src/locales/de.yaml
@@ -10,6 +10,7 @@ app:
remove_profile: Profil %{name} löschen
scale: Farbskala
wireframe: Drahtmodell
+ base: Basis
msg:
hint: >-
Wird das Profil mit einem anderen Namen als %{name} gespeichert, kann ausgewählt
@@ -30,9 +31,9 @@ app:
rate_of_change: Änderung
tooltip:
help: >-
- Halten Sie die Umschalttaste gedrückt, um zu zoomen. Klicken Sie
- auf ein Element, um es im Diagramm ein-/auszublenden. Klicken Sie
- auf eine Leistung, um sie im Diagramm ein-/auszublenden.
+ Halten Sie Umschalt gedrückt, um zu zoomen. Klicken Sie auf
+ ein Element, um es im Diagramm ein-/auszublenden. Klicken Sie auf eine
+ Leistung, um sie im Diagramm ein-/auszublenden.
console:
label:
auto_scroll: Automatisches Scrollen
@@ -42,6 +43,10 @@ app:
command: >-
Tab für Autovervollständigung, 'help' für Befehle, Pfeiltasten für
Verlauf
+ tooltip:
+ help: Geben Sie "help" für eine Befehlsliste ein Benutzen Sie Tab
+ für Autovervollständigung Benutzen Sie ↑ und ↓
+ für den Verlauf
endpoint:
error:
cant_connect: >-
@@ -219,6 +224,8 @@ app:
create_zip_archive: ZIP-Archiv erstellen
duplicate: Duplizieren
select_columns: Spalten auswählen
+ retry: Wiederholen
+ multiply: Vermehren
error:
app_setup_link: >-
Die Anforderungen für die Einrichtung von Fluidd finden Sie -
- Öffnet automatisch einen Hilfsdialog,
- wenn das BED_SCREWS_ADJUST-Tool ausgeführt wird
+ Öffnet automatisch einen Hilfsdialog, wenn das BED_SCREWS_ADJUST-Werkzeug
+ ausgeführt wird
diagnostics_performance: >-
[BETA] Das Protokollieren von Diagnoseinformationen kann die Leistung beeinträchtigen
+ show_screws_tilt_adjust_dialog_automatically: Öffnet automatisch einen Hilfsdialog,
+ wenn das SCREWS_TILT_CALCULATE-Werkzeug ausgeführt wird
socket:
msg:
connecting: Verbinde mit Moonraker...
@@ -697,6 +715,7 @@ app:
title:
bed_screws_adjust: Bettschrauben einstellen
manual_probe: Manuelles Probing
+ screws_tilt_adjust: Bettneigung einstellen
label:
stats_volumetric_flow: Bei einer Extrusion mit %{extrudeSpeed} mm/s
sollte der Druckkopf einen ungefähren volumetrischen Fluss von %{estimatedVolumetricFlow}
@@ -865,6 +884,10 @@ app:
job_queue:
msg:
confirm: Sind Sie sicher? Hierdurch wird die gesamte Druckwarteschlange geleert
+ title:
+ multiply_job: Auftrag vermehren | Aufträge vermehren
+ label:
+ number_of_copies: Anzahl der Kopien
sensors:
title:
sensors: Sensoren
diff --git a/src/locales/es.yaml b/src/locales/es.yaml
index 3ae7b56ee0..7ce7d0bcb6 100644
--- a/src/locales/es.yaml
+++ b/src/locales/es.yaml
@@ -267,6 +267,7 @@ app:
velocity: Velocidad
visible: Visible
z_offset: Z Offset
+ range: Rango
msg:
bed_screws_adjust: >-
Haga click en Ajustado si fue necesario un ajuste significativo
@@ -288,7 +289,8 @@ app:
required: Obligatorio
msg:
confirm: ¿Está seguro?
- confirm_power_device_toggle: ¿Está seguro? Esto alternará la alimentación del dispositivo.
+ confirm_power_device_toggle: ¿Está seguro? Esto alternará la alimentación
+ del dispositivo.
confirm_reboot_host: ¿Está seguro? Esto reiniciará el sistema anfitrión.
confirm_shutdown_host: ¿Está seguro? Esto apagará el sistema anfitrión.
table:
@@ -408,7 +410,8 @@ app:
reset: Restablecer opciones
retraction_icon_size: Tamaño del icono de retracción
show_animations: Mostrar animaciones
- show_bed_screws_adjust_dialog_automatically: Mostrar diálogo de ajuste de tornillos de cama automáticamente
+ show_bed_screws_adjust_dialog_automatically: Mostrar diálogo de ajuste de tornillos
+ de cama automáticamente
show_rate_of_change: Mostrar tasa de cambio de temperatura
solid: Sólido
starts_with: Comienza con
diff --git a/src/locales/hu.yaml b/src/locales/hu.yaml
index d283ce999d..5e88dc7796 100644
--- a/src/locales/hu.yaml
+++ b/src/locales/hu.yaml
@@ -2,6 +2,7 @@ app:
bedmesh:
label:
active: aktív
+ base: alap
box_scale: Doboz skála
flat_surface: Lapos sík megjelenítése
mesh_matrix: Hálós mátrix
@@ -38,10 +39,9 @@ app:
auto_scroll: Automatikus görgetés
flip_layout: Fordított elrendezés
hide_temp_waits: Hőmérsékletek elrejtése
- placeholder:
- command: >-
- '''tab'' az automatikus kitöltéshez, ''help'' a parancsokhoz
- ''nyilak'' az előzményekhez'
+ tooltip:
+ help: >-
+ Írd be a "help"-et a parancsokhoz Használd Tab az automatikus kiegészítéshez és ↑ az ↓ előzményekhez
endpoint:
error:
cant_connect: >-
@@ -134,6 +134,8 @@ app:
confirm: >-
A fájl "%{filename}" mérete %{size}, megterhelheti a rendszert.
Biztos, hogy folytatod?
+ overlay:
+ drag_file_load: Húzz ide egy G-Kód fájlt a betöltéshez
general:
btn:
abort: Elvet
@@ -168,6 +170,7 @@ app:
login: Belépés
logout: Kijelentkezés
more_information: Bővebb információ
+ multiply: Többszöröz
pause: Szünet
preheat: Előfűtés
presets: Előbeállítások
@@ -192,6 +195,7 @@ app:
restart_service_moonraker: Moonraker újraindítása
resume: Folytatás
retract: Visszahúzás
+ retry: Próbáld újra
return_dashboard: Vissza a műszerfalra
save: Mentés
save_as: Mentés másként
@@ -288,6 +292,7 @@ app:
pressure_advance: Nyomás előtolás
printers: Nyomtatók
progress: Folyamat
+ range: Hatótávolság
requested_speed: Sebesség
retract_length: Visszahúzási hossz
retract_speed: Visszahúzási sebesség
@@ -452,6 +457,10 @@ app:
job_queue:
msg:
confirm: Biztos vagy benne? Törlöd a teljes nyomtatósort
+ label:
+ number_of_copies: Másolatok száma
+ title:
+ multiply_job: Munka szorzása | Munkák szorzása
printer:
state:
busy: Elfoglalt
@@ -463,6 +472,8 @@ app:
printing: Nyomtatás
ready: Kész
standby: Készenlét
+ title:
+ printer_status: Nyomtató állapota
setting:
btn:
add_camera: Kamera hozzáadása
@@ -522,6 +533,7 @@ app:
default_toolhead_z_speed: Alapértelmezett (Z) nyomtatófej sebesség
dotted: Pöttyös
draw_background: Háttér rajzolása
+ draw_origin: Rajzolj eredetet
enable: Engedélyez
enable_diagnostics: Diagnosztika engedélyezése
enable_notifications: Értesítések engedélyezése
@@ -560,8 +572,10 @@ app:
retraction_icon_size: Visszahúzási ikon mérete
right_y: Jobb Y-tengely
save_and_restore_view_state: A nézet állapot mentése és visszaállítása
+ sections_to_ignore_pending_configuration_changes: Szakasz a függőben lévő konfigurációs változások figyelmen kívül hagyásához
show_animations: Animációk megjelenítése
show_barometric_pressure: Barometrikus nyomás mutatása
+ show_chart: Diagram megjelenítése
show_code_lens: CodeLens megjelenítése
show_gas_resistance: Gázellenállás mutatása
show_legend: Legenda mutatása
@@ -589,7 +603,8 @@ app:
text_sort_order: Szövegrendezési sorrend
force_move_toggle_warning: A FORCE_MOVE aktiválásakor megerősítés szükséges
show_manual_probe_dialog_automatically: Kézi szonda párbeszédpanel automatikus megjelenítése
- show_bed_screws_adjust_dialog_automatically: Ágycsavarok automatikus beállítása párbeszédpanel megjelenítése
+ show_bed_screws_adjust_dialog_automatically: Ágycsavarok beállítása párbeszédpanel automatikus megjelenítése
+ show_screws_tilt_adjust_dialog_automatically: Ágycsavarok dőlésszögének beállítása párbeszédpanel automatikus megjelenítése
timer_options:
duration: Csak időtartam
filament: Nyomtatószál becslés
@@ -611,6 +626,7 @@ app:
gcode_coords: G-Kód pozíció használata a nyomtatófej pozíciója helyett a műszerfalon
show_manual_probe_dialog_automatically: Automatikusan megjeleníti a segítő párbeszédpanelt, ha kézi szintezőeszközt futtatsz
show_bed_screws_adjust_dialog_automatically: Automatikusan megjeleníti a segítő párbeszédpanelt, ha a BED_SCREWS_ADJUST eszközt futtatod
+ show_screws_tilt_adjust_dialog_automatically: Automatikusan megjeleníti a segítő párbeszédpanelt, ha a SCREWS_TILT_CALCULATE eszközt futtatod
socket:
msg:
connecting: Csatlakozás a Moonraker-hez...
@@ -654,6 +670,7 @@ app:
title:
bed_screws_adjust: Ágycsavarok beállítása
manual_probe: Kézi szonda
+ screws_tilt_adjust: Csavarok dőlésszög beállítása
tooltip:
absolute_positioning: Abszolút pozicionálás
extruder_disabled: extruder letiltva, min_extrude_temp (%{min}°C ) alatt van
diff --git a/src/locales/pl.yaml b/src/locales/pl.yaml
index f3d621420d..3d3e7cdd7c 100644
--- a/src/locales/pl.yaml
+++ b/src/locales/pl.yaml
@@ -10,6 +10,7 @@ app:
remove_profile: Usuń profil %{name}
scale: Skala barw
wireframe: Szkielet
+ base: baza
msg:
hint: Zapisując profil jako inny niż %{name}, możesz wybrać usunięcie profilu
%{name}
@@ -28,8 +29,8 @@ app:
rate_of_change: Zmiana
target: Docelowo
tooltip:
- help: Przytrzymaj Shift, aby powiększyć. Kliknij element, aby przełączyć
- na wykresie. Kliknij Moc, aby przełączyć na wykresie.
+ help: Przytrzymaj Shift , aby powiększyć. Kliknij nazwę, aby
+ przełączyć na wykresie. Kliknij na moc, aby przełączyć na wykresie.
console:
label:
auto_scroll: Auto. przewijanie
@@ -38,6 +39,9 @@ app:
placeholder:
command: "Przycisk TAB do autouzupełniania; wpisz „help” dla komend; użyj strzałek
dla historii"
+ tooltip:
+ help: Wprowadź "help", aby uzyskać komendy Użyj Tab dla autouzupełniania Używaj ↑ i ↓ dla historii poleceń
endpoint:
error:
cant_connect: Coś poszło nie tak i fluidd nie może dotrzeć do celu. Czy to na
@@ -211,6 +215,7 @@ app:
turn_device_on: Włącz %{device}
cross: Krzyż
bars: Pasek
+ range: Zakres
btn:
abort: Przerwij
add: Dodaj
@@ -288,6 +293,8 @@ app:
thumbnail_size: Rozmiar miniatur
quad_gantry_level: QGL
refresh_metadata: Odśwież metadane
+ multiply: Powiel
+ retry: Ponów
title:
home: Ekran główny
camera: Kamera | Kamery
@@ -454,6 +461,7 @@ app:
title:
bed_screws_adjust: Regulacja śrub stołu
manual_probe: Sonda ręczna
+ screws_tilt_adjust: Regulacja pochylenia śrubami
label:
stats_active_extruder: Aktywna konfiguracja ekstrudera
jest ustawiona na %{filamentDiameter} mm średnicy filamentu i
@@ -588,6 +596,12 @@ app:
toolhead_control_style: Styl sterowania głowicą narzędziową
toolhead_xy_move_distances: Wartości odległości XY głowicy narzędziowej
toolhead_z_move_distances: Wartości odległości Z głowicy narzędziowej
+ show_chart: Pokaż wykres
+ sections_to_ignore_pending_configuration_changes: Sekcje do ignorowania oczekujących
+ zmian konfiguracji
+ show_screws_tilt_adjust_dialog_automatically: Automatycznie wyświetl okno "Regulacja
+ pochylenia śrubami"
+ draw_origin: Rysuj początek
camera_type_options:
mjpegstream: Strumień MJPEG
mjpegadaptive: Adaptacyjny MJPEG
@@ -613,6 +627,8 @@ app:
gdy uruchomione jest ręczne sondowanie
show_bed_screws_adjust_dialog_automatically: Automatycznie wyświetla pomocnicze
okno, gdy uruchomione jest narzędzie BED_SCREWS_ADJUST
+ show_screws_tilt_adjust_dialog_automatically: Automatycznie wyświetla okno pomocnicze,
+ jeśli uruchomione jest narzędzie SCREWS_TILT_CALCULATE
camera_rotate_options:
'90': 90°
'180': 180°
@@ -634,6 +650,8 @@ app:
paused: Wstrzymano
standby: Stan gotowości
printing: Drukowanie
+ title:
+ printer_status: Status drukarki
system_info:
label:
distribution_codename: Nazwa kodowa
@@ -674,6 +692,10 @@ app:
job_queue:
msg:
confirm: Czy na pewno? Spowoduje to wyczyszczenie całej kolejki drukowania
+ title:
+ multiply_job: Powiel zadanie | Powiel zadania
+ label:
+ number_of_copies: Liczba kopii
version:
label:
commit_history: Historia zmian
@@ -811,9 +833,9 @@ app:
kodu QR
prefer_device_camera: Użyj kamery urządzenia do wykrywania kodów QR, jeśli jest
dostępna
- warn_on_not_enough_filament: Wyświetla ostrzeżenie, gdy na wybranej szpuli nie
- ma wystarczającej ilości filamentu do zakończenia drukowania
- warn_on_filament_type_mismatch: Wyświetla ostrzeżenie, gdy typ filamentu wybrany
+ warn_on_not_enough_filament: Pokaż ostrzeżenie, gdy na wybranej szpuli nie ma
+ wystarczającej ilości filamentu do zakończenia drukowania
+ warn_on_filament_type_mismatch: Pokaż ostrzeżenie, gdy typ filamentu wybrany
w slicerze i filamentu na szpuli nie jest zgodny
sensors:
title:
diff --git a/src/locales/pt.yaml b/src/locales/pt.yaml
index f54f45c3b8..d21274dc4c 100644
--- a/src/locales/pt.yaml
+++ b/src/locales/pt.yaml
@@ -1,7 +1,7 @@
app:
bedmesh:
label:
- flat_surface: Mostrar plano plano
+ flat_surface: Mostrar plano raso
mesh_matrix: Matriz de malha
probed_matrix: Matriz sondada
profile_name: Perfil
@@ -11,8 +11,8 @@ app:
active: activo
msg:
hint: >-
- Se salvar algo diferente de % {name}, pode escolher remover também o
- perfi % {name}
+ Se guardar como algo diferente de % {name}, pode escolher remover também o
+ perfil % {name}
not_found: Não foram encontrados nivelamentos da mesa.
not_loaded: Nenhuma malha carregada
tooltip:
diff --git a/src/store/config/getters.ts b/src/store/config/getters.ts
index 3dde215dff..05e71e5247 100644
--- a/src/store/config/getters.ts
+++ b/src/store/config/getters.ts
@@ -124,8 +124,7 @@ export const getters: GetterTree = {
color: '#2196F3',
isDark: true,
logo: {
- src: 'logo_fluidd.svg',
- dynamic: true
+ src: 'logo_fluidd.svg'
}
}
},
diff --git a/src/store/config/state.ts b/src/store/config/state.ts
index 02bab94178..78f6c43f59 100644
--- a/src/store/config/state.ts
+++ b/src/store/config/state.ts
@@ -63,8 +63,7 @@ export const defaultState = (): ConfigState => {
theme: {
isDark: true,
logo: {
- src: 'logo_fluidd.svg',
- dynamic: true
+ src: 'logo_fluidd.svg'
},
currentTheme: {
primary: '#2196F3'
diff --git a/src/store/config/types.ts b/src/store/config/types.ts
index 1d22aaa411..d4944ee0fd 100644
--- a/src/store/config/types.ts
+++ b/src/store/config/types.ts
@@ -117,7 +117,6 @@ export interface SupportedTheme {
export interface SupportedThemeLogo {
src: string;
- dynamic: boolean;
dark?: string;
light?: string;
}
diff --git a/src/util/transform-mesh.ts b/src/util/transform-mesh.ts
index 795c77307f..441857116b 100644
--- a/src/util/transform-mesh.ts
+++ b/src/util/transform-mesh.ts
@@ -53,7 +53,7 @@ export const transformMesh = (bedMesh: KlipperBedMesh, meshMatrix: keyof Klipper
return {
coordinates,
- dimensions: [x_idx, y_idx],
+ dimensions: [y_idx, x_idx],
min,
mid,
max,