aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBastien Wirtz <bastien.wirtz@gmail.com>2022-11-27 18:41:12 +0100
committerGitHub <noreply@github.com>2022-11-27 09:41:12 -0800
commit70f583c3e1d7c4bc1cca6b9c1cec6ca2e1f9e7b3 (patch)
tree4a81ec8383a9d6ee6b58138d2a5fd429c9161799
parent98fe0a393970070fa04b5f37dbbb7a4c3ef82beb (diff)
downloadhomer-70f583c3e1d7c4bc1cca6b9c1cec6ca2e1f9e7b3.tar.gz
homer-70f583c3e1d7c4bc1cca6b9c1cec6ca2e1f9e7b3.tar.zst
homer-70f583c3e1d7c4bc1cca6b9c1cec6ca2e1f9e7b3.zip
Octoprint service (#324) (#560)v22.11.2
Add Octoprint service.
-rw-r--r--docs/customservices.md32
-rw-r--r--dummy-data/README.md6
-rw-r--r--dummy-data/octoprint/api/job30
-rw-r--r--dummy-data/octoprint/api/status_printer_offline-error.json26
-rw-r--r--dummy-data/octoprint/api/status_printer_offline.json26
-rw-r--r--dummy-data/octoprint/api/status_printer_operational.json26
-rw-r--r--dummy-data/octoprint/api/status_printer_printing.json30
-rw-r--r--dummy-data/octoprint/api/status_printer_printing_1of2.json30
-rw-r--r--dummy-data/octoprint/api/status_printer_printing_2of2.json30
-rw-r--r--dummy-data/octoprint/api/status_printing_completion.json30
-rw-r--r--dummy-data/speedtesttracker/api/speedtest/latest7
-rw-r--r--package.json6
-rw-r--r--public/assets/config-demo.yml.dist5
-rw-r--r--src/assets/app.scss2
-rw-r--r--src/assets/components/status.scss48
-rw-r--r--src/components/services/OctoPrint.vue108
-rw-r--r--yarn.lock172
17 files changed, 596 insertions, 18 deletions
diff --git a/docs/customservices.md b/docs/customservices.md
index 5bb08ff..88e4e2f 100644
--- a/docs/customservices.md
+++ b/docs/customservices.md
@@ -31,6 +31,7 @@ within Homer:
31 - [Speedtest Tracker](#SpeedtestTracker) 31 - [Speedtest Tracker](#SpeedtestTracker)
32 - [What's Up Docker](#whats-up-docker) 32 - [What's Up Docker](#whats-up-docker)
33 - [SABnzbd](#sabnzbd) 33 - [SABnzbd](#sabnzbd)
34 - [OctoPrint](#sabnzbd)
34 35
35If you experiencing any issue, please have a look to the [troubleshooting](troubleshooting.md) page. 36If you experiencing any issue, please have a look to the [troubleshooting](troubleshooting.md) page.
36 37
@@ -84,7 +85,7 @@ Two lines are needed in the config.yml :
84 85
85```yaml 86```yaml
86 type: "Medusa" 87 type: "Medusa"
87 apikey: "01234deb70424befb1f4ef6a23456789" 88 apikey: "<---insert-api-key-here--->"
88``` 89```
89 90
90The url must be the root url of Medusa application. 91The url must be the root url of Medusa application.
@@ -97,7 +98,7 @@ Two lines are needed in the config.yml :
97 98
98```yaml 99```yaml
99 type: "Lidarr", "Prowlarr", "Radarr" or "Sonarr" 100 type: "Lidarr", "Prowlarr", "Radarr" or "Sonarr"
100 apikey: "01234deb70424befb1f4ef6a23456789" 101 apikey: "<---insert-api-key-here--->"
101``` 102```
102 103
103The url must be the root url of Lidarr, Prowlarr, Radarr or Sonarr application. 104The url must be the root url of Lidarr, Prowlarr, Radarr or Sonarr application.
@@ -108,7 +109,7 @@ If you are using an older version of Radarr or Sonarr which don't support the ne
108- name: "Radarr" 109- name: "Radarr"
109 type: "Radarr" 110 type: "Radarr"
110 url: "http://localhost:7878/" 111 url: "http://localhost:7878/"
111 apikey: "MY-SUPER-SECRET-API-KEY" 112 apikey: "<---insert-api-key-here--->"
112 target: "_blank" 113 target: "_blank"
113 legacyApi: true 114 legacyApi: true
114``` 115```
@@ -119,7 +120,7 @@ This service displays total number of documents stored. Two lines are required:
119 120
120```yaml 121```yaml
121 type: "PaperlessNG" 122 type: "PaperlessNG"
122 apikey: "0123456789abcdef123456789abcdef" 123 apikey: "<---insert-api-key-here--->"
123``` 124```
124 125
125API key can be generated in Settings > Administration > Auth Tokens 126API key can be generated in Settings > Administration > Auth Tokens
@@ -175,7 +176,7 @@ See https://docs.portainer.io/v/ce-2.11/user/account-settings#access-tokens
175 logo: "assets/tools/sample.png" 176 logo: "assets/tools/sample.png"
176 url: "http://192.168.0.151/" 177 url: "http://192.168.0.151/"
177 type: "Portainer" 178 type: "Portainer"
178 apikey: "MY-SUPER-SECRET-API-KEY" 179 apikey: "<---insert-api-key-here--->"
179 # environments: 180 # environments:
180 # - "raspberry" 181 # - "raspberry"
181 # - "local" 182 # - "local"
@@ -190,7 +191,7 @@ You need to set the type to Emby, provide an api key and choose which stats to s
190 logo: "assets/tools/sample.png" 191 logo: "assets/tools/sample.png"
191 url: "http://192.168.0.151/" 192 url: "http://192.168.0.151/"
192 type: "Emby" 193 type: "Emby"
193 apikey: "MY-SUPER-SECRET-API-KEY" 194 apikey: "<---insert-api-key-here--->"
194 libraryType: "music" #Choose which stats to show. Can be one of: music, series or movies. 195 libraryType: "music" #Choose which stats to show. Can be one of: music, series or movies.
195``` 196```
196 197
@@ -220,7 +221,7 @@ the "Web Interface" section of settings on the Tautulli web UI.
220 logo: "assets/tools/sample.png" 221 logo: "assets/tools/sample.png"
221 url: "http://192.168.0.151:8181" 222 url: "http://192.168.0.151:8181"
222 type: "Tautulli" 223 type: "Tautulli"
223 apikey: "MY-SUPER-SECRET-API-KEY" 224 apikey: "<---insert-api-key-here--->"
224``` 225```
225 226
226Because the service type and link don't necessarily have to match, you could 227Because the service type and link don't necessarily have to match, you could
@@ -233,7 +234,7 @@ endpoint pointing to Tautulli!
233 url: "http://192.168.0.151:32400/web" # Plex 234 url: "http://192.168.0.151:32400/web" # Plex
234 endpoint: "http://192.168.0.151:8181" # Tautulli 235 endpoint: "http://192.168.0.151:8181" # Tautulli
235 type: "Tautulli" 236 type: "Tautulli"
236 apikey: "MY-SUPER-SECRET-API-KEY" 237 apikey: "<---insert-api-key-here--->"
237``` 238```
238 239
239## Mealie 240## Mealie
@@ -248,7 +249,7 @@ Two lines are needed in the config.yml :
248 249
249```yaml 250```yaml
250 type: "Healthchecks" 251 type: "Healthchecks"
251 apikey: "01234deb70424befb1f4ef6a23456789" 252 apikey: "<---insert-api-key-here--->"
252``` 253```
253 254
254The url must be the root url of the Healthchecks application. 255The url must be the root url of the Healthchecks application.
@@ -377,3 +378,16 @@ the "Config" > "General" section of the SABnzbd config in the SABnzbd web UI.
377 apikey: "MY-SUPER-SECRET-API-KEY" 378 apikey: "MY-SUPER-SECRET-API-KEY"
378 downloadInterval: 5000 # (Optional) Interval (in ms) for updating the download count 379 downloadInterval: 5000 # (Optional) Interval (in ms) for updating the download count
379``` 380```
381
382## OctoPrint
383
384The OctoPrint service only needs an `apikey` & `url` and optionally a `display` option.
385
386```yaml
387- name: "Octoprint"
388 logo: "https://cdn-icons-png.flaticon.com/512/3112/3112529.png"
389 apikey: "xxxxxxxxxxxx" # insert your own API key here. Request one from https://openweathermap.org/api.
390 url: "http://192.168.0.151:8080"
391 display: "text" # 'text' or 'bar'. Default to `text`.
392 type: "OctoPrint"
393``` \ No newline at end of file
diff --git a/dummy-data/README.md b/dummy-data/README.md
index 6db4712..78b2243 100644
--- a/dummy-data/README.md
+++ b/dummy-data/README.md
@@ -3,6 +3,12 @@
3This directory content makes possible to test custom services cards or create a demo without actually running the service. 3This directory content makes possible to test custom services cards or create a demo without actually running the service.
4The principle is simple: save a sample output of the API used in the service in a static file in this directory. The path must be identical as the service endpoint to be used seamlessly. 4The principle is simple: save a sample output of the API used in the service in a static file in this directory. The path must be identical as the service endpoint to be used seamlessly.
5 5
6## Start the mock server to expose dummy data
7
8```sh
9yarn mock
10```
11
6## How to add a new services sample 12## How to add a new services sample
7 13
8- create a directory for your service, and any sub-folder existing in the service api path. 14- create a directory for your service, and any sub-folder existing in the service api path.
diff --git a/dummy-data/octoprint/api/job b/dummy-data/octoprint/api/job
new file mode 100644
index 0000000..c1ec6ed
--- /dev/null
+++ b/dummy-data/octoprint/api/job
@@ -0,0 +1,30 @@
1{
2 "job": {
3 "averagePrintTime": 669.3131185749999,
4 "estimatedPrintTime": 314.87566979223726,
5 "filament": {
6 "tool0": {
7 "length": 134.81171000000032,
8 "volume": 0.0
9 }
10 },
11 "file": {
12 "date": 1665547748,
13 "display": "CE3PRO_3mmX3mm Brass insert V2.gcode",
14 "name": "CE3PRO_3mmX3mm Brass insert V2.gcode",
15 "origin": "local",
16 "path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode",
17 "size": 129581
18 },
19 "lastPrintTime": 669.3131185749999,
20 "user": "friendlyngeeks"
21 },
22 "progress": {
23 "completion": 27.456185706237797,
24 "filepos": 35578,
25 "printTime": 460,
26 "printTimeLeft": 4612,
27 "printTimeLeftOrigin": "linear"
28 },
29 "state": "Printing"
30} \ No newline at end of file
diff --git a/dummy-data/octoprint/api/status_printer_offline-error.json b/dummy-data/octoprint/api/status_printer_offline-error.json
new file mode 100644
index 0000000..10fa163
--- /dev/null
+++ b/dummy-data/octoprint/api/status_printer_offline-error.json
@@ -0,0 +1,26 @@
1{
2 "error": "SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)",
3 "job": {
4 "averagePrintTime": null,
5 "estimatedPrintTime": null,
6 "filament": null,
7 "file": {
8 "date": null,
9 "display": null,
10 "name": null,
11 "origin": null,
12 "path": null,
13 "size": null
14 },
15 "lastPrintTime": null,
16 "user": null
17 },
18 "progress": {
19 "completion": null,
20 "filepos": null,
21 "printTime": null,
22 "printTimeLeft": null,
23 "printTimeLeftOrigin": null
24 },
25 "state": "Offline after error"
26} \ No newline at end of file
diff --git a/dummy-data/octoprint/api/status_printer_offline.json b/dummy-data/octoprint/api/status_printer_offline.json
new file mode 100644
index 0000000..c733409
--- /dev/null
+++ b/dummy-data/octoprint/api/status_printer_offline.json
@@ -0,0 +1,26 @@
1{
2 "job": {
3 "estimatedPrintTime": null,
4 "filament": {
5 "length": null,
6 "volume": null
7 },
8 "file": {
9 "date": null,
10 "name": null,
11 "origin": null,
12 "path": null,
13 "size": null
14 },
15 "lastPrintTime": null,
16 "user": null
17 },
18 "progress": {
19 "completion": null,
20 "filepos": null,
21 "printTime": null,
22 "printTimeLeft": null,
23 "printTimeOrigin": null
24 },
25 "state": "Offline"
26} \ No newline at end of file
diff --git a/dummy-data/octoprint/api/status_printer_operational.json b/dummy-data/octoprint/api/status_printer_operational.json
new file mode 100644
index 0000000..993d798
--- /dev/null
+++ b/dummy-data/octoprint/api/status_printer_operational.json
@@ -0,0 +1,26 @@
1{
2 "job": {
3 "estimatedPrintTime": null,
4 "filament": {
5 "length": null,
6 "volume": null
7 },
8 "file": {
9 "date": null,
10 "name": null,
11 "origin": null,
12 "path": null,
13 "size": null
14 },
15 "lastPrintTime": null,
16 "user": null
17 },
18 "progress": {
19 "completion": null,
20 "filepos": null,
21 "printTime": null,
22 "printTimeLeft": null,
23 "printTimeOrigin": null
24 },
25 "state": "Operational"
26} \ No newline at end of file
diff --git a/dummy-data/octoprint/api/status_printer_printing.json b/dummy-data/octoprint/api/status_printer_printing.json
new file mode 100644
index 0000000..09cf3cf
--- /dev/null
+++ b/dummy-data/octoprint/api/status_printer_printing.json
@@ -0,0 +1,30 @@
1{
2 "job": {
3 "averagePrintTime": 669.3131185749999,
4 "estimatedPrintTime": 314.87566979223726,
5 "filament": {
6 "tool0": {
7 "length": 134.81171000000032,
8 "volume": 0.0
9 }
10 },
11 "file": {
12 "date": 1665547748,
13 "display": "CE3PRO_3mmX3mm Brass insert V2.gcode",
14 "name": "CE3PRO_3mmX3mm Brass insert V2.gcode",
15 "origin": "local",
16 "path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode",
17 "size": 129581
18 },
19 "lastPrintTime": 669.3131185749999,
20 "user": "friendlyngeeks"
21 },
22 "progress": {
23 "completion": 0.1551153332664511,
24 "filepos": 201,
25 "printTime": 0,
26 "printTimeLeft": 668,
27 "printTimeLeftOrigin": "average"
28 },
29 "state": "Printing"
30} \ No newline at end of file
diff --git a/dummy-data/octoprint/api/status_printer_printing_1of2.json b/dummy-data/octoprint/api/status_printer_printing_1of2.json
new file mode 100644
index 0000000..09cf3cf
--- /dev/null
+++ b/dummy-data/octoprint/api/status_printer_printing_1of2.json
@@ -0,0 +1,30 @@
1{
2 "job": {
3 "averagePrintTime": 669.3131185749999,
4 "estimatedPrintTime": 314.87566979223726,
5 "filament": {
6 "tool0": {
7 "length": 134.81171000000032,
8 "volume": 0.0
9 }
10 },
11 "file": {
12 "date": 1665547748,
13 "display": "CE3PRO_3mmX3mm Brass insert V2.gcode",
14 "name": "CE3PRO_3mmX3mm Brass insert V2.gcode",
15 "origin": "local",
16 "path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode",
17 "size": 129581
18 },
19 "lastPrintTime": 669.3131185749999,
20 "user": "friendlyngeeks"
21 },
22 "progress": {
23 "completion": 0.1551153332664511,
24 "filepos": 201,
25 "printTime": 0,
26 "printTimeLeft": 668,
27 "printTimeLeftOrigin": "average"
28 },
29 "state": "Printing"
30} \ No newline at end of file
diff --git a/dummy-data/octoprint/api/status_printer_printing_2of2.json b/dummy-data/octoprint/api/status_printer_printing_2of2.json
new file mode 100644
index 0000000..2acf861
--- /dev/null
+++ b/dummy-data/octoprint/api/status_printer_printing_2of2.json
@@ -0,0 +1,30 @@
1{
2 "job": {
3 "averagePrintTime": 669.3131185749999,
4 "estimatedPrintTime": 314.87566979223726,
5 "filament": {
6 "tool0": {
7 "length": 134.81171000000032,
8 "volume": 0.0
9 }
10 },
11 "file": {
12 "date": 1665547748,
13 "display": "CE3PRO_3mmX3mm Brass insert V2.gcode",
14 "name": "CE3PRO_3mmX3mm Brass insert V2.gcode",
15 "origin": "local",
16 "path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode",
17 "size": 129581
18 },
19 "lastPrintTime": 669.3131185749999,
20 "user": "friendlyngeeks"
21 },
22 "progress": {
23 "completion": 27.456185706237797,
24 "filepos": 35578,
25 "printTime": 476,
26 "printTimeLeft": 1612,
27 "printTimeLeftOrigin": "linear"
28 },
29 "state": "Printing"
30} \ No newline at end of file
diff --git a/dummy-data/octoprint/api/status_printing_completion.json b/dummy-data/octoprint/api/status_printing_completion.json
new file mode 100644
index 0000000..55728ba
--- /dev/null
+++ b/dummy-data/octoprint/api/status_printing_completion.json
@@ -0,0 +1,30 @@
1{
2 "job": {
3 "averagePrintTime": 698.814525153,
4 "estimatedPrintTime": 314.87566979223726,
5 "filament": {
6 "tool0": {
7 "length": 134.81171000000032,
8 "volume": 0.0
9 }
10 },
11 "file": {
12 "date": 1665547748,
13 "display": "CE3PRO_3mmX3mm Brass insert V2.gcode",
14 "name": "CE3PRO_3mmX3mm Brass insert V2.gcode",
15 "origin": "local",
16 "path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode",
17 "size": 129581
18 },
19 "lastPrintTime": 728.315931731,
20 "user": "friendlyngeeks"
21 },
22 "progress": {
23 "completion": 100.0,
24 "filepos": 129581,
25 "printTime": 728,
26 "printTimeLeft": 0,
27 "printTimeLeftOrigin": null
28 },
29 "state": "Operational"
30} \ No newline at end of file
diff --git a/dummy-data/speedtesttracker/api/speedtest/latest b/dummy-data/speedtesttracker/api/speedtest/latest
new file mode 100644
index 0000000..c8e3c1e
--- /dev/null
+++ b/dummy-data/speedtesttracker/api/speedtest/latest
@@ -0,0 +1,7 @@
1{
2 "data": {
3 "download": 42.452234,
4 "upload": 34.3948,
5 "ping": 12.9873
6 }
7} \ No newline at end of file
diff --git a/package.json b/package.json
index 93953c1..c97dc56 100644
--- a/package.json
+++ b/package.json
@@ -3,6 +3,7 @@
3 "version": "22.07.2", 3 "version": "22.07.2",
4 "scripts": { 4 "scripts": {
5 "dev": "vite", 5 "dev": "vite",
6 "mock": "http-server dummy-data/ --cors",
6 "build": "vite build", 7 "build": "vite build",
7 "preview": "vite preview --port 5050", 8 "preview": "vite preview --port 5050",
8 "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore" 9 "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore"
@@ -10,9 +11,9 @@
10 "dependencies": { 11 "dependencies": {
11 "@fortawesome/fontawesome-free": "^6.2.0", 12 "@fortawesome/fontawesome-free": "^6.2.0",
12 "bulma": "^0.9.4", 13 "bulma": "^0.9.4",
13 "yaml": "^2.1.3",
14 "lodash.merge": "^4.6.2", 14 "lodash.merge": "^4.6.2",
15 "vue": "^3.2.41" 15 "vue": "^3.2.41",
16 "yaml": "^2.1.3"
16 }, 17 },
17 "devDependencies": { 18 "devDependencies": {
18 "@rushstack/eslint-patch": "^1.2.0", 19 "@rushstack/eslint-patch": "^1.2.0",
@@ -20,6 +21,7 @@
20 "@vue/eslint-config-prettier": "^7.0.0", 21 "@vue/eslint-config-prettier": "^7.0.0",
21 "eslint": "^8.26.0", 22 "eslint": "^8.26.0",
22 "eslint-plugin-vue": "^9.6.0", 23 "eslint-plugin-vue": "^9.6.0",
24 "http-server": "^14.1.1",
23 "prettier": "^2.7.1", 25 "prettier": "^2.7.1",
24 "sass": "^1.55.0", 26 "sass": "^1.55.0",
25 "vite": "^3.2.1", 27 "vite": "^3.2.1",
diff --git a/public/assets/config-demo.yml.dist b/public/assets/config-demo.yml.dist
index 4d088cc..22dd3b0 100644
--- a/public/assets/config-demo.yml.dist
+++ b/public/assets/config-demo.yml.dist
@@ -93,6 +93,11 @@ services:
93 - name: "Tools" 93 - name: "Tools"
94 icon: "fa-solid fa-screwdriver-wrench" 94 icon: "fa-solid fa-screwdriver-wrench"
95 items: 95 items:
96 - name: "Octoprint"
97 logo: "https://cdn-icons-png.flaticon.com/512/3112/3112529.png"
98 apikey: "xxxxxxxxxxxx"
99 endpoint: "https://homer-demo-content.netlify.app/octoprint"
100 type: "OctoPrint"
96 - name: "Example item" 101 - name: "Example item"
97 logo: "assets/tools/sample.png" 102 logo: "assets/tools/sample.png"
98 subtitle: "This another example" 103 subtitle: "This another example"
diff --git a/src/assets/app.scss b/src/assets/app.scss
index d112482..4ce417a 100644
--- a/src/assets/app.scss
+++ b/src/assets/app.scss
@@ -1,8 +1,8 @@
1@charset "utf-8"; 1@charset "utf-8";
2 2
3@import "./webfonts/webfonts.scss"; 3@import "./webfonts/webfonts.scss";
4
5@import "../../node_modules/bulma/bulma"; 4@import "../../node_modules/bulma/bulma";
5@import "./components/status.scss";
6 6
7// Themes import 7// Themes import
8@import "./themes/sui.scss"; 8@import "./themes/sui.scss";
diff --git a/src/assets/components/status.scss b/src/assets/components/status.scss
new file mode 100644
index 0000000..b5fd20b
--- /dev/null
+++ b/src/assets/components/status.scss
@@ -0,0 +1,48 @@
1.status {
2 font-size: 0.8rem;
3 color: var(--text-title);
4
5 &.offline:before, &.error:before {
6 background-color: #d65c68;
7 box-shadow: 0 0 5px 1px #d65c68;
8 color: #d65c68;
9 }
10
11 &.pending:before {
12 background-color: #e8bb7d;
13 box-shadow: 0 0 5px 1px #e8bb7d;
14 }
15
16 &.online:before, &.ready:before {
17 background-color: #94e185;
18 box-shadow: 0 0 5px 1px #94e185;
19 }
20
21 &.in-progress:before {
22 background-color: #8fe87d;
23 box-shadow: 0 0 5px 1px #8fe87d;
24 animation: pulse 1s alternate infinite;
25 }
26
27 @keyframes pulse {
28 0% {
29 background: rgba(255, 255, 255, 0.2);
30 box-shadow: inset 0px 0px 10px 2px rgba(0, 255, 182, 0.3),
31 0px 0px 5px 2px rgba(0, 255, 135, 0.2);
32 }
33 100% {
34 background: rgba(255, 255, 255, 1);
35 box-shadow: inset 0px 0px 10px 2px rgba(0, 255, 182, 0.5),
36 0px 0px 15px 2px rgba(0, 255, 135, 1);
37 }
38 }
39
40 &:before {
41 content: " ";
42 display: inline-block;
43 width: 8px;
44 height: 8px;
45 margin-right: 10px;
46 border-radius: 8px;
47 }
48 } \ No newline at end of file
diff --git a/src/components/services/OctoPrint.vue b/src/components/services/OctoPrint.vue
new file mode 100644
index 0000000..c5da8d9
--- /dev/null
+++ b/src/components/services/OctoPrint.vue
@@ -0,0 +1,108 @@
1<template>
2 <Generic :item="item" :title="state">
3 <template #content>
4 <p class="title is-4">{{ item.name }}</p>
5 <p class="subtitle is-6">
6 <template v-if="item.subtitle && !state">
7 {{ item.subtitle }}
8 </template>
9 <template v-if="!error && display == 'text'">
10 <i class="fa-solid fa-gear mr-1"></i>
11 <b v-if="completion">{{ completion.toFixed() }}%</b>
12 <span class="separator mx-1"> | </span>
13 <span v-if="printTime" :title="`${toTime(printTimeLeft)} left`">
14 <i class="fa-solid fa-stopwatch mr-1"></i>
15 {{ toTime(printTime) }}
16 </span>
17 </template>
18 <template v-if="!error && display == 'bar'">
19 <progress
20 v-if="completion"
21 class="progress is-primary"
22 :value="completion"
23 max="100"
24 :title="`${state} - ${completion.toFixed()}%, ${toTime(
25 printTimeLeft
26 )} left`"
27 >
28 {{ completion }}%
29 </progress>
30 </template>
31 <span v-if="error" :title="error">{{ error }}</span>
32 </p>
33 </template>
34 <template #indicator>
35 <i :class="['status', statusClass]" :title="state"></i>
36 </template>
37 </Generic>
38</template>
39
40<script>
41import service from "@/mixins/service.js";
42import Generic from "./Generic.vue";
43
44export default {
45 name: "OctoPrint",
46 mixins: [service],
47 props: {
48 item: Object,
49 },
50 components: {
51 Generic,
52 },
53 data: () => ({
54 printTime: null,
55 printTimeLeft: null,
56 completion: null,
57 state: null,
58 error: null,
59 }),
60 computed: {
61 statusClass: function () {
62 switch (this.state) {
63 case "Operational":
64 return "ready";
65 case "Offline":
66 return "offline";
67 case "Printing":
68 return "in-progress";
69 default:
70 return "pending";
71 }
72 },
73 },
74 created() {
75 this.display = this.item.display == "bar" ? this.item.display : "text";
76 this.fetchStatus();
77 },
78 methods: {
79 fetchStatus: async function () {
80 try {
81 const response = await this.fetch(`api/job?apikey=${this.item.apikey}`);
82 this.printTime = response.progress.printTime;
83 this.printTimeLeft = response.progress.printTimeLeft;
84 this.completion = response.progress.completion;
85 this.state = response.state;
86 this.error = response.error;
87 } catch (e) {
88 this.error = `Fail to fetch octoprint data (${e.message})`;
89 console.error(e);
90 }
91 },
92 toTime: function (timastamp) {
93 return new Date(timastamp * 1000).toTimeString().substring(0, 5);
94 },
95 },
96};
97</script>
98
99<style scoped lang="scss">
100.fa-triangle-exclamation::before {
101 color: #d65c68;
102}
103
104.progress {
105 height: 8px;
106 width: 90%;
107}
108</style>
diff --git a/yarn.lock b/yarn.lock
index 1a2d7ed..ec9d0c0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1269,6 +1269,13 @@ argparse@^2.0.1:
1269 resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 1269 resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
1270 integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 1270 integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
1271 1271
1272async@^2.6.4:
1273 version "2.6.4"
1274 resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
1275 integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==
1276 dependencies:
1277 lodash "^4.17.14"
1278
1272async@^3.2.3: 1279async@^3.2.3:
1273 version "3.2.4" 1280 version "3.2.4"
1274 resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" 1281 resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
@@ -1315,6 +1322,13 @@ balanced-match@^1.0.0:
1315 resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 1322 resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
1316 integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 1323 integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
1317 1324
1325basic-auth@^2.0.1:
1326 version "2.0.1"
1327 resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a"
1328 integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==
1329 dependencies:
1330 safe-buffer "5.1.2"
1331
1318binary-extensions@^2.0.0: 1332binary-extensions@^2.0.0:
1319 version "2.2.0" 1333 version "2.2.0"
1320 resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 1334 resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
@@ -1399,7 +1413,7 @@ chalk@^2.0.0:
1399 escape-string-regexp "^1.0.5" 1413 escape-string-regexp "^1.0.5"
1400 supports-color "^5.3.0" 1414 supports-color "^5.3.0"
1401 1415
1402chalk@^4.0.0, chalk@^4.0.2: 1416chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.2:
1403 version "4.1.2" 1417 version "4.1.2"
1404 resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 1418 resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
1405 integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 1419 integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -1476,6 +1490,11 @@ core-js-compat@^3.21.0, core-js-compat@^3.22.1:
1476 browserslist "^4.21.0" 1490 browserslist "^4.21.0"
1477 semver "7.0.0" 1491 semver "7.0.0"
1478 1492
1493corser@^2.0.1:
1494 version "2.0.1"
1495 resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87"
1496 integrity sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==
1497
1479cross-spawn@^7.0.2: 1498cross-spawn@^7.0.2:
1480 version "7.0.3" 1499 version "7.0.3"
1481 resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 1500 resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
@@ -1500,6 +1519,13 @@ csstype@^2.6.8:
1500 resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda" 1519 resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda"
1501 integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA== 1520 integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
1502 1521
1522debug@^3.2.7:
1523 version "3.2.7"
1524 resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
1525 integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
1526 dependencies:
1527 ms "^2.1.1"
1528
1503debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: 1529debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
1504 version "4.3.4" 1530 version "4.3.4"
1505 resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 1531 resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
@@ -1872,6 +1898,11 @@ esutils@^2.0.2:
1872 resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1898 resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
1873 integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1899 integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
1874 1900
1901eventemitter3@^4.0.0:
1902 version "4.0.7"
1903 resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
1904 integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
1905
1875fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 1906fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
1876 version "3.1.3" 1907 version "3.1.3"
1877 resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1908 resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@@ -1952,6 +1983,11 @@ flatted@^3.1.0:
1952 resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" 1983 resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2"
1953 integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== 1984 integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==
1954 1985
1986follow-redirects@^1.0.0:
1987 version "1.15.2"
1988 resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
1989 integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
1990
1955fs-extra@^9.0.1: 1991fs-extra@^9.0.1:
1956 version "9.1.0" 1992 version "9.1.0"
1957 resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" 1993 resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
@@ -2108,6 +2144,53 @@ has@^1.0.3:
2108 dependencies: 2144 dependencies:
2109 function-bind "^1.1.1" 2145 function-bind "^1.1.1"
2110 2146
2147he@^1.2.0:
2148 version "1.2.0"
2149 resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
2150 integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
2151
2152html-encoding-sniffer@^3.0.0:
2153 version "3.0.0"
2154 resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
2155 integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==
2156 dependencies:
2157 whatwg-encoding "^2.0.0"
2158
2159http-proxy@^1.18.1:
2160 version "1.18.1"
2161 resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
2162 integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
2163 dependencies:
2164 eventemitter3 "^4.0.0"
2165 follow-redirects "^1.0.0"
2166 requires-port "^1.0.0"
2167
2168http-server@^14.1.1:
2169 version "14.1.1"
2170 resolved "https://registry.yarnpkg.com/http-server/-/http-server-14.1.1.tgz#d60fbb37d7c2fdff0f0fbff0d0ee6670bd285e2e"
2171 integrity sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==
2172 dependencies:
2173 basic-auth "^2.0.1"
2174 chalk "^4.1.2"
2175 corser "^2.0.1"
2176 he "^1.2.0"
2177 html-encoding-sniffer "^3.0.0"
2178 http-proxy "^1.18.1"
2179 mime "^1.6.0"
2180 minimist "^1.2.6"
2181 opener "^1.5.1"
2182 portfinder "^1.0.28"
2183 secure-compare "3.0.1"
2184 union "~0.5.0"
2185 url-join "^4.0.1"
2186
2187iconv-lite@0.6.3:
2188 version "0.6.3"
2189 resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
2190 integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
2191 dependencies:
2192 safer-buffer ">= 2.1.2 < 3.0.0"
2193
2111idb@^7.0.1: 2194idb@^7.0.1:
2112 version "7.1.0" 2195 version "7.1.0"
2113 resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.0.tgz#2cc886be57738419e57f9aab58f647e5e2160270" 2196 resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.0.tgz#2cc886be57738419e57f9aab58f647e5e2160270"
@@ -2414,7 +2497,7 @@ lodash.sortby@^4.7.0:
2414 resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 2497 resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
2415 integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== 2498 integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==
2416 2499
2417lodash@^4.17.20, lodash@^4.17.21: 2500lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21:
2418 version "4.17.21" 2501 version "4.17.21"
2419 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 2502 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
2420 integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 2503 integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -2451,6 +2534,11 @@ micromatch@^4.0.4:
2451 braces "^3.0.2" 2534 braces "^3.0.2"
2452 picomatch "^2.3.1" 2535 picomatch "^2.3.1"
2453 2536
2537mime@^1.6.0:
2538 version "1.6.0"
2539 resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
2540 integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
2541
2454minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 2542minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
2455 version "3.1.2" 2543 version "3.1.2"
2456 resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 2544 resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
@@ -2465,11 +2553,28 @@ minimatch@^5.0.1:
2465 dependencies: 2553 dependencies:
2466 brace-expansion "^2.0.1" 2554 brace-expansion "^2.0.1"
2467 2555
2556minimist@^1.2.6:
2557 version "1.2.7"
2558 resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
2559 integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
2560
2561mkdirp@^0.5.6:
2562 version "0.5.6"
2563 resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
2564 integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
2565 dependencies:
2566 minimist "^1.2.6"
2567
2468ms@2.1.2: 2568ms@2.1.2:
2469 version "2.1.2" 2569 version "2.1.2"
2470 resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 2570 resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
2471 integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 2571 integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
2472 2572
2573ms@^2.1.1:
2574 version "2.1.3"
2575 resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
2576 integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
2577
2473nanoid@^3.3.4: 2578nanoid@^3.3.4:
2474 version "3.3.4" 2579 version "3.3.4"
2475 resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" 2580 resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
@@ -2524,6 +2629,11 @@ once@^1.3.0:
2524 dependencies: 2629 dependencies:
2525 wrappy "1" 2630 wrappy "1"
2526 2631
2632opener@^1.5.1:
2633 version "1.5.2"
2634 resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
2635 integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
2636
2527optionator@^0.9.1: 2637optionator@^0.9.1:
2528 version "0.9.1" 2638 version "0.9.1"
2529 resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 2639 resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
@@ -2587,6 +2697,15 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1:
2587 resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2697 resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
2588 integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2698 integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
2589 2699
2700portfinder@^1.0.28:
2701 version "1.0.32"
2702 resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81"
2703 integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==
2704 dependencies:
2705 async "^2.6.4"
2706 debug "^3.2.7"
2707 mkdirp "^0.5.6"
2708
2590postcss-selector-parser@^6.0.9: 2709postcss-selector-parser@^6.0.9:
2591 version "6.0.10" 2710 version "6.0.10"
2592 resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" 2711 resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d"
@@ -2645,6 +2764,13 @@ punycode@^2.1.0:
2645 resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 2764 resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
2646 integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 2765 integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
2647 2766
2767qs@^6.4.0:
2768 version "6.11.0"
2769 resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
2770 integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
2771 dependencies:
2772 side-channel "^1.0.4"
2773
2648queue-microtask@^1.2.2: 2774queue-microtask@^1.2.2:
2649 version "1.2.3" 2775 version "1.2.3"
2650 resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 2776 resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
@@ -2731,6 +2857,11 @@ require-from-string@^2.0.2:
2731 resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 2857 resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
2732 integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 2858 integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
2733 2859
2860requires-port@^1.0.0:
2861 version "1.0.0"
2862 resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
2863 integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
2864
2734resolve-from@^4.0.0: 2865resolve-from@^4.0.0:
2735 version "4.0.0" 2866 version "4.0.0"
2736 resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 2867 resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
@@ -2788,15 +2919,20 @@ run-parallel@^1.1.9:
2788 dependencies: 2919 dependencies:
2789 queue-microtask "^1.2.2" 2920 queue-microtask "^1.2.2"
2790 2921
2922safe-buffer@5.1.2, safe-buffer@~5.1.1:
2923 version "5.1.2"
2924 resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
2925 integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
2926
2791safe-buffer@^5.1.0: 2927safe-buffer@^5.1.0:
2792 version "5.2.1" 2928 version "5.2.1"
2793 resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2929 resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
2794 integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2930 integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
2795 2931
2796safe-buffer@~5.1.1: 2932"safer-buffer@>= 2.1.2 < 3.0.0":
2797 version "5.1.2" 2933 version "2.1.2"
2798 resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2934 resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
2799 integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2935 integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
2800 2936
2801sass@^1.55.0: 2937sass@^1.55.0:
2802 version "1.55.0" 2938 version "1.55.0"
@@ -2807,6 +2943,11 @@ sass@^1.55.0:
2807 immutable "^4.0.0" 2943 immutable "^4.0.0"
2808 source-map-js ">=0.6.2 <2.0.0" 2944 source-map-js ">=0.6.2 <2.0.0"
2809 2945
2946secure-compare@3.0.1:
2947 version "3.0.1"
2948 resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3"
2949 integrity sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==
2950
2810semver@7.0.0: 2951semver@7.0.0:
2811 version "7.0.0" 2952 version "7.0.0"
2812 resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" 2953 resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
@@ -3058,6 +3199,13 @@ unicode-property-aliases-ecmascript@^2.0.0:
3058 resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" 3199 resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8"
3059 integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== 3200 integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==
3060 3201
3202union@~0.5.0:
3203 version "0.5.0"
3204 resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075"
3205 integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==
3206 dependencies:
3207 qs "^6.4.0"
3208
3061unique-string@^2.0.0: 3209unique-string@^2.0.0:
3062 version "2.0.0" 3210 version "2.0.0"
3063 resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" 3211 resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
@@ -3090,6 +3238,11 @@ uri-js@^4.2.2:
3090 dependencies: 3238 dependencies:
3091 punycode "^2.1.0" 3239 punycode "^2.1.0"
3092 3240
3241url-join@^4.0.1:
3242 version "4.0.1"
3243 resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
3244 integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
3245
3093util-deprecate@^1.0.2: 3246util-deprecate@^1.0.2:
3094 version "1.0.2" 3247 version "1.0.2"
3095 resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 3248 resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -3148,6 +3301,13 @@ webidl-conversions@^4.0.2:
3148 resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" 3301 resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
3149 integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== 3302 integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
3150 3303
3304whatwg-encoding@^2.0.0:
3305 version "2.0.0"
3306 resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53"
3307 integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==
3308 dependencies:
3309 iconv-lite "0.6.3"
3310
3151whatwg-url@^7.0.0: 3311whatwg-url@^7.0.0:
3152 version "7.1.0" 3312 version "7.1.0"
3153 resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" 3313 resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06"